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

📄 mystate.h

📁 170话费查询系统
💻 H
字号:
//线程ID
#define		_nodefine		   -1
#define		_main				0
#define		_singleinput		1
#define		_monthinput			2        
#define		_multiplay 			3                
#define		_timeout   			4                
#define		_timetrigger		5        
                          	
//main线程的状态
#define     main_sleep			0		// 主线程空闲
#define		waiting_call		10		// 等待电话拨入
#define		call_coming			20		// 电话拨入
#define		read_ani			30		// 读主叫号码
#define		ani_recieve			40		// 主叫已接收
#define		verify_ani			50		// 验证主叫号码
#define		ani_valid			60		// 主叫号码有效
#define		ani_invalid			70		// 主叫无效
#define		wel_play			80		// 播放欢迎音
#define		wel_playover		90		// 播放结束
#define		vm_1_play			100		// 播放语音菜单1
#define		cmd0_switch			120		// 切换到输入线程,等待命令
#define		cmd0_hf				130		// 开始查询话费
#define		cmd0_xd				140		// 开始查询详单
#define		cmd0_qf				150		// 开始查询欠费
#define		cmd0_ad				160		// 电信业务宣传
#define		hf_play				170		// 播放话费查询
#define		cmd1_switch			190		// 等待用户输入
#define		cmd1_qry_djdy		200		// 查询单机单月费用
#define		cmd1_qry_tshou		210		// 查询托收费用
#define		cmd1_up				220		// 返回上一级菜单vm_1
#define		xd_play				230		// 播放详单查询
#define		cmd2_switch			250		// 等待用户输入
#define		cmd2_qry_ctxd		260		// 查询长途详单
#define		cmd2_qry_bdwxd		270		// 查询本地网详单
#define		cmd2_qry_168xd		280		// 查询声讯详单
#define		cmd2_up				290		// 返回上一级菜单vm_1
#define		qry_hint			300		// 查询提示音“XXXX查询...”
#define     month_switch		325		// 切换至 monthinput线程
#define		month_get			330		// 用户输入了有效月份
#define		qry_data			340		// 查询数据
#define     qry_ok				350		// 查询结束
#define     qry_timeout			360		// 查询超时
#define		play_result			370		// 播放查询结果
#define		play_switch			375		// 播放查询结果
#define		ad_play				380		// 播放业务宣传
#define		ad_playover			390		// 业务宣传结束
#define		cmd3_switch			400		// 等待用户输入下一步动作
//SingleInput线程的状态
#define		sgipt_idle			410		// 空闲状态
#define		sgipt_start			420		// 开始等待用户按键
#define		sgipt_waitkey		430		// 开始等待用户按键
#define		sgipt_timeout		440		// 用户按键超时
#define		sgipt_keypress		450		// 接收到用户按键
#define		sgipt_verify		455		// 验证按键
#define		sgipt_keyerr		460		// 按键无效
#define		sgipt_playerr		465		// 播放“用户按键无效”
#define		sgipt_errover		470		// 播放“用户按键无效”结束
#define		sgipt_alwayserr		475		// 多次案件无效
//monthInput线程状态
#define		mth_idle			480		// 空闲状态
#define		mth_start			483		// 等待用户输入
#define     mth_playmonth		485		// 播放提示音:请输入
#define     mth_monthover		487		// 播放提示音完毕
#define		mth_wait			490		// 等待用户输入
#define		mth_timeout			500		// 用户输入超时
#define		mth_numget			510		// 接收到数字
#define		mth_check			515		// 接收到数字
#define		mth_numerr			520		// 不是月份数字
#define     mth_playerr         525		// 播放“无效月份数字,请重输”
#define		mth_nodata			530		// 月份无效(无数据)
#define     mth_playnodata		535		// 播放“该月没有数据,请重输”
#define		mth_valid			540		// 月份有效
#define		mth_alwayserr		550		// 多次输入无效
//MutiPlay线程状态
#define		mply_idle			560		// 空闲状态
#define		mply_sleep			565		// 休眠等待状态
#define		mply_start			570		// 开始播报语音
#define		mply_playing		575		// 播报....
#define		mply_playover		580		// 播报结束
#define		mply_asknext		590		// 询问下一步动向
#define		cmd4_switch			600		// 切换至读键线程
#define		cmd4_replay			610		// 重放结果
#define		voc_reset			620		// reset语音链
#define		voc_resetok			630		// reset语音链
//TimeOut线程状态
#define		tm_idle				640		// 空闲状态
#define		tm_start			650		// 开始工作
#define		tm_check			660		// 检查服务类型
#define		tm_systmout			670		// 系统操作超时
#define		tm_usertmout		680		// 用户操作超时
#define		tm_alwayserr		690		// 用户多次输入无效
#define		tm_userhangup		700		// 用户主动挂机
#define		tm_anirefuse		710		// 主叫号码被拒绝。
#define		play_systmout		720		// 播放系统超时
#define		play_sysover		730		// 播放系统超时结束
#define		play_usertmout		740		// 播放用户超时
#define		play_userover		750		// 播放用户超时结束
#define		play_bye			760		// 播放再见"谢谢您的查询,再见!"
#define		play_byeover		770		// 播放再见"谢谢您的查询,再见!"
#define		tm_voc_hangup		780		// 挂机
#define		tm_restart			790		// 端口初始化,返回主线程



