use VS1033(MP3 decoder) and UL024TF(TFTLCD)

Dependencies:   TFTLCDwithFastIO FastIO SDFileSystem TouchPanel VS1033 mbed

Revision:
3:67e97c846cec
Parent:
2:0090839c8276
Child:
4:28900cff8f48
--- a/main.cpp	Sun Jul 12 06:59:22 2015 +0000
+++ b/main.cpp	Thu Jul 16 11:40:58 2015 +0000
@@ -1,8 +1,10 @@
 #include "ili9328.h"
 #include <stdio.h>
-#include "mbed.h"
 #include "SDFileSystem.h"
 #include "VS1053.h"
+#include "image.h"
+#include "TouchPanel.h"
+#include "mbed.h"
 
 // prepare the data bus for writing commands and pixel data
 BusOut dataBus( P1_28,P2_3,P1_18,P1_24,P1_19,P1_26,P1_27,P1_25 ); // 16 pins
@@ -12,28 +14,128 @@
 
 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_16, /*DREQ*/ P2_17, /*RST*/ P2_18, /*SPI freq.*/ 10000000);
+                 /*BSYNC*/ P2_17, /*DREQ*/ P2_16, /*RST*/ P2_18, /*SPI freq.*/ 10000000);
+
+Serial pc(P0_19,P0_18);
+#define SD_READ_BLOCK_SIZE (1024)
 
 
-#define SD_READ_BLOCK_SIZE (1024)
+#define BOTTON_PREV_XPOS    (15)
+#define BOTTON_PREV_YPOS    (170)
+#define BOTTON_PLAY_XPOS    (91)
+#define BOTTON_PLAY_YPOS    (170)
+#define BOTTON_STOP_XPOS    (168)
+#define BOTTON_STOP_YPOS    (170)
+#define BOTTON_NEXT_XPOS    (245)
+#define BOTTON_NEXT_YPOS    (170)
+#define BOTTON_VOLUP_XPOS   (245)
+#define BOTTON_VOLUP_YPOS   (10)
+#define BOTTON_VOLDOWN_XPOS (245)
+#define BOTTON_VOLDOWN_YPOS (80)
+
+bool checkTouchBotton_prev(int32_t xpos,int32_t ypos)
+{
+    bool result = 0;
+    if( (xpos >= BOTTON_PREV_XPOS && xpos <= (BOTTON_PREV_XPOS+60) ) &&
+         (ypos >= BOTTON_PREV_YPOS && ypos <= (BOTTON_PREV_YPOS+60)) )
+     {
+         result = 1;
+     }
+     return result;
+}
+
+bool checkTouchBotton_play(int32_t xpos,int32_t ypos)
+{
+    bool result = 0;
+    if( (xpos >= BOTTON_PLAY_XPOS && xpos <= (BOTTON_PLAY_XPOS+60) ) &&
+         (ypos >= BOTTON_PLAY_YPOS && ypos <= (BOTTON_PLAY_YPOS+60)) )
+     {
+         result = 1;
+     }
+     return result;
+}
+
+bool checkTouchBotton_stop(int32_t xpos,int32_t ypos)
+{
+    bool result = 0;
+    if( (xpos >= BOTTON_STOP_XPOS && xpos <= (BOTTON_STOP_XPOS+60) ) &&
+         (ypos >= BOTTON_STOP_XPOS && ypos <= (BOTTON_STOP_XPOS+60)) )
+     {
+         result = 1;
+     }
+     return result;
+}
+
+bool checkTouchBotton_next(int32_t xpos,int32_t ypos)
+{
+    bool result = 0;
+    if( (xpos >= BOTTON_NEXT_XPOS && xpos <= (BOTTON_NEXT_XPOS+60) ) &&
+         (ypos >= BOTTON_NEXT_YPOS && ypos <= (BOTTON_NEXT_YPOS+60)) )
+     {
+         result = 1;
+     }
+     return result;
+}
+
+bool checkTouchBotton_volup(int32_t xpos,int32_t ypos)
+{
+    bool result = 0;
+    if( (xpos >= BOTTON_VOLUP_XPOS && xpos <= (BOTTON_VOLUP_XPOS+60) ) &&
+         (ypos >= BOTTON_VOLUP_YPOS && ypos <= (BOTTON_VOLUP_YPOS+60)) )
+     {
+         result = 1;
+     }
+     return result;
+}
+
+bool checkTouchBotton_voldown(int32_t xpos,int32_t ypos)
+{
+    bool result = 0;
+    if( (xpos >= BOTTON_VOLDOWN_XPOS && xpos <= (BOTTON_VOLDOWN_XPOS+60) ) &&
+         (ypos >= BOTTON_VOLDOWN_YPOS && ypos <= (BOTTON_VOLDOWN_YPOS+60)) )
+     {
+         result = 1;
+     }
+     return result;
+}
+
 
 int main()
 {
     static FILE *fp = NULL;
-    size_t      sizeRead = 0;
-    size_t      totalSizeSent=0;
-    size_t      fileSize=0;
+    uint8_t     SDFileOpenFailCnt = 0;
+    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;
+                                          //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 };
+    const bitmap_t img_button_next      = { RGB16, 60, 60, &bmp_button_next };
+    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(115200);
     printf("Power ON\r\n");
 
+    //SD Init.(本来ならいらないけど、SDカードによっちゃもう1回リセットしないとダメポ
+    sd.disk_initialize();
+
     //LCD Init.
     lcd.Initialize(LANDSCAPE,RGB16);
 
 /* for sine test mode */
 //    mp3.sine_test_activate(SineWave_10k);
 //    while(1);
-    
+
     //MP3 decoder Init.
     mp3.hardwareReset();
     mp3.sci_init();
@@ -45,39 +147,173 @@
     lcd.SetBackground(COLOR_BLUE);
     lcd.FillScreen(-1);
     lcd.SetFont( &TerminusFont );
-    lcd.Print( "STOP:XXXXXXXX", CENTER, 25 ); // align text to center horizontally and use starndard colors
-
-    fp = fopen("/sd/2.mp3", "rb");
 
-    //Get file size
-    fseek( fp, 0, SEEK_END );
-    fileSize = ftell( fp );
-    printf("file size:%d\r\n",fileSize);
+/*  for Caliblation
+    lcd.DrawCircle(40,40,10,COLOR_WHITE);
+    lcd.DrawCircle(280,200,10,COLOR_WHITE);
+*/
+                    //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 );
+    lcd.DrawBitmap( BOTTON_STOP_XPOS,    BOTTON_STOP_YPOS,    (const bitmap_t*)&img_button_stop, 1 );
+    lcd.DrawBitmap( BOTTON_NEXT_XPOS,    BOTTON_STOP_YPOS,    (const bitmap_t*)&img_button_next, 1 );
+    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 );
 
