Petter Bellander / Mbed 2 deprecated Saab-BT

Dependencies:   mbed

Committer:
petter
Date:
Fri Jan 15 21:27:42 2016 +0000
Revision:
9:9a4c81493a3d
Parent:
8:beb6c399490a
Child:
11:74844f6ca8cf
Fixed bug with last char in display being random.; Preparation for writing on both rows of display.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
petter 0:6cf6e566c0da 1 // Inspired from BlueSaab
petter 0:6cf6e566c0da 2 // Project/Hardware: http://bluesaab.blogspot.com/
petter 0:6cf6e566c0da 3 // Code: https://github.com/kveilands/SAAB-CDC/tree/master/SAAB-CDC
petter 0:6cf6e566c0da 4 // I-Bus information from http://pikkupossu.1g.fi/tomi/projects/i-bus/i-bus.html
petter 0:6cf6e566c0da 5
petter 0:6cf6e566c0da 6 #include "mbed.h"
petter 0:6cf6e566c0da 7 #include "CDC.h"
petter 0:6cf6e566c0da 8 #include "RN52.h"
petter 0:6cf6e566c0da 9
petter 0:6cf6e566c0da 10 CDC cdc;
petter 0:6cf6e566c0da 11 RN52 rn52;
petter 0:6cf6e566c0da 12 RN52_RESULT res;
petter 0:6cf6e566c0da 13
petter 0:6cf6e566c0da 14 Serial pc(USBTX, USBRX); // tx, rx
petter 0:6cf6e566c0da 15
petter 8:beb6c399490a 16 void handle_pc_input();
petter 8:beb6c399490a 17 void handle_cdc_input();
petter 8:beb6c399490a 18 void handle_bt_input();
petter 8:beb6c399490a 19
petter 8:beb6c399490a 20 int main() {
petter 8:beb6c399490a 21
petter 8:beb6c399490a 22 printf("Petters BT CDC-emulator\r\n");
petter 8:beb6c399490a 23 printf("Initializing\r\n");
petter 8:beb6c399490a 24 cdc.init();
petter 8:beb6c399490a 25 rn52.init();
petter 8:beb6c399490a 26 printf("Starting loop\r\n");
petter 8:beb6c399490a 27 while(1) {
petter 8:beb6c399490a 28 handle_pc_input();
petter 8:beb6c399490a 29 handle_cdc_input();
petter 8:beb6c399490a 30 handle_bt_input();
petter 8:beb6c399490a 31 }
petter 8:beb6c399490a 32 }
petter 8:beb6c399490a 33
petter 8:beb6c399490a 34
petter 5:8e468fef2754 35 void handle_pc_input() {
petter 5:8e468fef2754 36 //Debug connection to PC
petter 5:8e468fef2754 37 if(pc.readable()) {
petter 5:8e468fef2754 38 switch (pc.getc()) {
petter 5:8e468fef2754 39 case 'p':
petter 5:8e468fef2754 40 if(rn52.toggle_play()) {
petter 5:8e468fef2754 41 printf("play/pause\r\n");
petter 5:8e468fef2754 42 }
petter 5:8e468fef2754 43 break;
petter 5:8e468fef2754 44 case 'v':
petter 5:8e468fef2754 45 printf("volume up\r\n");
petter 5:8e468fef2754 46 rn52.maxvolume();
petter 5:8e468fef2754 47 break;
petter 5:8e468fef2754 48 case 'n':
petter 5:8e468fef2754 49 printf("next track\r\n");
petter 5:8e468fef2754 50 rn52.next_track();
petter 5:8e468fef2754 51 break;
petter 5:8e468fef2754 52 case 'q':
petter 5:8e468fef2754 53 printf("getting status\r\n");
petter 8:beb6c399490a 54 rn52.get_status(&res);
petter 7:2df2c6e8c0df 55 printf("%s\r\n", res.response);
petter 5:8e468fef2754 56 break;
petter 5:8e468fef2754 57 case 't':
petter 8:beb6c399490a 58 rn52.get_caller_id(&res);
petter 7:2df2c6e8c0df 59 printf("%s\r\n", res.response);
petter 5:8e468fef2754 60 break;
petter 5:8e468fef2754 61 }
petter 5:8e468fef2754 62 }
petter 5:8e468fef2754 63 }
petter 5:8e468fef2754 64
petter 5:8e468fef2754 65 void handle_cdc_input() {
petter 5:8e468fef2754 66 switch (cdc.get_cmd()) {
petter 5:8e468fef2754 67 case IBUS_DOORS_LOCKED:
petter 5:8e468fef2754 68 //Goto sleep
petter 5:8e468fef2754 69 break;
petter 5:8e468fef2754 70 case IBUS_DOORS_UNLOCKED:
petter 5:8e468fef2754 71 //wake up
petter 5:8e468fef2754 72 break;
petter 5:8e468fef2754 73 case IBUS_NEXT:
petter 5:8e468fef2754 74 rn52.toggle_play();
petter 5:8e468fef2754 75 break;
petter 5:8e468fef2754 76 case IBUS_CDC_ON:
petter 5:8e468fef2754 77 rn52.connect();
petter 5:8e468fef2754 78 break;
petter 5:8e468fef2754 79 case IBUS_CDC_OFF:
petter 5:8e468fef2754 80 rn52.disconnect();
petter 5:8e468fef2754 81 break;
petter 5:8e468fef2754 82 case IBUS_SKIP_FW:
petter 5:8e468fef2754 83 rn52.next_track();
petter 5:8e468fef2754 84 break;
petter 5:8e468fef2754 85 case IBUS_SKIP_BW:
petter 5:8e468fef2754 86 rn52.prev_track();
petter 5:8e468fef2754 87 break;
petter 5:8e468fef2754 88 case IBUS_SET:
petter 5:8e468fef2754 89 rn52.connect();
petter 5:8e468fef2754 90 break;
petter 5:8e468fef2754 91 case IBUS_CLEAR:
petter 5:8e468fef2754 92 break;
petter 5:8e468fef2754 93 }
petter 5:8e468fef2754 94 }
petter 5:8e468fef2754 95
petter 5:8e468fef2754 96 void handle_bt_input() {
petter 5:8e468fef2754 97 if(rn52.check_event(&res)) {
petter 5:8e468fef2754 98 switch (res.event) {
petter 5:8e468fef2754 99 case RN52_CALLER_ID_EVENT:
petter 9:9a4c81493a3d 100 //printf("Caller ID event\r\n");
petter 5:8e468fef2754 101 break;
petter 5:8e468fef2754 102 case RN52_TRACK_CHANGE_EVENT:
petter 5:8e468fef2754 103 cdc.reset_elapsed_time();
petter 8:beb6c399490a 104 /*
petter 6:c454f88524d6 105 printf("Track change event\r\n");
petter 7:2df2c6e8c0df 106 printf("title: %s\r\n", res.title);
petter 7:2df2c6e8c0df 107 printf("artist: %s\r\n", res.artist);
petter 7:2df2c6e8c0df 108 printf("album: %s\r\n", res.album);
petter 7:2df2c6e8c0df 109 printf("genre: %s\r\n", res.genre);
petter 6:c454f88524d6 110 printf("duration: %i\r\n", res.duration);
petter 6:c454f88524d6 111 printf("track_count: %i\r\n", res.track_count);
petter 6:c454f88524d6 112 printf("track_number: %i\r\n", res.track_number);
petter 8:beb6c399490a 113 */
petter 9:9a4c81493a3d 114 cdc.display(res.title, 2);
petter 8:beb6c399490a 115 cdc.set_track((char)res.track_number);
petter 5:8e468fef2754 116 break;
petter 8:beb6c399490a 117 case RN52_OTHER_EVENT: //no specific event occured, check connection status
petter 5:8e468fef2754 118 switch(res.connection) {
petter 6:c454f88524d6 119 case RN52_CONNECTABLE_DISCOVERABLE:
petter 9:9a4c81493a3d 120 //printf("Waiting for connection\r\n");
petter 9:9a4c81493a3d 121 cdc.display("BT REDO", 2);
petter 6:c454f88524d6 122 break;
petter 5:8e468fef2754 123 case RN52_CONNECTED:
petter 9:9a4c81493a3d 124 //printf("Connected\r\n");
petter 9:9a4c81493a3d 125 cdc.display("BT ANSLUTEN", 2);
petter 5:8e468fef2754 126 rn52.maxvolume();
petter 5:8e468fef2754 127 break;
petter 5:8e468fef2754 128 case RN52_AUDIO_STREAMING:
petter 9:9a4c81493a3d 129 //printf("Streaming\r\n");
petter 9:9a4c81493a3d 130 cdc.display(res.title, 2);
petter 5:8e468fef2754 131 cdc.start_elapsed_time();
petter 5:8e468fef2754 132 break;
petter 5:8e468fef2754 133 }
petter 5:8e468fef2754 134 if(res.connection != RN52_AUDIO_STREAMING) {
petter 5:8e468fef2754 135 cdc.stop_elapsed_time();
petter 5:8e468fef2754 136 }
petter 5:8e468fef2754 137 }
petter 5:8e468fef2754 138 }
petter 0:6cf6e566c0da 139 }