[Tinyos-2-commits] CVS: tinyos-2.x/apps/BaseStationCC2420 CC2420ControlP.nc, 1.6, 1.7

dmm rincon at users.sourceforge.net
Wed Jul 4 10:45:14 PDT 2007


Update of /cvsroot/tinyos/tinyos-2.x/apps/BaseStationCC2420
In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv13334

Modified Files:
	CC2420ControlP.nc 
Log Message:
Match the latest CC2420 stack, disables address recognition and hardware auto-ack's.

Index: CC2420ControlP.nc
===================================================================
RCS file: /cvsroot/tinyos/tinyos-2.x/apps/BaseStationCC2420/CC2420ControlP.nc,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** CC2420ControlP.nc	12 Apr 2007 17:12:26 -0000	1.6
--- CC2420ControlP.nc	4 Jul 2007 17:45:12 -0000	1.7
***************
*** 32,35 ****
--- 32,36 ----
  /**
   * @author Jonathan Hui <jhui at archrock.com>
+  * @author David Moss
   * @author Urs Hunkeler (ReadRssi implementation)
   * @version $Revision$ $Date$
***************
*** 51,54 ****
--- 52,56 ----
    uses interface GeneralIO as VREN;
    uses interface GpioInterrupt as InterruptCCA;
+   uses interface ActiveMessageAddress;
  
    uses interface CC2420Ram as PANID;
***************
*** 84,92 ****
    } cc2420_control_state_t;
  
!   uint8_t m_channel = CC2420_DEF_CHANNEL;
    
!   uint8_t m_tx_power = CC2420_DEF_RFPOWER;
    
!   uint16_t m_pan = TOS_AM_GROUP;
    
    uint16_t m_short_addr;
--- 86,94 ----
    } cc2420_control_state_t;
  
!   uint8_t m_channel;
    
!   uint8_t m_tx_power;
    
!   uint16_t m_pan;
    
    uint16_t m_short_addr;
***************
*** 94,102 ****
    bool m_sync_busy;
    
    norace cc2420_control_state_t m_state = S_VREG_STOPPED;
    
    /***************** Prototypes ****************/
-   task void syncDone_task();
  
    /***************** Init Commands ****************/
    command error_t Init.init() {
--- 96,114 ----
    bool m_sync_busy;
    
+   bool autoAckEnabled;
+   
+   bool hwAutoAckDefault;
+   
    norace cc2420_control_state_t m_state = S_VREG_STOPPED;
    
    /***************** Prototypes ****************/
  
+   void writeFsctrl();
+   void writeMdmctrl0();
+   void writeId();
+ 
+   task void sync();
+   task void syncDone();
+     
    /***************** Init Commands ****************/
    command error_t Init.init() {
***************
*** 104,108 ****
      call RSTN.makeOutput();
      call VREN.makeOutput();
!     m_short_addr = call AMPacket.address();
      return SUCCESS;
    }
--- 116,137 ----
      call RSTN.makeOutput();
      call VREN.makeOutput();
!     
!     m_short_addr = call ActiveMessageAddress.amAddress();
!     m_pan = call ActiveMessageAddress.amGroup();
!     m_tx_power = CC2420_DEF_RFPOWER;
!     m_channel = CC2420_DEF_CHANNEL;
!     
! #if defined(CC2420_NO_ACKNOWLEDGEMENTS)
!     autoAckEnabled = FALSE;
! #else
!     autoAckEnabled = TRUE;
! #endif
! 
! #if defined(CC2420_HW_ACKNOWLEDGEMENTS)
!     hwAutoAckDefault = TRUE;
! #else
!     hwAutoAckDefault = FALSE;
! #endif
! 
      return SUCCESS;
    }
***************
*** 167,191 ****
        
        call IOCFG0.write( ( 1 << CC2420_IOCFG0_FIFOP_POLARITY ) |
!                          ( 127 << CC2420_IOCFG0_FIFOP_THR ) );
                           
