#include "blip_printf.h" #include <lib6lowpan/ip.h> module TestLinkLocalC { uses { interface Boot; interface SplitControl; interface UDP as Sock; interface Timer<TMilli>; interface Leds; } } implementation { nx_struct echo_state { nx_int8_t cmd; nx_uint32_t seqno; } m_data; enum { SVC_PORT = 10210, CMD_ECHO = 1, CMD_REPLY = 2, }; /*************************************************** *启动事件 ****************************************************/ event void Boot.booted() { call SplitControl.start(); m_data.seqno = 0; } event void SplitControl.startDone(error_t e) { /**开启约2秒的周期性定时器(单位毫秒) Timer**/ call Timer.startPeriodic(2048); /**端口绑定************************************/ call Sock.bind(SVC_PORT); } event void SplitControl.stopDone(error_t e) {} /*************************************************** *Timer定时时间到事件 ****************************************************/ event void Timer.fired() { struct sockaddr_in6 dest; inet_pton6("ff02::1", &dest.sin6_addr); dest.sin6_port = htons(SVC_PORT); m_data.cmd = CMD_ECHO; m_data.seqno ++; /***启动zigbee发送,可以自己修改发送内容和长度*****/ call Sock.sendto(&dest, &m_data, sizeof(m_data)); call Leds.led0Toggle(); } /*************************************************** *接收事件 ****************************************************/ event void Sock.recvfrom(struct sockaddr_in6 *src, void *payload, uint16_t len, struct ip6_metadata *meta) { nx_struct echo_state *cmd = payload; printf("TestLinkLocalC: recv from: "); printf_in6addr(&src->sin6_addr); printf("\n"); if (cmd->cmd == CMD_ECHO) { cmd->cmd = CMD_REPLY; call Sock.sendto(src, payload, len); call Leds.led1Toggle(); } else { printf("TestLinkLocalC: reply seqno: %li\n", cmd->seqno); call Leds.led2Toggle();
时间: 2023-08-16 09:09:29 浏览: 135
huggingface.co/Salesforce/blip-image-captioning-base
这段代码看起来像是一个基于Contiki OS的网络应用程序,它使用了6LoWPAN协议栈以及UDP协议来进行通信。具体来说,它实现了一个周期性定时器事件(Timer.fired()),每次定时器事件触发时,它会向IPv6组播地址(ff02::1)发送一个数据包(m_data),在数据包中包含了一个命令(CMD_ECHO)和一个序列号(seqno)。同时,它也实现了一个接收事件(Sock.recvfrom()),当收到数据包时会判断命令是否为CMD_ECHO,如果是,则会将命令改为CMD_REPLY并将数据包回发给发送方。这个应用程序还使用了LED灯来进行状态指示。
阅读全文