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

📄 c_trkin.c

📁 这是电信语音聊天设备的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
					break;
					default:
					{
						error_chuli(user_num);//出错处理
					}
					break;
				}
				audio_dtmf_resource[user_e1[user_num].dtmf].buf = IDLE;
			}
		}
		break;
		case REGISTER_NO://用户选择私聊而没有注册
		{
			clr_duan(user_num);
			play_one(user_num,USER_SEX_DUAN);
			user_e1[user_num].user_state = USER_SEX;//提示输入性别
			user_e1[user_num].user_index = 0;
		}
		break;
		case SELECT_TYPE://选择共聊或私聊
		{
			if(user_select != IDLE)//用户按键了
			{
				if(user_monitor_num == user_num)//往后台回应监视信息
				{
					command(1,0,user_num,USER_PRESS_SIGNAL,user_select,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
				}
				switch(user_select)
				{
					case 1://情感交友私人聊天室
					{
						if(user_e1[user_num].first_select == IDLE)
						{
							user_e1[user_num].first_select = PRIVATE_FEELING;
						}
						user_e1[user_num].chat_type = PRIVATE_FEELING;
						command(5,0,user_num,1,user_e1[user_num].telephone[0],user_e1[user_num].telephone[1],user_e1[user_num].telephone[2],user_e1[user_num].telephone[3],user_e1[user_num].telephone[4],user_e1[user_num].telephone[5],IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
						audio_stop(user_e1[user_num].dtmf);//停止当前操作
						user_e1[user_num].user_state = IDLE;//提示输入性别
					}
					break;
					case 2://情感交友公共聊天室
					{
						if(user_e1[user_num].first_select == IDLE)
						{
							user_e1[user_num].first_select = COMMON_FEELING;
						}
						audio_stop(user_e1[user_num].dtmf);//停止当前操作
						audio_dtmf_resource[user_e1[user_num].dtmf].auto_flag = LEISURE;//清自动放音标志
						clr_duan(user_num);
						play_one(user_num,FEELING_COMMON);
						user_e1[user_num].chat_type = COMMON_FEELING;
						user_e1[user_num].user_state = JUDGE_USER;//转到聊天室人数判断
					}
					break;
					default:
					{
						error_chuli(user_num);//出错处理
					}
					break;
				}
				audio_dtmf_resource[user_e1[user_num].dtmf].buf = IDLE;
			}
		}
		break;
		case USER_SEX://等待用户输入性别
		{
			if(user_select != IDLE)
			{
				if(user_monitor_num == user_num)//往后台回应监视信息
				{
					command(1,0,user_num,USER_PRESS_SIGNAL,user_select,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
				}
				switch(user_select)
				{
					case 1://男
					case 2://女
					{
						audio_stop(user_e1[user_num].dtmf);//停止当前操作
						clr_duan(user_num);
						if(user_select == 1)
						{
							user_e1[user_num].user_sex = MAN;
						}
						else
						{
							user_e1[user_num].user_sex = WOMAN;
						}
						play_one(user_num,USER_AGE_DUAN);
						user_e1[user_num].user_state = USER_AGE;//提示输入年龄
						user_e1[user_num].user_index = 0;
					}
					break;
					default://错误的输入
					{
						error_chuli(user_num);
					}
					break;
				}
				audio_dtmf_resource[user_e1[user_num].dtmf].buf = IDLE;
			}
		}
		break;
		case USER_AGE://等待用户输入年龄
		{
			if(user_select != IDLE)
			{
				if(user_monitor_num == user_num)//往后台回应监视信息
				{
					command(1,0,user_num,USER_PRESS_SIGNAL,user_select,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
				}
				if(user_select < 10)
				{
					if(user_e1[user_num].user_index == 0)
					{
						audio_stop(user_e1[user_num].dtmf);//停止当前操作
						user_e1[user_num].user_age = user_select * 10;
						user_e1[user_num].user_index++;
					}
					else
					{
						user_e1[user_num].user_age = user_e1[user_num].user_age + (user_select & 0x0f);
						clr_duan(user_num);
						audio_dtmf_resource[user_e1[user_num].dtmf].auto_flag = LEISURE;//清自动放音标志
						command(5,2,user_num,0,user_e1[user_num].user_sex,user_e1[user_num].user_age,user_e1[user_num].telephone[0],user_e1[user_num].telephone[1],user_e1[user_num].telephone[2],user_e1[user_num].telephone[3],user_e1[user_num].telephone[4],user_e1[user_num].telephone[5],IDLE,IDLE,IDLE,IDLE);
						user_e1[user_num].user_state = IDLE;
					}
				}
				else//错误的输入
				{
					error_chuli(user_num);
				}
				audio_dtmf_resource[user_e1[user_num].dtmf].buf = IDLE;
			}
		}
		break;
		case OPP_SEX://等待用户输入对方性别
		{
			if(user_select != IDLE)
			{
				if(user_monitor_num == user_num)//往后台回应监视信息
				{
					command(1,0,user_num,USER_PRESS_SIGNAL,user_select,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
				}
				switch(user_select)
				{
					case 1://男
					case 2://女
					{
						audio_stop(user_e1[user_num].dtmf);//停止当前操作
						clr_duan(user_num);
						if(user_select == 1)
						{
							user_e1[user_num].opp_sex = MAN;
						}
						else
						{
							user_e1[user_num].opp_sex = WOMAN;
						}
						clr_duan(user_num);
						play_one(user_num,OPP_AGE_DUAN);
						user_e1[user_num].user_state = OPP_AGE;//提示输入年龄
					}
					break;
					default://错误的输入
					{
						error_chuli(user_num);
					}
					break;
				}
				audio_dtmf_resource[user_e1[user_num].dtmf].buf = IDLE;
			}
		}
		break;
		case OPP_AGE://等待用户输入对方的年龄
		{
			if(user_select != IDLE)
			{
				if(user_monitor_num == user_num)//往后台回应监视信息
				{
					command(1,0,user_num,USER_PRESS_SIGNAL,user_select,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
				}
				if(user_e1[user_num].user_index == 0)
				{
					if(user_select < 10)
					{
						audio_stop(user_e1[user_num].dtmf);//停止当前操作
						user_e1[user_num].opp_age = user_select * 10;
						user_e1[user_num].user_index++;
					}
					else
					{
						if(user_select == 12)//用户对聊友的年龄没有要求
						{
							audio_dtmf_resource[user_e1[user_num].dtmf].count = 1;//本段音播放次数加1
							user_e1[user_num].user_state = JUDGE_USER;
							audio_dtmf_resource[user_e1[user_num].dtmf].auto_flag = LEISURE;//清自动放音标志
						}
						else
						{
							error_chuli(user_num);//输入错误
						}
					}
				}
				else
				{
					if(user_select < 10)
					{
						clr_duan(user_num);
						audio_dtmf_resource[user_e1[user_num].dtmf].count = 1;//本段音播放次数加1
						user_e1[user_num].opp_age = user_e1[user_num].opp_age + user_select;
						user_e1[user_num].user_state = JUDGE_USER;
						audio_dtmf_resource[user_e1[user_num].dtmf].auto_flag = LEISURE;//清自动放音标志
					}
					else
					{
						error_chuli(user_num);//输入错误
					}
				}
				audio_dtmf_resource[user_e1[user_num].dtmf].buf = IDLE;
			}
		}
		break;
		default:
		break;
	}
}

void in_mfc_line(unsigned char user_num)//数字中继呼入MFC互控处理
{
	unsigned char trk_j;
	switch(user_e1[user_num].mfc_state)//以MFC的状态来处理
	{			
		case WAIT_DIGITAL_SIGNAL://等待交换机发电话号码
		{
			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);
				}
				user_e1[user_num].user_index++;//号码指针加1
				if(user_e1[user_num].user_index == ID_num_length)//判断是否应该发A3信令
				{
					send_mfc_in(user_e1[user_num].mfc,3);//发A3信令
					if(user_monitor_num == user_num)//往后台回应监视信息
					{
						command(1,0,user_num,BACKWARD_MFC_SIGNAL,3,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
					}	
					user_e1[user_num].sub_status = 3;//设置为发A3
				}
				else
				{
					if(user_e1[user_num].user_index == LAN_num_length)//判断是否应该发A6信令
					{
						if(user_e1[user_num].a6_flag == 0)//判断有没有发过A6
						{
							send_mfc_in(user_e1[user_num].mfc,6);//发A6信令
							if(user_monitor_num == user_num)//往后台回应监视信息
							{
								command(1,0,user_num,BACKWARD_MFC_SIGNAL,6,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
							}	
							user_e1[user_num].sub_status = 6;//设置为发A6
							user_e1[user_num].a6_flag = 1;//置A6发送标志
						}
						else//已经发过A6信令
						{
							send_mfc_in(user_e1[user_num].mfc,1);//发A1
							if(user_monitor_num == user_num)//往后台回应监视信息
							{
								command(1,0,user_num,BACKWARD_MFC_SIGNAL,1,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
							}	
							user_e1[user_num].sub_status = 1;//设置为发A1
						}
					}
					else//发A1
					{
						send_mfc_in(user_e1[user_num].mfc,1);//发A1信令
						if(user_monitor_num == user_num)//往后台回应监视信息
						{
							command(1,0,user_num,BACKWARD_MFC_SIGNAL,1,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
						}	
						user_e1[user_num].sub_status = 1;//设置为发A1 
					}
				}
				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_PAUSE://等待交换机发停发
		{
			user_e1[user_num].delay--;//等待时间减1
			if(chat_mfc_resource[user_e1[user_num].mfc].buf[1] == MFC_PAUSE)//判断有无收到停发
			{
				if(user_monitor_num == user_num)//往后台回应监视信息
				{
					command(1,0,user_num,FORWARD_MFC_SIGNAL,0,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
				}
				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].delay = CTRL_TIME;//设置500毫秒的等待时间
				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;//清空接收指针
				switch(user_e1[user_num].sub_status)
				{
					case 1://上一次发的是A1
					{
						user_e1[user_num].mfc_state = WAIT_DIGITAL_SIGNAL;//转为接收下一位号码
					}
					break;
					case 3://上一次发的是A3
					{
						user_e1[user_num].mfc_state = WAIT_KD_SIGNAL;//转为接收KD信令							
					}
					break;
					case 6://上一次发的是A6
					{
						user_e1[user_num].mfc_state = WAIT_KA_SIGNAL;//转为接收KA信令
						user_e1[user_num].user_index = 0;//清接收指针

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -