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

📄 ipod.c

📁 IPOD协议命令的驱动在CAR ENTERTAINMENT SYSTEM上的实现
💻 C
📖 第 1 页 / 共 3 页
字号:
	    mode02_send(SIR_PLAY_PAUSE);
	    break;
	case IPOD_DIR_MODE:
	    break;
	case IPOD_AIR_MODE:
          mode04_play();     
	    break;
	case IPOD_RFT_MODE:
	    break;
    }
    return flag;
}    
UB IPOD_key_pause(void)
{
    UB flag = 0;
    //Send Command;
    switch(ipod_mode)
    {
	case IPOD_GEN_MODE:
	    break;
	case IPOD_MIC_MODE:
	    break;
	case IPOD_SIR_MODE:
	    mode02_send(SIR_PAUSE);
	    break;
	case IPOD_DIR_MODE:
	    break;
	case IPOD_AIR_MODE:
          xprintf(IPOD_AIR_MODE,0x00,AIR_PLAY_CONTROL,IPOD_CON_PAUSE,-1);             
	    break;
	case IPOD_RFT_MODE:
	    break;
    }
    return flag;
}    
UB IPOD_key_prev(void)
{
    UB flag = 0;
    //Send Command;
    switch(ipod_mode)
    {
	case IPOD_GEN_MODE:
	    break;
	case IPOD_MIC_MODE:
	    break;
	case IPOD_SIR_MODE:
	    mode02_send(SIR_PREV_TRACK);
	    break;
	case IPOD_DIR_MODE:
	    break;
	case IPOD_AIR_MODE:
          xprintf(IPOD_AIR_MODE,0x00,AIR_PLAY_CONTROL,IPOD_CON_PREV,-1);              
	    break;
	case IPOD_RFT_MODE:
	    break;
    }
    return flag;
}
UB IPOD_key_next(void)
{
    UB flag = 0;
    //Send Command;
    switch(ipod_mode)
    {
	case IPOD_GEN_MODE:
	    break;
	case IPOD_MIC_MODE:
	    break;
	case IPOD_SIR_MODE:
	    mode02_send(SIR_NEXT_TRACK);
	    break;
	case IPOD_DIR_MODE:
	    break;
	case IPOD_AIR_MODE:
          xprintf(IPOD_AIR_MODE,0x00,AIR_PLAY_CONTROL,IPOD_CON_NEXT,-1);             
	    break;
	case IPOD_RFT_MODE:
	    break;
    }
    return flag;
}    

UB IPOD_key_BL(void)
{
    UB flag = 0;
    //Send Command;
    switch(ipod_mode)
    {
	case IPOD_GEN_MODE:
	    break;
	case IPOD_MIC_MODE:
	    break;
	case IPOD_SIR_MODE:
	    mode02_send(SIR_BL30);
	    break;
	case IPOD_DIR_MODE:
	    break;
	case IPOD_AIR_MODE:   
	    break;
	case IPOD_RFT_MODE:
	    break;
    }
    return flag;
}    
UB IPOD_key_pon(void)
{
    UB flag = 0;
    //Send Command;
    switch(ipod_mode)
    {
	case IPOD_GEN_MODE:
	    break;
	case IPOD_MIC_MODE:
	    break;
	case IPOD_SIR_MODE:
	    mode02_send(SIR_SELECT);
	    break;
	case IPOD_DIR_MODE:
	    break;
	case IPOD_AIR_MODE:
	    break;
	case IPOD_RFT_MODE:
	    break;
    }
    return flag;
}    
UB IPOD_key_poff(void)
{
    UB flag = 0;
    //Send Command;
    switch(ipod_mode)
    {
	case IPOD_GEN_MODE:
	    break;
	case IPOD_MIC_MODE:
	    break;
	case IPOD_SIR_MODE:
	    mode02_send(SIR_SELECT);
	    break;
	case IPOD_DIR_MODE:
	    break;
	case IPOD_AIR_MODE:
	    break;
	case IPOD_RFT_MODE:
	    break;
    }
    return flag;
}    
UB IPOD_key_ff(void)
{
    UB flag = 0;
    //Send Command;
    switch(ipod_mode)
    {
	case IPOD_GEN_MODE:
	    break;
	case IPOD_MIC_MODE:
	    break;
	case IPOD_SIR_MODE:
	    mode02_send(SIR_FF);
	    break;
	case IPOD_DIR_MODE:
	    break;
	case IPOD_AIR_MODE:
          xprintf(IPOD_AIR_MODE,0x00,AIR_PLAY_CONTROL,IPOD_CON_FF,-1);                
	    break;
	case IPOD_RFT_MODE:
	    break;
    }
    return flag;
}    
UB IPOD_key_fb(void)
{
    UB flag = 0;
    //Send Command;
    switch(ipod_mode)
    {
	case IPOD_GEN_MODE:
	    break;
	case IPOD_MIC_MODE:
	    break;
	case IPOD_SIR_MODE:
	    mode02_send(SIR_FB);
	    break;
	case IPOD_DIR_MODE:
	    break;
	case IPOD_AIR_MODE:
          xprintf(IPOD_AIR_MODE,0x00,AIR_PLAY_CONTROL,IPOD_CON_FS,-1);              
	    break;
	case IPOD_RFT_MODE:
	    break;
    }
    return flag;
}

