作者:範倆仟Sam
文章之前先推薦下張大媽的更新的小組功能,現在小組就少一個人,就是你。
如果你也喜歡玩遊戲
張大媽【我愛玩遊戲】小組期待你的加入!
你可以與有共同愛好的玩家交流
你可以獲得新鮮有趣的資訊
你可以來分享你的遊戲體驗快來加入我們,沒有你,我們的小組不完整!
>>點我進組<<
我有一個開源掌機沙雕2.5,有的時候玩遊戲時間長了,按鍵太小會按的拇指疼
我還有一個雷神G50手柄,想連連這個安卓掌機玩遊戲試試看,
但是連接上手柄後完全沒有反應,我不理解,因為這個手柄是可以在手機上用的。
我一開始以為是沙雕2.5的鍵位映射有問題,一直想通過root導入映射文件來解決,後來我發現確實是映射的問題,但不是我想的那種。
下面我分享下我探索的過程,因為我覺得這是一個系統問題,因為沙雕2.5並不是不支持手柄,我最後通過其它方式解決了。
首先我不會安卓開發,不會寫代碼,就是一點點摸索出來的,所以我説的對不對我也不知道,只是我嘗試之後,邏輯都是自洽的,希望官方可以看到,然後修復這個問題。
一,正常的鍵位映射
首先需要下載一個MT管理器,這個軟件不能修改文件,但是可以看文件。
我先舉個例子,下面是一個正常可以安卓映射鍵位的流程。
首先打開/system/usr/keylayout/,在這個文件夾下,你會看到各種各樣的鍵位映射文件,前幾個就是最基礎的安卓鍵位映射,後面帶格式的映射文件都是通過前幾個文件來映射的。
後幾個文件文件名都是有格式的,一般都是Vendor:【代號】+Product:【代號】
然後我們再打開proc/bus/input/devices這個文件
這個文件是實時更新的,連輸入設備之前和之後是不一樣的,
比如我連接了手柄後,會在最下方更新出來一段代碼,可以看到顯示出來是雷神G50手柄。
我們仔細看下這段代碼,我劃線的兩段都很重要先解釋第一個,
Vendor=1949,就對應的我第一個打開的文件夾,説明映射的是哪個鍵位映射文件。
回去看一下,還真的找到了1949這個文件,但是後面的Product沒對應上,代碼上是0402,文件上是0401。
不過手柄是能用的。
打開這個文件之後看到對應的是亞馬遜的TV遙控器,看來G50是用的亞馬遜的映射。
然後我們再重新看下那行代碼,我看第二個橫線,這裏對應着mouse2與event8
然後你打開/dev/input/可以看到這些文件,連接輸入設備後會多了兩個文件,正好就對應上面的兩個名稱。
以上是一個正常的鍵位映射流程,這包括藍牙,紅外,USB,基本都是這個流程。
然後我們看看沙雕2.5問題出在哪裏。
二,沙雕2.5為什麼不能用雷神G50手柄?
首先我們打開看看/system/usr/keylayout/有沒有1949的文件,是有的,打開之後對應的也是亞馬遜的TV遙控器。
然後連接新的輸入設備之前我們打開proc/bus/input/devices看一下最後一個鍵位映射是哪個?是2020的X-box 360手柄,之後我們就知道多出來的代碼從哪開始了。
然後我們用同樣的方式連接雷神G50藍牙手柄,看看多了哪些代碼
結果沙雕2.5多了兩段代碼,名稱還都是雷神G50,為什麼會多了兩個代碼我也不知道.
看Handlers那行,對應的分別是mouse0,js1,event7與mouse1,event8
然後你打開/dev/input/,你會發現event7沒有了。
到這裏破案了,就是因為event7沒了,所以手柄用不了。
然後我就做了很多實驗
1,發現並不是所有藍牙輸入設備都會有兩行代碼,比如小米遙控器就只有一段代碼,我有個藍牙鍵盤也是一段代碼,我還有個羅技藍牙鼠標M558是兩行代碼。
2,羅技藍牙鼠標M558也是缺失的一個event,但是這個鼠標是可以使用的。
3,我對比單獨連接手柄或者鼠標產生的兩端代碼,發現除了本應該對應的映射文件代碼,都會多了一個對應Vendor:2020+Product:0111的鍵位映射。
4,我分別嘗試連接這兩個兩行代碼的輸入設備,我發現只有第一個連接的輸入設備會產生兩行代碼,第二個設備就會恢復正常,只有一行代碼。
5,下圖是我先連接小米遙控器,再連接羅技鼠標,再連接手柄的截圖,手柄可以用了。
可能問題就處在2020這個文件,我打開【沙雕2.5】與【可以正常使用手柄的手機】的/system/usr/keylayout/,對比了一下,發現只有沙雕有2020這個文件,手機是沒有的。
打開文件翻譯一下【用於全字母美國英語 PC 風格外接鍵盤的通用按鍵佈局文件】
2020?前面看過啊,沙雕2.5在未連接藍牙設備之前最後一個就是2020,這個鍵位映射應該就是設置裏手柄風格那個Xbox的映射。
所以,為什麼我使用羅技鼠標與雷神手柄會觸發這個映射,我也不知道。
希望廠家可以修復這個問題。