Các kỹ thuật đựơc cài đặt bằng ngôn ngữ C trên nền hệ điều hành Contiky . Mã nguồn chương trình chạy gọi các thuật toán:
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ #include "contiki.h" #include "lib/random.h" #include "net/rime.h" #include "net/rime/collect.h" #include "dev/leds.h" #include "dev/button-sensor.h" #include "net/rime/neighbor.h" #include "net/netstack.h" #include <stdio.h>
static struct collect_conn tc; uint16_t dem=1,gui=1;
/*---*/
PROCESS(example_collect_process, "MO PHONG THUAT TOAN UOC
LUONG TUYEN");
AUTOSTART_PROCESSES(&example_collect_process);
/*---*/
static void
recv(const rimeaddr_t *originator, uint8_t seqno, uint8_t hops) {
printf(" Sink nhan duoc ban tin tu %d.%d, seqno %d, hops %d: do dai %d noi dung'%s'\n",
originator->u8[0], originator->u8[1], seqno+1, hops,
packetbuf_datalen(),
(char *)packetbuf_dataptr());
printf("tong so ban tin nhan duoc tai sink la: %d\n",dem); dem = dem++;
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
}
/*---*/
static conststruct collect_callbacks callbacks = { recv };
/*---*/
PROCESS_THREAD(example_collect_process, ev, data) {
staticstruct etimer periodic; staticstruct etimer et; PROCESS_BEGIN();
collect_open(&tc, 130, COLLECT_ROUTER, &callbacks); if(rimeaddr_node_addr.u8[0] == 1 &&
rimeaddr_node_addr.u8[1] == 0) { printf("I am sink\n");
collect_set_sink(&tc, rimeaddr_node_addr.u8[0]); }
/* Allow some time for the network to settle. */
etimer_set(&et, 120 * CLOCK_SECOND);
PROCESS_WAIT_UNTIL(etimer_expired(&et)); while(1) {
/* Send a packet every 30 seconds. */
if(etimer_expired(&periodic)) {
etimer_set(&periodic, CLOCK_SECOND * 30);
etimer_set(&et, random_rand() % (CLOCK_SECOND * 30)); }
PROCESS_WAIT_EVENT(); if(etimer_expired(&et)) { static rimeaddr_t oldparent;
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
const rimeaddr_t *parent;
printf("da gui %d ban tin\n",gui); gui++; packetbuf_clear(); packetbuf_set_datalen(sprintf(packetbuf_dataptr(), "%s,%d", "Hello",gui-1) + 1); collect_send(&tc, 15); parent = collect_parent(&tc); if(!rimeaddr_cmp(parent, &oldparent)) { if(!rimeaddr_cmp(&oldparent, &rimeaddr_null)) { printf("#L %d 0\n", oldparent.u8[0]); } if(!rimeaddr_cmp(parent, &rimeaddr_null)) { printf("#L %d 1\n", parent->u8[0]); } rimeaddr_copy(&oldparent, parent); } } } PROCESS_END(); }
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/