new TimerMilliC() as ReRxTimer,
DuplicateC,
TimeDiffC,
+ LocalTimeC,
RandomLfsrC
#ifdef MAC_DEBUG
,PlatformLedsC
CsmaMacP.Duplicate -> DuplicateC;
CsmaMacP.TimeDiff16 -> TimeDiffC;
-
+ CsmaMacP.LocalTime32kHz -> LocalTimeC;
+
#ifdef MAC_DEBUG
CsmaMacP.Led0 -> PlatformLedsC.Led0;
CsmaMacP.Led1 -> PlatformLedsC.Led1;
interface Alarm<T32khz, uint16_t> as Timer;
async command am_addr_t amAddress();
-
+ interface LocalTime<T32khz> as LocalTime32kHz;
+
#ifdef MACM_DEBUG
interface GeneralIO as Led0;
interface GeneralIO as Led1;
{
enum {
- /*
- BYTE_TIME=21, // byte at 23405 kBit/s, 4b6b encoded
- PREAMBLE_BYTE_TIME=14, // byte at 23405 kBit/s, no coding
- PHY_HEADER_TIME=84, // 6 Phy Preamble at 23405 bits/s
- TIME_CORRECTION=16, // difference between txSFD and rxSFD: 475us
- */
-
- BYTE_TIME=14, // byte at 35108 kBit/s, 4b6b encoded
- PREAMBLE_BYTE_TIME=9, // byte at 35108 kBit/s, no coding
- PHY_HEADER_TIME=56, // 6 Phy Preamble at 35108 bits/s
- TIME_CORRECTION=11, // difference between txSFD and rxSFD: to do
+ BYTE_TIME=ENCODED_32KHZ_BYTE_TIME, // phy encoded
+ PREAMBLE_BYTE_TIME=TDA5250_32KHZ_BYTE_TIME, // no coding
+ PHY_HEADER_TIME=6*PREAMBLE_BYTE_TIME, // 6 Phy Preamble
+ TIME_CORRECTION=TDA5250_32KHZ_BYTE_TIME+2, // difference between txSFD and rxSFD
+
+
SUB_HEADER_TIME=PHY_HEADER_TIME + sizeof(tda5250_header_t)*BYTE_TIME,
SUB_FOOTER_TIME=2*BYTE_TIME, // 2 bytes crc
MAXTIMERVALUE=0xFFFF, // helps to compute backoff
uint16_t restLaufzeit;
uint16_t rssiValue = 0;
+
+ uint32_t rxTime = 0;
/****** debug vars & defs & functions ***********************/
#ifdef MACM_DEBUG
}
bool isNewMsg(message_t* msg) {
- return call Duplicate.isNew(getHeader(msg)->src, (getHeader(msg)->token) & TOKEN_ACK_MASK);
+ return call Duplicate.isNew(getHeader(msg)->src, getHeader(msg)->dest,
+ (getHeader(msg)->token) & TOKEN_ACK_MASK);
}
void rememberMsg(message_t* msg) {
- call Duplicate.remember(getHeader(msg)->src, (getHeader(msg)->token) & TOKEN_ACK_MASK);
+ call Duplicate.remember(getHeader(msg)->src, getHeader(msg)->dest,
+ (getHeader(msg)->token) & TOKEN_ACK_MASK);
}
void checkSend() {
storeOldState(61);
macState = RX_P;
signalMacState();
+ requestAdc();
}
else if(macState <= RX_ACK) {
storeOldState(62);
storeOldState(94);
signalFailure(11);
}
+ post ReleaseAdcTask();
return m;
}
else {
signalFailure(13);
}
+ post ReleaseAdcTask();
}
/***** abused TimeStamping events **************************/
async event void RadioTimeStamping.receivedSFD( uint16_t time ) {
if(call RssiAdcResource.isOwner()) call ChannelMonitorData.getSnr();
- if(macState == RX_P) call ChannelMonitor.rxSuccess();
+ if(macState == RX_P) {
+ rxTime = call LocalTime32kHz.get();
+ call ChannelMonitor.rxSuccess();
+ }
}
async event void RadioTimeStamping.transmittedSFD( uint16_t time, message_t* p_msg ) {}
/**************** Module Global Constants *****************/
enum {
-/*
- BYTE_TIME=21, // byte at 23405 kBit/s, 4b6b encoded
- PREAMBLE_BYTE_TIME=14, // byte at 23405 kBit/s, no coding
- PHY_HEADER_TIME=84, // 6 Phy Preamble at 23405 bits/s
- TIME_CORRECTION=16, // difference between txSFD and rxSFD: 475us
-*/
- BYTE_TIME=14, // byte at 35108 kBit/s, 4b6b encoded
- PREAMBLE_BYTE_TIME=9, // byte at 35108 kBit/s, no coding
- PHY_HEADER_TIME=56, // 6 Phy Preamble at 35108 bits/s
- TIME_CORRECTION=11, // difference between txSFD and rxSFD: to do
+ BYTE_TIME=ENCODED_32KHZ_BYTE_TIME, // phy encoded
+ PREAMBLE_BYTE_TIME=TDA5250_32KHZ_BYTE_TIME, // no coding
+ PHY_HEADER_TIME=6*PREAMBLE_BYTE_TIME, // 6 Phy Preamble
+ TIME_CORRECTION=TDA5250_32KHZ_BYTE_TIME+2, // difference between txSFD and rxSFD
+
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,
if(isFlagSet(&flags, TEAMGEIST_ACTIVE) &&
(getHeader(msg)->type == teamgeistType)) {
if(rssiValue != INVALID_SNR) snr = rssiValue;
- rVal = signal Teamgeist.needsAck(msg, getHeader(msg)->src, getHeader(msg)->dest, snr);
*level = 2;
+ rVal = signal Teamgeist.needsAck(msg, getHeader(msg)->src, getHeader(msg)->dest, snr);
}
}
}
}
bool isNewMsg(message_t* msg) {
- return call Duplicate.isNew(getHeader(msg)->src, (getHeader(msg)->token) & TOKEN_ACK_MASK);
+ return call Duplicate.isNew(getHeader(msg)->src,
+ getHeader(msg)->dest,
+ (getHeader(msg)->token) & TOKEN_ACK_MASK);
}
void rememberMsg(message_t* msg) {
- call Duplicate.remember(getHeader(msg)->src, (getHeader(msg)->token) & TOKEN_ACK_MASK);
+ call Duplicate.remember(getHeader(msg)->src, getHeader(msg)->dest,
+ (getHeader(msg)->token) & TOKEN_ACK_MASK);
}
void prepareAck(message_t* msg) {
#endif
return lt;
}
+
/**************** Init ************************/
command error_t Init.init(){
if(call RssiAdcResource.isOwner()) call ChannelMonitorData.getSnr();
}
else if(macState == RX_ACK) {
- // if(call RssiAdcResource.isOwner()) call ChannelMonitor.start();
- // sdDebug(132);
}
else if(macState == RX_ACK_P) {
}
rxStat.duplicate = PERF_UNKNOWN;
rxStat.repCounter = 0xff;
#endif
- // sdDebug(190);
+ sdDebug(190);
if(macState == RX_P) {
// sdDebug(191);
if(error == SUCCESS) {
#endif
}
}
-#ifdef REDMAC_PERFORMANCE
else {
+#ifdef REDMAC_PERFORMANCE
rxStat.duplicate = PERF_REPEATED_MSG;
+#endif
}
-#endif
if(needsAckRx(msg, &level) && (action != RX)) {
- // sdDebug(197);
action = CCA_ACK;
+ if(level == 2) {
+ getMetadata(msg)->ack = WAS_ACKED;
+ }
}
else {
// sdDebug(198);
}
else if(macState == TX_ACK) {
checkCounter = 0;
- macState = RX;
- setRxMode();
+ macState = SLEEP;
+ setSleepMode();
+ // macState = RX;
+ // setRxMode();
// sdDebug(221);
#ifdef REDMAC_DEBUG
// sdDebug(40000U + repCounter);
if(macState == RX_P) {
rxTime = call LocalTime32kHz.get();
call ChannelMonitor.rxSuccess();
+ sdDebug(221);
}
}
// sdDebug(260);
}
}
-
+
/****** SampleTimer ******************************/
-
async event void SampleTimer.fired() {
call SampleTimer.start(localSleeptime);
// sdDebug(270);
async command void MacEval.increaseBackoff(bool value) {
atomic INCREASE_BACKOFF = value;
}
- async command void MacEval.addNav(bool value) {
+ async command void MacEval.addNav(uint8_t value) {
atomic ADD_NAV = value;
}
async command void MacEval.setLongRetry(uint8_t lr) {
/**************** Module Global Constants *****************/
enum {
-/*
- BYTE_TIME=21, // byte at 23405 kBit/s, 4b6b encoded
- PREAMBLE_BYTE_TIME=14, // byte at 23405 kBit/s, no coding
- PHY_HEADER_TIME=84, // 6 Phy Preamble at 23405 bits/s
- TIME_CORRECTION=16, // difference between txSFD and rxSFD: 475us
-*/
- BYTE_TIME=14, // byte at 35108 kBit/s, 4b6b encoded
- PREAMBLE_BYTE_TIME=9, // byte at 35108 kBit/s, no coding
- PHY_HEADER_TIME=56, // 6 Phy Preamble at 35108 bits/s
- TIME_CORRECTION=11, // difference between txSFD and rxSFD: to do
-
+
+ BYTE_TIME=ENCODED_32KHZ_BYTE_TIME, // phy encoded
+ PREAMBLE_BYTE_TIME=TDA5250_32KHZ_BYTE_TIME, // no coding
+ PHY_HEADER_TIME=6*PREAMBLE_BYTE_TIME, // 6 Phy Preamble
+ TIME_CORRECTION=TDA5250_32KHZ_BYTE_TIME+2, // difference between txSFD and rxSFD
+
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,
}
bool isNewMsg(message_t* msg) {
- return call Duplicate.isNew(getHeader(msg)->src, (getHeader(msg)->token) & TOKEN_ACK_MASK);
+ return call Duplicate.isNew(getHeader(msg)->src, getHeader(msg)->dest,
+ (getHeader(msg)->token) & TOKEN_ACK_MASK);
}
void rememberMsg(message_t* msg) {
- call Duplicate.remember(getHeader(msg)->src, (getHeader(msg)->token) & TOKEN_ACK_MASK);
+ call Duplicate.remember(getHeader(msg)->src, getHeader(msg)->dest,
+ (getHeader(msg)->token) & TOKEN_ACK_MASK);
}
void prepareAck(message_t* msg) {
/* constants */
enum {
PREAMBLE_LENGTH=2,
- BYTE_TIME=ENCODED_32KHZ_BYTE_TIME+3,
+ BYTE_TIME=TDA5250_32KHZ_BYTE_TIME+3,
PREAMBLE_BYTE=0x55,
SYNC_BYTE=0xFF,
SFD_BYTE=0x83,
} phyState_t;
#define PREAMBLE_LENGTH 2
-#define BYTE_TIME TDA5250_32KHZ_BYTE_TIME
+#define BYTE_TIME TDA5250_32KHZ_BYTE_TIME+3
#define PREAMBLE_BYTE 0x55
#define SYNC_BYTE 0xFF
#define SFD_BYTE 0x50