|
@@ -7,7 +7,9 @@
|
|
|
/>
|
|
/>
|
|
|
</template>
|
|
</template>
|
|
|
<script setup lang="ts">
|
|
<script setup lang="ts">
|
|
|
-import { computed, onUnmounted, ref } from 'vue'
|
|
|
|
|
|
|
+import { invoke } from '@tauri-apps/api/core'
|
|
|
|
|
+import { listen } from '@tauri-apps/api/event'
|
|
|
|
|
+import { computed, ref } from 'vue'
|
|
|
import { useMessage } from 'naive-ui'
|
|
import { useMessage } from 'naive-ui'
|
|
|
import useStore from '@/store'
|
|
import useStore from '@/store'
|
|
|
|
|
|
|
@@ -17,35 +19,27 @@ const store = useStore()
|
|
|
const rtcConnected = computed(() => store.rtcConnected)
|
|
const rtcConnected = computed(() => store.rtcConnected)
|
|
|
const show = ref(false)
|
|
const show = ref(false)
|
|
|
|
|
|
|
|
-// 更新游戏手柄数据
|
|
|
|
|
-function updateGamepadData() {
|
|
|
|
|
- const gamepads = navigator.getGamepads()
|
|
|
|
|
- const gamepad = gamepads[0] // 获取第一个连接的游戏手柄
|
|
|
|
|
- if (gamepad) {
|
|
|
|
|
- // 显示游戏手柄数据
|
|
|
|
|
- emit('callBack', gamepad)
|
|
|
|
|
|
|
+function parseG923Data(data) {
|
|
|
|
|
+ // 假设数据是一个数组,例如 [128, 255, 0, 0, ...]
|
|
|
|
|
+ const buffer = new Uint8Array(data)
|
|
|
|
|
+
|
|
|
|
|
+ // 解析转向值(假设存储在 buffer[0] 和 buffer[1] 中,小端序)
|
|
|
|
|
+ const steeringValue = (buffer[1] << 8) | buffer[0]
|
|
|
|
|
+
|
|
|
|
|
+ // 解析刹车值(假设存储在 buffer[2] 中)
|
|
|
|
|
+ const brakeValue = buffer[2]
|
|
|
|
|
+
|
|
|
|
|
+ return {
|
|
|
|
|
+ steering: steeringValue,
|
|
|
|
|
+ brake: brakeValue
|
|
|
}
|
|
}
|
|
|
- // 循环更新数据
|
|
|
|
|
- return requestAnimationFrame(updateGamepadData)
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// 监听游戏手柄连接事件
|
|
|
|
|
-window.addEventListener('gamepadconnected', (event) => {
|
|
|
|
|
- console.log('Gamepad connected:', event.gamepad)
|
|
|
|
|
- show.value = true
|
|
|
|
|
- updateGamepadData()
|
|
|
|
|
|
|
+invoke('start_reading_data')
|
|
|
|
|
+listen('g923-data', (event) => {
|
|
|
|
|
+ const data = event.payload
|
|
|
|
|
+ const parsedData = parseG923Data(data)
|
|
|
|
|
+ console.log('解析后的 G923 数据:', data, parsedData)
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
-// 监听游戏手柄断开事件
|
|
|
|
|
-window.addEventListener('gamepaddisconnected', () => {
|
|
|
|
|
- show.value = false
|
|
|
|
|
- cancelAnimationFrame(updateGamepadData())
|
|
|
|
|
- message.warning('控制器断开')
|
|
|
|
|
-})
|
|
|
|
|
-
|
|
|
|
|
-onUnmounted(() => {
|
|
|
|
|
- cancelAnimationFrame(updateGamepadData())
|
|
|
|
|
- window.removeEventListener('gamepadconnected', () => { show.value = false })
|
|
|
|
|
- window.removeEventListener('gamepaddisconnected', () => { show.value = false })
|
|
|
|
|
-})
|
|
|
|
|
</script>
|
|
</script>
|