Hi!
On Tue, 10 Nov 2009, Ricardo . wrote:
> Thanks for trying to help,
>
> this is the task sendSerialMessage:
>
> task void sendSerialMessage(){
>
>
> if (locked) {
> post sendSerialMessage();
> return;
> }
> else {
> test_serial_msg_t* rcm = (test_serial_msg_t*)call
> PacketSerial.getPayload(&packet_one, NULL);
> if (call PacketSerial.maxPayloadLength() < sizeof(test_serial_msg_t)) {
> return;
> }
>
> rcm -> counter = counter_val; //counter_val is a uint16_t global
> variable. Has the value received inReceive.receive(message_t* bufPtr, void*
> payload, uint8_t len).
>
> if (call SerialAMSend.send(0xffff, &packet_one,
> sizeof(test_serial_msg_t)) == SUCCESS) {
> locked = TRUE;
> }
> }
> }
>
The second parameter for the PacketSerial.getPayload should be
sizeof(test_serial_msg_t) (or call PacketSerial.maxPayloadLength()).
Also: I don't understand exactly the way you use the locked. You make it
FALSE in the AMSend.sendDone so you could end up doing two calls to
SerialAMSend.send before the SerialAMSend.sendDone is signaled.
>
> These is how I wire the componentes:
>
> configuration RadioCountToLedsAppC { }
> implementation {
> components MainC, RadioCountToLedsC as App, LedsC;
> components new AMSenderC(AM_RADIO_COUNT_MSG);
> components new AMReceiverC(AM_RADIO_COUNT_MSG);
> components new TimerMilliC();
> components ActiveMessageC;
>
> components SerialActiveMessageC; //----- SERIAL TEST
> components new SerialAMSenderC(AM_TEST_SERIAL_MSG);//----- SERIAL TEST
> App.SerialAMSend -> SerialAMSenderC.AMSend; //----- SERIAL TEST
> App.SerialControl -> SerialActiveMessageC; //----- SERIAL TEST
> App.PacketSerial -> SerialAMSenderC; //----- SERIAL TEST
>
> App.Boot -> MainC.Boot;
>
> App.Receive -> AMReceiverC;
> App.AMSend -> AMSenderC;
> App.RadioControl -> ActiveMessageC;
> App.Leds -> LedsC;
> App.MilliTimer -> TimerMilliC;
> App.Packet -> AMSenderC;
> }
>
> ----
>
> module RadioCountToLedsC {
> uses {
> interface Leds;
> interface Boot;
> interface Receive;
> interface AMSend;
> interface Timer<TMilli> as MilliTimer;
> interface SplitControl as RadioControl;
> interface Packet;
>
> //------ Test Serial
> interface SplitControl as SerialControl;
> interface Packet as PacketSerial;
> interface AMSend as SerialAMSend;
> //interface Receive as SerialReceive;
> }
> }
>
> -------------------
>
> Function where Send is done:
>
> event void MilliTimer.fired() {
> counter++;
> if (locked) {
> return;
> }
> else {
> radio_count_msg_t* rcm = (radio_count_msg_t*)call
> Packet.getPayload(&packet, NULL);
> if (call Packet.maxPayloadLength() < sizeof(radio_count_msg_t)) {
> return;
> }
> rcm->counter = counter;
> if (call AMSend.send(AM_BROADCAST_ADDR, &packet,
> sizeof(radio_count_msg_t)) == SUCCESS) {
> locked = TRUE;
> }
> }
> }
>
>
Same comment about the Packet.getPayload above. I don't see any other
issues.
--
Razvan ME
> -------------------
>
>
> Receive function that post the task sendSerialMessage():
>
> event message_t* Receive.receive(message_t* bufPtr, void* payload, uint8_t
> len) {
> radio_count_msg_t* rcm = NULL;
> rcm = (radio_count_msg_t*) payload;
> counter_val = rcm -> counter; //counter_val is a uint16_t global variable
>
> post sendSerialMessage();
> }
>
> On Mon, Nov 9, 2009 at 8:42 PM, Razvan Musaloiu-E. <[email protected]>wrote:
>
>> Hi!
>>
>>
>> On Mon, 9 Nov 2009, Ricardo . wrote:
>>
>> Hello everyone ,
>>>
>>> I'm having some difficulty in debug my application. My question is if the
>>> component ActiveMessageC can be used with the component
>>> SerialActiveMessageC, without interfere with each other?
>>>
>>> In my application when the event AMSend.sendDone (message_to * BufPtr,
>>> error_t error) is signal I try to print the value of the sent message, and I
>>> get a constant value that does not match the value sent.
>>>
>>> This is the piece of code used to obtain the value sent:
>>>
>>>
>>> AMSend.sendDone event void (* message_to BufPtr, error_t error) {
>>> radio_count_msg_t * rcm = NULL;
>>>
>>> if (& packet == BufPtr) {
>>> rcm = (radio_count_msg_t *) call Packet.getPayload (BufPtr, NULL);
>>> counter_val = rcm -> counter;
>>> locked = FALSE;
>>> post sendSerialMessage ();
>>> }
>>> }
>>>
>>>
>> Could you please also show us the sendSerialMessage task?
>>
>>
>> In this example, counter_val is the value that will be sent by
>>> SerialAMSend.send (AM_BROADCAST_ADDR, & packet_one, sizeof
>>> (test_serial_msg_t)).
>>>
>>> Can I use both without running the risk of coming into conflict?
>>>
>>
>> Yes, you should be able to use simultaneously but you need to be careful
>> that the message_t you pass to .send is locked until the .sendDone is
>> signaled.
>>
>
> I believe that I had careful with this...
> Please, if you need anything else let me know.
>
>
>
>> --
>> Razvan ME
>>
>
>
> --
> Ricardo
>
_______________________________________________
Tinyos-help mailing list
[email protected]
https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help