Hi Xiaojung

Thanks for your fast answort but this method has nothing changed.
I checked the 'forward_msg' just before sending to serial port and it contained the right data. But the serial gets  null's.  wrrrrr ... ;-)
any others ideas?
cheers
    Jordan

Dnia 6-06-2008 o godz. 14:09 Xiaojun Zhu napisał(a):
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






----------------------------------------------------
"Poznań dla Ziemi" - koncert Nelly Furtado 11 lipca 2008 r.
godz. 20.00 nad jez. Malta. Bilety 65 zł i 95 zł dostępne
na eventim.pl i bileteria.pl Poznań! Tu Warto Żyć.
http://klik.wp.pl/?adr=http://corto.www.wp.pl/as/furtadowpolsce.html&sid=373
_______________________________________________
Tinyos-help mailing list
[email protected]
https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help

Reply via email to