📄 dual_key.c
字号:
if(ucOsdState == _MenuNoneBenq)
COsdEnterNoneBenq();
else
COsdEnterFastInputBenq();
}
else if(ucCurrState == _SLEEP_STATE)
{
if(ucOsdState == _MenuNoneBenq)
{
#if(_MCU_TYPE == _REALTEK_EMBEDDED)
CMcuSelectFlashClk(_FLASH_CLK);
#endif
LEDG_ON();
LEDO_OFF();
#if(_TOUCH_SENSOR == _ON)
CKeyBuzzerBeep();
CKeyOneTouchSensorLedOn();
#endif
CModeResetMode();
ucCurrState = _SLEEP_STATE;
CPowerPanelOn();
CAdjustBackgroundColor(0x00, 0x00, 0x00);
COsdEnterNoneBenq();
}
else
{
#if(_TOUCH_SENSOR == _ON)
CKeyBuzzerBeep();
#endif
COsdEnterFastInputBenq();
}
}
else
CKeyMessageConvert(_ENTER_KEY_MASK, _ENTER_KEY_MESSAGE);
}
else
#endif//End of #if(_OSD_TYPE == _BENQ_OSD)
CKeyMessageConvert(_ENTER_KEY_MASK, _ENTER_KEY_MESSAGE);
break;
case(_AUTO_KEY_MASK):
CKeyMessageConvert(_AUTO_KEY_MASK, _AUTO_KEY_MESSAGE);
break;
case(_RIGHT_KEY_MASK):
CKeyMessageConvert(_RIGHT_KEY_MASK, _RIGHT_KEY_MESSAGE);
break;
case(_LEFT_KEY_MASK):
CKeyMessageConvert(_LEFT_KEY_MASK, _LEFT_KEY_MESSAGE);
break;
case(_EXIT_KEY_MASK):
//CLR_KEYSCANSTART();
//CLR_KEYSCANREADY();
if(ucCurrState == _ACTIVE_STATE)
{
#if(_OSD_TYPE == _BENQ_OSD)
if(ucOsdState==_MenuShowNonPresetModeBenq)
{
COsdFxOsdTimerBenq();
}
#else
if(ucOsdState==_MenuShowNonPresetModeGeneric)
{
COsdFxOsdTimerGeneric();
}
#endif
else
{
CKeyMessageConvert(_EXIT_KEY_MASK, _EXIT_KEY_MESSAGE);
}
}
#if(_OSD_TYPE == _GENERIC_OSD)
/*//ryan
else if(ucKeyStatePrev ^ ucKeyStateCurr)
{
if(((ucCurrState == _NOSIGNAL_STATE) || (ucCurrState == _NOSUPPORT_STATE)) && (bPressAnyKeytoWakeUp))
{
CTimerCancelTimerEvent(DisplayBurnInPatternGeneric);
CTimerCancelTimerEvent(CModePowerSavingEvent);
if(ucOsdState == _MenuNoneGeneric)
{
COsdFxOsdTimerGeneric();
COsdExitNoneGeneric();
}
else
COsdExitFastInputGeneric();
}
else if(ucCurrState == _SLEEP_STATE)
{
if(ucOsdState == _MenuNoneGeneric)
{
bLED1 = _LED_ON;
bLED2 = _LED_OFF;
CModeResetMode();
ucCurrState = _SLEEP_STATE;
CPowerPanelOn();
CAdjustBackgroundColor(0x00, 0x00, 0x00);
COsdExitNoneGeneric();
}
else
COsdExitFastInputGeneric();
}
else
CKeyMessageConvert(_EXIT_KEY_MASK, _EXIT_KEY_MESSAGE);
}*/
#endif//End of #if(_OSD_TYPE == _GENERIC_OSD)
else
CKeyMessageConvert(_EXIT_KEY_MASK, _EXIT_KEY_MESSAGE);
break;
case(_FACTORY_KEY_MASK):
if(ucCurrState==_PWOFF_STATE)
{
SET_POWERSWITCH();
SET_FACTORY_MODE(_ON);
CLR_KEYSCANSTART();
CLR_KEYSCANREADY();
}
break;
#if(_SERVICE_PAGE == _ON)
case(_SERVICE_KEY_MASK):
if(ucCurrState==_PWOFF_STATE)
{
bServiceMode=_TRUE;
if(ucCurrState==_PWOFF_STATE)
{
if(stGlobalData4.BurnIn==_BURNIN_ON)
SET_FACTORY_MODE(_ON);
else
SET_FACTORY_MODE(_OFF);
}
SET_POWERSWITCH();
CLR_KEYSCANSTART();
CLR_KEYSCANREADY();
}
break;
#endif
case(_BURNINOFF_KEY_MASK):
if((ucCurrState==_NOSIGNAL_STATE)&&(stGlobalData4.BurnIn==_BURNIN_ON))
{
stGlobalData4.BurnIn=_BURNIN_OFF;
CModeResetMode();
#if(_OSD_TYPE == _BENQ_OSD)
CTimerCancelTimerEvent(DisplayBurnInPatternBenq); // Clear Burn _In OSD
#else
CTimerCancelTimerEvent(DisplayBurnInPatternGeneric); // Clear Burn _In OSD
#endif
CEepromSaveGlobalData4();
CLR_KEYSCANSTART();
CLR_KEYSCANREADY();
}
break;
case(_POWER_KEY_MASK):
if((ucKeyStatePrev ^ ucKeyStateCurr) & _POWER_KEY_MASK)
{
CTimerDelayXms(20); //double check power key for ESD
if(CKeyScan()==_POWER_KEY_MASK) //double check power key for ESD
{
if(ucCurrState==_PWOFF_STATE)
{
if(stGlobalData4.BurnIn==_BURNIN_ON)
SET_FACTORY_MODE(_ON);
else
SET_FACTORY_MODE(_OFF);
}
#if(_SERVICE_PAGE == _ON)
bServiceMode=_FALSE;
#endif
SET_POWERSWITCH();
CLR_KEYSCANSTART();
CLR_KEYSCANREADY();
}
}
break;
default:
CLR_KEYREPEATSTART();
CTimerCancelTimerEvent(CKeyRepeatEnableTimerEvent);
#if(_OSD_TYPE == _BENQ_OSD)
CTimerCancelTimerEvent(DisplayMenuWhenOsdLock15SecBenq);
if(bStoreMenuKeyMessage==_TRUE)
{
bStoreMenuKeyMessage=_FALSE;
ucKeyMessage = _EXIT_KEY_MESSAGE;
}
#endif
break;
}
}
//--------------------------------------------------
// Description : Get key status
// Input Value : None
// Output Value : Return Key status
//--------------------------------------------------
BYTE CKeyScan(void)
{
#if(_TOUCH_SENSOR == _ON)
BYTE keystate=0;
if(CKeyOneTouchSensorRead(_ONE_TOUCH_SENSOR_DR_0109,&pData[0])==_SUCCESS)
{
if(pData[1] &_BIT3) keystate=keystate|_RIGHT_KEY_MASK;
if(pData[1] &_BIT2) keystate=keystate|_LEFT_KEY_MASK;
if(pData[1] &_BIT0) keystate=keystate|_AUTO_KEY_MASK;
if(pData[1] &_BIT5) keystate=keystate|_POWER_KEY_MASK;
if(pData[1] &_BIT4) keystate=keystate|_ENTER_KEY_MASK;
if(pData[1] &_BIT1) keystate=keystate|_EXIT_KEY_MASK;
}
else //IF ONE-TOUCH KEY FAIL,INITIAL AGAIN...
{
CKeyInitial();
}
#else
BYTE code ADC_SCAN_TABLE[][3]=
{
#if(_PROJECT == _W2408)
{_ADC_PORT_2,_ENTER_KEY_MASK ,_LEFT_KEY_MASK},
{_ADC_PORT_1,_EXIT_KEY_MASK ,_AUTO_KEY_MASK},
{_ADC_PORT_3,_POWER_KEY_MASK ,_RIGHT_KEY_MASK},
#else
/* {_ADC_PORT_2,_ENTER_KEY_MASK ,_AUTO_KEY_MASK},
{_ADC_PORT_1,_EXIT_KEY_MASK ,_LEFT_KEY_MASK},
{_ADC_PORT_3,_RIGHT_KEY_MASK, _POWER_KEY_MASK}, */
//ryan modified key arrange
{_ADC_PORT_3,_EXIT_KEY_MASK ,_AUTO_KEY_MASK},
{_ADC_PORT_2,_ENTER_KEY_MASK,_LEFT_KEY_MASK},
{_ADC_PORT_1,_RIGHT_KEY_MASK, _POWER_KEY_MASK},
#endif
};
BYTE keystate=0;
BYTE i;
for(i=0;i<(sizeof(ADC_SCAN_TABLE)/3);i++)
{
if(CKeySacnAdc(ADC_SCAN_TABLE[i][0])==_ADC_KEY_0)
keystate = keystate | ADC_SCAN_TABLE[i][1];
else if(CKeySacnAdc(ADC_SCAN_TABLE[i][0])==_ADC_KEY_1)
keystate = keystate | ADC_SCAN_TABLE[i][2];
}
#endif
return keystate;
}
#if(_TOUCH_SENSOR == _ON)
bit CKeyOneTouchSensorWrite(WORD usAddr, WORD Value)//ONCE FOR 1 WORD
{
BYTE timeoutcnt;
SET_I2C_TOUCH_KEY();
timeoutcnt = _I2C_TIMEOUT_LIMIT;
while(CI2cStart(_KEY_TOURCH_SENSOR_SLAVE_ADDRESS | _I2C_WR) != _I2C_OK)
{
timeoutcnt--;
if(!timeoutcnt)
return _FAIL;
}
if(CI2cSendByte(HIBYTE(usAddr)) != _I2C_OK)
return _FAIL;
if(CI2cSendByte(LOBYTE(usAddr)) != _I2C_OK)
return _FAIL;
if(CI2cSendByte(HIBYTE(Value)) != _I2C_OK)
return _FAIL;
if(CI2cSendByte(LOBYTE(Value)) != _I2C_OK)
return _FAIL;
CI2cStop();
return _SUCCESS;
}
bit CKeyOneTouchSensorRead(WORD usAddr, BYTE *pReadArray) //ONCE READ 1 WORD
{
BYTE timeoutcnt;
SET_I2C_TOUCH_KEY();
timeoutcnt = _I2C_TIMEOUT_LIMIT;
while(CI2cStart(_KEY_TOURCH_SENSOR_SLAVE_ADDRESS | _I2C_WR) != _I2C_OK)
{
timeoutcnt--;
if(!timeoutcnt)
return _FAIL;
}
if(CI2cSendByte(HIBYTE(usAddr)) != _I2C_OK)
return _FAIL;
if(CI2cSendByte(LOBYTE(usAddr)) != _I2C_OK)
return _FAIL;
//SPEC 弧璶,I2C FORMAT 琌ぃ璶
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -