📄 c_trkin.c
字号:
}
break;
case 11://上上一次发的是A1
{
user_e1[user_num].mfc_state = WAIT_ID_SIGNAL;//转为接收ID信令
}
break;
default:
break;
}
}
else
{
if(user_e1[user_num].delay == 0)//500毫秒没有收到停发
{
user_e1[user_num].mfc_state = FAILURE_MFC;//转为MFC失败处理
}
}
}
break;
case WAIT_KD_SIGNAL://等待KD信令
{
user_e1[user_num].delay--;//等待时间减1
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)//往后台回应监视信息
{
command(1,0,user_num,FORWARD_MFC_SIGNAL,chat_mfc_resource[user_e1[user_num].mfc].buf[0] + 0x10,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
}
send_mfc_in(user_e1[user_num].mfc,1);//发送KB信令
if(user_monitor_num == user_num)//往后台回应监视信息
{
command(1,0,user_num,BACKWARD_MFC_SIGNAL,0x11,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
}
user_e1[user_num].mfc_state = KB_END;//转为KB结束
user_e1[user_num].delay = CTRL_TIME;//设置500毫秒的等待时间
}
else
{
if(user_e1[user_num].delay == 0)//500毫秒没有收到停发
{
user_e1[user_num].mfc_state = FAILURE_MFC;//转为MFC失败处理
}
}
}
break;
case WAIT_KA_SIGNAL://等待KA信令
{
user_e1[user_num].delay--;//等待时间减1
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)//往后台回应监视信息
{
command(1,0,user_num,FORWARD_MFC_SIGNAL,chat_mfc_resource[user_e1[user_num].mfc].buf[0] + 0x20,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
}
send_mfc_in(user_e1[user_num].mfc,1);//发送A1信令
if(user_monitor_num == user_num)//往后台回应监视信息
{
command(1,0,user_num,BACKWARD_MFC_SIGNAL,0x1,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
}
user_e1[user_num].sub_status = 11;//设置为接收主叫号码
user_e1[user_num].mfc_state = WAIT_PAUSE;//转为等待停发
user_e1[user_num].delay = CTRL_TIME;//设置500毫秒的等待时间
}
else
{
if(user_e1[user_num].delay == 0)//500毫秒没有收到停发
{
user_e1[user_num].mfc_state = FAILURE_MFC;//转为MFC失败处理
}
}
}
break;
case WAIT_ID_SIGNAL://等待ID信令
{
user_e1[user_num].delay--;//等待时间减1
if((chat_mfc_resource[user_e1[user_num].mfc].buf[0] > 0) && (chat_mfc_resource[user_e1[user_num].mfc].buf[0] < 11))
{
if(user_monitor_num == user_num)//往后台回应监视信息
{
command(1,0,user_num,FORWARD_MFC_SIGNAL,chat_mfc_resource[user_e1[user_num].mfc].buf[0],IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
}
if(chat_mfc_resource[user_e1[user_num].mfc].buf[0] == 0x0a)
{
user_e1[user_num].telephone[user_e1[user_num].user_index] = 0;//收集交换机发的号码
}
else
{
//收集交换机发的号码
user_e1[user_num].telephone[user_e1[user_num].user_index] = chat_mfc_resource[user_e1[user_num].mfc].buf[0];
}
user_e1[user_num].user_index++;//号码指针加1
send_mfc_in(user_e1[user_num].mfc,1);//发送A1信令
if(user_monitor_num == user_num)//往后台回应监视信息
{
command(1,0,user_num,BACKWARD_MFC_SIGNAL,0x1,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
}
user_e1[user_num].sub_status = 11;//设置为接收主叫号码
user_e1[user_num].mfc_state = WAIT_PAUSE;//转为等待停发
user_e1[user_num].delay = CTRL_TIME;//设置500毫秒的等待时间
}
else
{
if(chat_mfc_resource[user_e1[user_num].mfc].buf[0] == 0x0f)//判断主叫号码是否发送结束
{
if(user_monitor_num == user_num)//往后台回应监视信息
{
command(1,0,user_num,FORWARD_MFC_SIGNAL,chat_mfc_resource[user_e1[user_num].mfc].buf[0],IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
}
send_mfc_in(user_e1[user_num].mfc,1);//发送A1信令
if(user_monitor_num == user_num)//往后台回应监视信息
{
command(1,0,user_num,BACKWARD_MFC_SIGNAL,0x1,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
}
user_e1[user_num].sub_status = 0x1;//设置为发A1
user_e1[user_num].mfc_state = WAIT_PAUSE;//转为等待停发
user_e1[user_num].delay = CTRL_TIME;//设置500毫秒的等待时间
user_e1[user_num].user_index = LAN_num_length;//准备接收剩下的号码
}
else
{
if(user_e1[user_num].delay == 0)//500毫秒没有收到停发
{
user_e1[user_num].mfc_state = FAILURE_MFC;//转为MFC失败处理
}
}
}
}
break;
case KB_END://KB结束
{
user_e1[user_num].delay--;//等待时间减1
if(chat_mfc_resource[user_e1[user_num].mfc].buf[1] == MFC_PAUSE)
{
send_mfc_in(user_e1[user_num].mfc,MFC_PAUSE);//发送停发信令
if(user_monitor_num == user_num)//往后台回应监视信息
{
command(1,0,user_num,BACKWARD_MFC_SIGNAL,0,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
}
user_e1[user_num].mfc_state = SUCCEED_MFC;//转为MFC成功处理
}
else
{
if(user_e1[user_num].delay == 0)//500毫秒没有收到停发
{
user_e1[user_num].mfc_state = FAILURE_MFC;//转为MFC失败处理
}
}
}
break;
case FAILURE_MFC://MFC失败处理
{
user_e1[user_num].mfc_state = IDLE;//转为空闲
user_e1[user_num].sub_status = 8;//置失败标志
mfc_release(user_e1[user_num].mfc);//释放MFC
}
break;
case SUCCEED_MFC://MFC成功
{
user_e1[user_num].mfc_state = IDLE;//转为空闲
user_e1[user_num].sub_status = 9;//置成功标志
mfc_release(user_e1[user_num].mfc);//释放MFC
}
break;
default:
break;
}
}
void trk_in_ctrl()//数字中继呼入处理程序
{
unsigned char xdata trk_i,trk_j,trk_k,phone[6],temp;
for(trk_i = 0;trk_i < TRK_MAX;trk_i++)
{
if(user_e1[trk_i].type == CALL_IN)
{
switch(user_e1[trk_i].lc_state)
{
case HOLD_TEST://等待交换机发占用
{
if(user_e1[trk_i].backward_signal == SS_HOLD)//收到占用
{
if(user_monitor_num == trk_i)//往后台回应监视信息
{
command(1,0,trk_i,FORWARD_LINE_SIGNAL,1,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
}
user_e1[trk_i].lc_state = CONFIRM_SEND;//转为发占用证实
}
}
break;
case CONFIRM_SEND://发占用证实
{
if(mfc_req(trk_i,CALL_IN) != IDLE)//判断是否申请到MFC
{
if(dtmf_req(trk_i,IDLE) != IDLE)//DTMF资源
{
for(trk_j = 0;trk_j < 2;trk_j++)//清空接收数据
{
chat_mfc_resource[user_e1[trk_i].mfc].buf[trk_j] = IDLE;
}
chat_mfc_resource[user_e1[trk_i].mfc].buf_p = 0;//清空接收指针
sig_req(RSD_CONFIRM,trk_i);//发占用证实
if(user_monitor_num == trk_i)//往后台回应监视信息
{
command(1,0,trk_i,BACKWARD_LINE_SIGNAL,1,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
}
user_e1[trk_i].lc_state = WAIT_MFC;//转为等待MFC结束
user_e1[trk_i].sub_status = 1;
user_e1[trk_i].mfc_state = WAIT_DIGITAL_SIGNAL;//转为等待交换机发电话号码
user_e1[trk_i].delay = CTRL_TIME;//设置500毫秒的等待时间
}
else
{
mfc_release(user_e1[trk_i].mfc);
user_e1[trk_i].lc_state = LINE_FALSE;
}
}
else
{
user_e1[trk_i].lc_state = LINE_FALSE;
}
}
break;
case WAIT_MFC://等待MFC结束
{
if(user_e1[trk_i].backward_signal == SS_IDLE)//判断主叫是否挂机
{
mfc_release(user_e1[trk_i].mfc);
user_e1[trk_i].lc_state = LINE_FALSE;
}
else
{
if(user_e1[trk_i].sub_status == 8)//MFC失败
{
mfc_release(user_e1[trk_i].mfc);
user_e1[trk_i].lc_state = LINE_FALSE;
}
else
{
if(user_e1[trk_i].sub_status == 9)//MFC成功
{
user_e1[trk_i].lc_state = TALK_SEND;//转为发送被叫摘机
}
else
{
in_mfc_line(trk_i);
}
}
}
}
break;
case TALK_SEND://发送被叫应答
{
sig_req(RSD_TALK,trk_i);//发送被叫摘机
user_e1[trk_i].flag = OCCUPY;
for(trk_j = 0;trk_j < 6;trk_j++)
{
user_e1[trk_i].telephone[trk_j] = ((user_e1[trk_i].telephone[2 * trk_j] & 0x0f) << 4) + (user_e1[trk_i].telephone[2 * trk_j + 1] & 0x0f);
}
for(trk_j = 6;trk_j < 32;trk_j++)
{
user_e1[trk_i].telephone[trk_j] = IDLE;
}
command(4,0,user_e1[trk_i].telephone[0],user_e1[trk_i].telephone[1],user_e1[trk_i].telephone[2],user_e1[trk_i].telephone[3],user_e1[trk_i].telephone[4],user_e1[trk_i].telephone[5],IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
if(user_monitor_num == trk_i)//往后台回应监视信息
{
command(1,0,trk_i,BACKWARD_LINE_SIGNAL,2,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
}
user_e1[trk_i].lc_state = DTMF_START;//转为开始放提示音
}
break;
case DTMF_START://放提示音,开始处理用户选择
{
connect(audio_dtmf_resource[user_e1[trk_i].dtmf].slot,trk_i);//连接提示音
connect(trk_i,audio_dtmf_resource[user_e1[trk_i].dtmf].slot);//连接提示音
if((trk_i == user_test_num) || (trk_i == user_monitor_num))
{
connect(audio_dtmf_resource[user_e1[trk_i].dtmf].slot,CHAIRMAN_SLOT);//连接提示音
}
user_e1[trk_i].backward_signal = IDLE;//清空线路信令
user_e1[trk_i].lc_state = WAIT_DOWN;//转为扫描被叫挂机
for(trk_j = 0;trk_j < 6;trk_j++)
{
phone[trk_j] = user_e1[trk_i].telephone[trk_j];
}
trk_j = back_search(phone,1);
trk_k = number_release(phone,1);
if((trk_j != IDLE) || (trk_k != IDLE))
{
if(trk_j != IDLE)
{
if(user_e1[user_back[trk_j].user_num].chat_num != IDLE)
{
if((user_back[trk_j].chat_type == PRIVATE_FEELING) && (chat_private_resource[user_e1[user_back[trk_j].user_num].chat_num].user_count > 1))
{
back_failure(trk_i);
}
else
{
user_e1[trk_i].back_flag = 1;
user_e1[trk_i].user_sex = user_back[trk_j].user_sex;
user_e1[trk_i].user_age = user_back[trk_j].user_age;
user_e1[trk_i].opp_sex = user_back[trk_j].opp_sex;
user_e1[trk_i].opp_age = user_back[trk_j].opp_age;
user_e1[trk_i].chat_type = user_back[trk_j].chat_type;
for(temp = 0;temp < 6;temp++)
{
user_e1[trk_i].password[temp] = user_back[trk_j].password[temp];
}
first_chuli(trk_i,user_e1[trk_i].chat_type,1);
if((user_e1[user_back[trk_j].user_num].lc_state == WAIT_UP) || (user_e1[user_back[trk_j].user_num].lc_state == WAIT_DOWN))
{
user_e1[user_back[trk_j].user_num].user_state = INFORM_BACK;
}
}
}
else
{
back_failure(trk_i);
}
back_search(phone,0);
}
else
{
if(user_e1[chat_number[trk_k].user_num].chat_num != IDLE)
{
user_e1[trk_i].back_flag = 1;
user_e1[trk_i].chat_type = PRIVATE_FEELING;
user_e1[trk_i].opp_num = chat_number[trk_k].user_num;
user_e1[trk_i].user_sex = chat_number[trk_k].user_sex;
user_e1[trk_i].user_age = chat_number[trk_k].user_age;
user_e1[chat_number[trk_k].user_num].opp_num = trk_i;
if((user_e1[chat_number[trk_k].user_num].lc_state == WAIT_U
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -