📄 c_trkout.c
字号:
}
else
{
if(chat_mfc_resource[user_e1[user_num].mfc].buf[1] == MFC_PAUSE)//判断是否收到停发信号
{
if((user_monitor_num == user_num) || (user_test_num == user_num))//判断此端口是否为呼出测试端口或监视端口
{
//往后台回应监视信息
command(1,0,user_num,BACKWARD_MFC_SIGNAL,MFC_PAUSE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
}
switch(chat_mfc_resource[user_e1[user_num].mfc].buf[0])//判断收到的KA信号
{
case 1://KA1,发下一位
{
user_e1[user_num].mfc_state = SEND_NEXT;//发送下一位号码
user_e1[user_num].delay = 20;//设置1秒的等待时间
user_e1[user_num].control = 90;//设置4.5秒控制时间
user_e1[user_num].mfc_count = 0;//清空MFC读次数
}
break;
case 2://KA2,由第一位号码发起
{
user_e1[user_num].user_index = 0;//发送号码指针清0
user_e1[user_num].mfc_state = SEND_NEXT;//发送下一位号码
user_e1[user_num].delay = 20;//设置1秒的等待时间
user_e1[user_num].control = 15;//设置750毫秒控制时间
user_e1[user_num].mfc_count = 0;//清空MFC读次数
}
break;
case 3://KA3,转到KB信令
{
send_mfc_out(user_e1[user_num].mfc,user_e1[user_num].kd);//发送KD信令
if((user_monitor_num == user_num) || (user_test_num == user_num))//判断此端口是否为呼出测试端口或监视端口
{
//往后台回应监视信息
command(1,0,user_num,FORWARD_MFC_SIGNAL,user_e1[user_num].kd + 0x10,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
}
user_e1[user_num].sub_status = 0;//设置为主控命令
user_e1[user_num].delay = 20;//设置1秒的等待时间
user_e1[user_num].control = 16;//设置800毫秒控制时间
user_e1[user_num].mfc_state = WAIT_KB;//发送kd信令
for(trk_j = 0;trk_j < 2;trk_j++)//清空接收数据
{
chat_mfc_resource[user_e1[user_num].mfc].buf[trk_j] = IDLE;
}
chat_mfc_resource[user_e1[user_num].mfc].buf_p = 0;//清空接收指针
}
break;
case 4://KA4,机键拥塞
case 5://KA5,空号
{
user_e1[user_num].mfc_state = MFC_FAILURE;//转到MFC失败处理
}
break;
case 6://KA6,发KA和主叫号码
{
if(user_e1[user_num].a6_flag == 0)//判断是否已发虚拟主叫号
{
user_e1[user_num].a6_flag = 1;//置发送标志
for(trk_j = 0;trk_j < 8;trk_j++)//初始化临时数组
{
temp[trk_j] = IDLE;
}
trk_j = 0;
trk_k = user_e1[user_num].user_index;
while(user_e1[user_num].telephone[trk_k] != IDLE)//将未发完的号码放到临时数组
{
temp[trk_j] = user_e1[user_num].telephone[trk_k];
trk_k++;
trk_j++;
}
trk_j = 0;
trk_k = user_e1[user_num].user_index;
while(id_call[trk_j] != IDLE)//将虚拟主叫号插入到发送队列中
{
user_e1[user_num].telephone[trk_k] = id_call[trk_j];
trk_k++;
trk_j++;
}
user_e1[user_num].telephone[trk_k] = 0x0f;
trk_k++;
trk_j = 0;
while(temp[trk_j] != IDLE)//将未发完的号码放到虚拟主叫号后面
{
user_e1[user_num].telephone[trk_k] = temp[trk_j];
trk_k++;
trk_j++;
}
}
user_e1[user_num].mfc_state = SEND_NEXT;//转为发下一位号码
user_e1[user_num].delay = 1;//设置1秒的等待时间
user_e1[user_num].control = 15;//设置750毫秒控制时间
user_e1[user_num].mfc_count = 0;//清空MFC读次数
}
break;
default:
break;
}
}
}
}
break;
case WAIT_KB://等待交换机发KB信号
{
if((chat_mfc_resource[user_e1[user_num].mfc].buf[0] > 0) && (chat_mfc_resource[user_e1[user_num].mfc].buf[0] < 7))
{
if((user_monitor_num == user_num) || (user_test_num == user_num))//判断此端口是否为呼出测试端口或监视端口
{
//往后台回应监视信息
command(1,0,user_num,BACKWARD_MFC_SIGNAL,chat_mfc_resource[user_e1[user_num].mfc].buf[0] + 0x10,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
}
no_sound(user_num);//无音处理
user_e1[user_num].mfc_state = MANAGE_KB;//转到KB信令的处理
user_e1[user_num].delay = 150;//设置7.5秒的等待时间
}
else
{
user_e1[user_num].delay--;//等待时间减1
if(user_e1[user_num].delay == 0)
{
user_e1[user_num].delay = 20;//设置1秒的等待时间
user_e1[user_num].control--;//控制时间减1
if(user_e1[user_num].control == 0)
{
user_e1[user_num].mfc_state = MFC_FAILURE;//转到MFC失败处理
}
}
else
{
if((user_e1[user_num].mfc_count < 40) && (chat_mfc_resource[user_e1[user_num].mfc].buf[0] > 0) && (chat_mfc_resource[user_e1[user_num].mfc].buf[0] < 16))
{
user_e1[user_num].mfc_count++;//MFC读次数加1
user_e1[user_num].mfc_state = ABNORMAL_KB;//转到异常KB信令的处理
user_e1[user_num].delay = 2;//设置100毫秒的等待时间
}
}
}
}
break;
case MANAGE_KB://处理KB信号
{
user_e1[user_num].delay--;//等待时间减1
if(user_e1[user_num].delay == 0)
{
user_e1[user_num].mfc_state = MFC_FAILURE;//转到MFC失败处理
}
else
{
if(chat_mfc_resource[user_e1[user_num].mfc].buf[1] == MFC_PAUSE)//判断是否为停发信号
{
if((user_monitor_num == user_num) || (user_test_num == user_num))//判断此端口是否为呼出测试端口或监视端口
{
//往后台回应监视信息
command(1,0,user_num,BACKWARD_MFC_SIGNAL,0,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
}
switch(chat_mfc_resource[user_e1[user_num].mfc].buf[0])//处理KB
{
case 1://KB1:被叫用户空闲(市话时互不控制复原)
{
no_sound(user_num);//无音处理
user_e1[user_num].delay = 10;//设置500毫秒的等待时间
user_e1[user_num].control = 60;//设置4.5秒的控制时间
user_e1[user_num].lc_state = WAIT_TALK;//转到线路信令的处理
user_e1[user_num].mfc_state = IDLE;//将MFC状态置为结束
mfc_release(user_e1[user_num].mfc);//释放MFC
}
break;
case 6:// KB6:备用(市话时被叫用户空闲,主叫控制复原)
{
no_sound(user_num);//无音处理
user_e1[user_num].delay = 10;//设置500毫秒的等待时间
user_e1[user_num].control = 60;//设置4.5秒的控制时间
user_e1[user_num].lc_state = WAIT_TALK;//转到线路信令的处理
user_e1[user_num].mfc_state = IDLE;//将MFC状态置为结束
mfc_release(user_e1[user_num].mfc);//释放MFC
}
break;
default:
{
user_e1[user_num].mfc_state = MFC_FAILURE;//转到MFC失败处理
}
break;
}
}
}
}
break;
case SEND_KD://发送KD信令
{
if((chat_mfc_resource[user_e1[user_num].mfc].buf[1] == MFC_PAUSE) || (chat_mfc_resource[user_e1[user_num].mfc].buf[1] == MFC_PAUSE))//判断是否为停发信令
{
if((user_monitor_num == user_num) || (user_test_num == user_num))//判断此端口是否为呼出测试端口或监视端口
{
//往后台回应监视信息
command(1,0,user_num,BACKWARD_MFC_SIGNAL,MFC_PAUSE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
}
send_mfc_out(user_e1[user_num].mfc,user_e1[user_num].kd);//发送KD信令
if((user_monitor_num == user_num) || (user_test_num == user_num))//判断此端口是否为呼出测试端口或监视端口
{
//往后台回应监视信息
command(1,0,user_num,FORWARD_MFC_SIGNAL,user_e1[user_num].kd + 0x10,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
}
user_e1[user_num].mfc_count = 0;//清空MFC读次数
user_e1[user_num].sub_status = 0;//设置为主控状态
user_e1[user_num].mfc_state = WAIT_KB;//转为等待KB信令
user_e1[user_num].delay = 20;//设置1秒的等待时间
user_e1[user_num].control = 16;//设置800毫秒的控制时间
for(trk_j = 0;trk_j < 2;trk_j++)//清空接收数据
{
chat_mfc_resource[user_e1[user_num].mfc].buf[trk_j] = IDLE;
}
chat_mfc_resource[user_e1[user_num].mfc].buf_p = 0;//清空接收指针
}
}
break;
case MFC_FAILURE://MFC失败处理
{
no_sound(user_num);//无音处理
sig_req(SS_OHANG,user_num);//发主叫挂机
if((user_monitor_num == user_num) || (user_test_num == user_num))//判断此端口是否为呼出测试端口或监视端口
{
//往后台回应监视信息
command(1,0,user_num,FORWARD_LINE_SIGNAL,2,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
}
user_e1[user_num].delay = 3;//设置150毫秒的等待时间
user_e1[user_num].control = 50;//设置2.5秒的控制时间
user_e1[user_num].lc_state = WAIT_RELEASE;//转到线路信令的处理
user_e1[user_num].mfc_state = IDLE;//将MFC状态置为结束
mfc_release(user_e1[user_num].mfc);//释放MFC资源
}
break;
case ABNORMAL_KA://异常的KA信令
{
user_e1[user_num].delay = (user_e1[user_num].delay - 1) & 0x03;//等待时间减1
if(user_e1[user_num].delay == 0)
{
user_e1[user_num].mfc_state = WAIT_KA;//转到等待KA信令
user_e1[user_num].sub_status = 0;//设置为主控状态
user_e1[user_num].delay = 20;//设置1秒的等待时间
user_e1[user_num].control = 16;//设置800毫秒的控制时间
for(trk_j = 0;trk_j < 2;trk_j++)//清空接收数据
{
chat_mfc_resource[user_e1[user_num].mfc].buf[trk_j] = IDLE;
}
chat_mfc_resource[user_e1[user_num].mfc].buf_p = 0;//清空接收指针
}
}
break;
case ABNORMAL_KB://异常的KB信令
{
user_e1[user_num].delay--;//等待时间减1
if(user_e1[user_num].delay == 0)
{
for(trk_j = 0;trk_j < 2;trk_j++)//清空接收数据
{
chat_mfc_resource[user_e1[user_num].mfc].buf[trk_j] = IDLE;
}
chat_mfc_resource[user_e1[user_num].mfc].buf_p = 0;//清空接收指针
user_e1[user_num].mfc_state = WAIT_KB;//转为等待KB信令
user_e1[user_num].delay = 1;//设置50毫秒的等待时间
user_e1[user_num].control = 16;//设置800毫秒的控制时间
}
}
break;
case ABNORMAL_MFC://MFC异常结束
{
user_e1[user_num].delay--;//等待时间减1
if(user_e1[user_num].delay == 0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -