Simulated the CD changer of a Saab to implement a bluetooth connection to the car stereo. Control of playback device (phone) with steering wheel buttons. Needs a RN52 bluetooth transciever and a CAN transiever. So far only audio playback and control via steering wheel buttons implemented. Hands free calling planned.

Dependencies:   mbed

Revision:
15:82c3cc87bd02
Parent:
14:3f4098e94c29
Child:
16:7bb8b161e00b
--- a/main.cpp	Sun Jan 31 20:58:42 2016 +0000
+++ b/main.cpp	Sun Feb 07 18:24:13 2016 +0000
@@ -52,7 +52,6 @@
 }
 
 void check_for_wakeup(){
-    led3 = !led3;
     if(!active) {
         led4 = !led4;
         IBUS_COMMAND cmd = IBUS_OTHER_MESSAGE;
@@ -60,8 +59,8 @@
             cmd = cdc.get_cmd();
             if(cmd == IBUS_HEAD_UNIT_ON) {
                 active = 1;
+                cdc.enable();
                 rn52.enable();
-                cdc.enable();
             }
         }
         while(pc.readable()) {
@@ -69,8 +68,8 @@
                 case '1':
                     printf("enabling\r\n");
                     active = 1;
+                    cdc.enable();
                     rn52.enable();
-                    cdc.enable();
                     break;    
             }
         }
@@ -103,6 +102,21 @@
                 rn52.get_caller_id(&res);
                 printf("%s\r\n", res.response);
                 break;
+            case 'c':
+                rn52.config("Saab 9-5");
+                printf("configuring RN52\r\n");
+                break;
+            case 'm':
+                rn52.get_track_metadata(&res);
+                printf("Getting metadata\r\n");
+                printf("title:  %s\r\n", res.title);
+                printf("artist: %s\r\n", res.artist);
+                printf("album:  %s\r\n", res.album);
+                printf("genre:  %s\r\n", res.genre);
+                printf("duration:  %i\r\n", res.duration);
+                printf("track_count:  %i\r\n", res.track_count);
+                printf("track_number:  %i\r\n", res.track_number);                
+                break;
         }
     }
 }
@@ -110,29 +124,34 @@
 void handle_cdc_input() {
     switch (cdc.get_cmd()) {
         case IBUS_HEAD_UNIT_OFF:
-            cdc.display("Shutdown");
             active = 0;
             cdc.disable();
             rn52.disable();
             break;
         case IBUS_NEXT:
+            cdc.display("PLAY_PAUSE");
             rn52.toggle_play();
             break;
         case IBUS_CDC_ON:
+            cdc.display("CDC_ON");
             rn52.connect();
             break;
         case IBUS_CDC_OFF:
-            rn52.disconnect();
+            cdc.display("CDC_OFF");
             break;
         case IBUS_SKIP_FW:
+            cdc.display("SKIP_FW");
             rn52.next_track();
             break;
         case IBUS_SKIP_BW:
+            cdc.display("SKIP_BW");
             rn52.prev_track();
             break;
         case IBUS_SET:
+            cdc.display("SET");
             break;
         case IBUS_CLEAR:
+            cdc.display("CLEAR");
             break;
     }    
 }
@@ -145,30 +164,20 @@
                 break;
             case RN52_TRACK_CHANGE_EVENT:
                 cdc.reset_elapsed_time();
-                printf("Track change event\r\n");
-                printf("title:  %s\r\n", res.title);
-                printf("artist: %s\r\n", res.artist);
-                printf("album:  %s\r\n", res.album);
-                printf("genre:  %s\r\n", res.genre);
-                printf("duration:  %i\r\n", res.duration);
-                printf("track_count:  %i\r\n", res.track_count);
-                printf("track_number:  %i\r\n", res.track_number);
                 cdc.display(res.title);
                 cdc.set_track((char)res.track_number);
                 break;
             case RN52_OTHER_EVENT: //no specific event occured, check connection status
                 switch(res.connection) {
                     case RN52_CONNECTABLE_DISCOVERABLE:
-                        //printf("Waiting for connection\r\n");
                         cdc.display("BT REDO");
                         break;
                     case RN52_CONNECTED:
-                        //printf("Connected\r\n");
                         cdc.display("BT ANSLUTEN");
                         rn52.maxvolume();
+                        rn52.toggle_play();
                         break;
                     case RN52_AUDIO_STREAMING:
-                        //printf("Streaming\r\n");
                         cdc.display(res.title);
                         cdc.start_elapsed_time();
                         break;