📄 teloperate.c
字号:
void exttel_hold_deal(unsigned char ETelNum) //内线状态
{
unsigned char i,j;
if(bit_is_set(ExtTelStateCheck,ETelNum)) //本内线提机
{
for(i=0;i<OutsideTelNum;i++)
{
if(ReadExt_OutComGroup(i,ETelNum)) //本内线接听外线
{
WriteExtTelState(ETelNum, exttel_useing);
Writesoundway(SigCallID,ETelNum,OFF); //本内线停止振铃
Writesoundway(i,ETelNum,ON); //本内线与外线建立通话
SetBit(PORTC,(Line_LedCtr+i)); //外线提示灯亮
return;
}
}
for(i=0;i<cExtTelNum;i++)
{
if(ReadExt_ExtComGroup(i,ETelNum)) //本内线接听内线
{
WriteExtTelState(ETelNum, exttel_useing);
Writesoundway(SigCallID,ETelNum,OFF); //本内线停止振铃
Writesoundway(Connect_Ext1,i,ON);
Writesoundway(Connect_Ext1,ETelNum,ON); //本内线与内线建立通话
return;
}
}
for(i=0;i<OutsideTelNum;i++) //本内线空闲
{
if(bit_is_clear(OutsideBusy_Free,i)) //查找空闲外线
{
WriteExtTelState(ETelNum, exttel_unhold); //摘机空闲态
Outdialtime[i]=50; //10s操作
SetBit(OutsideBusy_Free,i); //外线被占
SetBit(PORTC,(Line_LedCtr+i)); //外线提示灯亮
WriteExt_OutComGroup(i,ETelNum,ON); //本内线与外线建立连接关系
Writesoundway(i,ETelNum,ON);
for(j=0;j<DTMF_DecordNum;j++)
{
if(bit_is_clear(DTMFBusy_Free,j)) //查找空闲DTMF
{
SetBit(DTMFBusy_Free,j); //DTMF解码被占
Writesoundway(i,(IC_DTMF+j),ON);
DTMFUseingtime[j]=50; //10s
return;
}
}
WriteExtTelState(ETelNum, exttel_useing); //有空闲外线但无DTMF解码,则只可拨打外线
return;
}
}
for(i=0;i<DTMF_DecordNum;i++)
{
if(bit_is_clear(DTMFBusy_Free,i)) //查找空闲DTMF
{
WriteExtTelState(ETelNum, exttel_unhold); //摘机空闲态
DTMFUseingtime[i]=25; //5s操作
SetBit(DTMFBusy_Free,i); //DTMF解码被占
Writesoundway((Connect_Ext1+i),ETelNum,ON);
//Writesoundway((Connect_Ext+i),(IC_DTMF+i),ON); //本内线与内线建立通话
WriteExt_DTMFComGroup(i,ETelNum,ON);
return;
}
}
}
else //本内线未提机
{
for(i=0;i<OutsideTelNum;i++)
{
if(ReadExt_OutComGroup(i,ETelNum)) //本内线与外线开始连接
{
if(OutsideRingCheck>>i & 0x01) //外线响铃未停
{
Writesoundway(SigCallID,ETelNum,ON); //本内线振铃
}
else //内线未接听,外线自动停止响铃
{
WriteOutTelState(i, outtel_hold); //外线状态
ClrBit(OutsideBusy_Free,i); //外线空闲
WriteExt_OutComGroup(i,ETelNum,OFF); //本外线与空闲分机断开连接关系
Writesoundway(SigCallID,ETelNum,OFF);//本内线停止振铃
}
}
}
for(i=0;i<cExtTelNum;i++)
{
if(ReadExt_ExtComGroup(i,ETelNum)) //本内线与内线开始连接
{
if(ExtTelStateCheck>>i & 0x01) //主叫内线继续响铃
{
Writesoundway(SigCallID,ETelNum,ON);//本内线振铃
}
else //内线未接听,外线自动停止响铃
{
WriteExt_ExtComGroup(i,ETelNum,OFF); //本外线与空闲分机断开连接关系
Writesoundway(SigCallID,ETelNum,OFF); //本内线停止振铃
}
}
}
//本内线空闲
}
}
void exttel_unhold_deal(unsigned char ETelNum) //摘机空闲态
{
unsigned char i,j;
/****************************************************/
for(i=0;i<OutsideTelNum;i++)
{
if(ReadExt_OutComGroup(i,ETelNum))
{//有空闲外线
if(bit_is_set(ExtTelStateCheck,ETelNum))
{//分机提机
if(Outdialtime[i])
{//等待拨号
Outdialtime[i]--;
for(j=0;j<DTMF_DecordNum;j++)
{
if(Readsoundway(i,(IC_DTMF+j)))
{
switch(DecordDTMF(j))
{
case 0x0b: WriteExtTelState(ETelNum, exttel_dialing); //到拨号状态
ClrBit(OutsideBusy_Free,i); //外线释放
ClrBit(PORTC,(Line_LedCtr+i)); //外线提示灯灭
Writesoundway(i,ETelNum,OFF); //本外线与空闲分机断开连接关系
Writesoundway(i,(IC_DTMF+j),OFF);
Outdialtime[i]=25;
return;
case 0xff: return;
default:
WriteExtTelState(ETelNum, exttel_useing);
ClrBit(DTMFBusy_Free,j); //DTMF释放
Writesoundway(i,(IC_DTMF+j),OFF);
return;
}
}
}
}//等待拨号
else
{//10s 未做任何事情
ClrBit(OutsideBusy_Free,i); //外线释放
ClrBit(PORTC,(Line_LedCtr+i)); //外线提示灯灭
Writesoundway(Connect_Busy,ETelNum,ON); //本内线忙音
Writesoundway(i,ETelNum,OFF); //本外线与空闲分机断开连接关系
for(j=0;j<DTMF_DecordNum;j++)
{
if(Readsoundway(i,(IC_DTMF+j)))
{
ClrBit(DTMFBusy_Free,j); //DTMF释放
Writesoundway(i,(IC_DTMF+j),OFF);
}
}
}//10s 未做任何事情
}//分机提机
else
{ //分机挂机
ClrBit(OutsideBusy_Free,i); //外线释放
ClrBit(PORTC,(Line_LedCtr+i)); //外线提示灯灭
WriteExtTelState(ETelNum, exttel_hold); //回内线状态
Writesoundway(Connect_Busy,ETelNum,OFF); //本内线断开忙音
Writesoundway(i,ETelNum,OFF); //本外线与空闲分机断开连接关系
WriteExt_OutComGroup(i,ETelNum,OFF); //本外线与空闲分机断开连接关系
for(j=0;j<DTMF_DecordNum;j++)
{
if(Readsoundway(i,(IC_DTMF+j)))
{
ClrBit(DTMFBusy_Free,j); //DTMF释放
Writesoundway(i,(IC_DTMF+j),OFF);
}
}
}//分机挂机
}//有空闲外线
}
/********************************************************/
for(i=0;i<DTMF_DecordNum;i++)
{
if(ReadExt_DTMFComGroup(i,ETelNum))
{
if(bit_is_set(ExtTelStateCheck,ETelNum))
{//分机提机
if(DTMFUseingtime[i])
{//等待拨号
DTMFUseingtime[i]--;
if(DecordDTMF(i)==0x0b) //按" * "
{ Writesoundway(SigCallID,Ext2,ON);
WriteExtTelState(ETelNum, exttel_dialing); //到拨号状态
DTMFUseingtime[i]=25;
}
}//等待拨号
else
{//10s 未做任何事情
ClrBit(DTMFBusy_Free,i); //DTMF释放
Writesoundway(Connect_Busy,ETelNum,ON); //本内线忙音
Writesoundway((Connect_Ext1+i),ETelNum,OFF);
}//10s 未做任何事情
}//分机提机
else
{ //分机挂机
ClrBit(DTMFBusy_Free,i); //DTMF释放
WriteExtTelState(ETelNum, exttel_hold); //回内线状态
Writesoundway(Connect_Busy,ETelNum,OFF); //本内线断开忙音
Writesoundway((Connect_Ext1+i),ETelNum,OFF);
WriteExt_DTMFComGroup(i,ETelNum,OFF);
}//分机挂机
}
}
}
void exttel_using_deal(unsigned char ETelNum) //内线已使用
{
}
void exttel_dialing_deal(unsigned char ETelNum) //拨号状态
{
}
void exttel_ring_deal(unsigned char ETelNum) //振铃状态
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -