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

📄 ircmd_card.c

📁 mp3 player program please read carefully.
💻 C
📖 第 1 页 / 共 2 页
字号:
/**************************************************************************
 * File Name:   ircmd_card.c
 * Created:     2004.05.19 13:36 Maoyong 
 * Description: contain some utilized functions for card switch or move/exist
                state check and so on
 *************************************************************************/
#if defined(SUPPORT_CARD_STORAGE)||defined(SUPPORT_USB)||defined(SPHE8202_CARD_STORAGE)
#ifdef SUPPORT_USB
extern UINT32 UsbTestReady(void);
extern BYTE IsUSBCardReader(void);
extern UINT8 USBCheckNextReadyLun(void);
#ifdef ORITRON_HK_DVD  //qinhua add,
extern int program_func_flag;
#endif 
extern UINT8 CBWLUN;
#ifdef SWITCH_BETWEEN_USB_CARDS //for different cards swithch on USB card reader
#define MAX_USB_CARDS  4       //one port for SD/MS/SM/MMC, another for CF/Micro Driver(zhongshan modify for usb cardreader 4 port)
UINT8  card_switch_times = 0;   //record times switch between cards, if = 2, switch to CD
#endif  //#ifdef SWITCH_BETWEEN_USB_CARDS
#endif  //#ifdef SUPPORT_USB

extern BYTE ReadPercent;
extern CARD_FILE       cardFile;
extern void InitVar(void);
#ifdef IR_SWITCH_CARD_CD //lijd 2004-9-30 10:25
extern UINT8 atapi_p_start_stop_unit(UINT8 Immed,UINT8 start);
extern UINT8 USBCheckNextReadyLun(void);//zhongshan add 01/14
#endif

#ifdef SUPPORT_MP4_SUBTITLE	//yaowh add 2005-12-22 11:20
	//static int IsSubtitle = 0;	
	extern void supClearSubtitle(void);
#endif

#ifdef IR_SWITCH_CD_USB_CF_OTHER  //dingzhy 04-10-22
BYTE	now_valid_type = 0;
BYTE    detect_result_last = 0; 
extern void polling_storage(void);
#endif

#ifdef FILE_MODE_WRITE//added by wangwei,2005-1-25 9:29
extern BYTE file_mode_flag;
#endif
/**************************************************************************
 * Functioin:  SwitchMedia
 * Input:      direction: CARD2CD/CD2CARD/CARD2CARD
 * Purpose:    used for switch media between card and cd / card and card
 *************************************************************************/
