⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vfdhtx.c

📁 vfd htx moidified in couple
💻 C
字号:
/*
** FILE 
** vfdhtx.c
**
** DESCRIPTION
** handle VFD functions.
*/

/*** zyf 2000/11/01 ***/
#ifdef  HT1621_PANNEL
const UINT16  send_ht_cmd[5]={0x0802,0x0808,0x080a,0x0852,0x0806};
#endif


/*
** FUNCTION
** vfd_dot
**
** DESCRIPTION
** set/reset VFD bit according to method and bit-position(p)
**
** *NOTE*
** method 0:	SET
** method 1:	RESET
** method 2:	TOGGLE
*/
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;
	
}


void	__vfd_set_pause(void)
{
	//erase_vfd_mem();
	vfd_mem[VFDA_P0] = 0;
	vfd_mem[VFDA_P1] = VFD_7SEG_P;
	vfd_mem[VFDA_M0] = VFD_7SEG_A;
	vfd_mem[VFDA_M1] = VFD_7SEG_U;
	vfd_mem[VFDA_S0] = VFD_7SEG_S;
	vfd_mem[VFDA_S1] = VFD_7SEG_E;
	
}


void	__vfd_set_play(void)
{
	//erase_vfd_mem();
	vfd_mem[VFDA_P0] = 0;
	vfd_mem[VFDA_P1] = 0;
	vfd_mem[VFDA_M0] = VFD_7SEG_P;
	vfd_mem[VFDA_M1] = VFD_7SEG_L;
	vfd_mem[VFDA_S0] = VFD_7SEG_A;
	vfd_mem[VFDA_S1] = VFD_7SEG_Y;
}


void	__vfd_set_step(void)
{
	//erase_vfd_mem();
	vfd_mem[VFDA_P0] = 0;
	vfd_mem[VFDA_P1] = 0;
	vfd_mem[VFDA_M0] = VFD_7SEG_S;
	vfd_mem[VFDA_M1] = VFD_7SEG_T;
	vfd_mem[VFDA_S0] = VFD_7SEG_E;
	vfd_mem[VFDA_S1] = VFD_7SEG_P;
	
}

void	__vfd_set_open(void)
{
	erase_vfd_mem();
	vfd_mem[VFDA_P0]  = 0;
	vfd_mem[VFDA_P01] = 0;
	/*** zyf 2000/11/22 ***/
	vfd_mem[VFDA_P1]  = 0;
	vfd_mem[VFDA_P11] = 0;
	vfd_mem[VFDA_M0]  = ((VFD_7SEG_O>>4)&0x0f);
	vfd_mem[VFDA_M01] = ((VFD_7SEG_O<<4)&0xf0);
	vfd_mem[VFDA_M1]  = VFD_7SEG_P;
	vfd_mem[VFDA_M11] = ((VFD_7SEG_P<<4)&0xf0);
	vfd_mem[VFDA_S0]  = VFD_7SEG_E;
	vfd_mem[VFDA_S01] = ((VFD_7SEG_E<<4)&0xf0);
	vfd_mem[VFDA_S1]  = VFD_7SEG_N;
	vfd_mem[VFDA_S11] = ((VFD_7SEG_N<<4)&0xf0); 
	
}

