Files
DataRouter/example.c
T

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;
}