📄 app_screen_mp3_obj.c
字号:
#include "app_config.h"
extern const unsigned short bgvista[];
extern so_obj_t so_obj[MAX_SCR_OBJ];
extern char current_dir[128];
extern char current_file_name[128];
char current_list_file_name[LIST_MAXLENFILENAME+1];
extern EmbeddedFileSystem efs;
extern EmbeddedFile filer, filew;
extern DirList list;
extern unsigned char sd_inited;
extern unsigned char showing_flag;
unsigned char dir_check_file_type(unsigned char *file_name);
void dir_get_file_cnt(void); //get number of files in current folder
#include "pic_volume1.h"
#include "pic_volume2.h"
#include "pic_track1.h"
#include "pic_track2.h"
#include "pic_button1.h"
#include "pic_button2.h"
#include "pic_back.h"
#include "pic_icon.h"
#include "pic_up.h"
#include "pic_down.h"
#include "pic_back_page.h"
#include "pic_play_loop.h"
#include "pic_Next.h"
#define SO_VOLUME 0
#define SO_TRACK 1
#define SO_BT1 2 //play and pause
#define SO_BT2 3 //stop
#define SO_DIR_LIST 4 //directory list
#define SO_DIR_BACK 5 //go back to upper directory
#define SO_DIR_UP 6
#define SO_DIR_DOWN 7
#define SO_IMAGE 8
#define SO_BACK_PAGE 9
#define SO_BT3 10//Next
#define SO_BT4 11//playAll
#define DIR_FILE_NUM 5 //number of file shown
#define COL_LITE_BLUE 0xFDF0
#define COL_FONT 0x15FF //
#define COL_FONT_SPL 0x0FE8 //green
#define COL_BACK 0xFFFD
#define FILE_TYPE_UNKNOWN 0
#define FILE_TYPE_FOLDER 1
#define FILE_TYPE_MP3 2
#define FILE_TYPE_TXT 3
#define FILE_TYPE_BIN 4
so_pos_t last_lhpos,last_lvpos;
unsigned char last_playing = 0;
unsigned char first_line_file = 0;
unsigned char dir_file_cnt = 0;
unsigned char image_showing = 0;
void volume_draw(void)
{
unsigned char i,box_width;
so_pos_t j;
so_pos_t top_box = 1;
int buf;
unsigned char top_volume = ((so_obj[SO_VOLUME].vsize)*(100 - so_obj[SO_VOLUME].val))/100;
box_width = 21;
for (i=0;i<7;i++)
{
//draw black (back ground)
buf = top_volume - top_box;
if (buf > 0)
{
if (buf > 15)
buf = 15;
TSLCDFillRect( so_obj[SO_VOLUME].horigin + 22 - box_width,
so_obj[SO_VOLUME].horigin + so_obj[SO_VOLUME].hsize - 2,
so_obj[SO_VOLUME].vorigin + top_box,
so_obj[SO_VOLUME].vorigin + top_box + buf - 1,
TS_COL_BLACK,TS_MODE_NORMAL);
}
//draw volume
if (top_volume < top_box + 15)
{
buf = top_volume;
if (top_volume < top_box)
buf = top_box;
for (j=buf;j<top_box+15;j++)
{
TSLCDFillRect( so_obj[SO_VOLUME].horigin + 22 - box_width,
so_obj[SO_VOLUME].horigin + so_obj[SO_VOLUME].hsize - 2,
so_obj[SO_VOLUME].vorigin + j,
so_obj[SO_VOLUME].vorigin + j,
pic_volume1[j-top_volume],TS_MODE_NORMAL);
}
}
box_width -= 3;
top_box += 24;
}
}
void volume_do(so_pos_t lhpos,so_pos_t lvpos,so_pos_t ghpos,so_pos_t gvpos,pstatus_t p_stat)
{
int vol;
if (lvpos > so_obj[SO_VOLUME].vsize)
lvpos = so_obj[SO_VOLUME].vsize;
if (lvpos < 0)
lvpos = 0;
switch (p_stat)
{
case PST_DOWN :
so_obj[SO_VOLUME].val = ((so_obj[SO_VOLUME].vsize - lvpos)*100)/(so_obj[SO_VOLUME].vsize);
vol = (so_obj[SO_VOLUME].val >> 1) + 49;
VSAudioSetVolume(vol,vol);
volume_draw();
last_lhpos = lhpos;
last_lvpos = lvpos;
break;
case PST_HOLD :
if ((last_lvpos - lvpos < 20) && (lvpos - last_lvpos < 20))
{
so_obj[SO_VOLUME].val = ((so_obj[SO_VOLUME].vsize - lvpos)*100)/(so_obj[SO_VOLUME].vsize);
vol = (so_obj[SO_VOLUME].val >> 1) + 49;
VSAudioSetVolume(vol,vol);
volume_draw();
last_lhpos = lhpos;
last_lvpos = lvpos;
}
break;
default :
break;
}
}
void volume_task100ms(void)
{
}
unsigned char volume_is_white(so_pos_t lhpos,so_pos_t lvpos)
{
return (0);
}
void track_draw(void)
{
unsigned char i;
TSLCDShowPicBack( so_obj[SO_TRACK].horigin,
so_obj[SO_TRACK].horigin + so_obj[SO_TRACK].hsize - 1,
so_obj[SO_TRACK].vorigin-10,
so_obj[SO_TRACK].vorigin + so_obj[SO_TRACK].vsize - 1,
bgvista,240,320,TS_MODE_NORMAL);
for (i=0;i<so_obj[SO_TRACK].vsize - 8;i++)
{
TSLCDShowPic2( so_obj[SO_TRACK].horigin,
so_obj[SO_TRACK].horigin + (so_obj[SO_TRACK].val*so_obj[SO_TRACK].hsize)/100 - 1,
so_obj[SO_TRACK].vorigin +8+ i,
so_obj[SO_TRACK].vorigin +8+ i,
pic_track1 + so_obj[SO_TRACK].hsize*i,TS_MODE_NORMAL);
}
}
void track_do(so_pos_t lhpos,so_pos_t lvpos,so_pos_t ghpos,so_pos_t gvpos,pstatus_t p_stat)
{
int track;
if (VSIsPlaying())
{
if (lhpos > so_obj[SO_TRACK].hsize)
lhpos = so_obj[SO_TRACK].hsize;
if (lhpos < 0)
lhpos = 0;
switch (p_stat)
{
case PST_DOWN :
so_obj[SO_TRACK].val = (lhpos*100)/(so_obj[SO_TRACK].hsize);
track = so_obj[SO_TRACK].val;
VSAudioCmd('J', track);
track_draw();
last_lhpos = lhpos;
last_lvpos = lvpos;
break;
case PST_HOLD :
if ((last_lvpos - lvpos < 20) && (lvpos - last_lvpos < 20))
{
so_obj[SO_TRACK].val = (lhpos*100)/(so_obj[SO_TRACK].hsize);
track = so_obj[SO_TRACK].val;
VSAudioCmd('J', track);
track_draw();
last_lhpos = lhpos;
last_lvpos = lvpos;
}
break;
default :
break;
}
}
}
void track_task100ms(void)
{
unsigned char old_val = so_obj[SO_TRACK].val;
unsigned char current_playing = VSIsPlaying();
if (!image_showing)
{
if (current_playing)
{
so_obj[SO_TRACK].val = VSGetTrackPosition();
if (old_val != so_obj[SO_TRACK].val)
so_obj[SO_TRACK].draw();
}
else
{
if (last_playing) //stop event or end of playing file
{
so_obj[SO_TRACK].val = 0;
so_obj[SO_TRACK].draw();
so_obj[SO_BT1].val = 1;
so_obj[SO_BT1].draw();
so_obj[SO_BT2].val = 0;
so_obj[SO_BT2].draw();
so_obj[SO_BT3].val = 1;
so_obj[SO_BT3].draw();
so_obj[SO_BT4].val = 0;
so_obj[SO_BT4].draw();
}
}
last_playing = current_playing;
}
}
unsigned char track_is_white(so_pos_t lhpos,so_pos_t lvpos)
{
return (0);
}
void bt1_draw(void)
{
if (VSIsPlaying())
{
so_obj[SO_BT1].stat = SO_ST_ON;
TSLCDShowPicBack(so_obj[SO_BT1].horigin,
so_obj[SO_BT1].horigin + so_obj[SO_BT1].hsize - 1,
so_obj[SO_BT1].vorigin,
so_obj[SO_BT1].vorigin + so_obj[SO_BT1].vsize - 1,
bgvista,240,320,TS_MODE_NORMAL);
TSLCDShowPic2( so_obj[SO_BT1].horigin,
so_obj[SO_BT1].horigin + so_obj[SO_BT1].hsize - 1,
so_obj[SO_BT1].vorigin,
so_obj[SO_BT1].vorigin + so_obj[SO_BT1].vsize - 1,
pic_button1 + so_obj[SO_BT1].val*(so_obj[SO_BT1].hsize*so_obj[SO_BT1].vsize),
TS_MODE_NORMAL);
}
else
{
TSLCDShowPicBack(so_obj[SO_BT1].horigin,
so_obj[SO_BT1].horigin + so_obj[SO_BT1].hsize - 1,
so_obj[SO_BT1].vorigin,
so_obj[SO_BT1].vorigin + so_obj[SO_BT1].vsize - 1,
bgvista,240,320,TS_MODE_NORMAL);
so_obj[SO_BT1].stat = SO_ST_OFF;
}
}
void bt1_do(so_pos_t lhpos,so_pos_t lvpos,so_pos_t ghpos,so_pos_t gvpos,pstatus_t p_stat)
{
unsigned char i;
switch (p_stat)
{
case PST_DOWN :
if (so_obj[SO_BT1].val == 0) //play
{
if (!VSIsPlaying())
{
if (dir_check_file_type((unsigned char *)current_list_file_name) == FILE_TYPE_MP3)
{
so_obj[SO_BT1].val = 1;
so_obj[SO_BT1].draw();
while (current_list_file_name[i] != ' ')
{
i++;
if (i == LIST_MAXLENFILENAME-4)
break;
}
current_list_file_name[i] = '.';
current_list_file_name[i+1] = 'M';
current_list_file_name[i+2] = 'P';
current_list_file_name[i+3] = '3';
current_list_file_name[i+4] = 0;
AppPlay(current_list_file_name);
break;
}
}
else
{
so_obj[SO_BT1].val = 1;
so_obj[SO_BT1].draw();
VSAudioCmd('C',0);
}
}
else
if (so_obj[SO_BT1].val == 2) //pause
{
so_obj[SO_BT1].val = 3;
so_obj[SO_BT1].draw();
VSAudioCmd('P',0);
}
break;
case PST_UP :
if (so_obj[SO_BT1].val == 0)
{
so_obj[SO_BT1].val = 2;
so_obj[SO_BT1].draw();
}
if ((so_obj[SO_BT1].val == 1) || (so_obj[SO_BT1].val == 3))
{
so_obj[SO_BT1].val++;
if (so_obj[SO_BT1].val == 4)
so_obj[SO_BT1].val = 0;
so_obj[SO_BT1].draw();
}
break;
default :
break;
}
}
void bt1_task100ms(void)
{
if (VSIsPlaying() && (so_obj[SO_BT1].val == 1))
{
so_obj[SO_BT1].val = 0;
so_obj[SO_BT1].draw();
}
}
unsigned char bt1_is_white(so_pos_t lhpos,so_pos_t lvpos)
{
return (0);
}
void bt2_draw(void)
{
if (VSIsPlaying())
{
so_obj[SO_BT2].stat = SO_ST_ON;
TSLCDShowPicBack(so_obj[SO_BT2].horigin,
so_obj[SO_BT2].horigin + so_obj[SO_BT2].hsize - 1,
so_obj[SO_BT2].vorigin,
so_obj[SO_BT2].vorigin + so_obj[SO_BT2].vsize - 1,
bgvista,240,320,TS_MODE_NORMAL);
TSLCDShowPic2( so_obj[SO_BT2].horigin,
so_obj[SO_BT2].horigin + so_obj[SO_BT2].hsize - 1,
so_obj[SO_BT2].vorigin,
so_obj[SO_BT2].vorigin + so_obj[SO_BT2].vsize - 1,
pic_button2 + so_obj[SO_BT2].val*(so_obj[SO_BT2].hsize*so_obj[SO_BT2].vsize),
TS_MODE_NORMAL);
}
else
{
TSLCDShowPicBack(so_obj[SO_BT2].horigin,
so_obj[SO_BT2].horigin + so_obj[SO_BT2].hsize - 1,
so_obj[SO_BT2].vorigin,
so_obj[SO_BT2].vorigin + so_obj[SO_BT2].vsize - 1,
bgvista,240,320,TS_MODE_NORMAL);
so_obj[SO_BT2].stat = SO_ST_OFF;
}
}
void bt2_do(so_pos_t lhpos,so_pos_t lvpos,so_pos_t ghpos,so_pos_t gvpos,pstatus_t p_stat)
{
switch (p_stat)
{
case PST_DOWN :
if (VSIsPlaying())
{
if (so_obj[SO_BT2].val == 1) //stop
{
VSAudioCmd('S',0);
so_obj[SO_BT1].stat = SO_ST_OFF;
so_obj[SO_BT1].draw();
so_obj[SO_BT2].stat = SO_ST_OFF;
so_obj[SO_BT3].stat = SO_ST_OFF;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -