Handheld controller (RF) for Pi Swarm system

Dependencies:   mbed

Fork of Pi_Swarm_Handheld_Controller by piswarm

Committer:
jah128
Date:
Tue Jun 10 11:05:23 2014 +0000
Revision:
0:d63a63feb104
Handheld controller for Pi Swarm (old code)

Who changed what in which revision?

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