This repository was archived by the owner on Apr 12, 2026. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 524
Expand file tree
/
Copy pathTestLinkLocalC.nc
More file actions
66 lines (54 loc) · 1.49 KB
/
TestLinkLocalC.nc
File metadata and controls
66 lines (54 loc) · 1.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#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) {
call Timer.startPeriodic(2048);
call Sock.bind(SVC_PORT);
}
event void SplitControl.stopDone(error_t e) {}
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 ++;
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();
}
}
}