📄 ir_toshiba.c
字号:
#if(IR_TYPE==IR_TOSHIBA)
#if 0
void timer1(void) interrupt 3
{
// Int Vector at 001BH, Reg Bank 1
EA = 0;
ET1 = 0; // inhibit timer1 interrupt
TR1 = 0; // stop timer1
//if (!g_ucIR_ErrTimeCount)
{
Set_IR_ResetFlag();
}
//g_ucIR_ErrTimeCount=20;
//Set_IR_ResetFlag(); //if (!g_ucIR_ErrTimeCount) Set_IR_ResetFlag();
#if 1
if (slopecount ==2&& enableRepeat) //
{
g_bIrRepeat =1;
Set_IR_Data_OKFlag();
IR_DelayTimers=IR_RepeatDelay;
}
else IR_DelayTimers=IR_NoRepeatDelay;
#endif
//-------------------------------------------------------------------------
{
TMOD = (TMOD & 0x0f) | 0x20; //change timer1 mode to baud generator
TH1= TIMER1_MODE2_TH1;//BaudRatePeriod //TIMER1_MODE2_TH1;//br_cnt;9600
}
TR1=1;
//----------
EA = 1;
}
void irInitialize(void)//
{
IT0 = 1; // set INT0 type(falling edge)
PX0 = 1; // set INT0 priority high
EX0 = 1; // enable INT0 interrupt
Set_IR_ResetFlag();
Clr_IR_Data_OKFlag();
g_bIR_Debug_OK=0;
g_ucIR_TmpData = 0;
g_ucIrCommand=IR_NOTHING;
g_ucIrCode=IR_NOTHING;
slopecount = 0;
g_ucIR_ErrTimeCount = 0;
//g_ucIR_delayCount=4;
#if (IR_CODE_DEBUG_EN)
Clr_IR_DebugCustomerCode0_OKFlag();
Clr_IR_DebugCustomerCode1_OKFlag();
Clr_IR_DebugData_OKFlag();
#endif
}
BYTE irScanStatus(void)
{
BYTE tmp;
tmp = IR_NOTHING;
if (IR_Data_OKFlag)
{
tmp = g_ucIrCommand;
Clr_IR_Data_OKFlag();
}
//----------------------------------
return tmp;
}
BOOL irDecodedetect()
{
BYTE ircodetemp;
if(g_ucIR_ErrTimeCount)
{
ircodetemp= irScanStatus();
if (ircodetemp==IR_NOTHING) return 0;
if(g_bIrRepeat)
{
//if (g_ucIR_delayCount) --g_ucIR_delayCount;
//g_bIrRepeat = 0;
//printf("-->%x", g_ucIrCommand);
if(enableRepeat)//&&!g_ucIR_delayCount)
{
g_ucIrCode=ircodetemp;
return 1;
}
}
else
{
g_ucIrCode= ircodetemp;
return 1;
}
}
return 0;
}
void irDetectTimer0( void )
{
}
#endif
BYTE code ChangeIrCode[] =
{
//LCDTVPART : 20060117, Haier IR model: HYF-35G
0x09, //IRKEY_0 0x09
0x00, //IRKEY_1 0x00
0x01, //IRKEY_2 0x01
0x02, //IRKEY_3 0x02
0x03, //IRKEY_4 0x03
0x04, //IRKEY_5 0x04
0x05, //IRKEY_6 0x05
0x06, //IRKEY_7 0x06
0x07, //IRKEY_8 0x07
0x08, //IRKEY_9 0x08
//0xA0,//IRKEY_100------------------nouse
0x0b, //IRKEY_POWER 0x0b
0x0f, //IRKEY_INPUT 0x0c
0x1c, //IRKEY_TVMENU 0x0d
0x1b, //IRKEY_VOL_UP 0x0e
0x1a, //IRKEY_VOL_DOWN 0x0f
0x19, //IRKEY_CH_UP 0x10
0x18, //IRKEY_CH_DOWN 0x11
0x17, //IRKEY_CH_RECALL 0x12
0x14, //IRKEY_MUTE 0x13
//=======================================
0x16, //IRKEY_MTS 0x14
0x0A, //IRKEY_CC 0x15 // ???
//===================================
0x1d, //IRKEY_PMODE 0x2c
0x1e, //IRKEY_SMODE 0x33
0x27, //IRKEY_STILL 0x32
0x20, //IRKEY_DISPLAY 0X3B
0x28, //IRKEY_SLEEP 0X3C----------------
0x15, //IRKEY_ASPECT_RATIO 0X3D----------------------------ZOOM
0x10, //IRKEY_NAVI 0X3F----------------------
0x0C, //IRKEY_LOCK = 0x2A,-----------------------------VCHIP
0x29, //IRKEY_ATSC
#if 1
0x80,//IRKEY_AV_FAC
0x81,//IRKEY_YUV_FAC
0x82,//IRKEY_VGA_FAC
0x84,//IRKEY_WR_INC
0x85,//IRKEY_WR_DEC
0x86,//IRKEY_WG_INC
0x87,//IRKEY_WG_DEC
0x88,//IRKEY_WB_INC
0x89,//IRKEY_WB_DEC
0x8A,//IRKEY_BR_INC
0x8B,//IRKEY_BR_DEC
0x8C,//IRKEY_BG_INC
0x8D,//IRKEY_BG_DEC
0x8E,//IRKEY_BB_INC
0x8F,//IRKEY_BB_DEC
#endif
#if 1
0xFF, //IRKEY_TRACK = 声道切换
0xFF, //IRKEY_DV = 主从画面切换
0xFF, //IRKEY_PIP =
0xFF, //IRKEY_AAA = /
0x21,//IRKEY_C_SYS = 0x24,
0x23,//IRKEY_S_SYS = 0x26,
//-------------------no use
0x22,//IRKEY_22 =
0x24,//IRKEY_24 =
0x0E,//IRKEY_0E =
0x11,//IRKEY_11 =
0x29,//IRKEY_29 =
0x2A,//IRKEY_2A =
// vir
0xA1,// IRKEY_FAC
#endif
};
void irInterruptProcess(BYTE ucHeaderCode0, BYTE ucHeaderCode1)
{
static bit g_ucIrPioltReceived = 0; // Indicate a Ir "Start" have got.
static BYTE g_ucIrDataBITCounter; // Counter bit7-bit0 now received.
static BYTE g_ucIrCodeBuffer;
WORD timetemp; // Temp time for pulse rises space
BYTE i;
EA = 0;
timetemp = g_ucIrClocker; // Note: Step = 0.5ms
g_ucIrClocker = 0;
//if((timetemp1)&&(timetemp<4))
if (timetemp < 4)
{ // 3x0.5ms = 1.5ms
g_ucIrDataBITCounter++;
g_ucIrCodeBuffer >>= 1;
g_ucIrCodeBuffer &= 0x7f;//Get bit=0 (Standard '0' = 1.13ms)
}
else if (timetemp > 3 && timetemp < 6)
{// 2ms 3ms
g_ucIrDataBITCounter++;
g_ucIrCodeBuffer >>= 1;
g_ucIrCodeBuffer |= 0x80;//Get bit=1 (Standard '1' = 2.25ms)
}
else if (timetemp > 16 && timetemp < 20)
{// 8ms 10ms
g_ucIrPioltReceived = 1;//Get 'Start' (Standard 'Start' = 9ms)
g_ucIrDataBITCounter = 0;
//g_bIrDetect=FALSE;
}
#if 0
else if (timetemp > 15 && timetemp < 25)
{// 8ms 12ms
if (g_ucIrReleaseCounter > 0)
g_ucIrDataBITCounter = 0xaa;//Get 'Repeat' (Standard 'Repeat' = 11.25ms)
else
g_ucIrDataBITCounter = 0;
}
#endif
else if (timetemp > 200 && timetemp < 210)//||(timetemp>134&&timetemp<145))//Repeat 108ms two drop,one is 73,one is 139
{// (108-9-2.25=96.75 96.75*2=193.5) 203--204
//g_ucIrDataBITCounter=0;
if (g_ucIrReleaseCounter > 0)
{// only when Repeat is valid
if (g_ucIrRepeatCounter == 0 && g_ucIrDataBITCounter == 1)
{ // Repeat valid & Get a 'Repeat'
if ((g_ucIrCode == IRKEY_INPUT)
|| (g_ucIrCode == IRKEY_VOL_UP)
|| (g_ucIrCode == IRKEY_VOL_DOWN)
|| (g_ucIrCode == IRKEY_CH_UP)
|| (g_ucIrCode == IRKEY_CH_DOWN))
{
g_bIrDetect = TRUE;
g_bIrRepeat = TRUE;
g_ucIrPioltReceived = 0;
g_IrCodeParam[5] = TRUE;
g_ucIrReleaseCounter = IR_RELEASE_TIME * 2; //8x2x16ms = 256ms
g_ucIrRepeatCounter = IR_DELAY_TIME; ///10x16ms = 160ms
}
}
}
g_ucIrDataBITCounter = 0;
}
else
{
g_ucIrPioltReceived = 0;
g_ucIrDataBITCounter = 0;
}
if (g_bIrDetect == FALSE)
{
if (g_ucIrDataBITCounter == 8)
{
if (g_ucIrCodeBuffer != ucHeaderCode0)
g_ucIrDataBITCounter = 0;
#if 0//(IR_CODE_DEBUG_EN)
g_ucIRDebugCode0 = g_ucIrCodeBuffer;
Set_IR_DebugCustomerCode0_OKFlag();
#endif
}
else if (g_ucIrDataBITCounter == 16)
{
if (g_ucIrCodeBuffer != ucHeaderCode1)
g_ucIrDataBITCounter = 0;
#if 0//(IR_CODE_DEBUG_EN)
g_ucIRDebugCode1 = g_ucIrCodeBuffer;
Set_IR_DebugCustomerCode1_OKFlag();
#endif
}
else if (g_ucIrDataBITCounter == 24)
{
g_IrCodeParam[4] = g_ucIrCodeBuffer;
}
else if (g_ucIrDataBITCounter == 32)
{
g_ucIrDataBITCounter = 0;
if ((g_IrCodeParam[4] != ~g_ucIrCodeBuffer) || (g_ucIrPioltReceived == 0))
{// Get valid 'Code' & '/Code'
g_ucIrCodeBuffer = 0;
g_ucIrCode = 0xff;
g_ucIrReleaseCounter = 0;
}
else
{
#if 1
// Check if in the ChangIrCode[] table or not
for (i = 0; i < IRMAX; i++)
{
if (ChangeIrCode[i] == g_IrCodeParam[4])
break;
}
if (i == IRMAX)
{// Not right
g_ucIrCodeBuffer = 0;
g_ucIrCode = 0xff;
g_ucIrReleaseCounter = 0;
}
else
#endif
{// Get a right Ir 'code'
g_ucIrCode = i;
g_bIrDetect = TRUE;
g_ucIrPioltReceived = 0;
g_ucIrRepeatCounter = IR_DELAY_TIME; ///10x16ms = 160ms
g_ucIrReleaseCounter = IR_RELEASE_TIME * 2; //8x2x16ms = 256ms
g_IrCodeParam[5] = TRUE;
#if 0//IR_CODE_DEBUG_EN
Set_IR_DebugData_OKFlag();
g_ucIRDebugData=g_ucIrCode;
#endif
}
}
}
}
EA = 1;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -