[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