📄 communication.c
字号:
}//消息查询
}//是否有消息
}//函数
void exttel_switch_deal(UCHAR telnum)
{
idata UCHAR i,extcomgroupID;
if(RawMessageNum!=0)
{
for(i=0;i<MESSAGEGROUPNUMBER;i++)
{
if(ReadMessageGroup(i,MessageGroup_origin)==MACHINE_ID[telnum])
{//为本分机消息
if(ReadMessageGroup(i,MessageGroup_type)==EXTTEL_HOLD_MESSAGETYPE)
{//挂机消息
extcomgroupID=findextcomgroupbyorigin(telnum);
if((extcomgroupID!=0xff)&(ReadExtComGroup(extcomgroupID,ExtComGroup_type)==INSIDECOMTYPE))
{//该挂机分机为内部通话主叫方
Writesoundway(telnum,HINTSOUND,ON);//切断450HZ可拨号提示音
ReleaseDTMFRes(MACHINE_ID[telnum]);//释放DTMF解码资源
WriteExtTelState(telnum,exttel_hold); //改变分机状态
CutTowPoint_CD22100(extcomgroupID+1,MUSIC_22100); //断开音乐
Writesoundway((ReadExtComGroup(extcomgroupID,ExtComGroup_object)-EXTTEL_ID),extcomgroupID,OFF);//切断通话
SetExtTelErrorSound(ReadExtComGroup(extcomgroupID,ExtComGroup_object)-EXTTEL_ID); //给出错误提示音
WriteExtTelState((ReadExtComGroup(extcomgroupID,ExtComGroup_object)-EXTTEL_ID),exttel_error);//改变分机状态
ClearAComGroup(extcomgroupID);//撤消通话组
RawMessageNum--; //清楚已处理的消息
ClearAMessage(i);
return;
}
if((extcomgroupID!=0xff)&(ReadExtComGroup(extcomgroupID,ExtComGroup_type)==OUTSIDECOMTYPE))
{//该挂机分机为外部通话
Writesoundway(telnum,HINTSOUND,ON);//切断450HZ可拨号提示音
ReleaseDTMFRes(MACHINE_ID[telnum]);//释放DTMF解码资源
WriteExtTelState(telnum,exttel_hold); //改变分机状态
CutTowPoint_CD22100(extcomgroupID+1,MUSIC_22100); //断开音乐
HoldOutsideLine(extcomgroupID);//挂机
WriteOutTelState(extcomgroupID,outtel_hold);//改变外线状态
ClearAComGroup(extcomgroupID);//撤消通话组
RawMessageNum--; //清楚已处理的消息
ClearAMessage(i);
return;
}
extcomgroupID=findextcomgroupbyobject(telnum);
if((extcomgroupID!=0xff)&(ReadExtComGroup(extcomgroupID,ExtComGroup_type)==INSIDECOMTYPE))
{//该挂机分机为内部通话被叫方
Writesoundway(telnum,HINTSOUND,ON);//切断450HZ可拨号提示音
ReleaseDTMFRes(MACHINE_ID[telnum]);//释放DTMF解码资源
WriteExtTelState(telnum,exttel_hold); //改变分机状态
CutTowPoint_CD22100(extcomgroupID+1,MUSIC_22100); //断开音乐
Writesoundway((ReadExtComGroup(extcomgroupID,ExtComGroup_origin)-EXTTEL_ID),extcomgroupID,OFF);//切断通话
SetExtTelErrorSound(ReadExtComGroup(extcomgroupID,ExtComGroup_origin)-EXTTEL_ID); //给出错误提示音
WriteExtTelState((ReadExtComGroup(extcomgroupID,ExtComGroup_origin)-EXTTEL_ID),exttel_error);//改变分机状态
ClearAComGroup(extcomgroupID);//撤消通话组
RawMessageNum--; //清楚已处理的消息
ClearAMessage(i);
return;
}
} //挂机消息
if(ReadMessageGroup(i,MessageGroup_type)==DECODE_DTMF_MESSAGETYPE)
{//DTMF解码消息
if(ReadMessageGroup(i,(MessageGroup_datastar+1))==1)
{//收到1个拨号信息
if(ReadDTMF_Decord((ReadMessageGroup(i,MessageGroup_datastar)),dtmfdecord_datastar)==0x0C)
{//符合分机拨号标准
Writesoundway(telnum,HINTSOUND,OFF);//切断450HZ可拨号提示音
WriteExtTelState(telnum,exttel_switch_dialing); //改变分机状态
RawMessageNum--; //释放消息资源
ClearAMessage(i);
return;
}
else
{//不符合分机拨号标准
extcomgroupID=findextcomgroupbyorigin(telnum);
if((extcomgroupID!=0xff)&(ReadExtComGroup(extcomgroupID,ExtComGroup_type)==INSIDECOMTYPE))
{//该挂机分机为内部通话主叫方
ReleaseDTMFRes(MACHINE_ID[telnum]);//释放DTMF解码资源
SetExtTelErrorSound(telnum); //给出错误提示音
WriteExtTelState(telnum,exttel_error);//改变分机状态
CutTowPoint_CD22100(extcomgroupID+1,MUSIC_22100); //断开音乐
Writesoundway((ReadExtComGroup(extcomgroupID,ExtComGroup_object)-EXTTEL_ID),extcomgroupID,OFF);//切断通话
SetExtTelErrorSound(ReadExtComGroup(extcomgroupID,ExtComGroup_object)-EXTTEL_ID); //给出错误提示音
WriteExtTelState((ReadExtComGroup(extcomgroupID,ExtComGroup_object)-EXTTEL_ID),exttel_error);//改变分机状态
ClearAComGroup(extcomgroupID);//撤消通话组
RawMessageNum--; //清楚已处理的消息
ClearAMessage(i);
return;
}
if((extcomgroupID!=0xff)&(ReadExtComGroup(extcomgroupID,ExtComGroup_type)==OUTSIDECOMTYPE))
{//该挂机分机为外部通话
ReleaseDTMFRes(MACHINE_ID[telnum]);//释放DTMF解码资源
SetExtTelErrorSound(telnum); //给出错误提示音
WriteExtTelState(telnum,exttel_error);//改变分机状态
CutTowPoint_CD22100(extcomgroupID+1,MUSIC_22100); //断开音乐
HoldOutsideLine(extcomgroupID);//挂机
WriteOutTelState(extcomgroupID,outtel_hold);//改变外线状态
ClearAComGroup(extcomgroupID);//撤消通话组
RawMessageNum--; //清楚已处理的消息
ClearAMessage(i);
return;
}
extcomgroupID=findextcomgroupbyobject(telnum);
if((extcomgroupID!=0xff)&(ReadExtComGroup(extcomgroupID,ExtComGroup_type)==INSIDECOMTYPE))
{//该挂机分机为内部通话被叫方
ReleaseDTMFRes(MACHINE_ID[telnum]);//释放DTMF解码资源
SetExtTelErrorSound(telnum); //给出错误提示音
WriteExtTelState(telnum,exttel_error);//改变分机状态
CutTowPoint_CD22100(extcomgroupID+1,MUSIC_22100); //断开音乐
Writesoundway((ReadExtComGroup(extcomgroupID,ExtComGroup_origin)-EXTTEL_ID),extcomgroupID,OFF);//切断通话
SetExtTelErrorSound(ReadExtComGroup(extcomgroupID,ExtComGroup_origin)-EXTTEL_ID); //给出错误提示音
WriteExtTelState((ReadExtComGroup(extcomgroupID,ExtComGroup_origin)-EXTTEL_ID),exttel_error);//改变分机状态
ClearAComGroup(extcomgroupID);//撤消通话组
RawMessageNum--; //清楚已处理的消息
ClearAMessage(i);
return;
}
}
}//解到第一个拨号信息
}//解码消息
RawMessageNum--;
ClearAMessage(i);
return;
}//分机线消息
}//消息查询
}//是否有消息
}//函数
void exttel_switch_dialing_deal(UCHAR telnum)
{
idata UCHAR i,extcomgroupID;
if(RawMessageNum!=0)
{
for(i=0;i<MESSAGEGROUPNUMBER;i++)
{
if(ReadMessageGroup(i,MessageGroup_origin)==MACHINE_ID[telnum])
{//为本分机消息
if(ReadMessageGroup(i,MessageGroup_type)==EXTTEL_HOLD_MESSAGETYPE)
{//挂机消息
extcomgroupID=findextcomgroupbyorigin(telnum);
if((extcomgroupID!=0xff)&(ReadExtComGroup(extcomgroupID,ExtComGroup_type)==INSIDECOMTYPE))
{//该挂机分机为内部通话主叫方
ReleaseDTMFRes(MACHINE_ID[telnum]);//释放DTMF解码资源
WriteExtTelState(telnum,exttel_hold); //改变分机状态
CutTowPoint_CD22100(extcomgroupID+1,MUSIC_22100); //连接音乐
Writesoundway((ReadExtComGroup(extcomgroupID,ExtComGroup_object)-EXTTEL_ID),extcomgroupID,OFF);//切断通话
SetExtTelErrorSound(ReadExtComGroup(extcomgroupID,ExtComGroup_object)-EXTTEL_ID); //给出错误提示音
WriteExtTelState((ReadExtComGroup(extcomgroupID,ExtComGroup_object)-EXTTEL_ID),exttel_error);//改变分机状态
ClearAComGroup(extcomgroupID);//撤消通话组
RawMessageNum--; //清楚已处理的消息
ClearAMessage(i);
return;
}
if((extcomgroupID!=0xff)&(ReadExtComGroup(extcomgroupID,ExtComGroup_type)==OUTSIDECOMTYPE))
{//该挂机分机为外部通话
ReleaseDTMFRes(MACHINE_ID[telnum]);//释放DTMF解码资源
WriteExtTelState(telnum,exttel_hold); //改变分机状态
CutTowPoint_CD22100(extcomgroupID+1,MUSIC_22100); //断开音乐
HoldOutsideLine(extcomgroupID);//挂机
WriteOutTelState(extcomgroupID,outtel_hold);//改变外线状态
ClearAComGroup(extcomgroupID);//撤消通话组
RawMessageNum--; //清楚已处理的消息
ClearAMessage(i);
return;
}
extcomgroupID=findextcomgroupbyobject(telnum);
if((extcomgroupID!=0xff)&(ReadExtComGroup(extcomgroupID,ExtComGroup_type)==INSIDECOMTYPE))
{//该挂机分机为内部通话被叫方
ReleaseDTMFRes(MACHINE_ID[telnum]);//释放DTMF解码资源
WriteExtTelState(telnum,exttel_hold); //改变分机状态
CutTowPoint_CD22100(extcomgroupID+1,MUSIC_22100); //断开音乐
Writesoundway((ReadExtComGroup(extcomgroupID,ExtComGroup_origin)-EXTTEL_ID),extcomgroupID,OFF);//切断通话
SetExtTelErrorSound(ReadExtComGroup(extcomgroupID,ExtComGroup_origin)-EXTTEL_ID); //给出错误提示音
WriteExtTelState((ReadExtComGroup(extcomgroupID,ExtComGroup_origin)-EXTTEL_ID),exttel_error);//改变分机状态
ClearAComGroup(extcomgroupID);//撤消通话组
RawMessageNum--; //清楚已处理的消息
ClearAMessage(i);
return;
}
} //挂机消息
if(ReadMessageGroup(i,MessageGroup_type)==DECODE_DTMF_MESSAGETYPE)
{//DTMF解码消息
if(ReadMessageGroup(i,(MessageGroup_datastar+1))==2)
{//收到2个拨号信息
if(ReadDTMF_Decord((ReadMessageGroup(i,MessageGroup_datastar)),dtmfdecord_datastar+1)==0x08)
{//符合分机拨号标准
RawMessageNum--; //释放消息资源
ClearAMessage(i);
return;
}
else
{//不符合分机拨号标准
exttel_switch_dialing_error_deal(telnum);
RawMessageNum--; //清楚已处理的消息
ClearAMessage(i);
return;
}
}
if(ReadMessageGroup(i,(MessageGroup_datastar+1))==3)
{//收到3个拨号信息
if(ReadDTMF_Decord((ReadMessageGroup(i,MessageGroup_datastar)),dtmfdecord_datastar+2)==0x00)
{//符合分机拨号标准
RawMessageNum--; //释放消息资源
ClearAMessage(i);
return;
}
else
{//不符合分机拨号标准
exttel_switch_dialing_error_deal(telnum);
RawMessageNum--; //清楚已处理的消息
ClearAMessage(i);
return;
}
}
if(ReadMessageGroup(i,(MessageGroup_datastar+1))==4)
{//收到4个拨号信息
if((ReadDTMF_Decord((ReadMessageGroup(i,MessageGroup_datastar)),dtmfdecord_datastar+3)<=4)
&(ReadDTMF_Decord((ReadMessageGroup(i,MessageGroup_datastar)),dtmfdecord_datastar+3)>=1))
{//达到分机拨号长度 且符合拨号规定
extcomgroupID=findextcomgroupbyorigin(telnum);
if((extcomgroupID!=0xff)&(ReadExtComGroup(extcomgroupID,ExtComGroup_type)==INSIDECOMTYPE))
{//该挂机分机为内部通话主叫方
if(ReadExtTelState(ReadDTMF_Decord((ReadMessageGroup(i,MessageGroup_datastar)),dtmfdecord_datastar+3)-EXTTEL_ID)==exttel_hold)
{//分机空闲状态
CutTowPoint_CD22100(extcomgroupID+1,MUSIC_22100); //断开音乐
Writesoundway((ReadExtComGroup(extcomgroupID,ExtComGroup_object)-EXTTEL_ID),extcomgroupID,OFF);//断开通道
WriteExtComGroup(extcomgroupID,ExtComGroup_origin,ReadExtComGroup(extcomgroupID,ExtComGroup_object));
WriteExtComGroup(extcomgroupID,ExtComGroup_object,ReadDTMF_Decord((ReadMessageGroup(i,MessageGroup_datastar)),dtmfdecord_datastar+3));
//修改通话组成员
WriteExtTelState((ReadExtComGroup(extcomgroupID,ExtComGroup_object)-EXTTEL_ID),exttel_receCID);//改变分机状态
WriteExtTelState((ReadExtComGroup(extcomgroupID,ExtComGroup_origin)-EXTTEL_ID),exttel_sendCID); //改变分机状态
ReleaseDTMFRes(MACHINE_ID[telnum]);//释放DTMF解码资源
WriteExtTelState(telnum,exttel_hold);//改变分机状态
RawMessageNum--; //清楚已处理的消息
ClearAMessage(i);
return;
}
else
{//分机非空闲状态
exttel_switch_dialing_error_deal(telnum);
RawMessageNum--; //清楚已处理的消息
ClearAMessage(i);
return;
}
}
if((extcomgroupID!=0xff)&(ReadExtComGroup(extcomgroupID,ExtComGroup_type)==OUTSIDECOMTYPE))
{//该挂机分机为外部通话
if(ReadExtTelState(ReadDTMF_Decord((ReadMessageGroup(i,MessageGroup_datastar)),dtmfdecord_datastar+3)-EXTTEL_ID)==exttel_hold)
{//分机空闲状态
//CutTowPoint_CD22100(extcomgroupID+1,MUSIC_22100); //断开音乐
Writesoundway((ReadExtComGroup(extcomgroupID,ExtComGroup_object)-EXTTEL_ID),extcomgroupID,OFF);//断开通道
WriteExtComGroup(extcomgroupID,ExtComGroup_origin,ReadDTMF_Decord((ReadMessageGroup(i,MessageGroup_datastar)),dtmfdecord_datastar+3));
//WriteExtComGroup(extcomgroupID,ExtComGroup_object,ReadDTMF_Decord((ReadMessageGroup(i,MessageGroup_datastar)),dtmfdecord_datastar+3));
//修改通话组成员
//WriteOutTelState((ReadExtComGroup(extcomgroupID,ExtComGroup_object)-OUTSIDETEL_ID),outtel_ring);//改变外线状态
WriteExtTelState((ReadExtComGroup(extcomgroupID,ExtComGroup_origin)-EXTTEL_ID),exttel_sendCID); //改变分机状态
ReleaseDTMFRes(MACHINE_ID[telnum]);//释放DTMF解码资源
WriteExtTelState(telnum,exttel_hold);//改变分机状态
RawMessageNum--; //清楚已处理的消息
ClearAMessage(i);
return;
}
else
{//分机非空闲状态
exttel_switch_dialing_error_deal(telnum);
RawMessageNum--; //清楚已处理的消息
ClearAMessage(i);
return;
}
}
extcomgroupID=findextcomgroupbyobject(telnum);
if((extcomgroupID!=0xff)&(ReadExtComGroup(extcomgroupID,ExtComGroup_type)==INSIDECOMTYPE))
{//该挂机分机为内部通话被叫方
if(ReadExtTelState(ReadDTMF_Decord((ReadMessageGroup(i,MessageGroup_datastar)),dtmfdecord_datastar+3)-EXTTEL_ID)==exttel_hold)
{//分机空闲状态
CutTowPoint_CD22100(extcomgroupID+1,MUSIC_22100); //断开音乐
Writesoundway((ReadExtComGroup(extcomgroupID,ExtComGroup_origin)-EXTTEL_ID),extcomgroupID,OFF);//断开通道
WriteExtComGroup(extcomgroupID,ExtComGroup_object,ReadDTMF_Decord((ReadMessageGroup(i,MessageGroup_datastar)),dtmfdecord_datastar+3));
//修改通话组成员
WriteExtTelState((ReadExtComGroup(extcomgroupID,ExtComGroup_object)-EXTTEL_ID),exttel_receCID);//改变分机状态
WriteExtTelState((ReadExtComGroup(extcomgroupID,ExtComGroup_origin)-EXTTEL_ID),exttel_sendCID); //改变分机状态
ReleaseDTMFRes(MACHINE_ID[telnum]);//释放DTMF解码资源
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -