Petter Bellander / Mbed 2 deprecated Saab-BT

Dependencies:   mbed

Committer:
petter
Date:
Mon Jan 11 20:49:59 2016 +0000
Revision:
5:8e468fef2754
Parent:
4:3041a571b7a7
Child:
6:c454f88524d6
Restructured main; Moved RN52 set commands into separate functions

Who changed what in which revision?

UserRevisionLine numberNew contents of line
petter 0:6cf6e566c0da 1 #include "RN52.h"
petter 0:6cf6e566c0da 2 #include "mbed.h"
petter 0:6cf6e566c0da 3
petter 0:6cf6e566c0da 4 // RN52 action command definitions
petter 0:6cf6e566c0da 5 #define PLAYPAUSE "AP\r"
petter 0:6cf6e566c0da 6 #define NEXTTRACK "AT+\r"
petter 0:6cf6e566c0da 7 #define PREVTRACK "AT-\r"
petter 0:6cf6e566c0da 8 #define CONNECT "B\r"
petter 0:6cf6e566c0da 9 #define DISCONNECT "@,1\r"
petter 0:6cf6e566c0da 10 #define REBOOT "R,1\r"
petter 0:6cf6e566c0da 11 #define VOLUMEUP "AV+\r"
petter 0:6cf6e566c0da 12 #define MAXVOLUME "SS,0F\r"
petter 0:6cf6e566c0da 13 #define GETSTATUS "Q\r"
petter 0:6cf6e566c0da 14 #define ASSISTANT "P\r"
petter 0:6cf6e566c0da 15 #define CALLER_ID "T\r"
petter 0:6cf6e566c0da 16 #define TRACK_METADATA "AD\r"
petter 0:6cf6e566c0da 17
petter 0:6cf6e566c0da 18
petter 0:6cf6e566c0da 19 Serial serial(p13, p14); // tx, rx
petter 0:6cf6e566c0da 20 DigitalIn event_pin(p20);
petter 0:6cf6e566c0da 21
petter 0:6cf6e566c0da 22 void RN52::init(){
petter 0:6cf6e566c0da 23 serial.baud(115200);
petter 0:6cf6e566c0da 24 printf("Serial baudrate set\r\n");
petter 0:6cf6e566c0da 25 }
petter 0:6cf6e566c0da 26
petter 5:8e468fef2754 27 bool RN52::check_event(RN52_RESULT * result){
petter 0:6cf6e566c0da 28 static bool last = 0;
petter 4:3041a571b7a7 29 if((last == 1) && (event_pin == 0)) {
petter 5:8e468fef2754 30 get(RN52_GETSTATUS, result);
petter 5:8e468fef2754 31 switch (result->event) {
petter 4:3041a571b7a7 32 case RN52_CALLER_ID_EVENT:
petter 5:8e468fef2754 33 get(RN52_CALLER_ID, result);
petter 4:3041a571b7a7 34 break;
petter 4:3041a571b7a7 35 case RN52_TRACK_CHANGE_EVENT:
petter 5:8e468fef2754 36 get(RN52_TRACK_METADATA, result);
petter 4:3041a571b7a7 37 break;
petter 4:3041a571b7a7 38 }
petter 0:6cf6e566c0da 39 last = event_pin;
petter 4:3041a571b7a7 40 return 1;
petter 0:6cf6e566c0da 41 }
petter 0:6cf6e566c0da 42 last = event_pin;
petter 0:6cf6e566c0da 43 return 0;
petter 0:6cf6e566c0da 44 }
petter 0:6cf6e566c0da 45
petter 5:8e468fef2754 46 bool RN52::connect(){
petter 5:8e468fef2754 47 char response[40];
petter 5:8e468fef2754 48 serial.printf(CONNECT);
petter 5:8e468fef2754 49 return capture_response(response);
petter 5:8e468fef2754 50 }
petter 0:6cf6e566c0da 51
petter 5:8e468fef2754 52 bool RN52::disconnect(){
petter 5:8e468fef2754 53 char response[40];
petter 5:8e468fef2754 54 serial.printf(DISCONNECT);
petter 5:8e468fef2754 55 return capture_response(response);
petter 5:8e468fef2754 56 }
petter 5:8e468fef2754 57
petter 5:8e468fef2754 58 bool RN52::next_track(){
petter 0:6cf6e566c0da 59 char response[40];
petter 5:8e468fef2754 60 serial.printf(NEXTTRACK);
petter 5:8e468fef2754 61 return capture_response(response);
petter 5:8e468fef2754 62 }
petter 5:8e468fef2754 63
petter 5:8e468fef2754 64 bool RN52::prev_track(){
petter 5:8e468fef2754 65 char response[40];
petter 5:8e468fef2754 66 serial.printf(PREVTRACK);
petter 5:8e468fef2754 67 return capture_response(response);
petter 5:8e468fef2754 68 }
petter 5:8e468fef2754 69
petter 5:8e468fef2754 70 bool RN52::toggle_play(){
petter 5:8e468fef2754 71 char response[40];
petter 5:8e468fef2754 72 serial.printf(PLAYPAUSE);
petter 5:8e468fef2754 73 return capture_response(response);
petter 5:8e468fef2754 74 }
petter 5:8e468fef2754 75
petter 5:8e468fef2754 76 bool RN52::maxvolume(){
petter 5:8e468fef2754 77 char response[40];
petter 5:8e468fef2754 78 //serial.printf(MAXVOLUME);
petter 5:8e468fef2754 79 serial.printf(VOLUMEUP);
petter 5:8e468fef2754 80 serial.printf(VOLUMEUP);
petter 5:8e468fef2754 81 serial.printf(VOLUMEUP);
petter 5:8e468fef2754 82 serial.printf(VOLUMEUP);
petter 5:8e468fef2754 83 return capture_response(response);
petter 0:6cf6e566c0da 84 }
petter 0:6cf6e566c0da 85
petter 0:6cf6e566c0da 86 bool RN52::get(RN52_COMMAND cmd, RN52_RESULT * result){
petter 0:6cf6e566c0da 87 switch (cmd) {
petter 4:3041a571b7a7 88 case RN52_GETSTATUS: {
petter 0:6cf6e566c0da 89 serial.printf(GETSTATUS);
petter 0:6cf6e566c0da 90 capture_response(result->response);
petter 2:10c60edc8573 91 int response_value = strtoul(result->response, NULL, 16);
petter 2:10c60edc8573 92 result->media_connected = (response_value & (1 << 10)) >> 10; //byte 0, bit 2
petter 2:10c60edc8573 93 result->phone_connected = (response_value & (1 << 11)) >> 11; //byte 0, bit 3
petter 2:10c60edc8573 94 result->connection = (RN52_CONNECTION)(response_value & 0x0F); //byte 1, bits 0-3
petter 4:3041a571b7a7 95 switch (response_value & 0x3000) {
petter 4:3041a571b7a7 96 case 0x1000: //byte 0, bit 4
petter 4:3041a571b7a7 97 result->event = RN52_CALLER_ID_EVENT;
petter 4:3041a571b7a7 98 break;
petter 4:3041a571b7a7 99 case 0x2000: //byte 0, bit 5
petter 4:3041a571b7a7 100 result->event = RN52_TRACK_CHANGE_EVENT;
petter 4:3041a571b7a7 101 break;
petter 4:3041a571b7a7 102 default:
petter 4:3041a571b7a7 103 result->event = RN52_NO_EVENT;
petter 4:3041a571b7a7 104 break;
petter 0:6cf6e566c0da 105 }
petter 0:6cf6e566c0da 106 break;
petter 4:3041a571b7a7 107 } //added to create local scope of response_value
petter 0:6cf6e566c0da 108 case RN52_CALLER_ID:
petter 0:6cf6e566c0da 109 serial.printf(CALLER_ID);
petter 0:6cf6e566c0da 110 capture_response(result->response);
petter 0:6cf6e566c0da 111 //parse the response
petter 0:6cf6e566c0da 112 break;
petter 0:6cf6e566c0da 113 case RN52_TRACK_METADATA:
petter 0:6cf6e566c0da 114 serial.printf(TRACK_METADATA);
petter 0:6cf6e566c0da 115 capture_response(result->response);
petter 0:6cf6e566c0da 116 //parse the response
petter 4:3041a571b7a7 117 break;
petter 0:6cf6e566c0da 118 default:
petter 0:6cf6e566c0da 119 return 0;
petter 0:6cf6e566c0da 120 }
petter 0:6cf6e566c0da 121 return 1;
petter 0:6cf6e566c0da 122 }
petter 0:6cf6e566c0da 123
petter 0:6cf6e566c0da 124
petter 5:8e468fef2754 125 bool RN52::capture_response(char * str){
petter 0:6cf6e566c0da 126 char c = ' ';
petter 0:6cf6e566c0da 127 char n = 0;
petter 0:6cf6e566c0da 128 while(c != '\n') {
petter 0:6cf6e566c0da 129 if(serial.readable()) {
petter 0:6cf6e566c0da 130 c = serial.getc();
petter 0:6cf6e566c0da 131 str[n] = c;
petter 0:6cf6e566c0da 132 n++;
petter 0:6cf6e566c0da 133 }
petter 0:6cf6e566c0da 134 }
petter 0:6cf6e566c0da 135 str[n] = '\0';
petter 5:8e468fef2754 136 return (str[0] == 'A');
petter 0:6cf6e566c0da 137 }