interface SplitControl;
interface Tda5250Control;
interface RadioByteComm;
+ interface ResourceRequested;
}
uses {
interface HplTda5250Config;
interface HplTda5250Data;
+ interface HplTda5250DataControl;
interface Resource as ConfigResource;
interface Resource as DataResource;
+ interface ResourceRequested as DataResourceRequested;
+
interface Alarm<T32khz, uint16_t> as DelayTimer;
}
}
case RADIO_MODE_SLEEP_TRANSITION:
call HplTda5250Config.SetSlaveMode();
call HplTda5250Config.SetSleepMode();
- call ConfigResource.release();
+ if (!(call HplTda5250Config.IsTxRxPinControlled()))
+ call ConfigResource.release();
atomic radioMode = RADIO_MODE_SLEEP;
signal Tda5250Control.SleepModeDone();
break;
case RADIO_MODE_TX_TRANSITION:
call HplTda5250Config.SetSlaveMode();
call HplTda5250Config.SetTxMode();
+ if (!(call HplTda5250Config.IsTxRxPinControlled()))
+ call ConfigResource.release();
atomic delayTimer = TRANSMITTER_DELAY;
call DelayTimer.start(TDA5250_TRANSMITTER_SETUP_TIME);
break;
case RADIO_MODE_RX_TRANSITION:
call HplTda5250Config.SetSlaveMode();
call HplTda5250Config.SetRxMode();
+ if (!(call HplTda5250Config.IsTxRxPinControlled()))
+ call ConfigResource.release();
atomic delayTimer = RECEIVER_DELAY;
call DelayTimer.start(TDA5250_RECEIVER_SETUP_TIME);
break;
atomic mode = radioMode;
switch(mode) {
case RADIO_MODE_TX_TRANSITION:
- call HplTda5250Data.enableTx();
+ call HplTda5250DataControl.setToTx();
atomic radioMode = RADIO_MODE_TX;
signal Tda5250Control.TxModeDone();
break;
case RADIO_MODE_RX_TRANSITION:
- call HplTda5250Data.enableRx();
+ call HplTda5250DataControl.setToRx();
atomic radioMode = RADIO_MODE_RX;
signal Tda5250Control.RxModeDone();
break;
event void DataResource.granted() {
switchDataResource();
}
+
+ // information for higher layers that the DataResource has been requested
+ async event void DataResourceRequested.requested() {
+ signal ResourceRequested.requested();
+ }
+
+ async event void DataResourceRequested.immediateRequested() {
+ signal ResourceRequested.immediateRequested();
+ }
/**
Set the mode of the radio
The choices are TIMER_MODE, SELF_POLLING_MODE
*/
async command error_t Tda5250Control.TimerMode(float on_time, float off_time) {
+ radioMode_t mode;
atomic {
if(radioBusy() == FALSE) {
radioMode = RADIO_MODE_TIMER_TRANSITION;
onTime = on_time;
offTime = off_time;
}
+ mode = radioMode;
}
if(radioMode == RADIO_MODE_TIMER_TRANSITION) {
call DataResource.release();
- if (call ConfigResource.immediateRequest() == SUCCESS) {
- switchConfigResource();
- } else {
+ if (call ConfigResource.immediateRequest() == SUCCESS) {
+ switchConfigResource();
+ } else {
call ConfigResource.request();
- }
+ }
return SUCCESS;
}
return FAIL;
}
async command error_t Tda5250Control.ResetTimerMode() {
+ radioMode_t mode;
atomic {
if(radioBusy() == FALSE) {
radioMode = RADIO_MODE_TIMER_TRANSITION;
}
+ mode = radioMode;
}
if(radioMode == RADIO_MODE_TIMER_TRANSITION) {
call DataResource.release();
}
async command error_t Tda5250Control.SelfPollingMode(float on_time, float off_time) {
+ radioMode_t mode;
atomic {
if(radioBusy() == FALSE) {
radioMode = RADIO_MODE_SELF_POLLING_TRANSITION;
onTime = on_time;
offTime = off_time;
}
+ mode = radioMode;
}
if(radioMode == RADIO_MODE_SELF_POLLING_TRANSITION) {
call DataResource.release();
}
async command error_t Tda5250Control.ResetSelfPollingMode() {
+ radioMode_t mode;
atomic {
if(radioBusy() == FALSE) {
radioMode = RADIO_MODE_SELF_POLLING_TRANSITION;
}
+ mode = radioMode;
}
if(radioMode == RADIO_MODE_SELF_POLLING_TRANSITION) {
call DataResource.release();
async command error_t Tda5250Control.SleepMode() {
radioMode_t mode;
atomic{
- mode = radioMode;
if(radioBusy() == FALSE) {
- mode = radioMode = RADIO_MODE_SLEEP_TRANSITION;
+ radioMode = RADIO_MODE_SLEEP_TRANSITION;
}
+ mode = radioMode;
}
if(mode == RADIO_MODE_SLEEP_TRANSITION) {
- call HplTda5250Data.disableTx();
- call HplTda5250Data.disableRx();
call DataResource.release();
- if (call ConfigResource.immediateRequest() == SUCCESS) {
+ if (call HplTda5250Config.IsTxRxPinControlled()) {
switchConfigResource();
} else {
- call ConfigResource.request();
+ if (call ConfigResource.immediateRequest() == SUCCESS) {
+ switchConfigResource();
+ } else {
+ call ConfigResource.request();
+ }
}
return SUCCESS;
}
async command error_t Tda5250Control.TxMode() {
radioMode_t mode;
atomic {
- if(radioBusy() == FALSE)
+ if(radioBusy() == FALSE) {
radioMode = RADIO_MODE_TX_TRANSITION;
+ }
+ mode = radioMode;
}
- atomic mode = radioMode;
if(mode == RADIO_MODE_TX_TRANSITION) {
call DataResource.release();
- if (call ConfigResource.immediateRequest() == SUCCESS) {
+ if (call HplTda5250Config.IsTxRxPinControlled()) {
switchConfigResource();
} else {
- call ConfigResource.request();
+ if (call ConfigResource.immediateRequest() == SUCCESS) {
+ switchConfigResource();
+ } else {
+ call ConfigResource.request();
+ }
}
return SUCCESS;
}
if(radioBusy() == FALSE) {
radioMode = RADIO_MODE_RX_TRANSITION;
}
+ mode = radioMode;
}
- atomic mode = radioMode;
if(mode == RADIO_MODE_RX_TRANSITION) {
call DataResource.release();
- if (call ConfigResource.immediateRequest() == SUCCESS) {
+ if (call HplTda5250Config.IsTxRxPinControlled()) {
switchConfigResource();
} else {
- call ConfigResource.request();
+ if (call ConfigResource.immediateRequest() == SUCCESS) {
+ switchConfigResource();
+ } else {
+ call ConfigResource.request();
+ }
}
return SUCCESS;
}
}
async command bool RadioByteComm.isTxDone() {
- return call HplTda5250Data.isTxDone();
+ //return call HplTda5250Data.isTxDone();
+ return TRUE;
}
/* Generate events (these are no interrupts */
case RECEIVER_DELAY :
delayTimer = RSSISTABLE_DELAY;
call DelayTimer.start(TDA5250_RSSI_STABLE_TIME-TDA5250_RECEIVER_SETUP_TIME);
- call ConfigResource.release();
if (call DataResource.immediateRequest() == SUCCESS) {
switchDataResource();
} else {
}
break;
case TRANSMITTER_DELAY :
- call ConfigResource.release();
- if (call DataResource.immediateRequest() == SUCCESS) {
+ if (call DataResource.immediateRequest() == SUCCESS) {
switchDataResource();
} else {
call DataResource.request();
}
}
+ default async event void ResourceRequested.requested() {
+ }
+ default async event void ResourceRequested.immediateRequested() {
+ }
default async event void Tda5250Control.TimerModeDone(){
}
default async event void Tda5250Control.SelfPollingModeDone(){