James Hilder / Pi_Swarm_Library
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers alpha433.h Source File

alpha433.h

00001 /*******************************************************************************************
00002  *
00003  * University of York Robot Lab Pi Swarm Library: 433MHz Alpha Transceiver Driver
00004  *
00005  * (C) Dr James Hilder, Dept. Electronics & Computer Science, University of York
00006  *
00007  * Version 0.5  February 2014
00008  *
00009  * Designed for use with the Pi Swarm Board (enhanced MBED sensor board) v1.2
00010  *
00011  ******************************************************************************************/
00012 
00013 #ifndef ALPHA433_H
00014 #define ALPHA433_H
00015 
00016 
00017 //
00018 // Defines
00019 //
00020 #define ALPHA433_FREQUENCY_315     0x0000
00021 #define ALPHA433_FREQUENCY_433     0x0010
00022 #define ALPHA433_FREQUENCY_868     0x0020
00023 #define ALPHA433_FREQUENCY_915     0x0030
00024 #define ALPHA433_CRYSTAL_LOAD_85   0x0000
00025 #define ALPHA433_CRYSTAL_LOAD_90   0x0001
00026 #define ALPHA433_CRYSTAL_LOAD_95   0x0002
00027 #define ALPHA433_CRYSTAL_LOAD_100  0x0003
00028 #define ALPHA433_CRYSTAL_LOAD_105  0x0004
00029 #define ALPHA433_CRYSTAL_LOAD_110  0x0005
00030 #define ALPHA433_CRYSTAL_LOAD_115  0x0006
00031 #define ALPHA433_CRYSTAL_LOAD_120  0x0007
00032 #define ALPHA433_CRYSTAL_LOAD_125  0x0008
00033 #define ALPHA433_CRYSTAL_LOAD_130  0x0009
00034 #define ALPHA433_CRYSTAL_LOAD_135  0x000A
00035 #define ALPHA433_CRYSTAL_LOAD_140  0x000B
00036 #define ALPHA433_CRYSTAL_LOAD_145  0x000C
00037 #define ALPHA433_CRYSTAL_LOAD_150  0x000D
00038 #define ALPHA433_CRYSTAL_LOAD_155  0x000E
00039 #define ALPHA433_CRYSTAL_LOAD_160  0x000F
00040 #define ALPHA433_USE_FIFO_YES      0x00C0
00041 #define ALPHA433_USE_FIFO_NO       0x0000
00042 #define ALPHA433_PIN20_INTERRUPT_IN    0x0000
00043 #define ALPHA433_PIN20_VDI_OUT         0x0400
00044 #define ALPHA433_VDI_RESPONSE_FAST     0x0000
00045 #define ALPHA433_VDI_RESPONSE_MEDIUM   0x0100
00046 #define ALPHA433_VDI_RESPONSE_SLOW     0x0200
00047 #define ALPHA433_VDI_RESPONSE_ALWAYS   0x0300
00048 #define ALPHA433_BANDWIDTH_400         0x0020
00049 #define ALPHA433_BANDWIDTH_340         0x0040
00050 #define ALPHA433_BANDWIDTH_270         0x0060
00051 #define ALPHA433_BANDWIDTH_200         0x0080
00052 #define ALPHA433_BANDWIDTH_134         0x00A0
00053 #define ALPHA433_BANDWIDTH_67          0x00C0
00054 #define ALPHA433_LNA_GAIN_0            0x0000
00055 #define ALPHA433_LNA_GAIN_6            0x0080
00056 #define ALPHA433_LNA_GAIN_14           0x0100
00057 #define ALPHA433_LNA_GAIN_20           0x0180
00058 #define ALPHA433_RSSI_103              0x0000
00059 #define ALPHA433_RSSI_97               0x0001
00060 #define ALPHA433_RSSI_91               0x0002
00061 #define ALPHA433_RSSI_85               0x0003
00062 #define ALPHA433_RSSI_79               0x0004
00063 #define ALPHA433_RSSI_73               0x0005
00064 #define ALPHA433_RSSI_67               0x0006
00065 #define ALPHA433_RSSI_61               0x0007
00066 #define ALPHA433_CLOCK_RECOVERY_AUTO   0x0080
00067 #define ALPHA433_CLOCK_RECOVERY_FAST   0x0040
00068 #define ALPHA433_CLOCK_RECOVERY_SLOW   0x0000
00069 #define ALPHA433_FILTER_DIGITAL        0x0000
00070 #define ALPHA433_FILTER_ANALOG         0x0010
00071 #define ALPHA433_DQD_0                 0x0000
00072 #define ALPHA433_DQD_1                 0x0001
00073 #define ALPHA433_DQD_2                 0x0002
00074 #define ALPHA433_DQD_3                 0x0003
00075 #define ALPHA433_DQD_4                 0x0004
00076 #define ALPHA433_DQD_5                 0x0005
00077 #define ALPHA433_DQD_6                 0x0006
00078 #define ALPHA433_DQD_7                 0x0007
00079 #define ALPHA433_FIFO_LEVEL_0          0x0000
00080 #define ALPHA433_FIFO_LEVEL_1          0x0010
00081 #define ALPHA433_FIFO_LEVEL_2          0x0020
00082 #define ALPHA433_FIFO_LEVEL_3          0x0030
00083 #define ALPHA433_FIFO_LEVEL_4          0x0040
00084 #define ALPHA433_FIFO_LEVEL_5          0x0050
00085 #define ALPHA433_FIFO_LEVEL_6          0x0060
00086 #define ALPHA433_FIFO_LEVEL_7          0x0070
00087 #define ALPHA433_FIFO_LEVEL_8          0x0080
00088 #define ALPHA433_FIFO_LEVEL_9          0x0090
00089 #define ALPHA433_FIFO_LEVEL_10         0x00A0
00090 #define ALPHA433_FIFO_LEVEL_11         0x00B0
00091 #define ALPHA433_FIFO_LEVEL_12         0x00C0
00092 #define ALPHA433_FIFO_LEVEL_13         0x00D0
00093 #define ALPHA433_FIFO_LEVEL_14         0x00E0
00094 #define ALPHA433_FIFO_LEVEL_15         0x00F0
00095 #define ALPHA433_FIFO_FILL_PATTERN     0x0000
00096 #define ALPHA433_FIFO_FILL_ALWAYS      0x0004
00097 #define ALPHA433_HI_SENS_RESET_ENABLE  0x0000
00098 #define ALPHA433_HI_SENS_RESET_DISABLE 0x0001
00099 #define ALPHA433_AFC_MODE_NOAUTO       0x0000
00100 #define ALPHA433_AFC_MODE_ONCE         0x0040
00101 #define ALPHA433_AFC_MODE_VDI          0x0080
00102 #define ALPHA433_AFC_MODE_INDEPENDENT  0x00C0
00103 #define ALPHA433_AFC_RANGE_3TO4        0x0030
00104 #define ALPHA433_AFC_RANGE_7TO8        0x0020
00105 #define ALPHA433_AFC_RANGE_15TO16      0x0010
00106 #define ALPHA433_AFC_RANGE_NO_RES      0x0000
00107 #define ALPHA433_AFC_FINE_ENABLE       0x0004
00108 #define ALPHA433_AFC_FINE_DISABLE      0x0000
00109 #define ALPHA433_AFC_ENABLE            0x0003
00110 #define ALPHA433_AFC_DISABLE           0x0000
00111 #define ALPHA433_MOD_POLARITY_P        0x0000
00112 #define ALPHA433_MOD_POLARITY_N        0x0100
00113 #define ALPHA433_MOD_FREQUENCY_15       0x0000
00114 #define ALPHA433_MOD_FREQUENCY_30       0x0010
00115 #define ALPHA433_MOD_FREQUENCY_45       0x0020
00116 #define ALPHA433_MOD_FREQUENCY_60       0x0030
00117 #define ALPHA433_MOD_FREQUENCY_75       0x0040
00118 #define ALPHA433_MOD_FREQUENCY_90       0x0050
00119 #define ALPHA433_MOD_FREQUENCY_105      0x0060
00120 #define ALPHA433_MOD_FREQUENCY_120      0x0070
00121 #define ALPHA433_MOD_FREQUENCY_135      0x0080
00122 #define ALPHA433_MOD_FREQUENCY_150      0x0090
00123 #define ALPHA433_MOD_FREQUENCY_165      0x00A0
00124 #define ALPHA433_MOD_FREQUENCY_180      0x00B0
00125 #define ALPHA433_MOD_FREQUENCY_195      0x00C0
00126 #define ALPHA433_MOD_FREQUENCY_210      0x00D0
00127 #define ALPHA433_MOD_FREQUENCY_225      0x00E0
00128 #define ALPHA433_MOD_FREQUENCY_240      0x00F0
00129 #define ALPHA433_TX_POWER_0            0x0000
00130 #define ALPHA433_TX_POWER_3            0x0001
00131 #define ALPHA433_TX_POWER_6            0x0002
00132 #define ALPHA433_TX_POWER_9            0x0003
00133 #define ALPHA433_TX_POWER_12           0x0004
00134 #define ALPHA433_TX_POWER_15           0x0005
00135 #define ALPHA433_TX_POWER_18           0x0006
00136 #define ALPHA433_TX_POWER_21           0x0007
00137 #define ALPHA433_CLK_OUT_1             0x0000
00138 #define ALPHA433_CLK_OUT_125           0x0020
00139 #define ALPHA433_CLK_OUT_166           0x0040
00140 #define ALPHA433_CLK_OUT_2             0x0060
00141 #define ALPHA433_CLK_OUT_25            0x0080
00142 #define ALPHA433_CLK_OUT_333           0x00A0
00143 #define ALPHA433_CLK_OUT_5             0x00C0
00144 #define ALPHA433_CLK_OUT_10            0x00E0
00145 #define ALPHA433_LOW_BAT22             0x0000
00146 #define ALPHA433_STATUS_TX_NEXT_BYTE           0x8000
00147 #define ALPHA433_STATUS_FIFO_LIMIT_REACHED     0x8000
00148 #define ALPHA433_STATUS_POWER_ON_RESET         0x4000
00149 #define ALPHA433_STATUS_RX_OVERFLOW            0x2000
00150 #define ALPHA433_STATUS_TX_UNDERRUN            0x2000
00151 #define ALPHA433_STATUS_WAKEUP                 0x1000
00152 #define ALPHA433_STATUS_EXT                    0x0800
00153 #define ALPHA433_STATUS_LOW_BATTERY            0x0400
00154 #define ALPHA433_STATUS_FIFO_EMPTY             0x0200
00155 #define ALPHA433_STATUS_STRONG_SIGNAL          0x0100
00156 #define ALPHA433_STATUS_RSSI                   0x0100
00157 #define ALPHA433_STATUS_DQD                    0x0080
00158 #define ALPHA433_STATUS_CLOCK_LOCKED           0x0040
00159 #define ALPHA433_TRANSMIT_OK                   0
00160 #define ALPHA433_TRANSMIT_TIMEOUT              1
00161 #define ALPHA433_TRANSMIT_PARITY_ERROR         2
00162 #define ALPHA433_RECEIVE_OK                    0
00163 #define ALPHA433_RECEIVE_TIMEOUT               1
00164 #define ALPHA433_RECEIVE_PARITY_ERROR          2
00165 #define ALPHA433_NODATA            0
00166 #define ALPHA433_DATA_AVAIABLE     1
00167 #define ALPHA433_MODE_TRANSMITTING         1
00168 #define ALPHA433_MODE_RECEIVING            2
00169 #define ALPHA433_MODE_SWITCHING            0
00170 
00171 // ----------------------------- default user configuration --------------------------------
00172 
00173 #define ALPHA433_FREQUENCY         ALPHA433_FREQUENCY_433
00174 #define ALPHA433_CRYSTAL_LOAD      ALPHA433_CRYSTAL_LOAD_100
00175 #define ALPHA433_USE_FIFO          ALPHA433_USE_FIFO_YES
00176 #define ALPHA433_PIN20             ALPHA433_PIN20_INTERRUPT_IN
00177 #define ALPHA433_VDI_RESPONSE      ALPHA433_VDI_RESPONSE_SLOW
00178 #define ALPHA433_BANDWIDTH         ALPHA433_BANDWIDTH_134
00179 #define ALPHA433_LNA_GAIN          ALPHA433_LNA_GAIN_0
00180 #define ALPHA433_RSSI              ALPHA433_RSSI_97
00181 #define ALPHA433_CLOCK_RECOVERY    ALPHA433_CLOCK_RECOVERY_SLOW
00182 #define ALPHA433_FILTER            ALPHA433_FILTER_DIGITAL
00183 #define ALPHA433_DQD               ALPHA433_DQD_4
00184 #define ALPHA433_FIFO_LEVEL        ALPHA433_FIFO_LEVEL_8
00185 #define ALPHA433_FIFO_FILL         ALPHA433_FIFO_FILL_PATTERN
00186 #define ALPHA433_HI_SENS_RESET     ALPHA433_HI_SENS_RESET_DISABLE
00187 #define ALPHA433_AFC_MODE          ALPHA433_AFC_MODE_INDEPENDENT
00188 #define ALPHA433_AFC_RANGE         ALPHA433_AFC_RANGE_3TO4
00189 #define ALPHA433_AFC_FINE_MODE     ALPHA433_AFC_FINE_DISABLE
00190 #define ALPHA433_AFC               ALPHA433_AFC_DISABLE
00191 #define ALPHA433_MOD_POLARITY      ALPHA433_MOD_POLARITY_P
00192 #define ALPHA433_MOD_FREQUENCY     ALPHA433_MOD_FREQUENCY_90
00193 #define ALPHA433_TX_POWER          ALPHA433_TX_POWER_0
00194 #define ALPHA433_CLK_OUT           ALPHA433_CLK_OUT_2
00195 #define ALPHA433_LOW_BAT           ALPHA433_LOW_BAT22
00196 #define ALPHA433_TIMEOUT   100
00197 #define TIMEOUT 8.0
00198 
00199 class Alpha433 : public Stream
00200 {
00201 
00202 // Public Functions
00203 
00204 public:
00205 
00206     /** Create the alpha433 object connected to the default pins
00207       *
00208       * @param mosi pin - default is p5
00209       * @param miso pin - default is p6
00210       * @param sck pin - default is p7
00211       * @param fss pin - default is p8
00212       * @param nirq pin - default is p11
00213       */
00214     Alpha433();
00215 
00216     /** Create the alpha433 object connected to specific pins
00217      *
00218      */
00219     Alpha433(PinName mosi, PinName miso, PinName sck, PinName fss, PinName nirq);
00220 
00221 
00222 // Send a string to the RF transmitter
00223     unsigned long sendString(char ucCount, char* ucBuffer);
00224 
00225 // Enable RF Transmitter
00226     void enableTransmitter(void);
00227 
00228 // Disable RF Transmitter
00229     void disableTransmitter(void);
00230 
00231 // Enable RF Receiver
00232     void enableReceiver(void);
00233 
00234 // Disable RF Receiver
00235     void disableReceiver(void);
00236 
00237 // SSI FiFo Clear
00238     void clearBuffer(void);
00239 
00240 // Reset RF
00241     void rf_reset(void);
00242 
00243 // Initialise RF
00244     void rf_init(void);
00245 
00246 // RF Interrupt
00247     void interrupt(void);
00248 
00249 // RF Set Datarate
00250     void setDatarate(unsigned long ulValue);
00251 
00252 // RF Set Frequency
00253     void setFrequency(unsigned long ulValue);
00254 
00255 // Enable RF Receiver FiFo fill
00256     void enableFifoFill(void);
00257 
00258 // Disable RF Receiver FiFo fill
00259     void disableFifoFill(void);
00260 
00261 // Handle new RF Data
00262     void dataAvailable(char cCount, char* cBuffer);
00263 
00264 // Read status byte
00265     int readStatusByte();
00266 
00267 // Reset timeout: stops hanging on bad receive; resets alpha 433
00268     void timeout();
00269 
00270 private :
00271 
00272     SPI _spi;
00273     DigitalOut _fss;
00274     DigitalIn _nirq_test;
00275     InterruptIn _nirq;
00276 
00277     //Write a byte (data) to address
00278     void _write(int address);
00279 
00280     //Read a byte (return val) from address
00281     int _read(int address);
00282 
00283     virtual int _putc(int c);
00284     virtual int _getc();
00285 
00286 };
00287 
00288 #endif // ALPHA433_H