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

Phil Levis scipio at users.sourceforge.net
Wed Feb 7 16:49:56 PST 2007


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

Modified Files:
	CC2420ControlP.nc 
Log Message:
Keep this file up to date with core CC2420 stack.


Index: CC2420ControlP.nc
===================================================================
RCS file: /cvsroot/tinyos/tinyos-2.x/apps/BaseStationCC2420/CC2420ControlP.nc,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** CC2420ControlP.nc	12 Dec 2006 18:22:48 -0000	1.4
--- CC2420ControlP.nc	8 Feb 2007 00:49:54 -0000	1.5
***************
*** 31,35 ****
--- 31,40 ----
  
  /**
+  * Slightly modified version of CC2420 stack that does not do address
+  * decoding so a base station can receive packets addressed to other
+  * nodes.
+  *
   * @author Jonathan Hui <jhui at archrock.com>
+  * @author Philip Levis
   * @version $Revision$ $Date$
   */
***************
*** 57,60 ****
--- 62,66 ----
    uses interface CC2420Register as MDMCTRL0;
    uses interface CC2420Register as MDMCTRL1;
+   uses interface CC2420Register as RXCTRL1;
    uses interface CC2420Strobe as SRXON;
    uses interface CC2420Strobe as SRFOFF;
***************
*** 79,90 ****
    } cc2420_control_state_t;
  
!   uint8_t channel = CC2420_DEF_CHANNEL;
!   uint8_t txPower = CC2420_DEF_RFPOWER;
!   uint16_t pan = TOS_AM_GROUP;
!   uint16_t shortAddress;
!   bool syncBusy;
!   task void syncDoneTask();
  
!   norace cc2420_control_state_t state = S_VREG_STOPPED;
  
    command error_t Init.init() {
--- 85,96 ----
    } 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;
!   bool m_sync_busy;
!   task void syncDone_task();
  
!   norace cc2420_control_state_t m_state = S_VREG_STOPPED;
  
    command error_t Init.init() {
***************
*** 92,96 ****
      call RSTN.makeOutput();
      call VREN.makeOutput();
!     shortAddress = call AMPacket.address();
      return SUCCESS;
    }
--- 98,102 ----
      call RSTN.makeOutput();
      call VREN.makeOutput();
!     m_short_addr = call AMPacket.address();
      return SUCCESS;
    }
