Mateusz Wójcik / Mbed 2 deprecated FRDMK64_SDCard

Dependencies:   mbed

Committer:
kudlatykaskader
Date:
Sat Nov 18 22:04:50 2017 +0000
Revision:
0:e2da1a4652f5
commit;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kudlatykaskader 0:e2da1a4652f5 1 /* mbed MP3 Shield Player - Testapplication for VLSI VS1053b Lib
kudlatykaskader 0:e2da1a4652f5 2 * Copyright (c) 2010 Christian Schmiljun
kudlatykaskader 0:e2da1a4652f5 3 *
kudlatykaskader 0:e2da1a4652f5 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
kudlatykaskader 0:e2da1a4652f5 5 * of this software and associated documentation files (the "Software"), to deal
kudlatykaskader 0:e2da1a4652f5 6 * in the Software without restriction, including without limitation the rights
kudlatykaskader 0:e2da1a4652f5 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
kudlatykaskader 0:e2da1a4652f5 8 * copies of the Software, and to permit persons to whom the Software is
kudlatykaskader 0:e2da1a4652f5 9 * furnished to do so, subject to the following conditions:
kudlatykaskader 0:e2da1a4652f5 10 *
kudlatykaskader 0:e2da1a4652f5 11 * The above copyright notice and this permission notice shall be included in
kudlatykaskader 0:e2da1a4652f5 12 * all copies or substantial portions of the Software.
kudlatykaskader 0:e2da1a4652f5 13 *
kudlatykaskader 0:e2da1a4652f5 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
kudlatykaskader 0:e2da1a4652f5 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
kudlatykaskader 0:e2da1a4652f5 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
kudlatykaskader 0:e2da1a4652f5 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
kudlatykaskader 0:e2da1a4652f5 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
kudlatykaskader 0:e2da1a4652f5 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
kudlatykaskader 0:e2da1a4652f5 20 * THE SOFTWARE.
kudlatykaskader 0:e2da1a4652f5 21 */
kudlatykaskader 0:e2da1a4652f5 22
kudlatykaskader 0:e2da1a4652f5 23
kudlatykaskader 0:e2da1a4652f5 24 #include "mbed.h"
kudlatykaskader 0:e2da1a4652f5 25 #include "rtos.h"
kudlatykaskader 0:e2da1a4652f5 26
kudlatykaskader 0:e2da1a4652f5 27 #include "defines.h"
kudlatykaskader 0:e2da1a4652f5 28 #include "VS1053.h"
kudlatykaskader 0:e2da1a4652f5 29
kudlatykaskader 0:e2da1a4652f5 30
kudlatykaskader 0:e2da1a4652f5 31 // Volume [ 0x0000 (loud) .. 0xFEFE (quiet) ]
kudlatykaskader 0:e2da1a4652f5 32 #define VOLUME -22.0f
kudlatykaskader 0:e2da1a4652f5 33 // Switch for local filesystem or SDCard
kudlatykaskader 0:e2da1a4652f5 34 // #define USE_SDCARD
kudlatykaskader 0:e2da1a4652f5 35
kudlatykaskader 0:e2da1a4652f5 36 // ----------------------------------------------------------------------------
kudlatykaskader 0:e2da1a4652f5 37 //
kudlatykaskader 0:e2da1a4652f5 38 // Pin Assigenment for SDCard on Cool Components Workshop Board
kudlatykaskader 0:e2da1a4652f5 39 //
kudlatykaskader 0:e2da1a4652f5 40 // SDCard | mbed Side
kudlatykaskader 0:e2da1a4652f5 41 // ---------------------------------------
kudlatykaskader 0:e2da1a4652f5 42 // mosi-----------------5
kudlatykaskader 0:e2da1a4652f5 43 // miso-----------------6
kudlatykaskader 0:e2da1a4652f5 44 // sclk-----------------7
kudlatykaskader 0:e2da1a4652f5 45 // cs-------------------8
kudlatykaskader 0:e2da1a4652f5 46 //
kudlatykaskader 0:e2da1a4652f5 47 // ----------------------------------------------------------------------------
kudlatykaskader 0:e2da1a4652f5 48 #define USE_SDCARD
kudlatykaskader 0:e2da1a4652f5 49 #ifdef USE_SDCARD
kudlatykaskader 0:e2da1a4652f5 50 #include "SDFileSystem.h"
kudlatykaskader 0:e2da1a4652f5 51 SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd"); // MOSI, MISO, SCK, CS
kudlatykaskader 0:e2da1a4652f5 52 #define DIR_NAME "/sd/Musik"
kudlatykaskader 0:e2da1a4652f5 53 #endif
kudlatykaskader 0:e2da1a4652f5 54
kudlatykaskader 0:e2da1a4652f5 55 #ifdef LOCAL_FILE
kudlatykaskader 0:e2da1a4652f5 56 LocalFileSystem sd("local");
kudlatykaskader 0:e2da1a4652f5 57 #define DIR_NAME "/local"
kudlatykaskader 0:e2da1a4652f5 58 #endif
kudlatykaskader 0:e2da1a4652f5 59
kudlatykaskader 0:e2da1a4652f5 60 // ----------------------------------------------------------------------------
kudlatykaskader 0:e2da1a4652f5 61 //
kudlatykaskader 0:e2da1a4652f5 62 // Pin Assigenment for Arduino MP3 Shield
kudlatykaskader 0:e2da1a4652f5 63 // (VS1053 employed, issued by sparkfun.com)
kudlatykaskader 0:e2da1a4652f5 64 //
kudlatykaskader 0:e2da1a4652f5 65 // MP3 Sheild Side | mbed Side
kudlatykaskader 0:e2da1a4652f5 66 // ---------------------------------------
kudlatykaskader 0:e2da1a4652f5 67 // RX-------------------10 (optional)
kudlatykaskader 0:e2da1a4652f5 68 // TX-------------------09 (optional)
kudlatykaskader 0:e2da1a4652f5 69 // D2(BSYNC)------------11
kudlatykaskader 0:e2da1a4652f5 70 // D3(DREQ)-------------10
kudlatykaskader 0:e2da1a4652f5 71 //
kudlatykaskader 0:e2da1a4652f5 72 // D9(CS)---------------8
kudlatykaskader 0:e2da1a4652f5 73 //
kudlatykaskader 0:e2da1a4652f5 74 // D11(MOSI)------------5
kudlatykaskader 0:e2da1a4652f5 75 // D12(MISO)------------6
kudlatykaskader 0:e2da1a4652f5 76 // D13(SCK)-------------7
kudlatykaskader 0:e2da1a4652f5 77 //
kudlatykaskader 0:e2da1a4652f5 78 // GND------------------GND(1)
kudlatykaskader 0:e2da1a4652f5 79 // 5V-------------------VU(39)
kudlatykaskader 0:e2da1a4652f5 80 // RESET----------------9
kudlatykaskader 0:e2da1a4652f5 81 //
kudlatykaskader 0:e2da1a4652f5 82 // ----------------------------------------------------------------------------
kudlatykaskader 0:e2da1a4652f5 83 #define MOSI_PIN PTD2
kudlatykaskader 0:e2da1a4652f5 84 #define MISO_PIN PTD3
kudlatykaskader 0:e2da1a4652f5 85 #define SCK_PIN PTD1
kudlatykaskader 0:e2da1a4652f5 86 #define CS_PIN PTD0
kudlatykaskader 0:e2da1a4652f5 87 #define RESET_PIN PTC4
kudlatykaskader 0:e2da1a4652f5 88 #define DREQ_PIN PTA0
kudlatykaskader 0:e2da1a4652f5 89 #define DCS_PIN PTC3
kudlatykaskader 0:e2da1a4652f5 90
kudlatykaskader 0:e2da1a4652f5 91 const int VS1053B_BUFFER_SIZE = (8 * 1024 + 1);
kudlatykaskader 0:e2da1a4652f5 92 char VS1053_BUFFER[VS1053B_BUFFER_SIZE];
kudlatykaskader 0:e2da1a4652f5 93 char* VS1053B_BUFFER_POINTER = VS1053_BUFFER;
kudlatykaskader 0:e2da1a4652f5 94 VS1053 mp3( MOSI_PIN, MISO_PIN, SCK_PIN, CS_PIN, RESET_PIN, DREQ_PIN, DCS_PIN, VS1053_BUFFER, VS1053B_BUFFER_SIZE);
kudlatykaskader 0:e2da1a4652f5 95
kudlatykaskader 0:e2da1a4652f5 96 // Serial for Debug
kudlatykaskader 0:e2da1a4652f5 97 Serial pc(USBTX, USBRX);
kudlatykaskader 0:e2da1a4652f5 98
kudlatykaskader 0:e2da1a4652f5 99 Ticker timer;
kudlatykaskader 0:e2da1a4652f5 100 Ticker timer2;
kudlatykaskader 0:e2da1a4652f5 101
kudlatykaskader 0:e2da1a4652f5 102 DigitalIn _DREQ(DREQ_PIN);
kudlatykaskader 0:e2da1a4652f5 103 bool next = false;
kudlatykaskader 0:e2da1a4652f5 104
kudlatykaskader 0:e2da1a4652f5 105 void statisticsOutput();
kudlatykaskader 0:e2da1a4652f5 106
kudlatykaskader 0:e2da1a4652f5 107 void SetVolume(void const *) {
kudlatykaskader 0:e2da1a4652f5 108 while (1) {
kudlatykaskader 0:e2da1a4652f5 109 if (pc.readable()) {
kudlatykaskader 0:e2da1a4652f5 110 unsigned char c = pc.getc();
kudlatykaskader 0:e2da1a4652f5 111 // scanf ("%x",&i);
kudlatykaskader 0:e2da1a4652f5 112 switch (c) {
kudlatykaskader 0:e2da1a4652f5 113 case '1':
kudlatykaskader 0:e2da1a4652f5 114 case '2':
kudlatykaskader 0:e2da1a4652f5 115 case '3':
kudlatykaskader 0:e2da1a4652f5 116 case '4':
kudlatykaskader 0:e2da1a4652f5 117 mp3.setPlaySpeed(c - 48);
kudlatykaskader 0:e2da1a4652f5 118 break;
kudlatykaskader 0:e2da1a4652f5 119 case '+':
kudlatykaskader 0:e2da1a4652f5 120 mp3.setVolume(mp3.getVolume() + 0.5);
kudlatykaskader 0:e2da1a4652f5 121 break;
kudlatykaskader 0:e2da1a4652f5 122 case '-':
kudlatykaskader 0:e2da1a4652f5 123 mp3.setVolume(mp3.getVolume() - 0.5);
kudlatykaskader 0:e2da1a4652f5 124 break;
kudlatykaskader 0:e2da1a4652f5 125 case 'k':
kudlatykaskader 0:e2da1a4652f5 126 mp3.setVolume(mp3.getBalance() + 0.5);
kudlatykaskader 0:e2da1a4652f5 127 break;
kudlatykaskader 0:e2da1a4652f5 128 case 'l':
kudlatykaskader 0:e2da1a4652f5 129 mp3.setVolume(mp3.getBalance() - 0.5);
kudlatykaskader 0:e2da1a4652f5 130 break;
kudlatykaskader 0:e2da1a4652f5 131 case 'a':
kudlatykaskader 0:e2da1a4652f5 132 mp3.setTrebleFrequency(mp3.getTrebleFrequency() + 1000);
kudlatykaskader 0:e2da1a4652f5 133 break;
kudlatykaskader 0:e2da1a4652f5 134 case 'y':
kudlatykaskader 0:e2da1a4652f5 135 mp3.setTrebleFrequency(mp3.getTrebleFrequency() - 1000);
kudlatykaskader 0:e2da1a4652f5 136 break;
kudlatykaskader 0:e2da1a4652f5 137 case 's':
kudlatykaskader 0:e2da1a4652f5 138 mp3.setTrebleAmplitude(mp3.getTrebleAmplitude() - 1);
kudlatykaskader 0:e2da1a4652f5 139 break;
kudlatykaskader 0:e2da1a4652f5 140 case 'x':
kudlatykaskader 0:e2da1a4652f5 141 mp3.setTrebleAmplitude(mp3.getTrebleAmplitude() + 1);
kudlatykaskader 0:e2da1a4652f5 142 break;
kudlatykaskader 0:e2da1a4652f5 143 case 'd':
kudlatykaskader 0:e2da1a4652f5 144 mp3.setBassFrequency(mp3.getBassFrequency() + 10);
kudlatykaskader 0:e2da1a4652f5 145 break;
kudlatykaskader 0:e2da1a4652f5 146 case 'c':
kudlatykaskader 0:e2da1a4652f5 147 mp3.setBassFrequency(mp3.getBassFrequency() - 10);
kudlatykaskader 0:e2da1a4652f5 148 break;
kudlatykaskader 0:e2da1a4652f5 149 case 'f':
kudlatykaskader 0:e2da1a4652f5 150 mp3.setBassAmplitude(mp3.getBassAmplitude() - 1);
kudlatykaskader 0:e2da1a4652f5 151 break;
kudlatykaskader 0:e2da1a4652f5 152 case 'v':
kudlatykaskader 0:e2da1a4652f5 153 mp3.setBassAmplitude(mp3.getBassAmplitude() + 1);
kudlatykaskader 0:e2da1a4652f5 154 break;
kudlatykaskader 0:e2da1a4652f5 155 case 'z':
kudlatykaskader 0:e2da1a4652f5 156 timer.attach(&statisticsOutput, 1);
kudlatykaskader 0:e2da1a4652f5 157 break;
kudlatykaskader 0:e2da1a4652f5 158 case 'u':
kudlatykaskader 0:e2da1a4652f5 159 timer.detach();
kudlatykaskader 0:e2da1a4652f5 160 break;
kudlatykaskader 0:e2da1a4652f5 161 case 'i':
kudlatykaskader 0:e2da1a4652f5 162 statisticsOutput();
kudlatykaskader 0:e2da1a4652f5 163 break;
kudlatykaskader 0:e2da1a4652f5 164 case 'h':
kudlatykaskader 0:e2da1a4652f5 165 mp3.play();
kudlatykaskader 0:e2da1a4652f5 166 break;
kudlatykaskader 0:e2da1a4652f5 167 case 'j':
kudlatykaskader 0:e2da1a4652f5 168 mp3.pause();
kudlatykaskader 0:e2da1a4652f5 169 break;
kudlatykaskader 0:e2da1a4652f5 170 case 'n':
kudlatykaskader 0:e2da1a4652f5 171 next = true;
kudlatykaskader 0:e2da1a4652f5 172 break;
kudlatykaskader 0:e2da1a4652f5 173 default:
kudlatykaskader 0:e2da1a4652f5 174 break;
kudlatykaskader 0:e2da1a4652f5 175 }
kudlatykaskader 0:e2da1a4652f5 176 }
kudlatykaskader 0:e2da1a4652f5 177 Thread::wait(100) ;
kudlatykaskader 0:e2da1a4652f5 178 }
kudlatykaskader 0:e2da1a4652f5 179 }
kudlatykaskader 0:e2da1a4652f5 180
kudlatykaskader 0:e2da1a4652f5 181 void statisticsOutput() {
kudlatykaskader 0:e2da1a4652f5 182 printf("Statistics\r\n");
kudlatykaskader 0:e2da1a4652f5 183 printf("Buffer - Size: %i, Free: %i, Loaded: %i\r\n", mp3.bufferLength(), mp3.bufferFree(), mp3.bufferCount());
kudlatykaskader 0:e2da1a4652f5 184 printf("DREQ: %#x\r\n", _DREQ.read());
kudlatykaskader 0:e2da1a4652f5 185 }
kudlatykaskader 0:e2da1a4652f5 186
kudlatykaskader 0:e2da1a4652f5 187 DigitalOut led2(LED2); // Ticker for mp3
kudlatykaskader 0:e2da1a4652f5 188
kudlatykaskader 0:e2da1a4652f5 189 void playFile(char *fname) {
kudlatykaskader 0:e2da1a4652f5 190 FILE *song;
kudlatykaskader 0:e2da1a4652f5 191 static char array[2048];
kudlatykaskader 0:e2da1a4652f5 192
kudlatykaskader 0:e2da1a4652f5 193 song = fopen(fname, "rb");
kudlatykaskader 0:e2da1a4652f5 194 if (!song) {
kudlatykaskader 0:e2da1a4652f5 195 printf("Couldn't open %s\r\n", fname);
kudlatykaskader 0:e2da1a4652f5 196 return ;
kudlatykaskader 0:e2da1a4652f5 197 }
kudlatykaskader 0:e2da1a4652f5 198
kudlatykaskader 0:e2da1a4652f5 199 int count = 0;
kudlatykaskader 0:e2da1a4652f5 200 bool test = true;
kudlatykaskader 0:e2da1a4652f5 201
kudlatykaskader 0:e2da1a4652f5 202 while (!feof(song) && !next) {
kudlatykaskader 0:e2da1a4652f5 203 int n=fread(&array, 1, sizeof(array), song);
kudlatykaskader 0:e2da1a4652f5 204 while (mp3.bufferFree() < n) {
kudlatykaskader 0:e2da1a4652f5 205 led2 = 1 ;
kudlatykaskader 0:e2da1a4652f5 206 Thread::wait(100) ;
kudlatykaskader 0:e2da1a4652f5 207 led2 = 0 ;
kudlatykaskader 0:e2da1a4652f5 208 }
kudlatykaskader 0:e2da1a4652f5 209 mp3.bufferPutStream(array,n);
kudlatykaskader 0:e2da1a4652f5 210 if (count > 2 && test) {
kudlatykaskader 0:e2da1a4652f5 211 test = false;
kudlatykaskader 0:e2da1a4652f5 212 mp3.play();
kudlatykaskader 0:e2da1a4652f5 213 }
kudlatykaskader 0:e2da1a4652f5 214 count++;
kudlatykaskader 0:e2da1a4652f5 215 }
kudlatykaskader 0:e2da1a4652f5 216 if (next) {
kudlatykaskader 0:e2da1a4652f5 217 mp3.stop();
kudlatykaskader 0:e2da1a4652f5 218 next = false;
kudlatykaskader 0:e2da1a4652f5 219 } else {
kudlatykaskader 0:e2da1a4652f5 220 mp3.terminateStream();
kudlatykaskader 0:e2da1a4652f5 221 }
kudlatykaskader 0:e2da1a4652f5 222 fclose(song); //close the file
kudlatykaskader 0:e2da1a4652f5 223 }
kudlatykaskader 0:e2da1a4652f5 224
kudlatykaskader 0:e2da1a4652f5 225
kudlatykaskader 0:e2da1a4652f5 226 void main_mp3 (void const *argument) {
kudlatykaskader 0:e2da1a4652f5 227
kudlatykaskader 0:e2da1a4652f5 228 // ------------------------------------------------------------------------
kudlatykaskader 0:e2da1a4652f5 229 // MP3 Initialising
kudlatykaskader 0:e2da1a4652f5 230 // ------------------------------------------------------------------------
kudlatykaskader 0:e2da1a4652f5 231 printf("Initialize mp3 Codec...\r\n");
kudlatykaskader 0:e2da1a4652f5 232 mp3.initialize();
kudlatykaskader 0:e2da1a4652f5 233 printf("mp3 Codec is initialized\r\n");
kudlatykaskader 0:e2da1a4652f5 234
kudlatykaskader 0:e2da1a4652f5 235 mp3.setVolume(VOLUME);
kudlatykaskader 0:e2da1a4652f5 236 Thread t(SetVolume , NULL, osPriorityNormal, (DEFAULT_STACK_SIZE));
kudlatykaskader 0:e2da1a4652f5 237
kudlatykaskader 0:e2da1a4652f5 238 // ------------------------------------------------------------------------
kudlatykaskader 0:e2da1a4652f5 239 // Play mp3 file
kudlatykaskader 0:e2da1a4652f5 240 // ------------------------------------------------------------------------
kudlatykaskader 0:e2da1a4652f5 241
kudlatykaskader 0:e2da1a4652f5 242 //while (1)
kudlatykaskader 0:e2da1a4652f5 243 {
kudlatykaskader 0:e2da1a4652f5 244 DIR *d;
kudlatykaskader 0:e2da1a4652f5 245 struct dirent *p;
kudlatykaskader 0:e2da1a4652f5 246 d = opendir(DIR_NAME);
kudlatykaskader 0:e2da1a4652f5 247 if (d != NULL) {
kudlatykaskader 0:e2da1a4652f5 248 while ((p = readdir(d)) != NULL) {
kudlatykaskader 0:e2da1a4652f5 249 static char str[160] = DIR_NAME;
kudlatykaskader 0:e2da1a4652f5 250
kudlatykaskader 0:e2da1a4652f5 251 //check extension
kudlatykaskader 0:e2da1a4652f5 252 char * extension =strrchr( p->d_name,'.') + 1;
kudlatykaskader 0:e2da1a4652f5 253 bool isAudioFile = false;
kudlatykaskader 0:e2da1a4652f5 254 if (strcmp(extension, "mp3") == 0)
kudlatykaskader 0:e2da1a4652f5 255 isAudioFile = true;
kudlatykaskader 0:e2da1a4652f5 256 else if (strcmp(extension, "MP3") == 0)
kudlatykaskader 0:e2da1a4652f5 257 isAudioFile = true;
kudlatykaskader 0:e2da1a4652f5 258 else if (strcmp(extension, "mp4") == 0)
kudlatykaskader 0:e2da1a4652f5 259 isAudioFile = true;
kudlatykaskader 0:e2da1a4652f5 260 else if (strcmp(extension, "MP4") == 0)
kudlatykaskader 0:e2da1a4652f5 261 isAudioFile = true;
kudlatykaskader 0:e2da1a4652f5 262 if (isAudioFile ) {
kudlatykaskader 0:e2da1a4652f5 263 printf("Now Playing: %s\r\n", p->d_name);
kudlatykaskader 0:e2da1a4652f5 264
kudlatykaskader 0:e2da1a4652f5 265 sprintf(str, "%s/%s", DIR_NAME, p->d_name);
kudlatykaskader 0:e2da1a4652f5 266 printf("Path %s\r\n", str);
kudlatykaskader 0:e2da1a4652f5 267
kudlatykaskader 0:e2da1a4652f5 268 playFile(str) ; /*** Play the mp3 file ***/
kudlatykaskader 0:e2da1a4652f5 269
kudlatykaskader 0:e2da1a4652f5 270 printf("End of song.\r\n");
kudlatykaskader 0:e2da1a4652f5 271 wait(1.0);
kudlatykaskader 0:e2da1a4652f5 272 } else {
kudlatykaskader 0:e2da1a4652f5 273 printf("File ignored. Extension: %s\r\n", extension);
kudlatykaskader 0:e2da1a4652f5 274 }
kudlatykaskader 0:e2da1a4652f5 275
kudlatykaskader 0:e2da1a4652f5 276 }
kudlatykaskader 0:e2da1a4652f5 277 closedir(d);
kudlatykaskader 0:e2da1a4652f5 278 } else {
kudlatykaskader 0:e2da1a4652f5 279 error("Could not open directory!");
kudlatykaskader 0:e2da1a4652f5 280 // break;
kudlatykaskader 0:e2da1a4652f5 281 }
kudlatykaskader 0:e2da1a4652f5 282
kudlatykaskader 0:e2da1a4652f5 283 }
kudlatykaskader 0:e2da1a4652f5 284 printf("Done.\r\n");
kudlatykaskader 0:e2da1a4652f5 285
kudlatykaskader 0:e2da1a4652f5 286 }