键鼠控制(此前 WASD 无反应): - 云台 robot_cmd_task:0x0304 与 USART3 帧内键鼠合并为共享视图 keyboard_merged(0x0304 优先); 键鼠模式由帧内键鼠动作进入,动云台左摇杆退出 - c_comm_task/c_comm:键鼠在控时底盘摇杆由 WASD+鼠标合成,改读共享视图(此前只认 0x0304) - dr16/调试输出:新增帧内键鼠原始字节诊断(key_lo/key_hi/mouse_*/s1/frames) 自定义UI(底盘板经裁判系统 USART6 绘制到选手端): - 新增 底盘/modules/comms/referee_ui.c|h:15 字节图形组包(带编译期断言), v5 卡片式 HUD = 俯仰梯(pitch) + 罗盘刻度带(底盘朝向) + 预估底盘功率 + 超级电容 + 摩擦轮 L/R 转速 + 小陀螺状态,yaw 在刻度带右侧;5Hz 刷新,约 50 图元/8 包 - referee.c 新增 referee_send_frame()(cmd 0x0301 机器人交互数据,CRC8+CRC16,USART6 TX DMA) - 新增 CToC 0x1B9:云台把 pitch 与摩擦轮转速带给底盘(底盘本地没有这两个量) - 版式避开官方保留区:顶部比分条/左下小地图/右下战车模块/中部两块官方保留 验证:云台 Code=99540 RO=1764 RW=420 ZI=62572;底盘 Code=99452 RO=1928 RW=416 ZI=62584;均 0 错误 0 警告。 未做实机验证(当前无板/无图传);UI 协议常量(UI_RECEIVER_ID/UI_SEND_HZ)与版式坐标集中在 referee_ui.h 宏区,便于按协议 PDF 一处校正。
40 lines
1.7 KiB
C
40 lines
1.7 KiB
C
#ifndef REFEREE_H
|
|
#define REFEREE_H
|
|
|
|
#include <stdint.h>
|
|
#include <string.h>
|
|
|
|
/* 裁判系统协议解析(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);
|
|
|
|
/* ---- 发送(机器人 -> 裁判系统/选手端) -------------------------------------
|
|
* 用于自定义UI(0x0301 机器人交互数据)。data_length 取 payload 字节数(不含 cmd_id,
|
|
* 与解析器一致);CRC8 覆盖前 4 字节,CRC16 覆盖除末 2 字节外全部(低字节先)。
|
|
* 内部静态缓冲 + USART6 TX DMA,立即返回,勿高频调用(链路 115200)。 */
|
|
extern void referee_send_frame(uint16_t cmd_id, const uint8_t * data, uint16_t len);
|
|
|
|
#endif
|