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

📄 cardwriter.c

📁 Sunplus 8202S source code.
💻 C
字号:
/**********************************************************
**  Description: Switch interface for CDROM & CF Card
**  Creater:wuxiaofeng
**  Date:03-09-01 16:33
**  Maintain Date: 03-09-15  18:14
**  Modified: let COPY button gray at CF Card side
**  Maintain Date: 03-09-15  11:54
**  Modified: delete the wrong color define
**  Maintain Date: 03-09-17  15:36
**  Modified: if deleting the last file in card, then turn to CDROM side.
***********************************************************/
#include "user_init.h"
#include "global.h"
#include "memmap0.h"
#include "ircmd.h"
#include "types.h"
#include "memcfg.h"
#include "framebuf.h"
#include "memmap.h"
#include "osd.h"
#include "cardfs.h"
#include "fsNav.h"

#ifdef	CF_CARD_WRITE

#define	FUNCTION_REGION	3
#define	MESSAGE_REGION	2

#define	COLOR_WHITE	2
#define	COLOR_GRAY		3
#define	COLOR_DBLUE	4
#define	COLOR_LBLUE	6
#define	COLOR_YELLOW	7
#define	COLOR_GREEN	9
#define	COLOR_RED		12

#define	BUTTON_UP		0
#define	BUTTON_DOWN	1
#define	BUTTON_LEN		18

#define	BUTTON_CD2CF		1
#define	BUTTON_CF2CD		2
#define	BUTTON_COPY		3
#define	BUTTON_DELETE		4
#define	BUTTON_FORMAT		5
#define	BUTTON_CREADIR	6

#define	ERROR_MESSAGE	0
#define	CFFUN_WRITE	1
#define	CFFUN_DELETE	2
#define	CFFUN_FORMAT	3
#define	CFFUN_CREADIR	4
#define	CFFUN_COPYING	5
#define	CF_CARDFULL 	6
#define	CF_CARDEMPTY 	7

#define __palette4F(G,B,R,A) \
        ( ((UINT32)((G)&0xff)<<24)|((UINT32)((B)&0xff)<<16)|((UINT32)((R)&0xff)<<8)|(A&0xff) ) 

extern void osd_init_cardswitch(void);
extern void osd_DrawRegionString(BYTE xStart, BYTE yStart, BYTE *str, BYTE fontColor, BYTE bkColor, BYTE r);
extern void osd_draw_button(BYTE xStart, BYTE yStart, BYTE xLen, BYTE color, BYTE bDown, BYTE r);
extern int AVD_SetMediaInterrupt(void);
//extern int CardSchedule(void);
extern int FSSchedule(void);

//指针数组: int *p[4];
BYTE 	*string[]={" ","CDROM TO CARD","CARD TO CDROM","COPY THE FILE","DELETE THE FILE","FORMAT CARD","CREATE DIR"};
BYTE	KeyID;

BYTE read_card_sign=0;
BYTE flag_cd2cf=0, flag_cf2cd=0;
BYTE sign_cfFun=0;

/***************************************************************
**Function: Set_Button()
**Description: Draw the button in the region 3.
**return value:   none
**Create: wuxiaofeng, 2003-9-4 
***************************************************************/
void Set_Button(void)
{
	BYTE item;
	if(media_type==MEDIA_CD)
	{
		for(item=BUTTON_CD2CF; item<=BUTTON_COPY; item++)//normal display former three
		{
			osd_draw_button(2, item, BUTTON_LEN, COLOR_LBLUE, BUTTON_UP, FUNCTION_REGION);
			osd_DrawRegionString(3, item*8+3, string[item], COLOR_DBLUE, COLOR_LBLUE, FUNCTION_REGION);		//draw string on button
		}
		for(item=BUTTON_DELETE; item<=BUTTON_CREADIR; item++)//invalidate the latter three
		{
			osd_draw_button(2, item, BUTTON_LEN, COLOR_LBLUE, BUTTON_UP, FUNCTION_REGION);
			osd_DrawRegionString(3, item*8+3, string[item], COLOR_GRAY, COLOR_LBLUE, FUNCTION_REGION);		//draw string on button
		}
	}
	if(media_type==MEDIA_CARD)
	{
		for(item=BUTTON_CD2CF; item<=BUTTON_CF2CD; item++)//all six are ok
		{
			osd_draw_button(2, item, BUTTON_LEN, COLOR_LBLUE, BUTTON_UP, FUNCTION_REGION);
			osd_DrawRegionString(3, item*8+3, string[item], COLOR_DBLUE, COLOR_LBLUE, FUNCTION_REGION);		//draw string on button
		}
		//for copy gray
		osd_draw_button(2, BUTTON_COPY, BUTTON_LEN, COLOR_LBLUE, BUTTON_UP, FUNCTION_REGION);
		osd_DrawRegionString(3, BUTTON_COPY*8+3, string[BUTTON_COPY], COLOR_GRAY, COLOR_LBLUE, FUNCTION_REGION);		//draw string on button

		for(item=BUTTON_DELETE; item<=BUTTON_CREADIR; item++)//all six are ok
		{
			osd_draw_button(2, item, BUTTON_LEN, COLOR_LBLUE, BUTTON_UP, FUNCTION_REGION);
			osd_DrawRegionString(3, item*8+3, string[item], COLOR_DBLUE, COLOR_LBLUE, FUNCTION_REGION);		//draw string on button
		}
	}
	
}


