📄 communication.c
字号:
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(ReadExtTelState(ReadDTMF_Decord((ReadMessageGroup(i,MessageGroup_datastar)),dtmfdecord_datastar+3)-EXTTEL_ID)==exttel_hold)
{//分机空闲状态
WriteExtComGroup(extcomgroupID,ExtComGroup_object,ReadDTMF_Decord((ReadMessageGroup(i,MessageGroup_datastar)),dtmfdecord_datastar+3));
//修改通话组成员
ReleaseDTMFRes(MACHINE_ID[telnum]);//释放DTMF解码资源
WriteExtTelState((ReadDTMF_Decord((ReadMessageGroup(i,MessageGroup_datastar)),dtmfdecord_datastar+3)-EXTTEL_ID),exttel_receCID);//改变分机状态
WriteExtTelState(telnum,exttel_sendCID); //改变分机状态
}
else
{//分机非空闲状态
ClearAComGroup(extcomgroupID);//撤消通话组
ReleaseDTMFRes(MACHINE_ID[telnum]);//释放DTMF解码资源
SetExtTelErrorSound(telnum); //给出错误提示音
WriteExtTelState(telnum,exttel_error);//改变分机状态
}
RawMessageNum--; //释放消息资源
ClearAMessage(i);
return;
}
}
}//解码消息
RawMessageNum--; //清楚已处理的消息
ClearAMessage(i);
return;
}//本外线消息
}//消息查询
}//是否有消息
}//函数
void exttel_sendCID_deal(UCHAR telnum)
{
idata UCHAR i,extcomgroupID;
if(ReadCID(CID_state)==CID_STATE_ENWRITE)
{//资源空闲状态
extcomgroupID=findextcomgroupbyorigin(telnum);//取得通话组编号
ConnectTowPoint_CD22100((extcomgroupID+1),SEND_DTMF_22100); //连接CID信号源
if(ReadExtComGroup(extcomgroupID,ExtComGroup_type)==INSIDECOMTYPE)
{
Writesoundway((ReadExtComGroup(extcomgroupID,ExtComGroup_object)-EXTTEL_ID),extcomgroupID,ON);
//通道连接
//准备内容
WriteCID(CID_length,0x00);//初始化指针
WriteCID(CID_ptr,(CID_ptr+1));//初始化指针
WriteCID(ReadCID(CID_ptr),0x0C);
WriteCID(CID_ptr,(ReadCID(CID_ptr)+1)); //指针 指向下一个位置
WriteCID(CID_length,(ReadCID(CID_length)+1)); //长度 加一
WriteCID(ReadCID(CID_ptr),0x08);
WriteCID(CID_ptr,(ReadCID(CID_ptr)+1)); //指针 指向下一个位置
WriteCID(CID_length,(ReadCID(CID_length)+1)); //长度 加一
WriteCID(ReadCID(CID_ptr),0x00);
WriteCID(CID_ptr,(ReadCID(CID_ptr)+1)); //指针 指向下一个位置
WriteCID(CID_length,(ReadCID(CID_length)+1)); //长度 加一
WriteCID(ReadCID(CID_ptr),MACHINE_ID[telnum]);
WriteCID(CID_ptr,(ReadCID(CID_ptr)+1)); //指针 指向下一个位置
WriteCID(CID_length,(ReadCID(CID_length)+1)); //长度 加一
WriteCID(CID_ptr,(CID_ptr+1));//指针归位
}
else
{
Writesoundway(telnum,extcomgroupID,ON);
//通道连接
WriteCID(CID_length,0x00);//初始化指针
WriteCID(CID_ptr,(CID_ptr+1));//初始化指针
for(i=0;i<3;i++)
{
WriteCID(ReadCID(CID_ptr),(extcomgroupID+1));
WriteCID(CID_ptr,(ReadCID(CID_ptr)+1)); //指针 指向下一个位置
WriteCID(CID_length,(ReadCID(CID_length)+1)); //长度 加一
}
WriteCID(CID_ptr,(CID_ptr+1));//指针归位
}
WriteCID(CID_state,CID_STATE_ENREAD); //改变状态
return;
}
if(ReadCID(CID_state)==CID_STATE_ENREAD)
{//发送过程中
return;
}
if(ReadCID(CID_state)==CID_STATE_SENDOVER)
{//发送完毕
extcomgroupID=findextcomgroupbyorigin(telnum);//取得通话组编号
CutTowPoint_CD22100((extcomgroupID+1),SEND_DTMF_22100); //断开CID信号源
//通道断开
if(ReadExtComGroup(extcomgroupID,ExtComGroup_type)==INSIDECOMTYPE)
{
Writesoundway((ReadExtComGroup(extcomgroupID,ExtComGroup_object)-EXTTEL_ID),extcomgroupID,OFF);
//通道断开
ExtTelRing(ReadExtComGroup(extcomgroupID,(ExtComGroup_object))-EXTTEL_ID);
//被呼分机分机振铃
SetExtTelWaitSound(telnum);
//呼叫分机听等待提示音
WriteExtTelState((ReadExtComGroup(extcomgroupID,(ExtComGroup_object))-EXTTEL_ID),exttel_ring);
//改变分机状态
WriteExtTelState(telnum,exttel_waiting);
//改变分机状态
}
else
{//外线的来电显示
Writesoundway(telnum,extcomgroupID,OFF);
//通道断开
ExtTelRing(telnum);
//被呼分机分机振铃
WriteExtTelState(telnum,exttel_ring);
//改变分机状态
}
WriteCID(CID_state,CID_STATE_ENWRITE); //可以重新发送
return;
}
}
void exttel_waiting_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(ReadExtComGroup(extcomgroupID,ExtComGroup_type)==INSIDECOMTYPE)
{//内部通话类型
SetExtTelQuietSound(telnum);//停止主叫方的等待提示音
WriteExtTelState(telnum,exttel_hold);//改变主叫方分机状态
ExtTelStopRing(ReadExtComGroup(extcomgroupID,ExtComGroup_object)-EXTTEL_ID); //停止振铃
WriteExtTelState((ReadExtComGroup(extcomgroupID,ExtComGroup_object)-EXTTEL_ID),exttel_hold);//改变被叫方分机状态
}
else
{//外部通话类型
}
ClearAComGroup(extcomgroupID); //释放通话组资源
RawMessageNum--; //释放消息资源
ClearAMessage(i);
return;
}
RawMessageNum--; //清楚已处理的消息
ClearAMessage(i);
return;
}//本外线消息
}//消息查询
}//是否有消息
}//函数
void exttel_ring_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_UNHOLD_MESSAGETYPE)
{//摘机消息
extcomgroupID=findextcomgroupbyobject(telnum);//取得通话组编号
if((extcomgroupID!=0xff)&(ReadExtComGroup(extcomgroupID,ExtComGroup_type)==INSIDECOMTYPE))
{//该挂机分机为内部通话主叫方
ExtTelStopRing(telnum); //停止振铃
Writesoundway(telnum,extcomgroupID,ON); //建立通话
WriteExtTelState(telnum,exttel_useing); //改变分机状态
SetExtTelQuietSound(ReadExtComGroup(extcomgroupID,ExtComGroup_origin)-EXTTEL_ID);//停止主叫方的等待提示音
Writesoundway((ReadExtComGroup(extcomgroupID,ExtComGroup_origin)-EXTTEL_ID),extcomgroupID,ON);//建立通话
WriteExtTelState((ReadExtComGroup(extcomgroupID,ExtComGroup_origin)-EXTTEL_ID),exttel_useing);//改变主叫方分机状态
RawMessageNum--; //清楚已处理的消息
ClearAMessage(i);
return;
}
extcomgroupID=findextcomgroupbyorigin(telnum);
if((extcomgroupID!=0xff)&( ReadExtComGroup(extcomgroupID,ExtComGroup_type)==OUTSIDECOMTYPE))
{//该挂机分机为外部通话
ExtTelStopRing(telnum); //停止振铃
Writesoundway(telnum,extcomgroupID,ON); //建立通话
WriteExtTelState(telnum,exttel_useing); //改变分机状态
CutTowPoint_CD22100(extcomgroupID+1,MUSIC_22100); //断开音乐 主要用于转接过程
ReleaseOutsideTelRingCheckRes(extcomgroupID);//释放外线振铃检测资源
TakeOutsideLine(extcomgroupID);//摘机
WriteOutTelState(extcomgroupID,outtel_using);//改变主叫方(外线)分机状态
RawMessageNum--; //清楚已处理的消息
ClearAMessage(i);
return;
}
//出错情况
RawMessageNum--; //清楚已处理的消息
ClearAMessage(i);
return;
}
RawMessageNum--; //清楚已处理的消息
ClearAMessage(i);
return;
}//分机线消息
}//消息查询
}//是否有消息
}//函数
void exttel_useing_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)
{//该挂机分机为内部通话主叫方 、外部通话被叫方
Writesoundway(telnum,extcomgroupID,OFF);//切断通话
WriteExtTelState(telnum,exttel_flash);//改变分机状态
WriteExtTelTime(telnum,EXTTELTIME_1S);//设置时间
RawMessageNum--; //清楚已处理的消息
ClearAMessage(i);
return;
}
extcomgroupID=findextcomgroupbyobject(telnum);
if(extcomgroupID!=0xff)
{//该挂机分机为内部通话被叫方
Writesoundway(telnum,extcomgroupID,OFF);//切断通话
WriteExtTelState(telnum,exttel_flash);//改变分机状态
WriteExtTelTime(telnum,EXTTELTIME_1S);//设置时间
RawMessageNum--; //清楚已处理的消息
ClearAMessage(i);
return;
}
//出错情况
RawMessageNum--; //清楚已处理的消息
ClearAMessage(i);
return;
}
RawMessageNum--; //本机异常消息
ClearAMessage(i);
return;
}//分机线消息
}//消息查询
}//是否有消息
}//函数
void exttel_flash_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_UNHOLD_MESSAGETYPE)
{ //摘机消息
extcomgroupID=findextcomgroupbyorigin(telnum);
if(extcomgroupID!=0xff)
{//该挂机分机为内部通话主叫方
Writesoundway(telnum,HINTSOUND,ON);//给出450HZ可拨号提示音
StarDecordDTMF(MACHINE_ID[telnum]);//开始检测DTMF
WriteExtTelState(telnum,exttel_switch);//改变分机状态
WriteExtTelTime(telnum,0);//停止时间
ConnectTowPoint_CD22100(extcomgroupID+1,MUSIC_22100); //连接音乐
RawMessageNum--; //清楚已处理的消息
ClearAMessage(i);
return;
}
extcomgroupID=findextcomgroupbyobject(telnum);
if(extcomgroupID!=0xff)
{//该挂机分机为内部通话主叫方
Writesoundway(telnum,HINTSOUND,ON);//给出450HZ可拨号提示音
StarDecordDTMF(MACHINE_ID[telnum]);//开始检测DTMF
WriteExtTelState(telnum,exttel_switch);//改变分机状态
WriteExtTelTime(telnum,0);//停止时间
ConnectTowPoint_CD22100(extcomgroupID+1,MUSIC_22100); //连接音乐
RawMessageNum--; //清楚已处理的消息
ClearAMessage(i);
return;
}
//出错情况
RawMessageNum--; //清楚已处理的消息
ClearAMessage(i);
return;
}
RawMessageNum--; //清楚已处理的消息
ClearAMessage(i);
return;
}//分机线消息
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -