Petter Bellander / Mbed 2 deprecated Saab-BT

Dependencies:   mbed

Committer:
petter
Date:
Wed Jan 13 22:11:50 2016 +0000
Revision:
6:c454f88524d6
Parent:
5:8e468fef2754
Child:
7:2df2c6e8c0df
Updated rn52 implementation to correspond to 1.16 firmware; Reverted 0x61 response on Ibus

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 5:8e468fef2754 16 void handle_pc_input() {
petter 5:8e468fef2754 17 //Debug connection to PC
petter 5:8e468fef2754 18 if(pc.readable()) {
petter 5:8e468fef2754 19 switch (pc.getc()) {
petter 5:8e468fef2754 20 case 'p':
petter 5:8e468fef2754 21 if(rn52.toggle_play()) {
petter 5:8e468fef2754 22 printf("play/pause\r\n");
petter 5:8e468fef2754 23 }
petter 5:8e468fef2754 24 break;
petter 5:8e468fef2754 25 case 'v':
petter 5:8e468fef2754 26 printf("volume up\r\n");
petter 5:8e468fef2754 27 rn52.maxvolume();
petter 5:8e468fef2754 28 break;
petter 5:8e468fef2754 29 case 'n':
petter 5:8e468fef2754 30 printf("next track\r\n");
petter 5:8e468fef2754 31 rn52.next_track();
petter 5:8e468fef2754 32 break;
petter 5:8e468fef2754 33 case 'q':
petter 5:8e468fef2754 34 printf("getting status\r\n");
petter 5:8e468fef2754 35 rn52.get(RN52_GETSTATUS, &res);
petter 5:8e468fef2754 36 printf("%s", res.response);
petter 5:8e468fef2754 37 break;
petter 5:8e468fef2754 38 case 't':
petter 5:8e468fef2754 39 rn52.get(RN52_CALLER_ID, &res);
petter 5:8e468fef2754 40 printf("%s", res.response);
petter 5:8e468fef2754 41 break;
petter 5:8e468fef2754 42 }
petter 5:8e468fef2754 43 }
petter 5:8e468fef2754 44 }
petter 5:8e468fef2754 45
petter 5:8e468fef2754 46 void handle_cdc_input() {
petter 5:8e468fef2754 47 switch (cdc.get_cmd()) {
petter 5:8e468fef2754 48 case IBUS_OTHER_MESSAGE:
petter 5:8e468fef2754 49 break;
petter 5:8e468fef2754 50 case IBUS_DOORS_LOCKED:
petter 5:8e468fef2754 51 //Goto sleep
petter 5:8e468fef2754 52 break;
petter 5:8e468fef2754 53 case IBUS_DOORS_UNLOCKED:
petter 5:8e468fef2754 54 //wake up
petter 5:8e468fef2754 55 break;
petter 5:8e468fef2754 56 case IBUS_NEXT:
petter 5:8e468fef2754 57 rn52.toggle_play();
petter 5:8e468fef2754 58 break;
petter 5:8e468fef2754 59 case IBUS_CDC_ON:
petter 5:8e468fef2754 60 rn52.connect();
petter 5:8e468fef2754 61 break;
petter 5:8e468fef2754 62 case IBUS_CDC_OFF:
petter 5:8e468fef2754 63 rn52.disconnect();
petter 5:8e468fef2754 64 break;
petter 5:8e468fef2754 65 case IBUS_VOLUME_UP:
petter 5:8e468fef2754 66 break;
petter 5:8e468fef2754 67 case IBUS_VOLUME_DOWN:
petter 5:8e468fef2754 68 break;
petter 5:8e468fef2754 69 case IBUS_SKIP_FW:
petter 5:8e468fef2754 70 rn52.next_track();
petter 5:8e468fef2754 71 break;
petter 5:8e468fef2754 72 case IBUS_SKIP_BW:
petter 5:8e468fef2754 73 rn52.prev_track();
petter 5:8e468fef2754 74 break;
petter 5:8e468fef2754 75 case IBUS_SET:
petter 5:8e468fef2754 76 rn52.connect();
petter 5:8e468fef2754 77 break;
petter 5:8e468fef2754 78 case IBUS_CLEAR:
petter 5:8e468fef2754 79 break;
petter 5:8e468fef2754 80 }
petter 5:8e468fef2754 81 }
petter 5:8e468fef2754 82
petter 5:8e468fef2754 83 void handle_bt_input() {
petter 5:8e468fef2754 84 if(rn52.check_event(&res)) {
petter 5:8e468fef2754 85 switch (res.event) {
petter 5:8e468fef2754 86 case RN52_CALLER_ID_EVENT:
petter 6:c454f88524d6 87 printf("Caller ID event\r\n");
petter 5:8e468fef2754 88 break;
petter 5:8e468fef2754 89 case RN52_TRACK_CHANGE_EVENT:
petter 5:8e468fef2754 90 cdc.reset_elapsed_time();
petter 6:c454f88524d6 91 printf("Track change event\r\n");
petter 6:c454f88524d6 92 printf("title: %s", res.title);
petter 6:c454f88524d6 93 printf("artist: %s", res.artist);
petter 6:c454f88524d6 94 printf("album: %s", res.album);
petter 6:c454f88524d6 95 printf("genre: %s", res.genre);
petter 6:c454f88524d6 96 printf("duration: %i\r\n", res.duration);
petter 6:c454f88524d6 97 printf("track_count: %i\r\n", res.track_count);
petter 6:c454f88524d6 98 printf("track_number: %i\r\n", res.track_number);
petter 6:c454f88524d6 99 //cdc.display(res.title);
petter 6:c454f88524d6 100 //cdc.set_track((char)res.track_number);
petter 5:8e468fef2754 101 break;
petter 5:8e468fef2754 102 case RN52_NO_EVENT: //no specific event occured, check connection status
petter 5:8e468fef2754 103 switch(res.connection) {
petter 6:c454f88524d6 104 case RN52_CONNECTABLE_DISCOVERABLE:
petter 6:c454f88524d6 105 printf("Waiting for connection\r\n");
petter 6:c454f88524d6 106 cdc.display("BT REDO");
petter 6:c454f88524d6 107 break;
petter 5:8e468fef2754 108 case RN52_CONNECTED:
petter 6:c454f88524d6 109 printf("Connected\r\n");
petter 5:8e468fef2754 110 cdc.display("BT ANSLUTEN");
petter 5:8e468fef2754 111 rn52.maxvolume();
petter 5:8e468fef2754 112 break;
petter 5:8e468fef2754 113 case RN52_AUDIO_STREAMING:
petter 6:c454f88524d6 114 printf("Streaming\r\n");
petter 5:8e468fef2754 115 cdc.display("BT SPELAR");
petter 5:8e468fef2754 116 cdc.start_elapsed_time();
petter 5:8e468fef2754 117 break;
petter 5:8e468fef2754 118 }
petter 5:8e468fef2754 119 if(res.connection != RN52_AUDIO_STREAMING) {
petter 5:8e468fef2754 120 cdc.stop_elapsed_time();
petter 5:8e468fef2754 121 }
petter 5:8e468fef2754 122 }
petter 5:8e468fef2754 123 }
petter 5:8e468fef2754 124 }
petter 5:8e468fef2754 125
petter 0:6cf6e566c0da 126 int main() {
petter 0:6cf6e566c0da 127 printf("Petters BT CDC-emulator\r\n");
petter 0:6cf6e566c0da 128 printf("Initializing\r\n");
petter 0:6cf6e566c0da 129 cdc.init();
petter 0:6cf6e566c0da 130 rn52.init();
petter 0:6cf6e566c0da 131 printf("Starting loop\r\n");
petter 0:6cf6e566c0da 132 while(1) {
petter 5:8e468fef2754 133 handle_pc_input();
petter 5:8e468fef2754 134 handle_cdc_input();
petter 5:8e468fef2754 135 handle_bt_input();
petter 0:6cf6e566c0da 136 }
petter 0:6cf6e566c0da 137 }