use VS1033(MP3 decoder) and UL024TF(TFTLCD)

Dependencies:   FastIO SDFileSystem TFTLCDwithFastIO TouchPanel VS1033 mbed

Fork of 11U68_MP3Player with TFTLCD by en 129

Files at this revision

API Documentation at this revision

Comitter:
nameless129
Date:
Thu Jul 16 18:18:00 2015 +0000
Parent:
4:28900cff8f48
Child:
6:74271fce2368
Commit message:
add vol control

Changed in this revision

VS1033.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/VS1033.lib	Thu Jul 16 12:43:08 2015 +0000
+++ b/VS1033.lib	Thu Jul 16 18:18:00 2015 +0000
@@ -1,1 +1,1 @@
-https://developer.mbed.org/users/nameless129/code/VS1033/#171effe49517
+https://developer.mbed.org/users/nameless129/code/VS1033/#1dd0ecaac8e5
--- a/main.cpp	Thu Jul 16 12:43:08 2015 +0000
+++ b/main.cpp	Thu Jul 16 18:18:00 2015 +0000
@@ -1,5 +1,6 @@
 #include "ili9328.h"
-#include <stdio.h>
+#include "stdio.h"
+#include "string.h"
 #include "SDFileSystem.h"
 #include "VS1053.h"
 #include "image.h"
@@ -15,11 +16,11 @@
 SDFileSystem sd(/*MOSI*/ P0_9, /*MISO*/ P0_8, /*SCK*/ P1_29, /*CS*/ P0_2, /*Mountpoint*/ "sd");
 VS1053       mp3(/*MOSI*/ P1_22 , /*MISO*/ P1_21, /*SCK*/ P1_20, /*CS*/ P1_23,
                  /*BSYNC*/ P2_17, /*DREQ*/ P2_16, /*RST*/ P2_18, /*SPI freq.*/ 10000000);
+Ticker Int100ms;
 
 Serial pc(P0_19,P0_18);
 #define SD_READ_BLOCK_SIZE (1024)
 
-
 #define BOTTON_PREV_XPOS    (15)
 #define BOTTON_PREV_YPOS    (170)
 #define BOTTON_PLAY_XPOS    (91)
@@ -99,6 +100,15 @@
      return result;
 }
 