#ifdef USE_STOP_SWITCH_DISC_CARD_USB
extern BYTE IsCardMediaExist(void);
extern void SwitchMedia(BYTE direction);
#endif
void SwitchMedia(BYTE direction)
{
	#ifdef USB_CARD_SWITCH
	ircmd_post_func(CMD_FUNC | CMD_FUNC_STOP);  
    delay_1ms(10); 
    #endif                           

    if( (direction == CD2CARD) || (direction == CARD2CARD) )
    {
        #if defined(SUPPORT_SETUP_POPUP_MEDIA_GUI)&&defined(SAME_DISC_RESUME)//chenzhao 20060116
        if(direction == CD2CARD)
            RsmInfo2Flash(0);
        #endif
        InitVar();      //maoyong 2004.05.25 just treat as change disc
        media_type = MEDIA_CARD; 
        cardFile.status = CARD_STATUS_NORMAL;   //for flow control, status will be set dynamically so no influence.
       #ifdef ORITRON_HK_DVD
        // if(prog_cnt)  //qinhua add ,2005-10-31 23:28
         {
          prog_cnt = 0;
          prog_func_clear();
          prog_func_off();  
          program_func_flag=0;
         }
       #endif   
        #ifndef SP1000_NO_DVD
        atapi_p_start_stop_unit(Immed_1,START_STOP_DO_STOP);
        #endif //#ifndef SP1000_NO_DVD
        
        #ifdef IR_SWITCH_DVD_USB_CARD_AVIN_DVB
        old_system_state = system_state;
        old_play_state = play_state;
        #endif 
    }
    else if(direction == CARD2CD)
    {
    	#ifdef SPHE8202_CARD_STORAGE
    		GPIO_O_SET(CARD_POWER_RESET,1);//dingzhy for off the card light 4-10-23 14:18,dingzhy mod.
 		#endif    		
        no_disk_cnt = DETECT_TIMES;
        media_type = MEDIA_CD;          
        adv_search_time = 0;
#ifndef SPHE1000 //Jeff 20041217
        atapi_open_tray();  //Maoyong 2004-8-10 11:00
        atapi_close_tray(0);
#endif
     
      #ifdef ORITRON_HK_DVD
    
      // if(prog_cnt)  //qinhua add ,2005-10-31 23:28
         {
          prog_cnt = 0;
          prog_func_clear();
          prog_func_off();  
          program_func_flag=0;
         }
      #endif   
    
    }
    AVD_SetMediaTimeout();
    play_state = VCD_STATE_CLOSE;   
    full_scrn = 0;     
    #ifndef SUPPORT_DPF_UI//zhuangzhiling
    ClearOsdMsg(0);     
    osd_init();
    #endif
    t_disp = 0; 
    
    
     #ifdef USE_STOP_SWITCH_DISC_CARD_USB//shenyj add 
    if(system_state == SYSTEM_STOP)
    {
        //check whether card is plugged in
        if ( IsCardMediaExist() && (card_plug_state&USER_DO_PLUG_IN))
        {            
        #if defined(CF_CARD_WRITE)|| defined(SPHE8202_FAT_Write_Function)//||defined(WRITE_USB)
            if( read_card_sign && (media_type == MEDIA_CARD) && (MediaIsEmpty == MEDIA_NOT_EMPTY))  //modefied by wangwei,2004-11-19 17:31(for storage no files screen refresh problem)
            {
                CardTestReady();
            }
        #endif
        polling_storage();
        }
        else if(!IsCardMediaExist())
        {
            #if defined(SUPPORT_USB)||defined(SPHE8202_CARD_STORAGE)
            polling_storage();   //polling_U_Disk(); //wthsin,2004/4/12 02:16pm
            #else
            polling_card_plug();//kenny 2003/1/26
            #endif
            drv_do_set_features(); //card plug out, do set feature to loader            //if((card_plug_state&USER_DO_PLUG_OUT)&&(media_type == MEDIA_CARD))
            if(media_type == MEDIA_CARD)    //Maoyong 2004.05.18 for USB card reader consideration
            {
                SwitchMedia(CARD2CD);       //this will do more actions
             }
            media_type = MEDIA_CD;
        }
    }
    #endif//#ifdef USE_STOP_SWITCH_DISC_CARD_USB//shenyj add 
    ircmd_post_func(CMD_FUNC | CMD_FUNC_OPEN);                  
    system_state = SYSTEM_OPEN;    
   
}


/**************************************************************************
 * Functioin:  IsCardMediaExist
 * Purpose:    used for switch condition check, if return FALSE, can't switch
               to Card Media now.
 *************************************************************************/
BYTE IsCardMediaExist(void)
{
    if( CARDIsPlugIn() )
    {
        //Maoyong 2004.05.20 for other storage_type and USB Card reader consideration
        #ifdef SUPPORT_USB
        if(storage_type&USB_DEVICE)
        {
            if( !UsbTestReady() )
                return FALSE;
        }
        #endif
        
        //Maoyong 2004.05.21 for flow control when switch to CD, to avoid SwitchMedia 
        //called again and back to CARD again when IsCardMediaRemove called.        
        cardFile.status = CARD_STATUS_NORMAL;
        return TRUE;        
    }    

    return FALSE;
}

