1. 程式人生 > 其它 >羅技方向盤套件開發記錄

羅技方向盤套件開發記錄

一、專案要求:

捕獲羅技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的封裝

兩個庫下載後順利編譯執行,有待驗證

引用請註明出處