fix(rf): 升级 EV1527 为完整 24 位统一寻址,彻底分清不同按键/型号配对报警的 Bug
This commit is contained in:
18
Drivers/rf.c
18
Drivers/rf.c
@@ -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; // 成功解析
|
||||
|
||||
Reference in New Issue
Block a user