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
[email protected]
https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help