/**************************************************************************
 * Functioin:  IsCardMediaRemove
 * Purpose:    play card media program, check if card remove when no card
               data reading such as: Jpeg/MPEG/MP4 file list, pause state
 *************************************************************************/
BYTE IsCardMediaRemove(void)
{
    if (media_type == MEDIA_CARD) 
    {
//        if ( CardGetStatus() == CARD_STATUS_NG ) 
        if ( FSGetStatus() == CARD_STATUS_NG ) 
        {
            #if defined(SUPPORT_CARD_STORAGE)||defined(SUPPORT_USB)
              #if !defined(HOST_UHCI)&&!defined(USB_HOST_DRV)                                                                                                                                                                       
            CardReset();
            #endif 
            #endif
            //Mp3ReadFinish = 0;
            //ircmd_stop();            
            #ifdef IR_SWITCH_DVD_USB_CARD_AVIN_DVB
            usb_card_state = USB_CARD_WAS_PLUG_OUT;
            #else
            #ifndef DIRECT_ACCESS_MEDIA//added by wangwei, 2006-4-11 10:49
            SwitchMedia(CARD2CD); 
            #endif//DIRECT_ACCESS_MEDIA
            #endif
            return 1;
        }
    }
    return 0;    
}

/**************************************************************************
 * Functioin:  show_card_reading_osd
 * input:      SHOW_MEDIA/SHOW_READ_PERCENT/SHOW_OFF (gb_def.h)
 * Purpose:    display card media reading info: type/read file percent
 *************************************************************************/
void  show_card_reading_osd(BYTE type)
{
    #ifdef PMP_UI//liweihua 2004-12-22 13:56
    return;
    #endif
    if(ReadPercent > 100)
        ReadPercent = 100;
    #ifdef FILE_MODE_WRITE//develope use,for switching to play CDROM show "read usb" bug, modified by wangwei,2005-1-24 15:07
    if((type != SHOW_OFF)&&(!file_mode_flag))
    #else
    if(type != SHOW_OFF)
    #endif
    {
        #ifdef SWITCH_BETWEEN_USB_CARDS    //Maoyong 2004.05.25 here just for USB
        if(type == SHOW_MEDIA)
        {
        if(storage_type & USB_DEVICE)
        {
            //show card number 1, 2, 3...
            psprintf(RegionValStr[REGION1], "READ CARD %d", CBWLUN+1);
            PrintOsdMsg(STR_OS_SPACE, REGION1, 0, 1);
            }
        }
        else //SHOW_READ_PERCENT
        {
            psprintf(RegionValStr[REGION1], "READ CARD %d %02d%s  [%04d]", CBWLUN+1, ReadPercent, "%", pFsJpeg->iso9660_file_cnt);
            if(storage_type & USB_DEVICE)
            {
                //show reading percent here
                PrintOsdMsg(STR_OS_SPACE, REGION1, 0, 1);
            }
        }
        #else  //SWITCH_BETWEEN_USB_CARDS
        if(type == SHOW_MEDIA)
        {
            //if(storage_type & USB_DEVICE)
            if(storage_type)//liweihua mod 2004-6-9
            {
                //show card number 1, 2, 3...
                #ifndef SUPPORT_DPF_UI
               if(storage_type & USB_DEVICE) 
                psprintf(RegionValStr[REGION1], "READ USB");  //wthsin, 2004/7/19 03:02pm
               else  
                psprintf(RegionValStr[REGION1], "READ CARD");
               PrintOsdMsg(STR_OS_SPACE, REGION1, 0, 1);
               #endif
            }
        }
        else
        {
            #ifndef SUPPORT_DPF_UI
           	if(storage_type & USB_DEVICE) 	//wthsin, 2004/7/19 03:02pm
            	psprintf(RegionValStr[REGION1], "READ USB %02d%s  [%04d]", ReadPercent, "%", pFsJpeg->iso9660_file_cnt);
           	else    
            	psprintf(RegionValStr[REGION1], "READ CARD %02d%s  [%04d]", ReadPercent, "%", pFsJpeg->iso9660_file_cnt);
            
			if(storage_type & USB_DEVICE)
            {
                //show reading percent
                PrintOsdMsg(STR_OS_SPACE, REGION1, 0, 1);
            }
            #endif
        }
        #endif //SWITCH_BETWEEN_USB_CARDS
    }
    else    //turn off osd display
        ClearOsdMsg(1);
}

