X-Git-Url: https://oss.titaniummirror.com/gitweb/?a=blobdiff_plain;f=tos%2Flib%2Fserial%2FSerialActiveMessageP.nc;h=7bdc56382c65d5716fcff5c5d799098ab8a5955c;hb=e9bfab607e051bae6afb47b44892ce37541d1b44;hp=6296441cab57c0818fe41f4bb81dd7db5aace52e;hpb=c6303e07e3a6fd90ec4d966910bebfb2e213d808;p=tinyos-2.x.git diff --git a/tos/lib/serial/SerialActiveMessageP.nc b/tos/lib/serial/SerialActiveMessageP.nc index 6296441c..7bdc5638 100644 --- a/tos/lib/serial/SerialActiveMessageP.nc +++ b/tos/lib/serial/SerialActiveMessageP.nc @@ -46,14 +46,23 @@ generic module SerialActiveMessageP () { } implementation { - serial_header_t* getHeader(message_t* msg) { - return (serial_header_t*)(msg->data - sizeof(serial_header_t)); + serial_header_t* ONE getHeader(message_t* ONE msg) { + return TCAST(serial_header_t* ONE, (uint8_t*)msg + offsetof(message_t, data) - sizeof(serial_header_t)); + } + + serial_metadata_t* getMetadata(message_t* msg) { + return (serial_metadata_t*)(msg->metadata); } command error_t AMSend.send[am_id_t id](am_addr_t dest, message_t* msg, uint8_t len) { serial_header_t* header = getHeader(msg); + + if (len > call Packet.maxPayloadLength()) { + return ESIZE; + } + header->dest = dest; // Do not set the source address or group, as doing so // prevents transparent bridging. Need a better long-term @@ -117,7 +126,7 @@ implementation { return NULL; } else { - return msg->data; + return (void * COUNT_NOK(len))msg->data; } }