#ifndef REFEREE_H #define REFEREE_H #include #include /* 裁判系统协议解析(0x0201 机器人状态 / 0x0202 实时功率 / 0x0304 自定义控制器) * CRC 校验与字段偏移和 legacy RefereeSystem 模块保持一致 */ typedef struct { uint8_t robot_id; // 机器人 ID(无裁判系统时为 0,4 号步兵为 4/104) uint8_t shooter_power_on; // 发射机构上电状态(0x0201) uint16_t chassis_power_limit; // 底盘功率上限(W) float chassis_power; // 底盘实时功率(W) float buffer_energy; // 底盘缓冲能量(J) uint8_t link_status; // 收到过有效帧置 1,掉线检测配合 last_update_tick uint32_t last_update_tick; } referee_data_t; extern referee_data_t referee; /* 流式解析一个字节(中断上下文调用;把串口收到的每个字节依次喂进来) */ extern void referee_parse_byte(uint8_t byte); /* 批量喂入(usart 整帧回调里循环调用 referee_parse_byte 即可,此函数为便捷封装) */ extern void referee_parse_bytes(const uint8_t * data, uint16_t len); /* 0x0304(自定义控制器)数据回调,在中断上下文执行 */ typedef void (*referee_keyboard_hook_f)(const uint8_t data[12]); extern void referee_set_keyboard_hook(referee_keyboard_hook_f hook); #endif