return getMetadata(msg)->strength;
}
- default event message_t* Receive.receive[am_id_t id](message_t* msg, void* payload, uint8_t len) {
+ default event message_t* Receive.receive[am_id_t id](message_t* msg, void* payload, uint8_t len) {
return msg;
}
task void postponeReRx() {
call ReRxTimer.startOneShot(5000);
}
-
+
uint16_t backoff(uint8_t counter) {
uint16_t mask = BACKOFF_MASK >> (MAX_LONG_RETRY - counter);
return (call Random.rand16() & mask);
}
}
- async event void RadioTimeStamping.transmittedSFD( uint16_t time, message_t* p_msg ) {}
+ async event void RadioTimeStamping.transmittedSFD( uint16_t time, message_t* p_msg ) {
+ if((macState == TX) && (p_msg == txBufPtr)) {
+ // to do
+ }
+ }
/***** Rssi Resource events ******************/
event void RssiAdcResource.granted() {
#ifndef RED_MAC_H
#define RED_MAC_H
-/*
- * highest bit of token set: this message is ACK and not intended for the
- * upper layers. Token is used for alternating bit like duplicate detection,
- * and set by the sender in [0,127] intervall. The receiver reflects the
- * token in the Ack, with the highest bit set.
- */
-
typedef nx_struct red_mac_header_t {
nx_uint8_t repetitionCounter;
nx_uint32_t time; // processing delay of message
SUB_HEADER_TIME=PHY_HEADER_TIME + sizeof(message_header_t)*BYTE_TIME,
SUB_FOOTER_TIME=2*BYTE_TIME, // 2 bytes crc
// DEFAULT_SLEEP_TIME=1625,
- // DEFAULT_SLEEP_TIME=2048,
+ DEFAULT_SLEEP_TIME=2048,
// DEFAULT_SLEEP_TIME=4096,
// DEFAULT_SLEEP_TIME=8192,
- DEFAULT_SLEEP_TIME=16384,
+ // DEFAULT_SLEEP_TIME=16384,
// DEFAULT_SLEEP_TIME=32768U,
// DEFAULT_SLEEP_TIME=65535U,
DATA_DETECT_TIME=17,
#ifdef DELTATIMEDEBUG
dTrace.sender = getHeader(msg)->src;
#endif
+ getMetadata(msg)->sfdtime = rxTime;
getMetadata(msg)->time = calcGeneratedTime((red_mac_header_t*) payload);
getMetadata(msg)->ack = WAS_NOT_ACKED;
m = signal MacReceive.receiveDone(msg);
dTrace.delta = call TimeDiff32.computeDelta(dTrace.now, dTrace.msgTime);
txMacHdr->time = dTrace.delta;
call DeltaTrace.traceTx(&dTrace);
+ getMetadata(p_msg)->sfdtime = dTrace.now;
#else
+ getMetadata(p_msg)->sfdtime = call LocalTime32kHz.get();
txMacHdr->time =
- call TimeDiff32.computeDelta(call LocalTime32kHz.get(), getMetadata(p_msg)->time);
+ call TimeDiff32.computeDelta(getMetadata(p_msg)->sfdtime,
+ getMetadata(p_msg)->time);
#endif
}
}
rxStat.duplicate = PERF_NEW_MSG;
#endif
storeStrength(msg);
+ getMetadata(msg)->sfdtime = rxTime;
getMetadata(msg)->time = calcGeneratedTime((red_mac_header_t*) payload);
getMetadata(msg)->ack = WAS_NOT_ACKED;
m = signal MacReceive.receiveDone(msg);
async event void RadioTimeStamping.transmittedSFD(uint16_t time, message_t* p_msg ) {
if((macState == TX) && (p_msg == txBufPtr)) {
+ getMetadata(msg)->sfdtime = call LocalTime32kHz.get();
txMacHdr->time =
- call TimeDiff32.computeDelta(call LocalTime32kHz.get(), getMetadata(p_msg)->time);
+ call TimeDiff32.computeDelta(getMetadata(msg)->sfdtime,
+ getMetadata(p_msg)->time);
}
}
#include "AM.h"
#include "PacketAck.h"
+/*
+ * highest bit of token set: this message is ACK and not intended for the
+ * upper layers. Token is used for alternating bit like duplicate detection,
+ * and set by the sender in [0,127] intervall. The receiver reflects the
+ * token in the Ack, with the highest bit set.
+ */
+
typedef nx_struct tda5250_header_t {
- nx_uint8_t length;
- nx_am_addr_t src;
- nx_am_addr_t dest;
- nx_am_id_t type;
- nx_uint8_t token;
+ nx_uint8_t length;
+ nx_am_addr_t src;
+ nx_am_addr_t dest;
+ nx_am_id_t type;
+ nx_uint8_t token;
} tda5250_header_t;
typedef nx_struct tda5250_footer_t {
nx_uint8_t ack;
/* local time when message was generated */
nx_uint32_t time;
+ /* time of sfd generation */
+ nx_uint32_t sfdtime;
nx_uint8_t sendSecurityMode;
nx_uint8_t receiveSecurityMode;
/* some meta information that allows to compute a density */