/*基于freertos_cli实现的虚拟命令行 自身作为一个设备存在,通过串口和上位机进行交互,获得类似命令行的体验, 例如输入help可以获得帮助 输出htop 可以获得freertos任务状态等信息 通过cd可以切换目录 目录结构是 / (root) |-- /dev |-- bmi088 |-- chassis_motor1 |-- /modules |-- balance_chassis |-- gimbal |-- shoot 在dev里可以用show命令查看设备信息 modules暂无实现 至于dev里的设备有哪些,需要通过一个函数MRobot_RegisterDevices(设备名(字符串),结构体指针)来注册设备,我可以在任何一个任务里调用这个函数。 然后我在我的一个单独的线程里打印和发送他们。 例如我在atti_esit任务里注册了bmi088和他的结构体,我在cli线程里需要能够打印bmi088的数据。 然后我在show的时候就可以看到imu的数据了, */ #pragma once #ifdef __cplusplus extern "C" { #endif /* Includes ----------------------------------------------------------------- */ #include #include /* Exported constants ------------------------------------------------------- */ #define MROBOT_MAX_DEVICES 32 #define MROBOT_MAX_CMD_LEN 128 #define MROBOT_MAX_OUTPUT_LEN 512 #define MROBOT_RX_BUFFER_SIZE 256 /* Exported types ----------------------------------------------------------- */ typedef enum { MROBOT_DEVICE_TYPE_IMU, MROBOT_DEVICE_TYPE_MOTOR, MROBOT_DEVICE_TYPE_SENSOR, MROBOT_DEVICE_TYPE_CUSTOM, } MRobot_DeviceType_t; /* 设备打印回调函数类型 */ typedef void (*MRobot_PrintCallback_t)(void *device_data, char *buffer, uint16_t buffer_size); /* 注册的设备结构 */ typedef struct { char name[32]; MRobot_DeviceType_t type; void *data; /* 指向实际设备数据的指针 */ MRobot_PrintCallback_t print_callback; /* 打印设备信息的回调函数 */ } MRobot_Device_t; /* Exported functions ------------------------------------------------------- */ /** * @brief 初始化 MRobot 命令行系统 */ void MRobot_Init(void); /** * @brief 注册设备到 MRobot 系统 * @param name 设备名称 * @param type 设备类型 * @param data 指向设备数据结构的指针 * @param print_callback 打印设备信息的回调函数 * @retval 0 成功, -1 失败 */ int8_t MRobot_RegisterDevice(const char *name, MRobot_DeviceType_t type, void *data, MRobot_PrintCallback_t print_callback); /** * @brief 处理命令字符串 * @param cmd_string 命令字符串 * @param output_buffer 输出缓冲区 * @param buffer_size 缓冲区大小 * @retval 0 成功, -1 失败 */ int8_t MRobot_ProcessCommand(const char *cmd_string, char *output_buffer, uint16_t buffer_size); /** * @brief 获取当前路径 * @return 当前路径字符串 */ const char *MRobot_GetCurrentPath(void); #ifdef __cplusplus } #endif