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

📄 ipod.c

📁 IPOD协议命令的驱动在CAR ENTERTAINMENT SYSTEM上的实现
💻 C
📖 第 1 页 / 共 3 页
字号:
//DVD PLAYER B/E PROGRAM
//ipod.c
//For Integrate the IPOD Accessory Protocol Interface.
//Base on M32r & MR32r OS
//Willix Lee,08-23-07
//Princeton Technology (ShenZhen) Corp. All rights reserved.

#include <mr32r.h>						// 兪俬俿俼俷俶
#include <string.h>						// memcpy,...
#include <stdarg.h>		//for var_argment.


#include"key.h"
#include"ipod.h"
#include"osd.h"
#include"disp.h"
#include"cd_sub.h"

#pragma SECTION		B		SDRAM_B

/*

UB IPOD_intro;			//intro off, intro all, intro dir
UB IPOD_bank;			//bank left, bank right
UB IPOD_play_time;		//00:00:00~99:59:59
UH IPOD_disp_position_right;	//1~65535
UH IPOD_disp_position_left;	//1~65535
UH IPOD_play_position;		//1~65535 



typedef struct {
	B LFN[MAX_LFN_LEN];
	UB f_directory;	
	UB ext; 
	UW total_time;
}DIR_LFN_IPOD;

typedef struct{
	UB	title[30];
	UB	artist[30];
	UB	album[30];
	UB	year[4];
	UB	comment[28];
	UB	album_track[2];
	UB	jan;
} ID3TAG_INFO;

DIR_LFN_IPOD  IPOD_cur_disp_info[NUM_FAT_DISP];
DIR_LFN_IPOD  IPOD_db_disp_info[NUM_FAT_DISP];
DIR_LFN_IPOD  IPOD_cur_play_info;
ID3TAG_INFO    IPOD_cur_tag_info;
*/



/*
const UB command[30][4] = {

0X03, 0X02, 0X00, 0X00, 	//按键释放 
0X03, 0X02, 0X00, 0X01,		//IPOD_KEY_PLAY_PAUSE
0X03, 0X02, 0X00, 0X02, 	//增大音量
0X03, 0X02, 0X00, 0X04, 	//减少音量

0X03, 0X02, 0X00, 0X08, 	//跳到下一首
0X03, 0X02, 0X00, 0X10, 	//跳到上一首
0X03, 0X02, 0X00, 0X80,		//IPOD_KEY_STOP
0X04, 0X02, 0X00, 0X80,		//IPOD_KEY_SHUFFL							 
0X05, 0X02, 0X00, 0X00,	    	//IPOD_KEY_REPEAT

0X05, 0X02, 0X00, 0X04,		//POWER_OFF
0X05, 0X02, 0X00, 0X00,		//LIGHT_ON_30S
0X05, 0X02, 0X00, 0X10,		//ipod_key_fast_forward	
0X05, 0X02, 0X00, 0X20,		//ipod_key_fast_rew

0X05, 0X02, 0X00, 0X40,		//IPOD_KEY_MENU
0X05, 0X02, 0X00, 0X80,	    	//IPOD_KEY_SELECT
0X06, 0X02, 0X00, 0X01,		//IPOD_KEY_UP ARROW
0X06, 0X02, 0X00, 0X02		//IPOD_KEY_DN ARROW
};
*/