void	__vfd_set_close(void)
{
	erase_vfd_mem();
	vfd_mem[VFDA_P0]  = 0;
	vfd_mem[VFDA_P01] = 0;
	vfd_mem[VFDA_P1]  = VFD_7SEG_C;
	vfd_mem[VFDA_P11] = ((VFD_7SEG_C<<4)&0xf0);
	vfd_mem[VFDA_M0]  = ((VFD_7SEG_L>>4)&0x0f);
	vfd_mem[VFDA_M01] = ((VFD_7SEG_L<<4)&0xf0);
	vfd_mem[VFDA_M1]  = VFD_7SEG_O;
	vfd_mem[VFDA_M11] = ((VFD_7SEG_O<<4)&0xf0);
	vfd_mem[VFDA_S0]  =  VFD_7SEG_S;
	vfd_mem[VFDA_S01] = ((VFD_7SEG_S<<4)&0xf0);
	vfd_mem[VFDA_S1]  =  VFD_7SEG_E;
	vfd_mem[VFDA_S11]  = ((VFD_7SEG_E<<4)&0xf0);
	
	
}
void  vfd_set_nodisk(void)
{
	erase_vfd_mem();         
	vfd_mem[VFDA_P0]  =  VFD_7SEG_N;
	vfd_mem[VFDA_P01] = ((VFD_7SEG_N<<4)&0xf0);
	vfd_mem[VFDA_P1]  =  VFD_7SEG_O;
	vfd_mem[VFDA_P11] = ((VFD_7SEG_O<<4)&0xf0);
	vfd_mem[VFDA_M0]  = ((VFD_7SEG_D>>4)&0x0f);
	vfd_mem[VFDA_M01] = ((VFD_7SEG_D<<4)&0xf0);
	vfd_mem[VFDA_M1]  =  VFD_7SEG_I;
	vfd_mem[VFDA_M11] = ((VFD_7SEG_I<<4)&0xf0);
	vfd_mem[VFDA_S0]  =  VFD_7SEG_S;
	vfd_mem[VFDA_S01] = ((VFD_7SEG_S<<4)&0xf0);
	vfd_mem[VFDA_S1]  =  VFD_7SEG_C;
	vfd_mem[VFDA_S11] = ((VFD_7SEG_C<<4)&0xf0);
    
} 


void __vfd_set_pgm(BYTE method)
{
#if 0
	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));    
	}
#endif 
}

/*** program playback display control 
zyf 2000/11/16
***/
void   vfd_prog_dis(BYTE prog_cnt,UINT16 num)
{
	
} 

void   vfd_set_7seg(UINT32 t, UINT32 mm) 
{
	int	A, B,C,D;
	int	BCDQ = DIV10(mm);
	int	BCDR = mm-10*BCDQ;
	
	
	switch(play_state)
	{
	case VCD_STATE_MP3_FILELIST:    //Jeff 20010718
	case VCD_STATE_NORMAL:
	case VCD_STATE_9FRAMES:
	case VCD_STATE_PREVIEW:
	case VCD_STATE_INTRO:
	case VCD_STATE_FASTFORWARD:
	case VCD_STATE_FASTBACKWARD:
	case VCD_STATE_PBC:
	case VCD_STATE_SLOW:
	case VCD_STATE_STOP:
		// case VCD_STATE_STEP:
	case VCD_STATE_FREEZE:
		if (t==0)
		{ 
			
			A=VFDA_P0; C=VFDA_P01;  
			B=VFDA_P1;D=VFDA_P11; 
			
			vfd_mem[A]	= (vfd_mem[A]&(~VFD_7SEG_DIG_MASK)) | (vfd_digit[BCDQ]&0xf0);
			vfd_mem[C]	= (vfd_mem[C]&(~VFD_7SEG_MASK))     | ((vfd_digit[BCDQ]<<4)&0xf0);
			vfd_mem[B]	= (vfd_mem[B]&(~VFD_7SEG_DIG_MASK)) | (vfd_digit[BCDR]&0x70);
			vfd_mem[D]	= (vfd_mem[D]&(~VFD_7SEG_MASK))     | ((vfd_digit[BCDR]<<4)&0xf0);
			
			
		}
		else if (--t==0)
		{
			A=VFDA_M0;  B=VFDA_M1;  
			C=VFDA_M01; D=VFDA_M11;           
			vfd_mem[A]	= (vfd_mem[A]&0xf0) | (vfd_digit[BCDQ]>>4);
			vfd_mem[C]	= (vfd_mem[C]&(~VFD_7SEG_MASK)) | ((vfd_digit[BCDQ]<<4)&0xf0);
			
			//vfd_mem[C] |= (vfd_mem[C]&(~VFD_7SEG_DIG_MASK)) | ((vfd_digit[BCDR]>>4)&0x07);
			
			vfd_mem[B]	= (vfd_mem[B]&(~VFD_7SEG_DIG_MASK)) | (vfd_digit[BCDR]&0xf0);
			vfd_mem[D]	= (vfd_mem[D]&(~VFD_7SEG_MASK))     | (vfd_digit[BCDR]<<4);
		}
		else 
		{  
			A=VFDA_S0; B=VFDA_S1; 
			C=VFDA_S01;D=VFDA_S11; 
			vfd_mem[A]	= (vfd_mem[A]&(~VFD_7SEG_DIG_MASK)) |  vfd_digit[BCDQ];
			vfd_mem[C]	= (vfd_mem[C]&(~VFD_7SEG_MASK))     | (vfd_digit[BCDQ]<<4);
			vfd_mem[B]	= (vfd_mem[B]&(~VFD_7SEG_DIG_MASK)) |  vfd_digit[BCDR];
			vfd_mem[D]	= (vfd_mem[D]&0x0f)     | (vfd_digit[BCDR]<<4);
			
		}
		
		break;
	default:
		break;
	} 
	/*** zyf 2000/11/16 ***/
	
#ifdef VFD_DOT_INTRO 
	if(play_state!=VCD_STATE_INTRO)
		vfd_reset_dot(VFD_DOT_INTRO);
	else
		vfd_set_dot(VFD_DOT_INTRO);   
#endif
	
	if(shuffle_flag)
		vfd_set_dot(VFD_DOT_RAN);
	else
		vfd_reset_dot(VFD_DOT_RAN);    
	
}


