V0.5 library for the Pi Swarm robot

Committer:
jah128
Date:
Sun Feb 02 18:05:58 2014 +0000
Revision:
1:b067a08ff54e
Parent:
0:9ffe8ebd1c40
Child:
4:52b3e4c5a425
updated comms library;

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