DFPlayerMini Library porting from Arduino Library (www.github.com/dfrobot/DFPlayer_Mini_Mp3)

Dependents:   pinball pinball-sensZero

Committer:
dimavb
Date:
Mon Dec 10 12:35:11 2018 +0000
Revision:
1:a637be95c1ea
Parent:
0:62b52a8325e3
init

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kysiki 0:62b52a8325e3 1 /*******************************************************************************
kysiki 0:62b52a8325e3 2 * Copyright (C) 2014 DFRobot *
kysiki 0:62b52a8325e3 3 * *
kysiki 0:62b52a8325e3 4 * DFPlayer_Mini_Mp3, This library provides a quite complete function for *
kysiki 0:62b52a8325e3 5 * DFPlayer mini mp3 module. *
kysiki 0:62b52a8325e3 6 * www.github.com/dfrobot/DFPlayer_Mini_Mp3 (github as default source provider)*
kysiki 0:62b52a8325e3 7 * DFRobot-A great source for opensource hardware and robot. *
kysiki 0:62b52a8325e3 8 * *
kysiki 0:62b52a8325e3 9 * This file is part of the DFplayer_Mini_Mp3 library. *
kysiki 0:62b52a8325e3 10 * *
kysiki 0:62b52a8325e3 11 * DFPlayer_Mini_Mp3 is free software: you can redistribute it and/or *
kysiki 0:62b52a8325e3 12 * modify it under the terms of the GNU Lesser General Public License as *
kysiki 0:62b52a8325e3 13 * published by the Free Software Foundation, either version 3 of *
kysiki 0:62b52a8325e3 14 * the License, or any later version. *
kysiki 0:62b52a8325e3 15 * *
kysiki 0:62b52a8325e3 16 * DFPlayer_Mini_Mp3 is distributed in the hope that it will be useful, *
kysiki 0:62b52a8325e3 17 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
kysiki 0:62b52a8325e3 18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
kysiki 0:62b52a8325e3 19 * GNU Lesser General Public License for more details. *
kysiki 0:62b52a8325e3 20 * *
kysiki 0:62b52a8325e3 21 * DFPlayer_Mini_Mp3 is distributed in the hope that it will be useful, *
kysiki 0:62b52a8325e3 22 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
kysiki 0:62b52a8325e3 23 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
kysiki 0:62b52a8325e3 24 * GNU Lesser General Public License for more details. *
kysiki 0:62b52a8325e3 25 * *
kysiki 0:62b52a8325e3 26 * You should have received a copy of the GNU Lesser General Public *
kysiki 0:62b52a8325e3 27 * License along with DFPlayer_Mini_Mp3. If not, see *
kysiki 0:62b52a8325e3 28 * <http://www.gnu.org/licenses/>. *
kysiki 0:62b52a8325e3 29 ******************************************************************************/
kysiki 0:62b52a8325e3 30
kysiki 0:62b52a8325e3 31 // ===========================================================================
kysiki 0:62b52a8325e3 32 // DFPlayerMini.cpp
kysiki 0:62b52a8325e3 33 // Nov 23 2016, kysiki
kysiki 0:62b52a8325e3 34 // ===========================================================================
kysiki 0:62b52a8325e3 35 // Just a simple library for DFPlayer Mini porting from DFPlayer library V2.0.
kysiki 0:62b52a8325e3 36 // (https://www.dfrobot.com/wiki/index.php/DFPlayer_Mini_SKU:DFR0299)
kysiki 0:62b52a8325e3 37
kysiki 0:62b52a8325e3 38 #include "DFPlayerMini.h"
kysiki 0:62b52a8325e3 39 #include "mbed.h"
kysiki 0:62b52a8325e3 40
kysiki 0:62b52a8325e3 41 DFPlayerMini::DFPlayerMini(PinName txPin, PinName rxPin)
kysiki 0:62b52a8325e3 42 :
kysiki 0:62b52a8325e3 43 mp3(txPin, rxPin)
kysiki 0:62b52a8325e3 44 {
kysiki 0:62b52a8325e3 45 uint8_t tmp[10] = {0x7E, 0xFF, 06, 00, 00, 00, 00, 00, 00, 0xEF};
kysiki 0:62b52a8325e3 46 memcpy(send_buf, tmp, 10);
kysiki 0:62b52a8325e3 47 is_reply = 0;
kysiki 0:62b52a8325e3 48 mp3.format(8,Serial::None,1);
kysiki 0:62b52a8325e3 49 mp3.baud(9600);
kysiki 0:62b52a8325e3 50 }
kysiki 0:62b52a8325e3 51
kysiki 0:62b52a8325e3 52 void DFPlayerMini::mp3_set_reply (uint8_t state) {
kysiki 0:62b52a8325e3 53 is_reply = state;
kysiki 0:62b52a8325e3 54 send_buf[4] = is_reply;
kysiki 0:62b52a8325e3 55 }
kysiki 0:62b52a8325e3 56
kysiki 0:62b52a8325e3 57 void DFPlayerMini::fill_uint16_bigend (uint8_t *thebuf, uint16_t data) {
kysiki 0:62b52a8325e3 58 *thebuf = (uint8_t)(data>>8);
kysiki 0:62b52a8325e3 59 *(thebuf+1) = (uint8_t)data;
kysiki 0:62b52a8325e3 60 }
kysiki 0:62b52a8325e3 61
kysiki 0:62b52a8325e3 62 //calc checksum (1~6 byte)
kysiki 0:62b52a8325e3 63 uint16_t DFPlayerMini::mp3_get_checksum (uint8_t *thebuf) {
kysiki 0:62b52a8325e3 64 uint16_t sum = 0;
kysiki 0:62b52a8325e3 65 for (int i=1; i<7; i++) {
kysiki 0:62b52a8325e3 66 sum += thebuf[i];
kysiki 0:62b52a8325e3 67 }
kysiki 0:62b52a8325e3 68 return -sum;
kysiki 0:62b52a8325e3 69 }
kysiki 0:62b52a8325e3 70
kysiki 0:62b52a8325e3 71 //fill checksum to send_buf (7~8 byte)
kysiki 0:62b52a8325e3 72 void DFPlayerMini::mp3_fill_checksum () {
kysiki 0:62b52a8325e3 73 uint16_t checksum = mp3_get_checksum (send_buf);
kysiki 0:62b52a8325e3 74 fill_uint16_bigend (send_buf+7, checksum);
kysiki 0:62b52a8325e3 75 }
kysiki 0:62b52a8325e3 76
kysiki 0:62b52a8325e3 77 void DFPlayerMini::send_func () {
kysiki 0:62b52a8325e3 78 int i;
kysiki 0:62b52a8325e3 79 for (i = 0; i < 10; i++) {
kysiki 0:62b52a8325e3 80 mp3.putc(send_buf[i]);
kysiki 0:62b52a8325e3 81 }
kysiki 0:62b52a8325e3 82 }
kysiki 0:62b52a8325e3 83
kysiki 0:62b52a8325e3 84 void DFPlayerMini::mp3_send_cmd (uint8_t cmd, uint16_t arg) {
kysiki 0:62b52a8325e3 85 send_buf[3] = cmd;
kysiki 0:62b52a8325e3 86 fill_uint16_bigend ((send_buf+5), arg);
kysiki 0:62b52a8325e3 87 mp3_fill_checksum ();
kysiki 0:62b52a8325e3 88 send_func ();
kysiki 0:62b52a8325e3 89 }
kysiki 0:62b52a8325e3 90
kysiki 0:62b52a8325e3 91 void DFPlayerMini::mp3_send_cmd (uint8_t cmd) {
kysiki 0:62b52a8325e3 92 send_buf[3] = cmd;
kysiki 0:62b52a8325e3 93 fill_uint16_bigend ((send_buf+5), 0);
kysiki 0:62b52a8325e3 94 mp3_fill_checksum ();
kysiki 0:62b52a8325e3 95 send_func ();
kysiki 0:62b52a8325e3 96 }
kysiki 0:62b52a8325e3 97
kysiki 0:62b52a8325e3 98
kysiki 0:62b52a8325e3 99 void DFPlayerMini::mp3_play_physical (uint16_t num) {
kysiki 0:62b52a8325e3 100 mp3_send_cmd (0x03, num);
kysiki 0:62b52a8325e3 101 }
kysiki 0:62b52a8325e3 102
kysiki 0:62b52a8325e3 103 void DFPlayerMini::mp3_play_physical () {
kysiki 0:62b52a8325e3 104 mp3_send_cmd (0x03);
kysiki 0:62b52a8325e3 105 }
kysiki 0:62b52a8325e3 106
kysiki 0:62b52a8325e3 107 void DFPlayerMini::mp3_next () {
kysiki 0:62b52a8325e3 108 mp3_send_cmd (0x01);
kysiki 0:62b52a8325e3 109 }
kysiki 0:62b52a8325e3 110
kysiki 0:62b52a8325e3 111 void DFPlayerMini::mp3_prev () {
kysiki 0:62b52a8325e3 112 mp3_send_cmd (0x02);
kysiki 0:62b52a8325e3 113 }
kysiki 0:62b52a8325e3 114
kysiki 0:62b52a8325e3 115 //0x06 set volume 0-30
kysiki 0:62b52a8325e3 116 void DFPlayerMini::mp3_set_volume (uint16_t volume) {
kysiki 0:62b52a8325e3 117 mp3_send_cmd (0x06, volume);
kysiki 0:62b52a8325e3 118 }
kysiki 0:62b52a8325e3 119
kysiki 0:62b52a8325e3 120 //0x07 set EQ0/1/2/3/4/5 Normal/Pop/Rock/Jazz/Classic/Bass
kysiki 0:62b52a8325e3 121 void DFPlayerMini::mp3_set_EQ (uint16_t eq) {
kysiki 0:62b52a8325e3 122 mp3_send_cmd (0x07, eq);
kysiki 0:62b52a8325e3 123 }
kysiki 0:62b52a8325e3 124
kysiki 0:62b52a8325e3 125 //0x09 set device 1/2/3/4/5 U/SD/AUX/SLEEP/FLASH
kysiki 0:62b52a8325e3 126 void DFPlayerMini::mp3_set_device (uint16_t device) {
kysiki 0:62b52a8325e3 127 mp3_send_cmd (0x09, device);
kysiki 0:62b52a8325e3 128 }
kysiki 0:62b52a8325e3 129
kysiki 0:62b52a8325e3 130 void DFPlayerMini::mp3_sleep () {
kysiki 0:62b52a8325e3 131 mp3_send_cmd (0x0a);
kysiki 0:62b52a8325e3 132 }
kysiki 0:62b52a8325e3 133
kysiki 0:62b52a8325e3 134 void DFPlayerMini::mp3_reset () {
kysiki 0:62b52a8325e3 135 mp3_send_cmd (0x0c);
kysiki 0:62b52a8325e3 136 }
kysiki 0:62b52a8325e3 137
kysiki 0:62b52a8325e3 138 void DFPlayerMini::mp3_play () {
kysiki 0:62b52a8325e3 139 mp3_send_cmd (0x0d);
kysiki 0:62b52a8325e3 140 }
kysiki 0:62b52a8325e3 141
kysiki 0:62b52a8325e3 142 void DFPlayerMini::mp3_pause () {
kysiki 0:62b52a8325e3 143 mp3_send_cmd (0x0e);
kysiki 0:62b52a8325e3 144 }
kysiki 0:62b52a8325e3 145
kysiki 0:62b52a8325e3 146 void DFPlayerMini::mp3_stop () {
kysiki 0:62b52a8325e3 147 mp3_send_cmd (0x16);
kysiki 0:62b52a8325e3 148 }
kysiki 0:62b52a8325e3 149
kysiki 0:62b52a8325e3 150 // play mp3 file in mp3 folder in your tf card
kysiki 0:62b52a8325e3 151 void DFPlayerMini::mp3_play (uint16_t num) {
kysiki 0:62b52a8325e3 152 mp3_send_cmd (0x12, num);
kysiki 0:62b52a8325e3 153 }
kysiki 0:62b52a8325e3 154
kysiki 0:62b52a8325e3 155 void DFPlayerMini::mp3_get_state () {
kysiki 0:62b52a8325e3 156 mp3_send_cmd (0x42);
kysiki 0:62b52a8325e3 157 }
kysiki 0:62b52a8325e3 158
kysiki 0:62b52a8325e3 159 void DFPlayerMini::mp3_get_volume () {
kysiki 0:62b52a8325e3 160 mp3_send_cmd (0x43);
kysiki 0:62b52a8325e3 161 }
kysiki 0:62b52a8325e3 162
kysiki 0:62b52a8325e3 163 void DFPlayerMini::mp3_get_u_sum () {
kysiki 0:62b52a8325e3 164 mp3_send_cmd (0x47);
kysiki 0:62b52a8325e3 165 }
kysiki 0:62b52a8325e3 166
kysiki 0:62b52a8325e3 167 void DFPlayerMini::mp3_get_tf_sum () {
kysiki 0:62b52a8325e3 168 mp3_send_cmd (0x48);
kysiki 0:62b52a8325e3 169 }
kysiki 0:62b52a8325e3 170
kysiki 0:62b52a8325e3 171 void DFPlayerMini::mp3_get_flash_sum () {
kysiki 0:62b52a8325e3 172 mp3_send_cmd (0x49);
kysiki 0:62b52a8325e3 173 }
kysiki 0:62b52a8325e3 174
kysiki 0:62b52a8325e3 175 void DFPlayerMini::mp3_get_tf_current () {
kysiki 0:62b52a8325e3 176 mp3_send_cmd (0x4c);
kysiki 0:62b52a8325e3 177 }
kysiki 0:62b52a8325e3 178
kysiki 0:62b52a8325e3 179 void DFPlayerMini::mp3_get_u_current () {
kysiki 0:62b52a8325e3 180 mp3_send_cmd (0x4b);
kysiki 0:62b52a8325e3 181 }
kysiki 0:62b52a8325e3 182
kysiki 0:62b52a8325e3 183
kysiki 0:62b52a8325e3 184 //
kysiki 0:62b52a8325e3 185 void DFPlayerMini::mp3_get_flash_current () {
kysiki 0:62b52a8325e3 186 mp3_send_cmd (0x4d);
kysiki 0:62b52a8325e3 187 }
kysiki 0:62b52a8325e3 188
kysiki 0:62b52a8325e3 189 void DFPlayerMini::mp3_single_loop (uint8_t state) {
kysiki 0:62b52a8325e3 190 mp3_send_cmd (0x19, !state);
kysiki 0:62b52a8325e3 191 }
kysiki 0:62b52a8325e3 192
kysiki 0:62b52a8325e3 193 void DFPlayerMini::mp3_single_play (uint16_t num) {
kysiki 0:62b52a8325e3 194 mp3_play (num);
kysiki 0:62b52a8325e3 195 wait_ms (10);
kysiki 0:62b52a8325e3 196 mp3_single_loop (true);
kysiki 0:62b52a8325e3 197 }
kysiki 0:62b52a8325e3 198
kysiki 0:62b52a8325e3 199 void DFPlayerMini::mp3_DAC (uint8_t state) {
kysiki 0:62b52a8325e3 200 mp3_send_cmd (0x1a, !state);
kysiki 0:62b52a8325e3 201 }
kysiki 0:62b52a8325e3 202
kysiki 0:62b52a8325e3 203 //
kysiki 0:62b52a8325e3 204 void DFPlayerMini::mp3_random_play () {
kysiki 0:62b52a8325e3 205 mp3_send_cmd (0x18);
kysiki 0:62b52a8325e3 206 }