***************
*** 125,131 ****
    async command error_t CC2420Power.startVReg() {
      atomic {
!       if ( state != S_VREG_STOPPED )
  	return FAIL;
!       state = S_VREG_STARTING;
      }
      call VREN.set();
--- 131,137 ----
    async command error_t CC2420Power.startVReg() {
      atomic {
!       if ( m_state != S_VREG_STOPPED )
  	return FAIL;
!       m_state = S_VREG_STARTING;
      }
      call VREN.set();
***************
*** 135,140 ****
  
    async event void StartupTimer.fired() {
!     if ( state == S_VREG_STARTING ) {
!       state = S_VREG_STARTED;
        call RSTN.clr();
        call RSTN.set();
--- 141,146 ----
  
    async event void StartupTimer.fired() {
!     if ( m_state == S_VREG_STARTING ) {
!       m_state = S_VREG_STARTED;
        call RSTN.clr();
        call RSTN.set();
***************
*** 144,148 ****
  
    async command error_t CC2420Power.stopVReg() {
!     state = S_VREG_STOPPED;
      call RSTN.clr();
      call VREN.clr();
--- 150,154 ----
  
    async command error_t CC2420Power.stopVReg() {
!     m_state = S_VREG_STOPPED;
      call RSTN.clr();
      call VREN.clr();
***************
*** 153,160 ****
    async command error_t CC2420Power.startOscillator() {
      atomic {
!       if ( state != S_VREG_STARTED )
  	return FAIL;
  	
!       state = S_XOSC_STARTING;
        call IOCFG1.write( CC2420_SFDMUX_XOSC16M_STABLE << 
  			 CC2420_IOCFG1_CCAMUX );
--- 159,166 ----
    async command error_t CC2420Power.startOscillator() {
      atomic {
!       if ( m_state != S_VREG_STARTED )
  	return FAIL;
  	
!       m_state = S_XOSC_STARTING;
        call IOCFG1.write( CC2420_SFDMUX_XOSC16M_STABLE << 
  			 CC2420_IOCFG1_CCAMUX );
***************
*** 164,168 ****
  			 ( 127 << CC2420_IOCFG0_FIFOP_THR ) );
        call FSCTRL.write( ( 1 << CC2420_FSCTRL_LOCK_THR ) |
! 			 ( ( (channel - 11)*5+357 ) 
  			   << CC2420_FSCTRL_FREQ ) );
        call MDMCTRL0.write( ( 1 << CC2420_MDMCTRL0_RESERVED_FRAME_MODE ) |
--- 170,174 ----
  			 ( 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 ) |
***************
*** 171,174 ****
--- 177,187 ----
  			   ( 1 << CC2420_MDMCTRL0_AUTOCRC ) |
  			   ( 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;
***************
*** 177,183 ****
    async event void InterruptCCA.fired() {
      nxle_uint16_t id[ 2 ];
!     state = S_XOSC_STARTED;
!     id[ 0 ] = pan;
!     id[ 1 ] = shortAddress;
      call InterruptCCA.disable();
      call IOCFG1.write( 0 );
--- 190,196 ----
    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 );
***************
*** 190,196 ****
    async command error_t CC2420Power.stopOscillator() {
      atomic {
!       if ( state != S_XOSC_STARTED )
  	return FAIL;
!       state = S_VREG_STARTED;
        call SXOSCOFF.strobe();
      }
--- 203,209 ----
    async command error_t CC2420Power.stopOscillator() {
      atomic {
!       if ( m_state != S_XOSC_STARTED )
  	return FAIL;
!       m_state = S_VREG_STARTED;
        call SXOSCOFF.strobe();
      }
***************
*** 200,204 ****
    async command error_t CC2420Power.rxOn() {
      atomic {
!       if ( state != S_XOSC_STARTED )
  	return FAIL;
        call SRXON.strobe();
--- 213,217 ----
    async command error_t CC2420Power.rxOn() {
      atomic {
!       if ( m_state != S_XOSC_STARTED )
  	return FAIL;
        call SRXON.strobe();
***************
*** 209,213 ****
    async command error_t CC2420Power.rfOff() {
      atomic {  
!       if ( state != S_XOSC_STARTED )
  	return FAIL;
        call SRFOFF.strobe();
--- 222,226 ----
    async command error_t CC2420Power.rfOff() {
      atomic {  
!       if ( m_state != S_XOSC_STARTED )
  	return FAIL;
        call SRFOFF.strobe();
***************
*** 217,252 ****
  
    command uint8_t CC2420Config.getChannel() {
!     atomic return channel;
    }
  
!   command void CC2420Config.setChannel( uint8_t chan ) {
!     atomic channel = chan;
    }
  
    command uint16_t CC2420Config.getShortAddr() {
!     atomic return shortAddress;
    }
  
    command void CC2420Config.setShortAddr( uint16_t addr ) {
!     atomic shortAddress = addr;
    }
  
    command uint16_t CC2420Config.getPanAddr() {
!     return pan;
    }
  
!   command void CC2420Config.setPanAddr( uint16_t p ) {
!     atomic pan = p;
    }
  
    command error_t CC2420Config.sync() {
      atomic {
!       if ( syncBusy )
          return FAIL;
!       syncBusy = TRUE;
!       if ( state == S_XOSC_STARTED )
          call SyncResource.request();
        else
!         post syncDoneTask();
      }
      return SUCCESS;
--- 230,265 ----
  
    command uint8_t CC2420Config.getChannel() {
!     atomic return m_channel;
    }
  
!   command void CC2420Config.setChannel( uint8_t channel ) {
!     atomic m_channel = channel;
    }
  
    command uint16_t CC2420Config.getShortAddr() {
!     atomic return m_short_addr;
    }
  
    command void CC2420Config.setShortAddr( uint16_t addr ) {
!     atomic m_short_addr = addr;
    }
  
    command uint16_t CC2420Config.getPanAddr() {
!     return m_pan;
    }
  
!   command void CC2420Config.setPanAddr( uint16_t pan ) {
!     atomic m_pan = pan;
    }
  
    command error_t CC2420Config.sync() {
      atomic {
!       if ( m_sync_busy )
          return FAIL;
!       m_sync_busy = TRUE;
!       if ( m_state == S_XOSC_STARTED )
          call SyncResource.request();
        else
!         post syncDone_task();
      }
      return SUCCESS;
***************
*** 256,280 ****
  
      nxle_uint16_t id[ 2 ];
!     uint8_t chan;
  
      atomic {
!       chan = channel;
!       id[ 0 ] = pan;
!       id[ 1 ] = shortAddress;
      }
  
      call CSN.clr();
      call FSCTRL.write( ( 1 << CC2420_FSCTRL_LOCK_THR ) |
! 		       ( ( (chan - 11)*5+357 ) << CC2420_FSCTRL_FREQ ) );
      call PANID.write( 0, (uint8_t*)id, sizeof( id ) );
      call CSN.set();
      call SyncResource.release();
      
!     post syncDoneTask();
      
    }
  
!   task void syncDoneTask() {
!     atomic syncBusy = FALSE;
      signal CC2420Config.syncDone( SUCCESS );
    }
--- 269,297 ----
  
      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();
+     call SRXON.strobe();
+     call CSN.set();
      call SyncResource.release();
      
!     post syncDone_task();
      
    }
  
!   task void syncDone_task() {
!     atomic m_sync_busy = FALSE;
      signal CC2420Config.syncDone( SUCCESS );
    }



More information about the Tinyos-2-commits mailing list