/*..........................................................................*/ static QState ModIo2Mgr_initial(ModIo2Mgr *me, QEvent const *e) { (void)e; /* suppress the compiler warning about unused parameter */ QActive_subscribe((QActive *)me, ENABLE_RELAY_SIG); QActive_subscribe((QActive *)me, DISABLE_RELAY_SIG); QActive_subscribe((QActive *)me, TERMINATE_SIG); QS_OBJ_DICTIONARY(&l_modIo2Mgr); QS_FUN_DICTIONARY(&QHsm_top); QS_FUN_DICTIONARY(&ModIo2Mgr_initial); QS_FUN_DICTIONARY(&ModIo2Mgr_running); QS_SIG_DICTIONARY(ENABLE_RELAY_SIG, 0); QS_SIG_DICTIONARY(DISABLE_RELAY_SIG, 0); QS_SIG_DICTIONARY(TERMINATE_SIG, 0); if (ModIO2_init() == Error) { LCDPutStr("Err MODIO2 init", 110, 5, LARGE, RED, WHITE); return Q_UNHANDLED(); } else { return Q_TRAN(&ModIo2Mgr_running); } }
/*${AOs::Ship::SM} .........................................................*/ static QState Ship_initial(Ship * const me, QEvt const * const e) { static struct { QMState const *target; QActionHandler act[2]; } const tatbl_ = { /* transition-action table */ &Ship_active_s, /* target state */ { Q_ACTION_CAST(&Ship_active_i), /* init.tran. */ Q_ACTION_CAST(0) /* zero terminator */ } }; /* ${AOs::Ship::SM::initial} */ (void)e; /* avoid the compiler warning 'usused parameter' */ QActive_subscribe((QActive *)me, TIME_TICK_SIG); QActive_subscribe((QActive *)me, PLAYER_TRIGGER_SIG); /* object dictionaries... */ QS_OBJ_DICTIONARY(&l_ship); /* function dictionaries for Ship HSM... */ QS_FUN_DICTIONARY(&Ship_initial); QS_FUN_DICTIONARY(&Ship_active); QS_FUN_DICTIONARY(&Ship_parked); QS_FUN_DICTIONARY(&Ship_flying); QS_FUN_DICTIONARY(&Ship_exploding); /* local signals... */ QS_SIG_DICTIONARY(PLAYER_SHIP_MOVE_SIG, &l_ship); QS_SIG_DICTIONARY(TAKE_OFF_SIG, &l_ship); QS_SIG_DICTIONARY(HIT_WALL_SIG, &l_ship); QS_SIG_DICTIONARY(HIT_MINE_SIG, &l_ship); QS_SIG_DICTIONARY(DESTROYED_MINE_SIG, &l_ship); return QM_TRAN_INIT(&tatbl_); }
/*${AOs::USBTask::SM} ......................................................*/ static QState USBTask_initial(USBTask * const me, QEvt const * const e) { /* ${AOs::USBTask::SM::initial} */ /**/ QActive_subscribe((QActive *)me, USB_DEV_ATTACH_SIG); QActive_subscribe((QActive *)me, USB_DEV_DETACH_SIG); VBUS_ON(); return Q_TRAN(&USBTask_idle); }
/* @(/1/7/6/0) */ static QState QCAN_initial(QCAN * const me, QEvt const * const e) { QActive_subscribe(&me->super, ACC_ON_SIG); QActive_subscribe(&me->super, ACC_OFF_SIG); QActive_subscribe(&me->super, WAKEUP_REQ_SIG); QActive_subscribe(&me->super, SLEEP_REQ_SIG); CAN_MemInit(); //初始化 return Q_TRAN(&QCAN_Normal_Mode); }
/** * initial transition **/ static QState MenuAO_initial(MenuAO *me, QEvent const *e) { // TODO subscribe to published events QActive_subscribe(MenuAOBase, BUTTON_SHORTPRESS_SIG); QActive_subscribe(MenuAOBase, BUTTON_LONGPRESS_SIG); QActive_subscribe(MenuAOBase, AD_VALUE_SIG); QActive_subscribe(MenuAOBase, ALARM_SIG); // Initialize RTC RTC_Init(); RTC_Start(); return Q_TRAN(&MenuAO_Idle); }
/* HSM definition ----------------------------------------------------------*/ QState UI_top_initial(UI_top *me, QEvt const *e) { (void)e; /* avoid the compiler warning about unused parameter */ /* subscribe to events... */ QActive_subscribe((QActive *)me, QUIT_SIG); me->history = (QStateHandler)&UI_num_sd_handler; /* initialize history */ /* send object dictionaries for UI objects */ QS_OBJ_DICTIONARY(&l_ui); /* send function dictionaries for UI states... */ QS_FUN_DICTIONARY(&UI_top_handler); QS_FUN_DICTIONARY(&UI_top_final); QS_FUN_DICTIONARY(&UI_num_handler); QS_FUN_DICTIONARY(&UI_num_sd_handler); QS_FUN_DICTIONARY(&UI_num_lr_handler); QS_FUN_DICTIONARY(&UI_help_handler); /* send signal dictionaries for signals specific to UI... */ QS_SIG_DICTIONARY(C_SIG, me); QS_SIG_DICTIONARY(CE_SIG, me); QS_SIG_DICTIONARY(DIGIT_0_SIG, me); QS_SIG_DICTIONARY(DIGIT_1_9_SIG, me); QS_SIG_DICTIONARY(POINT_SIG, me); QS_SIG_DICTIONARY(NEG_SIG, me); QS_SIG_DICTIONARY(ENTER_SIG, me); QS_SIG_DICTIONARY(UP_SIG, me); QS_SIG_DICTIONARY(DOWN_SIG, me); QS_SIG_DICTIONARY(HELP_SIG, me); return Q_TRAN(&UI_num_handler); }
/** * Brewing state handler */ static QState CoffeeMachineAO_Brewing(CoffeeMachineAO *me, QEvent const *e) { switch ( e->sig ) { case Q_INIT_SIG: { DBG("CoffeeMachine Brewing: INIT"); return Q_HANDLED(); } case Q_ENTRY_SIG: { DBG("CoffeeMachine Brewing: ENTRY"); QActive_subscribe((QActive *)me, BUTTON_SHORTPRESS_SIG); } case BUTTON_SHORTPRESS_SIG: { DBG("CoffeeMachine Brewing: BUTTON SHORT PRESS"); return Q_TRAN(&CoffeeMachineAO_Idle); } case Q_EXIT_SIG: { DBG("CoffeeMachine Brewing: EXIT"); QActive_unsubscribe((QActive *)me, BUTTON_SHORTPRESS_SIG); } } return Q_SUPER(&QHsm_top); }
/* @(/2/0/2/0) */ QState Philo_initial(Philo *me, QEvent const *e) { static uint8_t registered; /* starts off with 0, per C-standard */ (void)e; /* suppress the compiler warning about unused parameter */ if (!registered) { QS_OBJ_DICTIONARY(&l_philo[0]); QS_OBJ_DICTIONARY(&l_philo[0].timeEvt); QS_OBJ_DICTIONARY(&l_philo[1]); QS_OBJ_DICTIONARY(&l_philo[1].timeEvt); QS_OBJ_DICTIONARY(&l_philo[2]); QS_OBJ_DICTIONARY(&l_philo[2].timeEvt); QS_OBJ_DICTIONARY(&l_philo[3]); QS_OBJ_DICTIONARY(&l_philo[3].timeEvt); QS_OBJ_DICTIONARY(&l_philo[4]); QS_OBJ_DICTIONARY(&l_philo[4].timeEvt); QS_FUN_DICTIONARY(&Philo_initial); QS_FUN_DICTIONARY(&Philo_thinking); QS_FUN_DICTIONARY(&Philo_hungry); QS_FUN_DICTIONARY(&Philo_eating); registered = (uint8_t)1; } QS_SIG_DICTIONARY(HUNGRY_SIG, me); /* signal for each Philos */ QS_SIG_DICTIONARY(TIMEOUT_SIG, me); /* signal for each Philos */ QActive_subscribe(&me->super, EAT_SIG); return Q_TRAN(&Philo_thinking); }
/*${AOs::SerialMgr::SM} ....................................................*/ static QState SerialMgr_initial(SerialMgr * const me, QEvt const * const e) { /* ${AOs::SerialMgr::SM::initial} */ (void)e; /* suppress the compiler warning about unused parameter */ QS_OBJ_DICTIONARY(&l_SerialMgr); QS_FUN_DICTIONARY(&QHsm_top); QS_FUN_DICTIONARY(&SerialMgr_initial); QS_FUN_DICTIONARY(&SerialMgr_Active); QS_FUN_DICTIONARY(&SerialMgr_Idle); QS_FUN_DICTIONARY(&SerialMgr_Busy); QActive_subscribe((QActive *)me, UART_DMA_START_SIG); QActive_subscribe((QActive *)me, DBG_LOG_SIG); QActive_subscribe((QActive *)me, DBG_MENU_SIG); QActive_subscribe((QActive *)me, UART_DMA_DONE_SIG); QActive_subscribe((QActive *)me, UART_DMA_TIMEOUT_SIG); return Q_TRAN(&SerialMgr_Idle); }
/* @(/2/1/4/0) */ static QState Ship_initial(Ship * const me, QEvt const * const e) { (void)e; /* avoid the compiler warning 'usused parameter' */ QActive_subscribe((QActive *)me, TIME_TICK_SIG); QActive_subscribe((QActive *)me, PLAYER_TRIGGER_SIG); /* object dictionaries... */ QS_OBJ_DICTIONARY(&l_ship); /* function dictionaries for Ship HSM... */ QS_FUN_DICTIONARY(&Ship_initial); QS_FUN_DICTIONARY(&Ship_active); QS_FUN_DICTIONARY(&Ship_parked); QS_FUN_DICTIONARY(&Ship_flying); QS_FUN_DICTIONARY(&Ship_exploding); /* local signals... */ QS_SIG_DICTIONARY(PLAYER_SHIP_MOVE_SIG, &l_ship); QS_SIG_DICTIONARY(TAKE_OFF_SIG, &l_ship); QS_SIG_DICTIONARY(HIT_WALL_SIG, &l_ship); QS_SIG_DICTIONARY(HIT_MINE_SIG, &l_ship); QS_SIG_DICTIONARY(DESTROYED_MINE_SIG, &l_ship); return Q_TRAN(&Ship_active); }
/*..........................................................................*/ QState Tunnel_initial(Tunnel *me, QEvt const *e) { uint8_t n; (void)e; /* avoid the "unreferenced parameter" warning */ for (n = 0; n < GAME_MINES_MAX; ++n) { QHsm_init(me->mine1_pool[n], (QEvt *)0);/*initial tran. for Mine1 */ QHsm_init(me->mine2_pool[n], (QEvt *)0);/*initial tran. for Mine2 */ } randomSeed(1234); /* seed the pseudo-random generator */ QActive_subscribe((QActive *)me, TIME_TICK_SIG); QActive_subscribe((QActive *)me, PLAYER_TRIGGER_SIG); QActive_subscribe((QActive *)me, PLAYER_QUIT_SIG); QS_OBJ_DICTIONARY(&l_tunnel); /* object dictionary for Tunnel object */ QS_OBJ_DICTIONARY(&l_tunnel.blinkTimeEvt); QS_OBJ_DICTIONARY(&l_tunnel.screenTimeEvt); QS_FUN_DICTIONARY(&Tunnel_initial); /* fun. dictionaries for Tunnel HSM */ QS_FUN_DICTIONARY(&Tunnel_final); QS_FUN_DICTIONARY(&Tunnel_active); QS_FUN_DICTIONARY(&Tunnel_playing); QS_FUN_DICTIONARY(&Tunnel_demo); QS_FUN_DICTIONARY(&Tunnel_game_over); QS_FUN_DICTIONARY(&Tunnel_screen_saver); QS_FUN_DICTIONARY(&Tunnel_screen_saver_hide); QS_FUN_DICTIONARY(&Tunnel_screen_saver_show); QS_SIG_DICTIONARY(BLINK_TIMEOUT_SIG, &l_tunnel); /* local signals */ QS_SIG_DICTIONARY(SCREEN_TIMEOUT_SIG, &l_tunnel); QS_SIG_DICTIONARY(SHIP_IMG_SIG, &l_tunnel); QS_SIG_DICTIONARY(MISSILE_IMG_SIG, &l_tunnel); QS_SIG_DICTIONARY(MINE_IMG_SIG, &l_tunnel); QS_SIG_DICTIONARY(MINE_DISABLED_SIG, &l_tunnel); QS_SIG_DICTIONARY(EXPLOSION_SIG, &l_tunnel); QS_SIG_DICTIONARY(SCORE_SIG, &l_tunnel); return Q_TRAN(&Tunnel_demo); }
/*${AOs::FlashMgr::SM} .....................................................*/ static QState FlashMgr_initial(FlashMgr * const me, QEvt const * const e) { /* ${AOs::FlashMgr::SM::initial} */ (void)e; /* suppress the compiler warning about unused parameter */ QS_OBJ_DICTIONARY(&l_CommMgr); QS_FUN_DICTIONARY(&QHsm_top); QS_FUN_DICTIONARY(&CommMgr_initial); QS_FUN_DICTIONARY(&CommMgr_Active); QS_FUN_DICTIONARY(&CommMgr_Idle); QS_FUN_DICTIONARY(&CommMgr_Busy); QS_FUN_DICTIONARY(&CommMgr_PrepFlash); QS_FUN_DICTIONARY(&CommMgr_WaitingForFWData); QS_FUN_DICTIONARY(&CommMgr_WritingFlash); QS_FUN_DICTIONARY(&CommMgr_FinalizingFlash); QActive_subscribe((QActive *)me, FLASH_OP_START_SIG); QActive_subscribe((QActive *)me, FLASH_DATA_SIG); QActive_subscribe((QActive *)me, FLASH_DONE_SIG); QActive_subscribe((QActive *)me, FLASH_ERROR_SIG); QActive_subscribe((QActive *)me, FLASH_TIMEOUT_SIG); return Q_TRAN(&FlashMgr_Idle); }
/*..........................................................................*/ static QState Segment_initial(Segment *me, QEvent const *e) { QActive_subscribe((QActive *)me, TERMINATE_SIG); QS_OBJ_DICTIONARY(&l_segment); QS_FUN_DICTIONARY(&Segment_initial); QS_FUN_DICTIONARY(&Segment_final); QS_FUN_DICTIONARY(&Segment_idle); QS_SIG_DICTIONARY(SEG_READ_REQUEST_SIG, &l_segment); QS_SIG_DICTIONARY(SEG_WRITE_REQUEST_SIG, &l_segment); return Q_TRAN(&Segment_idle); }
/*..........................................................................*/ static QState Cache_initial(Cache *me, QEvent const *e) { QActive_subscribe((QActive *)me, TERMINATE_SIG); QS_OBJ_DICTIONARY(&l_cache); QS_FUN_DICTIONARY(&Cache_initial); QS_FUN_DICTIONARY(&Cache_final); QS_FUN_DICTIONARY(&Cache_idle); QS_FUN_DICTIONARY(&Cache_read); QS_FUN_DICTIONARY(&Cache_write); QS_SIG_DICTIONARY(CACHE_WRITE_REQUEST_SIG, &l_cache); QS_SIG_DICTIONARY(CACHE_READ_REQUEST_SIG, &l_cache); return Q_TRAN(&Cache_idle); }
/*..........................................................................*/ QState Missile_initial(Missile *me, QEvt const *e) { (void)e; /* avoid the "unreferenced parameter" warning */ QActive_subscribe((QActive *)me, TIME_TICK_SIG); QS_OBJ_DICTIONARY(&l_missile); /* object dictionary for Missile object */ QS_FUN_DICTIONARY(&Missile_initial); /* dictionaries for Missile HSM */ QS_FUN_DICTIONARY(&Missile_armed); QS_FUN_DICTIONARY(&Missile_flying); QS_FUN_DICTIONARY(&Missile_exploding); QS_SIG_DICTIONARY(MISSILE_FIRE_SIG, &l_missile); /* local signals */ QS_SIG_DICTIONARY(HIT_WALL_SIG, &l_missile); QS_SIG_DICTIONARY(DESTROYED_MINE_SIG, &l_missile); return Q_TRAN(&Missile_armed); }
/*${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); }
/*${AOs::Philo::SM} ........................................................*/ static QState Philo_initial(Philo * const me, QEvt const * const e) { static struct { QMState const *target; QActionHandler act[2]; } const tatbl_ = { /* transition-action table */ &Philo_thinking_s, /* target state */ { Q_ACTION_CAST(&Philo_thinking_e), /* entry */ Q_ACTION_CAST(0) /* zero terminator */ } }; /* ${AOs::Philo::SM::initial} */ static uint8_t registered = (uint8_t)0; /* starts off with 0, per C-standard */ (void)e; /* suppress the compiler warning about unused parameter */ if (registered == (uint8_t)0) { registered = (uint8_t)1; QS_OBJ_DICTIONARY(&l_philo[0]); QS_OBJ_DICTIONARY(&l_philo[0].timeEvt); QS_OBJ_DICTIONARY(&l_philo[1]); QS_OBJ_DICTIONARY(&l_philo[1].timeEvt); QS_OBJ_DICTIONARY(&l_philo[2]); QS_OBJ_DICTIONARY(&l_philo[2].timeEvt); QS_OBJ_DICTIONARY(&l_philo[3]); QS_OBJ_DICTIONARY(&l_philo[3].timeEvt); QS_OBJ_DICTIONARY(&l_philo[4]); QS_OBJ_DICTIONARY(&l_philo[4].timeEvt); QS_FUN_DICTIONARY(&Philo_initial); QS_FUN_DICTIONARY(&Philo_thinking); QS_FUN_DICTIONARY(&Philo_hungry); QS_FUN_DICTIONARY(&Philo_eating); } QS_SIG_DICTIONARY(HUNGRY_SIG, me); /* signal for each Philos */ QS_SIG_DICTIONARY(TIMEOUT_SIG, me); /* signal for each Philos */ QActive_subscribe(&me->super, EAT_SIG); return QM_TRAN_INIT(&tatbl_); }
/*${AOs::Missile::SM} ......................................................*/ static QState Missile_initial(Missile * const me, QEvt const * const e) { static QMTranActTable const tatbl_ = { /* transition-action table */ &Missile_armed_s, { Q_ACTION_CAST(0) /* zero terminator */ } }; /* ${AOs::Missile::SM::initial} */ (void)e; QActive_subscribe((QActive *)me, TIME_TICK_SIG); QS_OBJ_DICTIONARY(&l_missile); /* object dictionary for Missile object */ QS_FUN_DICTIONARY(&Missile_initial); /* dictionaries for Missile HSM */ QS_FUN_DICTIONARY(&Missile_armed); QS_FUN_DICTIONARY(&Missile_flying); QS_FUN_DICTIONARY(&Missile_exploding); QS_SIG_DICTIONARY(MISSILE_FIRE_SIG, &l_missile); /* local signals */ QS_SIG_DICTIONARY(HIT_WALL_SIG, &l_missile); QS_SIG_DICTIONARY(DESTROYED_MINE_SIG, &l_missile); return QM_TRAN_INIT(&tatbl_); }
/* @(/1/8/23/0) */ static QState QGprs_initial(QGprs * const me, QEvt const * const e) { /* 状态消息 */ QS_FUN_DICTIONARY(&QGprs_initialing); QS_FUN_DICTIONARY(&QGprs_initialing_stepinto); QS_FUN_DICTIONARY(&QGprs_polling); QS_FUN_DICTIONARY(&QGprs_startup); QS_FUN_DICTIONARY(&QGprs_power_on); QS_FUN_DICTIONARY(&QGprs_start_delay); QS_FUN_DICTIONARY(&QGprs_start_finished); QS_FUN_DICTIONARY(&QGprs_reseting); QS_FUN_DICTIONARY(&QGprs_initialing); QS_FUN_DICTIONARY(&QGprs_registering); QS_FUN_DICTIONARY(&QGprs_powerNormalMode); QS_FUN_DICTIONARY(&QGprs_connected); QS_FUN_DICTIONARY(&QGprs_TcpSending); QS_FUN_DICTIONARY(&QGprs_WaitFillData); QS_FUN_DICTIONARY(&QGprs_WaitRet); QS_FUN_DICTIONARY(&QGprs_Idle); QS_FUN_DICTIONARY(&QGprs_PhoneCalling); QS_FUN_DICTIONARY(&QGprs_SMSHandling); QS_FUN_DICTIONARY(&QGprs_connecting); QS_FUN_DICTIONARY(&QGprs_powerSaveMode); QS_FUN_DICTIONARY(&QGprs_sleepRequest); QS_FUN_DICTIONARY(&QGprs_sleep); QS_FUN_DICTIONARY(&QGprs_registering); QS_SIG_DICTIONARY(AT_OK_SIG, me); QS_SIG_DICTIONARY(AT_REGGED_SIG, me); QS_SIG_DICTIONARY(AT_PINREADY_SIG, me); QS_SIG_DICTIONARY(AT_NETREGGED_SIG, me); QS_SIG_DICTIONARY(AT_NETDISREG_SIG, me); QS_SIG_DICTIONARY(AT_CSQ_SIG, me); QS_SIG_DICTIONARY(AT_CONNECTED_SIG, me); QS_SIG_DICTIONARY(AT_DISCONNECTED_SIG, me); //QS_SIG_DICTIONARY(AT_DATAREADY_SIG, me); QS_SIG_DICTIONARY(AT_SENDREADY_SIG, me); QS_SIG_DICTIONARY(AT_SENDFILLDATA_SIG, me); QS_SIG_DICTIONARY(AT_ERROR_SIG, me); QS_SIG_DICTIONARY(AT_CMSERROR_SIG, me); QS_SIG_DICTIONARY(AT_CMEERROR_SIG, me); QS_SIG_DICTIONARY(AT_SENDERROR_SIG, me); QS_SIG_DICTIONARY(AT_FILLDATATIP_SIG, me); QS_SIG_DICTIONARY(AT_SENDOK_SIG, me); QS_SIG_DICTIONARY(GPRS_COMMINGMSG_SIG, me); /* AO内部消息 */ QS_SIG_DICTIONARY(Q_TIMEOUT_SIG, me); QS_SIG_DICTIONARY(GPRS_SENDREQ_SIG, me); //QS_SIG_DICTIONARY(GPRS_LED_TIMEOUT_SIG, me); //QS_SIG_DICTIONARY(GPRS_RETRIEVE_TIMEOUT_SIG, me); QS_SIG_DICTIONARY(NEW_TASKSENDREQ_SIG, me); QS_SIG_DICTIONARY(GPRS_SLEEPREQ_TIMEOUT_SIG, me); QS_SIG_DICTIONARY(GPRS_PHONECALL_HANDLED_SIG, me); QS_SIG_DICTIONARY(GPRS_SMS_HANDLED_SIG, me); QS_SIG_DICTIONARY(GPRS_COMMINGCALL_SIG, me); QS_SIG_DICTIONARY(GPRS_COMMINGSMS_SIG, me); QActive_subscribe((QActive *)me, ACC_ON_SIG); QActive_subscribe((QActive *)me, ACC_OFF_SIG); QActive_subscribe(&me->super, WAKEUP_REQ_SIG); QActive_subscribe(&me->super, SLEEP_REQ_SIG); //模块内部初始化 GPRS_Init(); me->m_ACCState = POWEROFF; me->m_NetState = NET_STATE_UNKOWN; GPRS_SetNetState(NET_STATE_UNKOWN); //网络指示灯关闭 GPRS_LED_OFF(); return Q_TRAN(&QGprs_serving); }
/** * initial transition **/ static QState CoffeeMachineAO_initial(CoffeeMachineAO *me, QEvent const *e) { QActive_subscribe((QActive *)me, ALARM_SIG); return Q_TRAN(&CoffeeMachineAO_Idle); }