Я пытаюсь написать код, в котором три спутника общаются по радио, посылая счетчик и широковещательную рассылку 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;
}
}
}
Я почти уверен, что проблема заключается в проверке мотива отправителя ... Как я могу определить, какой момент отправил сообщение так что он может переключать только один светодиод?