/*..........................................................................*/ QState Philo_eating(Philo *me, QEvt const *e) { switch (e->sig) { case Q_ENTRY_SIG: { QTimeEvt_postIn(&me->timeEvt, (QActive *)me, EAT_TIME); return Q_HANDLED(); } case Q_EXIT_SIG: { TableEvt *pe = Q_NEW(TableEvt, DONE_SIG); pe->philoNum = PHILO_ID(me); QF_PUBLISH((QEvt *)pe, me); return Q_HANDLED(); } case TIMEOUT_SIG: { BSP_busyDelay(); return Q_TRAN(&Philo_thinking); } case EAT_SIG: /* intentionally fall-through */ case DONE_SIG: { /* EAT or DONE must be for other Philos than this one */ Q_ASSERT(((TableEvt const *)e)->philoNum != PHILO_ID(me)); return Q_HANDLED(); } } return Q_SUPER(&QHsm_top); }
/* @(/1/8/23/1/7/5/5/3/3) ..................................................*/ static QState QGprs_WaitFillData(QGprs * const me, QEvt const * const e) { QState status_; switch (e->sig) { /* @(/1/8/23/1/7/5/5/3/3) */ case Q_ENTRY_SIG: { /* 发送TCPIP前缀字符串[AT^SISC=...] */ GPRS_SendTCPIPPrefix(me->m_SendDataLen); /* 启动应答计时器 */ QTimeEvt_postIn(&me->m_Timer, (QActive *)me, TIMEOUT_ATTIPS); status_ = Q_HANDLED(); break; } /* @(/1/8/23/1/7/5/5/3/3) */ case Q_EXIT_SIG: { QTimeEvt_disarm(&me->m_Timer); status_ = Q_HANDLED(); break; } /* @(/1/8/23/1/7/5/5/3/3/0) */ case AT_FILLDATATIP_SIG: { status_ = Q_TRAN(&QGprs_WaitRet); break; } default: { status_ = Q_SUPER(&QGprs_TcpSending); break; } } return status_; }
/* @(/2/0/2/3) .............................................................*/ QState Philo_eating(Philo *me, QEvent const *e) { switch (e->sig) { /* @(/2/0/2/3) */ case Q_ENTRY_SIG: { QTimeEvt_postIn(&me->timeEvt, &me->super, EAT_TIME); return Q_HANDLED(); } /* @(/2/0/2/3) */ case Q_EXIT_SIG: { TableEvt *pe = Q_NEW(TableEvt, DONE_SIG); pe->philoNum = PHILO_ID(me); QF_PUBLISH((QEvent const *)pe, me); return Q_HANDLED(); } /* @(/2/0/2/3/0) */ case TIMEOUT_SIG: { BSP_busyDelay(); return Q_TRAN(&Philo_thinking); } /* @(/2/0/2/3/1) */ case TERMINATE_SIG: /* intentionally fall through */ case DONE_SIG: { Q_ERROR(); return Q_HANDLED(); } /* @(/2/0/2/3/2) */ case EAT_SIG: { Q_ASSERT(((TableEvt const *)e)->philoNum != PHILO_ID(me)); return Q_HANDLED(); } } return Q_SUPER(&QHsm_top); }
/*..........................................................................*/ QState Tunnel_screen_saver_show(Tunnel *me, QEvt const *e) { switch (e->sig) { case Q_ENTRY_SIG: { uint32_t rnd = random(); /* clear the screen frame buffer */ memset(l_frame, (uint8_t)0, (GAME_SCREEN_WIDTH * GAME_SCREEN_HEIGHT/8)); Tunnel_addImageAt(me, PRESS_BUTTON_BMP, (uint8_t)(rnd % (GAME_SCREEN_WIDTH - 55)), (int8_t) (rnd % (GAME_SCREEN_HEIGHT - 8))); BSP_drawBitmap(l_frame, GAME_SCREEN_WIDTH, GAME_SCREEN_HEIGHT); QTimeEvt_postIn(&me->screenTimeEvt, (QActive *)me, BSP_TICKS_PER_SEC/3); /* 1/3 sec timeout */ return Q_HANDLED(); } case Q_EXIT_SIG: { QTimeEvt_disarm(&me->screenTimeEvt); /* clear the screen frame buffer */ memset(l_frame, (uint8_t)0, (GAME_SCREEN_WIDTH * GAME_SCREEN_HEIGHT/8)); BSP_drawBitmap(l_frame, GAME_SCREEN_WIDTH, GAME_SCREEN_HEIGHT); return Q_HANDLED(); } case SCREEN_TIMEOUT_SIG: { return Q_TRAN(&Tunnel_screen_saver_hide); } } return Q_SUPER(&Tunnel_screen_saver); }
/*..........................................................................*/ QState Tunnel_game_over(Tunnel *me, QEvt const *e) { switch (e->sig) { case Q_ENTRY_SIG: { QTimeEvt_postEvery(&me->blinkTimeEvt, (QActive *)me, BSP_TICKS_PER_SEC/2); /* 1/2 sec */ QTimeEvt_postIn(&me->screenTimeEvt, (QActive *)me, BSP_TICKS_PER_SEC*5); /* 5 sec timeout */ me->blink_ctr = 0; BSP_drawNString((GAME_SCREEN_WIDTH - 6*9)/2, 0, "Game Over"); return Q_HANDLED(); } case Q_EXIT_SIG: { QTimeEvt_disarm(&me->blinkTimeEvt); QTimeEvt_disarm(&me->screenTimeEvt); BSP_updateScore(0); /* update the score on the display */ return Q_HANDLED(); } case BLINK_TIMEOUT_SIG: { me->blink_ctr ^= 1; /* toggle the blink couner */ BSP_drawNString((GAME_SCREEN_WIDTH - 6*9)/2, 0, ((me->blink_ctr == 0) ? "Game Over" : " ")); return Q_HANDLED(); } case SCREEN_TIMEOUT_SIG: { return Q_TRAN(&Tunnel_demo); } } return Q_SUPER(&Tunnel_active); }
/* @(/2/0/2/1) .............................................................*/ QState Philo_thinking(Philo *me, QEvent const *e) { switch (e->sig) { /* @(/2/0/2/1) */ case Q_ENTRY_SIG: { QTimeEvt_postIn(&me->timeEvt, &me->super, THINK_TIME); return Q_HANDLED(); } /* @(/2/0/2/1/0) */ case TIMEOUT_SIG: { BSP_busyDelay(); return Q_TRAN(&Philo_hungry); } /* @(/2/0/2/1/1) */ case TERMINATE_SIG: /* intentionally fall through */ case DONE_SIG: { Q_ERROR(); return Q_HANDLED(); } /* @(/2/0/2/1/2) */ case EAT_SIG: { Q_ASSERT(((TableEvt const *)e)->philoNum != PHILO_ID(me)); return Q_HANDLED(); } } return Q_SUPER(&QHsm_top); }
/* @(/1/8/23/1/6/3) ........................................................*/ static QState QGprs_start_delay(QGprs * const me, QEvt const * const e) { QState status_; switch (e->sig) { /* @(/1/8/23/1/6/3) */ case Q_ENTRY_SIG: { //先管脚拉低 GPIO_SetBits(GPIOA, GPIOA_GPRS_PWRKEY_); //低电平拉低1000ms QTimeEvt_postIn(&me->m_Timer, &me->super, TIMEOUT_PWRONBEFORE_TICKS); status_ = Q_HANDLED(); break; } /* @(/1/8/23/1/6/3) */ case Q_EXIT_SIG: { QTimeEvt_disarm(&me->m_Timer); status_ = Q_HANDLED(); break; } /* @(/1/8/23/1/6/3/0) */ case Q_TIMEOUT_SIG: { status_ = Q_TRAN(&QGprs_start_finished); break; } default: { status_ = Q_SUPER(&QGprs_startup); break; } } return status_; }
/* @(/1/8/23/1/6/2) ........................................................*/ static QState QGprs_start_finished(QGprs * const me, QEvt const * const e) { QState status_; switch (e->sig) { /* @(/1/8/23/1/6/2) */ case Q_ENTRY_SIG: { /* TERMON 高电平 */ GPIO_ResetBits(GPIOA, GPIOA_GPRS_PWRKEY_); /* 已开机,稍延时待稳定后执行AT */ QTimeEvt_postIn(&me->m_Timer, &me->super, TIMEOUT_PWRONAFTER_TICKS); status_ = Q_HANDLED(); break; } /* @(/1/8/23/1/6/2) */ case Q_EXIT_SIG: { QTimeEvt_disarm(&me->m_Timer); status_ = Q_HANDLED(); break; } /* @(/1/8/23/1/6/2/0) */ case Q_TIMEOUT_SIG: { //串口IO重新初始化 GPRS_UartReconfigure(); status_ = Q_TRAN(&QGprs_polling); break; } default: { status_ = Q_SUPER(&QGprs_startup); break; } } return status_; }
/* @(/1/8/23/1/6/1) ........................................................*/ static QState QGprs_power_on(QGprs * const me, QEvt const * const e) { QState status_; switch (e->sig) { /* @(/1/8/23/1/6/1) */ case Q_ENTRY_SIG: { //模块上电 GPIO_SetBits(GPIOA,GPIOA_CDMA_CTRL_); /* TERMON 高电平 */ GPIO_ResetBits(GPIOA, GPIOA_GPRS_PWRKEY_); //保持1S QTimeEvt_postIn(&me->m_Timer, &me->super, TIMEOUT_PWRON_TICKS); status_ = Q_HANDLED(); break; } /* @(/1/8/23/1/6/1) */ case Q_EXIT_SIG: { QTimeEvt_disarm(&me->m_Timer); status_ = Q_HANDLED(); break; } /* @(/1/8/23/1/6/1/0) */ case Q_TIMEOUT_SIG: { status_ = Q_TRAN(&QGprs_start_delay); break; } default: { status_ = Q_SUPER(&QGprs_startup); break; } } return status_; }
/* @(/1/8/23/1/8) ..........................................................*/ static QState QGprs_reseting(QGprs * const me, QEvt const * const e) { QState status_; switch (e->sig) { /* @(/1/8/23/1/8) */ case Q_ENTRY_SIG: { //模块上电 GPIO_ResetBits(GPIOA,GPIOA_CDMA_CTRL_); //先管脚拉低 //GPIO_ResetBits(GPIOA, GPIOA_GPRS_PWRKEY_); //低电平拉低1000ms QTimeEvt_postIn(&me->m_Timer, &me->super, TIMEOUT_RESETBEFORE_TICKS); status_ = Q_HANDLED(); break; } /* @(/1/8/23/1/8) */ case Q_EXIT_SIG: { QTimeEvt_disarm(&me->m_Timer); status_ = Q_HANDLED(); break; } /* @(/1/8/23/1/8/0) */ case Q_TIMEOUT_SIG: { status_ = Q_TRAN(&QGprs_startup); break; } default: { status_ = Q_SUPER(&QGprs_serving); break; } } return status_; }
/* @(/1/8/23/1/7/5/5/3/4) ..................................................*/ static QState QGprs_WaitRet(QGprs * const me, QEvt const * const e) { QState status_; switch (e->sig) { /* @(/1/8/23/1/7/5/5/3/4) */ case Q_ENTRY_SIG: { /* 填充待发送数据内容 */ GPRS_FillinTCPIPData(me->m_sendBuf, me->m_SendDataLen); /* 启动应答计时器 */ QTimeEvt_postIn(&me->m_Timer, (QActive *)me, TIMEOUT_ATSENDRET); status_ = Q_HANDLED(); break; } /* @(/1/8/23/1/7/5/5/3/4) */ case Q_EXIT_SIG: { QTimeEvt_disarm(&me->m_Timer); status_ = Q_HANDLED(); break; } /* @(/1/8/23/1/7/5/5/3/4/0) */ case AT_SENDOK_SIG: { status_ = Q_TRAN(&QGprs_Idle); break; } default: { status_ = Q_SUPER(&QGprs_TcpSending); break; } } return status_; }
/* @(/1/8/23/1/7/3) ........................................................*/ static QState QGprs_registering(QGprs * const me, QEvt const * const e) { QState status_; switch (e->sig) { /* @(/1/8/23/1/7/3) */ case Q_ENTRY_SIG: { //执行注册网络AT指令 GPRS_doRegister(); QTimeEvt_postIn(&me->m_Timer, &me->super, TIMEOUT_ATREG); status_ = Q_HANDLED(); break; } /* @(/1/8/23/1/7/3) */ case Q_EXIT_SIG: { QTimeEvt_disarm(&me->m_Timer); status_ = Q_HANDLED(); break; } /* @(/1/8/23/1/7/3/0) */ case AT_OK_SIG: { if(GPRS_GetRegState()) { me->m_NetState = NET_STATE_REGISTED; GPRS_SetNetState(NET_STATE_REGISTED); } /* @(/1/8/23/1/7/3/0/0) */ if (GPRS_GetRegState() == 0) { status_ = Q_HANDLED(); } /* @(/1/8/23/1/7/3/0/1) */ else { status_ = Q_TRAN(&QGprs_powerNormalMode); } break; } /* @(/1/8/23/1/7/3/1) */ case Q_TIMEOUT_SIG: { me->m_TryTimes++; /* @(/1/8/23/1/7/3/1/0) */ if (me->m_TryTimes < REGISTER_TRY_MAXTIMES) { status_ = Q_TRAN(&QGprs_registering); } /* @(/1/8/23/1/7/3/1/1) */ else { TRACE_(QS_USER, NULL, "*** [GPRS] Regging timeout, repower gprs"); status_ = Q_TRAN(&QGprs_reseting); } break; } default: { status_ = Q_SUPER(&QGprs_polling); break; } } return status_; }
/*..........................................................................*/ QState Tunnel_demo(Tunnel *me, QEvt const *e) { switch (e->sig) { case Q_ENTRY_SIG: { me->last_mine_x = 0; /* last mine at right edge of the tunnel */ me->last_mine_y = 0; /* set the tunnel properties... */ me->wall_thickness_top = 0; me->wall_thickness_bottom = 0; me->minimal_gap = GAME_SCREEN_HEIGHT - 3; /* erase the tunnel walls */ memset(l_walls, (uint8_t)0, (GAME_SCREEN_WIDTH * GAME_SCREEN_HEIGHT/8)); QTimeEvt_postEvery(&me->blinkTimeEvt, (QActive *)me, BSP_TICKS_PER_SEC/2); /* every 1/2 sec */ QTimeEvt_postIn(&me->screenTimeEvt, (QActive *)me, BSP_TICKS_PER_SEC*20); /* 20s timeout */ me->blink_ctr = 0; /* init the blink counter */ return Q_HANDLED(); } case Q_EXIT_SIG: { QTimeEvt_disarm(&me->blinkTimeEvt); QTimeEvt_disarm(&me->screenTimeEvt); return Q_HANDLED(); } case BLINK_TIMEOUT_SIG: { me->blink_ctr ^= 1; /* toggle the blink cunter */ return Q_HANDLED(); } case SCREEN_TIMEOUT_SIG: { return Q_TRAN(&Tunnel_screen_saver); } case TIME_TICK_SIG: { Tunnel_advance(me); if (me->blink_ctr != 0) { /* add the text bitmap into the frame buffer */ Tunnel_addImageAt(me, PRESS_BUTTON_BMP, (GAME_SCREEN_WIDTH - 55)/2, (GAME_SCREEN_HEIGHT - 8)/2); } BSP_drawBitmap(l_frame, GAME_SCREEN_WIDTH, GAME_SCREEN_HEIGHT); return Q_HANDLED(); } case PLAYER_TRIGGER_SIG: { return Q_TRAN(&Tunnel_playing); } } return Q_SUPER(&Tunnel_active); }
/*${AOs::FlashMgr::SM::Active} .............................................*/ static QState FlashMgr_Active(FlashMgr * const me, QEvt const * const e) { QState status_; switch (e->sig) { /* ${AOs::FlashMgr::SM::Active} */ case Q_ENTRY_SIG: { /* Arm and disarm*/ QTimeEvt_postIn( &me->flashTimerEvt, (QActive *)me, SEC_TO_TICKS( HL_MAX_TOUT_SEC_FLASH_FW ) ); QTimeEvt_disarm(&me->flashTimerEvt); QTimeEvt_postIn( &me->flashOpTimerEvt, (QActive *)me, SEC_TO_TICKS( HL_MAX_TOUT_SEC_FLASH_FW ) ); QTimeEvt_disarm(&me->flashOpTimerEvt); QTimeEvt_postIn( &me->ramTimerEvt, (QActive *)me, SEC_TO_TICKS( HL_MAX_TOUT_SEC_FLASH_FW ) ); QTimeEvt_disarm(&me->ramTimerEvt); status_ = Q_HANDLED(); break; } default: { status_ = Q_SUPER(&QHsm_top); break; } } return status_; }
/*..........................................................................*/ QState Philo_thinking(Philo *me, QEvent const *e) { switch (e->sig) { case Q_ENTRY_SIG: { QTimeEvt_postIn(&me->timeEvt, (QActive *)me, THINK_TIME); return Q_HANDLED(); } case TIMEOUT_SIG: { return Q_TRAN(&Philo_hungry); } case EAT_SIG: /* intentionally fall-through */ case DONE_SIG: { /* EAT or DONE must be for other Philos than this one */ Q_ASSERT(((TableEvt const *)e)->philoNum != PHILO_ID(me)); return Q_HANDLED(); } } return Q_SUPER(&QHsm_top); }
/*${AOs::CLI::SM} ..........................................................*/ static QState CLI_initial(CLI * const me, QEvt const * const e) { /* ${AOs::CLI::SM::initial} */ /* Print banner on the serial console */ Console_printStr("\r\nStart\r\n"); Console_printStr("Compiled on "); Console_printStr(__DATE__); Console_printStr(" at "); Console_printStr(__TIME__); Console_printStr(" using Microchip XC16 ver."); Console_printNum(__XC16_VERSION__, 10); LED_ON(); QTimeEvt_postIn( &me->blinkEvt, (QActive *)me, BLINK_ON_TIME ); QActive_subscribe((QActive *)me, PRINT_STRING_SIG); return Q_TRAN(&CLI_idle); }
/*..........................................................................*/ QState Tunnel_screen_saver_hide(Tunnel *me, QEvt const *e) { switch (e->sig) { case Q_ENTRY_SIG: { BSP_displayOff(); /* power down the display */ QTimeEvt_postIn(&me->screenTimeEvt, (QActive *)me, BSP_TICKS_PER_SEC*3); /* 3s timeout */ return Q_HANDLED(); } case Q_EXIT_SIG: { QTimeEvt_disarm(&me->screenTimeEvt); BSP_displayOn(); /* power up the display */ return Q_HANDLED(); } case SCREEN_TIMEOUT_SIG: { return Q_TRAN(&Tunnel_screen_saver_show); } } return Q_SUPER(&Tunnel_screen_saver); }
/* @(/1/8/23/1/7/6) ........................................................*/ static QState QGprs_sleepRequest(QGprs * const me, QEvt const * const e) { QState status_; switch (e->sig) { /* @(/1/8/23/1/7/6) */ case Q_ENTRY_SIG: { //进入休眠命令 TRACE_(QS_USER, NULL, "[GPRS] Enable MG323 Module entering into Sleep mode..."); GPRS_RequestSleep(); QTimeEvt_postIn(&me->m_Timer, &me->super, TIMEOUT_ATACK); status_ = Q_HANDLED(); break; } /* @(/1/8/23/1/7/6) */ case Q_EXIT_SIG: { QTimeEvt_disarm(&me->m_Timer); status_ = Q_HANDLED(); break; } /* @(/1/8/23/1/7/6/0) */ case AT_OK_SIG: { TRACE_(QS_USER, NULL, "[GPRS] Sleep mode is Done."); status_ = Q_TRAN(&QGprs_powerSaveMode); break; } /* @(/1/8/23/1/7/6/1) */ case Q_TIMEOUT_SIG: { status_ = Q_TRAN(&QGprs_sleepRequest); break; } /* @(/1/8/23/1/7/6/2) */ case AT_ERROR_SIG: { status_ = Q_HANDLED(); break; } default: { status_ = Q_SUPER(&QGprs_polling); break; } } return status_; }
/*${AOs::CLI::SM::main} ....................................................*/ static QState CLI_main(CLI * const me, QEvt const * const e) { QState status_; switch (e->sig) { /* ${AOs::CLI::SM::main::BLINK} */ case BLINK_SIG: { static bool on_off = false; uint8_t time; if( on_off == true ) { LED_ON(); time = BLINK_ON_TIME; } else { LED_OFF(); time = BLINK_OFF_TIME; } on_off = !on_off; QTimeEvt_postIn( &me->blinkEvt, (QActive *)me, time ); status_ = Q_HANDLED(); break; } /* ${AOs::CLI::SM::main::MENU_SELECT} */ case MENU_SELECT_SIG: { status_ = Q_TRAN(&CLI_menu_Top); break; } /* ${AOs::CLI::SM::main::PRINT_STRING} */ case PRINT_STRING_SIG: { Console_printStr( ((PrintStringEvt const*)e)->str ); status_ = Q_HANDLED(); break; } default: { status_ = Q_SUPER(&QHsm_top); break; } } return status_; }
/*${AOs::SerialMgr::SM::Active} ............................................*/ static QState SerialMgr_Active(SerialMgr * const me, QEvt const * const e) { QState status_; switch (e->sig) { /* ${AOs::SerialMgr::SM::Active} */ case Q_ENTRY_SIG: { /* Post a timer and disarm it right away so it can be * rearmed at any point */ QTimeEvt_postIn( &me->serialTimerEvt, (QActive *)me, SEC_TO_TICKS( LL_MAX_TIMEOUT_SERIAL_DMA_BUSY_SEC ) ); QTimeEvt_disarm(&me->serialTimerEvt); status_ = Q_HANDLED(); break; } default: { status_ = Q_SUPER(&QHsm_top); break; } } return status_; }
/* @(/1/8/23/1/7/5/5/7) ....................................................*/ static QState QGprs_DataQuering(QGprs * const me, QEvt const * const e) { QState status_; switch (e->sig) { /* @(/1/8/23/1/7/5/5/7) */ case Q_ENTRY_SIG: { //发送数据查询指令 GPRS_doQueryData(); /* 启动应答计时器 */ QTimeEvt_postIn(&me->m_Timer, (QActive *)me, TIMEOUT_AT_DATAQUERYRET); status_ = Q_HANDLED(); break; } /* @(/1/8/23/1/7/5/5/7) */ case Q_EXIT_SIG: { QTimeEvt_disarm(&me->m_Timer); status_ = Q_HANDLED(); break; } /* @(/1/8/23/1/7/5/5/7/0) */ case AT_OK_SIG: { //逆向提取TCP包 GPRS_doTakeTCPPacketData(); status_ = Q_TRAN(&QGprs_Idle); break; } /* @(/1/8/23/1/7/5/5/7/1) */ case Q_TIMEOUT_SIG: { status_ = Q_TRAN(&QGprs_Idle); break; } default: { status_ = Q_SUPER(&QGprs_connected); break; } } return status_; }
/*..........................................................................*/ QState AlarmMgr_playing(AlarmMgr *me, QEvt const *e) { switch (e->sig) { case Q_ENTRY_SIG: { QTimeEvt_postIn(&me->timer, (QActive *)me, l_alarms[me->curr_alarm].note[me->curr_note].dur); TIM_PrescalerConfig(TIM3, l_alarms[me->curr_alarm].note[me->curr_note].freq); TIM_CounterCmd(TIM3, TIM_START); /* start noise */ return Q_HANDLED(); } case Q_EXIT_SIG: { QTimeEvt_disarm(&me->timer); return Q_HANDLED(); } case TIMEOUT_SIG: { ++me->curr_note; if (me->curr_note == l_alarms[me->curr_alarm].length) { me->curr_note = 0; /* start over again */ } return Q_TRAN(&AlarmMgr_playing); /* transition to self */ } } return Q_SUPER(&AlarmMgr_on); }
/* @(/1/8/23/1/7/4/1) ......................................................*/ static QState QGprs_initialing_stepinto(QGprs * const me, QEvt const * const e) { QState status_; switch (e->sig) { /* @(/1/8/23/1/7/4/1) */ case Q_ENTRY_SIG: { //执行初始化序列 GPRS_doInit(me->m_ATStep); QTimeEvt_postIn(&me->m_Timer, &me->super, TIMEOUT_ATACK); status_ = Q_HANDLED(); break; } /* @(/1/8/23/1/7/4/1) */ case Q_EXIT_SIG: { QTimeEvt_disarm(&me->m_Timer); status_ = Q_HANDLED(); break; } /* @(/1/8/23/1/7/4/1/0) */ case Q_TIMEOUT_SIG: { me->m_TryTimes ++; /* @(/1/8/23/1/7/4/1/0/0) */ if (me->m_TryTimes < INIT_TRY_MAXTIMES) { status_ = Q_TRAN(&QGprs_initialing_stepinto); } /* @(/1/8/23/1/7/4/1/0/1) */ else { TRACE_(QS_USER, NULL, "*** [GPRS] init failed, repower gprs"); status_ = Q_TRAN(&QGprs_reseting); } break; } /* @(/1/8/23/1/7/4/1/1) */ case AT_OK_SIG: { /* @(/1/8/23/1/7/4/1/1/0) */ if (0 == GPRS_CheckCmd_IsAttaching(me->m_ATStep)) { me->m_ATStep ++; /* @(/1/8/23/1/7/4/1/1/0/0) */ if (me->m_ATStep < INIT_STEPS_AMOUNT) { status_ = Q_TRAN(&QGprs_initialing_stepinto); } /* @(/1/8/23/1/7/4/1/1/0/1) */ else { me->m_TryTimes = 0; status_ = Q_TRAN(&QGprs_registering); } } /* @(/1/8/23/1/7/4/1/1/1) */ else { /* @(/1/8/23/1/7/4/1/1/1/0) */ if (1 == GPRS_GetAttachState()) { me->m_ATStep ++; status_ = Q_TRAN(&QGprs_initialing_stepinto); } /* @(/1/8/23/1/7/4/1/1/1/1) */ else { status_ = Q_HANDLED(); } } break; } default: { status_ = Q_SUPER(&QGprs_initialing); break; } } return status_; }
/* @(/1/8/23/1/7/5/4/1) ....................................................*/ static QState QGprs_connecting(QGprs * const me, QEvt const * const e) { QState status_; switch (e->sig) { /* @(/1/8/23/1/7/5/4/1) */ case Q_ENTRY_SIG: { //执行连接AT序列 GPRS_doConnect(me->m_ATStep); QTimeEvt_postIn(&me->m_Timer, &me->super, TIMEOUT_ATCONNECT); status_ = Q_HANDLED(); break; } /* @(/1/8/23/1/7/5/4/1) */ case Q_EXIT_SIG: { QTimeEvt_disarm(&me->m_Timer); QTimeEvt_disarm(&me->m_LEDTimer); status_ = Q_HANDLED(); break; } /* @(/1/8/23/1/7/5/4/1/0) */ case AT_OK_SIG: { me->m_ATStep ++; /* @(/1/8/23/1/7/5/4/1/0/0) */ if (me->m_ATStep < (CONNECT_STEPS_AMOUNT)) { status_ = Q_TRAN(&QGprs_connecting); } /* @(/1/8/23/1/7/5/4/1/0/1) */ else { status_ = Q_TRAN(&QGprs_connected); } break; } /* @(/1/8/23/1/7/5/4/1/1) */ case AT_ERROR_SIG: { me->m_ATErrorTimes ++; me->m_ATStep ++; /* @(/1/8/23/1/7/5/4/1/1/0) */ if (me->m_ATStep < (CONNECT_STEPS_AMOUNT)) { status_ = Q_TRAN(&QGprs_connecting); } /* @(/1/8/23/1/7/5/4/1/1/1) */ else { me->m_ATStep = 0; status_ = Q_HANDLED(); } break; } /* @(/1/8/23/1/7/5/4/1/2) */ case Q_TIMEOUT_SIG: { me->m_ATErrorTimes ++; /* @(/1/8/23/1/7/5/4/1/2/0) */ if (me->m_ATErrorTimes >= CONNECT_ERROR_MAXTIMES) { //设置故障类型:网络不可达 //SetErrType(NET_CLASS, NET_FAULT_UNREACHABLE); status_ = Q_TRAN(&QGprs_reseting); } /* @(/1/8/23/1/7/5/4/1/2/1) */ else { status_ = Q_TRAN(&QGprs_connecting); } break; } default: { status_ = Q_SUPER(&QGprs_disconnected); break; } } return status_; }