mbed library to connect to rfduino
Diff: RFDuino.cpp
- Revision:
- 0:af5f495861b2
- Child:
- 2:effa15a46f51
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/RFDuino.cpp Mon Jan 06 15:50:16 2014 +0000 @@ -0,0 +1,105 @@ +#include "RFDuino.h" + +//Commands +#define HANDSHAKE 0x11 +#define CONNECTED 0x22 +#define TRANSMIT 0x33 +#define RECEIVE 0x44 + + + +RFDuino::RFDuino(PinName tx, PinName rx): rfd(tx,rx) { + //init + dataFlag=false; + //attach Serial isr + rfd.attach(this, &RFDuino::receive_isr); +} + + + +//rfduino seems to take a few seconds to be ready +//for serial comm +bool RFDuino::handshake() { + unsigned char temp = 0; + __disable_irq(); + + rfd.putc(HANDSHAKE); + wait(0.1); + if(rfd.readable()) { + temp = rfd.getc(); + } + __enable_irq(); + if(temp) { return 1;} + else { return 0;}; + + +} + +bool RFDuino::dataReady() { + return dataFlag; +} + +bool RFDuino::isConnected() { + unsigned char temp; + __disable_irq(); + + rfd.putc(CONNECTED); + temp = rfd.getc(); + + + __enable_irq(); + return temp; +} + + + + +//needs to be less than 255 bytes +void RFDuino::transmit(unsigned char* buff, int len) { + int i; + __disable_irq(); + + //send command + rfd.putc(TRANSMIT); + rfd.putc((unsigned char)len); + for(i=0;i<len;i++) { + rfd.putc(buff[i]); + } + + __enable_irq(); +} + + +int RFDuino::copyData(unsigned char* buff, int size) { + + memcpy(buff, data.buff, size/*data.len*/); + dataFlag = false; + + return data.len; +} + +void RFDuino::receive_isr() { + + if(rfd.getc() == RECEIVE) { + data.len = (int)rfd.getc(); + for(int i=0;i<data.len;i++) { + data.buff[i] = rfd.getc(); + } + //handshake + //rfd.putc(HANDSHAKE); + + dataFlag=true; + } else { + //we dont know this command, read and disregard + while(rfd.readable()) { + rfd.getc(); + } + } + +} + + + + + +