Cài đặt kỹ thuật LQI, kỹ thuật DE và kỹ thuật kết hợp DE-LQI

Một phần của tài liệu Nghiên cứu một số kỹ thuật ước lượng chất lượng tuyến trong mạng cảm biến không dây, ứng dụng nâng cao chất lượng truyền thông không dây (Trang 46 - 50)

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/

Một phần của tài liệu Nghiên cứu một số kỹ thuật ước lượng chất lượng tuyến trong mạng cảm biến không dây, ứng dụng nâng cao chất lượng truyền thông không dây (Trang 46 - 50)

Tải bản đầy đủ (PDF)

(71 trang)