/* @(/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);
}
Exemple #2
0
//............................................................................
QState Table::initial(Table *me, QEvt const *) {

    QS_OBJ_DICTIONARY(&l_table);
    QS_FUN_DICTIONARY(&QHsm::top);
    QS_FUN_DICTIONARY(&Table::initial);
    QS_FUN_DICTIONARY(&Table::serving);

    QS_SIG_DICTIONARY(DONE_SIG,      0);                     // global signals
    QS_SIG_DICTIONARY(EAT_SIG,       0);
    QS_SIG_DICTIONARY(PAUSE_SIG, 0);

    QS_SIG_DICTIONARY(HUNGRY_SIG,    me);             // signal just for Table

    GUI_Init();                                 // initialize the embedded GUI

    me->subscribe(DONE_SIG);
    me->subscribe(PAUSE_SIG);

    return Q_TRAN(&Table::ready);
}
Exemple #3
0
/*............................................................................
 QSpy needs a dictionary of all static objects.  Dictionary uses
 preprocessor macro to generate a name, so I can't just invoke each
 instance's dictionary publish method even if it exists.
 */
void declareQSDictionary() {
    uint8_t i;

    /* dictionary available in in this file: -------------------------------*/
    QS_OBJ_DICTIONARY(l_smlPoolSto);

    QS_OBJ_DICTIONARY(&l_cloop[0]);/* All active objects in this app:       */

    QS_FUN_DICTIONARY(&QHsm_top); /* An HSM always has the top pseudo state */

                                                         /* global signals: */
    QS_SIG_DICTIONARY(START, 0);
    QS_SIG_DICTIONARY(STOP, 0);

    /* dictionary available in other files: --------------------------------*/
    CLoop_declareStaticQSDictionary(); /* The static dictionary */
    for(i = 0; i < N_CLOOP; ++i) { /* Per instance dictionary */
        CLoop_declareInstanceQSDictionary(&l_cloop[i]);
    }
}
/* HSM definition ----------------------------------------------------------*/
QState NumEntry_initial(NumEntry *me, QEvt const *e) {
    (void)e;           /* avoid the compiler warning about unused parameter */

                      /* send functions dictionaries for NumEntry states... */
    QS_FUN_DICTIONARY(&NumEntry_top);
    QS_FUN_DICTIONARY(&NumEntry_negative);
    QS_FUN_DICTIONARY(&NumEntry_zero);
    QS_FUN_DICTIONARY(&NumEntry_integer);
    QS_FUN_DICTIONARY(&NumEntry_fraction);

            /* send signal dictionaries for signals specific to NumEntry... */
    QS_SIG_DICTIONARY(C_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);


    return Q_TRAN(&NumEntry_zero);
}
/*..........................................................................*/
QState LwIPMgr_initial(LwIPMgr *me, QEvt const *e) {
    uint8_t  macaddr[NETIF_MAX_HWADDR_LEN];

    (void)e;        /* suppress the compiler warning about unused parameter */

    /* Configure the hardware MAC address for the Ethernet Controller */
    macaddr[0] = MAC_ADDR0;
    macaddr[1] = MAC_ADDR1;
    macaddr[2] = MAC_ADDR2;
    macaddr[3] = MAC_ADDR3;
    macaddr[4] = MAC_ADDR4;
    macaddr[5] = MAC_ADDR5;

                                          /* initialize the Ethernet Driver */
    me->netif = eth_driver_init((QActive *)me, macaddr);

    me->ip_addr = 0x00000000U;            /* initialize to impossible value */

                                     /* initialize the lwIP applications... */
    httpd_init();         /* initialize the simple HTTP-Deamon (web server) */
    http_set_ssi_handler(&ssi_handler, ssi_tags, Q_DIM(ssi_tags));
    http_set_cgi_handlers(cgi_handlers, Q_DIM(cgi_handlers));

    me->upcb = udp_new();
    udp_bind(me->upcb, IP_ADDR_ANY, 777U);          /* use port 777 for UDP */
    udp_recv(me->upcb, &udp_rx_handler, me);

    QS_OBJ_DICTIONARY(&l_lwIPMgr);
    QS_OBJ_DICTIONARY(&l_lwIPMgr.te_LWIP_SLOW_TICK);
    QS_FUN_DICTIONARY(&QHsm_top);
    QS_FUN_DICTIONARY(&LwIPMgr_initial);
    QS_FUN_DICTIONARY(&LwIPMgr_running);

    QS_SIG_DICTIONARY(SEND_UDP_SIG,       (QActive *)me);
    QS_SIG_DICTIONARY(LWIP_SLOW_TICK_SIG, (QActive *)me);
    QS_SIG_DICTIONARY(LWIP_RX_READY_SIG,  (QActive *)me);
    QS_SIG_DICTIONARY(LWIP_TX_READY_SIG,  (QActive *)me);
    QS_SIG_DICTIONARY(LWIP_RX_OVERRUN_SIG,(QActive *)me);

    return Q_TRAN(&LwIPMgr_connecting);
}
Exemple #6
0
//............................................................................
int main(void) {

    BSP_init();                        // initialize the Board Support Package

    QF::init();       // initialize the framework and the underlying RT kernel

                                              // initialize the event pools...
    QF::poolInit(l_smlPoolSto, sizeof(l_smlPoolSto), sizeof(l_smlPoolSto[0]));
    QF::poolInit(l_medPoolSto, sizeof(l_medPoolSto), sizeof(l_medPoolSto[0]));

    QF::psInit(l_subscrSto, Q_DIM(l_subscrSto));     // init publish-subscribe

                               // send object dictionaries for event queues...
    QS_OBJ_DICTIONARY(l_missileQueueSto);
    QS_OBJ_DICTIONARY(l_shipQueueSto);
    QS_OBJ_DICTIONARY(l_tunnelQueueSto);

                                // send object dictionaries for event pools...
    QS_OBJ_DICTIONARY(l_smlPoolSto);
    QS_OBJ_DICTIONARY(l_medPoolSto);

                  // send signal dictionaries for globally published events...
    QS_SIG_DICTIONARY(TIME_TICK_SIG,      static_cast<void *>(0));
    QS_SIG_DICTIONARY(PLAYER_TRIGGER_SIG, static_cast<void *>(0));
    QS_SIG_DICTIONARY(PLAYER_QUIT_SIG,    static_cast<void *>(0));
    QS_SIG_DICTIONARY(GAME_OVER_SIG,      static_cast<void *>(0));

                                                // start the active objects...
    AO_Missile->start(1U,                                          // priority
                      l_missileQueueSto, Q_DIM(l_missileQueueSto),// evt queue
                      static_cast<void *>(0), 0U);      // no per-thread stack
    AO_Ship   ->start(2U,                                          // priority
                      l_shipQueueSto, Q_DIM(l_shipQueueSto),      // evt queue
                      static_cast<void *>(0), 0U);      // no per-thread stack
    AO_Tunnel ->start(3U,                                          // priority
                      l_tunnelQueueSto, Q_DIM(l_tunnelQueueSto),  // evt queue
                      static_cast<void *>(0), 0U);      // no per-thread stack

    return QF::run();                                // run the QF application
}
Exemple #7
0
//${AOs::Table::SM} ..........................................................
QP::QState Table::initial(Table * const me, QP::QEvt const * const e) {
    // ${AOs::Table::SM::initial}
    (void)e; // suppress the compiler warning about unused parameter

    QS_OBJ_DICTIONARY(&l_table);
    QS_FUN_DICTIONARY(&QP::QHsm::top);
    QS_FUN_DICTIONARY(&Table::initial);
    QS_FUN_DICTIONARY(&Table::active);
    QS_FUN_DICTIONARY(&Table::serving);
    QS_FUN_DICTIONARY(&Table::paused);

    QS_SIG_DICTIONARY(DONE_SIG,      (void *)0); // global signals
    QS_SIG_DICTIONARY(EAT_SIG,       (void *)0);
    QS_SIG_DICTIONARY(PAUSE_SIG,     (void *)0);
    QS_SIG_DICTIONARY(SERVE_SIG,     (void *)0);
    QS_SIG_DICTIONARY(TERMINATE_SIG, (void *)0);

    QS_SIG_DICTIONARY(HUNGRY_SIG,    me); // signal just for Table

    me->subscribe(DONE_SIG);
    me->subscribe(PAUSE_SIG);
    me->subscribe(SERVE_SIG);
    me->subscribe(TERMINATE_SIG);

    for (uint8_t n = 0U; n < N_PHILO; ++n) {
        me->m_fork[n] = FREE;
        me->m_isHungry[n] = false;
        BSP::displayPhilStat(n, THINKING);
    }
    return Q_TRAN(&serving);
}
Exemple #8
0
//${AOs::Table::SM} ..........................................................
QP::QState Table::initial(Table * const me, QP::QEvt const * const e) {
    static struct {
        QP::QMState const *target;
        QP::QActionHandler act[2];
    } const tatbl_ = { // transition-action table
        &serving_s,
        {
            Q_ACTION_CAST(&serving_e), // entry
            Q_ACTION_CAST(0)  // zero terminator
        }
    };
    // ${AOs::Table::SM::initial}
    (void)e; // suppress the compiler warning about unused parameter

    QS_OBJ_DICTIONARY(&l_table);
    QS_FUN_DICTIONARY(&QP::QHsm::top);
    QS_FUN_DICTIONARY(&Table::initial);
    QS_FUN_DICTIONARY(&Table::active);
    QS_FUN_DICTIONARY(&Table::serving);
    QS_FUN_DICTIONARY(&Table::paused);

    QS_SIG_DICTIONARY(DONE_SIG,      (void *)0); // global signals
    QS_SIG_DICTIONARY(EAT_SIG,       (void *)0);
    QS_SIG_DICTIONARY(PAUSE_SIG,     (void *)0);
    QS_SIG_DICTIONARY(TERMINATE_SIG, (void *)0);

    QS_SIG_DICTIONARY(HUNGRY_SIG,    me); // signal just for Table

    me->subscribe(DONE_SIG);
    me->subscribe(PAUSE_SIG);
    me->subscribe(TERMINATE_SIG);

    for (uint8_t n = 0U; n < N_PHILO; ++n) {
        me->m_fork[n] = FREE;
        me->m_isHungry[n] = false;
        BSP_displayPhilStat(n, THINKING);
    }
    return QM_TRAN_INIT(&tatbl_);
}
Exemple #9
0
/*${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_);
}
Exemple #10
0
//............................................................................
QState Table::initial(Table *me, QEvt const *) {

    QS_OBJ_DICTIONARY(&l_table);
    QS_FUN_DICTIONARY(&QHsm::top);
    QS_FUN_DICTIONARY(&Table::initial);
    QS_FUN_DICTIONARY(&Table::serving);
    QS_SIG_DICTIONARY(HUNGRY_SIG, me);                     // signal for Table

    me->subscribe(DONE_SIG);
    me->subscribe(TERMINATE_SIG);

    return Q_TRAN(&Table::serving);
}
Exemple #11
0
//${Comp::Philo::SM} .........................................................
Q_STATE_DEF(Philo, initial) {
    //${Comp::Philo::SM::initial}
    static bool registered = false; // starts off with 0, per C-standard
    (void)e; // suppress the compiler warning about unused parameter
    if (!registered) {
        registered = true;
        QS_FUN_DICTIONARY(&initial);
        QS_FUN_DICTIONARY(&thinking);
        QS_FUN_DICTIONARY(&hungry);
        QS_FUN_DICTIONARY(&eating);
    }
    QS_SIG_DICTIONARY(HUNGRY_SIG, this);  // signal for each Philo
    return tran(&thinking);
}
Exemple #12
0
/*${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_);
}
Exemple #13
0
/*${AOs::Mine2::SM} ........................................................*/
static QState Mine2_initial(Mine2 * const me, QEvt const * const e) {
    static QMTranActTable const tatbl_ = { /* transition-action table */
        &Mine2_unused_s,
        {
            Q_ACTION_CAST(0) /* zero terminator */
        }
    };
    /* ${AOs::Mine2::SM::initial} */
    static  uint8_t dict_sent;

    if (!dict_sent) {
        /* object dictionaries for Mine2 pool... */
        QS_OBJ_DICTIONARY(&l_mine2[0]);
        QS_OBJ_DICTIONARY(&l_mine2[1]);
        QS_OBJ_DICTIONARY(&l_mine2[2]);
        QS_OBJ_DICTIONARY(&l_mine2[3]);
        QS_OBJ_DICTIONARY(&l_mine2[4]);

        /*function dictionaries for Mine2 HSM... */
        QS_FUN_DICTIONARY(&Mine2_initial);
        QS_FUN_DICTIONARY(&Mine2_unused);
        QS_FUN_DICTIONARY(&Mine2_used);
        QS_FUN_DICTIONARY(&Mine2_planted);
        QS_FUN_DICTIONARY(&Mine2_exploding);

        dict_sent = 1U;
    }
    /* local signals... */
    QS_SIG_DICTIONARY(MINE_PLANT_SIG,    me);
    QS_SIG_DICTIONARY(MINE_DISABLED_SIG, me);
    QS_SIG_DICTIONARY(MINE_RECYCLE_SIG,  me);
    QS_SIG_DICTIONARY(SHIP_IMG_SIG,      me);
    QS_SIG_DICTIONARY(MISSILE_IMG_SIG,   me);

    (void)e; /* avoid the "unreferenced parameter" warning */
    return QM_TRAN_INIT(&tatbl_);
}
Exemple #14
0
/*..........................................................................*/
static QHsm *Entry_ctor(raid5_entry_t *rentry)
{
	Entry *me;
	Entry *entry;

	/* allocate the memory */
	me = entry = entry_alloc();
	Q_ASSERT(me != NULL);

	QS_OBJ_DICTIONARY(entry);
	/* QS_OBJ_DICTIONARY(entry->x); */
	
	QS_SIG_DICTIONARY(DIR_REQUEST_SIG, me);
	QS_SIG_DICTIONARY(DIR_UPDATE_SIG,  me);
	QS_SIG_DICTIONARY(DIR_INSERT_SIG,  me);
	
	/* adding free list */
	list_add_tail(&me->entry, &rentry->free);
	
	/* call QHsm */
	QHsm_ctor(&me->super, (QStateHandler)&Entry_initial);

	return &me->super;
}
Exemple #15
0
/*..........................................................................*/
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);
}
Exemple #16
0
//$endskip${QP_VERSION} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//$define${HSMs::QHsmTst} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//${HSMs::QHsmTst} ...........................................................
//${HSMs::QHsmTst::SM} .......................................................
Q_STATE_DEF(QHsmTst, initial) {
    //${HSMs::QHsmTst::SM::initial}
    (void)e; // avoid compiler warning
    m_foo = 0U;
    BSP_display("top-INIT;");

    QS_SIG_DICTIONARY(A_SIG, this);
    QS_SIG_DICTIONARY(B_SIG, this);
    QS_SIG_DICTIONARY(C_SIG, this);
    QS_SIG_DICTIONARY(D_SIG, this);
    QS_SIG_DICTIONARY(E_SIG, this);
    QS_SIG_DICTIONARY(F_SIG, this);
    QS_SIG_DICTIONARY(G_SIG, this);
    QS_SIG_DICTIONARY(H_SIG, this);
    QS_SIG_DICTIONARY(I_SIG, this);
    QS_SIG_DICTIONARY(TERMINATE_SIG, this);
    QS_SIG_DICTIONARY(IGNORE_SIG, this);

    QS_FUN_DICTIONARY(&s);
    QS_FUN_DICTIONARY(&s1);
    QS_FUN_DICTIONARY(&s11);
    QS_FUN_DICTIONARY(&s2);
    QS_FUN_DICTIONARY(&s21);
    QS_FUN_DICTIONARY(&s211);

    return tran(&s2);
}
Exemple #17
0
/* @(/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);
}