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

📄 vfd_drv_nec16312.c

📁 mp3 player program please read carefully.
💻 C
📖 第 1 页 / 共 3 页
字号:
/*
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 + -