📄 mystate.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 + -