]>
pere.pagekite.me Git - homepage.git/blob - RoBIOS/wl-ping-1.1.c
2 * Author: Petter Reinholdtsen <pere@td.org.uit.no>
5 * Broadcast "Ping <time> <sender>" every second, and reply to every
6 * broadcast with the same message, substituting "Ping" with "Resp".
7 * When reciveing a "Resp" package, make a note on the sender, the
8 * originator and the time differerence. Print statistics when done.
16 const char *PREFIX
= "Ping";
17 const char *RESPONSE
="Resp";
24 empty_recive_buffer(void)
26 char msgbuffer
[MSGSIZE
];
30 RADIORecv(&from
, &len
, &msgbuffer
[0]);
34 main(int argc
, char *argv
[])
36 int delay
= 200; /* 2 second */
39 int sumsent
= 0, sumrecv
= 0, sumtimeused
= 0;
40 int sumsbad
= 0, sumrbad
= 0;
41 int mintimeused
= 10000, maxtimeused
= 0;
43 /* disable input/output buffer */
44 setvbuf (stdout
,NULL
,_IONBF
,0);
45 setvbuf (stdin
,NULL
,_IONBF
,0);
47 LCDMode(SCROLLING
|NOCURSOR
);
50 LCDPutString("Wireless ping\n");
51 LCDPutString("----------------");
52 LCDPutString("RADIO init");
54 LCDPutString(" ok\n");
56 LCDMenu("", "", "", "END");
58 empty_recive_buffer();
60 while (KEY4
!= KEYRead())
64 { /* Received messages, reply at once */
65 char msgbuffer
[MSGSIZE
];
69 if (0 != RADIORecv(&from
, &len
, &msgbuffer
[0]))
75 msgbuffer
[len
] = 0; /* zero terminate string */
77 /* Ping broadcast ? */
78 if (0 == strncmp(PREFIX
, msgbuffer
, strlen(PREFIX
)))
80 if (from
== OSMachineID())
84 /* Make message a response, and send it back */
85 memmove(&msgbuffer
[0], RESPONSE
, strlen(RESPONSE
));
86 if (0 != RADIOSend(from
, len
, &msgbuffer
[0]))
87 printf("Bad send on resp\n");
92 if (0 == strncmp(RESPONSE
, msgbuffer
, strlen(RESPONSE
)))
94 int then
, timeused
, originator
;
95 sscanf(&msgbuffer
[0]+sizeof(RESPONSE
), "%d %d", &then
, &originator
);
96 timeused
= now
- then
;
98 if (from
!= originator
) {
101 sumtimeused
+= timeused
;
102 mintimeused
= mintimeused
> timeused
? timeused
: mintimeused
;
103 maxtimeused
= maxtimeused
< timeused
? timeused
: maxtimeused
;
105 printf("Ping (%d:%d) %3d\n", from
, originator
, timeused
);
116 { /* Time to send new broadcast */
117 char msgbuffer
[MSGSIZE
+1];
118 static int firsttime
= 1;
120 sprintf(msgbuffer
, "%s %06d %02d", PREFIX
, now
, OSMachineID());
121 if (0 != RADIOSend(BROADCAST
, strlen(msgbuffer
), msgbuffer
))
122 printf("Bad send on bc\n");
126 printf("Packet size %ld\n", strlen(msgbuffer
));
131 nexttime
= now
+ delay
;
135 printf("----------------");
136 printf("P:S %2d R %2d", sumsent
, sumrecv
);
138 printf(" %2d%%", sumrecv
*100/sumsent
);
140 printf("B:S %2d R %2d\n", sumsbad
, sumrbad
);
142 printf("Time %d<%d<%d\n",
143 mintimeused
, sumtimeused
/ sumrecv
, maxtimeused
);