]>
pere.pagekite.me Git - homepage.git/blob - RoBIOS/wl-ping-1.0.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";
25 empty_recive_buffer(void)
27 char msgbuffer
[MSGSIZE
];
31 RADIORecv(&from
, &len
, &msgbuffer
[0]);
35 main(int argc
, char *argv
[])
37 int delay
= 200; /* 2 second */
40 int sumsent
= 0, sumrecv
= 0, sumtimeused
= 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 RADIORecv(&from
, &len
, &msgbuffer
[0]);
70 msgbuffer
[len
] = 0; /* zero terminate string */
72 /* Ping broadcast ? */
73 if (0 == strncmp(PREFIX
, msgbuffer
, strlen(PREFIX
)))
75 /* Make message a response, and send it back */
76 memmove(&msgbuffer
[0], RESPONSE
, strlen(RESPONSE
));
77 if (0 != RADIOSend(from
, len
, &msgbuffer
[0]))
78 printf("Bad send on resp\n");
82 if (0 == strncmp(RESPONSE
, msgbuffer
, strlen(RESPONSE
)))
84 int then
, timeused
, originator
;
85 sscanf(&msgbuffer
[0]+sizeof(RESPONSE
), "%d %d", &then
, &originator
);
86 timeused
= now
- then
;
88 if (from
!= originator
) {
91 sumtimeused
+= timeused
;
92 mintimeused
= mintimeused
> timeused
? timeused
: mintimeused
;
93 maxtimeused
= maxtimeused
< timeused
? timeused
: maxtimeused
;
95 printf("Ping (%d:%d) %3d\n", from
, originator
, timeused
);
103 { /* Time to send new broadcast */
104 char msgbuffer
[MSGSIZE
+1];
105 static int firsttime
= 1;
107 sprintf(msgbuffer
, "%s %06d %02d", PREFIX
, now
, OSMachineID());
108 if (0 != RADIOSend(BROADCAST
, strlen(msgbuffer
), msgbuffer
))
109 printf("Bad send on bc\n");
113 printf("Packet size %ld\n", strlen(msgbuffer
));
118 nexttime
= now
+ delay
;
122 printf("----------------");
123 printf("S %2d R %2d", sumsent
, sumrecv
);
125 printf(" %2d%%", sumrecv
*100/sumsent
);
128 printf("Time %3d<%3d<%4d\n",
129 mintimeused
, sumtimeused
/ sumrecv
, maxtimeused
);