羅技方向盤套件開發記錄
一、專案要求:
捕獲羅技G29資料,並進行UDP轉發。
二、過程:
(一)不安裝官方驅動,直接插入USB口,在控制面板的裝置頁面能找到遊戲控制器,開啟測試對話方塊,按鈕是有反應的。
於是使用GitHub上的一個封裝庫SharpDirectInput,發現可以採集到大部分資料,但仍有資料無法採集。
回到控制面板的裝置頁面,找到遊戲控制器測試對話方塊,也是不支援全部按鈕,不支援離合器。估計這個也是用了DirectInput技術。
類似的參考文章:
https://blog.csdn.net/fedora08/article/details/2643873?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-13.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-13.no_search_link
(二)使用羅技SDK;
1.安裝官方驅動,即LG遊戲軟體: https://support.logi.com/hc/zh-cn/articles/360025298053
2.下載官方SDK: https://www.logitechg.com.cn/zh-cn/innovation/developer-lab.html
開啟官方Demo發現無資料出現,而LG遊戲軟體裡面(點上方配置檔案裡面的測試)有資料出現。經過多臺計算機反覆實驗,必須在拔掉G29USB後,先刪除控制面板->裝置裡面系統預設安裝的驅動程式——遊戲控制器,有的系統還會多安裝一個什麼管理器,也要刪掉;然後重新安裝LG遊戲軟體。然後插上G29的USB,點選Demo的init,觸動G29,即可收到資料。
3.利用提供的SDK進行程式設計即可收到所有資料。
4.但是,利用官方SDK要保證LG遊戲軟體始終執行。還有個更大的問題,就是必須保證呼叫SDK的應用程式視窗始終在最前面。
參考文章:
(三)使用winmm.dll介面程式設計,主要用到的函式:
joyGetDevCaps 查詢指定的遊戲杆裝置以確定其效能
joyGetNumDevs 返回系統支援的遊戲杆裝置的數量
joyGetPos 查詢指定的遊戲杆裝置的位置和活動性
joyGetPosEx 查詢一個遊戲杆裝置的位置和它的按扭狀態
joyGetThreshold 查詢指定的遊戲杆裝置的當前移動閾值
joyReleaseCapture 釋放由JoySetCapture函式設定的在指定遊戲杆裝置上的捕獲
joySetCapture 傳送一個遊戲杆訊息到指定的視窗
joySetThreshold 設定指定的遊戲杆裝置的移動閾值
這個待驗證
(四)經過研究,發現DirectInput技術已經過時,目前用XInput技術
微軟的解釋:https://docs.microsoft.com/en-us/windows/win32/xinput/xinput-versions
其中提到:XInput is a cross-platform API that has shipped for use on Xbox and Windows.
可見這是用來在Windows平臺上對接Xbox裝置的一組API,後面文字提到比DirectInput哪裡好。
回到羅技官方售賣頁面,發現方向盤套件分為G20和G920兩種,前者是PS3\PS4標準,後者是XBox標準。網上查了一下,前者是用在日本遊戲機上,後者是用在歐美遊戲機上,而前文所述微軟的XInput這套API是針對XBox提供的。難道要換成G920嗎?
待驗證
(五)使用其它針對joystick封裝好的庫
參考文章:https://blog.csdn.net/yu_lei_/article/details/83218744,裡面提到Github上面的兩個庫
SDL - mirror / SDL :這個庫比較大,包括joystick在內的多個Direct3D支援,但是看意思也是基於Direct的。
Tasssadar / libenjoy:這個庫比較簡單,基本是對winmm.dll的封裝
兩個庫下載後順利編譯執行,有待驗證
引用請註明出處