typedef		int		THREAD;
typedef		int		STATE;
typedef		int		EVT;

/******************************************************************************
*               SingleInput的 “键值-流程”[Key -- Execute]对照表
*
* 当调用线程切换至 SingleInput, 等待输入某几个键时,调用线程设置此表,告诉
* SingleInput线程准备读哪几个键,如果按要求读到它们,则该分别切换到哪个线程
* 的哪个状态下。同时还告诉SingleInput,如果用户按键无效,需要切换到哪里。
* 
* 用户输入超时,或者多次输入无效,以及用户挂机事件则由SingleInput自行切换到
* TimeOut线程。
*******************************************************************************/
//“键值-流程”对照表
typedef struct SingleInput_KeyTable_st{
	char			key;				// 键值
	THREAD			goto_thread;		// 下一步执行线程
	STATE			goto_state;			// 下一步执行状态

}type_SGIPT_KEYTABLE;

//SingleInput IO参数表
typedef struct SingleInput_IO_st{
	int				num;				// 读入键的个数
	int				errortimes;			// 输入无效键的次数。
	type_SGIPT_KEYTABLE	keytable[20];	// 键值表

}type_SGIPT_IO;


/*******************************************************************************
*                     
*					    系统状态机  M.S.T
* 
*                      ( Machine State Table )
* 
* 
********************************************************************************/
//状态结构
typedef struct Machine_State_st{	
	int				no;					//编号	
	THREAD			curr_th;			//当前线程
	STATE			curr_st;			//当前状态
	EVT				event;				//事件	
	THREAD			next_th;			//下一线程
	STATE			next_st;			//下一状态
	long			timeout;			//超时标志(以10毫秒计)	

}MachineState;


