Unfinished version 0.6 library for the Pi Swarm robot. NOTE: This library is not yet finished or fully tested - it will change.

Dependents:   Pi_Swarm_Blank Aggregation-Flocking_2 Pi_Swarm_User_Command_RF_Test

Fork of Pi_Swarm_Library by James Hilder

Committer:
jah128
Date:
Fri Jan 31 22:59:25 2014 +0000
Revision:
0:9ffe8ebd1c40
Child:
1:b067a08ff54e
First commit

Who changed what in which revision?

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