📄 spi_api.c
字号:
if(PBC_INTRO==Vcd_GetPBCState())
vfd_dot(VFD_DOT_ON, VFD_DOT_INTRO);
else vfd_dot(VFD_DOT_OFF, VFD_DOT_INTRO);
#endif
break;
case DSP_NO_DISC:
vfd_nodisc();
break;
case DSP_UNKNOW_DISC:
vfd_unknowdisc();
break;
case DSP_RETURN:
#if _SUPPORT_GAMECD
if(gIsGameCD){
vfd_show_time(0, 0);
VfdDiscTurnF = 1;
}
#endif
case DSP_DISPLAYMODE:
vfd_display_mode();
break;
case DSP_AUDIO:
vfd_audio_channel();
break;
case DSP_3D_CLASSIC:
break;
case DSP_3D_JAZZ:
break;
default:
#if _SUPPORT_GAMECD
if(!gIsGameCD)
#endif
{
if(PBC_PBCON == Vcd_GetPBCState())
vfd_dot(VFD_DOT_ON, VFD_DOT_PBC);
else if(PBC_NORMAL== Vcd_GetPBCState())
vfd_dot(VFD_DOT_OFF, VFD_DOT_PBC);
}
break;
}
switch(vfd_msg->control)
{
case CTRL_UPDATED_TIME:
vfd_normal_state();
VfdDiscTurnF = 1;
break;
default:
break;
}
#endif
}
unsigned char ReceiveByte()
{
unsigned char i,value=0;
SetInputMode_VFDData();
SetVFDClk();
for(i=0;i<8;i++)
{
ClearVFDClk();
FP_Delay(UPD16311_TW_CLOCK_DELAY);
SetVFDClk();
FP_Delay(UPD16311_TW_CLOCK_DELAY);
value<<=1;
if(GetVFDData())
value++;
}
return value;
}
void SendByte(unsigned char uctemp)
{
unsigned char i;
SetOutputMode_VFDData();
FP_Delay(UPD16311_TW_CLOCK_DELAY);
for (i = 0; i < 8; i++)
{
ClearVFDClk();
FP_Delay(UPD16311_TW_CLOCK_DELAY);
if(uctemp & 0x01)
SetVFDData();
else
ClearVFDData();
FP_Delay(UPD16311_TW_CLOCK_DELAY);
SetVFDClk();
uctemp >>= 1;
FP_Delay(UPD16311_TW_CLOCK_DELAY);
}
FP_Delay(UPD16311_TW_CLOCK_DELAY);
}
void SendCmd(unsigned char Cmd)
{
ClearVFDStb();
SendByte(Cmd);
SetVFDStb();
FP_Delay(UPD16311_TW_CLOCK_DELAY);
}
void ReadKeyData(unsigned char* scanData,unsigned char size)
{
unsigned char i;
ClearVFDStb();
SendByte(READ_KEY_DATA_COMMAND);
for (i = 0; i < size; i++)
{
scanData[i] = ReceiveByte();
}
SetVFDStb();
}
unsigned char FPGetKeyIndex( void )
{
unsigned char i, j,mask;
unsigned char temp;
ReadKeyData(FpKeyBuf,KB_KEYSIZE);
for (i=0; i<KB_KEYSIZE; i++)
{
if(FpKeyBuf[i]){
mask = 0x01;
for (j=0; j<8; j++)
{
if (FpKeyBuf[i] & mask)
{
temp = ((i<<3)+j)+1;
return temp;
}
mask<<=1;
}
}
}
return 0;
}
void VFD_state_init()
{
unsigned char i;
//command 1
SendCmd(DISPLAYMODE);
//command 2
SendCmd(WRITE_AUTO_DISPLAY_COMMAND);
ClearVFDStb();
//command 3
SendByte(WRITE_VFD_ADDRESS_MASK);
//data 0..size-1
for (i = 0; i < FP_MAX_BUF; i++)
{
FpBuf[i] = FpBufBak[i] = 0;
SendByte(0x00);
}
SetVFDStb();
//command 4
SendCmd(CONTROLDISPLAY);
#if !Test_Mode
vfd_readtoc();
#endif
VFD_next_state = VFD_state_scan_key_0;
//VFD_next_state = VFD_state_refresh_0;
}
void VFD_state_scan_key_0()
{
ClearVFDStb();
FpDateSize = KB_KEYSIZE;
SendByte(READ_KEY_DATA_COMMAND);
VFD_next_state = VFD_state_scan_key_1;
}
void VFD_state_scan_key_1()
{
FpKeyBuf[KB_KEYSIZE - FpDateSize] = ReceiveByte();
VFD_next_state = VFD_state_scan_key_2;
}
void VFD_state_scan_key_2()
{
if(--FpDateSize)
VFD_state_scan_key_1();
else{
SetVFDStb();
VFD_state_scan_key_3();
}
}
void VFD_state_scan_key_3()
{
static unsigned char OldIndex = 0;
unsigned char index ;
unsigned char key_function_data;
index = FPGetKeyIndex();
if(OldIndex!=index){
OldIndex = index;
#if Test_Mode
key_value=index;
#endif
if(index){
#if SPI_DEBUG_PRINT
SysPrintf("\n FpGet Index = 0x%02X",index);
#endif
key_function_data = FpKeyArray[index];
#if 0 //SEPERATE_PLAY_PAUSE
if(key_function_data == KEY_PLAY){
if(GetDiscType() == MP3_DISC){
if( !(Mp3_GetMain()!= MP3_PLAY) || (gMp3Status.trick != MP3_TRICK_OFF) )
key_function_data = KEY_PAUSE;
}else{
if( (Vcd_GetMainState() == MAIN_PLAY) && ( Vcd_GetSub2State() <= SUB2_TRICK_STEP) )
key_function_data = KEY_PAUSE;
}
}
#endif
if(key_function_data!= KEY_NULL)
// IR_Send_Msg(key_function_data, 0);
(*AttachedKeySendCallback)( key_function_data, 0 );
}
}
OldIndex = index;
if(bEnRefreshVfd)
VFD_next_state = VFD_state_refresh_0;
else
VFD_next_state = VFD_state_scan_key_0;
}
void VFD_state_scan_key_4()
{
}
void VFD_state_refresh_0()
{
unsigned char i,j;
VFDRefreshPtr = 0;
for (i = 0; i <FP_MAX_BUF; i++)
{
if(FpBuf[i] != FpBufBak[i] ){
FpBufBak[i] = FpBuf[i];
VFDRefreshPtr ++;
j = VFDRefreshPtr;
VFDRefreshStack[j].position = i;
VFDRefreshStack[j].data = FpBuf[i];
}
}
if(VFDRefreshPtr){
VFD_next_state = VFD_state_refresh_1;
}else
VFD_next_state = VFD_state_refresh_5;
}
void VFD_state_refresh_1()
{
SendCmd(DISPLAYMODE);
VFD_next_state = VFD_state_refresh_2;
}
void VFD_state_refresh_2() //command1
{
SendCmd(CONTROLDISPLAY);
VFD_next_state = VFD_state_refresh_3;
}
void VFD_state_refresh_3() //command2
{
SendCmd(WRITE_FIXED_DISPLAY_COMMAND);
//ClearVFDStb();
VFD_next_state = VFD_state_refresh_4;
}
void VFD_state_refresh_4() //address
{
for( ;VFDRefreshPtr>0; VFDRefreshPtr--){
ClearVFDStb();
SendByte(WRITE_VFD_ADDRESS_MASK|VFDRefreshStack[VFDRefreshPtr].position);
SendByte(VFDRefreshStack[VFDRefreshPtr].data);
SetVFDStb();
}
VFD_next_state = VFD_state_refresh_5;
}
void VFD_state_refresh_5()
{
#if Test_Mode
int i;
if(flash_lcd)
{
for (i = 0; i < FP_MAX_BUF; i++)
{
ClearVFDStb();
SendByte(WRITE_VFD_ADDRESS_MASK|i);
SendByte(0xff);
SetVFDStb();
}
}
else
{
if(!led_flag)
{
for (i = 0; i < FP_MAX_BUF; i++)
{
ClearVFDStb();
SendByte(WRITE_VFD_ADDRESS_MASK|i);
SendByte(0);
SetVFDStb();
FpBuf[i] = 0;
led_flag=TRUE;
}
}
else
vfd_dot(1,dot);
}
#else
if(VfdDiscTurnF)
{
if(OsdGetStatus() == DSP_PROG)
vfd_normal_state();
vfd_disc_turn(2);
}
#endif
VFD_next_state = VFD_state_scan_key_0;
}
/***************************************************************************
* VFD MODULE *
****************************************************************************/
BYTE vfd_adddress[7][7]=
{
{VFDA_P0_A,VFDA_P0_B,VFDA_P0_C,VFDA_P0_D,VFDA_P0_E,VFDA_P0_F,VFDA_P0_G},
{VFDA_P1_A,VFDA_P1_B,VFDA_P1_C,VFDA_P1_D,VFDA_P1_E,VFDA_P1_F,VFDA_P1_G},
{VFDA_P2_A,VFDA_P2_B,VFDA_P2_C,VFDA_P2_D,VFDA_P2_E,VFDA_P2_F,VFDA_P2_G},
{VFDA_M0_A,VFDA_M0_B,VFDA_M0_C,VFDA_M0_D,VFDA_M0_E,VFDA_M0_F,VFDA_M0_G},
{VFDA_M1_A,VFDA_M1_B,VFDA_M1_C,VFDA_M1_D,VFDA_M1_E,VFDA_M1_F,VFDA_M1_G},
{VFDA_S0_A,VFDA_S0_B,VFDA_S0_C,VFDA_S0_D,VFDA_S0_E,VFDA_S0_F,VFDA_S0_G},
{VFDA_S1_A,VFDA_S1_B,VFDA_S1_C,VFDA_S1_D,VFDA_S1_E,VFDA_S1_F,VFDA_S1_G},
};
void print_vfd_msg(unsigned char no, unsigned char data)
{
BYTE i;
if(SysGetSema(&gVfd_RWSema,SYS_NO_WAIT ) == SYS_RETURN_SUCCESS )
{
for(i=0;i<7;i++)
{
vfd_dot(VFD_DOT_OFF,vfd_adddress[no][i]); //clear former data
if((vfd_digit[data]>>i)&0x01)
{
vfd_dot(VFD_DOT_ON,vfd_adddress[no][i]); //light coresponding dot
}
}
SysReleaseSema(&gVfd_RWSema );
}
}
#if LED1623_MODUL_1
#define MAX_DISC_DOT 8
const BYTE vfd_disc[MAX_DISC_DOT] = {9,25,89,105,57,41,73,106};
#endif
#if LED1623_MODUL_2
#define DD1 (1)
#define DD2 (17)
#define DD3 (97)
#define DD4 (33)
#define DD5 (81)
#define DD6 (66)
#define DD7 (82)
#define DD8 (84)
#define DD9 (65)
#define DD10 (51)
#define DD11 (83)
#define DD12 (3)
#define DD13 (99)
#define DD14 (100)
#define MAX_DISC_DOT 14
const BYTE vfd_disc[MAX_DISC_DOT] = {
DD1,DD2,DD3,DD4,DD5,DD6,DD7,DD8,DD9,DD10,DD11,DD12,DD13,DD14
};
#endif
#if LED1623_MODUL_3
#define MAX_DISC_DOT 6
const BYTE vfd_disc[MAX_DISC_DOT] = {23,39,71,58,103,87};
#endif
#if LED1623_MODUL_4
#define MAX_DISC_DOT 6
const BYTE vfd_disc[MAX_DISC_DOT] = {86,22,38,70,54,102};
#endif
void vfd_disc_turn(BYTE mode)
{
static BYTE j=0;
BYTE i=0;
for(i=0;i<MAX_DISC_DOT;i++)
{
if((mode==1)||(mode==2))
vfd_dot(VFD_DOT_ON,vfd_disc[i]);
else
vfd_dot(VFD_DOT_OFF,vfd_disc[i]);
}
if (mode==2)
{
vfd_dot(VFD_DOT_OFF,vfd_disc[j++]);
if(j>=MAX_DISC_DOT)
j=0;
vfd_dot(VFD_DOT_ON,VFD_DOT_DOTS);
#if LED1623_MODUL_2
vfd_dot(VFD_DOT_ON,VFD_DOT_DOTM);
#endif
#if LED1623_MODUL_4
vfd_dot(VFD_DOT_ON, VFD_DOT_DOTM);
vfd_dot(VFD_DOT_ON, VFD_DOT_DOTS);
#endif
}
}
void vfd_open(void)
{
FPClearFp();
print_vfd_msg(3, CHAR_O);
print_vfd_msg(4, CHAR_P);
print_vfd_msg(5, CHAR_E);
print_vfd_msg(6, CHAR_N);
VfdDiscTurnF=0;
}
void vfd_close(void)
{
FPClearFp();
print_vfd_msg(2, CHAR_C);
print_vfd_msg(3, CHAR_L);
print_vfd_msg(4, CHAR_O);
print_vfd_msg(5, CHAR_S);
print_vfd_msg(6, CHAR_E);
VfdDiscTurnF=0;
}
void vfd_show_stop(void)
{
ULONG32 total_sec;
Time_t totaltime;
total_sec=(gVcdTrackInfo.TrackLBAList[gVcdTrackInfo.Total_track_cnt]-gVcdTrackInfo.TrackLBAList[0])/75;
#if LED1623_MODUL_4
// totaltime.hour = total_sec/3600;
// totaltime.min = total_sec%3600/60;
// totaltime.sec=total_sec%3600%60;
print_vfd_msg(1, gVcdTrackInfo.Total_track_cnt/10);
print_vfd_msg(2, gVcdTrackInfo.Total_track_cnt%10);
print_vfd_msg(3, (total_sec/60) / 10);
print_vfd_msg(4, (total_sec/60) % 10);
print_vfd_msg(5, (total_sec%60) / 10);
print_vfd_msg(6, (total_sec%60) % 10);
#else
totaltime.hour = total_sec/3600;
totaltime.min = total_sec%3600/60;
totaltime.sec=total_sec%3600%60;
// print_vfd_msg(1, total_sec/60);
print_vfd_msg(2, totaltime.hour);
print_vfd_msg(3, totaltime.min / 10);
print_vfd_msg(4, totaltime.min % 10);
print_vfd_msg(5, totaltime.sec / 10);
print_vfd_msg(6, totaltime.sec % 10);
#endif
}
void vfd_nodisc(void)
{
#if 1 //HTS 3303
print_vfd_msg(1, CHAR_N);
print_vfd_msg(2, CHAR_O);
print_vfd_msg(3, CHAR_D);
print_vfd_msg(4, CHAR_I);
print_vfd_msg(5, CHAR_S);
print_vfd_msg(6, CHAR_C);
#else
//print_vfd_msg(1, CHAR_N);
print_vfd_msg(2, CHAR_N);
print_vfd_msg(3, CHAR_O);
print_vfd_msg(4, CHAR_D);
print_vfd_msg(5, CHAR_I);
print_vfd_msg(6, CHAR_S);
#endif
}
void vfd_unknowdisc(void)
{
print_vfd_msg(1, CHAR_U);
print_vfd_msg(2, CHAR_N);
print_vfd_msg(3, CHAR_D);
print_vfd_msg(4, CHAR_I);
print_vfd_msg(5, CHAR_S);
print_vfd_msg(6, CHAR_C);
}
void vfd_show_time(USHORT track , ULONG32 time)
{
unsigned char cd_disp_trk,cd_disp_hh,cd_disp_mm,cd_disp_ss;
ULONG32 CurrentTime;
CurrentTime = time;
#if LED1623_MODUL_4 //HTS 3303
print_vfd_msg(1, track / 10);
print_vfd_msg(2, track % 10);
print_vfd_msg(3, (CurrentTime/60) / 10);
print_vfd_msg(4, (CurrentTime/60) % 10);
print_vfd_msg(5, (CurrentTime%60) / 10);
print_vfd_msg(6, (CurrentTime%60) % 10);
#else
cd_disp_hh = (unsigned char) (CurrentTime/3600);
cd_disp_mm = (unsigned char) ((CurrentTime%3600)/60);
cd_disp_ss = (unsigned char) (CurrentTime%60);
cd_disp_trk = (unsigned char) track;
#if LED1623_MODUL_1
print_vfd_msg(1, cd_disp_trk / 10);
print_vfd_msg(2, cd_disp_trk % 10);
#endif
#if LED1623_MODUL_2
print_vfd_msg(1, cd_disp_hh / 10);
print_vfd_msg(2, cd_disp_hh % 10);
#endif
//print_vfd_msg(4, CHAR_SPACE);
print_vfd_msg(3, cd_disp_mm / 10);
print_vfd_msg(4, cd_disp_mm % 10);
print_vfd_msg(5, cd_disp_ss / 10);
print_vfd_msg(6, cd_disp_ss % 10);
#endif
}
void vfd_normal_state(void)
{
ULONG32 CurrentTime;
CurrentTime = VcdGetCurSec();
vfd_show_time(gVcdTrackInfo.CurrTrack_no,CurrentTime);
//vfd_dot(VFD_DOT_ON,VFD_DOT_MINUS);
//vfd_dot(VFD_DOT_ON,VFD_DOT_PLAY);
//vfd_dot(VFD_DOT_OFF,VFD_DOT_PAUSE);
}
void vfd_readtoc(void)
{
FPClearFp();
//print_vfd_msg(6, CHAR_DASH);
print_vfd_msg(2, CHAR_C);
print_vfd_msg(3, CHAR_L);
print_vfd_msg(4, CHAR_O);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -