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

Michael Schippling schip at santafe.edu
Sun Nov 28 13:18:54 PST 2010


re: COUNT
ah...thanks

Fortunately I only use T1 and have
very little interest in "safe" code
as it prevents me from using my bad
habits to implement what I want...
MS


etreu at uni-potsdam.de wrote:
> 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
> 
> 
> 
> 
> _______________________________________________
> 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