0
의사 코드;TinyOS, 마우스를 다시 시작한 후 패킷을받을 수 없습니다.
1 부팅 보내기 (녹색 빛)
- 같이 따라 주도 패킷 세트를 디코딩, 패킷을 수신을 완료 한 후
는 패킷을 방송 (적색 LED) (파란색 설정)
- 이 완료 (녹색 LED 세트)
- 이 패킷을 수신하여 디코딩 한 세트로서 적절했다 보낼 코딩 한 후 패킷을 브로드 캐스트 (7 (적색 세트 +) 청색 + 녹색)
이 단계 후에 mote 1은 LED가됩니다. set (7) 및 mote 2는 LED입니다. set (2) [mote 1이 (가) 전송을 시작했습니다.] 아주 미세하게 작동합니다. 내가 티끌 하나를 다시 시작할 때 그러나 당신은 두 개의 수신기를
implementation{
bool busy = FALSE;
message_t pkt;
message_t i_pkt;
event void Boot.booted() {
call Leds.set(1);
call AMControl.start();
printf("Booted %d\n",1);
call CC2420Packet.setPower(&pkt, 20);
call CC2420Packet.setPower(&i_pkt, 2);
}
event void Timer0.fired() {
if (!busy) {
FindRoute_t *btrpkt = (FindRoute_t*)(call Packet.getPayload(&pkt, sizeof (FindRoute_t)));
btrpkt->counter = 4;
if (call firstsender.send(AM_BROADCAST_ADDR, &pkt, sizeof(FindRoute_t)) == SUCCESS) {
busy = TRUE;
}
}
}
event void AMControl.startDone(error_t err) {
if (err == SUCCESS) {
call Timer0.startOneShot(250);
}
else {
call AMControl.start();
}
}
event void AMControl.stopDone(error_t err) {
}
event void firstsender.sendDone(message_t *msg, error_t error) {
if (&pkt == msg) {
call Leds.set(2);
busy = FALSE;
}
}
event message_t* firstreceiver.receive(message_t* msg, void* payload, uint8_t len) {
if (len == sizeof(FindRoute_t)) {
FindRoute_t* btrpkt = (FindRoute_t*)payload;
call Leds.set(btrpkt->counter);
call Timer1.startOneShot(3000);
}
return msg;
}
event void Timer1.fired(){
if (!busy) {
FindRoute_t *btrpkt = (FindRoute_t*)(call Packet.getPayload(&i_pkt, sizeof (FindRoute_t)));
btrpkt->counter = 7;
if (call nextsender.send(AM_BROADCAST_ADDR, &i_pkt, sizeof(FindRoute_t)) == SUCCESS) {
busy = TRUE;
}
}
}
event void nextsender.sendDone(message_t *msg, error_t error) {
if (&i_pkt == msg) {
call Leds.set(2);
busy = FALSE;
}
}
event message_t* nextreceiver.receive(message_t* msg, void* payload, uint8_t len) {
if (len == sizeof(FindRoute_t)) {
FindRoute_t* btrpkt = (FindRoute_t*)payload;
call Leds.set(btrpkt->counter);
}
return msg;
}