const UB command2[40][2] = 	//[ByteIndex][Button Bitmask]
{
0x00, 0x00,  //DUMMY

0x00, 0x01,	//Play/Pause
0x00, 0x02,	//Volume Up
0x00, 0x04,	//Volume Down
0x00, 0x08,	//Next Track
0x00, 0x10,	//Prevous Track
0x00, 0x20,	//Next Album
0x00, 0x40,	//Previous Album
0x00, 0x80,	//Stop

0x01, 0x01,	//Play/Resume
0x01, 0x02,	//Pause
0x01, 0x04,	//Mute toggle
0x01, 0x08,	//Next Playlist
0x01, 0x10,	//Previous Playlist
0x01, 0x20,	//Next Chapter
0x01, 0x40,	//Previous Chapter
0x01, 0x80,	//Shuffle Setting Advance
	
0x02, 0x01,	//Repeat Setting Advance
0x02, 0x02,	//Power On
0x02, 0x04,	//Power Off
0x02, 0x08,	//Backlight 30 Seconds
0x02, 0x10,	//Begin Fast Forward
0x02, 0x20,	//Begin Rewind
0x02, 0x40,	//Menu
0x02, 0x80,	//Select

0x03, 0x01,	//Up Arrow
0x03, 0x02,	//Dwon Arrow
0x03, 0x04,	//Reserved
0x03, 0x08,	//Reserved
0x04, 0x10,	//Reserved
0x05, 0x20,	//Reserved
0x06, 0x40,	//Reserved
0x07, 0x80	//Reserved
};


UB const command3[][3] = 
{
0
};

UB const command4[][2] = 
{
0
};


const B str_playlists_en[] = {0x00,0x50,0x00,0x6C,0x00,0x61,0x00,0x79,0x00,0x6C,0x00,0x69,0x00,0x73,0x00,0x74,0x00,0x73,'\0','\0'};
const B str_Artists_en[] = {0x00,0x41,0x00,0x72,0x00,0x74,0x00,0x69,0x00,0x73,0x00,0x74,0x00,0x73,'\0','\0'};
const B str_Albums_en[] = {0x00,0x41,0x00,0x6C,0x00,0x62,0x00,0x75,0x00,0x6D,0x00,0x73,'\0','\0'};

const B str_Genres_en[] = {0x00,0x47,0x00,0x65,0x00,0x6E,0x00,0x72,0x00,0x65,0x00,0x73,'\0','\0'};
const B str_Songs_en[] = {0x00,0x53,0x00,0x6F,0x00,0x6E,0x00,0x67,0x00,0x73,'\0','\0'};
const B str_Composers_en[] = {0x00,0x43,0x00,0x6F,0x00,0x6D,0x00,0x70,0x00,0x6F,0x00,0x73,0x00,0x65,0x00,0x72,0x00,0x73,'\0','\0'};

const B str_audiobooks_en[] = {0x00,0x50,0x6C,0x61,0x79,0x6C,0x69,0x73,0x74,0x73,'\0','\0'};
const B str_podcasts_en[] = {0x00,0x50,0x6C,0x61,0x79,0x6C,0x69,0x73,0x74,0x73,'\0','\0'};


UB  ipod_mode;
UB  ipod_repeat;			//repeat off, repeat all, repeat dir
UB  ipod_random;		//random off, random all, random dir
UB  ipod_disp;
UB  ipod_layer;
UB  ipod_bank;
UB  ipod_db_position;
UB  ipod_pb_position;
static UB  ipod_db_page;
static UB  ipod_pb_page;
static UB  ipod_db_last_page;
static UB ipod_pb_last_page;
static UW  ipod_db_count;
static UW  ipod_pb_count;
static UB ipod_last_category;
static B ipod_temp_buff[50];
static UB ipod_category[6];


