Hi all,

I found a small bug in /tossim/sf/sim/SerialActiveMessageC.nc. If you have
already found it, please just ignore this mail.

In function "sim_event_t* allocate_serial_deliver_event(int node, message_t*
msg, sim_time_t t)",
the code is like "evt->data = msg;", this pointer copy may not work
correctly.

When sending messages from JAVA to TOSSIM, the messages are always
corrupted.

Here is a quick fix, maybe you have a better one :)


   sim_event_t* allocate_serial_deliver_event(int node, message_t* msg,
sim_time_t t) {
       sim_event_t* evt = (sim_event_t*)malloc(sizeof(sim_event_t));
// Yang-
message_t* newmsg = (message_t*)malloc(sizeof(message_t));
memcpy(newmsg, msg, sizeof(message_t));
// -Yang
       evt->mote = node;
       evt->time = t;
       evt->handle = serial_active_message_deliver_handle;
       evt->cleanup = sim_queue_cleanup_event;
       evt->cancelled = 0;
       evt->force = 0;
// Yang-
       //evt->data = msg;
       evt->data = newmsg;
// -Yang
       return evt;
   }

   event void Model.receive(message_t* msg) {
       uint8_t len;
       void* payload;

       memcpy(bufferPointer, msg, sizeof(message_t));
// Yang-
if (msg!=0) free(msg);
//-Yang
       payload = call Packet.getPayload(bufferPointer, call
Packet.maxPayloadLength());
       len = call Packet.payloadLength(bufferPointer);
       dbg("Serial", "Received serial message (%p) of type %hhu and length
%hhu @ %s.\n",
           bufferPointer, call AMPacket.type(bufferPointer), len,
sim_time_string());
       bufferPointer = signal Receive.receive[call
AMPacket.type(bufferPointer)]
           (bufferPointer, payload, len);
   }



-- 
Yang Peng

Ph.D. Candidate
Department of Computer Science
Iowa State University
http://www.cs.iastate.edu/~ypeng/
_______________________________________________
Tinyos-help mailing list
Tinyos-help@millennium.berkeley.edu
https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help

Reply via email to