📄 dvb_fp.c
字号:
if ( DVB_DetectKey()==TRUE )
{
return FALSE;
}
else
{
// CT_OS_MS_GetClock(&u32CurrentTick);
u32CurrentTick = DVB_TimerGet();
u32TimeoutTick = u32CurrentTick+u16Timeout;
while( DVB_TimerAfter(u32TimeoutTick,u32CurrentTick) )
{
if( DVB_DetectKey()==TRUE )
{
return FALSE;
}
CT_OS_MS_Delay(5);
u32CurrentTick = DVB_TimerGet();
}
return TRUE;
}
}
/*******************************************************************************************/
u8 DVB_GetKey (void)// get key, and it will remove the key form key buffer
{
u8 u8KeyCode;
u8 i = 0;
if (FALSE ==_bKeyEnable)
{
if(_is_dvbmain_task()==TRUE)
{
DVB_TimerRunEvent(0);
}
return KEY_NO_KEY;
}
else
{
while(DVB_DetectKey() == FALSE) // run timer in detect key.
{
CT_OS_MS_Delay(5);
}
}
CT_OS_WaitOnSemaphore(&NewKey_Semaphore,CTOS_WAIT);
if (EN_CTOS_SUCCESS != CT_OS_WaitOnSemaphore(&Key_Semaphore,CTOS_WAIT))
{
FP_MSG(("DVB_FP_WARNING: CT_OS_WaitOnSemaphore Error\n"));
}
if(_u8KeyInFrontOfQueue != KEY_NO_KEY)
{
u8KeyCode = _u8KeyInFrontOfQueue;
_u8KeyInFrontOfQueue = KEY_NO_KEY;
if(_b8CleanKeyInQueue == TRUE)
{
_b8CleanKeyInQueue = FALSE;
for (i=0; i<KEY_BUFFER_SIZE; i++)
{
KeyBuffer[i] = KEY_NO_KEY;
}
_u8KeybufferIndex_Top = _u8KeybufferIndex_Bottom = 0;
}
}
else
{
u8KeyCode = (u8)KeyBuffer[_u8KeybufferIndex_Top];
// FP_DBG(("get key = 0x%08hx\n", KeyBuffer[_u8KeybufferIndex_Top]));
KeyBuffer[_u8KeybufferIndex_Top] = KEY_NO_KEY;
_u8KeybufferIndex_Top++;
if( _u8KeybufferIndex_Top >= KEY_BUFFER_SIZE)
{
_u8KeybufferIndex_Top = 0;
}
}
if (EN_CTOS_SUCCESS != CT_OS_FreeSemaphore(&Key_Semaphore))
{
FP_MSG(("DVB_FP_WARNING: CT_OS_FreeSemaphore Error\n"));
}
return u8KeyCode;
}
/*******************************************************************************************/
void DVB_CleanKey(void)
{
u8 i;
if (EN_CTOS_SUCCESS != CT_OS_WaitOnSemaphore(&Key_Semaphore,CTOS_WAIT))
{
FP_MSG(("DVB_FP_WARNING: CT_OS_WaitOnSemaphore Error\n"));
}
for (i=0; i<KEY_BUFFER_SIZE; i++)
{
KeyBuffer[i] = KEY_NO_KEY;
}
_u8KeybufferIndex_Top = _u8KeybufferIndex_Bottom = 0;
CT_OS_ResetSemaphore(&NewKey_Semaphore, 0);
if (EN_CTOS_SUCCESS != CT_OS_FreeSemaphore(&Key_Semaphore))
{
FP_DBG(("DVB_FP_WARNING: CT_OS_FreeSemaphore Error\n"));
}
return;
}
/*******************************************************************************************/
void DVB_SendKey(u8 u8Key)
{
if (FALSE ==_bKeyEnable)
{
return;
}
KeyBuffer[_u8KeybufferIndex_Bottom] = (u32)u8Key;
_u8KeybufferIndex_Bottom++;
if( _u8KeybufferIndex_Bottom >= KEY_BUFFER_SIZE)
{
_u8KeybufferIndex_Bottom = 0;
}
if (_u8KeybufferIndex_Bottom == _u8KeybufferIndex_Top)
{
if (_u8KeybufferIndex_Bottom == 0)
{
_u8KeybufferIndex_Bottom = KEY_BUFFER_SIZE - 1;
}
else
{
_u8KeybufferIndex_Bottom--;
}
}
else
{
CT_OS_FreeSemaphore(&NewKey_Semaphore);
}
return;
}
/*******************************************************************************************/
//Local function
//put in keycode in circle
static void FP_Key_Notification( u32 u32key_code )//This function is call from ISR.
{
u32 u32KeyTimeInterval = 0;
u8 u8APkey;
#ifdef HOLD_POWER_RESET_DEFAULT
static u32 PushTime=0;
#endif
if (FALSE ==_bKeyEnable)
{
return;
}
switch(u32key_code)
{
case 0x01: u32key_code=0; break;
case 0x02: u32key_code=1; break;
case 0x04: u32key_code=2; break;
case 0x08: u32key_code=3; break;
case 0x10: u32key_code=4; break;
case 0x20: u32key_code=5; break;
case 0x40: u32key_code=6; break;
case 0x80: u32key_code=7; break;
case 0x0100: u32key_code=8; break;
case 0x0200: u32key_code=9; break;
case 0x0400: u32key_code=10; break;
case 0x0800: u32key_code=11; break;
case 0x1000: u32key_code=12; break;
case 0x010000: u32key_code=13; break;
case 0x020000: u32key_code=14; break;
case 0x040000: u32key_code=15; break;
case 0x080000: u32key_code=16; break;
case 0x100000: u32key_code=17; break;
default:
return;
}
u8APkey = au8FPKeyMap[u32key_code];
#if (defined(CT216S) || defined(CT216T) || defined (CT216H))
if(_u8FPKeyPrev == u8APkey && (u32KeyTimeInterval = DVB_TimerMinus(DVB_TimerGet(),_u32TimeISRFPKeyPrev)) < 350)
#else
if(_u8FPKeyPrev == u8APkey && (u32KeyTimeInterval = DVB_TimerMinus(DVB_TimerGet(),_u32TimeISRFPKeyPrev)) < 300)
#endif //#if (defined(CT216S) || defined(CT216T))
{
#ifdef ENABLE_UI_J_PROJECT
if ( u8APkey!=KEY_RIGHT && u8APkey!=KEY_LEFT && u8APkey!=KEY_UP && u8APkey!=KEY_DOWN
&& u8APkey!=KEY_P_DOWN && u8APkey!=KEY_P_UP && u8APkey!=KEY_VOL_DOWN && u8APkey!=KEY_VOL_UP)//repeate key list;
#else
#ifdef HOLD_POWER_RESET_DEFAULT
if ( u8APkey!=KEY_RIGHT && u8APkey!=KEY_LEFT && u8APkey!=KEY_UP && u8APkey!=KEY_DOWN&&u8APkey!=KEY_POWER)//repeate key list;
#else
if ( u8APkey!=KEY_RIGHT && u8APkey!=KEY_LEFT && u8APkey!=KEY_UP && u8APkey!=KEY_DOWN )//repeate key list;
#endif
#endif
{
if(u32KeyTimeInterval < 100)
{
_u32TimeISRFPKeyPrev = DVB_TimerGet();
}
//FP_DBG(("Key repeate %d\n", u8APkey));
return;
}
else
{
#if (defined(CT216T))
if(u32KeyTimeInterval < 150)
return;
#elif(defined(CT216S) || defined (CT216H))
if(u32KeyTimeInterval < 180)
return;
#endif
#ifdef HOLD_POWER_RESET_DEFAULT
if(u8APkey==KEY_POWER)
{
if(DVB_TimerMinus(DVB_TimerGet(),PushTime)>=10000)
{
CT_OS_ControlTimer(& HoldKeyTimer, EN_CTOS_TIMER_DISABLE);
if(b8Defaultflag==FALSE)
DVB_SendKey(KEY_SETDEFAULT);
_u8FPKeyPrev = u8APkey;
PushTime= DVB_TimerGet();
_u32TimeISRFPKeyPrev =PushTime;
b8Defaultflag=TRUE;
return;
}
else
{
_u32TimeISRFPKeyPrev=DVB_TimerGet();
ResetHoldKeyTimer();
return;
}
}
#endif
}
}
#ifdef HOLD_POWER_RESET_DEFAULT
else
{
if(u8APkey==KEY_POWER)
{
PushTime=DVB_TimerGet();
_u32TimeISRFPKeyPrev=PushTime;
_u8FPKeyPrev = u8APkey;
ResetHoldKeyTimer();
return;
}
}
#endif
//FP_DBG(("Key Code = %d\n", u32key_code));
KeyBuffer[_u8KeybufferIndex_Bottom] = u8APkey;
_u8KeybufferIndex_Bottom++;
if( _u8KeybufferIndex_Bottom >= KEY_BUFFER_SIZE)
{
_u8KeybufferIndex_Bottom = 0;
}
if (_u8KeybufferIndex_Bottom == _u8KeybufferIndex_Top)
{
if (_u8KeybufferIndex_Bottom == 0)
{
_u8KeybufferIndex_Bottom = KEY_BUFFER_SIZE - 1;
}
else
{
_u8KeybufferIndex_Bottom--;
}
}
else
{
CT_OS_FreeSemaphore(&NewKey_Semaphore);
}
//reset
_u8FPKeyPrev = u8APkey;
_u32TimeISRFPKeyPrev = DVB_TimerGet(); //reset timer
return;
}
/*******************************************************************************************/
//Local function
//put in keycode in circle
static void IR_Key_Notification (u32 u32key_code)//This function is call from ISR.
{
bool8 b8Repeat;
u8 u8APkey;
static u32 u32TimeISRKeyPrev=0;
static u16 u16RepeatCount;
if (FALSE ==_bKeyEnable)
{
return;
}
u8APkey=au8IRKeyMap[u32key_code&0xFF];
if ( (u32key_code&0x100) !=0 )
{
b8Repeat=TRUE;
u16RepeatCount++;
}
else
{
b8Repeat=FALSE;
u16RepeatCount=0;
}
if ( b8Repeat==TRUE )
{
if ( (u16RepeatCount>3) )
{
#ifdef ENABLE_UI_J_PROJECT
if ( u8APkey==KEY_RIGHT || u8APkey==KEY_LEFT || u8APkey==KEY_UP || u8APkey==KEY_DOWN
|| u8APkey==KEY_P_DOWN || u8APkey==KEY_P_UP || u8APkey==KEY_VOL_DOWN || u8APkey==KEY_VOL_UP)//repeate key list;
#else
if ( u8APkey==KEY_RIGHT || u8APkey==KEY_LEFT || u8APkey==KEY_UP || u8APkey==KEY_DOWN )//repeate key list;
#endif
{
if(DVB_TimerMinus(DVB_TimerGet(),u32TimeISRKeyPrev) >= 1000)
{
return;
}
}
else
{
return;
}
}
else
{
return;
}
}
KeyBuffer[_u8KeybufferIndex_Bottom] = u8APkey;
_u8KeybufferIndex_Bottom++;
if( _u8KeybufferIndex_Bottom >= KEY_BUFFER_SIZE)
{
_u8KeybufferIndex_Bottom = 0;
}
if (_u8KeybufferIndex_Bottom == _u8KeybufferIndex_Top)
{
if (_u8KeybufferIndex_Bottom == 0)
{
_u8KeybufferIndex_Bottom = KEY_BUFFER_SIZE - 1;
}
else
{
_u8KeybufferIndex_Bottom--;
}
}
else
{
CT_OS_FreeSemaphore(&NewKey_Semaphore);
}
u32TimeISRKeyPrev = DVB_TimerGet();
}
/*******************************************************************************************/
void DVB_FP_Standby (void)
{
extern void DEV_IR_Standby (void);
extern void DEV_FD_Standby(void);
DEV_IR_Standby();
DEV_FD_Standby();
return;
}
/*******************************************************************************************/
void DVB_FP_PowerOn (void)
{
extern void DEV_FD_PowerOn(void);
extern void DEV_IR_PowerOn (void);
DEV_IR_PowerOn();
DEV_FD_PowerOn();
return;
}
/*******************************************************************************************/
void DVB_SendKeyInFrontOfQueue(u8 u8Key, bool8 b8CleanKeyInQueue)
{
if(u8Key != KEY_NO_KEY)
{
_u8KeyInFrontOfQueue = u8Key;
_b8CleanKeyInQueue = b8CleanKeyInQueue;
CT_OS_FreeSemaphore(&NewKey_Semaphore);
}
}
/*******************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -