fix(rf): 升级 EV1527 为完整 24 位统一寻址,彻底分清不同按键/型号配对报警的 Bug

This commit is contained in:
Antigravity IDE
2026-07-16 18:25:16 +08:00
parent 731115e09a
commit 31f5066052

View File

@@ -295,7 +295,7 @@ bit EV1527_Decode(u32 *out_addr, u8 *out_data)
Uart_SendHex16(T);
Uart_SendString("us\r\n");
// ====== 4. 自适应决策:组合成地址及数据 ======
// ====== 4. 自适应决策:组合成 24 位完整射频数据 ======
for (i = 0; i < 24; i++)
{
// 比较本位高低电平持续宽度:
@@ -303,24 +303,20 @@ bit EV1527_Decode(u32 *out_addr, u8 *out_data)
// 否则高电平短,判定为 0 (1T高+3T低)。
if (raw_h[i] > raw_l[i])
{
if (i < 20) addr = (addr << 1) | 1; // 20写入物理地址
else dat = (dat << 1) | 1; // 低 4 位写入状态码
addr = (addr << 1) | 1; // 写入 24 位物理地址与状态数据相结合的最终值
}
else
{
if (i < 20) addr = (addr << 1);
else dat = (dat << 1);
addr = (addr << 1);
}
}
*out_addr = addr;
*out_data = dat;
*out_addr = addr; // 输出包含状态数据的 24 位完整射频编码作为传感器唯一 ID
*out_data = (u8)(addr & 0x0F); // 输出低 4 位作为指令/状态,保持调用兼容性
// 串口打印解码最终结果
Uart_SendString("Decoded ADDR: 0x");
Uart_SendHex20(addr);
Uart_SendString(", DATA: 0x");
Uart_SendHex4(dat);
Uart_SendString("Decoded 24bit ADDR: 0x");
Uart_SendHex32(addr);
Uart_SendString("\r\n");
return 1; // 成功解析