blueSMIRF Library

A library for communication with Adafruit BlueSmirf Bluetooth Modem.

/media/uploads/pmundt/bluesmirf.jpg

Revision:
4:c57439dbda24
Parent:
3:b5ecc07f54e1
--- a/blueSMIRF.cpp	Sat Nov 11 12:59:47 2017 +0000
+++ b/blueSMIRF.cpp	Mon Nov 13 11:29:50 2017 +0000
@@ -52,6 +52,16 @@
         return 0; 
 }
 
+int blueSMIRF::factoryDefaults(void){
+    serial.printf("SF,1\n");
+    char response [16] = {0};
+    readResponse(response); //AOK
+    if(strcmp(response, "AOK\r\n") == 0)
+        return 1;
+    else
+        return 0;
+}
+
 int blueSMIRF::setMode(int mode){
     serial.printf("SM,%d\n", mode);
     char response[16] = {0}; //AOK
@@ -62,6 +72,16 @@
         return 0; 
 }
 
+int blueSMIRF::setName(char * name){
+    serial.printf("SN,%s\n", name);
+    char response[16] = {0}; //AOK
+    readResponse(response);
+    if(strcmp(response, "AOK\r\n") == 0)
+        return 1;
+    else
+        return 0; 
+}
+
 int blueSMIRF::setStatusString(char * str){
     serial.printf("SO,%s%\n", str);
     char response[16] = {0}; //AOK
@@ -72,6 +92,16 @@
         return 0;
 }
 
+int blueSMIRF::setPinCode(char * pinCode){
+    serial.printf("SP,%s\n", pinCode);
+    char response[16] = {0}; //AOK
+    readResponse(response);
+    if(strcmp(response, "AOK\r\n") == 0)
+        return 1;
+    else
+        return 0;
+}
+
 int blueSMIRF::setSpecialConf(int value){
     serial.printf("SQ,%d\n", value);
     char response[16] = {0}; //AOK
@@ -82,6 +112,16 @@
         return 0;
 }
 
+int blueSMIRF::setConfTimer(int value){
+    serial.printf("ST,%d\n", value);
+    char response[16] = {0}; //AOK
+    readResponse(response);
+    if(strcmp(response, "AOK\r\n") == 0)
+        return 1;
+    else
+        return 0;
+}
+
 /** GET COMMANDS **************************************************************/
 void blueSMIRF::getBasicSettings(char * response){
      serial.printf("D\n");
@@ -198,8 +238,8 @@
         return 0;
 }
  //------------------------------------------>>>>   
-void blueSMIRF::connectAddressFast(int address){
-    serial.printf("CF,%12X\n", address);
+void blueSMIRF::connectAddressFast(char * address){
+    serial.printf("CF,%s\n", address);
     //No Response
 }
 
@@ -233,13 +273,14 @@
         return 0;
 }
 
-void blueSMIRF::deviceScan(int time, char * response, int classCOD = 0){
+void blueSMIRF::deviceScan(int time, char * response, int classCOD){
     if(classCOD == 0)
         serial.printf("I,%d\n",time);
     else
         serial.printf("I,%d,%d\n",time ,classCOD);
-        
-    wait(time);
+    
+    int delay = time + 10; //Extra 10seconds for BlueSmirf to print all devices
+    wait(delay);
     
     readResponse(response);
 }
@@ -249,27 +290,33 @@
         serial.printf("IN,%d\n",time);
     else
         serial.printf("IN,%d,%d\n",time ,classCOD);
-        
-    wait(time);
+    
+    int delay = time + 10; //Extra 10seconds for BlueSmirf to print all devices
+    wait(delay);
     
     readResponse(response);
 }
     
 void blueSMIRF::deviceScanWithRSSI(char * response){
     serial.printf("IQ\n");
-    wait(7); // Wait 7 seconds
+
+    wait(17); // Wait 7 seconds + Extra 10 seconds for BlueSmirf to print all devices
     readResponse(response);
 }
     
 void blueSMIRF::deviceScanRovingNetwork(int time, char * response){
     serial.printf("IS%d\n",time);
-    wait(time);
+    
+    int delay = time + 10; //Extra 10seconds for BlueSmirf to print all devices
+    wait(delay);
     readResponse(response);
 }
     
 void blueSMIRF::deviceScanCablePair(int time, char * response){
     serial.printf("IR%d\n",time);
-    wait(time);
+    
+    int delay = time + 10; //Extra 10seconds for BlueSmirf to print all devices
+    wait(delay);
     readResponse(response);
 }
     
@@ -323,6 +370,7 @@
 
 int blueSMIRF::reboot(void){
     serial.printf("R,1\n");
+    wait_ms(100);
     char response[16] = {0}; //Reboot!
     readResponse(response);
     if(strcmp(response, "Reboot!\r\n") == 0)
@@ -366,11 +414,18 @@
 }    
 
 void blueSMIRF::readResponse(char* response){
-    wait_ms(50);
+    wait_ms(100);
+    
+    Timer timeOut;
+    timeOut.start();
+    
+    while(!serial.readable() && timeOut.read_ms() < 500);
+    wait_ms(100); //Be sure to receive the response
     int index = 0;
     while(serial.readable()){
         response[index] = serial.getc();
         index++;
+        wait_ms(1);
     }
 }
 
@@ -378,3 +433,7 @@
     while(serial.readable())
         char c = serial.getc();
 }
+
+void blueSMIRF::setBaud(int baud){
+    serial.baud(baud);
+}