UB IPOD_key_random(void)
{
    UB flag = 0;
    //Send Command;
    switch(ipod_mode)
    {
	case IPOD_GEN_MODE:
	    break;
	case IPOD_MIC_MODE:
	    break;
	case IPOD_SIR_MODE:
	    mode02_send(SIR_SHUFFLE);
	    break;
	case IPOD_DIR_MODE:
	    break;
	case IPOD_AIR_MODE: 
          xprintf(IPOD_AIR_MODE,0x00,AIR_PLAY_CONTROL,ipod_random,-1);                 
	    break;
	case IPOD_RFT_MODE:
	    break;
    }
    return flag;
}    
UB IPOD_key_intro(void)
{
    UB flag = 0;
    //Send Command;
    switch(ipod_mode)
    {
	case IPOD_GEN_MODE:
	    break;
	case IPOD_MIC_MODE:
	    break;
	case IPOD_SIR_MODE:
	    mode02_send(SIR_SHUFFLE);
	    break;
	case IPOD_DIR_MODE:
	    break;
	case IPOD_AIR_MODE:
    
	    break;
	case IPOD_RFT_MODE:
	    break;
    }
    return flag;
}    

UB IPOD_key_repeat(void)
{
    UB flag = 0;
    //Send Command;
    switch(ipod_mode)
    {
	case IPOD_GEN_MODE:
	    break;
	case IPOD_MIC_MODE:
	    break;
	case IPOD_SIR_MODE:
	    mode02_send(SIR_REPEAT);
	    break;
	case IPOD_DIR_MODE:
	    break;
	case IPOD_AIR_MODE:
          xprintf(IPOD_AIR_MODE,0x00,AIR_PLAY_CONTROL,ipod_repeat,-1);            
	    break;
	case IPOD_RFT_MODE:
	    break;
    }
    return flag;
}    

UB IPOD_key_mode(void)
{
    if(ipod_mode == IPOD_SIR_MODE)
        {
        ipod_mode = IPOD_AIR_MODE;
        
        xprintf(0x00,0x01,ipod_mode,-1);  
//         if(mode04_come_back() != AIR_ACK)
//            return;
        mode04_init();
        }
    else
        {
        ipod_mode = IPOD_SIR_MODE;
        xprintf(0x00,0x01,ipod_mode,-1);   
        }
    return ipod_mode;
}

UB IPOD_key_vup(void)
{
    UB flag = 0;
    //Send Command;
    switch(ipod_mode)
    {
	case IPOD_GEN_MODE:
	    break;
	case IPOD_MIC_MODE:
	    break;
	case IPOD_SIR_MODE:
	    mode02_send(SIR_VOL_UP);
	    break;
	case IPOD_DIR_MODE:
	    break;
	case IPOD_AIR_MODE:   
	    break;
	case IPOD_RFT_MODE:
	    break;
    }
    return flag;

}
UB IPOD_key_vdown(void)
{
    UB flag = 0;
    //Send Command;
    switch(ipod_mode)
    {
	case IPOD_GEN_MODE:
	    break;
	case IPOD_MIC_MODE:
	    break;
	case IPOD_SIR_MODE:
	    mode02_send(SIR_VOL_DOWN);
	    break;
	case IPOD_DIR_MODE:
	    break;
	case IPOD_AIR_MODE:   
	    break;
	case IPOD_RFT_MODE:
	    break;
    }
    return flag;

}


void IPOD_redisp(void)
{
}



//for output variable argument.
static void xprintf(UW start,...)
{

    va_list arg_ptr;
    UB i=0;
    UB check_sum;

   UW temp;
	
    uart_tr_buff[0] = IPOD_PREFIX1;
    uart_tr_buff[1] = IPOD_PREFIX2;
    uart_tr_buff[3] = (UB)start;
    check_sum = uart_tr_buff[3];

    va_start(arg_ptr, start);	

    for(i=4; ; i++ )
    {
    	temp = va_arg(arg_ptr,UW);
	if(temp ==  -1)
		break;
	uart_tr_buff[i] = (UB)temp;
	check_sum += (UB)uart_tr_buff[i];
    }

    va_end(arg_ptr);
    uart_tr_buff[2] = i - 3;
    check_sum += uart_tr_buff[2];
    check_sum = 0x100 - check_sum;
    uart_tr_buff[i] = check_sum;

	
    ipod_com_init();
    uart_transfer();
    
}