/*
** FUNCTION
** polling_vfdr
**
** DESCRIPTION
** check if polling-ready
*/
int	polling_vfdr(void)
{
#ifndef HT1621_PANNEL
#ifdef SUPPORT_VFD
	UINT16    i;
	UINT32    temp;
	UINT32    key_data;
	BYTE      key_recv=0;
	static    BYTE      key_state=0;
	static    BYTE      vfd_state=0;
	static    UINT32    key_previ=0;
	//return 0;
	switch(vfd_state)
	{       //pppp
			/*
			case VFD_IDLE:
			regs0->vfd_cfg = 0x0;
			regs0->vfd_cfg = 0x0128;
			regs0->vfd_func = 0;
			vfd_state       = VFD_READ;
			break;
		*/
	case VFD_READ:
		regs0->vfd_cfg  = 0x0;
		regs0->vfd_cfg  = 0x0124;
		regs0->vfd_func = 0;
		regs0->vfd_cmd  = 0x4342;
		regs0->vfd_func = RF_VFD_FUNC_POLL_SIZE(2)|RF_VFD_FUNC_PMODE;
		vfd_state       = VFD_READ_BUSY;
		break;
	case VFD_READ_BUSY:
		if(regs0->vfd_func&(3<<10))
			break;
		key_data=(reverse[regs0->vfd_dat0>>8])|(reverse[regs0->vfd_dat0]<<8) \
			| (reverse[regs0->vfd_dat1>>8]<<16);
		if(key_data==0)
		{ 
			key_state = 0;
			key_previ = 0;
		}
		else
		{
			if(key_data!=key_previ)
			{
				if(key_state==0)
				{
					key_state = 1;
					key_previ  = key_data;
               	}
			}
			else
			{
				if(key_state==1)
				{
					key_state = 2;
					
#ifdef  MONE_VFDR 
					for(i=0;i<24;i++)
					{
						temp = 0x01<<i;
						if(key_data&temp)
                        {
							key_recv = i+1;  
#ifdef VFD_TEST
							psprintf(linebuf, "Key %02d\n",key_recv);
							if(key_recv!=0) {
								//osd_print1(linebuf);
								strcpy(RegionValStr[REGION1], linebuf);
								PrintOsdMsg(STR_OS_SPACE, REGION1, 1, 1);
							}
#endif                
							break;
                        }
					}
#endif/*MONE_VFDR*/
#ifdef VFD_TEST
					break;
#endif
					temp=vfd_keycode[key_recv-1];
					call_ir_func(temp);
					
					
					
				}
			}
		}
		
		vfd_state =  VFD_READ;
		return 1;    
		
		break;
	default:
		vfd_state = VFD_READ;
		break;
	}
#endif        
	return 0; 
#endif
}  

