]> oss.titaniummirror.com Git - tinyos-2.x.git/blobdiff - tos/chips/rf230/RF230LayerP.nc
Prepare to support the RF212 chip (reorganization of timer and HPL constants)
[tinyos-2.x.git] / tos / chips / rf230 / RF230LayerP.nc
index 6ce32074b642cb80ce06d6cf013dbb57437ffc67..fb429b933b54b5d26c7b1feb361b397e71a0fd85 100644 (file)
@@ -26,6 +26,7 @@
 #include <Tasklet.h>
 #include <RadioAssert.h>
 #include <TimeSyncMessage.h>
+#include <RadioAlarm.h>
 
 module RF230LayerP
 {
@@ -45,8 +46,7 @@ module RF230LayerP
                interface GeneralIO as SELN;
                interface Resource as SpiResource;
 
-               interface SpiByte;
-               interface HplRF230;
+               interface FastSpiByte;
 
                interface GeneralIO as SLP_TR;
                interface GeneralIO as RSTN;
@@ -60,8 +60,8 @@ module RF230LayerP
                interface PacketField<uint8_t> as PacketRSSI;
                interface PacketField<uint8_t> as PacketTimeSyncOffset;
 
-               interface PacketTimeStamp<TRF230, uint32_t>;
-               interface LocalTime<TRF230>;
+               interface PacketTimeStamp<TRadio, uint32_t>;
+               interface LocalTime<TRadio>;
 
                interface RF230Config;
                interface Tasklet;
@@ -126,9 +126,9 @@ implementation
                ASSERT( reg == (reg & RF230_CMD_REGISTER_MASK) );
 
                call SELN.clr();
-               call HplRF230.spiSplitWrite(RF230_CMD_REGISTER_WRITE | reg);
-               call HplRF230.spiSplitReadWrite(value);
-               call HplRF230.spiSplitRead();
+               call FastSpiByte.splitWrite(RF230_CMD_REGISTER_WRITE | reg);
+               call FastSpiByte.splitReadWrite(value);
+               call FastSpiByte.splitRead();
                call SELN.set();
        }
 
@@ -138,9 +138,9 @@ implementation
                ASSERT( reg == (reg & RF230_CMD_REGISTER_MASK) );
 
                call SELN.clr();
-               call HplRF230.spiSplitWrite(RF230_CMD_REGISTER_READ | reg);
-               call HplRF230.spiSplitReadWrite(0);
-               reg = call HplRF230.spiSplitRead();
+               call FastSpiByte.splitWrite(RF230_CMD_REGISTER_READ | reg);
+               call FastSpiByte.splitReadWrite(0);
+               reg = call FastSpiByte.splitRead();
                call SELN.set();
 
                return reg;
@@ -150,11 +150,11 @@ implementation
 
        enum
        {
-               SLEEP_WAKEUP_TIME = (uint16_t)(880 * RF230_ALARM_MICROSEC),
-               CCA_REQUEST_TIME = (uint16_t)(140 * RF230_ALARM_MICROSEC),
+               SLEEP_WAKEUP_TIME = (uint16_t)(880 * RADIO_ALARM_MICROSEC),
+               CCA_REQUEST_TIME = (uint16_t)(140 * RADIO_ALARM_MICROSEC),
 
-               TX_SFD_DELAY = (uint16_t)(176 * RF230_ALARM_MICROSEC),
-               RX_SFD_DELAY = (uint16_t)(8 * RF230_ALARM_MICROSEC),
+               TX_SFD_DELAY = (uint16_t)(176 * RADIO_ALARM_MICROSEC),
+               RX_SFD_DELAY = (uint16_t)(8 * RADIO_ALARM_MICROSEC),
        };
 
        tasklet_async event void RadioAlarm.fired()
@@ -268,6 +268,11 @@ implementation
 
 /*----------------- CHANNEL -----------------*/
 