MachineState    MST[]={
/*	线程			状态			事件			下一线程	下一状态	超时*/
{1,		_main,		waiting_call,	call_coming,	_main,			read_ani,	-1},	
{2,		_main,		read_ani,		ani_recieve,	_main,			verify_ani,	-1},
{3,		_main,		verify_ani,		ani_valid,		_main,			wel_play,	-1},
{4,		_main,		verify_ani,		ani_invalid,	_timeout,		tm_anirefuse,-1},
{5,		_main,		wel_play,		wel_playover,	_main,			vm_1_play,	-1},

{6,		_main,		vm_1_play,		cmd0_switch,	_singleinput,	sgipt_start,10000},
{7,		_main,		main_sleep,		cmd0_hf,		_main,			hf_play,	-1},
{8,		_main,		main_sleep,		cmd0_xd,		_main,			xd_play,	-1},
{9,		_main,		main_sleep,		cmd0_qf,		_main,			qry_hint,	-1},
{10,	_main,		main_sleep,		cmd0_ad,		_main,			ad_play,	-1},

{11,	_main,		hf_play,		cmd1_switch,	_singleinput,	sgipt_start,10000},
{12,	_main,		main_sleep,		cmd1_qry_djdy,	_main,			qry_hint,	-1},
{13,	_main,		main_sleep,		cmd1_qry_tshou,	_main,			qry_hint,	-1},
{14,	_main,		xd_play,		cmd2_switch,	_singleinput,	sgipt_start,10000},
{15,	_main,		main_sleep,		cmd2_qry_ctxd,	_main,			qry_hint,	-1},
{16,	_main,		main_sleep,		cmd2_qry_bdwxd,	_main,			qry_hint,	-1},
{17,	_main,		main_sleep,		cmd2_qry_168xd,	_main,			qry_hint,	-1},
{19,	_main,		ad_play,		cmd3_switch,	_singleinput,	sgipt_start,10000},

{20,	_main,		qry_hint,		month_switch,	_monthinput,	mth_start,-1},
{21,	_main,		main_sleep,		month_get,		_main,			qry_data,	-1},
{22,	_main,		qry_data,		qry_ok,			_main,			play_result,-1},
{23,	_main,		qry_data,		qry_timeout,	_timeout,		tm_start,	-1},
{24,	_main,		play_result,	play_switch,	_multiplay,		mply_start,	-1},

{25,	_singleinput,	sgipt_idle,		sgipt_start,	_singleinput,	sgipt_waitkey,	-1},
{26,	_singleinput,	sgipt_waitkey,	sgipt_keypress,	_singleinput,	sgipt_verify,	10000},
{27,	_singleinput,	sgipt_verify,	sgipt_keyerr,	_singleinput,	sgipt_playerr,	-1},
{28,	_singleinput,	sgipt_playerr,	sgipt_errover,	_nodefine,		_nodefine,	-1},
{29,	_singleinput,	sgipt_verify,	sgipt_alwayserr,_timeout,		tm_start,	-1},

{30,	_monthinput,	mth_idle,		mth_start,		_monthinput,	mth_playmonth,	-1},
{31,	_monthinput,	mth_playmonth,	mth_numget,		_monthinput,	mth_check,	-1},
{32,	_monthinput,	mth_playmonth,	mth_monthover,	_monthinput,	mth_wait,	-1},
{33,	_monthinput,	mth_wait,		mth_numget,		_monthinput,	mth_check,	-1},
{34,	_monthinput,	mth_check,		mth_numerr,		_monthinput,	mth_playerr,	-1},
{35,	_monthinput,	mth_check,		mth_nodata,		_monthinput,	mth_playnodata,	-1},
{36,	_monthinput,	mth_check,		mth_alwayserr,	_timeout,		tm_start,	-1},
{37,	_monthinput,	mth_check,		mth_valid,		_main,			tm_start,	-1},


{38,	_multiplay,		mply_idle,		mply_start,		_multiplay,		mply_playing,	-1},
{39,	_multiplay,		mply_playing,	mply_playover,	_multiplay,		mply_asknext,	-1},
{40,	_multiplay,		mply_asknext,	cmd4_switch,	_singleinput,	sgipt_start,	10000},
{41,	_multiplay,		mply_sleep,		cmd4_replay,	_multiplay,		voc_reset,	-1},
{42,	_multiplay,		voc_reset,		voc_resetok,	_multiplay,		mply_playing,	-1},

{43,	_timeout,	tm_idle,	tm_start,		_timeout,	tm_check,		-1},
{44,	_timeout,	tm_check,	tm_systmout,	_timeout,	play_systmout,	-1},
{45,	_timeout,	tm_check,	tm_usertmout,	_timeout,	play_usertmout,	-1},
{46,	_timeout,	tm_check,	tm_alwayserr,	_timeout,	play_usertmout,	-1},
{47,	_timeout,	tm_check,	tm_userhangup,	_timeout,	tm_voc_hangup,	-1},
{48,	_timeout,	tm_check,	tm_anirefuse,	_timeout,	tm_voc_hangup,	-1},

{49,	_timeout,	play_systmout,	play_sysover,	_timeout,	play_bye,		-1},
{50,	_timeout,	play_usertmout,	play_userover,	_timeout,	play_bye,		-1},
{51,	_timeout,	play_bye,		play_byeover,	_timeout,	tm_voc_hangup,	-1},
{52,	_timeout,	tm_voc_hangup,	tm_restart,		_main,		month_get,		-1},

};

⌨️ 快捷键说明

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