diff --git a/User/device/rc_can.c b/User/device/rc_can.c index c03410f..9f17a82 100644 --- a/User/device/rc_can.c +++ b/User/device/rc_can.c @@ -1,33 +1,7 @@ -/* - RC CAN数据发送模块 - 将DR16遥控器数据通过CAN总线发送 - 参考motor_rm的结构设计 - - Example: - - RC_CAN_t rc_can; - RC_CAN_Param_t param = { - .can = BSP_CAN_1, - .enabled = true, - .send_period = 10 // 10ms发送一次 - }; - - RC_CAN_Init(&rc_can, ¶m); - - // 在主循环中 - while(1) { - if (DR16_ParseData(&dr16) == DEVICE_OK) { - RC_CAN_SendData(&rc_can, &dr16); - } - osDelay(param.send_period); - } -*/ /* Includes ----------------------------------------------------------------- */ #include "rc_can.h" -#include "device/dr16.h" #include "bsp/time.h" -#include /* USER INCLUDE BEGIN */ diff --git a/User/device/rc_can.h b/User/device/rc_can.h index 71e8847..92e4ace 100644 --- a/User/device/rc_can.h +++ b/User/device/rc_can.h @@ -19,16 +19,14 @@ extern "C" { /* USER DEFINE END */ /* Exported constants ------------------------------------------------------- */ -// CAN ID 定义 -#define RC_CAN_DR16_JOYSTICK_ID 0x300 // 遥杆数据 -#define RC_CAN_DR16_SWITCH_ID 0x301 // 拨杆数据 -#define RC_CAN_DR16_MOUSE_ID 0x302 // 鼠标数据 -#define RC_CAN_DR16_KEYBOARD_ID 0x303 // 键盘数据 -#define RC_CAN_DR16_STATUS_ID 0x304 // 状态数据 +#define RC_CAN_DR16_JOY_ID 0x350 // 遥杆数据 +#define RC_CAN_DR16_SWITCH_ID 0x351 // 拨杆数据 +#define RC_CAN_DR16_MOUSE_ID 0x352 // 鼠标数据 +#define RC_CAN_DR16_KEYBOARD_ID 0x353 // 键盘数据 +#define RC_CAN_DR16_STATUS_ID 0x354 // 状态数据 /* Exported macro ----------------------------------------------------------- */ /* Exported types ----------------------------------------------------------- */ - typedef enum { RC_CAN_SW_ERR = 0, RC_CAN_SW_UP = 1, @@ -36,20 +34,38 @@ typedef enum { RC_CAN_SW_DOWN = 2, } RC_CAN_SW_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_KEY_NUM, +} DR16_Key_t; // 遥杆数据包 (CAN ID: 0x300) -typedef struct __packed { - int16_t ch_l_x; // 左侧摇杆X轴 (-1000~1000) - int16_t ch_l_y; // 左侧摇杆Y轴 (-1000~1000) - int16_t ch_r_x; // 右侧摇杆X轴 (-1000~1000) - int16_t ch_r_y; // 右侧摇杆Y轴 (-1000~1000) -} RC_CAN_JoystickData_t; +typedef struct { + int16_t ch_l_x; + int16_t ch_l_y; + int16_t ch_r_x; + int16_t ch_r_y; +} RC_CAN_JoyData_t; // 拨杆数据包 (CAN ID: 0x301) typedef struct __packed { - uint8_t sw_l; // 左拨杆状态 - uint8_t sw_r; // 右拨杆状态 + RC_CAN_SW_t sw_l; // 左拨杆状态 + RC_CAN_SW_t sw_r; // 右拨杆状态 int16_t ch_res; // 第五通道 (-1000~1000) - uint32_t reserved; // 保留字节 } RC_CAN_SwitchData_t; // 鼠标数据包 (CAN ID: 0x302) @@ -57,14 +73,14 @@ typedef struct __packed { int16_t mouse_x; // 鼠标X轴移动 int16_t mouse_y; // 鼠标Y轴移动 int16_t mouse_z; // 鼠标Z轴(滚轮) - uint8_t mouse_l; // 鼠标左键 - uint8_t mouse_r; // 鼠标右键 + bool mouse_l; // 鼠标左键 + bool mouse_r; // 鼠标右键 } RC_CAN_MouseData_t; // 键盘数据包 (CAN ID: 0x303) -typedef struct __packed { +typedef union { uint16_t key_value; // 键盘按键位映射 - uint8_t reserved[6]; // 保留字节 + DR16_Key_t keys[16]; // 按键数组 } RC_CAN_KeyboardData_t; // 状态数据包 (CAN ID: 0x304)