+       tasklet_async command uint8_t RadioState.getChannel()
+       {
+               return channel;
+       }
+
        tasklet_async command error_t RadioState.setChannel(uint8_t c)
        {
                c &= RF230_CHANNEL_MASK;
@@ -319,6 +324,9 @@ implementation
                        readRegister(RF230_IRQ_STATUS); // clear the interrupt register
                        call IRQ.captureRisingEdge();
 
+                       // setChannel was ignored in SLEEP because the SPI was not working, so do it here
+                       writeRegister(RF230_PHY_CC_CCA, RF230_CCA_MODE_VALUE | channel);
+
                        writeRegister(RF230_TRX_STATE, RF230_RX_ON);
                        state = STATE_TRX_OFF_2_RX_ON;
                }
@@ -436,13 +444,13 @@ implementation
                ASSERT( ! radioIrq );
 
                call SELN.clr();
-               call HplRF230.spiSplitWrite(RF230_CMD_FRAME_WRITE);
+               call FastSpiByte.splitWrite(RF230_CMD_FRAME_WRITE);
 
                length = call RF230Config.getLength(msg);
                data = call RF230Config.getPayload(msg);
 
                // length | data[0] ... data[length-3] | automatically generated FCS
-               call HplRF230.spiSplitReadWrite(length);
+               call FastSpiByte.splitReadWrite(length);
 
                // the FCS is atomatically generated (2 bytes)
                length -= 2;
@@ -455,7 +463,7 @@ implementation
 
                // first upload the header to gain some time
                do {
-                       call HplRF230.spiSplitReadWrite(*(data++));
+                       call FastSpiByte.splitReadWrite(*(data++));
                }
                while( --header != 0 );
 
@@ -465,12 +473,12 @@ implementation
                        *(timesync_relative_t*)timesync = (*(timesync_absolute_t*)timesync) - time32;
 
                do {
-                       call HplRF230.spiSplitReadWrite(*(data++));
+                       call FastSpiByte.splitReadWrite(*(data++));
                }
                while( --length != 0 );
 
                // wait for the SPI transfer to finish
-               call HplRF230.spiSplitRead();
+               call FastSpiByte.splitRead();
                call SELN.set();
 
                /*
@@ -544,10 +552,10 @@ implementation
                uint16_t crc;
 
                call SELN.clr();
-               call HplRF230.spiWrite(RF230_CMD_FRAME_READ);
+               call FastSpiByte.write(RF230_CMD_FRAME_READ);
 
                // read the length byte
-               length = call HplRF230.spiWrite(0);
+               length = call FastSpiByte.write(0);
 
                // if correct length
                if( length >= 3 && length <= call RF230Config.getMaxLength() )
@@ -556,7 +564,7 @@ implementation
                        uint8_t* data;
 
                        // initiate the reading
-                       call HplRF230.spiSplitWrite(0);
+                       call FastSpiByte.splitWrite(0);
 
                        call RF230Config.setLength(rxMsg, length);
                        data = call RF230Config.getPayload(rxMsg);
@@ -572,19 +580,19 @@ implementation
                        length -= read;
 
                        do {
-                               crc = call HplRF230.crcByte(crc, *(data++) = call HplRF230.spiSplitReadWrite(0));
+                               crc = RF230_CRCBYTE_COMMAND(crc, *(data++) = call FastSpiByte.splitReadWrite(0));
                        }
                        while( --read != 0  );
 
                        if( signal RadioReceive.header(rxMsg) )
                        {
                                while( length-- != 0 )
-                                       crc = call HplRF230.crcByte(crc, *(data++) = call HplRF230.spiSplitReadWrite(0));
+                                       crc = RF230_CRCBYTE_COMMAND(crc, *(data++) = call FastSpiByte.splitReadWrite(0));
 
-                               crc = call HplRF230.crcByte(crc, call HplRF230.spiSplitReadWrite(0));
-                               crc = call HplRF230.crcByte(crc, call HplRF230.spiSplitReadWrite(0));
+                               crc = RF230_CRCBYTE_COMMAND(crc, call FastSpiByte.splitReadWrite(0));
+                               crc = RF230_CRCBYTE_COMMAND(crc, call FastSpiByte.splitReadWrite(0));
 
-                               call PacketLinkQuality.set(rxMsg, call HplRF230.spiSplitRead());
+                               call PacketLinkQuality.set(rxMsg, call FastSpiByte.splitRead());
                        }
                        else
                                crc = 1;