3.27_433:实验并验证485发送数据透传至RF433模块,并在外部设备成功接收
- 新增协议识别器状态机,实现指令与透传数据的自动识别
This commit is contained in:
@ -107,6 +107,13 @@ static bool report_enabled = true;
|
||||
* @brief IO事件回调函数指针
|
||||
* @note 设置后,IO状态变化将通过回调函数上报
|
||||
* 为NULL时使用默认的UART2_Print_String输出
|
||||
*
|
||||
* 回调函数原型:
|
||||
* void callback(uint8_t channel, uint8_t state, const char *event_msg)
|
||||
*
|
||||
* 使用场景:
|
||||
* - 需要将事件发送到其他端口时设置回调
|
||||
* - 传入NULL恢复默认UART2输出方式
|
||||
*/
|
||||
static io_event_callback_t g_event_callback = NULL;
|
||||
|
||||
@ -129,17 +136,18 @@ static uint8_t calc_checksum(const char *data, uint8_t len);
|
||||
|
||||
/**
|
||||
* @brief 发送DI状态变化事件
|
||||
* @note 构造并发送ASCII格式的状态变化消息至UART2
|
||||
* @note 构造并发送ASCII格式的状态变化消息
|
||||
* 消息格式: $DI_EVENT,<channel>,<state>*<checksum>\r\n
|
||||
* 如果设置了回调函数,则通过回调发送;否则发送到UART2
|
||||
*
|
||||
* @param channel: 通道编号,从0开始计数(输入)
|
||||
* @param state: 通道状态,0=低电平,1=高电平(输入)
|
||||
* @return 无返回值
|
||||
*
|
||||
* 调用说明:
|
||||
* - 此函数在状态变化被确认后调用,用于通知上位机或日志系统
|
||||
* - 内部会调用calc_checksum计算校验和
|
||||
* - 通过UART2_Print_String发送原始字符串
|
||||
* 事件路由说明:
|
||||
* 1. 始终通过MultiUART_SendString发送到UART1(RF433)端口
|
||||
* 2. 如果设置了回调函数(g_event_callback),也通过回调发送
|
||||
* 3. UART2仅用于调试日志输出
|
||||
*/
|
||||
static void send_di_event(uint8_t channel, uint8_t state);
|
||||
|
||||
@ -177,10 +185,10 @@ static uint8_t calc_checksum(const char *data, uint8_t len)
|
||||
* @param state: 通道状态,0=低电平,1=高电平(输入)
|
||||
* @return 无返回值
|
||||
*
|
||||
* 调用说明:
|
||||
* - 此函数在状态变化被确认后调用,用于通知上位机或日志系统
|
||||
* - 内部会调用calc_checksum计算校验和
|
||||
* - 如果设置了回调函数,则通过回调发送;否则通过UART2_Print_String发送
|
||||
* 事件路由说明:
|
||||
* 1. 始终通过MultiUART_SendString发送到UART1(RF433)端口
|
||||
* 2. 如果设置了回调函数(g_event_callback),也通过回调发送
|
||||
* 3. UART2仅用于调试日志输出
|
||||
*/
|
||||
static void send_di_event(uint8_t channel, uint8_t state)
|
||||
{
|
||||
@ -198,14 +206,20 @@ static void send_di_event(uint8_t channel, uint8_t state)
|
||||
|
||||
/* 输出调试日志到UART2,记录状态变化 */
|
||||
DEBUG_LOG("CH%d -> %s", channel + 1, state ? "HIGH" : "LOW");
|
||||
|
||||
/* 向UART1(RF433)发送状态变化事件 */
|
||||
|
||||
/*----------------------------------------------------------
|
||||
* 向UART1(RF433模块)发送状态变化事件
|
||||
* 这是IO事件的主要路由通道,用于无线上报到上位机
|
||||
*----------------------------------------------------------*/
|
||||
MultiUART_SendString(PORT_UART1, msg);
|
||||
|
||||
/* 输出完整消息到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