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