/** * @file example.c * * 展示: * 1. send_type + 多 handler 发送广播 * 2. recv_type + dr_port_dispatch 自动路由接收 * 3. 外设中断中只需一行 dr_port_dispatch() */ #include "datarouter.h" #include /* ---- 发送 handler ---- */ static void uart_write(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_write(uint32_t port_id, const void *data, size_t len) { printf("[TCP port %u] %.*s\n", port_id, (int)len, (const char *)data); } /* ---- 接收回调 ---- */ void dr_on_recv_rtcm(uint32_t port_id, const void *data, size_t len) { printf("[RX:rtcm 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); } /* ---- main ---- */ int main(void) { dr_init(); /* * 创建端口,配置发送和接收能力。 * 一个端口可以同时有 send_type 和 recv_type。 */ dr_port_t uart1 = dr_port_create(); dr_port_set_send_type(uart1, DR_SEND_sensor); dr_port_set_recv_type(uart1, DR_RECV_rtcm); dr_port_add_handler(uart1, uart_write); dr_port_add_handler(uart1, tcp_write); dr_port_t uart2 = dr_port_create(); dr_port_set_send_type(uart2, DR_SEND_status); dr_port_set_recv_type(uart2, DR_RECV_command); dr_port_add_handler(uart2, uart_write); /* ---- 发送 ---- */ printf("--- send sensor (auto-route to uart1) ---\n"); dr_send_sensor("temperature:25.3", 16); printf("\n--- send status (auto-route to uart2) ---\n"); dr_send_status("status:OK", 9); /* ---- 接收(模拟外设中断) ---- */ printf("\n--- UART1 received data → dispatch to rtcm ---\n"); dr_port_dispatch(uart1, "rtcm_data_v3.2", 14); printf("\n--- UART2 received data → dispatch to command ---\n"); dr_port_dispatch(uart2, "reboot", 6); /* 清理 */ dr_port_delete(uart1); dr_port_delete(uart2); return 0; }