我有两种节点:一个基站节点和一个简单节点。
我想模拟一个由Cooja模拟器播放请求 - 响应范例的网络。
我是cooja的新手,我想将我的网络分成单元格并在每个单元格中选择一个代表节点,让单元的其他成员向单元的代表节点发送消息,然后每个代表节点将收集这些信息并将其发送到上游代表节点,直到它到达BS。 BS将首先发送请求,然后简单节点将通过从其小区成员收集信息来响应该请求。假设在每个单元中将有4个节点,第5个简单节点是代表节点,它将收集此信息并将其发送到上游节点,直到它到达BS。
我首先使用单播代码向一个单元格的代表节点发送消息,但是当我尝试将多个代表节点的ID定位到一个以上的单元格时,它无法正常工作ID1是Cell#1的代表节点,我也希望实际将hello消息的函数casaer(密钥和密码)instade的值发送给代表节点。
我的Q: 我怎么能真正发送一个函数的值?以及代表节点将如何收集这些信息并将其发送到上游代表节点???
这就是我到目前为止所做的事情。
PROCESS(example_unicast_process, " unicast");
AUTOSTART_PROCESSES(&example_unicast_process);
int static b = 0 ;
int i=0;
int Table[10]={};
/*---------------------------------------------------------------------------*/
static void
recv_uc(struct unicast_conn *c, const rimeaddr_t *from)
{
do { i++ ;
if ( Table[i] == from->u8[0] );
b=Table[from->u8[0]]++ ;
printf(" message received from %d.%d and & = %d \n",
from->u8[0], from->u8[1], b);} while (i<1);
}
static const struct unicast_callbacks unicast_callbacks = {recv_uc};
static struct unicast_conn uc;
PROCESS_THREAD(example_unicast_process, ev, data)
{
void caesar (char cipher[], int shift) {
int i = 0;
while (cipher[i] != '\0') {
cipher[i] += (shift);
i++;
}
printf("%s\n", cipher);
}
PROCESS_EXITHANDLER(unicast_close(&uc);)
PROCESS_BEGIN();
unicast_open(&uc, 146, &unicast_callbacks);
while(1) {
static struct etimer et;
rimeaddr_t addr;
etimer_set(&et, CLOCK_SECOND*9);
char cipher[50];
int key = 5;
PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));
int n = 1||5||8;
packetbuf_copyfrom ("Hello",7);
addr.u8[0]= n ;
addr.u8[1]= 0 ;
packetbuf_copyto (cipher);
if(addr.u8[0] == n)
{if(rimeaddr_node_addr.u8[0] != 1)
{printf("%u.%u: sending unicast to address %u.%u = ",
rimeaddr_node_addr.u8[0],
rimeaddr_node_addr.u8[1],
addr.u8[0]= n,
addr.u8[1]=0 );
caesar (cipher, key);
if( addr.u8[0] == 1||5||8) {
unicast_send(&uc,&addr);
}
}
}
}
PROCESS_END();
}
我该怎么办?这个n不起作用......,我很感谢你和我们一起努力工作..