📄 soundintel.c.bak
字号:
/***************************************************************************
//Actpro International (SZ) Ltd
//Project :
//File :SoundInTel.c Compiler:Keil
//Editor: LIUYI
//Data: 25-12-29 Ver:
//General Function
*/
#include <switch.h>
#define CD_1 0
#define CD_0 1
void SoundInTelInit();
void ConnectTowPoint(UCHAR point_x,UCHAR point_y);
void CutTowPoint(UCHAR point_x,UCHAR point_y);
void DecordDTMF();
void StarDecordDTMF(UCHAR SingleAddress);
void ReleaseDTMFRes(UCHAR originresID);
UCHAR GetDTMFResNum(UCHAR originresID);
void ConnectTowPoint_CD22100(UCHAR x,UCHAR y);
void CutTowPoint_CD22100(UCHAR x,UCHAR y);
void DTMFSend();
void WriteHintSound(UCHAR tel,UCHAR state,UCHAR num);
UCHAR ReadHintSound(UCHAR tel,UCHAR state);
void DealHintSound();
void SetExtTelQuietSound(UCHAR telnum);
void SetExtTelErrorSound(UCHAR telnum);
void SetExtTelWaitSound(UCHAR telnum);
UCHAR ReadHintSound(UCHAR tel,UCHAR item);
void WriteHintSound(UCHAR tel,UCHAR item,UCHAR num);
xdata UCHAR EXTTelHintSound[ExtTelNum][4] _at_ 0x200;//存储提示音的类型 typ、state、timeh、timel
xdata UCHAR DTMF_Decord[DTMF_DecordResouceNum][15] _at_ 0x220;//DTMF解码资源
//DTMF_DecordResouceNum=2; 5:State(1) SoundInput(1) length(1) data(12)
xdata UCHAR soundway[16][8] _at_ 0x240;//8816语音通路状态
//x(16) y(8)
UCHAR ReadDTMF_Decord(UCHAR res,UCHAR item);
void WriteDTMF_Decord(UCHAR res,UCHAR item,UCHAR num);
UCHAR Readsoundway(UCHAR x,UCHAR y);
void Writesoundway(UCHAR x,UCHAR y,UCHAR num);
void SoundWayLoop(void);
idata UCHAR DTMFSendStep;
idata UCHAR DTMFData;
idata UCHAR DTMFStandingTime;
void SoundInTelInit()
{
idata UCHAR i,j;
//cut all connection
for(i=0;i<16;i++)
{
for(j=0;j<8;j++)
{
Readsoundway(i,j);
Writesoundway(i,j,0);
}
}
//cut all connection in CD22100
for(i=1;i<5;i++)
{
for(j=1;j<5;j++)
{
CutTowPoint_CD22100(i,j);
}
}
//data init
for(i=0;i<DTMF_DecordResouceNum;i++)
{
for(j=0;j<15;j++)
{
ReadDTMF_Decord(i,j);
WriteDTMF_Decord(i,j,0);
}
}
DTMFSendStep=0;
DTMFData=0;
DTMFStandingTime=0;
}
void Writesoundway(UCHAR x,UCHAR y,UCHAR num)
{
PORT_STORE=PORT;
RCON=RCON_Bank2;
soundway[x][y]=num;
RCON=RCON_Bank0;
PORT=PORT_STORE;
return;
}
UCHAR Readsoundway(UCHAR x,UCHAR y)
{
idata UCHAR temp;
PORT_STORE=PORT;
RCON=RCON_Bank2;
temp=soundway[x][y];
RCON=RCON_Bank0;
PORT=PORT_STORE;
return(temp);
}
void WriteDTMF_Decord(UCHAR res,UCHAR item,UCHAR num)
{
PORT_STORE=PORT;
RCON=RCON_Bank2;
DTMF_Decord[res][item]=num;
RCON=RCON_Bank0;
PORT=PORT_STORE;
return;
}
UCHAR ReadDTMF_Decord(UCHAR res,UCHAR item)
{
idata UCHAR temp;
PORT_STORE=PORT;
RCON=RCON_Bank2;
temp=DTMF_Decord[res][item];
RCON=RCON_Bank0;
PORT=PORT_STORE;
return(temp);
}
void WriteHintSound(UCHAR tel,UCHAR item,UCHAR num)
{
PORT_STORE=PORT;
RCON=RCON_Bank2;
EXTTelHintSound[tel][item]=num;
RCON=RCON_Bank0;
PORT=PORT_STORE;
return;
}
UCHAR ReadHintSound(UCHAR tel,UCHAR item)
{
idata UCHAR temp;
PORT_STORE=PORT;
RCON=RCON_Bank2;
temp=EXTTelHintSound[tel][item];
RCON=RCON_Bank0;
PORT=PORT_STORE;
return(temp);
}
void SetExtTelWaitSound(UCHAR telnum)
{
WriteHintSound(telnum,TYPE,HintSoundType_wait);
WriteHintSound(telnum,STATE,STATE_ON); //450提示音接通状态
WriteHintSound(telnum,TIMEH,0); //时间设置
WriteHintSound(telnum,TIMEL,0);
Writesoundway(telnum,HINTSOUND,ON); //接通通道
//将分机设置为等待提示音状态
}
void SetExtTelErrorSound(UCHAR telnum)
{
WriteHintSound(telnum,TYPE,HintSoundType_error);
WriteHintSound(telnum,STATE,STATE_ON); //450提示音接通状态
WriteHintSound(telnum,TIMEH,0); //时间设置
WriteHintSound(telnum,TIMEL,0);
Writesoundway(telnum,HINTSOUND,ON); //接通通道
//将分机设置为错误提示音状态
}
void SetExtTelQuietSound(UCHAR telnum)
{
WriteHintSound(telnum,TYPE,HintSoundType_quiet);
WriteHintSound(telnum,STATE,STATE_OFF); //450提示音关闭状态
WriteHintSound(telnum,TIMEH,0);
WriteHintSound(telnum,TIMEL,0);
Writesoundway(telnum,HINTSOUND,OFF);
//将分机设置为正常状态,无提示音
}
void DealHintSound() //每2MS调用一次
{
idata UCHAR i;
idata WORD temp;
for(i=0;i<ExtTelNum;i++)
{
if(ReadHintSound(i,TYPE)==HintSoundType_error)
{//错误提示音
temp=ReadHintSound(i,TIMEH);
temp=(temp<<8)+ReadHintSound(i,TIMEL);
if(temp<HintSound_350MS)
{//时间还没有达到
temp++;
WriteHintSound(i,TIMEH,(temp>>8));
WriteHintSound(i,TIMEL,(temp));
}
else
{//时间已经达到
WriteHintSound(i,TIMEH,0);
WriteHintSound(i,TIMEL,0);
if(ReadHintSound(i,STATE)==STATE_ON) //状态翻转
{//断开状态
WriteHintSound(i,STATE,STATE_OFF);
Writesoundway(i,HINTSOUND,ON);
}
else
{//接通状态
WriteHintSound(i,STATE,STATE_ON);
Writesoundway(i,HINTSOUND,OFF);
}
}
}
if(ReadHintSound(i,TYPE)==HintSoundType_wait)
{//等待提示音
temp=ReadHintSound(i,TIMEH);
temp=(temp<<8)+ReadHintSound(i,TIMEL);
if(ReadHintSound(i,STATE)==STATE_ON) //状态翻转
{//由 接通状态 到 断开状态
if(temp<HintSound_1S)
{//时间还没有达到
temp++;
WriteHintSound(i,TIMEH,(temp>>8));
WriteHintSound(i,TIMEL,(temp));
}
else
{
WriteHintSound(i,TIMEH,0);
WriteHintSound(i,TIMEL,0);
WriteHintSound(i,STATE,STATE_OFF);
Writesoundway(i,HINTSOUND,OFF);
}
}
else
{//由 断开状态 到 接通状态
if(temp<HintSound_4S)
{//时间还没有达到4S
temp++;
WriteHintSound(i,TIMEH,(temp>>8));
WriteHintSound(i,TIMEL,(temp));
}
else
{
WriteHintSound(i,TIMEH,0);
WriteHintSound(i,TIMEL,0);
WriteHintSound(i,STATE,STATE_ON);
Writesoundway(i,HINTSOUND,ON);
}
}
}
}
}
void SoundWayLoop(void)
{
idata UCHAR i,j;
for(i=0;i<16;i++)
{
for(j=0;j<8;j++)
{
if(Readsoundway(i,j)==OFF)
{CutTowPoint(i,j);} //关断状态
else if(Readsoundway(i,j)==ON)
{ConnectTowPoint(i,j);} //连通状态
else
{Writesoundway(i,j,OFF);} //出错状态 ,关闭通道
}
}
}
void ConnectTowPoint(UCHAR point_x,UCHAR point_y)
{
idata UCHAR address,x,y;
address=0x00;
x=point_x&0x0f;
y=point_y&0x07;
address=address<<3;
address=address|y;
address=address<<4;
address=address|x;
address=address|0x80; //connect
PORT=address;
SoundSwitchStorbe=0;
SoundSwitchStorbe=1;
SoundSwitchStorbe=0;
PORT=0xff;
}
void CutTowPoint(UCHAR point_x,UCHAR point_y)
{
idata UCHAR address,x,y;
address=0x00;
x=point_x&0x0f;
y=point_y&0x07;
address=address<<3;
address=address|y;
address=address<<4;
address=address|x;
address=address&0x7f; //cut
PORT=address;
SoundSwitchStorbe=0;
SoundSwitchStorbe=1;
SoundSwitchStorbe=0;
PORT=0xff;
}
void StarDecordDTMF(UCHAR SingleAddress)
{
idata UCHAR i,temp;
//查找是否有解码资源
for(i=0;i<DTMF_DecordResouceNum;i++)
{
if(ReadDTMF_Decord(i,dtmfdecord_state)==0)
{//找到空闲的解码芯片 //连接输入信号
switch(i)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -