Идентификация датчика ID мот - крошечный OS / Cooja - PullRequest
0 голосов
/ 21 марта 2020

Я пытаюсь написать код, в котором три спутника общаются по радио, посылая счетчик и широковещательную рассылку ID для переключения светодиода. Каждый из переключателей включает один заданный светодиод c (сообщения, отправляемые переключателем 0, состоящим из 1-го элемента, светодиодом 1 и 2, 2), и со счетчиком c все индикаторы отключаются. Мой код таков:

event message_t* Receive.receive(message_t* bufPtr, void* payload, uint8_t len) {

    dbg("RadioCountToLedsC", "Received packet of length %hhu.\n", len);
    if (len != sizeof(radio_count_msg_t)) {return bufPtr;}
    else {
      radio_count_msg_t* rcm = (radio_count_msg_t*)payload;
      dbg("nodeid: %d\n", nodeid);
      if (rcm->counter%10==0){
      call Leds.led0Off();
      call Leds.led1Off();
      call Leds.led2Off();
      }
      else {
      if (rcm->nodeid==aux0) {
    call Leds.led0Toggle();
      }
      else if (rcm->nodeid==aux1) {
    call Leds.led1Toggle();
      }
     else if (rcm->nodeid==aux2) {
    call Leds.led2Toggle();
      }
    }
    return bufPtr;
   } 
  }

Где я пытаюсь назначить переменным aux идентификатор мотов, отправивших сообщение, чтобы проверить, является ли это правильным шагом для переключения светодиодов. В то время как событие отправки прикреплено к разным таймерам (с разными частотами):

event void Timer0.fired() {

      counter++;
    dbg("App", "App: timer fired, counter is %hu.\n", counter);
    if (locked) {
      return;
    }
    else {
      radio_count_msg_t* rcm = (radio_count_msg_t*)call Packet.getPayload(&packet, sizeof(radio_count_msg_t));
      if (rcm == NULL) {
    return;
      }

      rcm->counter = counter;
      rcm->nodeid = TOS_NODE_ID;
      aux0=TOS_NODE_ID;
      if (call AMSend.send(AM_BROADCAST_ADDR, &packet, sizeof(radio_count_msg_t)) == SUCCESS) {
    dbg("App", "App: packet sent.\n", counter); 
    locked = TRUE;
      }
    }
  }

Я почти уверен, что проблема заключается в проверке мотива отправителя ... Как я могу определить, какой момент отправил сообщение так что он может переключать только один светодиод?

...