/***************************************************************
**Function: highlight_button()
**Description: highlight the cursor assigned button.
**return value:   none
**Create: wuxiaofeng, 2003-9-4 
***************************************************************/
void highlight_button(BYTE selectID)
{
	Set_Button();// back to the default color
	switch(selectID)
	{
		case BUTTON_CD2CF:
			osd_draw_button(2, BUTTON_CD2CF, BUTTON_LEN, COLOR_GREEN, BUTTON_UP, FUNCTION_REGION);
			osd_DrawRegionString(3, BUTTON_CD2CF*8+3, string[BUTTON_CD2CF], COLOR_DBLUE, COLOR_GREEN, FUNCTION_REGION); 	//draw string on button
			break;
		case BUTTON_CF2CD:
			osd_draw_button(2, BUTTON_CF2CD, BUTTON_LEN, COLOR_GREEN, BUTTON_UP, FUNCTION_REGION);
			osd_DrawRegionString(3, BUTTON_CF2CD*8+3, string[BUTTON_CF2CD], COLOR_DBLUE, COLOR_GREEN, FUNCTION_REGION); 	//draw string on button
			break;
		case BUTTON_COPY:
			osd_draw_button(2, BUTTON_COPY, BUTTON_LEN, COLOR_GREEN, BUTTON_UP, FUNCTION_REGION);
			osd_DrawRegionString(3, BUTTON_COPY*8+3, string[BUTTON_COPY], COLOR_DBLUE, COLOR_GREEN, FUNCTION_REGION); 	//draw string on button
			break;
		case BUTTON_DELETE:
			osd_draw_button(2, BUTTON_DELETE, BUTTON_LEN, COLOR_GREEN, BUTTON_UP, FUNCTION_REGION);
			osd_DrawRegionString(3, BUTTON_DELETE*8+3, string[BUTTON_DELETE], COLOR_DBLUE, COLOR_GREEN, FUNCTION_REGION); 	//draw string on button
			break;
		case BUTTON_FORMAT:
			osd_draw_button(2, BUTTON_FORMAT, BUTTON_LEN, COLOR_GREEN, BUTTON_UP, FUNCTION_REGION);
			osd_DrawRegionString(3, BUTTON_FORMAT*8+3, string[BUTTON_FORMAT], COLOR_DBLUE, COLOR_GREEN, FUNCTION_REGION); 	//draw string on button
			break;
		case BUTTON_CREADIR:
			osd_draw_button(2, BUTTON_CREADIR, BUTTON_LEN, COLOR_GREEN, BUTTON_UP, FUNCTION_REGION);
			osd_DrawRegionString(3, BUTTON_CREADIR*8+3, string[BUTTON_CREADIR], COLOR_DBLUE, COLOR_GREEN, FUNCTION_REGION);	//draw string on button
			break;
	
	}

}

/***************************************************************
**Function: show_card_switch()
**Description: draw the OSD region.
**return value:   none
**Create: wuxiaofeng, 2003-9-4 
***************************************************************/
void show_card_switch(void)
{
	osd_init_cardswitch();
	BYTE	*title_str="USER OPERATION";
	osd_DrawRegionString(1, 0, title_str, COLOR_YELLOW, COLOR_GRAY, FUNCTION_REGION);		//draw the note
	SetOsdCol(FUNCTION_REGION, FUNCTION_REGION, 0, __palette4F( 128, 255, 128, 0xff));		//draw background of the region
	Set_Button();

	KeyID=BUTTON_CD2CF;
	highlight_button(KeyID);	

}

void card_switch_left()
{
}
void card_switch_right()
{
}
void card_switch_down(void)
{
	if(media_type==MEDIA_CD)
	{
		if(KeyID>=BUTTON_COPY)
		{
			KeyID=BUTTON_CD2CF;
		}
		else
		{
			KeyID++;
		}
	}
	else if(media_type==MEDIA_CARD)
	{
		if(KeyID>=BUTTON_CREADIR)
		{
			KeyID=BUTTON_CD2CF;
		}
		else
		{
			KeyID++;
		}
		if(KeyID==BUTTON_COPY)//add 09/15 disable COPY
		{
			KeyID=BUTTON_DELETE;
		}
	}
	highlight_button(KeyID);
}
void card_switch_up(void)
{
	if(media_type==MEDIA_CD)
	{
		if(KeyID<=BUTTON_CD2CF)
		{
			KeyID=BUTTON_COPY;
		}
		else
		{
			KeyID--;
		}
	}
	else if(media_type==MEDIA_CARD)
	{
		if(KeyID<=BUTTON_CD2CF)
		{
			KeyID=BUTTON_CREADIR;
		}
		else
		{
			KeyID--;
		}
		if(KeyID==BUTTON_COPY)//add 09/15  disable COPY
		{
			KeyID=BUTTON_CF2CD;
		}
	}	
	highlight_button(KeyID);

}

