Hello! I'm still getting random values...
I think my problem is in the link between* tmsg_t* and my mote struct generated with mig for C. Should it be an include of any file? I can't figure out. Thanks for any help... 2010/1/4 Echedey Lorenzo <[email protected]> > 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 | > -------------------------------------------- > -- -------------------------------------------- | Echedey Lorenzo Arencibia | --------------------------------------------
_______________________________________________ Tinyos-help mailing list [email protected] https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help
