📄 panel.c
字号:
}
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
for (i = 0; i < FP_MAX_BUF; i++)
{
ClearVFDStb();
SendByte(WRITE_VFD_ADDRESS_MASK|i);
FpBuf[i] = FpBufBak[i] = 0xff;
SendByte(0xff);
SetVFDStb();
}
#else
vfd_readtoc();
#endif
VFD_next_state = VFD_state_scan_key_0;
}
void VFD_state_scan_key_0()
{
#ifdef DISC_TYPE_SHOW_MOMENT
OsdMsg_t osd_msg;
#endif
ClearVFDStb();
FpDateSize = KB_KEYSIZE;
SendByte(READ_KEY_DATA_COMMAND);
#if KEYNUM_SAME_AS_NUM_PLUS
if(now_is_plus)
{
plus_timer++;
if(plus_timer >TIMER_MAX)
{
(*AttachedKeySendCallback)(KEY_NUM0, 0 );
// plus_timer = 0;
now_is_plus = 0;
return;
}
}
#endif
#ifdef DISC_TYPE_SHOW_MOMENT
if(type_timer!=0)
{
if(gIsGameCD || ( GetDiscType() == VCD_DISC) || (CD_DA== GetDiscType()))
{
type_timer++;
if(type_timer > 50)
{
type_timer = 0;
is_show_momnet = FALSE;
osd_msg.mode = DSP_FOROSD;
osd_msg.control = CTRL_OSDOFF_TEST;
#if VCD_OSD_ENABLE
SysSendMsg(&gQ_OSD, &osd_msg, sizeof(OsdMsg_t), SYS_NO_WAIT);
#endif // CLEAR_STRING(gOsd_str_dyn[5] );
}
}
}
#endif
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 Test_Mode
key_value=index;
#endif
if(OldIndex!=index)
{
OldIndex = index;
if(index)
{
#if SPI_DEBUG_PRINT
SysPrintf("\n FpGet Index = 0x%02X",index);
#endif
key_function_data = FpKeyArray[index];
#if KEYNUM_SAME_AS_NUM_PLUS
if(key_function_data == KEY_5PLUS_FP)
{
now_is_plus = 1;
}else
{
now_is_plus = 0;
}
#endif
#if 0 //SEPERATE_PLAY_PAUSE
if(key_function_data == KEY_PLAY_PAUSE /*KEY_PLAY*/)
{
if(GetDiscType() == MP3_DISC)
{
if( !(Mp3_GetMain()!= MP3_PLAY) || (gMp3Status.trick != MP3_TRICK_OFF) )
key_function_data = KEY_PAUSE;
else
key_function_data = KEY_PLAY;
}else
{
if((Vcd_GetMainState() == MAIN_PLAY) && ( Vcd_GetSub2State() <= SUB2_TRICK_STEP) )
key_function_data = KEY_PAUSE;
else
key_function_data = KEY_PLAY;
}
}
#endif
if(key_function_data!= KEY_NULL)
// IR_Send_Msg(key_function_data, 0);
(*AttachedKeySendCallback)( key_function_data, 0 );
}
}
OldIndex = index;
VFD_next_state = VFD_state_refresh_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
if(!led_flag)
{
if(dot>=1)
vfd_dot(1,dotoff);
vfd_dot(0,dot);
led_flag=TRUE;
}
#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 *
****************************************************************************/
#if PANEL_FUTNORMAL
const unsigned char vfd_addr[12] = { 1, 0, 3, 2, 4, 6, 8, 11, 10, 0, 0, 0 };
void print_vfd_msg(unsigned char no, unsigned char data)
{
if(SysGetSema(&gVfd_RWSema,SYS_NO_WAIT ) == SYS_RETURN_SUCCESS )
{
switch (no)
{
case 0:
case 2:
case 7:
FpBuf[vfd_addr[no]] &= (~0x3f);
FpBuf[vfd_addr[no] - 1] &= (~0x80);
if(vfd_digit[data] & 0x01)
FpBuf[vfd_addr[no] - 1] |= (0x80);
FpBuf[vfd_addr[no]] |= (vfd_digit[data] >> 1);
break;
default:
FpBuf[vfd_addr[no]] &= (~0x7f);
FpBuf[vfd_addr[no]] |= (vfd_digit[data]);
break;
}
SysReleaseSema(&gVfd_RWSema );
}
}
void vfd_show_time(USHORT track , ULONG32 time)
{
static unsigned char cd_time_ss = 0xff;
unsigned char cd_disp_trk,cd_disp_hh,cd_disp_mm,cd_disp_ss;
ULONG32 CurrentTime;
CurrentTime = time;
//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/*(gVcdTrackInfo.CurrTrack_no)*/;
// if(cd_disp_ss != cd_time_ss)
// {
// cd_time_ss = cd_disp_ss;
// {
print_vfd_msg(0, cd_disp_trk/100);
print_vfd_msg(1, cd_disp_trk/10);
print_vfd_msg(2, cd_disp_trk%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);
///print_vfd_msg(7, cd_disp_ss / 10);
//print_vfd_msg(8, cd_disp_ss % 10);
// }
//}
}
void vfd_disc_turn(unsigned char mode)
{
static unsigned char i = 0;
static unsigned char jj = 0;
if(SysGetSema(&gVfd_RWSema,SYS_NO_WAIT ) == SYS_RETURN_SUCCESS )
{
if(i > 5) i = 0;
if(i % 2 ==0){
jj ++;
if(jj > 5) jj = 0;
FpBuf[7] = 0x7f;
}
if(mode)
FpBuf[7] &= ~(1 << jj);
else
FpBuf[7] = 0x7f;
i++;
switch (i)
{
case 1:
vfd_dot(VFD_DOT_ON, VFD_DOT_COLON);
break;
case 4:
vfd_dot(VFD_DOT_OFF, VFD_DOT_COLON);
break;
case 3:
case 6:
FpBuf[VFD_DOT_PLAY / 8] |= (1 << (VFD_DOT_PLAY % 8));
FpBuf[VFD_DOT_PAUSE / 8] &= (~(1 << (VFD_DOT_PAUSE % 8)));
break;
default:
break;
}
SysReleaseSema(&gVfd_RWSema );
}
void vfd_readtoc(void)
{
//FPClearFp();
print_vfd_msg(0, CHAR_R);
print_vfd_msg(1, CHAR_E);
print_vfd_msg(2, CHAR_A);
print_vfd_msg(3, CHAR_D);
print_vfd_msg(4, CHAR_D);
print_vfd_msg(5, CHAR_I);
print_vfd_msg(6, CHAR_S);
print_vfd_msg(7, CHAR_C);
}
void vfd_open(void)
{
FPClearFp();
VfdDiscTurnF = 0;
print_vfd_msg(3, CHAR_O);
print_vfd_msg(4, CHAR_P);
print_vfd_msg(5, CHAR_E);
print_vfd_msg(6, CHAR_N);
}
void vfd_close(void)
{
//FPClearFp();
VfdDiscTurnF = 0;
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);
}
void vfd_nodisc(void)
{
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);
}
#elif PANEL_FUT32 //HTS VCD-5700
const unsigned char vfd_addr[7] = { 6, 5, 4, 3, 2, 1, 0 };
void print_vfd_msg(unsigned char no, unsigned char data)
{
if(SysGetSema(&gVfd_RWSema,SYS_NO_WAIT ) == SYS_RETURN_SUCCESS )
{
switch (no)
{
case 5:
FpBuf[vfd_addr[no]] &= (~0x3f);
FpBuf[vfd_addr[no] - 1] &= (~0x80);
if(vfd_digit[data] & 0x01)
FpBuf[vfd_addr[no] - 1] |= (0x80);
FpBuf[vfd_addr[no]] |= (vfd_digit[data] >> 1);
break;
default:
FpBuf[vfd_addr[no]] &= (0x80);
FpBuf[vfd_addr[no]] |= (vfd_digit[data]);
break;
}
SysReleaseSema(&gVfd_RWSema );
}
}
void vfd_disc_turn(unsigned char mode)
{
static unsigned char i = 0;
static unsigned char jj = 0;
if(SysGetSema(&gVfd_RWSema,SYS_NO_WAIT ) == SYS_RETURN_SUCCESS )
{
if(i > 5) i = 0;
if(i % 2 ==0){
jj ++;
if(jj >=13) jj = 0;
FpBuf[8] |= 0xfc;
FpBuf[9] |= 0x7f;
}
if(mode)
{
if(jj<7)
{
FpBuf[9] &= ~(0x40 >> jj);
FpBuf[8] |= 0xfc;
}
else
{
FpBuf[8] &= ~(0x80 >> (jj-7));
FpBuf[9] |= 0x7f;
}
}
i++;
switch (i)
{
case 1:
vfd_dot(VFD_DOT_ON, VFD_DOT_COLON);
break;
case 4:
vfd_dot(VFD_DOT_OFF, VFD_DOT_COLON);
break;
case 3:
case 6:
//FpBuf[VFD_DOT_PLAY / 8] |= (1 << (VFD_DOT_PLAY % 8));
//FpBuf[VFD_DOT_PAUSE / 8] &= (~(1 << (VFD_DOT_PAUSE % 8)));
break;
default:
break;
}
SysReleaseSema(&gVfd_RWSema );
}
}
void vfd_readtoc(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);
}
void vfd_show_time(USHORT track , ULONG32 time)
{
static unsigned char cd_time_ss = 0xff;
unsigned char cd_disp_trk,cd_disp_hh,cd_disp_mm,cd_disp_ss;
ULONG32 CurrentTime;
vfd_dot(VFD_DOT_ON, VFD_DOT_COLON1);
CurrentTime = time;
cd_disp_trk = (unsigned char) track;
if(MP3_DISC== GetDiscType())
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -