键鼠控制(此前 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 一处校正。
72 lines
2.4 KiB
C
72 lines
2.4 KiB
C
#ifndef DR16_H
|
|
#define DR16_H
|
|
|
|
#include <stdint.h>
|
|
#include "stm32f4xx_hal.h"
|
|
|
|
#define DR16_OFFLINE_TIME_MS 25 // 遥控器掉线判定时间(legacy 25ms)
|
|
|
|
/* DT7 遥控器 + 图传键鼠数据结构,自 legacy Remote 模块移植
|
|
* S1/S2 拨杆:1-上 2-下 3-中(与 legacy 解析保持一致)
|
|
* 摇杆:364~1684,中值 1024 */
|
|
|
|
typedef struct
|
|
{
|
|
uint16_t rc_r_RL; // 通道0-右摇杆左右
|
|
uint16_t rc_r_UD; // 通道1-右摇杆上下
|
|
uint16_t rc_l_RL; // 通道2-左摇杆左右
|
|
uint16_t rc_l_UD; // 通道3-左摇杆上下
|
|
|
|
uint8_t s1; // 左侧拨杆
|
|
uint8_t s2; // 右侧拨杆
|
|
|
|
int16_t mouse_rl; // 鼠标X轴速度
|
|
int16_t mouse_du; // 鼠标Y轴速度
|
|
int16_t mouse_wheel; // 鼠标滚轮
|
|
uint8_t mouse_key_l;
|
|
uint8_t mouse_key_r;
|
|
|
|
uint8_t key_w;
|
|
uint8_t key_s;
|
|
uint8_t key_a;
|
|
uint8_t key_d;
|
|
uint8_t key_shift;
|
|
uint8_t key_ctrl;
|
|
uint8_t key_q;
|
|
uint8_t key_e;
|
|
uint8_t key_alpha1; // 图传扩展键
|
|
uint8_t key_alpha2;
|
|
|
|
/* 原始按键字节(诊断用,不做位拆分) —— 用来判断"帧里到底有没有键鼠数据":
|
|
* 官方 dbus.h 的 key_code 是 16 位:bit0..7 = W/S/A/D/Shift/Ctrl/Q/E(=data[14]),
|
|
* bit8..15 = R/F/G/Z/X/C/V/B(=data[15])。本工程此前只读了 data[14]。
|
|
* 拨键盘时这两个字节若非 0 说明数据确实到了;全 0 说明帧里就是空的。 */
|
|
uint8_t key_code_lo; // data[14]
|
|
uint8_t key_code_hi; // data[15]
|
|
|
|
int16_t thumb_wheel; // 遥控器拨轮
|
|
|
|
/* 按键边沿检测(legacy 语义) */
|
|
uint8_t key_push_q; // Q 键按下翻转
|
|
uint8_t key_push_e; // E 键按下翻转
|
|
uint8_t key_push_shift; // Shift 按下翻转
|
|
uint8_t key_push_ctrl; // Ctrl 按下翻转
|
|
uint8_t mouse_key_push_r; // 鼠标右键按下瞬间为 1
|
|
} dr16_t;
|
|
|
|
extern dr16_t dr16;
|
|
extern uint8_t dr16_status; // 1-已连接 0-掉线
|
|
extern uint8_t dr16_start_flag; // 1-准备启动 2-收到首帧(与 legacy Remote_StartFlag 一致)
|
|
|
|
/* 解析一帧 18 字节原始数据(usart3 接收回调/中断上下文调用) */
|
|
extern void dr16_parse(const uint8_t * data);
|
|
|
|
/* 最近收帧 tick(HAL_GetTick),用于掉线检测 */
|
|
extern uint32_t dr16_last_tick;
|
|
extern uint32_t dr16_frame_count; // 收到的帧计数(诊断用)
|
|
|
|
/* 判定遥控器是否掉线 */
|
|
extern uint8_t dr16_offline(void);
|
|
|
|
#endif
|