看板 NSwitch 關於我們 聯絡資訊
小屋好讀版 https://home.gamer.com.tw/creationDetail.php?sn=3926974 嗨各位好,我是怪人 個人有一台羅技G27,但是在PS3掛點之後,已經兩年還是三年沒上電過了 而在之前的文章Switch硬體外掛完成一文中, https://www.ptt.cc/bbs/NSwitch/M.1516637548.A.A0C.html 我有詳細的寫模擬搖桿的過程 不過那邊主要控制主要是在微處理器端(STM32F429) 所以這次要將控制交給電腦端 這邊我先放上成品 https://www.youtube.com/watch?v=vSb4KIuLlec
↑懶得拍更新了,CODE有優化很多 簡單的流程是 C# (羅技SDK)→USB TO UART→STM32F429→USB HID→Switch 個人C#那邊可能會有些錯誤,因為從零開始接觸C#才一個禮拜= = 請多包涵 我們一開始要下載羅技的方向盤SDK,以及安裝Logitech 遊戲軟體 https://www.logitechg.com/zh-tw/developers http://support.logitech.com/zh_tw/product/g27-racing-wheel/downloads# https://i.imgur.com/HIsnH3z.png 這邊簡單的就是把裡面的LogitechGSDK.cs放入我們的專案 之後把SDK的 LogitechSteeringWheelEnginesWrapper.dll 放入我們的輸出exe路徑上 詳細的涵式可以參考這裡 罗技游戏方向盘软件开发工具包 首先用這個函式初始化 LogitechGSDK.LogiSteeringInitialize(true); 之後調用函式搜尋設備 while ((!LogitechGSDK.LogiIsModelConnected(device_index, 0)) && (device_index <= 100)) 其中0的地方是設備代號,因為我的設備是G27,這裡為零 這樣我們就知道device_index是哪一個了 而DIJOYSTATE2ENGINES 結構內,就是我們要的方向盤數值了 https://i.imgur.com/wTtK8jc.png 這邊我簡單的說明一下 圖中的0.1.2.3.4是rgbButtons[128]的陣列位置,如果按下,陣列值為128 方向盤為1X,範圍是-32768~32768 油門是 1Y,範圍是-32768~32768 離合器是rglSlider[1] ,範圍是-32768~32768 d-pad為 rgdwPOV[0] ,數值很奇怪,我也不知道為啥 上下左右分別為0,18000,27000,9000 ------------------------- 之後就要講到Switch搖桿部分 之前我是發送一個字元,比如說ASCII "A",MCU端就發送 {0x04,0x00,0x0f,0x80,0x80,0x80,0x80,0x00} ←這是按紐A的陣列 不過在這會發生問題,如果我邊甩尾邊按油門,或者丟道具 這就起衝突了,所以我改成讓PC C# UART丟甚麼,MCU就跟著丟甚麼 https://i.imgur.com/7E3gwbC.png mcu端主要是靠這兩行 USBD_HID_SendReport(&hUsbDeviceHS, TO_SWITCH, 8); //USB發送HID報告 HAL_UART_Receive_IT(&huart1, RxData,8); //UART 每八筆開啟中斷 在C#端,如果要發送給Switch 多組按鈕按下的資訊,就要用加法了 像是按鈕L的數值是0x10,R的數值是0x20,如果L+R一起按,發送就是0x30了 另外則是說,G27方向盤轉向的數值範圍是-32768~32768 這邊我們就要轉成0~128~256 也就是操控範圍小了256倍XDDDD 我是這樣寫的 TO_SWITCH[3] = Convert.ToByte(((wheel_input.lX * 128) / 32768) + 128); ↑右轉 https://www.youtube.com/watch?v=FxqozTfqbHw
阿對,忘記說陣列的用途了 uint8_t to_switch[8] ={0x00,0x00,0x0f,0x80,0x80,0x80,0x80,0x00}; to_switch[0] 中,主要是控制按鈕的 例如ABXY L R 等等 to_switch[1]中,主要是控制HOME鍵,拍照鍵 to_switch[2]中,主要是控制D-PAD to_switch[3]中,主要是控制左類比 左至右 0~255 to_switch[4]中,主要是控制左類比 上至下 0~255 to_switch[5]中,主要是控制右類比 左至右 0~255 to_switch[6]中,主要是控制右類比 左至右 0~255 to_switch[7]中,未知 這樣子,兜了一大圈,我們終於可以用G27控制Switch了! -- 今天去醫院,醫生說:你有30年的煙齡,你如果不抽煙,菸的的錢都夠買賓士了。 我一聽就不爽了。 我就反問醫生:「你抽煙嗎」? 醫生說:我不抽啊。 我又問:那他媽你的賓士呢? 醫生說:在樓下停著呢,怎麼了? 我說:沒什麼,我問問而已。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.126.242.183 ※ 文章網址: https://www.ptt.cc/bbs/NSwitch/M.1521542605.A.A18.html ※ 編輯: wayne30349 (59.126.242.183), 03/20/2018 18:47:50
tom11725: 快推免得被發現看不懂 03/20 18:48
humour: 快推,可是我還是看不懂XD 03/20 18:50
efendi: 了不起!給你給推 03/20 18:51
asd456fgh778: 推 不覺得怪 03/20 18:51
Feishawn: 好屌... 03/20 18:52
a3831038: 也太猛... 03/20 18:54
chewie: 強大! 03/20 18:56
qLittleJp987: 有看你在巴哈發的文 所以延遲有解決嗎 03/20 19:03
目前是把C#固定丟資料的timer_tick簡短就不會延遲了
wewe10112: 推看不懂 03/20 19:07
moneydream: 記得延遲很悲劇,辛苦實驗還是推ㄧ個 03/20 19:09
nyaconeco: 太神了 03/20 19:09
※ 編輯: wayne30349 (59.126.242.183), 03/20/2018 19:10:19
h89815: 好強 可是感覺輕手方向盤很難操控 03/20 19:12
beansop: 太神啦!! 03/20 19:18
rf3: d-pad那個應該是角度吧(趕快不懂裝懂 03/20 19:29
loezone: 所以可以用這個打漆彈囉 03/20 19:47
SamFuld: 沒錯 跟我想得差不多 03/20 19:49
silentlee: 我到底看了三小 03/20 19:53
sulfu: 你好,這是我的膝蓋 03/20 19:55
turbojoeman: 請問搞多久時間? 03/20 20:03
如果不算開始學C#的話 上禮拜六 日 一 共三天 ※ 編輯: wayne30349 (59.126.242.183), 03/20/2018 20:05:14
zzz3345678: 推 03/20 20:09
kaihung46: 真的神了 03/20 20:11
phaseshift: 文組崩潰 03/20 21:23
cunice: 推 要怎樣才能玩會這些關卡呀!? 03/20 21:28
applewarm: 太強 03/20 22:04
Richie1105: 強者欸 03/20 22:17
zazerlin: 推 03/20 23:23
qq66332211: 快推 不明覺厲 03/20 23:41
roger840410: 快推不然會被發現看不懂 03/21 00:00
wensly123: 嗯嗯 原來是這樣 快推 03/21 00:11
david7112123: 推 03/21 01:24
seerp: 推 03/21 02:49
gtrx: 喔喔喔 原來是這樣 03/21 09:33
kyukyu: ..... 03/21 12:16
wappie3524: d-pad的數值是不是指東西南北(0,90,180,270)? 12/25 13:44