Vasanth Kumar / Mbed 2 deprecated RapidMP3_check

Dependencies:   RAPIDMP3 mbed

Fork of RapidMP3_check by Vasanth Kumar

Committer:
vasanth
Date:
Fri Nov 21 10:44:09 2014 +0000
Revision:
1:dbb63bd6c828
Parent:
0:a540b792fbf0
RAPID_MP3_V1 demonstration

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vasanth 0:a540b792fbf0 1 /****************************************************************************
vasanth 0:a540b792fbf0 2 * file RAPIDMP3.cpp
vasanth 0:a540b792fbf0 3 * author Vasanth Kumar.D (www.chipthinglabs.com)
vasanth 0:a540b792fbf0 4 * date July 2014
vasanth 0:a540b792fbf0 5 * brief Rapid MP3 module driver code
vasanth 0:a540b792fbf0 6 *
vasanth 0:a540b792fbf0 7 * Project:
vasanth 0:a540b792fbf0 8 * Rapid MP3 v1.0 driver code
vasanth 0:a540b792fbf0 9 * The driver code is compatible with any mbed enabled microcontroller platform
vasanth 0:a540b792fbf0 10 *
vasanth 0:a540b792fbf0 11 * Description:
vasanth 0:a540b792fbf0 12 * This is a sample code that shows how to control a Rapid MP3 module
vasanth 0:a540b792fbf0 13 * using the UART peripheral of MBED micro. The code provides a set of API functions
vasanth 0:a540b792fbf0 14 * to access and control the module using UART peripheral.
vasanth 0:a540b792fbf0 15 *
vasanth 0:a540b792fbf0 16 * Copyright (C) 2014, Chipthing Labs, all right reserved.
vasanth 0:a540b792fbf0 17 * The Rapid MP3 code is a free software and there is NO WARRANTY.
vasanth 0:a540b792fbf0 18 * No restriction on use. You can use, modify and redistribute it for
vasanth 0:a540b792fbf0 19 * personal, non-profit or commercial products UNDER YOUR RESPONSIBILITY.
vasanth 0:a540b792fbf0 20 * Redistributions of source code must retain the above copyright notice.
vasanth 0:a540b792fbf0 21 ****************************************************************************/
vasanth 0:a540b792fbf0 22
vasanth 0:a540b792fbf0 23 #include "mbed.h"
vasanth 0:a540b792fbf0 24 #include "RAPIDMP3.h"
vasanth 0:a540b792fbf0 25
vasanth 0:a540b792fbf0 26 /**************************************************************************/
vasanth 0:a540b792fbf0 27
vasanth 0:a540b792fbf0 28 RAPIDMP3::RAPIDMP3(PinName Tx, PinName Rx) : serialRMP3(Tx, Rx) {
vasanth 0:a540b792fbf0 29 serialRMP3.baud(9600);
vasanth 0:a540b792fbf0 30 }
vasanth 0:a540b792fbf0 31 /**************************************************************************/
vasanth 0:a540b792fbf0 32
vasanth 0:a540b792fbf0 33 void RAPIDMP3::transmitEndOfFrame() {
vasanth 0:a540b792fbf0 34 serialRMP3.puts("\r\n");
vasanth 0:a540b792fbf0 35 }
vasanth 0:a540b792fbf0 36 /**************************************************************************/
vasanth 0:a540b792fbf0 37
vasanth 0:a540b792fbf0 38 void RAPIDMP3::getResponseStr() {
vasanth 0:a540b792fbf0 39 uint8_t i, temp;
vasanth 0:a540b792fbf0 40 i = 0;
vasanth 0:a540b792fbf0 41 do{
vasanth 0:a540b792fbf0 42 temp = serialRMP3.getc();
vasanth 0:a540b792fbf0 43 responseStr[i] = temp;
vasanth 0:a540b792fbf0 44 i++;
vasanth 0:a540b792fbf0 45 }while (temp != '\n');
vasanth 0:a540b792fbf0 46 responseStr[i] = '\0';
vasanth 0:a540b792fbf0 47 }
vasanth 0:a540b792fbf0 48 /**************************************************************************/
vasanth 0:a540b792fbf0 49
vasanth 0:a540b792fbf0 50 uint8_t RAPIDMP3::getResponse() {
vasanth 0:a540b792fbf0 51 uint8_t response = RMP3_ER;
vasanth 0:a540b792fbf0 52
vasanth 0:a540b792fbf0 53 getResponseStr();
vasanth 0:a540b792fbf0 54
vasanth 0:a540b792fbf0 55 if (strcmp((const char *) responseStr, "OK\r\n") == 0) {
vasanth 0:a540b792fbf0 56 response = RMP3_OK;
vasanth 0:a540b792fbf0 57 }
vasanth 0:a540b792fbf0 58 return response;
vasanth 0:a540b792fbf0 59 }
vasanth 0:a540b792fbf0 60
vasanth 0:a540b792fbf0 61 /**************************************************************************/
vasanth 0:a540b792fbf0 62 /*
vasanth 0:a540b792fbf0 63 @brief Checks whether the module is responding
vasanth 0:a540b792fbf0 64 to serial communication requests
vasanth 0:a540b792fbf0 65
vasanth 0:a540b792fbf0 66 @param[in] none
vasanth 0:a540b792fbf0 67
vasanth 0:a540b792fbf0 68 @param[out] RMP3_OK or RMP3_ER
vasanth 0:a540b792fbf0 69
vasanth 0:a540b792fbf0 70 */
vasanth 0:a540b792fbf0 71 /**************************************************************************/
vasanth 0:a540b792fbf0 72
vasanth 0:a540b792fbf0 73 uint8_t RAPIDMP3::checkDevice() {
vasanth 0:a540b792fbf0 74 uint8_t response = RMP3_ER;
vasanth 0:a540b792fbf0 75
vasanth 0:a540b792fbf0 76 serialRMP3.puts("AT\r\n");
vasanth 0:a540b792fbf0 77 getResponseStr();
vasanth 0:a540b792fbf0 78
vasanth 0:a540b792fbf0 79 if (strcmp((const char *) responseStr, "OK\r\n") == 0) {
vasanth 0:a540b792fbf0 80 response = RMP3_OK;
vasanth 0:a540b792fbf0 81 }
vasanth 0:a540b792fbf0 82 return response;
vasanth 0:a540b792fbf0 83 }
vasanth 0:a540b792fbf0 84 /**************************************************************************/
vasanth 0:a540b792fbf0 85 /*!
vasanth 0:a540b792fbf0 86 @brief Plays a MP3 or WAV file from an SD card
vasanth 0:a540b792fbf0 87
vasanth 0:a540b792fbf0 88 @param[in] fileName
vasanth 0:a540b792fbf0 89 Pointer to the filename of stored MP3 or WAV file
vasanth 0:a540b792fbf0 90 only 8.3 file name format is supported
vasanth 0:a540b792fbf0 91
vasanth 0:a540b792fbf0 92 @param[out] RMP3_OK or RMP3_ER
vasanth 0:a540b792fbf0 93
vasanth 0:a540b792fbf0 94 @section Example
vasanth 0:a540b792fbf0 95
vasanth 0:a540b792fbf0 96 @code
vasanth 0:a540b792fbf0 97
vasanth 0:a540b792fbf0 98 uint8_t response;
vasanth 0:a540b792fbf0 99 response = rmp3.playFile("my_file.mp3");
vasanth 0:a540b792fbf0 100 if (response == RMP3_OK) {
vasanth 0:a540b792fbf0 101 rmp3.waitEndOfPlay();
vasanth 0:a540b792fbf0 102 }
vasanth 0:a540b792fbf0 103
vasanth 0:a540b792fbf0 104 @endcode
vasanth 0:a540b792fbf0 105 */
vasanth 0:a540b792fbf0 106 /**************************************************************************/
vasanth 0:a540b792fbf0 107
vasanth 0:a540b792fbf0 108 uint8_t RAPIDMP3::playFile(const char *fileName) {
vasanth 0:a540b792fbf0 109 serialRMP3.puts("AT+PLAY=");
vasanth 0:a540b792fbf0 110 serialRMP3.putc('"');
vasanth 0:a540b792fbf0 111 serialRMP3.puts(fileName);
vasanth 0:a540b792fbf0 112 serialRMP3.putc('"');
vasanth 0:a540b792fbf0 113 transmitEndOfFrame();
vasanth 0:a540b792fbf0 114
vasanth 0:a540b792fbf0 115 return getResponse();
vasanth 0:a540b792fbf0 116 }
vasanth 0:a540b792fbf0 117
vasanth 0:a540b792fbf0 118 /**************************************************************************/
vasanth 0:a540b792fbf0 119 /*
vasanth 0:a540b792fbf0 120 @brief Waits until the current playback
vasanth 0:a540b792fbf0 121 gets completely finished
vasanth 0:a540b792fbf0 122
vasanth 0:a540b792fbf0 123 @param[in] none
vasanth 0:a540b792fbf0 124
vasanth 0:a540b792fbf0 125 @param[out] RMP3_OK or RMP3_ER
vasanth 0:a540b792fbf0 126
vasanth 0:a540b792fbf0 127 */
vasanth 0:a540b792fbf0 128 /**************************************************************************/
vasanth 0:a540b792fbf0 129
vasanth 0:a540b792fbf0 130 uint8_t RAPIDMP3::waitEndOfPlay() {
vasanth 0:a540b792fbf0 131 uint8_t response = RMP3_ER;
vasanth 0:a540b792fbf0 132 getResponseStr();
vasanth 0:a540b792fbf0 133
vasanth 0:a540b792fbf0 134 if (strcmp((const char *) responseStr, "FREE\r\n") == 0) {
vasanth 0:a540b792fbf0 135 response = RMP3_OK;
vasanth 0:a540b792fbf0 136 }
vasanth 0:a540b792fbf0 137 return response;
vasanth 0:a540b792fbf0 138 }
vasanth 0:a540b792fbf0 139
vasanth 0:a540b792fbf0 140 /**************************************************************************/
vasanth 0:a540b792fbf0 141 /*
vasanth 0:a540b792fbf0 142 @brief Waits for the device to indicate
vasanth 0:a540b792fbf0 143 the initialization is complete
vasanth 0:a540b792fbf0 144
vasanth 0:a540b792fbf0 145 @param[in] none
vasanth 0:a540b792fbf0 146
vasanth 0:a540b792fbf0 147 @param[out] RMP3_OK or RMP3_ER
vasanth 0:a540b792fbf0 148
vasanth 0:a540b792fbf0 149 */
vasanth 0:a540b792fbf0 150 /**************************************************************************/
vasanth 0:a540b792fbf0 151
vasanth 0:a540b792fbf0 152 uint8_t RAPIDMP3::waitDeviceFree() {
vasanth 0:a540b792fbf0 153 return waitEndOfPlay();
vasanth 0:a540b792fbf0 154 }
vasanth 0:a540b792fbf0 155
vasanth 0:a540b792fbf0 156 /**************************************************************************/
vasanth 0:a540b792fbf0 157 /*
vasanth 0:a540b792fbf0 158 @brief Stops the current playback
vasanth 0:a540b792fbf0 159
vasanth 0:a540b792fbf0 160 @param[in] none
vasanth 0:a540b792fbf0 161
vasanth 0:a540b792fbf0 162 @param[out] RMP3_OK or RMP3_ER
vasanth 0:a540b792fbf0 163
vasanth 0:a540b792fbf0 164 */
vasanth 0:a540b792fbf0 165 /**************************************************************************/
vasanth 0:a540b792fbf0 166
vasanth 0:a540b792fbf0 167 uint8_t RAPIDMP3::stop() {
vasanth 0:a540b792fbf0 168 serialRMP3.puts("AT+STOP\r\n");
vasanth 0:a540b792fbf0 169
vasanth 0:a540b792fbf0 170 uint8_t response;
vasanth 0:a540b792fbf0 171 response = getResponse();
vasanth 0:a540b792fbf0 172 if (response == RMP3_OK) {
vasanth 0:a540b792fbf0 173 return waitEndOfPlay();
vasanth 0:a540b792fbf0 174 }
vasanth 0:a540b792fbf0 175 return RMP3_ER;
vasanth 0:a540b792fbf0 176 }
vasanth 0:a540b792fbf0 177 /**************************************************************************/
vasanth 0:a540b792fbf0 178 /*
vasanth 0:a540b792fbf0 179 @brief Pause the current playback
vasanth 0:a540b792fbf0 180
vasanth 0:a540b792fbf0 181 @param[in] none
vasanth 0:a540b792fbf0 182
vasanth 0:a540b792fbf0 183 @param[out] RMP3_OK or RMP3_ER
vasanth 0:a540b792fbf0 184
vasanth 0:a540b792fbf0 185 */
vasanth 0:a540b792fbf0 186 /**************************************************************************/
vasanth 0:a540b792fbf0 187
vasanth 0:a540b792fbf0 188 uint8_t RAPIDMP3::playPause() {
vasanth 0:a540b792fbf0 189 serialRMP3.puts("AT+PAUSE\r\n");
vasanth 0:a540b792fbf0 190 return getResponse();
vasanth 0:a540b792fbf0 191 }
vasanth 0:a540b792fbf0 192 /**************************************************************************/
vasanth 0:a540b792fbf0 193 /*
vasanth 0:a540b792fbf0 194 @brief Resume the current playback
vasanth 0:a540b792fbf0 195
vasanth 0:a540b792fbf0 196 @param[in] none
vasanth 0:a540b792fbf0 197
vasanth 0:a540b792fbf0 198 @param[out] RMP3_OK or RMP3_ER
vasanth 0:a540b792fbf0 199
vasanth 0:a540b792fbf0 200 */
vasanth 0:a540b792fbf0 201 /**************************************************************************/
vasanth 0:a540b792fbf0 202
vasanth 0:a540b792fbf0 203 uint8_t RAPIDMP3::playResume() {
vasanth 0:a540b792fbf0 204 serialRMP3.puts("AT+RESUME\r\n");
vasanth 0:a540b792fbf0 205 return getResponse();
vasanth 0:a540b792fbf0 206 }
vasanth 0:a540b792fbf0 207 /**************************************************************************/
vasanth 0:a540b792fbf0 208 /*
vasanth 0:a540b792fbf0 209 @brief Sets the volume level
vasanth 0:a540b792fbf0 210
vasanth 0:a540b792fbf0 211 @param[in] vol
vasanth 0:a540b792fbf0 212 volume level to be set
vasanth 0:a540b792fbf0 213 values it can take: 0 to 9
vasanth 0:a540b792fbf0 214 where 0 is maximum volume and 9 is mute
vasanth 0:a540b792fbf0 215
vasanth 0:a540b792fbf0 216 @param[out] RMP3_OK or RMP3_ER
vasanth 0:a540b792fbf0 217 */
vasanth 0:a540b792fbf0 218 /**************************************************************************/
vasanth 0:a540b792fbf0 219
vasanth 0:a540b792fbf0 220 uint8_t RAPIDMP3::volumeSet(uint8_t vol) {
vasanth 0:a540b792fbf0 221 if (vol > 9) {
vasanth 0:a540b792fbf0 222 return RMP3_ER;
vasanth 0:a540b792fbf0 223 }
vasanth 0:a540b792fbf0 224 serialRMP3.puts("AT+VOL=");
vasanth 0:a540b792fbf0 225 serialRMP3.putc(vol + '0');
vasanth 0:a540b792fbf0 226 transmitEndOfFrame();
vasanth 0:a540b792fbf0 227
vasanth 0:a540b792fbf0 228 return getResponse();
vasanth 0:a540b792fbf0 229 }
vasanth 0:a540b792fbf0 230 /**************************************************************************/
vasanth 0:a540b792fbf0 231 /*
vasanth 0:a540b792fbf0 232 @brief Gets the volume level
vasanth 0:a540b792fbf0 233
vasanth 0:a540b792fbf0 234 @param[in] none
vasanth 0:a540b792fbf0 235
vasanth 0:a540b792fbf0 236 @param[out] current volume level
vasanth 0:a540b792fbf0 237 */
vasanth 0:a540b792fbf0 238 /**************************************************************************/
vasanth 0:a540b792fbf0 239
vasanth 0:a540b792fbf0 240 uint8_t RAPIDMP3::volumeGet() {
vasanth 0:a540b792fbf0 241 uint8_t volumeLevel = 0;
vasanth 0:a540b792fbf0 242
vasanth 0:a540b792fbf0 243 serialRMP3.puts("AT+VOL=?\r\n");
vasanth 0:a540b792fbf0 244 getResponseStr();
vasanth 0:a540b792fbf0 245
vasanth 0:a540b792fbf0 246 volumeLevel = responseStr[4];
vasanth 0:a540b792fbf0 247 volumeLevel -= '0'; // ASCII to decimal
vasanth 0:a540b792fbf0 248
vasanth 0:a540b792fbf0 249 return volumeLevel;
vasanth 0:a540b792fbf0 250 }
vasanth 0:a540b792fbf0 251 /**************************************************************************/
vasanth 0:a540b792fbf0 252 /*
vasanth 0:a540b792fbf0 253 @brief Increases the volume level
vasanth 0:a540b792fbf0 254
vasanth 0:a540b792fbf0 255 @param[in] none
vasanth 0:a540b792fbf0 256
vasanth 0:a540b792fbf0 257 @param[out] RMP3_OK or RMP3_ER
vasanth 0:a540b792fbf0 258 */
vasanth 0:a540b792fbf0 259 /**************************************************************************/
vasanth 0:a540b792fbf0 260
vasanth 0:a540b792fbf0 261 uint8_t RAPIDMP3::volumeInc() {
vasanth 0:a540b792fbf0 262 serialRMP3.puts("AT+INC\r\n");
vasanth 0:a540b792fbf0 263 return getResponse();
vasanth 0:a540b792fbf0 264 }
vasanth 0:a540b792fbf0 265 /**************************************************************************/
vasanth 0:a540b792fbf0 266 /*
vasanth 0:a540b792fbf0 267 @brief Decreases the volume level
vasanth 0:a540b792fbf0 268
vasanth 0:a540b792fbf0 269 @param[in] none
vasanth 0:a540b792fbf0 270
vasanth 0:a540b792fbf0 271 @param[out] RMP3_OK or RMP3_ER
vasanth 0:a540b792fbf0 272 */
vasanth 0:a540b792fbf0 273 /**************************************************************************/
vasanth 0:a540b792fbf0 274
vasanth 0:a540b792fbf0 275 uint8_t RAPIDMP3::volumeDec() {
vasanth 0:a540b792fbf0 276 serialRMP3.puts("AT+DEC\r\n");
vasanth 0:a540b792fbf0 277 return getResponse();
vasanth 0:a540b792fbf0 278 }
vasanth 0:a540b792fbf0 279 /**************************************************************************/
vasanth 0:a540b792fbf0 280 /*
vasanth 0:a540b792fbf0 281 @brief Gets the system state, either BUSY or FREE
vasanth 0:a540b792fbf0 282
vasanth 0:a540b792fbf0 283 @param[in] none
vasanth 0:a540b792fbf0 284
vasanth 0:a540b792fbf0 285 @param[out] RMP3_FREE or RMP3_BUSY
vasanth 0:a540b792fbf0 286
vasanth 0:a540b792fbf0 287 Description When either playback or recording is going on
vasanth 0:a540b792fbf0 288 system state is BUSY
vasanth 0:a540b792fbf0 289 When the module is not doing any of the two process,
vasanth 0:a540b792fbf0 290 system state is FREE
vasanth 0:a540b792fbf0 291 */
vasanth 0:a540b792fbf0 292 /**************************************************************************/
vasanth 0:a540b792fbf0 293
vasanth 0:a540b792fbf0 294 uint8_t RAPIDMP3::getPlaybackStatus() {
vasanth 0:a540b792fbf0 295 uint8_t systemState = RMP3_NONE;
vasanth 0:a540b792fbf0 296
vasanth 0:a540b792fbf0 297 serialRMP3.puts("AT+STATUS=?\r\n");
vasanth 0:a540b792fbf0 298 getResponseStr();
vasanth 0:a540b792fbf0 299
vasanth 0:a540b792fbf0 300 if (strcmp((const char *) responseStr, "BUSY\r\n") == 0) {
vasanth 0:a540b792fbf0 301 systemState = RMP3_BUSY;
vasanth 0:a540b792fbf0 302 } else if (strcmp((const char *) responseStr, "FREE\r\n") == 0) {
vasanth 0:a540b792fbf0 303 systemState = RMP3_FREE;
vasanth 0:a540b792fbf0 304 }
vasanth 0:a540b792fbf0 305 return systemState;
vasanth 0:a540b792fbf0 306 }
vasanth 0:a540b792fbf0 307 /**************************************************************************/
vasanth 0:a540b792fbf0 308 /*!
vasanth 0:a540b792fbf0 309 @brief Records audio as WAV file and saves it in an SD card
vasanth 0:a540b792fbf0 310
vasanth 0:a540b792fbf0 311 @param[in] fileName
vasanth 0:a540b792fbf0 312 Pointer to the filename of the WAV file where the recording should be stored
vasanth 0:a540b792fbf0 313 Only 8.3 file name format is supported
vasanth 0:a540b792fbf0 314
vasanth 0:a540b792fbf0 315 @param[out] RMP3_OK or RMP3_ER
vasanth 0:a540b792fbf0 316
vasanth 0:a540b792fbf0 317 Note Calling this function creates a new .wav file in the specified name
vasanth 1:dbb63bd6c828 318 within the microSD memory card
vasanth 0:a540b792fbf0 319
vasanth 0:a540b792fbf0 320 @section Example
vasanth 0:a540b792fbf0 321
vasanth 0:a540b792fbf0 322 @code
vasanth 0:a540b792fbf0 323
vasanth 0:a540b792fbf0 324 uint8_t response;
vasanth 0:a540b792fbf0 325 response = rmp3.recordFile("rec_1.wav");
vasanth 0:a540b792fbf0 326
vasanth 0:a540b792fbf0 327 if (response == RMP3_OK) {
vasanth 1:dbb63bd6c828 328 wait(10.0);
vasanth 0:a540b792fbf0 329 rmp3.stop();
vasanth 0:a540b792fbf0 330
vasanth 0:a540b792fbf0 331 rmp3.playFile("rec_1.wav");
vasanth 0:a540b792fbf0 332 rmp3.waitEndOfPlay();
vasanth 0:a540b792fbf0 333 }
vasanth 0:a540b792fbf0 334
vasanth 0:a540b792fbf0 335 @endcode
vasanth 0:a540b792fbf0 336 */
vasanth 0:a540b792fbf0 337 /**************************************************************************/
vasanth 0:a540b792fbf0 338
vasanth 0:a540b792fbf0 339 uint8_t RAPIDMP3::recordFile(const char *fileName) {
vasanth 0:a540b792fbf0 340 serialRMP3.puts("AT+RECD=");
vasanth 0:a540b792fbf0 341 serialRMP3.putc('"');
vasanth 0:a540b792fbf0 342 serialRMP3.puts(fileName);
vasanth 0:a540b792fbf0 343 serialRMP3.putc('"');
vasanth 0:a540b792fbf0 344 transmitEndOfFrame();
vasanth 0:a540b792fbf0 345
vasanth 0:a540b792fbf0 346 return getResponse();
vasanth 0:a540b792fbf0 347 }
vasanth 0:a540b792fbf0 348
vasanth 0:a540b792fbf0 349 /**************************************************************************/
vasanth 0:a540b792fbf0 350 /* END */
vasanth 0:a540b792fbf0 351 /**************************************************************************/