У меня есть 2 вида узлов: узел базовой станции и простой узел.
Я хочу смоделировать сеть, которая воспроизводит парадигму запрос — ответ с помощью симулятора Cooja.
Я новичок в Куджа, и я хочу разделить мою сеть на ячейки и выбрать репрезентативный узел в каждой ячейке и позволить другим членам ячейки отправить сообщение на репрезентативный узел ячейки, а затем каждый репрезентативный узел соберет эти информацию и отправлять ее представительным узлам восходящего потока, пока она не достигнет BS.
Сначала BS отправит запрос, затем простые узлы ответят на этот набор, собрав информацию у членов своей ячейки. Допустим, в каждой ячейке будет 4 узла, а 5-й простой узел является репрезентативным узлом, который будет собирать эту информацию и отправлять ее в восходящий узел, пока не достигнет BS.
я начинаю с использования кода одноадресной рассылки, чтобы отправить сообщение репрезентативному узлу для ячейки, но когда я попытался нацелиться на более чем один идентификатор репрезентативных узлов, чтобы создать более одной соты, он не работает, он всегда нацелен на ID1, который является репрезентативный узел ячейки # 1, я также хочу на самом деле отправить значение функции casaer (ключ и шифр) вместо сообщения приветствия репрезентативному узлу.
мои вопросы:
Как я могу на самом деле отправить значение функции? и как представительский узел будет собирать эту информацию и отправлять ее в представительский узел восходящего потока ???
это то, что я сделал до сих пор ..
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();
}
что я должен делать ? это не работает …, я ценю вашу тяжелую работу со мной, ребята ..
Задача ещё не решена.
Других решений пока нет …