Petter Bellander / Mbed 2 deprecated Saab-BT

Dependencies:   mbed

Committer:
petter
Date:
Fri Jan 15 20:59:51 2016 +0000
Revision:
8:beb6c399490a
Parent:
7:2df2c6e8c0df
Child:
9:9a4c81493a3d
Minor restructuring

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_OTHER_MESSAGE:
petter 5:8e468fef2754 68 break;
petter 5:8e468fef2754 69 case IBUS_DOORS_LOCKED:
petter 5:8e468fef2754 70 //Goto sleep
petter 5:8e468fef2754 71 break;
petter 5:8e468fef2754 72 case IBUS_DOORS_UNLOCKED:
petter 5:8e468fef2754 73 //wake up
petter 5:8e468fef2754 74 break;
petter 5:8e468fef2754 75 case IBUS_NEXT:
petter 5:8e468fef2754 76 rn52.toggle_play();
petter 5:8e468fef2754 77 break;
petter 5:8e468fef2754 78 case IBUS_CDC_ON:
petter 5:8e468fef2754 79 rn52.connect();
petter 5:8e468fef2754 80 break;
petter 5:8e468fef2754 81 case IBUS_CDC_OFF:
petter 5:8e468fef2754 82 rn52.disconnect();
petter 5:8e468fef2754 83 break;
petter 5:8e468fef2754 84 case IBUS_VOLUME_UP:
petter 5:8e468fef2754 85 break;
petter 5:8e468fef2754 86 case IBUS_VOLUME_DOWN:
petter 5:8e468fef2754 87 break;
petter 5:8e468fef2754 88 case IBUS_SKIP_FW:
petter 5:8e468fef2754 89 rn52.next_track();
petter 5:8e468fef2754 90 break;
petter 5:8e468fef2754 91 case IBUS_SKIP_BW:
petter 5:8e468fef2754 92 rn52.prev_track();
petter 5:8e468fef2754 93 break;
petter 5:8e468fef2754 94 case IBUS_SET:
petter 5:8e468fef2754 95 rn52.connect();
petter 5:8e468fef2754 96 break;
petter 5:8e468fef2754 97 case IBUS_CLEAR:
petter 5:8e468fef2754 98 break;
petter 5:8e468fef2754 99 }
petter 5:8e468fef2754 100 }
petter 5:8e468fef2754 101
petter 5:8e468fef2754 102 void handle_bt_input() {
petter 5:8e468fef2754 103 if(rn52.check_event(&res)) {
petter 5:8e468fef2754 104 switch (res.event) {
petter 5:8e468fef2754 105 case RN52_CALLER_ID_EVENT:
petter 6:c454f88524d6 106 printf("Caller ID event\r\n");
petter 5:8e468fef2754 107 break;
petter 5:8e468fef2754 108 case RN52_TRACK_CHANGE_EVENT:
petter 5:8e468fef2754 109 cdc.reset_elapsed_time();
petter 8:beb6c399490a 110 /*
petter 6:c454f88524d6 111 printf("Track change event\r\n");
petter 7:2df2c6e8c0df 112 printf("title: %s\r\n", res.title);
petter 7:2df2c6e8c0df 113 printf("artist: %s\r\n", res.artist);
petter 7:2df2c6e8c0df 114 printf("album: %s\r\n", res.album);
petter 7:2df2c6e8c0df 115 printf("genre: %s\r\n", res.genre);
petter 6:c454f88524d6 116 printf("duration: %i\r\n", res.duration);
petter 6:c454f88524d6 117 printf("track_count: %i\r\n", res.track_count);
petter 6:c454f88524d6 118 printf("track_number: %i\r\n", res.track_number);
petter 8:beb6c399490a 119 */
petter 8:beb6c399490a 120 cdc.display(res.title);
petter 8:beb6c399490a 121 cdc.set_track((char)res.track_number);
petter 5:8e468fef2754 122 break;
petter 8:beb6c399490a 123 case RN52_OTHER_EVENT: //no specific event occured, check connection status
petter 5:8e468fef2754 124 switch(res.connection) {
petter 6:c454f88524d6 125 case RN52_CONNECTABLE_DISCOVERABLE:
petter 6:c454f88524d6 126 printf("Waiting for connection\r\n");
petter 6:c454f88524d6 127 cdc.display("BT REDO");
petter 6:c454f88524d6 128 break;
petter 5:8e468fef2754 129 case RN52_CONNECTED:
petter 6:c454f88524d6 130 printf("Connected\r\n");
petter 5:8e468fef2754 131 cdc.display("BT ANSLUTEN");
petter 5:8e468fef2754 132 rn52.maxvolume();
petter 5:8e468fef2754 133 break;
petter 5:8e468fef2754 134 case RN52_AUDIO_STREAMING:
petter 6:c454f88524d6 135 printf("Streaming\r\n");
petter 5:8e468fef2754 136 cdc.display("BT SPELAR");
petter 5:8e468fef2754 137 cdc.start_elapsed_time();
petter 5:8e468fef2754 138 break;
petter 5:8e468fef2754 139 }
petter 5:8e468fef2754 140 if(res.connection != RN52_AUDIO_STREAMING) {
petter 5:8e468fef2754 141 cdc.stop_elapsed_time();
petter 5:8e468fef2754 142 }
petter 5:8e468fef2754 143 }
petter 5:8e468fef2754 144 }
petter 0:6cf6e566c0da 145 }