/*
** FUNCTION
** polling_vfd
** 
** DESCRIPTION
** checking if we could issue VFD task
*/

int	polling_vfd(void)
{
#ifdef    SUPPORT_VFD
	UINT16    dat_h;
	UINT16    dat_l;
	static    BYTE i = 0;
	static    BYTE vfd_state=0;
	
	switch(vfd_state)
	{       //pppp
			/*
			case VFD_IDLE:
			regs0->vfd_cfg=0x0;
			regs0->vfd_cfg=0x0128;
			regs0->vfd_func = 0;
			vfd_state       = VFD_WRITE;
			break;
		*/
    case VFD_WRITE:
		regs0->vfd_cfg=0x0;
		regs0->vfd_cfg=0x0128;
		regs0->vfd_func     = 0;
		if(i==15)
		{
            dat_h=reverse[((((VFD_CMD_WR<<1)|(i*2))<<7)&0xff00)>>8];
            dat_l=reverse[((((VFD_CMD_WR<<1)|(i*2))<<7)|(vfd_mem[i]>>1))&0x00ff];
            regs0->vfd_dat0 = (dat_h<<8)|dat_l;
            regs0->vfd_dat1 = reverse[((vfd_mem[i]<<7)&0x80)|(vfd_mem[0]>>1)]<<8;
            regs0->vfd_func	= RF_VFD_FUNC_WRITE
				| RF_VFD_FUNC_CMD_SIZE(2)
				| RF_VFD_FUNC_CMODE;  
		}                  
		else
		{
            dat_h=reverse[((((VFD_CMD_WR<<1)|(i*2))<<7)&0xff00)>>8];
            dat_l=reverse[((((VFD_CMD_WR<<1)|(i*2))<<7)|(vfd_mem[i]>>1))&0x00ff];
            regs0->vfd_dat0 = (dat_h<<8)|dat_l;
            regs0->vfd_dat1 = ((reverse[((vfd_mem[i]<<7)&0x80)|((vfd_mem[i+1]>>1)&0x7f)]<<8)&0xff00)|reverse[((vfd_mem[i+1]<<7)&0x80)|(vfd_mem[i+2]>>1)];
            regs0->vfd_dat2 = ((reverse[((vfd_mem[i+2]<<7)&0x80)|(vfd_mem[i+3]>>1)]<<8)&0xff00); 
            regs0->vfd_func	= RF_VFD_FUNC_WRITE
				| RF_VFD_FUNC_CMD_SIZE(4)
				| RF_VFD_FUNC_CMODE;    
        }       
		i+=3;
		if(i>15)
			i=0;
		//i+=3;
		vfd_state = VFD_WRITE_BUSY;
		break;     
	case VFD_WRITE_BUSY:
		if(regs0->vfd_func&(3<<10))
			break;
		vfd_state = VFD_WRITE;
		break;
	default:
		vfd_state = VFD_WRITE;
		break;
	}     
#endif
	return 0;
}



