#pragma once #ifdef __cplusplus extern "C" { #endif /* Includes ----------------------------------------------------------------- */ #include #include "component/user_math.h" #include "device.h" /* USER INCLUDE BEGIN */ /* USER INCLUDE END */ /* USER DEFINE BEGIN */ /* USER DEFINE END */ /* Exported constants ------------------------------------------------------- */ /* Exported macro ----------------------------------------------------------- */ /* Exported types ----------------------------------------------------------- */ typedef struct __packed { uint16_t ch_r_x : 11; uint16_t ch_r_y : 11; uint16_t ch_l_x : 11; uint16_t ch_l_y : 11; uint8_t sw_r : 2; uint8_t sw_l : 2; int16_t x; int16_t y; int16_t z; uint8_t press_l; uint8_t press_r; uint16_t key; uint16_t res; } DR16_RawData_t; typedef enum { DR16_SW_ERR = 0, DR16_SW_UP = 1, DR16_SW_MID = 3, DR16_SW_DOWN = 2, } DR16_SwitchPos_t; /* 键盘按键值 */ typedef enum { DR16_KEY_W = 0, DR16_KEY_S, DR16_KEY_A, DR16_KEY_D, DR16_KEY_SHIFT, DR16_KEY_CTRL, DR16_KEY_Q, DR16_KEY_E, DR16_KEY_R, DR16_KEY_F, DR16_KEY_G, DR16_KEY_Z, DR16_KEY_X, DR16_KEY_C, DR16_KEY_V, DR16_KEY_B, DR16_L_CLICK, DR16_R_CLICK, DR16_KEY_NUM, } DR16_Key_t; typedef struct { float ch_l_x; /* 遥控器左侧摇杆横轴值,上为正 */ float ch_l_y; /* 遥控器左侧摇杆纵轴值,右为正 */ float ch_r_x; /* 遥控器右侧摇杆横轴值,上为正 */ float ch_r_y; /* 遥控器右侧摇杆纵轴值,右为正 */ float ch_res; /* 第五通道值 */ DR16_SwitchPos_t sw_r; /* 右侧拨杆位置 */ DR16_SwitchPos_t sw_l; /* 左侧拨杆位置 */ struct { int16_t x; int16_t y; int16_t z; bool l_click; /* 左键 */ bool r_click; /* 右键 */ } mouse; /* 鼠标值 */ union { bool key[DR16_KEY_NUM]; /* 键盘按键值 */ uint16_t value; /* 键盘按键值的位映射 */ } keyboard; uint16_t res; /* 保留,未启用 */ } DR16_Data_t; typedef struct { DEVICE_Header_t header; DR16_RawData_t raw_data; DR16_Data_t data; } DR16_t; /* Exported functions prototypes -------------------------------------------- */ int8_t DR16_Init(DR16_t *dr16); int8_t DR16_Restart(void); int8_t DR16_StartDmaRecv(DR16_t *dr16); bool DR16_WaitDmaCplt(uint32_t timeout); int8_t DR16_ParseData(DR16_t *dr16); int8_t DR16_Offline(DR16_t *dr16); /* USER FUNCTION BEGIN */ /* USER FUNCTION END */ #ifdef __cplusplus } #endif