]> oss.titaniummirror.com Git - tinyos-2.x.git/blobdiff - tos/lib/serial/SerialActiveMessageP.nc
Merge TinyOS 2.1.1 into master.
[tinyos-2.x.git] / tos / lib / serial / SerialActiveMessageP.nc
index 6296441cab57c0818fe41f4bb81dd7db5aace52e..7bdc56382c65d5716fcff5c5d799098ab8a5955c 100644 (file)
@@ -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;
     }
   }