Yeah! Thanks a lot, that is exactly what I am looking for :) I'll work on it in my code in the next days and tell you if it's working so everyone can use it as a reference.
2010/1/2 Guillermo De Cesco <[email protected]> > Hi, > > suppose you have the following structure defined in mote's side: > > typedef nx_struct SequencedIdPacket{ > nx_uint8_t moteId; > nx_uint16_t sqnumber; > nx_uint8_t data[ ]; > }SequencedIdPacket_t; > > , suppose this packet is in tinyos AM message payload, in order to decode > the received packet in PC side you have to do as follow (in C code, this > differs if you are usisng Java or C#): > > int len, i; > uint8_t msg_type; > uint8_t msg_len; > uint8_t moteId; > //HERE I GET A PACKET FROM SERIALFORWARDER MAY BE DIFERENT IF YOU > CONNECT DIRECTLY TO SERIAL > //PORT. > uint8_t *packet = read_sf_packet(fd, &len); > > if (!packet) > exit(0); > > if (len >= 1 + SPACKET_SIZE && packet[0] == > SERIAL_TOS_SERIAL_ACTIVE_MESSAGE_ID){ > > tmsg_t *msg = new_tmsg(packet + 1, len - 1); > > if (!msg) > exit(0); > > //THIS IS THE SAME AS EXPLAINED BELOW BUT FOR THE FIELDS OF TINYOS > MSG PACKET > msg_type = spacket_header_type_get(msg); > msg_len = spacket_header_length_get(msg); > > free(msg); > //HERE IS WHERE YOU ACTUALLY HAVE A POINTER TO THE BEGINNING OF YOUR > DATA > //AS SEEN BELOW YOU HAVE TO USE THE FUNCTION PROVIDED TO GET THE > FIELDS OF THE PACKET > //iN THIS CASE I AM READING THE MOTES ID > msg = new_tmsg(packet + 1 + SPACKET_SIZE,len - 1 - SPACKET_SIZE); > moteId = seqidpacket_moteId_get(msg); > ....... > ---------------------------------------- > Notes: > SPACKET_SIZE and SERIAL_TOS_SERIAL_ACTIVE_MESSAGE_ID are defined > "serialpacket.h" and correspond to the serial > protocol comunication of tinyos. > > prettylisten.c prints Tinyos msg header info and payload in hex format as > seen below: > > spacket_header_dest_get(msg), > spacket_header_src_get(msg), > spacket_header_length_get(msg), > spacket_header_group_get(msg), > spacket_header_type_get(msg)); > hexprint((uint8_t *)tmsg_data(msg) + spacket_data_offset(0), > tmsg_length(msg) - spacket_data_offset(0)); > > free(msg); > --------------------------------------------- > > , is not intuitive in fact is more clear when using object oriented > languages like java or C#, where the offset and size of fields are known > inside the class that reresent the network structure. > > hope this bring some ligth to the problem. > > -Bill > > > On Fri, Jan 1, 2010 at 6:22 PM, Echedey Lorenzo <[email protected]> wrote: > >> Thanks Guillermo for your answer. >> >> The question is.. where and how do I link the generic type tmsg_t to my >> structure (which I suppose is the *enum *I see in the mig .h generated >> file) When I use prettylisten the data I decode is not the one I am >> expecting. Instead of that, I receive random values. That is why i think I >> am not linking my new mig struct to tmsg_t. >> >> Kind Regards >> >> 2010/1/1 Guillermo De Cesco <[email protected]> >> >> Hi, >>> >>> because of the difference in architecture between PC and motes, even >>> between motes, you cant cast the message payload to your struct because in >>> the mote the struct will have a size and padding different than it will or >>> could have in PC platform. So here is why MIG is usefull, you make your >>> message based on tmsg_t and fill the fields of your struct using the >>> functiones provided in the .c file. The same way you read the fields of your >>> struct inside the tmsg_t with the functions provided to read or get. >>> >>> hope this help. >>> >>> -Bill >>> >>> On Fri, Jan 1, 2010 at 12:47 PM, Echedey Lorenzo <[email protected]>wrote: >>> >>>> Hi friends, >>>> >>>> I want to use the same *nx_struct* that I use in my telosb sensorial >>>> application in my C based listener where I record all the received data: >>>> >>>> *mig c -c-prefix=TELOSBAPP_H -target=telosb Telosbapp.h mystruct_t -o >>>> OUTmystruct_t.h >>>> * >>>> >>>> So I get two files, one .c and one .h with an enum and some functions to >>>> get and set data in the structure. But I can't find any C structure to use >>>> in those files nor I don't know how to do it. I can see for instance in the >>>> *prettylisten *C example of the SDK ( >>>> /opt/tinyos-2.x/support/sdk/c/sf/prettylisten.c ) that it uses the * >>>> tmsg_t* by default. I think I am not matching received values with my C >>>> mig structure because I have not linked it in any way. What am I doing >>>> wrong? How can I use my mig generated struct (and where is it) with >>>> prettylisten? >>>> >>>> Thanks a lot and Happy New Year. >>>> >>>> -- >>>> -------------------------------------------- >>>> | Echedey Lorenzo Arencibia | >>>> -------------------------------------------- >>>> >>>> _______________________________________________ >>>> Tinyos-help mailing list >>>> [email protected] >>>> https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help >>>> >>> >>> >>> >>> -- >>> Ing. Guillermo De Cesco >>> Invenio Ingenieria srl. >>> tel: (54)2944 442119 >>> cel:(54)2944 15534750 >>> web: www.invenioing.com >>> Av. Pioneros 4163 Dpto 6. CP(R8402AMH) >>> San Carlos de Bariloche. >>> Rio Negro, Argentina. >>> >> >> >> >> -- >> -------------------------------------------- >> | Echedey Lorenzo Arencibia | >> -------------------------------------------- >> > > > > -- > Ing. Guillermo De Cesco > Invenio Ingenieria srl. > tel: (54)2944 442119 > cel:(54)2944 15534750 > web: www.invenioing.com > Av. Pioneros 4163 Dpto 6. CP(R8402AMH) > San Carlos de Bariloche. > Rio Negro, Argentina. > -- -------------------------------------------- | Echedey Lorenzo Arencibia | --------------------------------------------
_______________________________________________ Tinyos-help mailing list [email protected] https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help
