[Tinyos-help] dynamic list of items in message payload

etreu at uni-potsdam.de etreu at uni-potsdam.de
Sun Nov 28 13:04:19 PST 2010


http://docs.tinyos.net/index.php/Safe_TinyOS#Understanding_Safe_Code

Quoting Michael Schippling <schip at santafe.edu>:

> It's all raw bytes all the way down...
> but with a good cast you can produce anything.
>
> Create your structures however you like,
> as long as they are equal to or shorter than
> the maximum payload size:
>     typedef nx_struct
>     {
>       nx_uint8_t size;
>       nx_uint16_t data1;
>       nx_uint8_t data2;
>     } myData;
>
> Then create a base level TOS_Msg
> (or whatever they call it these days)
> and cast the data element to your struct
> using a pointer:
>     TOS_Msg myMessage;
>     myData *myDatap;
>     myDatap = (myData*) myMessage.data;
>
> Fill in myDatap as you would with any structure pointer:
>     myDatap->data1 = 0xBEEF;
>
> Then specify the actual length when you do the Send.
> Note, if you have a variable length array in your struct
> you will need to calculate the actual length that you want
> to send, rather than just using sizeof():
>     call RStatusMsg.send( TosBaseId, sizeof(myData), myDatap);
>
> On the Receive end you can look at your size field,
> poke directly at the TOS_Msg.length, or be all
> modern and data-isolated and use some abstract
> interface to get the actual message length. Once
> you know the length you can cast the Msgp->data
> field back to your struct.
>
> Or you could just define message types for each of
> your structures as the AM gods meant you to do.
>
> BTW can anyone explain what the "COUNT..." syntax means here?
>     nx_uint8_t (COUNT(0) data)[0];
> I couldn't find it in the ANSI spec I looked at...
>
> MS
>
>
>
>
>
> etreu at uni-potsdam.de wrote:
>> That's at least something that lead me to working solution. Ctp   
>> does  not uses embedded structs (neither tymo does, too). Both use   
>> 'raw'  bytes and point arithmetics. That's seems to be the way it   
>> works.
>>
>> Quoting wasif masood <rwmasood at gmail.com>:
>>
>>> you can get some idea form this CTP  header structure :
>>>
>>> typedef nx_struct {
>>>  nx_ctp_options_t    options;
>>>  nx_uint16_t        parent;
>>>  nx_uint16_t         etx;
>>>  nx_uint8_t (COUNT(0) data)[0]; // Deputy place-holder, field will probably
>>> be removed when we Deputize Ctp
>>> } ctp_routing_header_t;
>>>
>>> is uses flexible array.
>>>
>>>
>>> On Sun, Nov 28, 2010 at 2:04 PM, <etreu at uni-potsdam.de> wrote:
>>>
>>>> How can i send a varying array of items as part of a message?
>>>>
>>>> I cast the return of call Packet.getPayload to my struct. The struct
>>>> consists of some fix attributes. One of them is the number of
>>>> attributes.
>>>> The last attribute is a pointer/ array of an other struct.
>>>>
>>>> Is there anybody who did something similar or might tell how to do this?
>>>>
>>>> Best regards,
>>>> Enrico
>>>>
>>>> _______________________________________________
>>>> Tinyos-help mailing list
>>>> Tinyos-help at millennium.berkeley.edu
>>>> https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help
>>>>
>>>
>>>
>>> --
>>> Wasif Masood
>>>
>>
>>
>>
>>
>> _______________________________________________
>> Tinyos-help mailing list
>> Tinyos-help at millennium.berkeley.edu
>> https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help






More information about the Tinyos-help mailing list