Hi Jordan,
I guess,maybe you should copy received packet to a local variable in the
base station.Then you can forward it to the computer. Just like this:

message_t forward_msg;

event Receive.receive(..)
...
memcpy(&forward_msg,msg,sizeof(...));


...
forwardmsg()
...
call AMSend(...,&forward_msg,sizeof(...))


Regards,
Xiaojun Zhu


2008/6/6 Jordan Jan Jordanow <[EMAIL PROTECTED]>:

> 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
>
_______________________________________________
Tinyos-help mailing list
[email protected]
https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help

Reply via email to