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:
Sun Feb 02 22:30:47 2014 +0000
Revision:
4:52b3e4c5a425
Parent:
1:b067a08ff54e
Child:
8:08dec9c7d3f6
Fixed warnings;

Who changed what in which revision?

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