[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