2026-08-27 调试完成版本
- FC 控制指令域修正:payload 14→18 字节,纵倾/横倾姿态拆分为数据1/数据2 - WebServer 广播改为待发队列模式,修复 mongoose 跨线程调用问题 - build-board.sh 增加板卡组网说明(/23 掩码方案)、pCCU 服务部署与 mission 同步 - 同步 0824 协议文档更新
This commit is contained in:
+14
-10
@@ -40,7 +40,7 @@ static void testFrameLengths() {
|
||||
PmParamSetFbMessage ppf;
|
||||
PmStatusMessage psm;
|
||||
|
||||
CHECK(fcm.totalLength() == 20); // FC 控制指令 24B 文档表,实际 20B(域字节数0x0014)
|
||||
CHECK(fcm.totalLength() == 24); // FC 控制指令 24B(1.1.1:域字节数0x0018)
|
||||
CHECK(fsm.totalLength() == 150); // FC 状态反馈 150B
|
||||
CHECK(pcm.totalLength() == 45); // PM 操控指令 45B
|
||||
CHECK(pps.totalLength() == 28); // PM 参数设定 28B
|
||||
@@ -52,29 +52,33 @@ static void testFrameLengths() {
|
||||
// 2. FC 控制指令编解码往返
|
||||
static void testFcControlRoundTrip() {
|
||||
FcControlValue v;
|
||||
v.mode = 2; v.cmd = 2; v.outputPower = 100; v.pitch = 35; v.roll = -12;
|
||||
v.mode = 2; v.cmd = 2; v.outputPower = 100; v.pitch1 = 35; v.pitch2 = -21;
|
||||
v.roll1 = -12; v.roll2 = 48;
|
||||
v.emergencyAllow = 0x03; v.depth = 150;
|
||||
v.supplyCmd = 1; v.reservedCmd5 = 5; v.reservedCmd6 = 6; v.heartbeat = 7;
|
||||
|
||||
FcControlMessage msg;
|
||||
std::vector<uint8_t> frame = msg.encode(v);
|
||||
|
||||
CHECK(frame.size() == 20);
|
||||
CHECK(frame.size() == 24);
|
||||
CHECK(frame[0] == 0x40 && frame[1] == 0x40);
|
||||
CHECK(frame[4] == 0x18 && frame[5] == 0x00); // 域字节数 0x0018 小端
|
||||
|
||||
// 字节位置校验:纵倾数据1=低位(字节10=0x23=35), 数据2=高位(字节11=0x00)
|
||||
CHECK(frame[6 + 3] == 0x23); // 姿态数据1(低位)
|
||||
CHECK(frame[6 + 4] == 0x00); // 姿态数据2(高位)
|
||||
CHECK(frame[6 + 5] == 0xF4); // 横倾数据1(低位, -12 = 0xFFF4 小端)
|
||||
CHECK(frame[6 + 6] == 0xFF); // 横倾数据2(高位)
|
||||
// 字节位置校验(数据域起点=帧头6):姿态各 int16 小端
|
||||
CHECK(frame[6 + 3] == 0x23 && frame[6 + 4] == 0x00); // 纵倾数据1 = 35
|
||||
CHECK(frame[6 + 5] == 0xEB && frame[6 + 6] == 0xFF); // 纵倾数据2 = -21 (0xFFEB)
|
||||
CHECK(frame[6 + 7] == 0xF4 && frame[6 + 8] == 0xFF); // 横倾数据1 = -12 (0xFFF4)
|
||||
CHECK(frame[6 + 9] == 0x30 && frame[6 + 10] == 0x00); // 横倾数据2 = 48
|
||||
|
||||
FcControlValue out;
|
||||
CHECK(msg.decode(frame, static_cast<void*>(&out)));
|
||||
CHECK(out.mode == 2);
|
||||
CHECK(out.cmd == 2);
|
||||
CHECK(out.outputPower == 100);
|
||||
CHECK(out.pitch == 35);
|
||||
CHECK(out.roll == -12);
|
||||
CHECK(out.pitch1 == 35);
|
||||
CHECK(out.pitch2 == -21);
|
||||
CHECK(out.roll1 == -12);
|
||||
CHECK(out.roll2 == 48);
|
||||
CHECK(out.emergencyAllow == 0x03);
|
||||
CHECK(out.depth == 150);
|
||||
CHECK(out.supplyCmd == 1);
|
||||
|
||||
Reference in New Issue
Block a user