/***************************************************************
**Function: Message_Show()
**Description: display some message in region 2.
**return value:   none
**Create: wuxiaofeng, 2003-9-4 
***************************************************************/
void Message_Show(BYTE strID)
{
	BYTE *str[]={"CARD ERROR","WRITE FILE OK","DELETE FILE OK","CARD FORMATED","DIR CREATED","FILE COPYING","CARD FULL","CARD EMPTY"};
	osd_init_cardswitch();
	SetOsdCol(MESSAGE_REGION, MESSAGE_REGION, 0, 0);
	osd_DrawRegionString(6, 1, str[strID], COLOR_RED, COLOR_LBLUE, MESSAGE_REGION);	//draw the error
	delay_1ms(2000);
}

/***************************************************************
**Function: card_switch_select()
**Description: perform the actual function by selecting the assigned button.
**return value:   none
**Create: wuxiaofeng, 2003-9-4 
***************************************************************/
void card_switch_select(void)
{
	switch(KeyID)
	{
		case	BUTTON_COPY:
//			if(CardIdentify()!=0)//very important!!!
			if(FSIdentify()!=0)//very important!!!
			{
				Message_Show(ERROR_MESSAGE);
				show_card_switch();
			}
			else
			{
				if(pFsJpeg->gifsFuncBtn == FS_FUNC_MP3)
				{
					sign_cfFun=CFFUN_WRITE;//write cf card
					AVD_SetMediaInterrupt();//stop the current mp3, Can't be used for JPEG!!
					Message_Show(CFFUN_COPYING);
				}
				else if(pFsJpeg->gifsFuncBtn == FS_FUNC_JPEG)
				{
					sign_cfFun=CFFUN_WRITE;//write JPEG
					Message_Show(CFFUN_COPYING);
//					if(CardSchedule()==-1)
					if(FSSchedule()==-1)
					{
						Message_Show(CF_CARDFULL);
					}
					else
					{
						Message_Show(CFFUN_WRITE);
					}
					full_scrn &= (~CARDOSDSHOW);//for release the IR
					osd_init();
				}
			}
			break;

		case	BUTTON_DELETE://share the break with BUTTON_CD2CF!!
//			if(CardIdentify()!=0)//very important!!!
			if(FSIdentify()!=0)//very important!!!
			{
				Message_Show(ERROR_MESSAGE);
				show_card_switch();
			}
			else
			{
				sign_cfFun=CFFUN_DELETE;//delete data
//				if(CardSchedule()==-1)
				if(FSSchedule()==-1)
				{
					Message_Show(CF_CARDEMPTY);
					full_scrn &= (~CARDOSDSHOW);//for release the IR
					osd_init();
					//turn to CDROM
					flag_cd2cf=0;															   //xulf
					flag_cf2cd=1;
					media_type=MEDIA_CD;
					ircmd_post_func(CMD_FUNC | CMD_FUNC_STOP);
					bDiscType=CDUNKNOWN;
					sys_cmd=CMD_FUNC_PLAY;
					break;
				}
				else
				{
					Message_Show(CFFUN_DELETE);
				}
			}

		case	BUTTON_CD2CF://cdrom to card
			full_scrn &= (~CARDOSDSHOW);//for release the IR
			osd_init();
		
			read_card_sign=1;												   //xulf0827
			flag_cd2cf=1;
			flag_cf2cd=0;
			media_type=MEDIA_CARD;
			ircmd_post_func(CMD_FUNC | CMD_FUNC_STOP);
			break;

		case	BUTTON_FORMAT://share the break with BUTTON_CF2CD!!
//			if(CardIdentify()!=0)//very important!!!
			if(FSIdentify()!=0)//very important!!!
			{
				Message_Show(ERROR_MESSAGE);
				show_card_switch();
			}
			else
			{
				sign_cfFun=CFFUN_FORMAT;//format card
//				CardSchedule();
				FSSchedule();
				Message_Show(CFFUN_FORMAT);
			}

		case	BUTTON_CF2CD://card to cdrom
			full_scrn &= (~CARDOSDSHOW);//for release the IR
			osd_init();
		
			flag_cd2cf=0;															   //xulf
			flag_cf2cd=1;
			media_type=MEDIA_CD;
			ircmd_post_func(CMD_FUNC | CMD_FUNC_STOP);
			bDiscType=CDUNKNOWN;
			sys_cmd=CMD_FUNC_PLAY;
			break;

		case	BUTTON_CREADIR:
//			if(CardIdentify()!=0)//very important!!!
			if(FSIdentify()!=0)//very important!!!
			{
				Message_Show(ERROR_MESSAGE);
				show_card_switch();
			}
			else
			{
				sign_cfFun=CFFUN_CREADIR;//Create Dir
//				CardSchedule();
				FSSchedule();
				Message_Show(CFFUN_CREADIR);
				full_scrn &= (~CARDOSDSHOW);//for release the IR
				osd_init();
			}
			break;
	
	}
}


#endif	//#ifdef	CF_CARD_WRITE

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -