基本完成的所有收发功能
This commit is contained in:
@ -196,31 +196,28 @@ static void send_di_event(uint8_t channel, uint8_t state)
|
||||
char msg[32];
|
||||
uint8_t cs;
|
||||
|
||||
/* 构造消息主体,channel+1将0-base转换为1-base的用户可见编号 */
|
||||
int len = snprintf(msg, sizeof(msg), "$DI_EVENT,%d,%d,%d*", channel + 1, state, SOURCE_DI);
|
||||
|
||||
/* 计算异或校验和,跳过'$'符号只对正文部分计算 */
|
||||
cs = calc_checksum(msg + 1, len - 1);
|
||||
|
||||
/* 将校验和追加到消息末尾,格式为两位十六进制数 */
|
||||
snprintf(msg + len, sizeof(msg) - len, "%02X\r\n", cs);
|
||||
|
||||
/* 输出调试日志到UART2,记录状态变化 */
|
||||
DEBUG_LOG("CH%d -> %s", channel + 1, state ? "HIGH" : "LOW");
|
||||
|
||||
/*----------------------------------------------------------
|
||||
* 向UART1(RF433模块)发送状态变化事件
|
||||
* 这是IO事件的主要路由通道,用于无线上报到上位机
|
||||
*----------------------------------------------------------*/
|
||||
MultiUART_SendString(PORT_UART1, msg);
|
||||
/* ==========================================================
|
||||
🚀 核心修改:不再直接发送 msg,而是套上 [0xAA] 和 [ID] 的外衣
|
||||
========================================================== */
|
||||
uint8_t rf_tx_buf[64];
|
||||
rf_tx_buf[0] = 0xAA; // 贴上魔法帧头
|
||||
rf_tx_buf[1] = MY_DEVICE_ID; // 贴上本机的身份证号 (来自 main.h)
|
||||
|
||||
uint16_t msg_len = strlen(msg);
|
||||
memcpy(&rf_tx_buf[2], msg, msg_len); // 把真正的 DI 消息塞到第 2 个字节后面
|
||||
|
||||
/* 将带 ID 的完整包裹发送给 433 模块 */
|
||||
MultiUART_Send(PORT_UART1, rf_tx_buf, msg_len + 2);
|
||||
/* ========================================================== */
|
||||
|
||||
/* 输出完整消息到UART2,方便调试查看 */
|
||||
DEBUG_LOG("RF433 TX: \"%s\"", msg);
|
||||
|
||||
/*----------------------------------------------------------
|
||||
* 如果设置了回调函数,也通过回调发送
|
||||
* 用于支持额外的自定义处理逻辑
|
||||
*----------------------------------------------------------*/
|
||||
if (g_event_callback != NULL) {
|
||||
g_event_callback(channel, state, msg);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user