!       call FSCTRL.write( ( 1 << CC2420_FSCTRL_LOCK_THR ) |
!                          ( ( (m_channel - 11)*5+357 ) 
!                            << CC2420_FSCTRL_FREQ ) );
!                            
!       call MDMCTRL0.write( ( 1 << CC2420_MDMCTRL0_RESERVED_FRAME_MODE ) |
!                            ( 0 << CC2420_MDMCTRL0_ADR_DECODE ) |
!                            ( 2 << CC2420_MDMCTRL0_CCA_HYST ) |
!                            ( 3 << CC2420_MDMCTRL0_CCA_MOD ) |
!                            ( 1 << CC2420_MDMCTRL0_AUTOCRC ) |
!                            ( 0 << CC2420_MDMCTRL0_AUTOACK ) |  // we now SACK
!                            ( 2 << CC2420_MDMCTRL0_PREAMBLE_LENGTH ) );
!                            
        call RXCTRL1.write( ( 1 << CC2420_RXCTRL1_RXBPF_LOCUR ) |
!                           ( 1 << CC2420_RXCTRL1_LOW_LOWGAIN ) |
!                           ( 1 << CC2420_RXCTRL1_HIGH_HGM ) |
!                           ( 1 << CC2420_RXCTRL1_LNA_CAP_ARRAY ) |
!                           ( 1 << CC2420_RXCTRL1_RXMIX_TAIL ) |
!                           ( 1 << CC2420_RXCTRL1_RXMIX_VCM ) |
!                           ( 2 << CC2420_RXCTRL1_RXMIX_CURRENT ) );
      }
      return SUCCESS;
--- 196,211 ----
        
        call IOCFG0.write( ( 1 << CC2420_IOCFG0_FIFOP_POLARITY ) |
!           ( 127 << CC2420_IOCFG0_FIFOP_THR ) );
                           
!       writeFsctrl();
!       writeMdmctrl0();
!   
        call RXCTRL1.write( ( 1 << CC2420_RXCTRL1_RXBPF_LOCUR ) |
!           ( 1 << CC2420_RXCTRL1_LOW_LOWGAIN ) |
!           ( 1 << CC2420_RXCTRL1_HIGH_HGM ) |
!           ( 1 << CC2420_RXCTRL1_LNA_CAP_ARRAY ) |
!           ( 1 << CC2420_RXCTRL1_RXMIX_TAIL ) |
!           ( 1 << CC2420_RXCTRL1_RXMIX_VCM ) |
!           ( 2 << CC2420_RXCTRL1_RXMIX_CURRENT ) );
      }
      return SUCCESS;
***************
*** 250,253 ****
--- 270,278 ----
    }
  
+   /**
+    * Sync must be called to commit software parameters configured on
+    * the microcontroller (through the CC2420Config interface) to the
+    * CC2420 radio chip.
+    */
    command error_t CC2420Config.sync() {
      atomic {
***************
*** 260,264 ****
          call SyncResource.request();
        } else {
!         post syncDone_task();
        }
      }
--- 285,289 ----
          call SyncResource.request();
        } else {
!         post syncDone();
        }
      }
***************
*** 266,269 ****
--- 291,328 ----
    }
  
