📄 extsystem.c
字号:
MICRO_SendToBuf(EXT_EVENT_QUEUE[WP_EVENT], SExt_No,
WP_EVENT, TAL_EVENT, BufSize); //组呼用户有摘机,其他撤消振铃
}
else if(Ext_Param[SExt_No].Ext_State == state7_TalkFrom)
{
Ext_Param[SExt_No].Ext_EVENT = event7_SExtHookOff;
MICRO_SendToBuf(EXT_EVENT_QUEUE[WP_EVENT], SExt_No,
WP_EVENT, TAL_EVENT, BufSize); //组呼用户有摘机,其他成员听忙音
}
}
}
}
}
}
break;
default:
break;
}
break; //非法状态,报告错误,恢复原态
case state8_MeetTalk:
switch(Event_matter)
{
case event2_ExtHookOff://用户挂机
group = Ext_Param[Ext_No].Num_MeetGroup; //取被叫用户会议组
SExt_No = Temp_MeetGroup[group].Manager_Ext; //取主叫用户
Channel = Ext_Param[Ext_No].Num_Switch_Cable&0x0f;//取用户绳路
Micro_Switch_8816(Ext_No, Channel, 0); //断开接续
Ext_Timer_Reset(Ext_No);
/*if( Ext_Param[Ext_No].Bit_Param >= 0x80 )//如果会议成员是中继,就直接取消会议关闭中继
{
CLOSE_Trk(Ext_No);
Release_Trk(Ext_No);
}
else
{
Scan_NextManager(group, Ext_No);
}*/
Scan_NextManager(group, Ext_No);
Ext_Param_Reset(Ext_No);
break;
case event7_SExtHookOff: //会员挂机,进入判断听忙音态
group = Ext_Param[Ext_No].Num_MeetGroup;
if( Temp_MeetGroup[group].Num_Member <= 1 )
{
Channel = Ext_Param[Ext_No].Num_Switch_Cable&0x0f;//取用户绳路
if( Ext_Param[Host_Ext].Ext_State )
{
for(temp=1;temp<MAX_Ext;temp++)
{
if((HostExt_Called_List[temp] >0)||(HostExt_Calling_List[temp] >0))
{
break;
}
}
if(temp==MAX_Ext)
Release_Cable(Channel);
}
else
{
Release_Cable(Channel);
}
Release_MeetGroup(group);
Ext_Timer_Reset(Ext_No);
Ext_Param_Reset(Ext_No);
OPEN_EXT_Signal(Ext_No, 2); //听忙音
Ext_Param[Ext_No].Ext_State = state22_OppHookOff; //改变用户状态
}
else
{
temp = 0;//num_member是所有会议成员,但是包含主席
for(member=0;member<Temp_MeetGroup[group].Num_Member;member++)
{
SExt_No = Temp_MeetGroup[group].Meet_Member[member];
if(Ext_Param[SExt_No].Ext_State==state6_Ring)
{
temp++;
}
}
temp++;
if(temp>=Temp_MeetGroup[group].Num_Member)
{
Channel = Ext_Param[Ext_No].Num_Switch_Cable&0x0f;//取用户绳路
Ext_Param[Ext_No].Ext_State = state4_DailOk;
Micro_Switch_8816(Ext_No, Channel, 0); //断开接续
OPEN_EXT_Signal(Ext_No, 5); //听回铃音
}
}
break;
case event14_HostCallingExt: //总机会议中,再次被呼叫进入
for(temp=1;temp<MAX_Ext;temp++)
{
if(HostExt_Calling_List[temp]==0x0f)
{
Ext_Timer_Reset(Ext_No);
Ext_Param_Reset(Ext_No);
HostCreat_MeetGroup(Host_Ext,temp);
HostExt_Calling_List[temp] = 0xf0;
break;
}
else if(HostExt_Calling_List[temp]==0xf0)
{
break;
}
else if(HostExt_Calling_List[temp]==0xff)
{
break;
}
else
{
continue;
}
}
break;
case event15_HostCalledExt: //总机会议中,再次被呼叫进入
for(temp=1;temp<MAX_Ext;temp++)
{
if(HostExt_Called_List[temp]==0x0f)
{
HostCreat_MeetGroup(temp, Host_Ext);
HostExt_Called_List[temp] = 0xf0;
break;
}
}
break;
case event18_MangerRelease:
Channel = Ext_Param[Ext_No].Num_Switch_Cable&0x0f;//取用户绳路
Micro_Switch_8816(Ext_No, Channel, 0); //断开接续
STOP_EXT_Signal(Ext_No); //关音
Ext_Timer_Reset(Ext_No); //用户计时器参数复位
Ext_Param_Reset(Ext_No); //用户参数复位
if( Ext_Param[Ext_No].Bit_Param >= 0x80 )//如果中继是主叫,需要直接释放
{
CLOSE_Trk(Ext_No);
Release_Trk(Ext_No);
}
else
{
OPEN_EXT_Signal(Ext_No, 2); //听忙音
Ext_Param[Ext_No].Ext_State = state22_OppHookOff; //改变用户状态
}
break;
default:
break;
}
break; //非法状态,报告错误,恢复原态
case state9_CommandExt: //总机呼叫用户,使用调度状态
break;
case state10_TroopRing:
switch(Event_matter)
{
case event2_ExtHookOff:
if( Ext_Param[Ext_No].Temp_Troop_Call > 7 )//(1111 xxxx)是群呼标志,所以标志大于7就是正在使用
{
temp = Ext_Param[Ext_No].Temp_Troop_Call&0x0f;
if( Troop_Param[temp].Troopstate )
{
Troop_Param[temp].Troopstate--;
}
if(FlagSystemType)
{
for(member = 0;member<MAX_Ext;member++)
{
SExt_No = Troop_Param[temp].Troop_Member[member];
if(SExt_No<TAL_EXT_PORT)
{
if(SExt_No == Ext_No)
continue;
if(Ext_Param[SExt_No].Temp_Troop_Call ==
Ext_Param[Ext_No].Temp_Troop_Call )
{
if(Ext_Param[SExt_No].Ext_State == state6_Ring)
{
Ext_Param[SExt_No].Ext_EVENT = event5_ExtReleaseRing;
MICRO_SendToBuf(EXT_EVENT_QUEUE[WP_EVENT], SExt_No,
WP_EVENT, TAL_EVENT, BufSize); //组呼用户有摘机,其他撤消振铃
}
else if(Ext_Param[SExt_No].Ext_State == state7_TalkFrom)
{
Ext_Param[SExt_No].Ext_EVENT = event7_SExtHookOff;
MICRO_SendToBuf(EXT_EVENT_QUEUE[WP_EVENT], SExt_No,
WP_EVENT, TAL_EVENT, BufSize); //组呼用户有摘机,其他成员听忙音
}
}
}
}
}
}
else
{
SExt_No = Ext_Param[Ext_No].Num_Call_Other;
Ext_Param[SExt_No].Ext_EVENT = event7_SExtHookOff;
MICRO_SendToBuf(EXT_EVENT_QUEUE[WP_EVENT], SExt_No,
WP_EVENT, TAL_EVENT, BufSize); //用户对方挂机
}
Channel = Ext_Param[Ext_No].Num_Switch_Cable&0x0f;//取绳路
Micro_Switch_8816(Ext_No, Channel, 0); //断开接续
Release_Cable(Channel);
STOP_EXT_Signal(Ext_No); //关音
Ext_Timer_Reset(Ext_No); //用户计时器参数复位
Ext_Param_Reset(Ext_No); //用户参数复位
break;
case event7_SExtHookOff: //对方挂机,进入忙音态
if( Ext_Param[Ext_No].Temp_Troop_Call > 7 )//(1111 xxxx)是群呼标志,所以标志大于7就是正在使用
{
temp = Ext_Param[Ext_No].Temp_Troop_Call&0x0f;
if( Troop_Param[temp].Troopstate )
{
Troop_Param[temp].Troopstate--;
}
if(FlagSystemType)
{
for(member = 0;member<MAX_Ext;member++)
{
SExt_No = Troop_Param[temp].Troop_Member[member];
if(SExt_No<TAL_EXT_PORT)
{
if(SExt_No == Ext_No)
{
Ext_Param[SExt_No].Ext_EVENT = event7_SExtHookOff;
Ext_Param[SExt_No].Ext_State= event5_ExtReleaseRing;
MICRO_SendToBuf(EXT_EVENT_QUEUE[WP_EVENT], SExt_No,
WP_EVENT, TAL_EVENT, BufSize); //组呼用户有摘机,其他成员听忙音
continue;
}
if(Ext_Param[SExt_No].Temp_Troop_Call ==
Ext_Param[Ext_No].Temp_Troop_Call )
{
if(Ext_Param[SExt_No].Ext_State == state6_Ring)
{
Ext_Param[SExt_No].Ext_EVENT = event5_ExtReleaseRing;
MICRO_SendToBuf(EXT_EVENT_QUEUE[WP_EVENT], SExt_No,
WP_EVENT, TAL_EVENT, BufSize); //组呼用户有摘机,其他撤消振铃
}
else if(Ext_Param[SExt_No].Ext_State == state7_TalkFrom)
{
Ext_Param[SExt_No].Ext_EVENT = event7_SExtHookOff;
MICRO_SendToBuf(EXT_EVENT_QUEUE[WP_EVENT], SExt_No,
WP_EVENT, TAL_EVENT, BufSize); //组呼用户有摘机,其他成员听忙音
}
}
}
}
}
}
Channel = Ext_Param[Ext_No].Num_Switch_Cable&0x0f;//取绳路
Micro_Switch_8816(Ext_No, Channel, 0); //断开接续
STOP_EXT_Signal(Ext_No); //关音
Ext_Timer_Reset(Ext_No); //用户计时器参数复位
Ext_Param_Reset(Ext_No); //用户参数复位
if( Ext_Param[Ext_No].Bit_Param >= 0x80 )//如果中继是主叫,需要直接释放
{
CLOSE_Trk(Ext_No);
Release_Trk(Ext_No);
}
else
{
OPEN_EXT_Signal(Ext_No, 2); //听忙音
Ext_Param[Ext_No].Ext_State = state22_OppHookOff; //改变用户状态
}
break;
default:
break;
}
break;
case state12_: //总机调度状态
break;
case state20_DailOver:
switch(Event_matter) //用户挂机,恢复原态
{
case event2_ExtHookOff:
if( Ext_Param[Ext_No].Temp_Troop_Call > 7 )//(1111 xxxx)是群呼标志,所以标志大于7就是正在使用
{
temp = Ext_Param[Ext_No].Temp_Troop_Call&0x0f;
if( Troop_Param[temp].Troopstate )
{
Troop_Param[temp].Troopstate--;
}
}
STOP_EXT_Signal(Ext_No); //关拨号音
Ext_Timer_Reset(Ext_No); //用户计时器参数复位
Ext_Param_Reset(Ext_No); //用户参数复位
if( Ext_No == Host_Ext )
{
for(temp=1;temp<MAX_Ext;temp++)
{
if(HostExt_Called_List[temp] == 0xf0 )
{
Ext_Param[Ext_No].Num_Call_Other = temp;//写入对方标志号码
Ext_Param[Ext_No].Num_MeetGroup = Ext_Param[temp].Num_MeetGroup; //写入会议组号
Ext_Param[Ext_No].Num_Call_Me= 0XFE; //写入会议组号
Ext_Param[Ext_No].Num_Switch_Cable = Ext_Param[temp].Num_Switch_Cable; //写用户绳路
Use_Cable(Ext_Param[Ext_No].Num_Switch_Cable&0x0f);
Ext_Param[Ext_No].Ext_EVENT= event4_ExtRing; //用户进入会议振铃状态
MICRO_SendToBuf(EXT_EVENT_QUEUE[WP_EVENT], Ext_No,
WP_EVENT, TAL_EVENT, BufSize);
break;
}
}
}
break;
case event15_HostCalledExt: //调度事件进入,用户直接进入会议中
for(temp=1;temp<MAX_Ext;temp++)
{
if(HostExt_Called_List[temp]==0x0f)
{
HostCreat_MeetGroup(temp, Host_Ext);
HostExt_Called_List[temp] = 0xf0;
break;
}
}
break;
default:
break;
}
break; //非法状态,报告错误,恢复原态
case state30_:
switch(Event_matter) //用户挂机,恢复原态
{
case event2_ExtHookOff:
STOP_EXT_Signal(Ext_No); //关拨号音
Ext_Timer_Reset(Ext_No); //用户计时器参数复位
Ext_Param_Reset(Ext_No); //用户参数复位
if( ring )
{
Ext_Param[Ext_No].Ext_EVENT = event4_ExtRing;
MICRO_SendToBuf(EXT_EVENT_QUEUE[WP_EVENT], Ext_No,
WP_EVENT, TAL_EVENT, BufSize);
break;
//用户测试振铃
}
if( Ext_No == Host_Ext )
{
for(temp=1;temp<MAX_Ext;temp++)
{
if(HostExt_Called_List[temp] == 0xf0 )
{
Ext_Param[Ext_No].Num_Call_Other = temp;//写入对方标志号码
Ext_Param[Ext_No].Num_MeetGroup = Ext_Param[temp].Num_MeetGroup; //写入会议组号
Ext_Param[Ext_No].Num_Call_Me= 0XFE; //写入会议组号
Ext_Param[Ext_No].Num_Switch_Cable = Ext_Param[temp].Num_Switch_Cable; //写用户绳路
Use_Cable(Ext_Param[Ext_No].Num_Switch_Cable&0x0f);
Ext_Param[Ext_No].Ext_EVENT= event4_ExtRing; //用户进入会议振铃状态
MICRO_SendToBuf(EXT_EVENT_QUEUE[WP_EVENT], Ext_No,
WP_EVENT, TAL_EVENT, BufSize);
break;
}
}
}
break;
case event15_HostCalledExt: //调度事件进入,用户直接进入会议中
for(temp=1;temp<MAX_Ext;temp++)
{
if(HostExt_Called_List[temp]==0x0f)
{
HostCreat_MeetGroup(temp, Host_Ext);
HostExt_Called_List[temp] = 0xf0;
break;
}
}
break;
default:
break;
}
break; //非法状态,报告错误,恢复原态
default:
STOP_EXT_Signal(Ext_No); //关拨号音
Ext_Timer_Reset(Ext_No); //用户计时器参数复位
Ext_Param_Reset(Ext_No); //用户参数复位
OPEN_EXT_Signal(Ext_No, 2); //听忙音
break;
}
}
/*********************************
name:Ext_Timer_Judge(unchar Ext_No)
input: Ext_No
output: SExt_No
description:
通过对用户的收号表计算出被叫的逻辑号码
如果被叫号码是0xff,表示号码不存在
***********************************/
unchar Scan_EXT_LogicList(unchar Ext_No)
{
unchar SExt_No;
unint EXT_Nomber_Logic;
EXT_Nomber_Logic = 0;
if( EXT_Len == 3 )
{
EXT_Nomber_Logic+= Ext_Param[Ext_No].Ext_RecDtmf_List[2]*1;
EXT_Nomber_Logic +=Ext_Param[Ext_No].Ext_RecDtmf_List[1]*10;
}
else
{
EXT_Nomber_Logic += Ext_Param[Ext_No].Ext_RecDtmf_List[3]*1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -