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

📄 c_trkout.c

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