-    //move file pointer to top.
-    rewind(fp);
+//mp3Player_Stateに対して↓
+#define MP3_STATE_STOPPING      (0)
+#define MP3_STATE_STOPREQ       (1)
+#define MP3_STATE_PLAYREQ       (2)
+#define MP3_STATE_PLAYING       (3)
+#define MP3_STATE_NEXTREQ       (4)
+#define MP3_STATE_PREVREQ       (5)
+#define MP3_STATE_VOLCHANGEREQ  (6)
 
-    if (fp) {
-        clearerr(fp);     
-        totalSizeSent = 0;
-    }
     while(1)
     {
-        if(totalSizeSent>=fileSize)
-        {   // Close when the track reaches the end
+//////////////////////////////////////////////////////////////
+/*  TouchPanel GetStatas Section                            */
+//////////////////////////////////////////////////////////////
+
+        XReadPos = getTouchPanelPosX();
+        YReadPos = getTouchPanelPosY();
+
+        if( checkTouchBotton_prev(XReadPos,YReadPos) )
+        {
+            if(touchPanel_Touched == 0)
+            {
+                mp3Player_State = MP3_STATE_PREVREQ;
+                touchPanel_Touched = 1;
+            }
+        }
+        else if( checkTouchBotton_play(XReadPos,YReadPos) )
+        {
+            if(touchPanel_Touched == 0)
+            {
+                if( (mp3Player_State != MP3_STATE_PLAYING) && (mp3Player_State != MP3_STATE_PLAYREQ) )
+                {
+                    mp3Player_State = MP3_STATE_PLAYREQ;
+                }
+                touchPanel_Touched = 1;
+            }
+        }
+        else if( checkTouchBotton_stop(XReadPos,YReadPos) )
+        {
+            if(touchPanel_Touched == 0)
+            {
+                if( (mp3Player_State != MP3_STATE_STOPPING) && (mp3Player_State != MP3_STATE_STOPREQ) )
+                {
+                    mp3Player_State = MP3_STATE_STOPREQ;
+                }
+                touchPanel_Touched = 1;
+            }
+        }
+        else if( checkTouchBotton_next(XReadPos,YReadPos) )
+        {
+            if(touchPanel_Touched == 0)
+            {
+                mp3Player_State = MP3_STATE_NEXTREQ;
+                touchPanel_Touched = 1;
+            }
+        }
+        else if( checkTouchBotton_volup(XReadPos,YReadPos) )
+        {
+            if(touchPanel_Touched == 0)
+            {
+                if(mp3Player_Volume >= 6527)
+                {
+                    mp3Player_Volume-=6527;
+                    f_mp3Playwe_VolmeUpdate = 1;
+                }
+                touchPanel_Touched = 1;
+            }
+
+        }
+        else if( checkTouchBotton_voldown(XReadPos,YReadPos) )
+        {
+            if(touchPanel_Touched == 0)
+            {
+                if(mp3Player_Volume <= 0xE57F )
+                {
+                    mp3Player_Volume+=6527;
+                    f_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)
+        {
+            printf("state:%d\r\n",mp3Player_State);
+            fp = fopen("/sd/1.mp3", "rb");
+            SDFileOpenFailCnt = 0;
+            while(!fp)
+            {
+                SDFileOpenFailCnt+=1;
+                if(SDFileOpenFailCnt >= 3)
+                {
+                    printf("Fail SD init\r\n");
+                    printf("System Stop.\r\n");
+                    while(1);
+                }
+                printf("Fail file open n=%d\r\n",SDFileOpenFailCnt);
+                sd.disk_initialize();
+                fp = fopen("/sd/1.mp3", "rb");
+                wait(1);
+            }
+
+            //Get file size
+            fseek( fp, 0, SEEK_END );
+            mp3_fileSize = ftell( fp );
+            printf("FileOpen. size=%dbit\r\n",mp3_fileSize);
+    
+            //move file pointer to top.
+            rewind(fp);
+            clearerr(fp);     
+            mp3_totalSizeSent = 0;
+            mp3Player_State = MP3_STATE_PLAYING;
+        }
+        if( mp3Player_State == MP3_STATE_PLAYING )
+        {
+            printf("state:%d\r\n",mp3Player_State);
+            printf("totalSendSize:%d\r\n",mp3_totalSizeSent);
+
+            if(mp3_totalSizeSent>=mp3_fileSize) //play song end
+            {
+                mp3Player_State = MP3_STATE_STOPREQ;
+            }
+            else                                //transmit from SDCard to VS1033
+            {
+                mp3_ReadFileSize = fread(buf, sizeof(uint8_t), SD_READ_BLOCK_SIZE, fp);
+                mp3_totalSizeSent += mp3.sendDataBlock(buf, mp3_ReadFileSize);
+                f_mp3Playwe_Playing = 1;
+            }
+        }
+        if( mp3Player_State == MP3_STATE_STOPREQ )
+        {
+            printf("state:%d\r\n",mp3Player_State);
             mp3.stop();
             fclose(fp);
             fp = NULL;
+            f_mp3Playwe_Playing = 0;
             printf("stop\r\n");
-            while(1)
-            {
-            }
+            mp3Player_State = MP3_STATE_STOPPING;            
         }
-        else
+        if( mp3Player_State == MP3_STATE_STOPPING )
         {
-            sizeRead = fread(buf, sizeof(uint8_t), SD_READ_BLOCK_SIZE, fp);
-            totalSizeSent += mp3.sendDataBlock(buf, sizeRead);
-            //printf("total %d Send %d\r\n",totalSizeSent,sizeRead);
+            printf("state:%d\r\n",mp3Player_State);
+        }
+
+        if( mp3Player_State == MP3_STATE_VOLCHANGEREQ )
+        {
+            printf("state:%d\r\n",mp3Player_State);
         }
     }    
 }