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.
Diff: main.cpp
- 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;