/* SWITCH_BETWEEN_USB_CARDS: CD--->USB CARD A ---> USB CARD B ---> CD in turn */
#if defined(IR_SWITCH_CARD_CD) || defined(SUPPORT_SPI_QSI) //Maoyong 2004.05.13
void  ircmd_switch_card_cd(void)
{
    if(media_type == MEDIA_CD)      //switch CD to Card
    {
        if( IsCardMediaExist() )
        {
            #ifdef SWITCH_BETWEEN_USB_CARDS
            card_switch_times = 1;
            #endif

            SwitchMedia(CD2CARD);  
        }
        else 
        {   
            psprintf(RegionValStr[REGION1], "CARD NOT FOUND");  
            PrintOsdMsg(STR_OS_SPACE, REGION1, 1, 1);           
        }   
    }
    #ifdef IR_SWITCH_CARD_CD_ADD_USB		//dingzhy 2005-3-24 14:59
    else if((storage_type==USB_DEVICE)&&(detect_type&USB_DEVICE!=0))
    {
		if((detect_type & SMC_CARD_DEVICE)) 
            storage_type = SMC_CARD_DEVICE;
		else if((detect_type & MS_CARD_DEVICE)) 
            storage_type = MS_CARD_DEVICE;
		else if((detect_type & SD_CARD_DEVICE)) 
            storage_type = SD_CARD_DEVICE;
		else if((detect_type & CF_CARD_DEVICE)) 
            storage_type = CF_CARD_DEVICE;  
            
		SwitchMedia(CD2CARD);  
    }    
    #endif
    else    //switch from card  to cd, in fact should check if no disc here!
    {
        #ifdef SWITCH_BETWEEN_USB_CARDS
        if( storage_type&USB_DEVICE )
        {
            if( IsUSBCardReader() && USBCheckNextReadyLun()&& (card_switch_times < MAX_USB_CARDS) )
            {
                card_switch_times++;
                SwitchMedia(CARD2CARD);
            }
            else
            {
                SwitchMedia(CARD2CD);
                card_switch_times = 0;
            }
        }
        #else  //SWITCH_BETWEEN_USB_CARDS
        SwitchMedia(CARD2CD);
        #endif //SWITCH_BETWEEN_USB_CARDS
    }
}
#endif //#ifdef  IR_SWITCH_CARD_CD

#ifdef IR_SWITCH_CD_USB_CF_OTHER  //added by dingzhy  4-10-20 13:57
void ircmd_switch_cd_usb_cf_other(void)
{
	
	    if(media_type == MEDIA_CD)      //switch CD to Card
	    {
	    	if( IsCardMediaExist() )
	           {
	           	now_valid_type = detect_type;//for bug:read cf,insert usb,will read cf again.
	        	SwitchMedia(CD2CARD);
	        	}
	        else 
        	   {   
		        if(play_state != VCD_STATE_OPEN)
        	   	{
		        psprintf(RegionValStr[REGION1], "USB/CARD NOT FOUND");  
		        PrintOsdMsg(STR_OS_SPACE, REGION1, 1, 1);           
        		}
        	   }   
	    }  
	        
	    else if(detect_result_last==0x01)   //when play USB
	    {
	    	if(detect_type == 0x01)
	    	SwitchMedia(CARD2CD);
	    	else
	    	{
	        now_valid_type = (detect_type & 0x1e);
	        SwitchMedia(CD2CARD);
	        }
	     }   

⌨️ 快捷键说明

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