/*\\file: audio.c
Date. 2005.12.10 Ipman Robbin
Desp. ir decode.
Last update: 2006.08.10
Common: use icp decode ir
*/
#include "system.h"
#include <stdio.h>
volatile BYTE irDataBuff[4];
volatile BYTE irKeyEvent=0; //按键状态
volatile UINT16 icrCurrent=0; //当前icr值
volatile UINT16 icrPrevious=0; //上次icr值
volatile UINT16 icrSpace=0; //icr值间隔
static BYTE irByteIndex=0; //当前处理遥控器的字节INDEX
static BYTE irBitIndex=0; //遥控码位INDEX
static BYTE irIsFinish=TRUE; //标志解码成功
BYTE irIndex;
BYTE irCode=IR_KEY_UNKNOW;
BYTE lastIrCode = IR_KEY_UNKNOW;
UINT16 irKeyRptTimes=0;
#if defined(ALI5672)||defined(ALI5673S)
unsigned char selectSongFlag[2] = {0}; // 用于存储选择歌曲的信息,[0]-- 10+按键值,
volatile unsigned int switchSongNum = 0; // 曲目号
char switchSongDisp[3] = {0}; // 用于做选曲时闪的效果
#endif
//#ifdef IR_VERSION_C
#if defined(_DVD_363_)
#include "ir_dvd_363.h"
#elif defined(_DVD_313_)
#include "ir_dvd_313.h"
#elif defined(_DVD_316_)
#include "ir_dvd_313.h"
#elif defined(_DVD_330_)
#include "ir_dvd_330.h"
#elif defined(_DVD_353_)
#include "ir_dvd_353.h"
#elif defined(_DVD_392_) || defined(_DVD_317_)
#include "ir_dvd_392.h"
#elif defined(_DVD_393_)
#include "ir_dvd_393.h"
#elif defined(_DVD_396_)
#include "ir_dvd_396.h"
#elif defined(_DVD_888_)
#include "ir_dvd_888.h"
#elif defined(_DVD_381_)
#include "ir_dvd_381.h"
#elif defined(_VCD_313_)
#include "ir_vcd_313.h"
#elif defined(_VCD_392_)
#include "ir_vcd_392.h"
#elif defined(_VCD_316_)
#include "ir_vcd_313.h"
#elif defined(_VCD_363_)
#include "ir_vcd_363.h"
#elif defined(_VCD_353_)
#include "ir_vcd_353.h"
#elif defined(_VCD_393_)
#include "ir_vcd_393.h"
#elif defined(_VCD_888_)
#include "ir_vcd_888.h"
#elif defined(_VCD_330_)
#include "ir_vcd_330.h"
#elif defined(_VCD_563_)
#include "ir_vcd_563.h"
#endif
//#endif
static void ir_get_bit(char bit)
{
if(irByteIndex<4)//防止指针跑飞
{
irDataBuff[irByteIndex]<<=1;
if(bit==1)
{
irDataBuff[irByteIndex] |= 1;
}else{
irDataBuff[irByteIndex] &= 0xFE;
}
irBitIndex++;
if(irBitIndex%8==0)
{
irByteIndex++;
}
if(irBitIndex==32)//累计到32个,则发送遥控器接收完成标志
{
irBitIndex=0;
irByteIndex=0;
if(irDataBuff[0]==REMOTE_ADDR)//厂家码校验
{
{ irCode=irDataBuff[2];
irKeyEvent = _IR_KEY_DOWN;
}
}
}
}
}
BYTE ir_get_index(BYTE value)
{
BYTE index=0;
while(index<(sizeof(irCodeTable)/2) && (value!=pgm_read_byte(irCodeTable+index*2)))
{
index++;
}
if(index==(sizeof(irCodeTable)/2))
return KEY_NAME_NULL;
else
return index;
}
void ir_key_up(void)
{
BYTE dvdCmd;//dvd状态下需要发送的命令
if(irKeyRptTimes<_IR_DEPRESS_TIME) //短按遥控释放事件
{
if(irIndex<KEY_FUNC_COUNT) //如果是面板上有的按键
{
keyParam |= KEY_FROM_IR;
if(currentPower==_POWER_DISC)
{
if(irCode==IR_KEY_RPT)
lastKeyCode=KEY_NAME_RPT;
if(irCode==IR_KEY_RDM)
lastKeyCode=KEY_NAME_RDM;
#ifndef _SPHE_8100_
#if defined(_VCD_393_) || defined(_VCD_353_)
if(irCode==IR_KEY_PLAY)
lastKeyCode=KEY_NAME_NULL;
#else
if((irCode==IR_KEY_PLAY) || (irCode==IR_KEY_ENTER))
lastKeyCode=KEY_NAME_NULL;
#endif
#else
if(irCode==IR_KEY_INT)
lastKeyCode=KEY_NAME_INT;
if((irCode==IR_KEY_PLAY))
lastKeyCode=KEY_NAME_NULL;
#endif
}
if((irIndex==KEY_NAME_POW))
{
if(currentPower==_POWER_OFF)
key_depress(irIndex);
}else{
#ifdef _NO_PRESET_KEY_
#ifdef USE_TURBINE //使用涡轮
key_up(irIndex);
#else
if((irCode!=IR_KEY_VOL_UP) && (irCode!=IR_KEY_VOL_DOWN))
{
key_up(irIndex);
}
#endif
#else
if((currentPower==_POWER_DISC) && (irIndex<=KEY_NAME_6))
{
}
else
{
#ifdef USE_TURBINE //使用涡轮
// unsigned char tmpdata[2];
// sprintf(tmpdata,"%d",irIndex);
// disp_string(dispBuff,tmpdata,1,2);
key_up(irIndex);
#else
if((irCode!=IR_KEY_VOL_UP) && (irCode!=IR_KEY_VOL_DOWN))
{
key_up(irIndex);
}
#endif
}
#endif
}
keyParam &= ~KEY_FROM_IR;
}
if(irIndex!=KEY_NAME_NULL)
{
dvdCmd = pgm_read_byte(irCodeTable+irIndex*2+1);
#if defined(VCD_563)
#else
if(dvdCmd!=_CMD_NULL)
#endif
{
#if defined(VCD_563)
#else
if(irCode!=IR_KEY_10)
gotoFlagTimeout=0;
#if 1
else
TenPlusTimeout=10;
#endif
#endif
#ifdef _SPHE_8100_
if((dvdCmd==_CMD_INT) && (currentDiscType&DISC_MP3))
{
return;
}
if(((dvdCmd==_CMD_RDM)||(dvdCmd==_CMD_INT)) && (currentMode==_MODE_PAUSE))
return;
#endif
#if defined(ALI5673S)||defined(ALI5672)
if (irCode==IR_KEY_STOP)
lastKeyCode=KEY_NAME_STOP;
if(currentPower == _POWER_DISC)
{
if ((currentMode !=_MODE_PAUSE))
{
if (irCode==IR_KEY_10)
{
if ((currentMode!=_MODE_PROG)&&(currentMode!=_MODE_STOP))
{
if (gotoFlagTimeout==0)
{
selectSongFlag[0] = 1;
gotoFlagTimeout = FLAG_GOTO_TIMEOUT +5;
}
switch(selectSongFlag[0]) {
case 0: // 一位,
switchSongDisp[0] = ' '; // 显示用
switchSongDisp[1] = ' ';
switchSongDisp[2] = '-';
selectSongFlag[0] = 1;
selectSongFlag[1] = 1;
switchSongNum = 0;
break;
case 1: // 两位,
switchSongDisp[0] = ' '; // 显示用
switchSongDisp[1] = '-';
switchSongDisp[2] = '-';
selectSongFlag[0] = 2;
selectSongFlag[1] = 2;
switchSongNum = 0;
break;
case 2: // 三位
switchSongDisp[0] = '-'; // 显示用
switchSongDisp[1] = '-';
switchSongDisp[2] = '-';
selectSongFlag[0] = 0;
selectSongFlag[1] = 3;
switchSongNum= 0;
break;
default:
break;
}
disp_string(dispBuff,switchSongDisp,1,3);
}
}
else if ((irIndex<=5)||((irIndex>=30)&&(irIndex<=34))) // 0~9数字键值调整
{
if (gotoFlagTimeout) // 按键时间还未超时
{
char tmpChar = (char)(dvdCmd-0x10);
if (selectSongFlag[1]&&(tmpChar<=9)&&(tmpChar>=0))
{
if (tmpChar==6) // BUG处理
disp_char(dispBuff,1,switchSongDisp[0]);
selectSongFlag[1]--; // 减一
gotoFlagTimeout = FLAG_GOTO_TIMEOUT;
switch(selectSongFlag[1]) {
case 2:
switchSongDisp[0] = ASCII_NUM+tmpChar;
disp_char(dispBuff,1,switchSongDisp[0]);
switchSongNum += ((unsigned int)tmpChar)*100;
break;
case 1:
switchSongDisp[1] = ASCII_NUM+tmpChar;
disp_char(dispBuff,2,switchSongDisp[1]);
switchSongNum += ((unsigned int)tmpChar)*10;
break;
case 0:
switchSongDisp[2] = ASCII_NUM+tmpChar;
disp_char(dispBuff,3,switchSongDisp[2]);
display();
delay_ms(200);
switchSongNum += (unsigned int)tmpChar;
dvd_send_cmd(0x0A,switchSongNum>>8);
dvd_send_cmd(0x0B,switchSongNum);
selectSongFlag[0] = 0;
selectSongFlag[1] = 0;
switchSongNum = 0;
gotoFlagTimeout = 0;
break;
default:
break;
}
}
}
else // 直接发送按键曲目
{
if (dvdCmd != 0x10)
{
selectSongFlag[0] = 0;
selectSongFlag[1] = 0;
dvd_send_cmd(0x0A,0x00);
dvd_send_cmd(0x0B,(dvdCmd-0x10));
}
}
}else{
if (dvdCmd != _CMD_NULL)
dvd_send_cmd(_CMD_HEAD_KEY,dvdCmd);
if(dvdCmd==_CMD_STOP)
aliStartDisplayInfor(OFF);
}
}else{
IR.rar_remote
版权申诉
186 浏览量
2022-09-22
18:19:56
上传
评论
收藏 5KB RAR 举报
林当时
- 粉丝: 101
- 资源: 1万+
最新资源
- 基于python区块链的图片版权保护系统
- 一些常用的 Redis 基本命令以及它们的使用用例
- 一个简单的 Python 代码示例,演示了如何实现树状数组(也称为二进制索引树)
- 最新USB转vga hdmi驱动Fresco logic FL2000-2.1.36287驱动
- 基于原生语言开发的智慧养老微信小程序(只含页面)
- 课程设计基于sort+knn实现高空抛物演示python源码+演示视频.7z
- 基于Java的万年历源代码
- halcon检测表面的缺陷例子
- 基于LabView+MATLAB的说话人识别系统
- 基于Flask Web的中文自动语音识别演示系统,包含语音识别、语音合成、声纹识别之说话人识别
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