⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 app_screen_mp3_obj.c

📁 LPC2300 MP3 Player code
💻 C
📖 第 1 页 / 共 3 页
字号:
#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 + -