pretty code

2022年4月4日 星期一

kobo-btpt 真是個有趣的專案

去年 Elipsa 剛出來時,網路上就有人提到有些藍牙裝置雖然可以跟 Elipsa 連接,但可能送出的事件,不是 Elipsa 有監聽的(這裡指的是閱讀軟體,也就是那個 Qt5 GUI),故無法使用那些裝置來翻頁。因為我本來就有可以順利連線的 Logitech R500,所以也沒有很在意這件事。

今年陸續有人問我藍牙翻頁器的事,詢問為什麼 Libra 2 都不能用?我的第一直覺應該就是藍牙相容性的問題,畢竟連旗艦機種 Elipsa 上的藍牙相容性都 2266,更何況是最便宜的 Libra 2?我當初也覺得應該是翻頁器太便宜,如果是使用 Logitech R500 應該是輕鬆就能搞定。直到有人說他買了 R500 後續機種也不能使用翻頁器後,才引起我的興趣。

本來是想直接去三創測試,但內心覺得可能沒那麼簡單,故最後還是買了一台 Libra 2 回來研究,原本就預期測試完就賣掉,故選擇人氣比較旺的白色機種,坦白說,白色外殼真的是很刺眼,真不知道為什麼大家都說白色好看,根本就就不適合用來閱讀。

一到手就知道 Libra 2 的藍牙沒那麼簡單,R500 光配對就搞了老半天,有時候明明連接上了卻一直顯示未連接,還好過程中發現可以使用 /bin/bluetoothctl 來 debug,才能順利連線,果不其然,我也無法使用 R500 來翻頁。

但因為我之前就知道 kobo-btpt 這個專案,也知道該作者順利使用 8BitDo Zero 2 搖桿來翻頁,故我直覺搞不好可以使用便宜的藍牙滑鼠 + kobo-btpt 就可以順利翻頁。

一開始我的藍牙滑鼠 E-PCG233 可以長出 /dev/input/eventX 裝置,evtest 也可以抓到不同的左右鍵事件,但不論我怎樣設定,kobo-btpt 都沒有反應。

還好,open source 的威力在此就展現出來,下載 source code 研究後,發現設定檔最後一行不能有換行字元,因為程式會以為它是不正確的設定就不把這個裝置加入。

搞定這個後,還是無法順利翻頁,沒關係我們有無敵絕招 printf 大法,在修改程式碼並印出收到的事件後,我才知道 evtest 抓到的 value 欄位是 16 進制,修改之後,果然可以順利翻頁。雖然我買的便宜滑鼠一次會發送兩次事件,導致一次翻頁多頁,但這又是另外一個故事了 ~~

總之,很多事的成功都必須先有先前一點一滴的累積努力,最後才能順利的水到渠成。做事最忌諱一步登天,慎之慎之。

修改 kobo-btpt 原始碼需要知道的事

01. 知道 NickelHook 是什麼。
02. 會基本的 Linux 操作。
03. 知道 Cross-Compiler (Docker - NickelTC)。
04. 知道 /dev/input/eventX 。
05. 看得懂 C/C++ 語言。
06. 知道 QT。
07. 知道 makefile。

上面只要到知道的程度及可,不需到專精,應該就有辦法改 source code 了。

2022/04/05 更新

E-PCG233 這支滑鼠在我的 Elipsa 一樣是按下鍵後會收到兩次事件,但奇怪的是我幫 kobo-btpt 加上的 filter 似乎可以起作用,我的 filter 在過短的時間內,如果收到相同的事件,我會不讓 kobo-btpt 觸發翻頁的動作。


不過同樣的 filter 在 Libra 2 就無法成功,且印出訊息時感覺呼叫 Kobo 藍牙翻頁的函式似乎是非同步呼叫,故訊息印出的順序很怪(後來找到問題了,其實 filter 是有成功的,但我誤把原始的 libbtpt.so 改名後一樣放在 /usr/local/Kobo/imageformat 下,導致 Kobo 同時執行了兩支 libbtpt.so)?

總之,我只是想確定 kobo-btpt 的用途,結論就是只要是可以連接 Kobo 系統並可以長出 /dev/input/eventX 的藍牙裝置,如果遇到無法翻頁,可以透過安裝 kobo-btpt 去監聽使用者註冊的事件,只要收到註冊的事件,kobo-btpt 便會幫我們呼叫 Kobo 底層系統的藍牙翻頁函式(透過 NickelHook)

2022/04/08 更新

kobo-btpt 使用說明(搭配 8BitDo Zero 2 gamepad):

01. 去 kobo-btpt 網站下載 v0.0.2 版的 KoboRoot.tgz。
02. 將閱讀器插上電腦,確認檔案總管可以看到隱藏資料夾。
03. 將下載下來的 KoboRoot.tgz 放到機器的 ".kobo" 資料夾並退出閱讀器,此時閱讀器應該會重開機。
04. 重開機後一樣將閱讀器插上電腦,此時應該可以看到 ".btpt" 資料夾。
05. 將此檔案下載下來並放到 ".btpt" 資料夾,檔名只能是 "8BitDo Zero 2 gamepad",然後將閱讀器重開機並進到藍牙設定頁面。
06. 按下 8BitDo Zero 2 的 X 鍵start 鍵,進入 X-Input 模式後,然後長按 select 鍵進入藍牙配對模式。
07. 配對成功後,回到書本閱讀頁面能夠翻頁就是成功了,不行就在藍牙設定畫面忘記裝置再重新配對。

1 則留言:

何咨泓 提到...

新手入坑,感謝前輩指導解決了翻頁器的問題