?? vfd_shift.c
字號:
/*
** FILE
** vfd.c
**
** DESCRIPTION
** handle VFD functions.
*/
//#define VFD_TEST
#if (VFD_MODULE == HT1611_LCD)
#include "vfd_k_ht1611.h" //for NINTAUS DVD-N701 key pad definition
#endif
BYTE vfd_state=0;
void __vfd_set_pgm(BYTE method)
{
#if VFD_MODULE!=FUT_6_BT_269GK1
BYTE i,trk;
trk = cd_trk_hi-cd_trk_lo;
/*** zyf 2000/11/03 add ***/
if(cd_trk_now>16)
{;}//vfd_set_dot(VFD_DOT_OVER);}
if(trk-1>16)
trk = 16;
for(i=1;i<=trk;i++)
{
if(method==0)
vfd_mem[vfd_prg[i]>>3]|= (1<<(vfd_prg[i]&0x07));
else if(--method==0)
vfd_mem[vfd_prg[i]>>3]&= ~(1<<(vfd_prg[i]&0x07));
else
vfd_mem[vfd_prg[i]>>3]^= (1<<(vfd_prg[i]&0x07));
}
//vfd_enable=VFD_CNT; //zhyf 1-4-27 9:14
#endif
}
/*** program playback display control
zyf 2000/10/03
***/
void vfd_prog_dis(BYTE prog_cnt,UINT16 num)
{
#ifdef SUPPORT_VFD
/*vfd_mem[VFDA_T0]=(VFD_7SEG_P>>1)&0x7f;
vfd_mem[VFDA_T1]=vfd_digit[prog_cnt] | ((VFD_7SEG_P&0x01)<<7);
*/
vfd_mem[VFDA_T0] = (vfd_mem[VFDA_T0]&(~VFD_7SEG_MASK)) | (vfd_digit[prog_cnt/10]>>1);
vfd_mem[VFDA_T1] = (vfd_mem[VFDA_T1]&(~VFD_7SEG_MASK)) | vfd_digit[prog_cnt%10]|((vfd_digit[prog_cnt/10]&0x01)<<7);
vfd_mem[VFDA_P0]=(vfd_mem[VFDA_P0]&(~VFD_7SEG_DIG_MASK)) | (vfd_digit[num/10]>>1);
vfd_mem[VFDA_P1]=(vfd_mem[VFDA_P1]&(~VFD_7SEG_MASK)) | (vfd_digit[num%10]|((vfd_digit[num/10]&0x01)<<7));
//vfd_enable=VFD_CNT; //zhyf 1-4-27 9:14
#endif
}
void vfd_set_7seg(UINT32 t, UINT32 mm)
{
t=mm;//reduce warning
}
/*
** FUNCTION
** polling_vfdr
**
** DESCRIPTION
** check if polling-ready
*/
int polling_vfdr(void)
{
#ifdef SUPPORT_VFD
UINT8 i;
UINT32 temp;
UINT32 key_data;
static UINT8 key_state=0;
static UINT32 key_previ=0;
if(regs0->iop_data[0]&FUN_MASK)
return 0;
switch(vfd_state)
{ //pppp
case VFD_READ:
regs0->iop_data[VFD_CMD]=0x42; //key polling
regs0->iop_data[0]=(regs0->iop_data[0]&VFD_DATLEN_MASK)|
(FUN_VFD_READ|3);
vfd_state = VFD_READ_BUSY;
break;
case VFD_READ_BUSY:
key_data=(reverse_fun(regs0->iop_data[VFD_DAT0]))|(reverse_fun(regs0->iop_data[VFD_DAT0]>>8)<<8) \
| (reverse_fun(regs0->iop_data[VFD_DAT1])<<16);
if(key_data==0)
{
key_state = 0;
key_previ = 0;
}
else
{
if(key_data!=key_previ)
{
key_state = 1;
key_previ = key_data;
}
else
{
if(key_state==1)
{
key_state = 2;
for(i=0;i<24;i++)
{
temp = 0x01<<i;
if(key_data&temp)
{
key_data = i+1;
break;
}
}
#ifdef VFD_TEST
psprintf(linebuf, "KEY %02d F:%d",key_data,vfd_keycode[key_data-1]);
strcpy(RegionValStr[REGION1], linebuf);
PrintOsdMsg(STR_OS_SPACE, REGION1, 1, 1);
//osd_print1(linebuf);
#else
call_ir_func(vfd_keycode[key_data-1]);
#endif
}
}
}
vfd_state = VFD_WRITE;
return 1;
case VFD_IDLE:
vfd_state = VFD_READ;
break;
}
#endif
return 0;
}
/*
** FUNCTION
** polling_vfd
**
** DESCRIPTION
** checking if we could issue VFD task
*/
int polling_vfd(void)
{
#ifdef SUPPORT_VFD
static BYTE i = 0;
//check IOP is free ?
if(regs0->iop_data[0]&FUN_MASK)
return 0;
switch(vfd_state)
{ //pppp
case VFD_WRITE:
regs0->iop_data[VFD_CMD]=(0xc0|i);
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[VFD_DAT2]=vfd_mem[i+5]<<8|vfd_mem[i+4];
regs0->iop_data[0]=(regs0->iop_data[0]&VFD_DATLEN_MASK)|
(FUN_VFD_WRITE|VFD_DAT_LEN6);
/* transfer data size add by chichang 2001 6/6 */
#if (VFD_MODULE == HT1611_LCD)
{
i+=6;
if(i==42)
i=0;
}
#elif (VFD_MODULE == FUT_6_BT_269GK1)
{
i+=6;
if(i==12)
i=0;
}
#endif
vfd_state = VFD_WRITE_BUSY;
break;
case VFD_WRITE_BUSY:
vfd_state = VFD_READ;
break;
case VFD_IDLE:
vfd_state = VFD_READ;
break;
}
#endif
return 0;
}
void init_vfd_clear(void)
{
int i,j;
BYTE mem_count;
//check IOP function free ?
for (i=0;i<0xffff;i++)
{
if(!(regs0->iop_data[0]&FUN_MASK))
break;
}
erase_vfd_mem();
//send memory data to VFD
#if VFD_MODULE == HT1611_LCD
mem_count=42;
#elif VFD_MODULE == FUT_6_BT_269GK1
mem_count=12;
#endif
for(j=0;j<5000;j++)//I think 5000 times are too long
for(i=0;i<mem_count;i+=6)
{
regs0->iop_data[VFD_CMD]=(0xc0|i);
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[VFD_DAT2]=vfd_mem[i+5]<<8|vfd_mem[i+4];
regs0->iop_data[0]=(regs0->iop_data[0]&VFD_DATLEN_MASK)|
(FUN_VFD_WRITE|VFD_DAT_LEN6);
}
//check IOP function free ?
for (i=0;i<0xffff;i++)
{
if(!(regs0->iop_data[0]&FUN_MASK))
break;
}
}
/*
** FUNCTION
** reset_vfd
**
** DESCRIPTION
** setup VFD. Should only called at power-up or emergency.
*/
void reset_vfd(void)
{
//#ifdef SUPPORT_VFD
UINT16 i;
init_vfd_clear();
/* display mode ? 13d15s or 6d16s add by chichang 2001/6/6 */
#if (VFD_MODULE == HT1611_LCD)
{
regs0->iop_data[VFD_CMD]=VFDC_SET_DISP | VFDC_SET_DISP_13D15S; /* 13D15S */
}
#elif (VFD_MODULE == FUT_6_BT_269GK1)
{
regs0->iop_data[VFD_CMD]=VFDC_SET_DISP | VFDC_SET_DISP_6D16S; /* 6D16S */
}
#endif
regs0->iop_data[0]=(regs0->iop_data[0]&VFD_DATLEN_MASK)|
(FUN_VFD_WRITE|VFD_DAT_LEN0);
//erase_vfd_mem();
//check IOP function free ?
for (i=0;i<0xffff;i++)
{
if(!(regs0->iop_data[0]&FUN_MASK))
break;
}
regs0->iop_data[VFD_CMD]=VFDC_DISP_CTRL | VFDC_DISP_CTRL_ON | VFDC_DISP_CTRL_10_16;
regs0->iop_data[0]=(regs0->iop_data[0]&VFD_DATLEN_MASK)|
(FUN_VFD_WRITE|VFD_DAT_LEN0);
//#endif
}
/*
** FUNCTION
** erase_vfd_mem
**
** DESCRIPTION
** clear vfd memory.
*/
void erase_vfd_mem(void)
{
#ifdef SUPPORT_VFD
unsigned i;
for(i=0;i<VFD_MEM_LEN; i++)
{
vfd_mem[i]=0;
}
//vfd_enable=VFD_CNT; //zhyf 1-4-27 9:14
#endif
}
void vfd_dot_pgm(BYTE prog_cont,UINT16 num)
{
prog_cont=num;
}
void vfd_dot(UINT32 method, UINT32 p)
{
UINT32 A = p>>3;
UINT32 tag = 1<<(p&0x07);
BYTE *ptr = &vfd_mem[A];
BYTE x = *ptr;
if (method==0)
x |= tag;
else if (--method==0)
x &= ~tag;
else
x ^= tag;
*ptr = x;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -