📄 ipod.c
字号:
//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 + -