IPOD_FILE_INFO   ipod_pb_disp_info[NUM_IPOD_DISP];
IPOD_FILE_INFO   ipod_db_disp_info[NUM_IPOD_DISP];
/*

const IPOD_NODE_INFO ipod_hier[NUM_IPOD_NODE] = {
{0,0,0,0}
};

const IPOD_NODE_INFO ipod_node_main[]={
{ipod_node_main,ipod_node_music,IPOD_CATE_DUMMY,IPOD_HIER_1ST,"music"},
{ipod_node_main,ipod_node_photos,IPOD_CATE_DUMMY,IPOD_HIER_1ST,"photos"},
{ipod_node_main,ipod_node_videos,IPOD_CATE_DUMMY,IPOD_HIER_1ST,"videos"},
{ipod_node_main,ipod_node_extras,IPOD_CATE_DUMMY,IPOD_HIER_1ST,"extras"},
{ipod_node_main,ipod_node_settings,IPOD_CATE_DUMMY,IPOD_HIER_1ST,"settings"},
{ipod_node_main,ipod_node_shuffs,IPOD_CATE_DUMMY,IPOD_HIER_1ST,"shuffle songs"},
{0,0,0,0,0}
};

const IPOD_NODE_INFO ipod_node_music[] = {
{ipod_node_main,ipod_node_playlists,IPOD_CATE_PLAYLIST,IPOD_HIER_2ND,"playlists"},
{ipod_node_main,ipod_node_artists,IPOD_CATE_ARTIST,IPOD_HIER_2ND,"artists"},    
{ipod_node_main,ipod_node_albums,IPOD_CATE_ALBUM,IPOD_HIER_2ND,"albums"},
{ipod_node_main,ipod_node_songs,d,IPOD_CATE_TRACK,IPOD_HIER_2ND,"songs"},   
{ipod_node_main,ipod_node_podcasts,IPOD_CATE_PODCAST,IPOD_HIER_2ND,"podcasts"},
{ipod_node_main,ipod_node_genres,IPOD_CATE_GENRE,IPOD_HIER_2ND,"genres"},    
{ipod_node_main,ipod_node_composers,IPOD_CATE_COMPOSER,IPOD_HIER_2ND,"composers"},
{ipod_node_main,ipod_node_audiobooks,IPOD_CATE_AUDIOBOOK,IPOD_HIER_2ND,"audiobooks"},  
{0,0,0,0,0}
};

const IPOD_NODE_INFO ipod_node_playlists[] = {
{0,0,0,0,0}
};

*/


static void xprintf(UW start,...);
static void mode02_send(SIR_INDEX command);
static void mode03_send();

static void mode04_init(void);
static void mode04_select(void);
static void mode04_menu(void);
static void mode04_play(void);
static void mode04_arrow_up(void);
static void mode04_arrow_down(void);
static void mode04_arrow_left(void);
static void mode04_arrow_right(void);

static void mode04_db_reset(void);
static void mode04_db_select(UB category, UH index);
static void mode04_db_get(UB category);
static void mode04_db_retrieve(UB category, UH index, UH count);
static UB   mode04_come_back();
static UB   mode04_get_category(void);
static UB   mode04_set_category(void);
static void mode04_get_name(UB index);
static void mode04_init_data(void);
static void mode04_ipod_name(void);

static void mode04_pb_count(void);
static void mode04_pb_position(void);
static void mode04_pb_play(UH index);
static void mode04_pb_name(UH index);
static void mode04_pb_artist(UH index);
static void mode04_pb_album(UH index);

static void IPOD_send_disp_msg(UB kind,UB id,UB hyouji);
static void UTF_8ToUnicode(B *pOut, B *pText, UB pLen);

UB IPOD_init(void)
{
        UB f_ok_ng = 0;
//        ipod_mode = IPOD_SIR_MODE;
        
        return f_ok_ng;

}
void IPOD_get_msg(void)
{
}
void IPOD_cyclic(void)
{
        mode04_pb_position();
        if(mode04_come_back() == AIR_RET_TRACK_INDEX)
            {
            ipod_pb_position = (uart_rc_buff[6]<<24)|(uart_rc_buff[7]<<16)|(uart_rc_buff[8]<<8)|uart_rc_buff[9];
            }
        else
            {
            return;
            }        

        Cd_WaitTime100msReq( TIM_CONT_START , 5, TIM_100MS_IPOD_OSD);        
}

