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