}
implementation {
- cc1000_header_t* getHeader(message_t* amsg) {
- return (cc1000_header_t*)(amsg->data - sizeof(cc1000_header_t));
+ cc1000_header_t* ONE getHeader(message_t* ONE amsg) {
+ return TCAST(cc1000_header_t* ONE, (uint8_t*)amsg + offsetof(message_t, data) - sizeof(cc1000_header_t));
}
cc1000_footer_t *getFooter(message_t *amsg) {
task void setWakeupTask();
- cc1000_metadata_t *getMetadata(message_t *amsg) {
- return (cc1000_metadata_t *)((uint8_t *)amsg->footer + sizeof(cc1000_footer_t));
+ cc1000_metadata_t * ONE getMetadata(message_t * ONE amsg) {
+ return TCAST(cc1000_metadata_t * ONE, (uint8_t*)amsg + offsetof(message_t, footer) + sizeof(cc1000_footer_t));
}
void enterIdleState() {
call ByteRadio.off();
}
- void setPreambleLength(message_t *msg);
+ void setPreambleLength(message_t * ONE msg);
/* Initialisation, startup and stopping */
/*--------------------------------------*/
/* CSMA */
/*------*/
- event void ByteRadio.rts(message_t *msg) {
+ event void ByteRadio.rts(message_t * ONE msg) {
atomic
{
f.txPending = TRUE;
return sleepToDuty(s);
}
- void setPreambleLength(message_t *msg) {
+ void setPreambleLength(message_t * ONE msg) {
cc1000_metadata_t *meta = getMetadata(msg);
uint16_t s;
uint32_t plen;
uint16_t rxShiftBuf;
message_t rxBuf;
- message_t *rxBufPtr = &rxBuf;
+ message_t * ONE rxBufPtr = &rxBuf;
uint16_t preambleLength;
- message_t *txBufPtr;
+ message_t * ONE_NOK txBufPtr;
uint8_t nextTxByte;
const_uint8_t ackCode[5] = { 0xab, ACK_BYTE1, ACK_BYTE2, 0xaa, 0xaa };
/* Packet structure accessor functions. Note that everything is
* relative to the data field. */
- cc1000_header_t *getHeader(message_t *amsg) {
- return (cc1000_header_t *)(amsg->data - sizeof(cc1000_header_t));
+ cc1000_header_t * ONE getHeader(message_t * ONE amsg) {
+ return TCAST(cc1000_header_t * ONE, (uint8_t *)amsg + offsetof(message_t, data) - sizeof(cc1000_header_t));
}
- cc1000_footer_t *getFooter(message_t *amsg) {
+ cc1000_footer_t *getFooter(message_t * ONE amsg) {
return (cc1000_footer_t *)(amsg->footer);
}
- cc1000_metadata_t *getMetadata(message_t *amsg) {
- return (cc1000_metadata_t *)((uint8_t *)amsg->footer + sizeof(cc1000_footer_t));
+ cc1000_metadata_t * ONE getMetadata(message_t * ONE amsg) {
+ return TCAST(cc1000_metadata_t * ONE, (uint8_t *)amsg + offsetof(message_t, footer) + sizeof(cc1000_footer_t));
}
/* State transition functions */
rxShiftBuf = rxShiftBuf << 8 | in;
nextByte = rxShiftBuf >> f.rxBitOffset;
- ((uint8_t *)rxBufPtr)[count++] = nextByte;
+ ((uint8_t *COUNT(sizeof(message_t)))rxBufPtr)[count++] = nextByte;
// Adjust rxLength to correspond to the corresponding offset in message_t
rxLength += offsetof(message_t, data);
command void* Packet.getPayload(message_t *msg, uint8_t len) {
if (len <= TOSH_DATA_LENGTH) {
- return (void*)msg->data;
+ return (void* COUNT_NOK(len))msg->data;
}
else {
return NULL;