[Rime 协议栈] 实验 ibc 和 abc 相互通信

概述

为了更好得理解前面博客的内容,我们通过cooja仿真器做一个简单的实现。有两个节点,其中一个节点烧写ibc程序,另一个节点烧写abc程序,然后启动两个节点,看他们的通信情况。

代码

实验用的代码在contiki/example/rime目录下的abc和ibc的基础之上进行很小的改动,使其能够通信。

abc的代码

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
#include "contiki.h"
#include "net/rime/rime.h"
#include "random.h"

#include "dev/button-sensor.h"

#include "dev/leds.h"

#include <stdio.h>
/*---------------------------------------------------------------------------*/
PROCESS(example_abc_process, "ABC example");
AUTOSTART_PROCESSES(&example_abc_process);
/*---------------------------------------------------------------------------*/
static void
abc_recv(struct abc_conn *c)
{
printf("abc message received '%s'\n", (char *)packetbuf_dataptr());
}
static const struct abc_callbacks abc_call = {abc_recv};
static struct abc_conn abc;
/*---------------------------------------------------------------------------*/
PROCESS_THREAD(example_abc_process, ev, data)
{
static struct etimer et;

PROCESS_EXITHANDLER(abc_close(&abc);)

PROCESS_BEGIN();

abc_open(&abc, 128, &abc_call);

while(1) {

/* Delay 2-4 seconds */
etimer_set(&et, CLOCK_SECOND * 2 + random_rand() % (CLOCK_SECOND * 2));

PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));

packetbuf_copyfrom("Hello", 6);
abc_send(&abc);
printf("abc message sent\n");
}

PROCESS_END();
}

ibc 的代码