/*
** FUNCTION
** reset_HT1621_LCD
**
** DESCRIPTION
** setup VFD.  Should only called at power-up or emergency.
*/
void	reset_vfd(void)
{
	UINT16   i;
	UINT16   cmd_data;
	UINT16   cmd_data_h;
	UINT16   cmd_data_l;
	
	for(i=0;i<5;i++)
	{  
		regs0->vfd_cfg        = 0x0130;
		regs0->vfd_func       = 0;
		cmd_data=((send_ht_cmd[i]<<4)&0xff00)>>8;
		cmd_data_h=reverse[cmd_data];
		cmd_data=(send_ht_cmd[i]<<4)&0x00ff;
		cmd_data_l=reverse[cmd_data];
		cmd_data=(cmd_data_h<<8)|cmd_data_l;
		regs0->vfd_dat0     = cmd_data;
		regs0->vfd_func     = RF_VFD_FUNC_WRITE
			| RF_VFD_FUNC_CMD_SIZE(1)
			| RF_VFD_FUNC_CMODE;
		
		do {
#ifdef	__LX4080
			asm volatile ("nop; nop");
#endif
		} while ((regs0->vfd_func & RF_VFD_FUNC_STATUS) != RF_VFD_FUNC_STATUS_FREE);
		
	} 
	for(i=0;i<16;i++)
    { 
		regs0->vfd_cfg        = 0x0130;
		regs0->vfd_func       = 0; 
		cmd_data  =((((VFD_CMD_WR<<1)|i*2)<<7)&0xff00)>>8;
		cmd_data_h=reverse[cmd_data]<<8;
		cmd_data  =(((VFD_CMD_WR<<1)|i*2)<<7)&0x0080;
		cmd_data_l=reverse[cmd_data];
		cmd_data  =cmd_data_h|cmd_data_l;
		regs0->vfd_dat0     =cmd_data;
		regs0->vfd_dat1     =0x0000;
		regs0->vfd_func     = RF_VFD_FUNC_WRITE
			| RF_VFD_FUNC_CMD_SIZE(2)
			| RF_VFD_FUNC_CMODE; 
		do {
#ifdef	__LX4080
			asm volatile ("nop; nop");
#endif
		} while ((regs0->vfd_func & RF_VFD_FUNC_STATUS) != RF_VFD_FUNC_STATUS_FREE);
	}   
	
}


/*
** FUNCTION
** refresh_vfd_mem_digit
**
** DESCRIPTION
** write VFD.
*/
void	refresh_vfd_mem_digit(void)
{
#ifdef SUPPORT_VFD	
	if (is_avd_playback_paused())
	{
		vfd_reset_dot(VFD_DOT_MIN);
	}
	if (is_avd_playback_stepping())
	{
		vfd_reset_dot(VFD_DOT_MIN);
	}
	else
	{
		/*** zyf 2000/09/15 ***/
		/*vfd_set_pp(0);
		vfd_set_mm(0);
		vfd_set_ss(0);*/
		vfd_set_dot(VFD_DOT_MIN);
		vfd_set_dot(VFD_DOT_LINE);
		vfd_set_dot(VFD_DOT_SEC);
		vfd_set_dot(VFD_DOT_PLAY); 
	}
	if(cd_type_loaded==CDROM)
	{ 
		vfd_set_tt(pFsJpeg->fsnav_dir_now);
	}
#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;
	}
	
#endif
}  	
/*
** FUNCTION
** refresh_vfd_mem
**
** DESCRIPTION
** SETUP vfd memory.
*/
void	refresh_vfd_mem(void)
{
#ifdef SUPPORT_VFD	
	/* set default. */
	refresh_vfd_mem_digit();
	
	
	if ( (cd_type_loaded==CDVCD20)||\
		(cd_type_loaded==CDVCD10))
		vfd_set_dot(VFD_DOT_VCD);
	
	if (cd_type_loaded==CDDA)
		vfd_set_dot(VFD_DOT_CD);
	
	if (cd_type_loaded==CDROM)
		vfd_set_dot(VFD_DOT_MP3);
	
	if(tv_format==MODE_PAL)
		vfd_set_dot(VFD_DOT_PAL);  
	else
		vfd_set_dot(VFD_DOT_NTSC);  
	
	if (IsPBCOn())
	{  if(cd_type_loaded==CDVCD20)         // YCH 1-3-9 10:38 for biyang
    vfd_set_dot(VFD_DOT_PBC);
	}
	
	switch(audio_channel)
	{
    case CH_LR:  
		vfd_set_dot(VFD_DOT_1L);
		vfd_set_dot(VFD_DOT_2R);
		vfd_set_dot(VFD_DOT_SLASH);
		break;
    case CH_LL: 
		vfd_set_dot(VFD_DOT_1L);
		vfd_reset_dot(VFD_DOT_SLASH);
		break;
    case CH_RR:
		vfd_set_dot(VFD_DOT_2R);
		vfd_reset_dot(VFD_DOT_SLASH);
		break;
	}
	vfd_set_pgm(0);
#endif   
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -