V0.5 library for the Pi Swarm robot

Committer:
jah128
Date:
Mon Feb 03 12:59:51 2014 +0000
Revision:
8:08dec9c7d3f6
Parent:
4:52b3e4c5a425
Minor comments added

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jah128 4:52b3e4c5a425 1 /*******************************************************************************************
jah128 4:52b3e4c5a425 2 *
jah128 8:08dec9c7d3f6 3 * University of York Robot Lab Pi Swarm Library: 433MHz Alpha Transceiver Driver
jah128 0:9ffe8ebd1c40 4 *
jah128 0:9ffe8ebd1c40 5 * (C) Dr James Hilder, Dept. Electronics & Computer Science, University of York
jah128 1:b067a08ff54e 6 *
jah128 4:52b3e4c5a425 7 * Version 0.5 February 2014
jah128 0:9ffe8ebd1c40 8 *
jah128 0:9ffe8ebd1c40 9 * Designed for use with the Pi Swarm Board (enhanced MBED sensor board) v1.2
jah128 0:9ffe8ebd1c40 10 *
jah128 4:52b3e4c5a425 11 ******************************************************************************************/
jah128 1:b067a08ff54e 12
jah128 0:9ffe8ebd1c40 13 #include "main.h"
jah128 0:9ffe8ebd1c40 14 #include "communications.h"
jah128 0:9ffe8ebd1c40 15
jah128 0:9ffe8ebd1c40 16 // Variables
jah128 0:9ffe8ebd1c40 17
jah128 0:9ffe8ebd1c40 18 Timeout reset_timeout;
jah128 0:9ffe8ebd1c40 19
jah128 0:9ffe8ebd1c40 20 char cRFStatus = 0;
jah128 0:9ffe8ebd1c40 21
jah128 0:9ffe8ebd1c40 22 signed short ssTransmitCount = 0;
jah128 0:9ffe8ebd1c40 23 signed short ssTransmitPointer = 0;
jah128 0:9ffe8ebd1c40 24 char cTXBuffer[64];
jah128 0:9ffe8ebd1c40 25
jah128 0:9ffe8ebd1c40 26 signed short ssReceiveCount = 0;
jah128 0:9ffe8ebd1c40 27 signed short ssReceivePointer = 0;
jah128 0:9ffe8ebd1c40 28 char cRXBuffer[64];
jah128 0:9ffe8ebd1c40 29
jah128 0:9ffe8ebd1c40 30 char cDataAvailable = 0;
jah128 0:9ffe8ebd1c40 31
jah128 1:b067a08ff54e 32 Alpha433::Alpha433(PinName mosi, PinName miso, PinName sck, PinName fss, PinName nirq) : Stream("Alpha433"), _spi(mosi,miso,sck), _fss(fss), _nirq_test(nirq), _nirq(nirq)
jah128 1:b067a08ff54e 33 {
jah128 1:b067a08ff54e 34
jah128 0:9ffe8ebd1c40 35 }
jah128 0:9ffe8ebd1c40 36
jah128 1:b067a08ff54e 37 Alpha433::Alpha433() : Stream("Alpha433"), _spi(p5,p6,p7), _fss(p8), _nirq_test(p11), _nirq(p11)
jah128 1:b067a08ff54e 38 {
jah128 1:b067a08ff54e 39
jah128 0:9ffe8ebd1c40 40 }
jah128 0:9ffe8ebd1c40 41
jah128 8:08dec9c7d3f6 42 // Send data on the Alpha 433 transceiver, cCount = string length, cBuffer = data string
jah128 0:9ffe8ebd1c40 43 unsigned long Alpha433::sendString(char cCount, char* cBuffer)
jah128 0:9ffe8ebd1c40 44 {
jah128 0:9ffe8ebd1c40 45 unsigned char i = 0;
jah128 8:08dec9c7d3f6 46 if(cRFStatus == ALPHA433_MODE_TRANSMITTING) {
jah128 8:08dec9c7d3f6 47 // RF already transmitting
jah128 0:9ffe8ebd1c40 48 if(RF_VERBOSE == 1)pc.printf("RF Error: Already transmitting\n");
jah128 0:9ffe8ebd1c40 49 return 1; // Error
jah128 1:b067a08ff54e 50
jah128 1:b067a08ff54e 51 }
jah128 1:b067a08ff54e 52
jah128 8:08dec9c7d3f6 53 if(cCount > 62) {
jah128 8:08dec9c7d3f6 54 // Amount of data to high
jah128 0:9ffe8ebd1c40 55 if(RF_VERBOSE == 1)pc.printf("RF Error: Too much tx data\n");
jah128 0:9ffe8ebd1c40 56 return 2; // Error
jah128 1:b067a08ff54e 57
jah128 0:9ffe8ebd1c40 58 }
jah128 8:08dec9c7d3f6 59 if(cCount == 0) {
jah128 8:08dec9c7d3f6 60 // No Data
jah128 0:9ffe8ebd1c40 61 if(RF_VERBOSE == 1)pc.printf("RF Error: No tx data\n");
jah128 0:9ffe8ebd1c40 62 return 3; // Error
jah128 0:9ffe8ebd1c40 63 }
jah128 0:9ffe8ebd1c40 64 cTXBuffer[i] = cCount;
jah128 1:b067a08ff54e 65 unsigned char checksum_byte = 0;
jah128 8:08dec9c7d3f6 66 for(i=0; i<cCount; i++) {
jah128 8:08dec9c7d3f6 67 // make a copy
jah128 0:9ffe8ebd1c40 68 cTXBuffer[i+1] = cBuffer[i];
jah128 0:9ffe8ebd1c40 69 checksum_byte ^= cBuffer[i];
jah128 1:b067a08ff54e 70 }
jah128 0:9ffe8ebd1c40 71 cTXBuffer[cCount+1] = checksum_byte;
jah128 0:9ffe8ebd1c40 72 if(RF_VERBOSE == 1)pc.printf("RF Message: \"%s\" Checksum: %2X\n",cBuffer,checksum_byte);
jah128 8:08dec9c7d3f6 73 ssTransmitCount = cCount+3;
jah128 8:08dec9c7d3f6 74 // add count and checksum
jah128 0:9ffe8ebd1c40 75 ssTransmitPointer = -6;
jah128 0:9ffe8ebd1c40 76 cRFStatus = ALPHA433_MODE_SWITCHING;
jah128 0:9ffe8ebd1c40 77 disableReceiver();
jah128 0:9ffe8ebd1c40 78 enableTransmitter();
jah128 1:b067a08ff54e 79 cRFStatus = ALPHA433_MODE_TRANSMITTING;
jah128 1:b067a08ff54e 80
jah128 0:9ffe8ebd1c40 81 if(RF_VERBOSE == 1)pc.printf("RF Transmitting");
jah128 0:9ffe8ebd1c40 82
jah128 1:b067a08ff54e 83 while(ssTransmitPointer <= ssTransmitCount) {
jah128 1:b067a08ff54e 84 while(_nirq_test);
jah128 1:b067a08ff54e 85 if(ssTransmitPointer < -2) _write(0xB8AA); // send sync
jah128 1:b067a08ff54e 86 else if(ssTransmitPointer == -2) _write(0xB82D); // send first part of the fifo pattern;
jah128 1:b067a08ff54e 87 else if(ssTransmitPointer == -1) _write(0xB8D4); // send second part of the fifo pattern;
jah128 1:b067a08ff54e 88 else if(ssTransmitPointer == ssTransmitCount) _write(0xB800); // send dummy byte
jah128 1:b067a08ff54e 89 else _write(0xB800 | cTXBuffer[ssTransmitPointer]); // send data
jah128 1:b067a08ff54e 90 ssTransmitPointer++;
jah128 0:9ffe8ebd1c40 91 }
jah128 1:b067a08ff54e 92
jah128 0:9ffe8ebd1c40 93 _write(0xB800); // send dummy byte, maybe redundant
jah128 0:9ffe8ebd1c40 94 disableTransmitter();
jah128 0:9ffe8ebd1c40 95 enableReceiver();
jah128 0:9ffe8ebd1c40 96 ssReceivePointer = 0;
jah128 0:9ffe8ebd1c40 97 cRFStatus = ALPHA433_MODE_RECEIVING;
jah128 0:9ffe8ebd1c40 98 return 0;
jah128 0:9ffe8ebd1c40 99 }
jah128 0:9ffe8ebd1c40 100
jah128 8:08dec9c7d3f6 101 // Handle new RF Data
jah128 8:08dec9c7d3f6 102 void Alpha433::dataAvailable(char cCount, char* cBuffer)
jah128 8:08dec9c7d3f6 103 {
jah128 8:08dec9c7d3f6 104 char rstring [cCount+1];
jah128 8:08dec9c7d3f6 105 char checksum = 0;
jah128 8:08dec9c7d3f6 106 int i;
jah128 8:08dec9c7d3f6 107 for(i=0; i<cCount; i++) {
jah128 8:08dec9c7d3f6 108 rstring[i]=cBuffer[i];
jah128 8:08dec9c7d3f6 109 checksum ^= rstring[i];
jah128 8:08dec9c7d3f6 110 }
jah128 8:08dec9c7d3f6 111 rstring[cCount]=0;
jah128 8:08dec9c7d3f6 112 if (cBuffer[cCount] != checksum) {
jah128 8:08dec9c7d3f6 113 if(RF_VERBOSE == 1)pc.printf("RF Received [%d] \"%s\" (checksum failed: expected %02X, received %02X)%02X %02X\n",cCount,rstring,checksum,cBuffer[cCount],cBuffer[cCount-1],cBuffer[cCount+1]);
jah128 8:08dec9c7d3f6 114 } else {
jah128 8:08dec9c7d3f6 115 if(RF_VERBOSE == 1)pc.printf("RF Received [%d] \"%s\" (checksum passed)\n",cCount,rstring);
jah128 8:08dec9c7d3f6 116 if(USE_COMMUNICATION_STACK == 1) {
jah128 8:08dec9c7d3f6 117 processRadioData(rstring, cCount);
jah128 8:08dec9c7d3f6 118 } else {
jah128 8:08dec9c7d3f6 119 processRawRFData(rstring, cCount);
jah128 8:08dec9c7d3f6 120 }
jah128 8:08dec9c7d3f6 121 }
jah128 8:08dec9c7d3f6 122 }
jah128 8:08dec9c7d3f6 123
jah128 8:08dec9c7d3f6 124
jah128 0:9ffe8ebd1c40 125 // Enable RF Transmitter
jah128 0:9ffe8ebd1c40 126 void Alpha433::enableTransmitter(void)
jah128 0:9ffe8ebd1c40 127 {
jah128 0:9ffe8ebd1c40 128 if(RF_VERBOSE == 1)pc.printf("RF Enable TX\n");
jah128 0:9ffe8ebd1c40 129 //RFCommand(0x8229);
jah128 0:9ffe8ebd1c40 130 _write(0x8229);
jah128 0:9ffe8ebd1c40 131 }
jah128 0:9ffe8ebd1c40 132
jah128 0:9ffe8ebd1c40 133 // Disable RF Transmitter
jah128 0:9ffe8ebd1c40 134 void Alpha433::disableTransmitter(void)
jah128 0:9ffe8ebd1c40 135 {
jah128 0:9ffe8ebd1c40 136 if(RF_VERBOSE == 1)pc.printf("RF Disable TX\n");
jah128 0:9ffe8ebd1c40 137 //RFCommand(0x8209);
jah128 0:9ffe8ebd1c40 138 _write(0x8209);
jah128 0:9ffe8ebd1c40 139 }
jah128 0:9ffe8ebd1c40 140
jah128 0:9ffe8ebd1c40 141
jah128 0:9ffe8ebd1c40 142 // Enable RF Receiver
jah128 0:9ffe8ebd1c40 143 void Alpha433::enableReceiver(void)
jah128 0:9ffe8ebd1c40 144 {
jah128 0:9ffe8ebd1c40 145 if(RF_VERBOSE == 1)pc.printf("RF Enable RX\n");
jah128 0:9ffe8ebd1c40 146 //RFCommand(0x8288);
jah128 0:9ffe8ebd1c40 147 _write(0x8288);
jah128 0:9ffe8ebd1c40 148 enableFifoFill();
jah128 0:9ffe8ebd1c40 149 }
jah128 0:9ffe8ebd1c40 150
jah128 0:9ffe8ebd1c40 151 // Disable RF Receiver
jah128 0:9ffe8ebd1c40 152 void Alpha433::disableReceiver(void)
jah128 1:b067a08ff54e 153 {
jah128 1:b067a08ff54e 154 if(RF_VERBOSE == 1)pc.printf("RF Disable RX\n");
jah128 0:9ffe8ebd1c40 155 //RFCommand(0x8208);
jah128 0:9ffe8ebd1c40 156 _write(0x8208);
jah128 0:9ffe8ebd1c40 157 //rx_led = 0;
jah128 0:9ffe8ebd1c40 158 disableFifoFill();
jah128 0:9ffe8ebd1c40 159 }
jah128 0:9ffe8ebd1c40 160
jah128 0:9ffe8ebd1c40 161 // SSI FiFo Clear
jah128 0:9ffe8ebd1c40 162 void Alpha433::clearBuffer(void)
jah128 0:9ffe8ebd1c40 163 {
jah128 1:b067a08ff54e 164 while(_read(0xB000) != 0);
jah128 0:9ffe8ebd1c40 165 }
jah128 0:9ffe8ebd1c40 166
jah128 0:9ffe8ebd1c40 167 // Reset RF
jah128 0:9ffe8ebd1c40 168 void Alpha433::rf_reset(void)
jah128 0:9ffe8ebd1c40 169 {
jah128 0:9ffe8ebd1c40 170 // Chip must be deselected
jah128 0:9ffe8ebd1c40 171 _fss = 1;
jah128 0:9ffe8ebd1c40 172
jah128 0:9ffe8ebd1c40 173 // Setup the spi for 16 bit data, high steady state clock, second edge capture, with a 1MHz clock rate
jah128 0:9ffe8ebd1c40 174 _spi.format(16,0); //Was 16,3
jah128 0:9ffe8ebd1c40 175 _spi.frequency(2000000);
jah128 0:9ffe8ebd1c40 176 _nirq.mode(PullUp);
jah128 0:9ffe8ebd1c40 177 _nirq.fall(this,&Alpha433::interrupt);
jah128 0:9ffe8ebd1c40 178 // Select the device by seting chip select low
jah128 0:9ffe8ebd1c40 179 _fss = 0;
jah128 0:9ffe8ebd1c40 180 //int_out=0;
jah128 0:9ffe8ebd1c40 181
jah128 0:9ffe8ebd1c40 182 }
jah128 0:9ffe8ebd1c40 183
jah128 8:08dec9c7d3f6 184 // Timeout interrupt routine - reset chip
jah128 0:9ffe8ebd1c40 185 void Alpha433::timeout(void)
jah128 0:9ffe8ebd1c40 186 {
jah128 0:9ffe8ebd1c40 187 if(RF_VERBOSE == 1)pc.printf("RF Error on read; resetting chip\n");
jah128 0:9ffe8ebd1c40 188 rf_init();
jah128 0:9ffe8ebd1c40 189 }
jah128 0:9ffe8ebd1c40 190
jah128 0:9ffe8ebd1c40 191 // Initialise RF
jah128 0:9ffe8ebd1c40 192 void Alpha433::rf_init(void)
jah128 0:9ffe8ebd1c40 193 {
jah128 1:b067a08ff54e 194
jah128 0:9ffe8ebd1c40 195 if(RF_VERBOSE == 1)pc.printf("RF Init start\n");
jah128 0:9ffe8ebd1c40 196 rf_reset(); // RF Hardware Reset
jah128 1:b067a08ff54e 197 _write(0x0000); // read status to cancel prior interrupt
jah128 0:9ffe8ebd1c40 198 _write(0x8000 | ALPHA433_FREQUENCY | ALPHA433_CRYSTAL_LOAD | ALPHA433_USE_FIFO);
jah128 0:9ffe8ebd1c40 199 _write(0x9000 | ALPHA433_PIN20 | ALPHA433_VDI_RESPONSE | ALPHA433_BANDWIDTH | ALPHA433_LNA_GAIN | ALPHA433_RSSI);
jah128 0:9ffe8ebd1c40 200 _write(0xC228 | ALPHA433_CLOCK_RECOVERY | ALPHA433_FILTER | ALPHA433_DQD);
jah128 0:9ffe8ebd1c40 201 _write(0xCA00 | ALPHA433_FIFO_LEVEL | ALPHA433_FIFO_FILL | ALPHA433_HI_SENS_RESET);
jah128 0:9ffe8ebd1c40 202 _write(0xC400 | ALPHA433_AFC_MODE | ALPHA433_AFC_RANGE | ALPHA433_AFC_FINE_MODE | ALPHA433_AFC);
jah128 0:9ffe8ebd1c40 203 _write(0x9800 | ALPHA433_MOD_POLARITY | ALPHA433_MOD_FREQUENCY | ALPHA433_TX_POWER);
jah128 0:9ffe8ebd1c40 204 _write(0xC000 | ALPHA433_CLK_OUT | ALPHA433_LOW_BAT);
jah128 0:9ffe8ebd1c40 205 enableReceiver();
jah128 0:9ffe8ebd1c40 206 ssReceivePointer = 0;
jah128 0:9ffe8ebd1c40 207 reset_timeout.attach(this,&Alpha433::timeout,TIMEOUT);
jah128 0:9ffe8ebd1c40 208 if(RF_VERBOSE == 1)pc.printf("RF Init end\n");
jah128 0:9ffe8ebd1c40 209 cRFStatus = ALPHA433_MODE_RECEIVING;
jah128 0:9ffe8ebd1c40 210 }
jah128 1:b067a08ff54e 211
jah128 1:b067a08ff54e 212
jah128 8:08dec9c7d3f6 213 // RF Interrupt Called - handle received data
jah128 0:9ffe8ebd1c40 214 void Alpha433::interrupt(void)
jah128 0:9ffe8ebd1c40 215 {
jah128 1:b067a08ff54e 216 if(cRFStatus == ALPHA433_MODE_RECEIVING) {
jah128 1:b067a08ff54e 217 //Add reset timeout
jah128 1:b067a08ff54e 218 reset_timeout.detach();
jah128 1:b067a08ff54e 219 reset_timeout.attach(this,&Alpha433::timeout,0.5);
jah128 1:b067a08ff54e 220 //pc.printf("Rec. ISR\n");
jah128 1:b067a08ff54e 221 int res = _read(0x0000);
jah128 1:b067a08ff54e 222 if(res==0) res = _read(0x0000);
jah128 1:b067a08ff54e 223 char read_failure = 0;
jah128 1:b067a08ff54e 224
jah128 1:b067a08ff54e 225 if (res & (ALPHA433_STATUS_TX_NEXT_BYTE | ALPHA433_STATUS_FIFO_LIMIT_REACHED)) { // RF: waiting for next Byte OR FIFO full
jah128 1:b067a08ff54e 226 //pc.printf("Receiving");
jah128 1:b067a08ff54e 227 cRXBuffer[ssReceivePointer] = _read(0xB000) & 0xFF; // get data
jah128 1:b067a08ff54e 228 if(ssReceivePointer == 0) {
jah128 1:b067a08ff54e 229 ssReceiveCount = cRXBuffer[0];
jah128 0:9ffe8ebd1c40 230
jah128 1:b067a08ff54e 231 if((ssReceiveCount == 0) || (ssReceiveCount > 62)) { // error amount of data
jah128 1:b067a08ff54e 232 read_failure=1;
jah128 1:b067a08ff54e 233 pc.printf("Error amount of RX data: %d\n",ssReceiveCount);
jah128 1:b067a08ff54e 234 reset_timeout.detach();
jah128 1:b067a08ff54e 235 reset_timeout.attach(this,&Alpha433::timeout,TIMEOUT);
jah128 1:b067a08ff54e 236 } else {
jah128 1:b067a08ff54e 237 ssReceiveCount += 2; // add count + checksum
jah128 1:b067a08ff54e 238 //pc.printf("\nBytes to receive: %d\n",ssReceiveCount);
jah128 1:b067a08ff54e 239 }
jah128 1:b067a08ff54e 240
jah128 1:b067a08ff54e 241 }
jah128 1:b067a08ff54e 242 if(!read_failure) {
jah128 1:b067a08ff54e 243 ssReceivePointer++;
jah128 1:b067a08ff54e 244 if (ssReceivePointer >= ssReceiveCount) { // End transmission
jah128 1:b067a08ff54e 245 disableFifoFill();
jah128 1:b067a08ff54e 246 enableFifoFill();
jah128 1:b067a08ff54e 247 //irqled=0;
jah128 1:b067a08ff54e 248 reset_timeout.detach();
jah128 1:b067a08ff54e 249 reset_timeout.attach(this,&Alpha433::timeout,TIMEOUT);
jah128 1:b067a08ff54e 250 ssReceivePointer = 0;
jah128 1:b067a08ff54e 251 dataAvailable(cRXBuffer[0], &cRXBuffer[1]);
jah128 1:b067a08ff54e 252 }
jah128 1:b067a08ff54e 253 } else {
jah128 1:b067a08ff54e 254 disableFifoFill();
jah128 1:b067a08ff54e 255 enableFifoFill();
jah128 1:b067a08ff54e 256 ssReceivePointer = 0;
jah128 1:b067a08ff54e 257 reset_timeout.detach();
jah128 1:b067a08ff54e 258 reset_timeout.attach(this,&Alpha433::timeout,TIMEOUT);
jah128 1:b067a08ff54e 259 }
jah128 0:9ffe8ebd1c40 260 }
jah128 1:b067a08ff54e 261 }
jah128 0:9ffe8ebd1c40 262 }
jah128 0:9ffe8ebd1c40 263
jah128 0:9ffe8ebd1c40 264 // RF Set Datarate
jah128 0:9ffe8ebd1c40 265 void Alpha433::setDatarate(unsigned long ulValue)
jah128 0:9ffe8ebd1c40 266 {
jah128 0:9ffe8ebd1c40 267 unsigned long ulRateCmd;
jah128 0:9ffe8ebd1c40 268 if(ulValue < 3000) ulRateCmd = 0x0080 | (10000000 / 29 / 8 / ulValue) - 1;
jah128 0:9ffe8ebd1c40 269 else ulRateCmd = 0x0000 | (10000000 / 29 / 1 / ulValue) - 1;
jah128 0:9ffe8ebd1c40 270 _write(0xC600 | ulRateCmd);
jah128 0:9ffe8ebd1c40 271 }
jah128 0:9ffe8ebd1c40 272
jah128 0:9ffe8ebd1c40 273 // RF Set Frequency
jah128 0:9ffe8ebd1c40 274 void Alpha433::setFrequency(unsigned long ulValue)
jah128 0:9ffe8ebd1c40 275 {
jah128 0:9ffe8ebd1c40 276 unsigned long ulRateCmd;
jah128 0:9ffe8ebd1c40 277
jah128 0:9ffe8ebd1c40 278 #if (ALPHA433_FREQUENCY == ALPHA433_FREQUENCY_315)
jah128 0:9ffe8ebd1c40 279 ulRateCmd = (ulValue - 10000000 * 1 * 31) * 4 / 10000;
jah128 0:9ffe8ebd1c40 280
jah128 0:9ffe8ebd1c40 281 #elif (ALPHA433_FREQUENCY == ALPHA433_FREQUENCY_433)
jah128 0:9ffe8ebd1c40 282 ulRateCmd = (ulValue - 10000000 * 1 * 43) * 4 / 10000;
jah128 0:9ffe8ebd1c40 283
jah128 0:9ffe8ebd1c40 284 #elif (ALPHA433_FREQUENCY == ALPHA433_FREQUENCY_868)
jah128 0:9ffe8ebd1c40 285 ulRateCmd = (ulValue - 10000000 * 2 * 43) * 4 / 10000;
jah128 0:9ffe8ebd1c40 286
jah128 0:9ffe8ebd1c40 287 #elif (ALPHA433_FREQUENCY == ALPHA433_FREQUENCY_915)
jah128 0:9ffe8ebd1c40 288 ulRateCmd = (ulValue - 10000000 * 3 * 30) * 4 / 10000;
jah128 0:9ffe8ebd1c40 289 #endif
jah128 0:9ffe8ebd1c40 290
jah128 0:9ffe8ebd1c40 291 _write(0xA000 | ulRateCmd);
jah128 0:9ffe8ebd1c40 292 }
jah128 0:9ffe8ebd1c40 293
jah128 0:9ffe8ebd1c40 294 // Enable RF Receiver FiFo fill
jah128 0:9ffe8ebd1c40 295 void Alpha433::enableFifoFill(void)
jah128 0:9ffe8ebd1c40 296 {
jah128 0:9ffe8ebd1c40 297 _write(0xCA00 | ALPHA433_FIFO_LEVEL | ALPHA433_FIFO_FILL | ALPHA433_HI_SENS_RESET | 0x0002);
jah128 0:9ffe8ebd1c40 298 while((_read(0x0000) & ALPHA433_STATUS_FIFO_EMPTY) == 0);
jah128 0:9ffe8ebd1c40 299 }
jah128 0:9ffe8ebd1c40 300
jah128 0:9ffe8ebd1c40 301 // Disable RF Receiver FiFo fill
jah128 0:9ffe8ebd1c40 302 void Alpha433::disableFifoFill(void)
jah128 0:9ffe8ebd1c40 303 {
jah128 0:9ffe8ebd1c40 304 _write(0xCA00 | ALPHA433_FIFO_LEVEL | ALPHA433_FIFO_FILL | ALPHA433_HI_SENS_RESET);
jah128 0:9ffe8ebd1c40 305 }
jah128 0:9ffe8ebd1c40 306
jah128 0:9ffe8ebd1c40 307
jah128 0:9ffe8ebd1c40 308 int Alpha433::readStatusByte()
jah128 0:9ffe8ebd1c40 309 {
jah128 1:b067a08ff54e 310 if(RF_VERBOSE == 1)pc.printf("RF Reading status byte\n");
jah128 1:b067a08ff54e 311 return _read(0x0000);
jah128 0:9ffe8ebd1c40 312 }
jah128 0:9ffe8ebd1c40 313
jah128 0:9ffe8ebd1c40 314 //-----PRIVATE FUNCTIONS-----
jah128 0:9ffe8ebd1c40 315
jah128 1:b067a08ff54e 316 void Alpha433::_write(int address)
jah128 1:b067a08ff54e 317 {
jah128 0:9ffe8ebd1c40 318 _fss=0; //select the deivce
jah128 0:9ffe8ebd1c40 319 _spi.write(address); //write the address of where the data is to be written first
jah128 0:9ffe8ebd1c40 320 //pc.printf("Write data: %04X\n",address);
jah128 0:9ffe8ebd1c40 321 _fss=1; //deselect the device
jah128 0:9ffe8ebd1c40 322 }
jah128 0:9ffe8ebd1c40 323
jah128 1:b067a08ff54e 324 int Alpha433::_read(int address)
jah128 1:b067a08ff54e 325 {
jah128 0:9ffe8ebd1c40 326 int _data;
jah128 0:9ffe8ebd1c40 327 _fss=0; //select the device
jah128 0:9ffe8ebd1c40 328 _data = _spi.write(address); //select the register
jah128 0:9ffe8ebd1c40 329 //pc.printf("Read data: %04X\n",_data);
jah128 0:9ffe8ebd1c40 330 _fss=1; //deselect the device
jah128 0:9ffe8ebd1c40 331 return _data; //return the data
jah128 0:9ffe8ebd1c40 332
jah128 0:9ffe8ebd1c40 333 }
jah128 0:9ffe8ebd1c40 334
jah128 1:b067a08ff54e 335 int Alpha433::_putc (int c)
jah128 1:b067a08ff54e 336 {
jah128 0:9ffe8ebd1c40 337 return(c);
jah128 0:9ffe8ebd1c40 338 }
jah128 0:9ffe8ebd1c40 339
jah128 1:b067a08ff54e 340 int Alpha433::_getc (void)
jah128 1:b067a08ff54e 341 {
jah128 0:9ffe8ebd1c40 342 char r = 0;
jah128 0:9ffe8ebd1c40 343 return(r);
jah128 0:9ffe8ebd1c40 344 }