這是一套連載文章,用以記錄大眼睛串連藍芽手柄的全過程。謹以此文獻給那一周我缺失的睡眠。
此文的性質相當於(公開的)個人日記,未經本人允許,請勿轉載。
上文說到,發現了另一條出路:linmctool。看起來這個東西比hidd更靠譜一些,因為它是針對SixAxis所做的,它肯定包含了與SixAxis之間的通訊。
好吧,我需要試試它能不能用。
我翻遍了Google,都沒有找到它的Binary。只能自己編譯了。
我花費了大量的時間,研究如何編譯成二進位檔案。經搜尋發現,他們把直接在命令列中啟動並執行二進位檔案叫做“本地代碼”或“原生代碼”,原名為“Native code”。原來如此。繼續Google。
首先我看了這兩篇:
Android原生(Native)C開發之八:Toolchain環境搭建篇
Android C native development using the NDK under Windows
看完這篇文章我才明白,Android開發真的很麻煩。不像Windows,做好軟體,裝個運行時,就行了。Android因為運行在各種平台,編譯環境很複雜。要”交叉編譯“才行。唉,我按照這篇文章搞了很久沒搞定,因為google對各種 SDK NDK之類的更新太快了,有些地方和教程不一樣了,我很迷茫,又沒有人教。
後來看了這一篇:
Android C native development – take full control!
最後決定,還是用虛擬機器跑Ubuntu吧,這個更可靠一些。
很重要的參考文章:
ubuntu12.10安裝交叉編譯器arm-none-linux-gnueabi-gcc
費了很大的勁,終於安裝好了arm-none-linux-gnueabi-gcc。話說這名字真長!
接下來免不了要編譯個HelloWorld.c測試一下,push到大眼睛中運行了一下,很正常。
adb push hello /data/local/tmpadb shell chmod 777 /data/local/tmp/helloadb shell /data/local/tmp/hello
好,至此,幹活的工具有了。開始吧,拿來linmctool的源碼,按照說明去編譯:
arm-none-linux-gnueabi-gcc --std=gnu99 -Wall -DWITHOUT_USB linmctool-20110304.c -o linmctool
由於我的藍芽早已配對成功,所以就帶上了 -DWITHOUT_USB 參數,減少編譯錯誤的可能性。但這樣仍然是出現了一堆錯誤,各種.h檔案不匹配。從網上到處尋找,才得以成功編譯。編譯好了,趕緊PUSH到大眼睛裡試試吧。
adb push linmctool /data/local/tmpadb shell chmod 777 /data/local/tmp/linmctooladb shell /data/local/tmp/linmctool
運行成功。按了一下SixAxis上的PS鍵,奇蹟終於出現了。螢幕上出現了一行行的按鍵狀態報表。雖然手柄上的指示燈還在閃爍,但它不會停下來了,按什麼鍵都有反應了!下一篇繼續興奮吧。
題外話,在很長一段時間,我都是用的虛擬機器Ubuntu下的arm-none-linux-gnueabi-gcc來編譯。由於不會用VIM,在Ubuntu下編輯文字很累。我只好用上了區域網路共用。真的是太累了。
直到最後,我才發現了有個更好的工具,可以直接在Windows下使用,它就是
CodeSourcery CodeBench Lite,它可以直接在Windows中運行並編譯出Android的本地代碼。