Sample application for vs1053b library (rev. lkw4hi)

Dependencies:   mbed

Revision:
1:62552e038f69
Parent:
0:e1919041e50b
Child:
2:8ef1e4409f20
--- a/main.cpp	Thu Dec 16 21:56:36 2010 +0000
+++ b/main.cpp	Fri Dec 24 23:56:28 2010 +0000
@@ -22,6 +22,7 @@
 
 
 #include "mbed.h"
+#include "defines.h"
 #include "VS1053.h"
 
 // Volume [ 0x0000 (loud) .. 0xFEFE (quiet) ]
@@ -29,7 +30,6 @@
 // Switch for local filesystem or SDCard
 #define USE_SDCARD
 
-#define DEBUG
 // ----------------------------------------------------------------------------
 //
 // Pin Assigenment for SDCard on Cool Components Workshop Board
@@ -83,45 +83,98 @@
 // Serial for Debug
 Serial pc(USBTX, USBRX);
 
+Ticker timer;
+Ticker timer2;
+
+DigitalIn _DREQ(p16);
+bool next = false;
+
+void statisticsOutput();
+
 void setVolume(void) {
     if (pc.readable())
     {
         unsigned char c = pc.getc();
-// scanf ("%x",&i);
-        if (c =='+')
-            mp3.setVolume(mp3.getVolume() + 0.5);
-        else if (c == '-')
-        {        
-            mp3.setVolume(mp3.getVolume() - 0.5);
-        }
-        else if (c =='a')
-        {            
-            mp3.setBalance(mp3.getBalance() + 0.5);
-        }
-        else if (c == 'y')
+// scanf ("%x",&i);                                 
+        switch (c)
         {
-            mp3.setBalance(mp3.getBalance() - 0.5);
-        } 
-        else if (c == '1')
-        {
-            mp3.setPlaySpeed(1);       
-        }
-        else if (c == '2')
-        {
-            mp3.setPlaySpeed(2);       
-        }
-        else if (c == '3')
-        {
-            mp3.setPlaySpeed(3);       
-        }
-        else if (c == '4')
-        {
-            mp3.setPlaySpeed(4);       
-        }             
+        case '1':
+        case '2':
+        case '3':
+        case '4':
+            mp3.setPlaySpeed(c - 48);
+            break;
+        case '+':    
+            mp3.setVolume(mp3.getVolume() + 0.5);
+            break;
+        case '-':    
+            mp3.setVolume(mp3.getVolume() - 0.5);
+            break;
+        case 'k':    
+            mp3.setVolume(mp3.getBalance() + 0.5);
+            break;
+        case 'l':    
+            mp3.setVolume(mp3.getBalance() - 0.5);
+            break;
+        case 'a':    
+            mp3.setTrebleFrequency(mp3.getTrebleFrequency() + 1000);
+            break;            
+        case 'y':    
+            mp3.setTrebleFrequency(mp3.getTrebleFrequency() - 1000);
+            break;            
+        case 's':    
+            mp3.setTrebleAmplitude(mp3.getTrebleAmplitude() - 1);
+            break;            
+        case 'x':    
+            mp3.setTrebleAmplitude(mp3.getTrebleAmplitude() + 1);
+            break;            
+        case 'd':    
+            mp3.setBassFrequency(mp3.getBassFrequency() + 10);
+            break;            
+        case 'c':    
+            mp3.setBassFrequency(mp3.getBassFrequency() - 10);
+            break;            
+        case 'f':    
+            mp3.setBassAmplitude(mp3.getBassAmplitude() - 1);
+            break;            
+        case 'v':    
+            mp3.setBassAmplitude(mp3.getBassAmplitude() + 1);
+            break;  
+        case 'z':                
+            timer.attach(&statisticsOutput, 1);
+            break;       
+        case 'u':                
+            timer.detach();
+            break;       
+        case 'i':                
+            statisticsOutput();
+            break;
+        case 'h':    
+            mp3.play();
+            break;  
+        case 'j':    
+            mp3.pause();
+            break;  
+        case 'n':    
+            next = true;
+            break;  
+        default:
+            break;
+        }    
     }
 }
 
-int main () {
+
+
+void statisticsOutput()
+{    
+    printf("Statistics\r\n");
+    printf("Buffer - Size: %i, Free: %i, Loaded: %i\r\n", BUFFER_SIZE, mp3.bufferFree(), mp3.bufferCount());
+    printf("DREQ: %#x\r\n", _DREQ.read()); 
+}
+
+int main () {        
+    
     // ------------------------------------------------------------------------
     //  MP3 Initialising
     // ------------------------------------------------------------------------
@@ -131,8 +184,7 @@
 
 
     mp3.setVolume(VOLUME);
-    pc.attach(setVolume);                    
-
+    pc.attach(&setVolume);                        
 
     // ------------------------------------------------------------------------
     //  Play mp3 file
@@ -168,7 +220,7 @@
                     
                     FILE *song;
             
-                    unsigned char array[4*1024];
+                    unsigned char array[2048];
                                    
                     song = fopen(str, "rb");
                     //song = fopen("/sd/Musik/01.mp3", "rb");
@@ -177,17 +229,35 @@
                         printf("Couldn't open %s\r\n", str);
                         continue;
                         //exit(1);
-                    }
-                
-                    while (!feof(song)) {
+                    }                                        
+                    
+                    int count = 0;
+                    bool test = true;
+                    
+                    while (!feof(song) && !next) {
                         int n=fread(&array, 1, sizeof(array), song);
-                        mp3.writeStream(array,n);
+                        while (mp3.bufferFree() < n) 
+                            ;                        
+                        mp3.bufferPutStream(array,n);                        
+                        if (count > 2 && test)
+                        {
+                            test = false;
+                            mp3.play();
+                        }
+                        count++;
+                    }                            
+                    if (next)
+                    {
+                        mp3.stop();
+                        next = false;
                     }
-                
-                    mp3.terminateStream();
+                    else
+                    {            
+                        mp3.terminateStream();
+                    }
                     fclose(song);  //close the file
                     
-                    printf("End of song.");
+                    printf("End of song.\r\n");
                     wait(1.0);
                 }
                 else