use VS1033(MP3 decoder) and UL024TF(TFTLCD)

Dependencies:   FastIO SDFileSystem TFTLCDwithFastIO TouchPanel VS1033 mbed

Fork of 11U68_MP3Player with TFTLCD by en 129

Committer:
nameless129
Date:
Fri Jul 24 11:06:18 2015 +0000
Revision:
7:fc65d965a569
Parent:
6:74271fce2368
Child:
8:198b69e78c39
change to O3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nameless129 7:fc65d965a569 1 #pragma O3
nameless129 7:fc65d965a569 2
nameless129 0:5f0e931ae677 3 #include "ili9328.h"
nameless129 5:a493361aead2 4 #include "stdio.h"
nameless129 5:a493361aead2 5 #include "string.h"
nameless129 2:0090839c8276 6 #include "SDFileSystem.h"
nameless129 2:0090839c8276 7 #include "VS1053.h"
nameless129 3:67e97c846cec 8 #include "image.h"
nameless129 3:67e97c846cec 9 #include "TouchPanel.h"
nameless129 3:67e97c846cec 10 #include "mbed.h"
nameless129 2:0090839c8276 11
nameless129 0:5f0e931ae677 12 // prepare the data bus for writing commands and pixel data
nameless129 0:5f0e931ae677 13 BusOut dataBus( P1_28,P2_3,P1_18,P1_24,P1_19,P1_26,P1_27,P1_25 ); // 16 pins
nameless129 0:5f0e931ae677 14 // create the lcd instance
nameless129 0:5f0e931ae677 15 //(PinName CS, PinName RESET, PinName RS, PinName WR, BusOut *DATA_PORT, PinName BL=NC, PinName RD=NC, backlight_t blType=Constant, float defaultBackLightLevel=1.0)
nameless129 0:5f0e931ae677 16 ILI9328_LCD lcd( P0_12, P0_11, P0_13, P0_14, &dataBus, NC, P1_9 ); // control pins and data bus
nameless129 2:0090839c8276 17
nameless129 2:0090839c8276 18 SDFileSystem sd(/*MOSI*/ P0_9, /*MISO*/ P0_8, /*SCK*/ P1_29, /*CS*/ P0_2, /*Mountpoint*/ "sd");
nameless129 2:0090839c8276 19 VS1053 mp3(/*MOSI*/ P1_22 , /*MISO*/ P1_21, /*SCK*/ P1_20, /*CS*/ P1_23,
nameless129 7:fc65d965a569 20 /*BSYNC*/ P2_17, /*DREQ*/ P2_16, /*RST*/ P2_18, /*SPI freq.*/ 5000000);
nameless129 5:a493361aead2 21 Ticker Int100ms;
nameless129 3:67e97c846cec 22
nameless129 3:67e97c846cec 23 Serial pc(P0_19,P0_18);
nameless129 3:67e97c846cec 24 #define SD_READ_BLOCK_SIZE (1024)
nameless129 2:0090839c8276 25
nameless129 3:67e97c846cec 26 #define BOTTON_PREV_XPOS (15)
nameless129 7:fc65d965a569 27 #define BOTTON_PREV_YPOS (180)
nameless129 3:67e97c846cec 28 #define BOTTON_PLAY_XPOS (91)
nameless129 7:fc65d965a569 29 #define BOTTON_PLAY_YPOS (180)
nameless129 3:67e97c846cec 30 #define BOTTON_STOP_XPOS (168)
nameless129 7:fc65d965a569 31 #define BOTTON_STOP_YPOS (180)
nameless129 3:67e97c846cec 32 #define BOTTON_NEXT_XPOS (245)
nameless129 7:fc65d965a569 33 #define BOTTON_NEXT_YPOS (180)
nameless129 3:67e97c846cec 34 #define BOTTON_VOLUP_XPOS (245)
nameless129 3:67e97c846cec 35 #define BOTTON_VOLUP_YPOS (10)
nameless129 3:67e97c846cec 36 #define BOTTON_VOLDOWN_XPOS (245)
nameless129 3:67e97c846cec 37 #define BOTTON_VOLDOWN_YPOS (80)
nameless129 3:67e97c846cec 38
nameless129 3:67e97c846cec 39 bool checkTouchBotton_prev(int32_t xpos,int32_t ypos)
nameless129 3:67e97c846cec 40 {
nameless129 3:67e97c846cec 41 bool result = 0;
nameless129 6:74271fce2368 42 if( ( (xpos >= BOTTON_PREV_XPOS+5) && (xpos <= BOTTON_PREV_XPOS+55) ) &&
nameless129 6:74271fce2368 43 ( (ypos >= BOTTON_PREV_YPOS+5) && (ypos <= BOTTON_PREV_YPOS+55) ) )
nameless129 3:67e97c846cec 44 {
nameless129 3:67e97c846cec 45 result = 1;
nameless129 3:67e97c846cec 46 }
nameless129 3:67e97c846cec 47 return result;
nameless129 3:67e97c846cec 48 }
nameless129 3:67e97c846cec 49
nameless129 3:67e97c846cec 50 bool checkTouchBotton_play(int32_t xpos,int32_t ypos)
nameless129 3:67e97c846cec 51 {
nameless129 3:67e97c846cec 52 bool result = 0;
nameless129 6:74271fce2368 53 if( ( (xpos >= BOTTON_PLAY_XPOS+5) && (xpos <= BOTTON_PLAY_XPOS+55) ) &&
nameless129 6:74271fce2368 54 ( (ypos >= BOTTON_PLAY_YPOS+5) && (ypos <= BOTTON_PLAY_YPOS+55) ) )
nameless129 3:67e97c846cec 55 {
nameless129 3:67e97c846cec 56 result = 1;
nameless129 3:67e97c846cec 57 }
nameless129 3:67e97c846cec 58 return result;
nameless129 3:67e97c846cec 59 }
nameless129 3:67e97c846cec 60
nameless129 3:67e97c846cec 61 bool checkTouchBotton_stop(int32_t xpos,int32_t ypos)
nameless129 3:67e97c846cec 62 {
nameless129 3:67e97c846cec 63 bool result = 0;
nameless129 6:74271fce2368 64 if( ( (xpos >= BOTTON_STOP_XPOS+5) && (xpos <= BOTTON_STOP_XPOS+55) ) &&
nameless129 6:74271fce2368 65 ( (ypos >= BOTTON_STOP_XPOS+5) && (ypos <= BOTTON_STOP_XPOS+55) ) )
nameless129 3:67e97c846cec 66 {
nameless129 3:67e97c846cec 67 result = 1;
nameless129 3:67e97c846cec 68 }
nameless129 3:67e97c846cec 69 return result;
nameless129 3:67e97c846cec 70 }
nameless129 3:67e97c846cec 71
nameless129 3:67e97c846cec 72 bool checkTouchBotton_next(int32_t xpos,int32_t ypos)
nameless129 3:67e97c846cec 73 {
nameless129 3:67e97c846cec 74 bool result = 0;
nameless129 6:74271fce2368 75 if( ( (xpos >= BOTTON_NEXT_XPOS+5) && (xpos <= BOTTON_NEXT_XPOS+55) ) &&
nameless129 6:74271fce2368 76 ( (ypos >= BOTTON_NEXT_YPOS+5) && (ypos <= BOTTON_NEXT_YPOS+55) ) )
nameless129 3:67e97c846cec 77 {
nameless129 3:67e97c846cec 78 result = 1;
nameless129 3:67e97c846cec 79 }
nameless129 3:67e97c846cec 80 return result;
nameless129 3:67e97c846cec 81 }
nameless129 3:67e97c846cec 82
nameless129 3:67e97c846cec 83 bool checkTouchBotton_volup(int32_t xpos,int32_t ypos)
nameless129 3:67e97c846cec 84 {
nameless129 3:67e97c846cec 85 bool result = 0;
nameless129 6:74271fce2368 86 if( ( (xpos >= BOTTON_VOLUP_XPOS+5) && (xpos <= BOTTON_VOLUP_XPOS+55) ) &&
nameless129 6:74271fce2368 87 ( (ypos >= BOTTON_VOLUP_YPOS+5) && (ypos <= BOTTON_VOLUP_YPOS+55) ) )
nameless129 3:67e97c846cec 88 {
nameless129 3:67e97c846cec 89 result = 1;
nameless129 3:67e97c846cec 90 }
nameless129 3:67e97c846cec 91 return result;
nameless129 3:67e97c846cec 92 }
nameless129 3:67e97c846cec 93
nameless129 3:67e97c846cec 94 bool checkTouchBotton_voldown(int32_t xpos,int32_t ypos)
nameless129 3:67e97c846cec 95 {
nameless129 3:67e97c846cec 96 bool result = 0;
nameless129 6:74271fce2368 97 if( ( (xpos >= BOTTON_VOLDOWN_XPOS+5) && (xpos <= BOTTON_VOLDOWN_XPOS+55) ) &&
nameless129 6:74271fce2368 98 ( (ypos >= BOTTON_VOLDOWN_YPOS+5) && (ypos <= BOTTON_VOLDOWN_YPOS+55) ) )
nameless129 3:67e97c846cec 99 {
nameless129 3:67e97c846cec 100 result = 1;
nameless129 3:67e97c846cec 101 }
nameless129 3:67e97c846cec 102 return result;
nameless129 3:67e97c846cec 103 }
nameless129 3:67e97c846cec 104
nameless129 6:74271fce2368 105 #define TOUCHPANEL_BOTTON_TOUCH_STOP (0)
nameless129 6:74271fce2368 106 #define TOUCHPANEL_BOTTON_TOUCH_PLAY (1)
nameless129 6:74271fce2368 107 #define TOUCHPANEL_BOTTON_TOUCH_NEXT (2)
nameless129 6:74271fce2368 108 #define TOUCHPANEL_BOTTON_TOUCH_PREV (3)
nameless129 6:74271fce2368 109 #define TOUCHPANEL_BOTTON_TOUCH_VOLUP (4)
nameless129 6:74271fce2368 110 #define TOUCHPANEL_BOTTON_TOUCH_VOLDOWN (5)
nameless129 6:74271fce2368 111 #define TOUCHPANEL_BOTTON_NOT_TOUCH (-1)
nameless129 6:74271fce2368 112 #define TOUCHPANEL_OTHER_TOUCH (-2)
nameless129 6:74271fce2368 113
nameless129 6:74271fce2368 114 int8_t detectTouchBotton(int32_t xpos,int32_t ypos)
nameless129 6:74271fce2368 115 {
nameless129 6:74271fce2368 116 int8_t result = 0;
nameless129 6:74271fce2368 117
nameless129 6:74271fce2368 118 if( checkTouchBotton_stop(xpos,ypos) )
nameless129 6:74271fce2368 119 {
nameless129 6:74271fce2368 120 result = TOUCHPANEL_BOTTON_TOUCH_STOP;
nameless129 6:74271fce2368 121 }
nameless129 6:74271fce2368 122 else if( checkTouchBotton_play(xpos,ypos) )
nameless129 6:74271fce2368 123 {
nameless129 6:74271fce2368 124 result = TOUCHPANEL_BOTTON_TOUCH_PLAY;
nameless129 6:74271fce2368 125 }
nameless129 6:74271fce2368 126 else if( checkTouchBotton_prev(xpos,ypos) )
nameless129 6:74271fce2368 127 {
nameless129 6:74271fce2368 128 result = TOUCHPANEL_BOTTON_TOUCH_PREV;
nameless129 6:74271fce2368 129 }
nameless129 6:74271fce2368 130 else if( checkTouchBotton_next(xpos,ypos) )
nameless129 6:74271fce2368 131 {
nameless129 6:74271fce2368 132 result = TOUCHPANEL_BOTTON_TOUCH_NEXT;
nameless129 6:74271fce2368 133 }
nameless129 6:74271fce2368 134 else if( checkTouchBotton_volup(xpos,ypos) )
nameless129 6:74271fce2368 135 {
nameless129 6:74271fce2368 136 result = TOUCHPANEL_BOTTON_TOUCH_VOLUP;
nameless129 6:74271fce2368 137 }
nameless129 6:74271fce2368 138 else if( checkTouchBotton_voldown(xpos,ypos) )
nameless129 6:74271fce2368 139 {
nameless129 6:74271fce2368 140 result = TOUCHPANEL_BOTTON_TOUCH_VOLDOWN;
nameless129 6:74271fce2368 141 }
nameless129 6:74271fce2368 142 else if( (xpos == -1) || (ypos == -1) )
nameless129 6:74271fce2368 143 {
nameless129 6:74271fce2368 144 result = TOUCHPANEL_BOTTON_NOT_TOUCH;
nameless129 6:74271fce2368 145 }
nameless129 6:74271fce2368 146 else
nameless129 6:74271fce2368 147 {
nameless129 6:74271fce2368 148 result = TOUCHPANEL_OTHER_TOUCH;
nameless129 6:74271fce2368 149 }
nameless129 6:74271fce2368 150
nameless129 6:74271fce2368 151 return result;
nameless129 6:74271fce2368 152 }
nameless129 6:74271fce2368 153
nameless129 5:a493361aead2 154 uint8_t g_mp3Player_State = 0;
nameless129 5:a493361aead2 155 uint16_t g_mp3Player_Volume = 0;
nameless129 5:a493361aead2 156 bool gf_mp3Playwe_VolmeUpdate = 0;
nameless129 6:74271fce2368 157 bool gf_TimerInt = 0;
nameless129 5:a493361aead2 158
nameless129 5:a493361aead2 159 void Int100msFunc()
nameless129 5:a493361aead2 160 {
nameless129 6:74271fce2368 161 gf_TimerInt = 1;
nameless129 5:a493361aead2 162 }
nameless129 2:0090839c8276 163
nameless129 0:5f0e931ae677 164 int main()
nameless129 0:5f0e931ae677 165 {
nameless129 2:0090839c8276 166 static FILE *fp = NULL;
nameless129 3:67e97c846cec 167 uint8_t SDFileOpenFailCnt = 0;
nameless129 3:67e97c846cec 168 size_t mp3_ReadFileSize = 0;
nameless129 3:67e97c846cec 169 size_t mp3_totalSizeSent=0;
nameless129 3:67e97c846cec 170 size_t mp3_fileSize=0;
nameless129 3:67e97c846cec 171 bool f_mp3Playwe_Playing = 0;
nameless129 2:0090839c8276 172 uint8_t buf[SD_READ_BLOCK_SIZE];
nameless129 3:67e97c846cec 173 char str[100];
nameless129 3:67e97c846cec 174 int32_t XReadPos = 0,YReadPos = 0;
nameless129 6:74271fce2368 175 bool touchPanel_Touched = 0;
nameless129 7:fc65d965a569 176 uint32_t totalPlay = 0;
nameless129 7:fc65d965a569 177 int dot1_FileSize = 0;
nameless129 7:fc65d965a569 178 int dot_XPos = 0,old_dot_XPos = 0;
nameless129 3:67e97c846cec 179 //Format,Xsize,Ysize,PixelData
nameless129 3:67e97c846cec 180 const bitmap_t img_button_play = { RGB16, 60, 60, &bmp_button_play };
nameless129 3:67e97c846cec 181 const bitmap_t img_button_stop = { RGB16, 60, 60, &bmp_button_stop };
nameless129 3:67e97c846cec 182 const bitmap_t img_button_next = { RGB16, 60, 60, &bmp_button_next };
nameless129 3:67e97c846cec 183 const bitmap_t img_button_prev = { RGB16, 60, 60, &bmp_button_prev };
nameless129 6:74271fce2368 184 // const bitmap_t img_button_volup = { RGB16, 60, 60, &bmp_button_volup };
nameless129 6:74271fce2368 185 // const bitmap_t img_button_voldown = { RGB16, 60, 60, &bmp_button_voldown };
nameless129 5:a493361aead2 186
nameless129 5:a493361aead2 187 pc.baud(921600);
nameless129 5:a493361aead2 188 printf("Power ON\r\n");
nameless129 2:0090839c8276 189
nameless129 5:a493361aead2 190 Int100ms.attach_us(&Int100msFunc, 100000);
nameless129 2:0090839c8276 191
nameless129 3:67e97c846cec 192 //SD Init.(本来ならいらないけど、SDカードによっちゃもう1回リセットしないとダメポ
nameless129 3:67e97c846cec 193 sd.disk_initialize();
nameless129 3:67e97c846cec 194
nameless129 2:0090839c8276 195 //LCD Init.
nameless129 0:5f0e931ae677 196 lcd.Initialize(LANDSCAPE,RGB16);
nameless129 2:0090839c8276 197
nameless129 2:0090839c8276 198 /* for sine test mode */
nameless129 2:0090839c8276 199 // mp3.sine_test_activate(SineWave_10k);
nameless129 2:0090839c8276 200 // while(1);
nameless129 3:67e97c846cec 201
nameless129 2:0090839c8276 202 //MP3 decoder Init.
nameless129 2:0090839c8276 203 mp3.hardwareReset();
nameless129 2:0090839c8276 204 mp3.sci_init();
nameless129 2:0090839c8276 205 mp3.sdi_init();
nameless129 2:0090839c8276 206 wait(0.1);
nameless129 2:0090839c8276 207
nameless129 2:0090839c8276 208 printf("init CMPL.\r\n");
nameless129 2:0090839c8276 209
nameless129 0:5f0e931ae677 210 lcd.SetBackground(COLOR_BLUE);
nameless129 0:5f0e931ae677 211 lcd.FillScreen(-1);
nameless129 5:a493361aead2 212 lcd.SetFont( &TerminusBigFont );
nameless129 2:0090839c8276 213
nameless129 5:a493361aead2 214 //for Caliblation
nameless129 5:a493361aead2 215 while(0)
nameless129 5:a493361aead2 216 {
nameless129 5:a493361aead2 217 int32_t XReadPos = 0,YReadPos = 0;
nameless129 5:a493361aead2 218 lcd.DrawCircle(40,40,10,COLOR_WHITE);
nameless129 5:a493361aead2 219 lcd.DrawCircle(280,200,10,COLOR_WHITE);
nameless129 5:a493361aead2 220 XReadPos = getTouchPanelPosX();
nameless129 5:a493361aead2 221 YReadPos = getTouchPanelPosY();
nameless129 5:a493361aead2 222 printf("X:%d Y:%d\r\n",XReadPos,YReadPos);
nameless129 5:a493361aead2 223 wait_ms(500);
nameless129 5:a493361aead2 224 }
nameless129 5:a493361aead2 225
nameless129 3:67e97c846cec 226 //Xpos, Ypos, ImageData(type:bitmap_t), Scale
nameless129 3:67e97c846cec 227 lcd.DrawBitmap( BOTTON_PREV_XPOS, BOTTON_PREV_YPOS, (const bitmap_t*)&img_button_prev, 1 );
nameless129 3:67e97c846cec 228 lcd.DrawBitmap( BOTTON_PLAY_XPOS, BOTTON_PLAY_YPOS, (const bitmap_t*)&img_button_play, 1 );
nameless129 3:67e97c846cec 229 lcd.DrawBitmap( BOTTON_STOP_XPOS, BOTTON_STOP_YPOS, (const bitmap_t*)&img_button_stop, 1 );
nameless129 3:67e97c846cec 230 lcd.DrawBitmap( BOTTON_NEXT_XPOS, BOTTON_STOP_YPOS, (const bitmap_t*)&img_button_next, 1 );
nameless129 6:74271fce2368 231 // lcd.DrawBitmap( BOTTON_VOLUP_XPOS, BOTTON_VOLUP_YPOS, (const bitmap_t*)&img_button_volup, 1 );
nameless129 6:74271fce2368 232 // lcd.DrawBitmap( BOTTON_VOLDOWN_XPOS, BOTTON_VOLDOWN_YPOS, (const bitmap_t*)&img_button_voldown, 1 );
nameless129 2:0090839c8276 233
nameless129 5:a493361aead2 234 ////////////////////////////////////////////////////////////
nameless129 5:a493361aead2 235 /* SDCard GetFileList Section */
nameless129 5:a493361aead2 236 ////////////////////////////////////////////////////////////
nameless129 5:a493361aead2 237 #define SD_MAX_FILENAME_LENGTH (256) //MAX 256
nameless129 5:a493361aead2 238 #define SD_MAX_FILE_COUNT (20)
nameless129 5:a493361aead2 239
nameless129 5:a493361aead2 240 char SDFileList[SD_MAX_FILE_COUNT][SD_MAX_FILENAME_LENGTH]={0};
nameless129 5:a493361aead2 241 char SDFileList_short[SD_MAX_FILE_COUNT][SD_MAX_FILENAME_LENGTH]={0};
nameless129 5:a493361aead2 242 char SDFileList_cnt = 0;
nameless129 5:a493361aead2 243 char mp3PlayingFileName[SD_MAX_FILENAME_LENGTH]={0};
nameless129 5:a493361aead2 244 uint8_t mp3PlayingFileNo = 0;
nameless129 5:a493361aead2 245 int i = 0;
nameless129 5:a493361aead2 246 DIR *d;
nameless129 5:a493361aead2 247 struct dirent *p;
nameless129 5:a493361aead2 248
nameless129 5:a493361aead2 249 d = opendir("/sd");
nameless129 5:a493361aead2 250 if ( d != NULL )
nameless129 5:a493361aead2 251 {
nameless129 5:a493361aead2 252 while ( (p = readdir(d)) != NULL )
nameless129 5:a493361aead2 253 {
nameless129 5:a493361aead2 254 char *ret;
nameless129 5:a493361aead2 255 ret = strstr(p->d_name,"System"); //System Vol..フォルダは除外
nameless129 5:a493361aead2 256 if(ret == 0)
nameless129 5:a493361aead2 257 {
nameless129 5:a493361aead2 258 sprintf((char *)(SDFileList_short[i]+0),"%s",(const char *)p->d_name);
nameless129 5:a493361aead2 259 sprintf((char *)(SDFileList[i]+0),"/sd/%s",(const char *)p->d_name);
nameless129 5:a493361aead2 260 i+=1;
nameless129 5:a493361aead2 261 }
nameless129 5:a493361aead2 262 }
nameless129 5:a493361aead2 263 SDFileList_cnt = i;
nameless129 5:a493361aead2 264 }
nameless129 5:a493361aead2 265 closedir(d);
nameless129 5:a493361aead2 266
nameless129 5:a493361aead2 267 //g_mp3Player_Stateに対して↓
nameless129 3:67e97c846cec 268 #define MP3_STATE_STOPPING (0)
nameless129 3:67e97c846cec 269 #define MP3_STATE_STOPREQ (1)
nameless129 3:67e97c846cec 270 #define MP3_STATE_PLAYREQ (2)
nameless129 3:67e97c846cec 271 #define MP3_STATE_PLAYING (3)
nameless129 3:67e97c846cec 272 #define MP3_STATE_NEXTREQ (4)
nameless129 3:67e97c846cec 273 #define MP3_STATE_PREVREQ (5)
nameless129 3:67e97c846cec 274 #define MP3_STATE_VOLCHANGEREQ (6)
nameless129 5:a493361aead2 275 #define MP3_STATE_REPLAY (7)
nameless129 5:a493361aead2 276 #define MP3_STATE_FILECHANGE (8)
nameless129 6:74271fce2368 277
nameless129 6:74271fce2368 278 printf("file count=%d\r\n",SDFileList_cnt);
nameless129 6:74271fce2368 279 mp3PlayingFileNo = 0;
nameless129 6:74271fce2368 280 g_mp3Player_State = MP3_STATE_FILECHANGE;
nameless129 6:74271fce2368 281 f_mp3Playwe_Playing = 0;
nameless129 3:67e97c846cec 282
nameless129 6:74271fce2368 283 while(1)
nameless129 6:74271fce2368 284 {
nameless129 6:74271fce2368 285
nameless129 6:74271fce2368 286 //////////////////////////////////////////////////////////////
nameless129 6:74271fce2368 287 /* TouchPanel GetStatas Section */
nameless129 6:74271fce2368 288 //////////////////////////////////////////////////////////////
nameless129 6:74271fce2368 289 if(gf_TimerInt == 1)
nameless129 3:67e97c846cec 290 {
nameless129 6:74271fce2368 291 XReadPos = getTouchPanelPosX();
nameless129 6:74271fce2368 292 YReadPos = getTouchPanelPosY();
nameless129 6:74271fce2368 293 // printf("X:%d Y:%d\r\n",XReadPos,YReadPos);
nameless129 6:74271fce2368 294 switch( detectTouchBotton(XReadPos,YReadPos) )
nameless129 3:67e97c846cec 295 {
nameless129 6:74271fce2368 296 case TOUCHPANEL_BOTTON_TOUCH_PREV:
nameless129 6:74271fce2368 297 if(touchPanel_Touched == 0)
nameless129 6:74271fce2368 298 {
nameless129 6:74271fce2368 299 printf("prev touch\r\n");
nameless129 6:74271fce2368 300 g_mp3Player_State = MP3_STATE_PREVREQ;
nameless129 6:74271fce2368 301 touchPanel_Touched = 1;
nameless129 6:74271fce2368 302 }
nameless129 6:74271fce2368 303 break;
nameless129 6:74271fce2368 304 case TOUCHPANEL_BOTTON_TOUCH_PLAY:
nameless129 6:74271fce2368 305 if(touchPanel_Touched == 0)
nameless129 6:74271fce2368 306 {
nameless129 6:74271fce2368 307 printf("play touch\r\n");
nameless129 6:74271fce2368 308 if( (g_mp3Player_State != MP3_STATE_PLAYING) && (g_mp3Player_State != MP3_STATE_PLAYREQ) )
nameless129 6:74271fce2368 309 {
nameless129 6:74271fce2368 310 g_mp3Player_State = MP3_STATE_PLAYREQ;
nameless129 6:74271fce2368 311 }
nameless129 6:74271fce2368 312 touchPanel_Touched = 1;
nameless129 6:74271fce2368 313 }
nameless129 6:74271fce2368 314 break;
nameless129 6:74271fce2368 315 case TOUCHPANEL_BOTTON_TOUCH_STOP:
nameless129 6:74271fce2368 316 if(touchPanel_Touched == 0)
nameless129 6:74271fce2368 317 {
nameless129 6:74271fce2368 318 printf("stop touch\r\n");
nameless129 6:74271fce2368 319 if( (g_mp3Player_State != MP3_STATE_STOPPING) && (g_mp3Player_State != MP3_STATE_STOPREQ) )
nameless129 6:74271fce2368 320 {
nameless129 6:74271fce2368 321 g_mp3Player_State = MP3_STATE_STOPREQ;
nameless129 6:74271fce2368 322 }
nameless129 6:74271fce2368 323 touchPanel_Touched = 1;
nameless129 6:74271fce2368 324 }
nameless129 6:74271fce2368 325 break;
nameless129 6:74271fce2368 326 case TOUCHPANEL_BOTTON_TOUCH_NEXT:
nameless129 6:74271fce2368 327 if(touchPanel_Touched == 0)
nameless129 6:74271fce2368 328 {
nameless129 6:74271fce2368 329 printf("next touch\r\n");
nameless129 6:74271fce2368 330 g_mp3Player_State = MP3_STATE_NEXTREQ;
nameless129 6:74271fce2368 331 touchPanel_Touched = 1;
nameless129 6:74271fce2368 332 }
nameless129 6:74271fce2368 333 break;
nameless129 6:74271fce2368 334 case TOUCHPANEL_OTHER_TOUCH:
nameless129 6:74271fce2368 335 printf("otherTouch\r\n");
nameless129 6:74271fce2368 336 printf("X:%d Y:%d\r\n",XReadPos,YReadPos);
nameless129 6:74271fce2368 337 break;
nameless129 6:74271fce2368 338 case TOUCHPANEL_BOTTON_NOT_TOUCH:
nameless129 6:74271fce2368 339 // printf("notTouch\r\n");
nameless129 6:74271fce2368 340 touchPanel_Touched = 0;
nameless129 6:74271fce2368 341 break;
nameless129 6:74271fce2368 342 default :
nameless129 6:74271fce2368 343 break;
nameless129 3:67e97c846cec 344 }
nameless129 3:67e97c846cec 345 }
nameless129 5:a493361aead2 346
nameless129 3:67e97c846cec 347 //////////////////////////////////////////////////////////////
nameless129 3:67e97c846cec 348 /* MP3 Player Control Section */
nameless129 3:67e97c846cec 349 //////////////////////////////////////////////////////////////
nameless129 5:a493361aead2 350 if(g_mp3Player_State == MP3_STATE_PLAYREQ)
nameless129 3:67e97c846cec 351 {
nameless129 5:a493361aead2 352 printf("FileOpen:%s\r\n",mp3PlayingFileName);
nameless129 5:a493361aead2 353 fp = fopen(mp3PlayingFileName, "rb");
nameless129 3:67e97c846cec 354 SDFileOpenFailCnt = 0;
nameless129 3:67e97c846cec 355 while(!fp)
nameless129 3:67e97c846cec 356 {
nameless129 3:67e97c846cec 357 SDFileOpenFailCnt+=1;
nameless129 3:67e97c846cec 358 if(SDFileOpenFailCnt >= 3)
nameless129 3:67e97c846cec 359 {
nameless129 3:67e97c846cec 360 printf("Fail SD init\r\n");
nameless129 3:67e97c846cec 361 printf("System Stop.\r\n");
nameless129 6:74271fce2368 362 NVIC_SystemReset();
nameless129 3:67e97c846cec 363 }
nameless129 3:67e97c846cec 364 printf("Fail file open n=%d\r\n",SDFileOpenFailCnt);
nameless129 3:67e97c846cec 365 sd.disk_initialize();
nameless129 5:a493361aead2 366 fp = fopen(mp3PlayingFileName, "rb");
nameless129 3:67e97c846cec 367 wait(1);
nameless129 3:67e97c846cec 368 }
nameless129 3:67e97c846cec 369
nameless129 3:67e97c846cec 370 //Get file size
nameless129 3:67e97c846cec 371 fseek( fp, 0, SEEK_END );
nameless129 3:67e97c846cec 372 mp3_fileSize = ftell( fp );
nameless129 3:67e97c846cec 373 printf("FileOpen. size=%dbit\r\n",mp3_fileSize);
nameless129 7:fc65d965a569 374
nameless129 3:67e97c846cec 375 //move file pointer to top.
nameless129 3:67e97c846cec 376 rewind(fp);
nameless129 7:fc65d965a569 377 clearerr(fp);
nameless129 3:67e97c846cec 378 mp3_totalSizeSent = 0;
nameless129 7:fc65d965a569 379 lcd.Print("Playing ",15,145);
nameless129 7:fc65d965a569 380
nameless129 7:fc65d965a569 381 lcd.DrawRect(135,155,310,165,COLOR_WHITE);
nameless129 7:fc65d965a569 382 lcd.FillRect(136,156,309,164,COLOR_BLUE);
nameless129 7:fc65d965a569 383 dot1_FileSize = mp3_fileSize/175;
nameless129 7:fc65d965a569 384
nameless129 5:a493361aead2 385 g_mp3Player_State = MP3_STATE_PLAYING;
nameless129 7:fc65d965a569 386
nameless129 7:fc65d965a569 387 totalPlay++;
nameless129 7:fc65d965a569 388 printf("PlayCount=%d\r\n",totalPlay);
nameless129 3:67e97c846cec 389 }
nameless129 5:a493361aead2 390 if( g_mp3Player_State == MP3_STATE_PLAYING )
nameless129 3:67e97c846cec 391 {
nameless129 7:fc65d965a569 392
nameless129 3:67e97c846cec 393 if(mp3_totalSizeSent>=mp3_fileSize) //play song end
nameless129 3:67e97c846cec 394 {
nameless129 6:74271fce2368 395 f_mp3Playwe_Playing = 1;
nameless129 6:74271fce2368 396 g_mp3Player_State = MP3_STATE_NEXTREQ; //next song
nameless129 3:67e97c846cec 397 }
nameless129 3:67e97c846cec 398 else //transmit from SDCard to VS1033
nameless129 3:67e97c846cec 399 {
nameless129 7:fc65d965a569 400 if( mp3.checkDREQ() == 1 )
nameless129 7:fc65d965a569 401 {
nameless129 7:fc65d965a569 402 mp3_ReadFileSize = fread(buf, sizeof(uint8_t), SD_READ_BLOCK_SIZE, fp);
nameless129 7:fc65d965a569 403 mp3_totalSizeSent += mp3.sendDataBlock(buf, mp3_ReadFileSize);
nameless129 7:fc65d965a569 404 dot_XPos = mp3_totalSizeSent / dot1_FileSize;
nameless129 7:fc65d965a569 405 if(old_dot_XPos != dot_XPos)
nameless129 7:fc65d965a569 406 {
nameless129 7:fc65d965a569 407 lcd.DrawLine(135+dot_XPos, 156, 135+dot_XPos, 164); //x1:135 y1:155 x2:310 y3:165
nameless129 7:fc65d965a569 408 }
nameless129 7:fc65d965a569 409 old_dot_XPos = dot_XPos;
nameless129 7:fc65d965a569 410 printf("SendedSize:%d LinePos:%d\r\n",mp3_totalSizeSent,dot_XPos);
nameless129 7:fc65d965a569 411 // printf(" HDAT0:0x%x HDAT1:0x%x\r\n",mp3.readReg(mp3.SCI_HDAT0),mp3.readReg(mp3.SCI_HDAT1));
nameless129 7:fc65d965a569 412
nameless129 7:fc65d965a569 413 }
nameless129 6:74271fce2368 414
nameless129 3:67e97c846cec 415 f_mp3Playwe_Playing = 1;
nameless129 3:67e97c846cec 416 }
nameless129 3:67e97c846cec 417 }
nameless129 5:a493361aead2 418 if( (g_mp3Player_State == MP3_STATE_STOPREQ) || (g_mp3Player_State == MP3_STATE_REPLAY) )
nameless129 3:67e97c846cec 419 {
nameless129 4:28900cff8f48 420 uint16_t returnCode=0;
nameless129 4:28900cff8f48 421 uint16_t stopFailCnt = 0;
nameless129 4:28900cff8f48 422 do
nameless129 4:28900cff8f48 423 {
nameless129 4:28900cff8f48 424 returnCode = mp3.stop();
nameless129 4:28900cff8f48 425 printf("STOP\r\nSTOP CODE:%d\r\n",returnCode);
nameless129 4:28900cff8f48 426
nameless129 4:28900cff8f48 427 if(returnCode != 0)
nameless129 4:28900cff8f48 428 {
nameless129 4:28900cff8f48 429 stopFailCnt++;
nameless129 4:28900cff8f48 430 }
nameless129 5:a493361aead2 431 if(stopFailCnt >= 20)
nameless129 4:28900cff8f48 432 {
nameless129 6:74271fce2368 433 printf("ERROR! impossible of stop\r\nVS1033 Reset\r\n");
nameless129 6:74271fce2368 434 mp3.hardwareReset();
nameless129 6:74271fce2368 435 mp3.sci_init();
nameless129 6:74271fce2368 436 mp3.sdi_init();
nameless129 7:fc65d965a569 437 wait(1);
nameless129 6:74271fce2368 438 stopFailCnt = 0;
nameless129 7:fc65d965a569 439 returnCode = 0;
nameless129 7:fc65d965a569 440 g_mp3Player_State = MP3_STATE_STOPPING;
nameless129 4:28900cff8f48 441 }
nameless129 4:28900cff8f48 442 }while(returnCode != 0);
nameless129 7:fc65d965a569 443
nameless129 2:0090839c8276 444 fclose(fp);
nameless129 2:0090839c8276 445 fp = NULL;
nameless129 3:67e97c846cec 446 f_mp3Playwe_Playing = 0;
nameless129 7:fc65d965a569 447 lcd.Print("STOP ",15,145);
nameless129 7:fc65d965a569 448
nameless129 5:a493361aead2 449 if(g_mp3Player_State == MP3_STATE_STOPREQ)
nameless129 5:a493361aead2 450 {
nameless129 5:a493361aead2 451 g_mp3Player_State = MP3_STATE_STOPPING;
nameless129 5:a493361aead2 452 }
nameless129 5:a493361aead2 453 if(g_mp3Player_State == MP3_STATE_REPLAY)
nameless129 5:a493361aead2 454 {
nameless129 5:a493361aead2 455 g_mp3Player_State = MP3_STATE_PLAYREQ;
nameless129 5:a493361aead2 456 }
nameless129 2:0090839c8276 457 }
nameless129 5:a493361aead2 458
nameless129 5:a493361aead2 459 if( g_mp3Player_State == MP3_STATE_STOPPING )
nameless129 5:a493361aead2 460 {
nameless129 5:a493361aead2 461 f_mp3Playwe_Playing = 0;
nameless129 5:a493361aead2 462 }
nameless129 5:a493361aead2 463
nameless129 5:a493361aead2 464 if( g_mp3Player_State == MP3_STATE_NEXTREQ )
nameless129 2:0090839c8276 465 {
nameless129 5:a493361aead2 466 if( mp3PlayingFileNo >= (SDFileList_cnt -1) )
nameless129 5:a493361aead2 467 {
nameless129 5:a493361aead2 468 mp3PlayingFileNo = 0;
nameless129 5:a493361aead2 469 }
nameless129 5:a493361aead2 470 else
nameless129 5:a493361aead2 471 {
nameless129 5:a493361aead2 472 mp3PlayingFileNo+=1;
nameless129 5:a493361aead2 473 }
nameless129 5:a493361aead2 474 g_mp3Player_State = MP3_STATE_FILECHANGE;
nameless129 3:67e97c846cec 475 }
nameless129 3:67e97c846cec 476
nameless129 5:a493361aead2 477 if( g_mp3Player_State == MP3_STATE_PREVREQ )
nameless129 5:a493361aead2 478 {
nameless129 5:a493361aead2 479 if( mp3PlayingFileNo <= 0 )
nameless129 5:a493361aead2 480 {
nameless129 5:a493361aead2 481 mp3PlayingFileNo = (SDFileList_cnt - 1);
nameless129 5:a493361aead2 482 }
nameless129 5:a493361aead2 483 else
nameless129 5:a493361aead2 484 {
nameless129 5:a493361aead2 485 mp3PlayingFileNo-=1;
nameless129 5:a493361aead2 486 }
nameless129 5:a493361aead2 487 g_mp3Player_State = MP3_STATE_FILECHANGE;
nameless129 5:a493361aead2 488 }
nameless129 5:a493361aead2 489 if( g_mp3Player_State == MP3_STATE_FILECHANGE )
nameless129 3:67e97c846cec 490 {
nameless129 5:a493361aead2 491 printf("next:%d,%s\r\n",mp3PlayingFileNo,SDFileList[mp3PlayingFileNo]);
nameless129 6:74271fce2368 492
nameless129 6:74271fce2368 493 for(i=0;i<SDFileList_cnt;i++)
nameless129 6:74271fce2368 494 {
nameless129 6:74271fce2368 495 sprintf(str,"%d:%s",i,SDFileList_short[i]);
nameless129 6:74271fce2368 496 lcd.Print( str, LEFT, i*28 ); // align text to center horizontally and use starndard colors
nameless129 6:74271fce2368 497 }
nameless129 6:74271fce2368 498 lcd.Print( "*", LEFT, 28*mp3PlayingFileNo ); // align text to center horizontally and use starndard colors
nameless129 6:74271fce2368 499
nameless129 5:a493361aead2 500 sprintf(mp3PlayingFileName,"%s",SDFileList[mp3PlayingFileNo]);
nameless129 5:a493361aead2 501 if(f_mp3Playwe_Playing == 1)
nameless129 5:a493361aead2 502 {
nameless129 5:a493361aead2 503 g_mp3Player_State = MP3_STATE_REPLAY;
nameless129 5:a493361aead2 504 }
nameless129 5:a493361aead2 505 else
nameless129 5:a493361aead2 506 {
nameless129 5:a493361aead2 507 g_mp3Player_State = MP3_STATE_STOPPING;
nameless129 5:a493361aead2 508 }
nameless129 5:a493361aead2 509 }
nameless129 5:a493361aead2 510
nameless129 5:a493361aead2 511 if( gf_mp3Playwe_VolmeUpdate == 1 )
nameless129 5:a493361aead2 512 {
nameless129 5:a493361aead2 513 mp3.VolControl(g_mp3Player_Volume);
nameless129 5:a493361aead2 514 gf_mp3Playwe_VolmeUpdate = 0;
nameless129 5:a493361aead2 515 printf("Vol:%d\r\n",g_mp3Player_Volume);
nameless129 2:0090839c8276 516 }
nameless129 2:0090839c8276 517 }
nameless129 0:5f0e931ae677 518 }