Petter Bellander / Mbed 2 deprecated Saab-BT

Dependencies:   mbed

Revision:
11:74844f6ca8cf
Parent:
9:9a4c81493a3d
Child:
13:968af0520530
diff -r 8be92db98bf4 -r 74844f6ca8cf RN52.cpp
--- a/RN52.cpp	Fri Jan 15 22:10:11 2016 +0000
+++ b/RN52.cpp	Thu Jan 28 21:22:08 2016 +0000
@@ -15,9 +15,13 @@
 #define CALLER_ID       "T\r"
 #define TRACK_METADATA  "AD\r"
 
+#define RESPONSE_TIMEOUT    30 //ms
 
 Serial serial(p13, p14);  // tx, rx
 DigitalIn event_pin(p20);
+Timer responsetime;
+char dummy_response[255];
+
 
 void RN52::init(){
     serial.baud(115200);
@@ -50,39 +54,33 @@
 }
 
 bool RN52::connect(){
-    char response[5];
     serial.printf(CONNECT);
-    return capture_response(response);
+    return capture_response(dummy_response);
 }
 
 bool RN52::disconnect(){
-    char response[5];
     serial.printf(DISCONNECT);
-    return capture_response(response);
+    return capture_response(dummy_response);
 }
 
 bool RN52::next_track(){
-    char response[5];
     serial.printf(NEXTTRACK);
-    return capture_response(response);
+    return capture_response(dummy_response);
 }
 
 bool RN52::prev_track(){
-    char response[5];
     serial.printf(PREVTRACK);
-    return capture_response(response);
+    return capture_response(dummy_response);
 }
 
 bool RN52::toggle_play(){
-    char response[5];
     serial.printf(PLAYPAUSE);
-    return capture_response(response);
+    return capture_response(dummy_response);
 }
 
 bool RN52::maxvolume(){
-    char response[5];
     serial.printf(MAXVOLUME);
-    return capture_response(response);
+    return capture_response(dummy_response);
 }
 
 bool RN52::get_status(RN52_RESULT * result){
@@ -113,7 +111,9 @@
     return 1;
 }
 
+
 bool RN52::get_track_metadata(RN52_RESULT * result){
+/*
     serial.printf(TRACK_METADATA);
     if(capture_response(result->response)) {//AOK
         while(result->response[4] != '(') { //time(ms) - always the last one
@@ -155,11 +155,13 @@
         }
         clear_serial();
     }
+    */
     return 1;
 }
 
-
 bool RN52::capture_response(char * str){        
+    responsetime.reset();
+    responsetime.start();
     char c = ' ';
     char n = 0;
     while(c != '\n') {
@@ -168,6 +170,11 @@
             str[n] = c;
             n++;
         }   
+        else if(responsetime.read_ms() > RESPONSE_TIMEOUT) {
+            clear_serial();
+            printf("timeout occured\r\n last response: %s\r\n", str);
+            return 0;
+        }
     }
     str[n-2] = '\0'; //terminate string before \r\n
     return (str[0] == 'A');