mirror of
https://github.com/goldenfishs/MRobot.git
synced 2026-04-01 05:17:13 +08:00
重构User_code目录结构:将文件组织到子文件夹中
主要更改: - 将所有BSP外设文件移动到独立子文件夹(can/, fdcan/, uart/等) - 将所有Component文件移动到独立子文件夹(pid/, filter/, cmd/等) - 将所有Device文件移动到独立子文件夹(dr16/, bmi088/等) - 更新代码生成器以支持新的文件夹结构 - 保持向后兼容性,支持从子文件夹或根目录加载模板 - 添加STRUCTURE.md文档说明新的目录结构 优势: ✅ 更好的代码组织和管理 ✅ 便于添加、删除、修改模板 ✅ 清晰的模块划分 ✅ 向后兼容现有结构
This commit is contained in:
157
assets/User_code/device/rc_can/rc_can.h
Normal file
157
assets/User_code/device/rc_can/rc_can.h
Normal file
@@ -0,0 +1,157 @@
|
||||
#pragma once
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ----------------------------------------------------------------- */
|
||||
#include "bsp/can.h"
|
||||
#include "device/device.h"
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
/* USER INCLUDE BEGIN */
|
||||
|
||||
/* USER INCLUDE END */
|
||||
|
||||
/* USER DEFINE BEGIN */
|
||||
|
||||
/* USER DEFINE END */
|
||||
|
||||
/* Exported constants ------------------------------------------------------- */
|
||||
|
||||
/* Exported macro ----------------------------------------------------------- */
|
||||
/* Exported types ----------------------------------------------------------- */
|
||||
typedef enum {
|
||||
RC_CAN_SW_ERR = 0,
|
||||
RC_CAN_SW_UP = 1,
|
||||
RC_CAN_SW_MID = 3,
|
||||
RC_CAN_SW_DOWN = 2,
|
||||
} RC_CAN_SW_t;
|
||||
|
||||
typedef enum {
|
||||
RC_CAN_MODE_MASTER = 0, // 主机模式
|
||||
RC_CAN_MODE_SLAVE = 1, // 从机模式
|
||||
} RC_CAN_Mode_t;
|
||||
|
||||
typedef enum {
|
||||
RC_CAN_DATA_JOYSTICK = 0,
|
||||
RC_CAN_DATA_SWITCH,
|
||||
RC_CAN_DATA_MOUSE,
|
||||
RC_CAN_DATA_KEYBOARD
|
||||
} RC_CAN_DataType_t;
|
||||
|
||||
typedef enum {
|
||||
RC_CAN_KEY_NONE = 0xFF, // 无按键
|
||||
RC_CAN_KEY_W = 0,
|
||||
RC_CAN_KEY_S,
|
||||
RC_CAN_KEY_A,
|
||||
RC_CAN_KEY_D,
|
||||
RC_CAN_KEY_SHIFT,
|
||||
RC_CAN_KEY_CTRL,
|
||||
RC_CAN_KEY_Q,
|
||||
RC_CAN_KEY_E,
|
||||
RC_CAN_KEY_R,
|
||||
RC_CAN_KEY_F,
|
||||
RC_CAN_KEY_G,
|
||||
RC_CAN_KEY_Z,
|
||||
RC_CAN_KEY_X,
|
||||
RC_CAN_KEY_C,
|
||||
RC_CAN_KEY_V,
|
||||
RC_CAN_KEY_B,
|
||||
RC_CAN_KEY_NUM,
|
||||
} RC_CAN_Key_t;
|
||||
|
||||
// 遥杆数据包
|
||||
typedef struct {
|
||||
float ch_l_x;
|
||||
float ch_l_y;
|
||||
float ch_r_x;
|
||||
float ch_r_y;
|
||||
} RC_CAN_JoyData_t;
|
||||
|
||||
// 拨杆数据包
|
||||
typedef struct {
|
||||
RC_CAN_SW_t sw_l; // 左拨杆状态
|
||||
RC_CAN_SW_t sw_r; // 右拨杆状态
|
||||
float ch_res; // 第五通道
|
||||
} RC_CAN_SwitchData_t;
|
||||
|
||||
// 鼠标数据包
|
||||
typedef struct {
|
||||
float x; // 鼠标X轴移动
|
||||
float y; // 鼠标Y轴移动
|
||||
float z; // 鼠标Z轴(滚轮)
|
||||
bool mouse_l; // 鼠标左键
|
||||
bool mouse_r; // 鼠标右键
|
||||
} RC_CAN_MouseData_t;
|
||||
|
||||
// 键盘数据包
|
||||
typedef struct {
|
||||
uint16_t key_value; // 键盘按键位映射
|
||||
RC_CAN_Key_t keys[16];
|
||||
} RC_CAN_KeyboardData_t;
|
||||
|
||||
|
||||
typedef struct {
|
||||
RC_CAN_JoyData_t joy;
|
||||
RC_CAN_SwitchData_t sw;
|
||||
RC_CAN_MouseData_t mouse;
|
||||
RC_CAN_KeyboardData_t keyboard;
|
||||
} RC_CAN_Data_t;
|
||||
|
||||
// RC_CAN 参数结构
|
||||
typedef struct {
|
||||
BSP_CAN_t can; // 使用的CAN总线
|
||||
RC_CAN_Mode_t mode; // 工作模式
|
||||
uint16_t joy_id; // 遥杆CAN ID
|
||||
uint16_t sw_id; // 拨杆CAN ID
|
||||
uint16_t mouse_id; // 鼠标CAN ID
|
||||
uint16_t keyboard_id; // 键盘CAN ID
|
||||
} RC_CAN_Param_t;
|
||||
|
||||
// RC_CAN 主结构
|
||||
typedef struct {
|
||||
DEVICE_Header_t header;
|
||||
RC_CAN_Param_t param;
|
||||
RC_CAN_Data_t data;
|
||||
} RC_CAN_t;
|
||||
|
||||
/* USER STRUCT BEGIN */
|
||||
|
||||
/* USER STRUCT END */
|
||||
|
||||
/* Exported functions prototypes -------------------------------------------- */
|
||||
|
||||
/**
|
||||
* @brief 初始化RC CAN发送模块
|
||||
* @param rc_can RC_CAN结构体指针
|
||||
* @param param 初始化参数
|
||||
* @return DEVICE_OK 成功,其他值失败
|
||||
*/
|
||||
int8_t RC_CAN_Init(RC_CAN_t *rc_can, RC_CAN_Param_t *param);
|
||||
|
||||
/**
|
||||
* @brief 更新并发送数据到CAN总线
|
||||
* @param rc_can RC_CAN结构体指针
|
||||
* @param data_type 数据类型
|
||||
* @return DEVICE_OK 成功,其他值失败
|
||||
*/
|
||||
int8_t RC_CAN_SendData(RC_CAN_t *rc_can, RC_CAN_DataType_t data_type);
|
||||
|
||||
/**
|
||||
* @brief 接收并更新CAN数据
|
||||
* @param rc_can RC_CAN结构体指针
|
||||
* @param data_type 数据类型
|
||||
* @return DEVICE_OK 成功,其他值失败
|
||||
*/
|
||||
int8_t RC_CAN_Update(RC_CAN_t *rc_can , RC_CAN_DataType_t data_type);
|
||||
|
||||
int8_t RC_CAN_OFFLINE(RC_CAN_t *rc_can);
|
||||
/* USER FUNCTION BEGIN */
|
||||
|
||||
/* USER FUNCTION END */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
Reference in New Issue
Block a user