📄 vfd_drv_nec16312.c
字号:
/*
history:
2004-7-19 14:43
wanghaoying move the following functions for nec16312 here
2004-7-7 14:25
lijd
Process 16312sw use for:
1. extern pannel key
2. volume button
note: need define NEC16312SW in cust_def.h
*/
/*
** FUNCTION
** reset_vfd
**
** DESCRIPTION
** setup VFD. Should only called at power-up or emergency.
*/
void reset_vfd(void)
{
UINT16 nIndex = 0;
init_vfd_clear();
/* display mode ? 13d15s or 6d16s add by chichang 2001/6/6 */
#ifndef TEST_VFD //shawn modify at 910131
regs0->iop_data[VFD_CMD] = VFDC_SET_DISP | VFD_DISPLAY_MODE; //2001/10/23
#else
regs0->iop_data[VFD_CMD] = VFDC_SET_DISP | COMMAND_MODE; //2002/01/31
#endif
regs0->iop_data[0] = (regs0->iop_data[0] & VFD_DATLEN_MASK) |
(FUN_VFD_WRITE | VFD_DAT_LEN0);
//erase_vfd_mem();
WaitIopFunRdy(IOP_RDY_WAIT);
#ifdef USE_VFD_LED_POWER
#if defined(USE_VFD_LED_POWER_LOW)&&!defined(VFD_SHOW_LOAD_TOGGLE)
write_vfd_led(0x0f);
#elif defined(PROVIEW_DV_509)
write_vfd_led(4);
#else
write_vfd_led(0);
#endif
#endif
#ifdef TONIC_DVD//20040206
write_vfd_led(0);
#endif//TONIC_DVD
vfd_set_idle_state(nIndex);
WaitIopFunRdy(IOP_RDY_WAIT);
}
//
// LED:
//
// MSB LSB
// ---- 0000 turn on all led
// ---- 1111 turn off all led
//
void write_vfd_led(UINT8 led_id)
{
regs0->iop_data[VFD_CMD] = 0x41;
regs0->iop_data[VFD_DAT0] = 0xff00 | led_id;
regs0->iop_data[0] = (regs0->iop_data[0] & VFD_DATLEN_MASK) | (FUN_VFD_WRITE | VFD_DAT_LEN1);
WaitIopFunRdy(IOP_RDY_WAIT);
}
#ifdef NEC16312SW
#define USE_16312SW_EXTEND_KEY
//#define USE_16312SW_VOLUME_BUTTON
#ifdef USE_16312SW_EXTEND_KEY
#define SW_KEY1 31
#define SW_KEY2 35
#endif
#ifdef USE_16312SW_VOLUME_BUTTON
#define VFD_SW_SPEED 3
#endif
void polling_vfdsw(void)
{
#ifdef USE_16312SW_EXTEND_KEY
BYTE key_datasw;
#ifdef THAKRAL_USE_SW_KEY
static BYTE flag=0;
static BYTE pre_key_datasw;
key_datasw= (BYTE)regs0->iop_data[7];
// psprintf(RegionValStr[REGION1], "KEY %02x ", key_datasw);
// PrintOsdMsg(STR_OS_SPACE, REGION1, 1, 1);
#ifdef VFD_KEY_TEST
if(key_datasw != 0xF0)
{
key_datasw>>=4;
key_datasw+=24;
{
printf("data=%d\n",key_datasw);
psprintf(RegionValStr[REGION1], "KEY %02d F:%d", key_datasw,
vfd_keycode[key_datasw - 1]);
PrintOsdMsg(STR_OS_SPACE, REGION1, 1, 1);
}
regs0->iop_data[7] = 0xF0;
}
#endif
if(key_datasw != 0xf0)
{
pre_key_datasw = key_datasw;
flag = 1;
}
if((key_datasw==0xf0)&&(flag==1))
{
flag = 0;
//pre_key_datasw>>=4;
//pre_key_datasw+=24;
save_srn_start_t = get_rtc_val();
#if defined(SW1_POWER)
if(pre_key_datasw==0x70)
call_ir_func(IRC_POWER);
else if(pre_key_datasw==0xb0)
call_ir_func(IRC_EJECT);
#elif defined(SW4_POWER)
if(pre_key_datasw==0x70)
call_ir_func(IRC_ONLY_PAUSE);
else if(pre_key_datasw==0xb0)
call_ir_func(IRC_PLAY_RESUME);
else if(pre_key_datasw==0xd0)
call_ir_func(IRC_STOP);
else if(pre_key_datasw==0xe0)
call_ir_func(IRC_POWER);
#else
call_ir_func(vfd_keycode[key_datasw-1]);
#endif
// pre_key_datasw = key_datasw;
}
// if((key_datasw&0x80)==0)
// {
// flag=1;
// }
// if(((key_datasw&0x80)==0x80)&&(flag==1))
// {
// flag=0;
// //call_ir_func(vfd_keycode[key_datasw - 1]);
// call_ir_func(IRC_POWER);
// }
#else
key_datasw= (BYTE)regs0->iop_data[7];
if(key_datasw != 0xF0)
{
key_datasw>>=4;
key_datasw+=24;
#ifdef FUSS_SW
if( (key_datasw == SW_KEY1) || (key_datasw == SW_KEY2) )
#endif
{
#ifdef VFD_KEY_TEST
printf("data=%d\n",key_datasw);
psprintf(RegionValStr[REGION1], "KEY %02d F:%d", key_datasw,
vfd_keycode[key_datasw - 1]);
PrintOsdMsg(STR_OS_SPACE, REGION1, 1, 1);
#else
save_srn_start_t = get_rtc_val();
call_ir_func(vfd_keycode[key_datasw - 1]);
#endif
}
regs0->iop_data[7] = 0xF0;
}
#endif //#ifdef THAKRAL_USE_SW_KEY
#endif //#ifdef USE_16312SW_EXTEND_KEY
#ifdef USE_16312SW_VOLUME_BUTTON
BYTE key_datasw;
static BYTE prev = 0;
BYTE updown = 0;
static BYTE up_cnt = 0;
static BYTE down_cnt = 0;
key_datasw= (BYTE)regs0->iop_data[7];
if(prev != key_datasw)
{
switch(prev)
{
case 0x00:
if (key_datasw == 0x80)
updown = 2;
else if(key_datasw == 0x40)
updown = 1;
break;
case 0x80:
if(key_datasw == 0xc0)
updown = 2;
else if (key_datasw == 0x00)
updown = 1;
break;
case 0xc0:
if(key_datasw == 0x40)
updown = 2;
else if (key_datasw == 0x80)
updown = 1;
break;
case 0x40:
if(key_datasw == 0x00)
updown = 2;
else if (key_datasw == 0xc0)
updown = 1;
break;
default:
updown = 0;
break;
}
if(updown == 1)
{
down_cnt++;
up_cnt = 0;
if(down_cnt >VFD_SW_SPEED )
{
down_cnt = 0;
ircmd_volume_up();
}
}
if(updown == 2)
{
up_cnt++;
down_cnt = 0;
if(up_cnt >VFD_SW_SPEED )
{
up_cnt = 0;
ircmd_volume_down();
}
}
prev = key_datasw;
}
#endif //#ifdef USE_16312SW_VOLUME_BUTTON
}
#endif //#ifdef NEC16312SW
/*
** FUNCTION
** polling_vfdr
**
** DESCRIPTION
** check if polling-ready
*/
#ifdef QISHENG_DVD
int standby_cnt=0;
#endif
#ifdef AUTO_INTO_STANDBY //oujx for tonic dvd//20040206
int auto_standby_timer=0;
#endif
#ifdef SUPPORT_GPIO_P_SCAN
BYTE PscanPortStatus=0;
BYTE PscanStatus=0;
BYTE PscanCount=0;
#endif
#if defined(TWO_FUN_IN_ONE_VFD_KEY) || defined(TWO_FUNC_IN_LEFT_RIGHT_KEY)||defined(TWO_FUNC_IN_VOLUP_VOLDN_KEY)//xyy add for Oritron 2004-11-10
BYTE num_add_flag = 0;
BYTE command_flag = 1;
#endif
#ifdef FIX_PAUSEPLAY_IN_JPEG_SLIDE
extern BYTE play_pause_flay_in_jpeg;
#endif
void polling_vfdr(void) //nec16321 type vfd
{
//psprintf(RegionValStr[REGION1], "KEY %02d",disp_trk_now);
//PrintOsdMsg(STR_OS_SPACE, REGION1, 1, 1);
#ifdef SUPPORT_SPI_QSI
//not use
#endif
#ifndef SUPPORT_SPI_QSI
#ifdef SUPPORT_VFD
UINT8 i;
UINT32 temp;
UINT32 key_data;
static UINT8 count = 0;
static UINT32 key_previ = 0;
static BYTE bWriteState=0;
#ifdef TWO_FUN_IN_ONE_VFD_KEY
static UINT32 key_previ_temp = 0;
static UINT16 key_press_time_count = 0;
#endif //TWO_FUN_IN_ONE_VFD_KEY
#if defined(TWO_FUNC_IN_LEFT_RIGHT_KEY)||defined(TWO_FUNC_IN_VOLUP_VOLDN_KEY)//lihj add for Oritron 2004-11-10
static UINT32 uPrevKey = 0;
static UINT16 uTimeCount = 0;
#endif
#ifdef KENLOON_PANEL3
write_vfd_led(0xe);
#endif
#if defined(SUPPORT_VFD_SHOW_P_SCAN)&&defined(TONIC_DVD)//20040206
if(vfd_intr_timer)
vfd_intr_timer--;
#endif
UINT32 *VfdReadData;
#ifdef SUPPORT_SPI
return;
#endif
#ifdef SUPPORT_GPIO_P_SCAN //oujx for tonic only
if(full_scrn==0&&(system_state==SYSTEM_READ_TITLE||system_state==SYSTEM_SETUP_BROWSER||system_state==SYSTEM_BROWSE||system_state==SYSTEM_OPEN||play_state==VCD_STATE_STOP||system_state==SYSTEM_NODISC))
{
if(PscanStatus==0)
{
if(GPIO_I_GET(36)==0)
PscanPortStatus=0;
else
PscanPortStatus=1;
PscanCount=0;
PscanStatus=1;
}
else
if(PscanStatus==1)
{
PscanCount++;
if(PscanCount>50)
{
if(GPIO_I_GET(36)==PscanPortStatus)
{
if(PscanPortStatus==0)
ircmd_p_scan_only();
else
ircmd_yuv_only();
}
PscanStatus=0;
}
}
}
#endif//#ifdef SUPPORT_GPIO_P_SCAN //oujx for tonic only
if(regs0->iop_data[0] & FUN_MASK)
return;
if(vfd_state == VFD_READ)
{
#ifndef USE_C_IOP//2004-2-12 12:08 lijd
//update_vfd_data();//nono 2003-7-24 0:41 mark
#ifdef SUPPORT_RECEIVER //huziqin 2004-4-27
VfdReadData = ((UINT32 *) (SDRAM_BASE_UNCACHED + regs0->iopya * 1024 + 0x588));
#elif defined( SPHE8202)
VfdReadData = ((UINT32 *) (SDRAM_BASE_UNCACHED + regs0->iopya * 1024 + 0x5e8));//for 8202 2004-3-31 16:47 lijd //lihj
#elif defined(XINGQIU_RECEIVER_PANNEL)
VfdReadData = ((UINT32 *) (SDRAM_BASE_UNCACHED + regs0->iopya * 1024 + 0x588));
#else
VfdReadData = ((UINT32 *) (SDRAM_BASE_UNCACHED + regs0->iopya * 1024 + 0x5b8)); //gerry,2004-3-24 12:53
#endif
//current is read 3 byte on io
key_data = *VfdReadData & 0x00ffffff;
*VfdReadData = 0; // Robert 030313
#else//USE_C_IOP
key_data =(regs0->iop_data[3]);
#endif//USE_C_IOP
if(key_data == 0xffffff)
return;
#ifdef USE_VFD_LED_TO_KEY_SOUND_INDICATE //gerry for PANDA6950,3-8-23 17:17
write_vfd_led(0xf);
#elif defined(USE_VFD_LED_TO_KEY_SOUND_INDICATE_HI_ON) //NONO 2003-10-15 16:14
write_vfd_led(0x0);
#endif
#ifdef TWO_FUN_IN_ONE_VFD_KEY
if((vfd_keycode[keycode_to_num(key_data)-1]==IRC_NEXT)||(vfd_keycode[keycode_to_num(key_data)-1]==IRC_PREV))
{
key_press_time_count++;
printf("key_press_time_count= %d \n",key_press_time_count);
}
if(key_press_time_count>=15)
{
if(vfd_keycode[keycode_to_num(key_data)-1]==IRC_NEXT)
{
call_ir_func(IRC_VFD_NEXT);
key_press_time_count=0;
num_add_flag = 1;
}
else if(vfd_keycode[keycode_to_num(key_data)-1]==IRC_PREV)
{
call_ir_func(IRC_VFD_PREV);
key_press_time_count=0;
num_add_flag = 1;
}
}
#endif //TWO_FUN_IN_ONE_VFD_KEY
#ifdef TWO_FUNC_IN_LEFT_RIGHT_KEY//xyy add for Oritron 2004-11-10
if((vfd_keycode[keycode_to_num(key_data)-1]==IRC_LEFT)||(vfd_keycode[keycode_to_num(key_data)-1]==IRC_RIGHT))
{
uTimeCount++;
printf("uTimeCount= %d \n",uTimeCount);
}
if(uTimeCount>=20)
{
if(vfd_keycode[keycode_to_num(key_data)-1]==IRC_LEFT)
{
call_ir_func(IRC_VFD_LEFT);
uTimeCount=0;
num_add_flag = 1;
}
else if(vfd_keycode[keycode_to_num(key_data)-1]==IRC_RIGHT)
{
call_ir_func(IRC_VFD_RIGHT);
uTimeCount=0;
num_add_flag = 1;
}
}
#endif
#ifdef TWO_FUNC_IN_VOLUP_VOLDN_KEY//lihj add for Oritron 2004-11-10
if((vfd_keycode[keycode_to_num(key_data)-1]==IRC_VOLUME_UP)||(vfd_keycode[keycode_to_num(key_data)-1]==IRC_VOLUME_DN))
{
uTimeCount++;
printf("uTimeCount= %d \n",uTimeCount);
}
if(uTimeCount>=20)
{
if(vfd_keycode[keycode_to_num(key_data)-1]==IRC_VOLUME_UP)
{
call_ir_func(IRC_VOLUME_UP);
uTimeCount=0;
num_add_flag = 1;
}
else if(vfd_keycode[keycode_to_num(key_data)-1]==IRC_VOLUME_DN)
{
call_ir_func(IRC_VOLUME_DN);
uTimeCount=0;
num_add_flag = 1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -