mbed library to connect to rfduino
RFDuino.cpp
- Committer:
- dbarbi1
- Date:
- 2014-01-07
- Revision:
- 2:effa15a46f51
- Parent:
- 0:af5f495861b2
- Child:
- 3:aac9193b7fd3
File content as of revision 2:effa15a46f51:
#include "RFDuino.h" /** RFDuino is used for connecting an mbed to rfduino * */ //Commands #define HANDSHAKE 0x11 #define CONNECTED 0x22 #define TRANSMIT 0x33 #define RECEIVE 0x44 /** Initializes RFDuino. Configures Pins tx and rx for serial communication * and creats associated ISR */ RFDuino::RFDuino(PinName tx, PinName rx): rfd(tx,rx) { //init dataFlag=false; //attach Serial isr rfd.attach(this, &RFDuino::receive_isr); } /** handshake() * * @returns * 1 on succesfull RFDuino serial reply to Handshake command * 0 on unsuccesfull RFDuino serial reply to Handshake command */ 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;}; } /** dataReady() * * @returns * 1 if RFDuino has unread data * 0 if RFDuino does not have unread data */ bool RFDuino::dataReady() { return dataFlag; } /** isConnected() * * @returns * 1 if the RFDuino has made a successful Bluetooth Connection * 0 if the RFDuino has not made a successful Bluetooth Connection */ bool RFDuino::isConnected() { unsigned char temp; __disable_irq(); rfd.putc(CONNECTED); temp = rfd.getc(); __enable_irq(); return temp; } /** transmit(buff, len) * * @param buff pointer to a byte buffer * @param len length of byte buffer to transmit */ 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(); } /** copyData(buff, size) * * @param buff pointer to a byte buffer * @param size size of buffer to copy data into * * @return size of data in RFDuino buffer */ int RFDuino::copyData(unsigned char* buff, int size) { __disable_irq(); memcpy(buff, data.buff, size/*data.len*/); __enable_irq(); dataFlag = false; return data.len; } /** receiv_isr *Serial ISR. Checks for Receive command, and reads data into buffer */ 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(); } dataFlag=true; } else { //we dont know this command, read and disregard while(rfd.readable()) { rfd.getc(); } } }