void IPOD_msg_key(UB key)
{
	UB f_ok_ng = 0;
	switch(key)
	{
	case KEY_ENTER:
		f_ok_ng =  IPOD_key_enter();	
		break;		
	case KEY_RETURN:
		f_ok_ng =  IPOD_Key_return();	
		break;		
	case KEY_MENU:	
		f_ok_ng =  IPOD_key_menu();	
		break;	
	case KEY_ARROW_UP:	
		f_ok_ng =  IPOD_Key_arrow_up();	
		break;	
	case KEY_ARROW_DOWN:	
		f_ok_ng =  IPOD_Key_arrow_down();	
		break;		
	case KEY_ARROW_LEFT:
		f_ok_ng =  IPOD_Key_arrow_left();	
		break;		
	case KEY_ARROW_RIGHT:
		f_ok_ng =  IPOD_Key_arrow_right();
              break;
	case KEY_STOP:
		f_ok_ng =  IPOD_key_stop();
		break;
	case KEY_PLAY:
		f_ok_ng =  IPOD_key_play();	
		break;
	case KEY_PAUSE:
		f_ok_ng =  IPOD_key_pause();
		break;
	case KEY_UP:
		f_ok_ng =  IPOD_key_prev();	
		break;
	case KEY_DOWN:
		f_ok_ng =  IPOD_key_next();	
		break;	
	case KEY_DUMMY:
		f_ok_ng =  IPOD_key_BL();	
		break;		
	case KEY_FF:	
		f_ok_ng =  IPOD_key_ff();	
		break;	
	case KEY_FB:
		f_ok_ng =  IPOD_key_fb();	
		break;	
	case KEY_RANDOM_SHUFFLE:
		f_ok_ng =  IPOD_key_random();	
		break;	
	case KEY_INTRO_PLAY:
		f_ok_ng =  IPOD_key_intro();	
		break;	
	case KEY_REPEAT:
		f_ok_ng =  IPOD_key_repeat();
		break;
       case KEY_ZOOM:
//              f_ok_ng = IPOD_key_mode();
              break;
       case KEY_VOL_UP:
               f_ok_ng = IPOD_key_vup();
              break;      
       case KEY_VOL_DOWN:
               f_ok_ng = IPOD_key_vdown();
              break;    
        case KEY_MUTE:
               f_ok_ng = IPOD_key_mode();
              break;                  
	default:
		break;
	} 
	
}

UB IPOD_key_enter(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:
          mode04_select();
	    break;
	case IPOD_RFT_MODE:
	    break;
    }
    return flag;

}    
UB IPOD_Key_return(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_MENU);
	    break;
	case IPOD_DIR_MODE:
	    break;
	case IPOD_AIR_MODE:
	    break;
	case IPOD_RFT_MODE:
	    break;
    }
    return flag;
}
UB IPOD_key_menu(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_MENU);
	    break;
	case IPOD_DIR_MODE:
	    break;
	case IPOD_AIR_MODE:
           mode04_menu();
	    break;
	case IPOD_RFT_MODE:
	    break;
    }
    return flag;
}
UB IPOD_Key_arrow_up(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_ARROW_UP);
	    break;
	case IPOD_DIR_MODE:
	    break;
	case IPOD_AIR_MODE:
           mode04_arrow_up();
	    break;
	case IPOD_RFT_MODE:
	    break;
    }
    return flag;
}    
UB IPOD_Key_arrow_down(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_ARROW_DOWN);
	    break;
	case IPOD_DIR_MODE:
	    break;
	case IPOD_AIR_MODE:
           mode04_arrow_down();     
	    break;
	case IPOD_RFT_MODE:
	    break;
    }
    return flag;
}    
UB IPOD_Key_arrow_left(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:
           mode04_arrow_left();
	    break;
	case IPOD_RFT_MODE:
	    break;
    }
    return flag;

}    
UB IPOD_Key_arrow_right(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:
           mode04_arrow_right();
	    break;
	case IPOD_RFT_MODE:
	    break;
    }
    return flag;

}


UB IPOD_key_stop(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_STOP);
	    break;
	case IPOD_DIR_MODE:
	    break;
	case IPOD_AIR_MODE:
           xprintf(IPOD_AIR_MODE,0x00,AIR_PLAY_CONTROL,IPOD_CON_STOP,-1);
	    break;
	case IPOD_RFT_MODE:
	    break;
    }
    return flag;
}    

UB IPOD_key_play(void)
{
    UB flag = 0;
    //Send Command;
    switch(ipod_mode)
    {
	case IPOD_GEN_MODE:
	    break;
	case IPOD_MIC_MODE:
	    break;
	case IPOD_SIR_MODE:

⌨️ 快捷键说明

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