static void mode02_send(SIR_INDEX command)
{
    switch(command2[command][0])
    {
	case 0:	    //Refer to IPOD Simple Remote.
	    xprintf(IPOD_SIR_MODE,0x00,command2[command][1],-1);
	    break;
	case 1:
	    xprintf(IPOD_SIR_MODE,0x00,0x00,command2[command][1],-1);
	    break;
	case 2:
	    xprintf(IPOD_SIR_MODE,0x00,0x00,0x00,command2[command][1],-1);
	    break;
	default:
	    xprintf(IPOD_SIR_MODE,0x00,0x00,0x00,0x00,command2[command][1],-1);
	    break;
    }
     xprintf(IPOD_SIR_MODE,0x00,command2[0][1],-1);
}

static void mode03_send()
{
}

static void  mode04_init(void)
{
    UB temp = 0;
    UB temp_count;
        ipod_disp = IPOD_DISP_MODE04;
        ipod_layer = IPOD_LAYER_MAIN;      //DIE TIE
        ipod_bank = IPOD_BANK_LEFT;
        
        ipod_db_position = 0;
        ipod_pb_position = 1;
        ipod_db_count = 0;
        ipod_pb_count = 0;
        ipod_db_page = 0;
        ipod_db_page =0;
        ipod_db_last_page = 0;
        ipod_pb_last_page = 0;
        
        mode04_init_data();

        
        mode04_db_reset();
        if(mode04_come_back() != AIR_ACK)
            return;

        
        ipod_bank = IPOD_BANK_RIGHT;


        mode04_pb_count();
        if(mode04_come_back() == AIR_RET_PLAY_TRACK)
            {
            ipod_pb_count = (uart_rc_buff[6]<<24)|(uart_rc_buff[7]<<16)|(uart_rc_buff[8]<<8)|uart_rc_buff[9];
            }
        
        if(ipod_db_count < NUM_IPOD_DISP)
            temp_count = ipod_db_count;
        else
            temp_count = NUM_IPOD_DISP;

        if(ipod_pb_count > 0)
            {
                for(temp = 0; temp<temp_count; temp++)
                {
                    mode04_pb_name(temp);
                    if(mode04_come_back() == AIR_RET_TRACK_NAME)
                        mode04_get_name(temp); 
                    else
                         continue;

            }            
        }
        ipod_bank = IPOD_BANK_LEFT;


    //INIT OSD
    Cd_WaitTime100msReq( TIM_CONT_START , 5, TIM_100MS_IPOD_OSD);

     IPOD_send_disp_msg(MS_OSD_REQ,DSP_ID_MP3_NAME, DSP_DAT_ON);        
}

static void mode04_select(void)
{
    UB temp_category;
    UB temp;
    UB temp_count;
    UB last_category;
    if(ipod_bank == IPOD_BANK_LEFT)
        {

        
        if(ipod_layer>IPOD_LAYER_MAIN)
            {
                last_category = mode04_get_category();
                mode04_db_select(last_category,ipod_db_position);
                if(mode04_come_back() != AIR_ACK)
                    return;
            }     

         ipod_layer++;
        temp_category = mode04_set_category();

        mode04_db_get(temp_category);
        if(mode04_come_back() == AIR_RET_NUM_CATE)
            {
            ipod_db_count = (uart_rc_buff[6]<<24)|(uart_rc_buff[7]<<16)|(uart_rc_buff[8]<<8)|uart_rc_buff[9];
            }
        else
            {
            ipod_db_count = 0;
            }

        if(ipod_db_count < NUM_IPOD_DISP)
            temp_count = ipod_db_count;
        else
            temp_count = NUM_IPOD_DISP;


        for(temp = 0; temp<temp_count; temp++)
        {
            mode04_db_retrieve(temp_category,  temp, 1);
            if(mode04_come_back() == AIR_RET_CATE_DB)
                mode04_get_name(temp); 
            else
                 continue;
            ipod_db_position = 0;
        }
        


        /*

        mode04_db_retrieve(temp_category,  0, temp_count);
        for(temp = 0; temp<temp_count; temp++)
        {
            if(mode04_come_back() == AIR_RET_CATE_DB)
                mode04_get_name(temp); 
            else
                 break;
        }
        */



        for(;temp<NUM_IPOD_DISP;temp++)
            {
            ipod_db_disp_info[temp].file_name[0]='\0';
            ipod_db_disp_info[temp].file_name[1]='\0';   
            }
    }
    else
        {
        mode04_pb_play(ipod_pb_position);
        if(mode04_come_back() != AIR_ACK)
            return;        
//        ipod_pb_position = 0;
        }
    IPOD_send_disp_msg(MS_OSD_REQ,DSP_ID_MP3_NAME, DSP_DAT_ON);        

⌨️ 快捷键说明

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