S_SFD,
S_EFD,
S_ACK_WAIT,
- S_LOAD_CANCEL,
- S_TX_CANCEL,
- S_CCA_CANCEL,
+ S_CANCEL,
} cc2420_transmit_state_t;
// This specifies how many jiffies the stack should wait after a
atomic {
switch( m_state ) {
case S_LOAD:
- m_state = S_LOAD_CANCEL;
- break;
-
case S_SAMPLE_CCA:
- m_state = S_CCA_CANCEL;
- break;
-
case S_BEGIN_TRANSMIT:
- m_state = S_TX_CANCEL;
+ m_state = S_CANCEL;
break;
default:
attemptSend();
break;
- case S_LOAD_CANCEL:
- case S_CCA_CANCEL:
- case S_TX_CANCEL:
+ case S_CANCEL:
call CSN.clr();
call SFLUSHTX.strobe();
call CSN.set();
atomic {
m_state = S_STARTED;
}
+ signal Send.sendDone( m_msg, ECANCEL );
break;
default:
error_t error ) {
call CSN.set();
- if ( m_state == S_LOAD_CANCEL ) {
+ if ( m_state == S_CANCEL ) {
atomic {
call CSN.clr();
call SFLUSHTX.strobe();
}
releaseSpiResource();
m_state = S_STARTED;
-
+ signal Send.sendDone( m_msg, ECANCEL );
+
} else if ( !m_cca ) {
atomic {
- if (m_state == S_LOAD_CANCEL) {
- m_state = S_TX_CANCEL;
- } else {
- m_state = S_BEGIN_TRANSMIT;
- }
+ m_state = S_BEGIN_TRANSMIT;
}
attemptSend();
} else {
releaseSpiResource();
atomic {
- if (m_state == S_LOAD_CANCEL) {
- m_state = S_CCA_CANCEL;
- } else {
- m_state = S_SAMPLE_CCA;
- }
+ m_state = S_SAMPLE_CCA;
}
signal RadioBackoff.requestInitialBackoff(m_msg);
}
break;
- case S_CCA_CANCEL:
- m_state = S_TX_CANCEL;
- /** Fall Through */
-
case S_BEGIN_TRANSMIT:
- case S_TX_CANCEL:
+ case S_CANCEL:
if ( acquireSpiResource() == SUCCESS ) {
attemptSend();
}
*/
error_t send( message_t* p_msg, bool cca ) {
atomic {
- if (m_state == S_LOAD_CANCEL
- || m_state == S_CCA_CANCEL
- || m_state == S_TX_CANCEL) {
+ if (m_state == S_CANCEL) {
return ECANCEL;
}
error_t resend( bool cca ) {
atomic {
- if (m_state == S_LOAD_CANCEL
- || m_state == S_CCA_CANCEL
- || m_state == S_TX_CANCEL) {
+ if (m_state == S_CANCEL) {
return ECANCEL;
}
bool congestion = TRUE;
atomic {
- if (m_state == S_TX_CANCEL) {
+ if (m_state == S_CANCEL) {
call SFLUSHTX.strobe();
releaseSpiResource();
call CSN.set();
m_state = S_STARTED;
+ signal Send.sendDone( m_msg, ECANCEL );
return;
}