Table controller for piswarm-office

Dependencies:   mbed

Fork of PiSwarmTableController by piswarm

Committer:
hee502
Date:
Thu Aug 14 09:06:31 2014 +0000
Revision:
5:68a1ce96bfeb
Parent:
2:c81f4ef63132
Table controller for piswarm-office

Who changed what in which revision?

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