74 lines
2.1 KiB
C
74 lines
2.1 KiB
C
/**
|
|
* @file example.c
|
|
*
|
|
* 调用 dr_send_sensor(data, len) 无需指定端口,
|
|
* 库自动广播到所有 send_type=sensor 的端口。
|
|
*/
|
|
|
|
#include "datarouter.h"
|
|
#include <stdio.h>
|
|
|
|
static void uart_send(uint32_t port_id, const void *data, size_t len)
|
|
{
|
|
printf("[UART port %u] %.*s\n", port_id, (int)len, (const char *)data);
|
|
}
|
|
|
|
static void tcp_send(uint32_t port_id, const void *data, size_t len)
|
|
{
|
|
printf("[TCP port %u] %.*s\n", port_id, (int)len, (const char *)data);
|
|
}
|
|
|
|
static void can_send(uint32_t port_id, const void *data, size_t len)
|
|
{
|
|
printf("[CAN port %u] %.*s\n", port_id, (int)len, (const char *)data);
|
|
}
|
|
|
|
void dr_on_recv_command(uint32_t port_id, const void *data, size_t len)
|
|
{
|
|
printf("[RX:cmd port %u] %.*s\n", port_id, (int)len, (const char *)data);
|
|
}
|
|
|
|
int main(void)
|
|
{
|
|
dr_init();
|
|
|
|
printf("Capabilities:\n");
|
|
for (int i = 0; i < dr_send_cap_count(); i++)
|
|
printf(" SEND [%d] %s - %s\n", i,
|
|
dr_send_cap_name(i), dr_send_cap_desc(i));
|
|
|
|
/*
|
|
* 创建两个端口,都设 send_type=sensor,各绑不同外设。
|
|
* 调用 dr_send_sensor() 时两个端口同时触发。
|
|
*/
|
|
dr_port_t p1 = dr_port_create();
|
|
dr_port_set_send_type(p1, DR_SEND_sensor);
|
|
dr_port_add_handler(p1, uart_send);
|
|
dr_port_add_handler(p1, tcp_send);
|
|
|
|
dr_port_t p2 = dr_port_create();
|
|
dr_port_set_send_type(p2, DR_SEND_sensor);
|
|
dr_port_add_handler(p2, can_send);
|
|
|
|
/* 不指定端口,自动广播到所有 sensor 端口 */
|
|
printf("\n--- send_sensor (auto-route to ALL sensor ports) ---\n");
|
|
dr_send_sensor("temperature:25.3", 16);
|
|
|
|
/* 运行时移除一个 handler,下次发送不再触发它 */
|
|
printf("\n--- remove TCP handler from p1, resend ---\n");
|
|
dr_port_remove_handler(p1, tcp_send);
|
|
dr_send_sensor("temperature:26.1", 16);
|
|
|
|
/* 接收侧:用户自行调用回调 */
|
|
printf("\n--- recv command ---\n");
|
|
dr_on_recv_command(0, "reboot", 6);
|
|
|
|
/* 删除一个端口,触发时不再走它 */
|
|
printf("\n--- delete p2 (CAN), resend ---\n");
|
|
dr_port_delete(p2);
|
|
dr_send_sensor("temperature:27.0", 16);
|
|
|
|
dr_port_delete(p1);
|
|
return 0;
|
|
}
|