Hello * ,
 
    I wrote a little program named 'EasyBroadcast' that should send a 
message every 2 second to the base station with incrementing values. 
Base station is a node with ID=1. Base station forwards received packets 
to serial. The problem is when I read this message with MsgReader I only 
get:
1212743018886: Message <EasyBroadcastMsg>
[nodeid = 0x00]
[xValue=0x0]
[yValue=0x0]

I checked with printf if the message I sent to serial contains right 
data  :
 --------
from node: 5
xv: 6
yv: 18
--------

So obvious the data is right. But serial gets 'null' values.
_____________________________________________________________-
My code :
EasyBroadcastC.nc

#include <Timer.h>
#include "printf.h"
#include "EasyBroadcast.h"

module EasyBroadcastC {
        uses{
         interface Boot;
         interface SplitControl as SerialControl;
         interface SplitControl as RadioControl;
         interface StdControl as RoutingControl;
         interface Packet as RadioPacket;
         interface Packet as SerialPacket;
         interface AMSend;
         interface Send;
         interface Leds;
         interface Timer<TMilli>;
         interface RootControl;
         interface Receive;
         interface SplitControl as PrintfControl;
         interface PrintfFlush;
        }
}
implementation {
        message_t packet;
        bool sendBusy = FALSE;
        uint8_t xCounter = 0;
        uint8_t yCounter = 0;

        event void Boot.booted() {
                call PrintfControl.start();
                call RadioControl.start();
        }
        event void RadioControl.startDone(error_t err) {
                if (err == !SUCCESS) {
                        call RadioControl.start();
                }else {
                        call RoutingControl.start();
                        if ( TOS_NODE_ID ==1 ){
                                call SerialControl.start();
                                call RootControl.setRoot();
                        }else{
                                call Timer.startPeriodic(2000);
                        }
                }
        }
        void sendMessage() {
                EasyBroadcastMsg* msg = (EasyBroadcastMsg*)(call 
RadioPacket.getPayload(&packet,NULL));
                msg -> nodeid = TOS_NODE_ID;
                msg -> xValue = xCounter;
                msg -> yValue = yCounter;
                if (call Send.send(&packet, sizeof(EasyBroadcastMsg)) == 
SUCCESS)
                        sendBusy = TRUE;
                else
                        call Leds.led0On();
        }
        void forwardMessage(message_t* m) {
                call AMSend.send(AM_BROADCAST_ADDR,&newPacket, 
sizeof(EasyBroadcastMsg));
                //EasyBroadcastMsg* msg;
                //call AMSend.send(AM_BROADCAST_ADDR,m, 
sizeof(EasyBroadcastMsg));
                /*printf("from node: %d\n",msg -> nodeid);
                printf("xv: %d\n",msg -> xValue);
                printf("yv: %d\n",msg -> yValue);
                printf("--------\n");
                call PrintfFlush.flush();*/
        }
        event void Timer.fired() {
                call Leds.led2Toggle();
                if (!sendBusy){
                        xCounter++;
                        yCounter +=3;
                        sendMessage();
                }
        }
        event void Send.sendDone (message_t* m, error_t err) {
                if (err != SUCCESS)
                        call Leds.led0Toggle();
                sendBusy = FALSE;
        }
        event void AMSend.sendDone(message_t* bufPtr, error_t error) {
                if (error == SUCCESS)
                        call Leds.led2Toggle();
        }
        event message_t * Receive.receive(message_t* msg, void * payload, 
uint8_t len) {
                call Leds.led1Toggle();
                forwardMessage(msg);
                return msg;
        }
        event void PrintfControl.startDone(error_t error) {}
        event void PrintfControl.stopDone(error_t error) {}
        event void PrintfFlush.flushDone(error_t error) {}
        event void RadioControl.stopDone(error_t err) {}
        event void SerialControl.startDone(error_t err) {}
        event void SerialControl.stopDone(error_t err) {}
}
EasyBroadcastAppC.nc
configuration EasyBroadcastAppC {}
implementation {
        components EasyBroadcastC, MainC, LedsC, ActiveMessageC;
        components CollectionC as Collector;
        components new CollectionSenderC(AM_EASYBROADCASTMSG);
        components SerialActiveMessageC as AM;
        components new TimerMilliC();
        components PrintfC;

        EasyBroadcastC.Boot -> MainC;
        EasyBroadcastC.Leds -> LedsC;
        EasyBroadcastC.Timer -> TimerMilliC;
        EasyBroadcastC.SerialControl -> AM;
        EasyBroadcastC.RadioControl -> ActiveMessageC;
        EasyBroadcastC.RoutingControl -> Collector;
        EasyBroadcastC.AMSend -> AM.AMSend[AM_EASYBROADCASTMSG];
        EasyBroadcastC.Send -> CollectionSenderC;
        EasyBroadcastC.RadioPacket -> CollectionSenderC.Packet;
        EasyBroadcastC.SerialPacket -> AM.Packet;
        EasyBroadcastC.RootControl -> Collector;
        EasyBroadcastC.Receive -> Collector.Receive[AM_EASYBROADCASTMSG];
        EasyBroadcastC.PrintfControl-> PrintfC;
        EasyBroadcastC.PrintfFlush -> PrintfC;

}
EasyBroadcast.h
#ifndef EASYBROADCAST_H
#define EASYBROADCAST_H
enum {
        TIMER_PERIOD_MILLI = 2000,
        AM_EASYBROADCASTMSG = 6
};
typedef nx_struct EasyBroadcastMsg {
        nx_uint8_t nodeid;
        nx_uint8_t xValue;
        nx_uint8_t yValue;
} EasyBroadcastMsg;
#endif

__________________________________________________________________

It's probably some stupid error in reasoning but I would be grateful for 
help.

Jordan Jordanow

----------------------------------------------------
Kupujesz auto lub mieszkanie? 
Sprawdź hipotekę i rejestr zastawów. 
Odpisy dostarczymy Ci do domu!  
http://klik.wp.pl/?adr=www.krs.wp.pl&sid=380


_______________________________________________
Tinyos-help mailing list
[email protected]
https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help

Reply via email to