+   /**
+    * Sync must be called for acknowledgement changes to take effect
+    * @param enableAutoAck TRUE to enable auto acknowledgements
+    * @param hwAutoAck TRUE to default to hardware auto acks, FALSE to
+    *     default to software auto acknowledgements
+    */
+   command void CC2420Config.setAutoAck(bool enableAutoAck, bool hwAutoAck) {
+     autoAckEnabled = enableAutoAck;
+     hwAutoAckDefault = hwAutoAck;
+   }
+   
+   /**
+    * @return TRUE if hardware auto acks are the default, FALSE if software
+    *     acks are the default
+    */
+   async command bool CC2420Config.isHwAutoAckDefault() {
+     bool isHwAck;
+     atomic {
+       isHwAck = hwAutoAckDefault;
+     }
+     return isHwAck;    
+   }
+   
+   /**
+    * @return TRUE if auto acks are enabled
+    */
+   async command bool CC2420Config.isAutoAckEnabled() {
+     bool isAckEnabled;
+     atomic {
+       isAckEnabled = autoAckEnabled;
+     }
+     return isAckEnabled;
+   }
+   
    /***************** ReadRssi Commands ****************/
    command error_t ReadRssi.read() { 
***************
*** 273,291 ****
    /***************** Spi Resources Events ****************/
    event void SyncResource.granted() {
- 
-     nxle_uint16_t id[ 2 ];
-     uint8_t channel;
- 
-     atomic {
-       channel = m_channel;
-       id[ 0 ] = m_pan;
-       id[ 1 ] = m_short_addr;
-     }
- 
      call CSN.clr();
      call SRFOFF.strobe();
!     call FSCTRL.write( ( 1 << CC2420_FSCTRL_LOCK_THR ) |
!                        ( ( (channel - 11)*5+357 ) << CC2420_FSCTRL_FREQ ) );
!     call PANID.write( 0, (uint8_t*)id, sizeof( id ) );
      call CSN.set();
      call CSN.clr();
--- 332,340 ----
    /***************** Spi Resources Events ****************/
    event void SyncResource.granted() {
      call CSN.clr();
      call SRFOFF.strobe();
!     writeFsctrl();
!     writeMdmctrl0();
!     writeId();
      call CSN.set();
      call CSN.clr();
***************
*** 293,299 ****
      call CSN.set();
      call SyncResource.release();
!     
!     post syncDone_task();
!     
    }
  
--- 342,346 ----
      call CSN.set();
      call SyncResource.release();
!     post syncDone();
    }
  
***************
*** 327,348 ****
    /***************** InterruptCCA Events ****************/
    async event void InterruptCCA.fired() {
-     nxle_uint16_t id[ 2 ];
      m_state = S_XOSC_STARTED;
-     id[ 0 ] = m_pan;
-     id[ 1 ] = m_short_addr;
      call InterruptCCA.disable();
      call IOCFG1.write( 0 );
!     call PANID.write( 0, (uint8_t*)&id, 4 );
      call CSN.set();
      call CSN.clr();
      signal CC2420Power.startOscillatorDone();
    }
    
    /***************** Tasks ****************/
!   task void syncDone_task() {
      atomic m_sync_busy = FALSE;
      signal CC2420Config.syncDone( SUCCESS );
    }
  
    /***************** Defaults ****************/
    default event void CC2420Config.syncDone( error_t error ) {
--- 374,460 ----
    /***************** InterruptCCA Events ****************/
    async event void InterruptCCA.fired() {
      m_state = S_XOSC_STARTED;
      call InterruptCCA.disable();
      call IOCFG1.write( 0 );
!     writeId();
      call CSN.set();
      call CSN.clr();
      signal CC2420Power.startOscillatorDone();
    }
+  
+   /***************** ActiveMessageAddress Events ****************/
+   async event void ActiveMessageAddress.changed() {
+     atomic {
+       m_short_addr = call ActiveMessageAddress.amAddress();
+       m_pan = call ActiveMessageAddress.amGroup();
+     }
+     
+     post sync();
+   }
    
    /***************** Tasks ****************/
!   /**
!    * Attempt to synchronize our current settings with the CC2420
!    */
!   task void sync() {
!     call CC2420Config.sync();
!   }
!   
!   task void syncDone() {
      atomic m_sync_busy = FALSE;
      signal CC2420Config.syncDone( SUCCESS );
    }
+   
+   
+   /***************** Functions ****************/
+   /**
+    * Write teh FSCTRL register
+    */
+   void writeFsctrl() {
+     uint8_t channel;
+     
+     atomic {
+       channel = m_channel;
+     }
+     
+     call FSCTRL.write( ( 1 << CC2420_FSCTRL_LOCK_THR ) |
+           ( ( (channel - 11)*5+357 ) << CC2420_FSCTRL_FREQ ) );
+   }
  
+   /**
+    * Write the MDMCTRL0 register
+    */
+   void writeMdmctrl0() {
+     atomic {
+       call MDMCTRL0.write( ( 1 << CC2420_MDMCTRL0_RESERVED_FRAME_MODE ) |
+           ( 0 << CC2420_MDMCTRL0_ADR_DECODE ) |  // Sniffer behavior
+           ( 2 << CC2420_MDMCTRL0_CCA_HYST ) |
+           ( 3 << CC2420_MDMCTRL0_CCA_MOD ) |
+           ( 1 << CC2420_MDMCTRL0_AUTOCRC ) |
+           ( 0 << CC2420_MDMCTRL0_AUTOACK ) |  // Sniffer behavior
+           ( 0 << CC2420_MDMCTRL0_AUTOACK ) |
+           ( 2 << CC2420_MDMCTRL0_PREAMBLE_LENGTH ) );
+     }
+     // Jon Green:
+     // MDMCTRL1.CORR_THR is defaulted to 20 instead of 0 like the datasheet says
+     // If we add in changes to MDMCTRL1, be sure to include this fix.
+   }
+   
+   /**
+    * Write the PANID register
+    */
+   void writeId() {
+     nxle_uint16_t id[ 2 ];
+ 
+     atomic {
+       id[ 0 ] = m_pan;
+       id[ 1 ] = m_short_addr;
+     }
+     
+     call PANID.write(0, (uint8_t*)&id, sizeof(id));
+   }
+ 
+ 
+   
    /***************** Defaults ****************/
    default event void CC2420Config.syncDone( error_t error ) {



More information about the Tinyos-2-commits mailing list