mbed library to connect to rfduino

Dependents:   RFDuino_example

rfduino_sketch.txt

Committer:
dbarbi1
Date:
2014-01-08
Revision:
5:cd05cc4dd824
Parent:
2:effa15a46f51

File content as of revision 5:cd05cc4dd824:

/*
 * RFDuino sketch. Load this sketch into the rfduino using 
 * the Arduino ide: http://arduino.cc/en/Main/Software
*/
#include <RFduinoBLE.h>

//Commands
#define HANDSHAKE  0x11
#define CONNECTED  0x22 
#define TRANSMIT   0x33
#define RECEIVE    0x44 

//connected flag
unsigned char cFlag;

//Transmit buffer
unsigned char Tbuf[255];


void setup() {
  //clear flags
  cFlag = 0;
  
  // initialize serial:
  Serial.begin(9600);
    
  RFduinoBLE.deviceName = "RFduino";
  RFduinoBLE.advertisementInterval = MILLISECONDS(300);
  // this is the data we want to appear in the advertisement
  // (the deviceName length plus the advertisement length must be <= 18 bytes
  RFduinoBLE.advertisementData = "rgb";
  
  // start the BLE stack
  RFduinoBLE.begin();
}

void loop() {

  // switch to lower power mode
  RFduino_ULPDelay(INFINITE);  

}

void Handshake()  {
 Serial.write(HANDSHAKE); 
}

void Connected()  {
 Serial.write(cFlag); 
}

void Transmit()  {
  unsigned int len;
  
  //get transmistion length
  len = (unsigned int)Serial.read();
  if(len > 255)  {len = 255;}
  
  //read byes to transmit
  for(int i=0;i<len;len++)  {
    Tbuf[i]=Serial.read();
  }
  
  RFduinoBLE.send((const char*)Tbuf, len);
 
} 


/*
 SerialEvent occurs whenever a new data comes in the
 hardware serial RX.  This routine is run between each
 time loop() runs, so using delay inside loop can delay
 response.  Multiple bytes of data may be available.
 */
void serialEvent() {
  if(Serial.available()) {
    // get the new byte:
    unsigned char comm = (char)Serial.read(); 
    
    switch (comm)  {
      case HANDSHAKE:
        Handshake();
        break;
      case CONNECTED:
        Connected();
        break;
      case TRANSMIT:
        Transmit();
        break;
     default:
        break;
    }
    
  }
}

void RFduinoBLE_onConnect() {
  cFlag=1;
}

void RFduinoBLE_onDisconnect() {
  cFlag=0;
}

void RFduinoBLE_onReceive(char *data, int len) {
  
  noInterrupts();
  
  if(len>255)  { len=255;} //limit to 255 bytes for now
  Serial.write(RECEIVE);
  Serial.write((unsigned char)len);
  
  for(int i=0; i<len; i++)  {
    Serial.write(data[i]);
  }
  
  //wait for handshake
  //Serial.read();
  
  interrupts();
}