]> oss.titaniummirror.com Git - tinyos-2.x.git/blobdiff - tos/chips/cc2420/CC2420CsmaP.nc
Fixed SPI bus crashing issue by adding in a SplitControl interface to shut it down...
[tinyos-2.x.git] / tos / chips / cc2420 / CC2420CsmaP.nc
index f0382f5a3795eca06e00c1a554bb4b0776c6087f..9c77335688a825f68fef8a567d0f6bcf691c2df6 100644 (file)
@@ -43,6 +43,7 @@ module CC2420CsmaP {
 
   uses interface Resource;
   uses interface CC2420Power;
+  uses interface SplitControl as SpiSplitControl;
   uses interface StdControl as SubControl;
   uses interface CC2420Transmit;
   uses interface RadioBackoff as SubBackoff;
@@ -95,7 +96,8 @@ implementation {
     }
 
     m_state = S_STARTING;
-    call CC2420Power.startVReg();
+    call SpiSplitControl.start();
+    // Wait for SpiSplitControl.startDone()
     return SUCCESS;
   }
 
@@ -105,12 +107,22 @@ implementation {
     }
 
     m_state = S_STOPPING;
+    call SpiSplitControl.stop();
+    // Wait for SpiSplitControl.stopDone()
+    return SUCCESS;
+  }
+
+  /***************** SpiSplitControl Events ****************/
+  event void SpiSplitControl.startDone(error_t error) {
+    call CC2420Power.startVReg();
+  }
+  
+  event void SpiSplitControl.stopDone(error_t error) {
     call SubControl.stop();
     call CC2420Power.stopVReg();
     post stopDone_task();
-    return SUCCESS;
   }
-
+    
   /***************** Send Commands ****************/
   command error_t Send.cancel( message_t* p_msg ) {
     return call CC2420Transmit.cancel();
@@ -122,8 +134,9 @@ implementation {
     cc2420_metadata_t* metadata = call CC2420Packet.getMetadata( p_msg );
 
     atomic {
-      if ( m_state != S_STARTED )
+      if ( m_state != S_STARTED ) {
         return FAIL;
+      }
       m_state = S_TRANSMIT;
       m_msg = p_msg;
     }