📄 remote.c
字号:
/*-TAB=2-------------------------------------------------------------------*/
/**------------------------------------------------------------------------*
* *
* NAME:REMOTE.C *
* *
* *
* UPDATE: 2002/8/15 YCD *
* *
* *
* *
*-------------------------------------------------------------------------*/
#include "..\SRC\ZM.H"
#include "..\src\key.h"
#define RMT_HEAD_MAX 14000 /*13.55*/
#define RMT_HEAD_MIN 12600 /*13.315*/
#define RMT_END_MAX 12000 /*11.3*/
#define RMT_END_MIN 10500 /*11.0*/
#define RMT_1_MAX 2800 /*2.290*/
#define RMT_1_MIN 1700 /*2.200*/
#define RMT_0_MAX 1660 /*1.160*/
#define RMT_0_MIN 570 /*1.070*/
#define RMT_ADDR0 0X00
#define RMT_ADDR1 0XFF
bit gStartBit;
bit gboolRmtContinueKey;
BYTE gEx1BitBuf[4];
BYTE gEx1BitSize=0;
WORD gEx1TmCount;
BYTE gEx1QueueFront=0;
BYTE gEx1QueueRear=0;
BYTE gRemoteKeyBuf[4];
BYTE gRmtLastKey=0xff;
BYTE gRmtCountinueKeyCount;
/*-------------------------------------------------------------------------*/
const BYTE kRemoteKeyTabl[53][2]={
{0x45,RMT_KEY_0_10 },
{0x09,KEY_1 },
{0x05,KEY_2 },
{0x01,KEY_3 },
{0x4B,KEY_4 },
{0x47,KEY_5 },
{0x43,KEY_6 },
{0x4A,KEY_7 },
{0x46,KEY_8 },
{0x42,KEY_9 },
{0x0E,KEY_LEFT },
{0x0A,KEY_RIGHT },
{0x07,KEY_UP },
{0x0B,KEY_DOWN },
{0x06,KEY_ENTER },
{0x0C,RMT_KEY_POWER },
{0x08,RMT_KEY_OSD },
{0x00,RMT_KEY_OPEN_CLOSE },
{0x0D,RMT_KEY_LANGUAGE },
{0x4F,RMT_KEY_SUBTITLE },
{0x4E,RMT_KEY_ANGLE },
{0x4D,RMT_KEY_PROG },
{0x49,RMT_KEY_10ADD },
{0x45,RMT_KEY_0_10 },
{0x41,RMT_KEY_CLEAR_EQ },
{0x4C,RMT_KEY_MUTE },
{0x48,RMT_KEY_3D },
{0x44,RMT_KEY_TIME },
{0x40,RMT_KEY_ZOOM },
{0x0F,RMT_KEY_MENU_WIEW },
{0x03,RMT_KEY_TITLE },
{0x1F,RMT_KEY_SETUP },
{0x13,RMT_KEY_PBC },
{0x5C,RMT_KEY_ECH_SUB },
{0x58,RMT_KEY_ECH_ADD },
{0x50,RMT_KEY_VOL_UP },
{0x54,RMT_KEY_VOL_DOWN },
{0x5D,RMT_KEY_B },
{0x59,RMT_KEY_JING },
{0x55,RMT_KEY_L_R },
{0x51,RMT_KEY_RETURN },
{0x5E,RMT_KEY_AB },
{0x5A,RMT_KEY_PREV },
{0x56,RMT_KEY_STEP },
{0x52,RMT_KEY_GOTO },
{0x5F,RMT_KEY_LEFT_END },
{0x5B,RMT_KEY_RIGHT_END },
{0X57,RMT_KEY_LEFT_LEFT },
{0X53,RMT_KEY_RIGHT_RIGHT },
{0X1C,RMT_KEY_STOP },
{0X18,RMT_KEY_PLAY_PAUSE },
{0X14,RMT_KEY_FAST },
{0X10,RMT_KEY_MARK }};
const BYTE kRmtContinueKeyTab[]={
0x0E,/*KEY_LEFT */
0x0A,/*KEY_RIGHT*/
0x50,/*RMT_KEY_VOL_UP*/
0x54 /*RMT_KEY_VOL_DOWN*/
};
/*-------------------------------------------------------------------------*/
/* remote key process */
/*-------------------------------------------------------------------------*/
/**
*@void EX0_int (void)
*@update 2002/9/19
*/
#define RMT_KEY_DELAY 255
interrupt [0x13] void EX1_int (void) /* External Interrupt 1 */
{
gEx1TmCount=TH1<<8;
gEx1TmCount|=TL1;
if(TF1==0){
if( gEx1TmCount>RMT_HEAD_MIN && gEx1TmCount<RMT_HEAD_MAX ){
gStartBit=1;
gEx1BitSize=0;
}
else if( gEx1TmCount>RMT_END_MIN && gEx1TmCount<RMT_END_MAX ){
if(gRmtCountinueKeyCount) gRmtCountinueKeyCount--;
if(kRmtContinueKeyTab[0]==gRmtLastKey||
kRmtContinueKeyTab[1]==gRmtLastKey||
kRmtContinueKeyTab[2]==gRmtLastKey||
kRmtContinueKeyTab[3]==gRmtLastKey){
if(gRmtCountinueKeyCount==0){
gRemoteKeyBuf[gEx1QueueFront++]=gRmtLastKey;
gEx1QueueFront&=0x03;
gboolRmtContinueKey=1;
gRmtCountinueKeyCount=3;
}
}
gStartBit=0;
gEx1BitSize=0;
}
else if(gStartBit){
if(gEx1TmCount>RMT_1_MIN && gEx1TmCount<RMT_1_MAX ){
CY=1;
Lsb_ShiftEx1Bit();
gEx1BitSize++;
}
else if(gEx1TmCount>RMT_0_MIN && gEx1TmCount<RMT_0_MAX){
CY=0;
Lsb_ShiftEx1Bit();
gEx1BitSize++;
}
if(gEx1BitSize==24){
if(gEx1BitBuf[2]==RMT_ADDR0 && gEx1BitBuf[1]==RMT_ADDR1) {
gRemoteKeyBuf[gEx1QueueFront++]=gEx1BitBuf[0];
gEx1QueueFront&=0x03;
gRmtLastKey=gEx1BitBuf[0];
}
gboolRmtContinueKey=0;
gRmtCountinueKeyCount=6;
gStartBit=0;
gEx1BitSize=0;
}
}
}
TL1=0;
TH1=0;
TF1=0;
}
/**
*@void ClrRmtKey(void)
*@update 2002/8/10
*/
void ClrRmtKey(void)
{
gEx1QueueRear=gEx1QueueFront;
}
/**
*@void InitRemote(void)
*@update 2002/8/10
*/
void InitRemote(void)
{
gStartBit=0;
}
/**
*@BYTE RemoteKbHit(void)
*@update 2002/8/10
*/
BYTE RemoteKbHit(void)
{
return(gEx1QueueRear!=gEx1QueueFront);
}
void ShowHex(BYTE i,BYTE aByte);
/**
*@unsigned char GetKey(void)
*@update 2002/8/10
*/
BYTE RemoteGetKey(void)
{
BYTE i,KeyCode=0;
if(RemoteKbHit()){
KeyCode=gRemoteKeyBuf[gEx1QueueRear++];
gEx1QueueRear&=0x03;
for(i=0;i<REMOTE_KEY_TOTAL;i++){
if(KeyCode==kRemoteKeyTabl[i][0]){
KeyCode=kRemoteKeyTabl[i][1];
break;
}
}
}
return(KeyCode);
}
/*-------------------------------------------------------------------------*/
/* debug remote key */
/*-------------------------------------------------------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -