⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c_trkin.c

📁 这是电信语音聊天设备的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
					}
					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 + -