📄 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.
*/
#ifdef OP_5121_POWER_KEY
void Check_panel_key_by_gpio_5121(void)
{
UINT32 key_data;
static int key_state = 0;
static UINT32 key_previ = 0xfff;
regs0->gpio_oe[38 / 16] &= (~0x1 << (38 % 16));
key_data = (regs0->gpio_in[38 / 16] & (0x1 << (38 % 16)));
if(key_data == key_previ)
{
//psprintf(RegionValStr[REGION1], "KEY %02d", key_data);
//PrintOsdMsg(STR_OS_SPACE, REGION1, 1, 1);
switch (key_data)
{
case 0x00:
if(key_state == 2)
{
call_ir_func(IRC_POWER);
}
key_state = 1;
break;
default:
key_state = 2;
break;
}
}
else
{
key_previ = key_data;
key_state = 2;
}
}
#endif
#ifdef HK_ORITRON_PANNEL//lijd 2005-5-26 14:01
void SendDataToSM1623LED(void)
{
int i;
for(i=0;i<VFD_DISPLAY_SIZE;i+=4)
{
regs0->iop_data[VFD_CMD] = (0xc0 | i); // transfer address
if((VFD_DISPLAY_SIZE-i)<=4)//modefied by wangfeng,2003-11-24 10:41
{
regs0->iop_data[VFD_DAT0] = vfd_mem[i + 1] << 8 | vfd_mem[i];
regs0->iop_data[0] = (regs0->iop_data[0] & VFD_DATLEN_MASK) |
(FUN_VFD_WRITE | VFD_DAT_LEN2);
}
else
{
regs0->iop_data[VFD_DAT0] = vfd_mem[i + 1] << 8 | vfd_mem[i];
regs0->iop_data[VFD_DAT1] = vfd_mem[i + 3] << 8 | vfd_mem[i + 2];
regs0->iop_data[0] = (regs0->iop_data[0] & VFD_DATLEN_MASK) |
(FUN_VFD_WRITE | VFD_DAT_LEN4);
}
WaitIopFunRdy(IOP_RDY_WAIT);
}
}
#endif//#ifdef ORITRON_PANNEL//lijd 2005-5-26 14:01
void reset_vfd(void)
{
UINT16 nIndex = 0;
#ifdef HK_ORITRON_PANNEL//lijd 2005-5-26 14:01
int i;
for(i = 0; i < 14; i++)
vfd_mem[i] = 0x00;
SendDataToSM1623LED();
#else
init_vfd_clear();
#endif
/* 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);
#ifdef SHOW_HELLO_ON_VFD_WHEN_POWERON//zxb 2005-5-8 13:52
#ifdef XM_PANEL_VFD16315 //fcr 2005-10-31 14:38
#else
vfd_set_str(0, "HELLO");
#endif
#endif
#ifdef HK_ORITRON_PANNEL//lijd 2005-5-26 14:01
#ifdef XM_PANEL_VFD16315 //fcr 2005-10-31 14:38
vfd_set_str(0,0,0, "ON");
#else
vfd_set_str(0, "ON");
#endif
#endif
}
//
// 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)//xyy add for Oritron 2004-11-10
BYTE num_add_flag = 0;
BYTE command_flag = 1;
#endif
#ifdef PUSH_TRAY_IN //LYC 05/04/13
#define TRAY_IS_OUT_NUM 18 //because #define TRAY_IS_OUT_GPIO 18
BYTE tray_in_flag=0;
#endif
#ifdef VFD_DIMMING_CONTROL
extern BYTE dimming_level;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -