Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
RN52.cpp
- Committer:
- petter
- Date:
- 2016-01-05
- Revision:
- 4:3041a571b7a7
- Parent:
- 2:10c60edc8573
- Child:
- 5:8e468fef2754
File content as of revision 4:3041a571b7a7:
#include "RN52.h" #include "mbed.h" // RN52 action command definitions #define PLAYPAUSE "AP\r" #define NEXTTRACK "AT+\r" #define PREVTRACK "AT-\r" #define CONNECT "B\r" #define DISCONNECT "@,1\r" #define REBOOT "R,1\r" #define VOLUMEUP "AV+\r" #define MAXVOLUME "SS,0F\r" #define GETSTATUS "Q\r" #define ASSISTANT "P\r" #define CALLER_ID "T\r" #define TRACK_METADATA "AD\r" Serial serial(p13, p14); // tx, rx DigitalIn event_pin(p20); void RN52::init(){ serial.baud(115200); printf("Serial baudrate set\r\n"); } bool RN52::check_event(RN52_RESULT * rn52_result){ static bool last = 0; if((last == 1) && (event_pin == 0)) { get(RN52_GETSTATUS, rn52_result); switch (rn52_result->event) { case RN52_CALLER_ID_EVENT: get(RN52_CALLER_ID, rn52_result); break; case RN52_TRACK_CHANGE_EVENT: get(RN52_TRACK_METADATA, rn52_result); break; } last = event_pin; return 1; } last = event_pin; return 0; } bool RN52::set(RN52_COMMAND cmd){ char response[40]; switch (cmd) { case RN52_PLAYPAUSE: serial.printf(PLAYPAUSE); break; case RN52_NEXTTRACK: serial.printf(NEXTTRACK); break; case RN52_PREVTRACK: serial.printf(PREVTRACK); break; case RN52_CONNECT: serial.printf(CONNECT); break; case RN52_DISCONNECT: serial.printf(DISCONNECT); break; case RN52_REBOOT: serial.printf(REBOOT); break; case RN52_VOLUMEUP: serial.printf(VOLUMEUP); break; case RN52_MAXVOLUME: serial.printf(MAXVOLUME); break; case RN52_ASSISTANT: serial.printf(ASSISTANT); break; default: return false; } capture_response(response); return (response[0] == 'A'); } bool RN52::get(RN52_COMMAND cmd, RN52_RESULT * result){ switch (cmd) { case RN52_GETSTATUS: { serial.printf(GETSTATUS); capture_response(result->response); int response_value = strtoul(result->response, NULL, 16); result->media_connected = (response_value & (1 << 10)) >> 10; //byte 0, bit 2 result->phone_connected = (response_value & (1 << 11)) >> 11; //byte 0, bit 3 result->connection = (RN52_CONNECTION)(response_value & 0x0F); //byte 1, bits 0-3 switch (response_value & 0x3000) { case 0x1000: //byte 0, bit 4 result->event = RN52_CALLER_ID_EVENT; break; case 0x2000: //byte 0, bit 5 result->event = RN52_TRACK_CHANGE_EVENT; break; default: result->event = RN52_NO_EVENT; break; } break; } //added to create local scope of response_value case RN52_CALLER_ID: serial.printf(CALLER_ID); capture_response(result->response); //parse the response break; case RN52_TRACK_METADATA: serial.printf(TRACK_METADATA); capture_response(result->response); //parse the response break; default: return 0; } return 1; } void RN52::capture_response(char * str){ char c = ' '; char n = 0; while(c != '\n') { if(serial.readable()) { c = serial.getc(); str[n] = c; n++; } } str[n] = '\0'; }