+uint8_t     g_mp3Player_State = 0;
+uint16_t    g_mp3Player_Volume = 0;
+bool        gf_mp3Playwe_VolmeUpdate = 0;
+bool        gf_100ms = 0;
+
+void Int100msFunc()
+{
+    gf_100ms = 1;
+}
 
 int main()
 {
@@ -107,14 +117,11 @@
     size_t      mp3_ReadFileSize = 0;
     size_t      mp3_totalSizeSent=0;
     size_t      mp3_fileSize=0;
-    uint8_t     mp3Player_State = 0;
-    uint16_t    mp3Player_Volume = 0;
-    bool        f_mp3Playwe_VolmeUpdate = 0;
     bool        f_mp3Playwe_Playing = 0;
     uint8_t     buf[SD_READ_BLOCK_SIZE];
     char        str[100];
     int32_t     XReadPos = 0,YReadPos = 0;
-    bool        touchPanel_Touched = 0;
+    static bool touchPanel_Touched = 0;
                                           //Format,Xsize,Ysize,PixelData
     const bitmap_t img_button_play      = { RGB16, 60, 60, &bmp_button_play };
     const bitmap_t img_button_stop      = { RGB16, 60, 60, &bmp_button_stop };
@@ -122,9 +129,11 @@
     const bitmap_t img_button_prev      = { RGB16, 60, 60, &bmp_button_prev };
     const bitmap_t img_button_volup     = { RGB16, 60, 60, &bmp_button_volup };
     const bitmap_t img_button_voldown   = { RGB16, 60, 60, &bmp_button_voldown };
+    
+    pc.baud(921600);
+    printf("Power ON\r\n");
 
-    pc.baud(115200);
-    printf("Power ON\r\n");
+    Int100ms.attach_us(&Int100msFunc, 100000);
 
     //SD Init.(本来ならいらないけど、SDカードによっちゃもう1回リセットしないとダメポ
     sd.disk_initialize();
@@ -146,12 +155,20 @@
 
     lcd.SetBackground(COLOR_BLUE);
     lcd.FillScreen(-1);
-    lcd.SetFont( &TerminusFont );
+    lcd.SetFont( &TerminusBigFont );
 
-/*  for Caliblation
-    lcd.DrawCircle(40,40,10,COLOR_WHITE);
-    lcd.DrawCircle(280,200,10,COLOR_WHITE);
-*/
+  //for Caliblation
+    while(0)
+    {
+        int32_t     XReadPos = 0,YReadPos = 0;
+        lcd.DrawCircle(40,40,10,COLOR_WHITE);
+        lcd.DrawCircle(280,200,10,COLOR_WHITE);
+        XReadPos = getTouchPanelPosX();
+        YReadPos = getTouchPanelPosY();
+        printf("X:%d Y:%d\r\n",XReadPos,YReadPos);
+        wait_ms(500);
+    }
+
                     //Xpos, Ypos, ImageData(type:bitmap_t), Scale
     lcd.DrawBitmap( BOTTON_PREV_XPOS,    BOTTON_PREV_YPOS,    (const bitmap_t*)&img_button_prev, 1 );
     lcd.DrawBitmap( BOTTON_PLAY_XPOS,    BOTTON_PLAY_YPOS,    (const bitmap_t*)&img_button_play, 1 );
@@ -160,7 +177,67 @@
     lcd.DrawBitmap( BOTTON_VOLUP_XPOS,   BOTTON_VOLUP_YPOS,   (const bitmap_t*)&img_button_volup, 1 );
     lcd.DrawBitmap( BOTTON_VOLDOWN_XPOS, BOTTON_VOLDOWN_YPOS, (const bitmap_t*)&img_button_voldown, 1 );
 
-//mp3Player_Stateに対して↓
+////////////////////////////////////////////////////////////
+/*  SDCard GetFileList Section                            */
+////////////////////////////////////////////////////////////
+#define SD_MAX_FILENAME_LENGTH  (256)   //MAX 256
+#define SD_MAX_FILE_COUNT       (20)
+
+    char SDFileList[SD_MAX_FILE_COUNT][SD_MAX_FILENAME_LENGTH]={0};
+    char SDFileList_short[SD_MAX_FILE_COUNT][SD_MAX_FILENAME_LENGTH]={0};
+    char SDFileList_cnt = 0;
+    char mp3PlayingFileName[SD_MAX_FILENAME_LENGTH]={0};
+    uint8_t mp3PlayingFileNo = 0;
+    int i = 0;
+    DIR *d;
+    struct dirent *p;
+
+    d = opendir("/sd");
+    if ( d != NULL )
+    {
+        while ( (p = readdir(d)) != NULL )
+        {
+            char *ret;
+            ret = strstr(p->d_name,"System");   //System Vol..フォルダは除外
+            if(ret == 0)
+            {
+                sprintf((char *)(SDFileList_short[i]+0),"%s",(const char *)p->d_name);
+                sprintf((char *)(SDFileList[i]+0),"/sd/%s",(const char *)p->d_name);
+                i+=1;
+            }
+        }
+        SDFileList_cnt = i;
+    }
+    closedir(d);
+
+    for(i=0;i<SDFileList_cnt;i++)
+    {
+        sprintf(str,"%d:%s",i,SDFileList_short[i]);
+        lcd.Print( str, LEFT, i*28 ); // align text to center horizontally and use starndard colors
+        lcd.Print( "*", LEFT, 0 ); // align text to center horizontally and use starndard colors
+    }
+
+    mp3PlayingFileNo = 0;
+    sprintf(mp3PlayingFileName,"%s",SDFileList[mp3PlayingFileNo]);
+
+    printf("file count=%d\r\n",SDFileList_cnt);
+    printf("FirstPlayFile:%s\r\n",mp3PlayingFileName);
+    g_mp3Player_State = 0;
+    f_mp3Playwe_Playing = 0;
+    while(1)
+    {
+
+//////////////////////////////////////////////////////////////
+/*  TouchPanel GetStatas Section                            */
+//////////////////////////////////////////////////////////////
+    if(gf_100ms == 1)
+    {
+        XReadPos = getTouchPanelPosX();
+        YReadPos = getTouchPanelPosY();
+        gf_100ms = 0;
+    }
+
+//g_mp3Player_Stateに対して↓
 #define MP3_STATE_STOPPING      (0)
 #define MP3_STATE_STOPREQ       (1)
 #define MP3_STATE_PLAYREQ       (2)
@@ -168,21 +245,15 @@
 #define MP3_STATE_NEXTREQ       (4)
 #define MP3_STATE_PREVREQ       (5)
 #define MP3_STATE_VOLCHANGEREQ  (6)
-
-    while(1)
-    {
-//////////////////////////////////////////////////////////////
-/*  TouchPanel GetStatas Section                            */
-//////////////////////////////////////////////////////////////
-
-        XReadPos = getTouchPanelPosX();
-        YReadPos = getTouchPanelPosY();
+#define MP3_STATE_REPLAY        (7)
+#define MP3_STATE_FILECHANGE    (8)
 
         if( checkTouchBotton_prev(XReadPos,YReadPos) )
         {
             if(touchPanel_Touched == 0)
             {
-                mp3Player_State = MP3_STATE_PREVREQ;
+                printf("prev touch\r\n");
+                g_mp3Player_State = MP3_STATE_PREVREQ;
                 touchPanel_Touched = 1;
             }
         }
@@ -190,9 +261,10 @@
         {
             if(touchPanel_Touched == 0)
             {
-                if( (mp3Player_State != MP3_STATE_PLAYING) && (mp3Player_State != MP3_STATE_PLAYREQ) )
+                printf("play touch\r\n");
+                if( (g_mp3Player_State != MP3_STATE_PLAYING) && (g_mp3Player_State != MP3_STATE_PLAYREQ) )
                 {
-                    mp3Player_State = MP3_STATE_PLAYREQ;
+                    g_mp3Player_State = MP3_STATE_PLAYREQ;
                 }
                 touchPanel_Touched = 1;
             }
@@ -201,9 +273,10 @@
         {
             if(touchPanel_Touched == 0)
             {
-                if( (mp3Player_State != MP3_STATE_STOPPING) && (mp3Player_State != MP3_STATE_STOPREQ) )
+                printf("stop touch\r\n");
+                if( (g_mp3Player_State != MP3_STATE_STOPPING) && (g_mp3Player_State != MP3_STATE_STOPREQ) )
                 {
-                    mp3Player_State = MP3_STATE_STOPREQ;
+                    g_mp3Player_State = MP3_STATE_STOPREQ;
                 }
                 touchPanel_Touched = 1;
             }
@@ -212,7 +285,8 @@
         {
             if(touchPanel_Touched == 0)
             {
-                mp3Player_State = MP3_STATE_NEXTREQ;
+                printf("next touch\r\n");
+                g_mp3Player_State = MP3_STATE_NEXTREQ;
                 touchPanel_Touched = 1;
             }
         }
@@ -220,38 +294,41 @@
         {
             if(touchPanel_Touched == 0)
             {
-                if(mp3Player_Volume >= 6527)
+                printf("volup touch\r\n");
+                if(g_mp3Player_Volume >= 6527)
                 {
-                    mp3Player_Volume-=6527;
-                    f_mp3Playwe_VolmeUpdate = 1;
+                    g_mp3Player_Volume-=6527;
+                    gf_mp3Playwe_VolmeUpdate = 1;
                 }
                 touchPanel_Touched = 1;
             }
-
+    
         }
         else if( checkTouchBotton_voldown(XReadPos,YReadPos) )
         {
             if(touchPanel_Touched == 0)
             {
-                if(mp3Player_Volume <= 0xE57F )
+                printf("voldown touch\r\n");
+                if(g_mp3Player_Volume <= 0xE57F )
                 {
-                    mp3Player_Volume+=6527;
-                    f_mp3Playwe_VolmeUpdate = 1;
+                    g_mp3Player_Volume+=6527;
+                    gf_mp3Playwe_VolmeUpdate = 1;
                 }
                 touchPanel_Touched = 1;
             }
-            printf("VolDownTouched\r\n");
         }
         else //any botton not touched
         {
             touchPanel_Touched = 0;
         }
+
 //////////////////////////////////////////////////////////////
 /*  MP3 Player Control Section                              */
 //////////////////////////////////////////////////////////////
-        if(mp3Player_State == MP3_STATE_PLAYREQ)
+        if(g_mp3Player_State == MP3_STATE_PLAYREQ)
         {
-            fp = fopen("/sd/1.mp3", "rb");
+            printf("FileOpen:%s\r\n",mp3PlayingFileName);
+            fp = fopen(mp3PlayingFileName, "rb");
             SDFileOpenFailCnt = 0;
             while(!fp)
             {
@@ -264,7 +341,7 @@
                 }
                 printf("Fail file open n=%d\r\n",SDFileOpenFailCnt);
                 sd.disk_initialize();
-                fp = fopen("/sd/1.mp3", "rb");
+                fp = fopen(mp3PlayingFileName, "rb");
                 wait(1);
             }
 
@@ -277,15 +354,15 @@
             rewind(fp);
             clearerr(fp);     
             mp3_totalSizeSent = 0;
-            mp3Player_State = MP3_STATE_PLAYING;
+            g_mp3Player_State = MP3_STATE_PLAYING;
         }
-        if( mp3Player_State == MP3_STATE_PLAYING )
+        if( g_mp3Player_State == MP3_STATE_PLAYING )
         {
-            printf("totalSendSize:%d\r\n",mp3_totalSizeSent);
+//            printf("totalSendSize:%d\r\n",mp3_totalSizeSent);
 
             if(mp3_totalSizeSent>=mp3_fileSize) //play song end
             {
-                mp3Player_State = MP3_STATE_STOPREQ;
+                g_mp3Player_State = MP3_STATE_STOPREQ;
             }
             else                                //transmit from SDCard to VS1033
             {
@@ -294,7 +371,7 @@
                 f_mp3Playwe_Playing = 1;
             }
         }
-        if( mp3Player_State == MP3_STATE_STOPREQ )
+        if( (g_mp3Player_State == MP3_STATE_STOPREQ) || (g_mp3Player_State == MP3_STATE_REPLAY) )
         {
             uint16_t returnCode=0;
             uint16_t stopFailCnt = 0;
@@ -307,7 +384,7 @@
                 {
                     stopFailCnt++;
                 }
-                if(stopFailCnt >= 10)
+                if(stopFailCnt >= 20)
                 {
                     printf("ERROR! impossible of stop\r\nSystem STOP\r\n");
                     while(1);
@@ -316,14 +393,65 @@
             fclose(fp);
             fp = NULL;
             f_mp3Playwe_Playing = 0;
-            mp3Player_State = MP3_STATE_STOPPING;            
+            if(g_mp3Player_State == MP3_STATE_STOPREQ)
+            {
+                g_mp3Player_State = MP3_STATE_STOPPING;
+            }
+            if(g_mp3Player_State == MP3_STATE_REPLAY)
+            {
+                g_mp3Player_State = MP3_STATE_PLAYREQ;
+            }
         }
-        if( mp3Player_State == MP3_STATE_STOPPING )
+
+        if( g_mp3Player_State == MP3_STATE_STOPPING )
+        {
+            f_mp3Playwe_Playing = 0;
+        }
+
+        if( g_mp3Player_State == MP3_STATE_NEXTREQ )
         {
+            if( mp3PlayingFileNo >= (SDFileList_cnt -1) )
+            {
+                mp3PlayingFileNo = 0;
+            }
+            else
+            {
+                mp3PlayingFileNo+=1;
+            }
+            g_mp3Player_State = MP3_STATE_FILECHANGE;
         }
 
-        if( mp3Player_State == MP3_STATE_VOLCHANGEREQ )
+        if( g_mp3Player_State == MP3_STATE_PREVREQ )
+        {
+            if( mp3PlayingFileNo <= 0 )
+            {
+                mp3PlayingFileNo = (SDFileList_cnt - 1);
+            }
+            else
+            {
+                mp3PlayingFileNo-=1;
+            }
+            g_mp3Player_State = MP3_STATE_FILECHANGE;
+        }
+        if( g_mp3Player_State == MP3_STATE_FILECHANGE )
         {
+            printf("next:%d,%s\r\n",mp3PlayingFileNo,SDFileList[mp3PlayingFileNo]);
+            sprintf(mp3PlayingFileName,"%s",SDFileList[mp3PlayingFileNo]);
+            if(f_mp3Playwe_Playing == 1)
+            {
+                g_mp3Player_State = MP3_STATE_REPLAY;
+            }
+            else
+            {
+                g_mp3Player_State = MP3_STATE_STOPPING;
+            }
+        }
+
+        if( gf_mp3Playwe_VolmeUpdate == 1 )
+        {
+            mp3.VolControl(g_mp3Player_Volume);
+            gf_mp3Playwe_VolmeUpdate = 0;
+            printf("Vol:%d\r\n",g_mp3Player_Volume);
         }
     }    
 }