Petter Bellander / Mbed 2 deprecated Saab-BT

Dependencies:   mbed

Committer:
petter
Date:
Fri Jan 29 20:27:37 2016 +0000
Revision:
12:4194c47ca60b
Parent:
11:74844f6ca8cf
Child:
13:968af0520530
Fixed error with 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 11:74844f6ca8cf 6 // Due to power saving functions special firmware required http://mbed.org/users/simon/notebook/interface-powerdown/
petter 11:74844f6ca8cf 7
petter 0:6cf6e566c0da 8 #include "mbed.h"
petter 11:74844f6ca8cf 9 #include "PowerControl/PowerControl.h"
petter 11:74844f6ca8cf 10 #include "PowerControl/EthernetPowerControl.h"
petter 11:74844f6ca8cf 11
petter 0:6cf6e566c0da 12 #include "CDC.h"
petter 0:6cf6e566c0da 13 #include "RN52.h"
petter 0:6cf6e566c0da 14
petter 11:74844f6ca8cf 15
petter 0:6cf6e566c0da 16 CDC cdc;
petter 0:6cf6e566c0da 17 RN52 rn52;
petter 0:6cf6e566c0da 18 RN52_RESULT res;
petter 11:74844f6ca8cf 19 Ticker wakeup;
petter 0:6cf6e566c0da 20
petter 0:6cf6e566c0da 21 Serial pc(USBTX, USBRX); // tx, rx
petter 11:74844f6ca8cf 22 bool active = 1;
petter 0:6cf6e566c0da 23
petter 8:beb6c399490a 24 void handle_pc_input();
petter 8:beb6c399490a 25 void handle_cdc_input();
petter 8:beb6c399490a 26 void handle_bt_input();
petter 11:74844f6ca8cf 27 void check_for_wakeup();
petter 8:beb6c399490a 28
petter 8:beb6c399490a 29 int main() {
petter 8:beb6c399490a 30 printf("Petters BT CDC-emulator\r\n");
petter 8:beb6c399490a 31 printf("Initializing\r\n");
petter 11:74844f6ca8cf 32 printf("Disabling unused peripherals to decrease power consumption\r\n");
petter 11:74844f6ca8cf 33 PHY_PowerDown(); // Power down Ethernet interface - saves around 175mW
petter 11:74844f6ca8cf 34 semihost_powerdown(); // If you don't need the PC host USB interface power down magic USB interface chip - saves around 150mW | Needs new firmware (URL below) and USB cable not connected http://mbed.org/users/simon/notebook/interface-powerdown/
petter 8:beb6c399490a 35 cdc.init();
petter 8:beb6c399490a 36 rn52.init();
petter 11:74844f6ca8cf 37 printf("Adding wakeup routine\r\n");
petter 11:74844f6ca8cf 38 wakeup.attach(&check_for_wakeup, 1);
petter 8:beb6c399490a 39 printf("Starting loop\r\n");
petter 8:beb6c399490a 40 while(1) {
petter 11:74844f6ca8cf 41 if(active) {
petter 11:74844f6ca8cf 42 handle_pc_input();
petter 11:74844f6ca8cf 43 handle_cdc_input();
petter 11:74844f6ca8cf 44 handle_bt_input();
petter 11:74844f6ca8cf 45 }
petter 11:74844f6ca8cf 46 else {
petter 11:74844f6ca8cf 47 sleep();
petter 11:74844f6ca8cf 48 }
petter 8:beb6c399490a 49 }
petter 8:beb6c399490a 50 }
petter 8:beb6c399490a 51
petter 11:74844f6ca8cf 52 void check_for_wakeup(){
petter 11:74844f6ca8cf 53 if(!active) {
petter 11:74844f6ca8cf 54 IBUS_COMMAND cmd = IBUS_OTHER_MESSAGE;
petter 11:74844f6ca8cf 55 while(cmd != IBUS_NO_MESSAGE) {
petter 11:74844f6ca8cf 56 cmd = cdc.get_cmd();
petter 11:74844f6ca8cf 57 if(cmd == IBUS_HEAD_UNIT_ON) {
petter 11:74844f6ca8cf 58 active = 1;
petter 11:74844f6ca8cf 59 }
petter 11:74844f6ca8cf 60 }
petter 11:74844f6ca8cf 61 }
petter 11:74844f6ca8cf 62 }
petter 8:beb6c399490a 63
petter 5:8e468fef2754 64 void handle_pc_input() {
petter 5:8e468fef2754 65 //Debug connection to PC
petter 5:8e468fef2754 66 if(pc.readable()) {
petter 5:8e468fef2754 67 switch (pc.getc()) {
petter 5:8e468fef2754 68 case 'p':
petter 5:8e468fef2754 69 if(rn52.toggle_play()) {
petter 5:8e468fef2754 70 printf("play/pause\r\n");
petter 5:8e468fef2754 71 }
petter 5:8e468fef2754 72 break;
petter 5:8e468fef2754 73 case 'v':
petter 5:8e468fef2754 74 printf("volume up\r\n");
petter 5:8e468fef2754 75 rn52.maxvolume();
petter 5:8e468fef2754 76 break;
petter 5:8e468fef2754 77 case 'n':
petter 5:8e468fef2754 78 printf("next track\r\n");
petter 5:8e468fef2754 79 rn52.next_track();
petter 5:8e468fef2754 80 break;
petter 5:8e468fef2754 81 case 'q':
petter 5:8e468fef2754 82 printf("getting status\r\n");
petter 8:beb6c399490a 83 rn52.get_status(&res);
petter 7:2df2c6e8c0df 84 printf("%s\r\n", res.response);
petter 5:8e468fef2754 85 break;
petter 5:8e468fef2754 86 case 't':
petter 8:beb6c399490a 87 rn52.get_caller_id(&res);
petter 7:2df2c6e8c0df 88 printf("%s\r\n", res.response);
petter 5:8e468fef2754 89 break;
petter 11:74844f6ca8cf 90 case 'a':
petter 11:74844f6ca8cf 91 printf("deactivating\r\n");
petter 11:74844f6ca8cf 92 active = 0;
petter 11:74844f6ca8cf 93 break;
petter 5:8e468fef2754 94 }
petter 5:8e468fef2754 95 }
petter 5:8e468fef2754 96 }
petter 5:8e468fef2754 97
petter 5:8e468fef2754 98 void handle_cdc_input() {
petter 5:8e468fef2754 99 switch (cdc.get_cmd()) {
petter 11:74844f6ca8cf 100 case IBUS_HEAD_UNIT_OFF:
petter 11:74844f6ca8cf 101 cdc.display("Shutdown");
petter 11:74844f6ca8cf 102 // active = 0;
petter 5:8e468fef2754 103 break;
petter 5:8e468fef2754 104 case IBUS_NEXT:
petter 5:8e468fef2754 105 rn52.toggle_play();
petter 5:8e468fef2754 106 break;
petter 5:8e468fef2754 107 case IBUS_CDC_ON:
petter 5:8e468fef2754 108 rn52.connect();
petter 5:8e468fef2754 109 break;
petter 5:8e468fef2754 110 case IBUS_CDC_OFF:
petter 5:8e468fef2754 111 rn52.disconnect();
petter 5:8e468fef2754 112 break;
petter 5:8e468fef2754 113 case IBUS_SKIP_FW:
petter 5:8e468fef2754 114 rn52.next_track();
petter 5:8e468fef2754 115 break;
petter 5:8e468fef2754 116 case IBUS_SKIP_BW:
petter 5:8e468fef2754 117 rn52.prev_track();
petter 5:8e468fef2754 118 break;
petter 5:8e468fef2754 119 case IBUS_SET:
petter 5:8e468fef2754 120 break;
petter 5:8e468fef2754 121 case IBUS_CLEAR:
petter 5:8e468fef2754 122 break;
petter 5:8e468fef2754 123 }
petter 5:8e468fef2754 124 }
petter 5:8e468fef2754 125
petter 5:8e468fef2754 126 void handle_bt_input() {
petter 5:8e468fef2754 127 if(rn52.check_event(&res)) {
petter 5:8e468fef2754 128 switch (res.event) {
petter 5:8e468fef2754 129 case RN52_CALLER_ID_EVENT:
petter 9:9a4c81493a3d 130 //printf("Caller ID event\r\n");
petter 5:8e468fef2754 131 break;
petter 5:8e468fef2754 132 case RN52_TRACK_CHANGE_EVENT:
petter 5:8e468fef2754 133 cdc.reset_elapsed_time();
petter 6:c454f88524d6 134 printf("Track change event\r\n");
petter 7:2df2c6e8c0df 135 printf("title: %s\r\n", res.title);
petter 7:2df2c6e8c0df 136 printf("artist: %s\r\n", res.artist);
petter 7:2df2c6e8c0df 137 printf("album: %s\r\n", res.album);
petter 7:2df2c6e8c0df 138 printf("genre: %s\r\n", res.genre);
petter 6:c454f88524d6 139 printf("duration: %i\r\n", res.duration);
petter 6:c454f88524d6 140 printf("track_count: %i\r\n", res.track_count);
petter 6:c454f88524d6 141 printf("track_number: %i\r\n", res.track_number);
petter 12:4194c47ca60b 142 //cdc.display(res.title);
petter 12:4194c47ca60b 143 cdc.display("BT SPELAR");
petter 8:beb6c399490a 144 cdc.set_track((char)res.track_number);
petter 5:8e468fef2754 145 break;
petter 8:beb6c399490a 146 case RN52_OTHER_EVENT: //no specific event occured, check connection status
petter 5:8e468fef2754 147 switch(res.connection) {
petter 6:c454f88524d6 148 case RN52_CONNECTABLE_DISCOVERABLE:
petter 9:9a4c81493a3d 149 //printf("Waiting for connection\r\n");
petter 11:74844f6ca8cf 150 cdc.display("BT REDO");
petter 6:c454f88524d6 151 break;
petter 5:8e468fef2754 152 case RN52_CONNECTED:
petter 9:9a4c81493a3d 153 //printf("Connected\r\n");
petter 11:74844f6ca8cf 154 cdc.display("BT ANSLUTEN");
petter 5:8e468fef2754 155 rn52.maxvolume();
petter 5:8e468fef2754 156 break;
petter 5:8e468fef2754 157 case RN52_AUDIO_STREAMING:
petter 9:9a4c81493a3d 158 //printf("Streaming\r\n");
petter 11:74844f6ca8cf 159 cdc.display(res.title);
petter 5:8e468fef2754 160 cdc.start_elapsed_time();
petter 5:8e468fef2754 161 break;
petter 5:8e468fef2754 162 }
petter 5:8e468fef2754 163 if(res.connection != RN52_AUDIO_STREAMING) {
petter 5:8e468fef2754 164 cdc.stop_elapsed_time();
petter 5:8e468fef2754 165 }
petter 5:8e468fef2754 166 }
petter 5:8e468fef2754 167 }
petter 0:6cf6e566c0da 168 }