📄 frntp.c
字号:
/*====================================================================
*
* Copyright (C) 1997 Acer Labs, Inc. All Rights Reserved.
*
* File: frntp.c
*
* Contents: frontPanel task main file
*
* History:
* Date By Reason *
* =========== ======== ====== *
* 21-Jun-1999 Wang Create *
* 26-Nov-2001 Dick Ma Modify to M3325 *
* 2003.4.11 Cliff wang Modify it
********************************************************************/
#include <comsub.h>
#include <atapi.h>
#include <vobu.h>
#include <ui.h>
#include <nv.h>
#include <iic.h>
#define MOD_FRNTP
#include "frntp.h"
#include <panel.h>
#include <stdlib.h>
#include <gpio.h>
#include <xgpio.h>
#include <ui_sub.h>//rockman
#include <resource.h> //30216-01jf
#include <platform.h>
#include "../../atapi/atapi_lo.h" //30124-01jf//30507-02cf move attapi to atapi dir
#include "../../ui/fileopenmenu/mediaplayeroutlook.h"
#define MIC_OUT_STATE 1
#define MIC_IN_STATE 2
#define MIC_OUTDEB_STATE 3
#define MIC_INDEB_STATE 4
// Front panel GPIO interfaces, maintain them carefully
#define FPSET_GPIO_R(dwPorts) XGpio_Opr(SET_READ,dwPorts)
#define FPSET_GPIO_W(dwPorts) XGpio_Opr(SET_WRITE,dwPorts)
#if(USE_244_ENABLE==1)
#define FPSET_GPIO_HI(dwPorts) XGpio_Opr(SET_HI,dwPorts)
#define FPSET_GPIO_LOW(dwPorts) XGpio_Opr(SET_LOW,dwPorts)
#else
#define FPSET_GPIO_HI(dwPorts) XGpio_Opr(SET_READ,dwPorts)
#define FPSET_GPIO_LOW(dwPorts) {XGpio_Opr(SET_WRITE,dwPorts);XGpio_Opr(SET_LOW,dwPorts);}
#endif
#define FPGET_GPIO_DATA(dwPorts) XGpio_Opr(GET_DATA,dwPorts)
extern BOOL bPlayClose;
extern LoaderInformation Master;//for standby//30124-01jf
extern BYTE IR_Error_Flag;
extern DWORD IR_Check_Code(DWORD);
//extern void halMuteOnOff(BOOL bMute);
extern void halMuteOnOff(BOOL bMute, WORD FadeTime, DLYTIME dly_time);
extern BYTE bVocalPressCnt;
extern BYTE HDCDIntFlag;
extern BOOL bIsLastplay;
extern BOOL bFPLastplay;
/*2003/04/25 Added by jane and brook,to update VFD show*/
void VFDPart1Clear();
void VFDPart1StandbyShow();
void VFDPart1StopShow();
void VFDPart1LoadShow();
void VFDPart1PlayShow();
void VFDPart1OpenShow();
void VFDPart1Show();
void FPUpdateTime(DWORD InTime);
void ChgLDShow();
void VFDPart2Show();
void VFDPart2Clear();
void VFDProcShowMsg(void);
static BOOL ShiftOn=FALSE;
static BOOL bNeedRestore = FALSE;
static BOOL bPause = FALSE;
BOOL bPowerOff = FALSE;
#if(_DEALER_LOCK_MODE == _DEALER_LOCK_ENABLE_)
BOOL bDealerLock = FALSE;//maggie40212
BOOL bDealerUnlockTimer = FALSE;//MAGGIE40210
BOOL bDealerLockTimer = FALSE;//MAGGIE40210
BOOL bDoneDealerLock = FALSE;
#endif
BYTE LeftMicState=MIC_OUT_STATE;
BYTE RightMicState=MIC_OUT_STATE;
extern BOOL bIsKaraDVD;
/*--------JANE added for hotkey begin -------*/
/*Hot Key Table*/
typedef struct tagHOTKEYTABLE
{
BYTE *HotKey;
BYTE HotKeyNum;
BYTE HotKeyCnt;
BYTE HotKeyVal;
}
HOTKEYTABLE;
//HOTKEY DEFINE
#define HOTKEY_1 C_KEY_VENDER_SETUP
#define HOTKEY_2 C_KEY_DEBUG_M3323REG
#define HOTKEY_3 3
#define HOTKEY_4 4
#define HOTKEY_5 5
#define HOTKEY_6 6
#define HOTKEY_7 7
#define HOTKEY_8 8
#define HOTKEY_9 9
#define HOTKEY_10 10
#define HOTKEY_11 11
#define HOTKEY_12 12
#define HOTKEY_13 13
#define HOTKEY_14 14
#define HOTKEY_15 15
#define HOTKEY_16 16
#define HOTKEY_17 17
#define HOTKEY_18 18
#define HOTKEY_19 19
#define HOTKEY_20 C_KEY_SETUPDEFAULT
#define HOTKEY_21 C_KEY_SHOWVERSION
#define HOTKEY_22 22
//FOR EEPROM OPTION
#define HOTKEY_EEPOPT C_KEY_EEPOPTION
#define HOTKEY_REGION0 C_KEY_REGION0
#define HOTKEY_REGION C_KEY_REGION
#define HOTKEY_SYSF C_KEY_SYSTEMDIS_F
#define HOTKEY_SYSI C_KEY_SYSTEMDIS_I
#define HOTKEY_PWDCLR C_KEY_CLEARPWD
BYTE HOT_KEY_1[3]={C_KEY_MENU,C_KEY_1,C_KEY_9};
BYTE HOT_KEY_2[3]={C_KEY_MENU,C_KEY_9,C_KEY_9};
BYTE HOT_KEY_3[3]={C_KEY_LAST_PLAY,C_KEY_8,C_KEY_8};
BYTE HOT_KEY_4[3]={C_KEY_LAST_PLAY,C_KEY_9,C_KEY_9};
BYTE HOT_KEY_5[3]={C_KEY_LAST_PLAY,C_KEY_3,C_KEY_0};
BYTE HOT_KEY_6[3]={C_KEY_LAST_PLAY,C_KEY_0,C_KEY_0};
BYTE HOT_KEY_7[3]={C_KEY_LAST_PLAY,C_KEY_0,C_KEY_3};
BYTE HOT_KEY_8[3]={C_KEY_LAST_PLAY,C_KEY_0,C_KEY_4};
BYTE HOT_KEY_9[3]={C_KEY_LAST_PLAY,C_KEY_0,C_KEY_8};
BYTE HOT_KEY_10[3]={C_KEY_LAST_PLAY,C_KEY_0,C_KEY_9};
BYTE HOT_KEY_11[3]={C_KEY_LAST_PLAY,C_KEY_1,C_KEY_0};
BYTE HOT_KEY_12[3]={C_KEY_LAST_PLAY,C_KEY_1,C_KEY_1};
BYTE HOT_KEY_13[3]={C_KEY_LAST_PLAY,C_KEY_2,C_KEY_0};
BYTE HOT_KEY_14[3]={C_KEY_LAST_PLAY,C_KEY_2,C_KEY_1};
BYTE HOT_KEY_15[3]={C_KEY_LAST_PLAY,C_KEY_0,C_KEY_6};
BYTE HOT_KEY_16[3]={C_KEY_LAST_PLAY,C_KEY_1,C_KEY_6};
BYTE HOT_KEY_17[3]={C_KEY_LAST_PLAY,C_KEY_1,C_KEY_5};
BYTE HOT_KEY_18[3]={C_KEY_LAST_PLAY,C_KEY_1,C_KEY_4};
BYTE HOT_KEY_19[3]={C_KEY_LAST_PLAY,C_KEY_0,C_KEY_5};
#if (_CUSTOM == CYBERHOME)
BYTE HOT_KEY_20[3]={C_KEY_DISPLAY,C_KEY_1,C_KEY_8};
#else
BYTE HOT_KEY_20[3]={C_KEY_LAST_PLAY,C_KEY_6,C_KEY_6};
#endif
BYTE HOT_KEY_21[3]={C_KEY_DISPLAY,C_KEY_1,C_KEY_9};
BYTE HOT_KEY_22[3]={C_KEY_DISPLAY,C_KEY_2,C_KEY_0};
//FOR LG
BYTE HOT_KEY_EEPOPT[5]={C_KEY_STEP,C_KEY_1,C_KEY_4,C_KEY_7,C_KEY_2};
BYTE HOT_KEY_REGION0[3]={C_KEY_0,C_KEY_0,C_KEY_0};
BYTE HOT_KEY_REGION[7]={C_KEY_STEP,C_KEY_3,C_KEY_1,C_KEY_4,C_KEY_1,C_KEY_5,C_KEY_9};
BYTE HOT_KEY_SYSF[8]={C_KEY_1,C_KEY_3,C_KEY_9,C_KEY_7,C_KEY_1,C_KEY_3,C_KEY_9,C_KEY_ENTER};
BYTE HOT_KEY_SYSI[8]={C_KEY_4,C_KEY_5,C_KEY_6,C_KEY_2,C_KEY_5,C_KEY_8,C_KEY_0,C_KEY_ENTER};
BYTE HOT_KEY_PWDCLR[6]={C_KEY_2,C_KEY_1,C_KEY_0,C_KEY_4,C_KEY_9,C_KEY_9};
static HOTKEYTABLE HotKeyTab[]=
{
//{HOT_KEY_1,3,0,HOTKEY_1},
{HOT_KEY_2,3,0,HOTKEY_2}, /*regkey*/
{HOT_KEY_3,3,0,HOTKEY_3}, // Edmund: For PE test
{HOT_KEY_4,3, 0,HOTKEY_4},
{HOT_KEY_5,3, 0,HOTKEY_5}, /*OSDkey*/
#ifdef _DEBUG_PRINTF_
{HOT_KEY_6,3, 0,HOTKEY_6}, /*regionkey*/
{HOT_KEY_7,3, 0,HOTKEY_7}, /*autokey*/
{HOT_KEY_8,3, 0,HOTKEY_8}, /*autokeyS*/
{HOT_KEY_9,3, 0,HOTKEY_9}, /*subwooffer*/
{HOT_KEY_10,3, 0,HOTKEY_10}, /*dviewkey*/
{HOT_KEY_11,3, 0,HOTKEY_11}, /*avboardmute*/
{HOT_KEY_12,3, 0,HOTKEY_12}, /*avtestDRC*/
{HOT_KEY_13, 3,0,HOTKEY_13}, /*videofpplus*/
{HOT_KEY_14,3, 0,HOTKEY_14}, /*videofpminus*/
{HOT_KEY_15,3, 0,HOTKEY_15}, /*colorbarkey*/
{HOT_KEY_16,3, 0,HOTKEY_16}, /*tvrgbout*/
{HOT_KEY_17,3, 0,HOTKEY_17}, /*tvyuvout*/
{HOT_KEY_18, 3,0,HOTKEY_18}, /*tvcsout*/
{HOT_KEY_19, 3,0,HOTKEY_19}, /*tvsyskey*/
#endif
#if ( _SETUP_MODE==_SETUP_MENU_Enable )
{
HOT_KEY_20, 3,0,HOTKEY_20
}
, /*for setup default*/
//#if (_CUSTOM == CYBERHOME)
{HOT_KEY_21, 3,0,HOTKEY_21}, // for show servo version
//#endif
{HOT_KEY_22, 3,0,HOTKEY_22}, //for disable vcd
#endif
//FOR LG EEPROM OPTION
{HOT_KEY_EEPOPT,5,0,HOTKEY_EEPOPT},
#if (REGION_CODE_FREE_MODE == REGION_CODE_FREE_ENABLE)
{HOT_KEY_REGION0,3,0,HOTKEY_REGION0},
{HOT_KEY_REGION,7,0,HOTKEY_REGION},
#endif
{HOT_KEY_SYSF,8,0,HOTKEY_SYSF},
{HOT_KEY_SYSI,8,0,HOTKEY_SYSI},
{HOT_KEY_PWDCLR,6,0,HOTKEY_PWDCLR}
};
/*--------JANE added for hotkey end -------*/
#define GetTimeRate 10 //30523-01Angus
BOOL BRealEject = TRUE;//cliff 30507-01cf for kill warning
static BOOL FPKeyPermit = TRUE;
//030816 - Use high memory
/*but only record the user operation, not user push tray by hand!!*/
/* when bOPEN==TRUE, the tray is opening,
when bOPEN==FALSE, the tray is closing.
when BEject==FALSE,the tray is closed,
when BEject==TRUE, the tray is not closed-->it can be either opening or closing
The user want the tray open.
when BRealEject==TRUE, the tray is real opened.
BRealEject is used in check tray.
*/
static DWORD tt;/*store sys time in seconds*/
static DWORD prevtt=0xFFFFFFFF;/*memorize the time shown on panel*/
/* -------for auto input key */
#ifdef _DEBUG_PRINTF_
#define numAutoKeySet 26
static const BYTE FpAutoKeySet[numAutoKeySet]=
{
C_KEY_STEP,C_KEY_SKIP_L,C_KEY_PLAY,C_KEY_PLAY,C_KEY_PLAY,C_KEY_SKIP_R,
C_KEY_FF,C_KEY_FF,C_KEY_FF,C_KEY_REV,C_KEY_REV,C_KEY_REV,C_KEY_SLOW,C_KEY_SLOW,C_KEY_SLOW,
C_KEY_REPEAT,C_KEY_ENTER,C_KEY_ENTER,C_KEY_UP,C_KEY_DOWN,C_KEY_LEFT,C_KEY_RIGHT,C_KEY_RESUME,C_KEY_RESUME,
C_KEY_MENU,C_KEY_TITLE
};
static BYTE FpAutoKey[nAUTOKEY];
static int FpAutoTime[nAUTOKEY];
static BYTE bAutoInput=FALSE;
static BYTE bAutoContinuous=FALSE;
#endif
/*----------------------------*/
/*--------for between FrontEnd function variables -------*/
//static BYTE SendTime2UI=FALSE; //30523-01Angus
BYTE SendTime2UI=FALSE; //30523-01Angus
static BYTE TimeONFlg=TRUE; // 2003-04-25 Added by Jane Liao
static BYTE PrvPlayMD=0xFF; // 2003-04-25 Added by Jane Lia
static BYTE PrvFPState=0xFF; // 2003-04-25 Added by Jane Lia
static MSG2UI FpKeyCode2UI;
static INT RSize;
static WORD cReadTime=0;
BOOL g_bTrayCloseErr=FALSE;// 30317-01Ji Power on/off close tray error
int g_iServoCloseTrayTime = 0; // 30127-01Ji close tray error
#if( _MODEL == CYP405|| _MODEL == CYP325U|| _MODEL == CYP2830G) //add for vfdbright
static const BYTE VfdMode[8 ] =
{
0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f
};
#endif
//gamble add
#define COUNTS_PER_MICROSECOND1 (25)
BOOL flag_frontReadComplete;
BYTE frontControlCommand;
BYTE wakeUpKeyData;
#define IRKEY 1
#define PKKEY 2
BYTE wakeUpKeyType;
long FPMICOMPowerModeInitialFlag=0;
#if (_IR==KENWOOD_IR)
extern unsigned long KeyTable[224];
#else
extern unsigned long KeyTable[112];
#endif
extern unsigned char IR_Custom_Code1 , IR_Custom_Code2 ;
extern BYTE tbl_bit_swap[256];
extern BYTE frontTransmitData[16];
extern BYTE frontReceiveDdata[16];
extern BOOL I2CIsBusy;
#ifdef _ALiICE_Download_Enable
BOOL FPMICOMPowerModeInitial();
#else
BOOL FPReadWakeupKey(void);
#endif
#if (MIC_ENABLE_AND_DEBUG==1)
static BYTE VirtualMicPlug = 0;
#endif
BOOL FPKeyChk(DWORD code)
{
static BYTE FPstatus;
if(FPstatus == 1)
{
if(code == C_KEY_ZOOM &&
(DiscType == C_VCD10 || DiscType == C_VCD20 || DiscType == C_SVCD))
{
dly_tsk(200);
FPstatus = 0;
return TRUE;
}
}
FPstatus = 0;
if((code == C_KEY_MENU)||
(code == C_KEY_SETUP)||
(code == C_KEY_TITLE)||
(code == C_KEY_TV_SYS) ||
(code == C_KEY_RANDOM) ||
(code == C_KEY_STOP) ||
(code == C_KEY_PLAY) ||
(code == C_KEY_FF) ||
(code == C_KEY_REV) ||
(code == C_KEY_PAGEDOWN) ||
(code == C_KEY_PAGEUP) ||
(code == C_KEY_SKIP_R) ||
(code == C_KEY_SKIP_L) ||
(code == C_KEY_VOLUM) ||
(code == C_KEY_SCANMODE )||//TPE sean 20021113 for scan mode switch too fast
(code == C_KEY_PBC_ONOFF)||
(code == C_KEY_VOLUP)||
(code == C_KEY_MUTE)||
(code == C_KEY_VOLDOWN)||
(code == C_KEY_CONSOLE))
//(code == C_KEY_SKIP_L) || //lily
//(code == C_KEY_SKIP_R&&((VirDiscType == C_VCD20) || (VirDiscType == C_SVCD))))//TPE sean 20021104 for VCD20 switch PBC too fast
{
FPstatus = 1;
return TRUE;
}
#ifdef _DVDA_Enable_
else if(DiscType == C_DVD_AUDIO)
{
if(code == C_KEY_ANGLE)
return TRUE;
else if(code == C_KEY_LEFT || code == C_KEY_RIGHT)
{
;// if(IsChangingASV())
// return TRUE;
}
return FALSE;
}
#endif
else
return FALSE;
}
void FPKeyChkTimer(void)
{
FPKeyPermit = TRUE;
}
BOOL FPKeyChkStage2(DWORD IRKey)
{
if(DiscType==C_DVD && bIsKaraDVD && \
g_UiPlaybackMethod == UI_PLAYBACKMETHOD_SHUFFLE && \
(IRKey==C_KEY_SKIP_R || IRKey==C_KEY_SKIP_L || IRKey==C_KEY_RANDOM))
return TRUE;
else if((DiscType==C_VCD20 || DiscType==C_VCD10 || DiscType==C_SVCD) && \
(IRKey==C_KEY_SKIP_R || IRKey==C_KEY_SKIP_L || IRKey==C_KEY_RANDOM))
return TRUE;
else if(DiscType == C_DVD && (IRKey==C_KEY_MENU || IRKey==C_KEY_TITLE))
return TRUE;
#ifdef _DVDA_Enable_
else if(DiscType == C_DVD_AUDIO && (IRKey==C_KEY_MENU || IRKey==C_KEY_TITLE))
return TRUE;
#endif
else if((DiscType == C_DVD || DiscType == C_DVD_AUDIO || DiscType==C_VCD20 || DiscType==C_VCD10 || DiscType==C_SVCD)
&& (IRKey==C_KEY_SETUP))
return TRUE;
else
return FALSE;
}
BOOL FPKeyChkSynch()
{
if(bNVRefreshTime == TRUE || g_UiCoreState == UI_CORE_STOP)
return TRUE;
else
return FALSE;
}
void FPSendKey2UI(VP pFPKeyMsg)
{
MSG2UI TempMsg;
DWORD MsgSize;
if(psnd_mbf(UIGetKEY_mbfid, pFPKeyMsg, sizeof(MSG2UI))!= E_OK)
{
prcv_mbf((VP *) &TempMsg, (INT *) &MsgSize, UIGetKEY_mbfid);
psnd_mbf(UIGetKEY_mbfid, pFPKeyMsg, sizeof(MSG2UI));
}
}
/*-------------------------[Local Function]--------------------------
* Function_Name: FP_StopAll()
*
* Description:
* Stop all DVD player operations to be ready into POWER down.
*
* Arguments:
* Input: none.
* Output: none.
*
* History:
* Date By Reason Ver.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -