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@4:3041a571b7a7, 2016-01-05 (annotated)
- Committer:
- petter
- Date:
- Tue Jan 05 22:10:16 2016 +0000
- Revision:
- 4:3041a571b7a7
- Parent:
- 2:10c60edc8573
- Child:
- 5:8e468fef2754
Moved additional RN52 event data queries from main into RN52 class.
Who changed what in which revision?
User | Revision | Line number | New 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 | 4:3041a571b7a7 | 27 | bool RN52::check_event(RN52_RESULT * rn52_result){ |
petter | 0:6cf6e566c0da | 28 | static bool last = 0; |
petter | 4:3041a571b7a7 | 29 | if((last == 1) && (event_pin == 0)) { |
petter | 4:3041a571b7a7 | 30 | get(RN52_GETSTATUS, rn52_result); |
petter | 4:3041a571b7a7 | 31 | switch (rn52_result->event) { |
petter | 4:3041a571b7a7 | 32 | case RN52_CALLER_ID_EVENT: |
petter | 4:3041a571b7a7 | 33 | get(RN52_CALLER_ID, rn52_result); |
petter | 4:3041a571b7a7 | 34 | break; |
petter | 4:3041a571b7a7 | 35 | case RN52_TRACK_CHANGE_EVENT: |
petter | 4:3041a571b7a7 | 36 | get(RN52_TRACK_METADATA, rn52_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 | 0:6cf6e566c0da | 46 | |
petter | 0:6cf6e566c0da | 47 | bool RN52::set(RN52_COMMAND cmd){ |
petter | 0:6cf6e566c0da | 48 | char response[40]; |
petter | 0:6cf6e566c0da | 49 | switch (cmd) { |
petter | 0:6cf6e566c0da | 50 | case RN52_PLAYPAUSE: |
petter | 0:6cf6e566c0da | 51 | serial.printf(PLAYPAUSE); |
petter | 0:6cf6e566c0da | 52 | break; |
petter | 0:6cf6e566c0da | 53 | case RN52_NEXTTRACK: |
petter | 0:6cf6e566c0da | 54 | serial.printf(NEXTTRACK); |
petter | 0:6cf6e566c0da | 55 | break; |
petter | 0:6cf6e566c0da | 56 | case RN52_PREVTRACK: |
petter | 0:6cf6e566c0da | 57 | serial.printf(PREVTRACK); |
petter | 0:6cf6e566c0da | 58 | break; |
petter | 0:6cf6e566c0da | 59 | case RN52_CONNECT: |
petter | 0:6cf6e566c0da | 60 | serial.printf(CONNECT); |
petter | 0:6cf6e566c0da | 61 | break; |
petter | 0:6cf6e566c0da | 62 | case RN52_DISCONNECT: |
petter | 0:6cf6e566c0da | 63 | serial.printf(DISCONNECT); |
petter | 0:6cf6e566c0da | 64 | break; |
petter | 0:6cf6e566c0da | 65 | case RN52_REBOOT: |
petter | 0:6cf6e566c0da | 66 | serial.printf(REBOOT); |
petter | 0:6cf6e566c0da | 67 | break; |
petter | 0:6cf6e566c0da | 68 | case RN52_VOLUMEUP: |
petter | 0:6cf6e566c0da | 69 | serial.printf(VOLUMEUP); |
petter | 0:6cf6e566c0da | 70 | break; |
petter | 0:6cf6e566c0da | 71 | case RN52_MAXVOLUME: |
petter | 0:6cf6e566c0da | 72 | serial.printf(MAXVOLUME); |
petter | 0:6cf6e566c0da | 73 | break; |
petter | 0:6cf6e566c0da | 74 | case RN52_ASSISTANT: |
petter | 0:6cf6e566c0da | 75 | serial.printf(ASSISTANT); |
petter | 0:6cf6e566c0da | 76 | break; |
petter | 0:6cf6e566c0da | 77 | default: |
petter | 0:6cf6e566c0da | 78 | return false; |
petter | 0:6cf6e566c0da | 79 | } |
petter | 0:6cf6e566c0da | 80 | capture_response(response); |
petter | 0:6cf6e566c0da | 81 | return (response[0] == 'A'); |
petter | 0:6cf6e566c0da | 82 | } |
petter | 0:6cf6e566c0da | 83 | |
petter | 0:6cf6e566c0da | 84 | bool RN52::get(RN52_COMMAND cmd, RN52_RESULT * result){ |
petter | 0:6cf6e566c0da | 85 | switch (cmd) { |
petter | 4:3041a571b7a7 | 86 | case RN52_GETSTATUS: { |
petter | 0:6cf6e566c0da | 87 | serial.printf(GETSTATUS); |
petter | 0:6cf6e566c0da | 88 | capture_response(result->response); |
petter | 2:10c60edc8573 | 89 | int response_value = strtoul(result->response, NULL, 16); |
petter | 2:10c60edc8573 | 90 | result->media_connected = (response_value & (1 << 10)) >> 10; //byte 0, bit 2 |
petter | 2:10c60edc8573 | 91 | result->phone_connected = (response_value & (1 << 11)) >> 11; //byte 0, bit 3 |
petter | 2:10c60edc8573 | 92 | result->connection = (RN52_CONNECTION)(response_value & 0x0F); //byte 1, bits 0-3 |
petter | 4:3041a571b7a7 | 93 | switch (response_value & 0x3000) { |
petter | 4:3041a571b7a7 | 94 | case 0x1000: //byte 0, bit 4 |
petter | 4:3041a571b7a7 | 95 | result->event = RN52_CALLER_ID_EVENT; |
petter | 4:3041a571b7a7 | 96 | break; |
petter | 4:3041a571b7a7 | 97 | case 0x2000: //byte 0, bit 5 |
petter | 4:3041a571b7a7 | 98 | result->event = RN52_TRACK_CHANGE_EVENT; |
petter | 4:3041a571b7a7 | 99 | break; |
petter | 4:3041a571b7a7 | 100 | default: |
petter | 4:3041a571b7a7 | 101 | result->event = RN52_NO_EVENT; |
petter | 4:3041a571b7a7 | 102 | break; |
petter | 0:6cf6e566c0da | 103 | } |
petter | 0:6cf6e566c0da | 104 | break; |
petter | 4:3041a571b7a7 | 105 | } //added to create local scope of response_value |
petter | 0:6cf6e566c0da | 106 | case RN52_CALLER_ID: |
petter | 0:6cf6e566c0da | 107 | serial.printf(CALLER_ID); |
petter | 0:6cf6e566c0da | 108 | capture_response(result->response); |
petter | 0:6cf6e566c0da | 109 | //parse the response |
petter | 0:6cf6e566c0da | 110 | break; |
petter | 0:6cf6e566c0da | 111 | case RN52_TRACK_METADATA: |
petter | 0:6cf6e566c0da | 112 | serial.printf(TRACK_METADATA); |
petter | 0:6cf6e566c0da | 113 | capture_response(result->response); |
petter | 0:6cf6e566c0da | 114 | //parse the response |
petter | 4:3041a571b7a7 | 115 | break; |
petter | 0:6cf6e566c0da | 116 | default: |
petter | 0:6cf6e566c0da | 117 | return 0; |
petter | 0:6cf6e566c0da | 118 | } |
petter | 0:6cf6e566c0da | 119 | return 1; |
petter | 0:6cf6e566c0da | 120 | } |
petter | 0:6cf6e566c0da | 121 | |
petter | 0:6cf6e566c0da | 122 | |
petter | 0:6cf6e566c0da | 123 | void RN52::capture_response(char * str){ |
petter | 0:6cf6e566c0da | 124 | char c = ' '; |
petter | 0:6cf6e566c0da | 125 | char n = 0; |
petter | 0:6cf6e566c0da | 126 | while(c != '\n') { |
petter | 0:6cf6e566c0da | 127 | if(serial.readable()) { |
petter | 0:6cf6e566c0da | 128 | c = serial.getc(); |
petter | 0:6cf6e566c0da | 129 | str[n] = c; |
petter | 0:6cf6e566c0da | 130 | n++; |
petter | 0:6cf6e566c0da | 131 | } |
petter | 0:6cf6e566c0da | 132 | } |
petter | 0:6cf6e566c0da | 133 | str[n] = '\0'; |
petter | 0:6cf6e566c0da | 134 | } |