Esempio n. 1
0
/*******************************************************************************
**
** Function         bta_hd_sm_execute
**
** Description      State machine event handling function for HID Device
**
** Returns          void
**
*******************************************************************************/
void bta_hd_sm_execute(UINT16 event, tBTA_HD_DATA * p_data)
{
    tBTA_HD_ST_TBL  state_table;
    tBTA_HD_STATE   prev_state;
    UINT8           action;
    tBTA_HD         cback_data;
    tBTA_HD_EVT     cback_event = 0;

    APPL_TRACE_EVENT5("%s: state=%s (%d) event=%s (%d)", __FUNCTION__,
        bta_hd_state_code(bta_hd_cb.state), bta_hd_cb.state,
        bta_hd_evt_code(event), event);

    prev_state = bta_hd_cb.state;

    memset(&cback_data, 0, sizeof(tBTA_HD));

    state_table = bta_hd_st_tbl[bta_hd_cb.state];

    event &= 0xff;

    if ((action = state_table[event][BTA_HD_ACTION]) != BTA_HD_IGNORE)
    {
        (*bta_hd_action[action])(p_data);
    }

    bta_hd_cb.state = state_table[event][BTA_HD_NEXT_STATE] ;

    if (bta_hd_cb.state != prev_state)
    {
        APPL_TRACE_EVENT3("%s: [new] state=%s (%d)", __FUNCTION__,
            bta_hd_state_code(bta_hd_cb.state), bta_hd_cb.state);
    }

    return;
}
Esempio n. 2
0
/*******************************************************************************
**
** Function         bta_ag_sm_execute
**
** Description      State machine event handling function for AG
**
**
** Returns          void
**
*******************************************************************************/
void bta_ag_sm_execute(tBTA_AG_SCB *p_scb, UINT16 event, tBTA_AG_DATA *p_data)
{
    tBTA_AG_ST_TBL      state_table;
    UINT8               action;
    int                 i;

#if BTA_AG_DEBUG == TRUE
    UINT16  in_event = event;
    UINT8   in_state = p_scb->state;

    /* Ignore displaying of AT results when not connected (Ignored in state machine) */
    if (in_event != BTA_AG_API_RESULT_EVT || p_scb->state == BTA_AG_OPEN_ST)
    {
        APPL_TRACE_EVENT5("AG evt (hdl 0x%04x): State %d (%s), Event 0x%04x (%s)",
                           bta_ag_scb_to_idx(p_scb),
                           p_scb->state, bta_ag_state_str(p_scb->state),
                           event, bta_ag_evt_str(event, p_data->api_result.result));
    }
#else
    APPL_TRACE_EVENT3("AG evt (hdl 0x%04x): State %d, Event 0x%04x",
                      bta_ag_scb_to_idx(p_scb), p_scb->state, event);
#endif

    event &= 0x00FF;
    if (event >= (BTA_AG_MAX_EVT & 0x00FF))
    {
        APPL_TRACE_ERROR0("AG evt out of range, ignoring...");
        return;
    }

    /* look up the state table for the current state */
    state_table = bta_ag_st_tbl[p_scb->state];

    /* set next state */
    p_scb->state = state_table[event][BTA_AG_NEXT_STATE];

    /* execute action functions */
    for (i = 0; i < BTA_AG_ACTIONS; i++)
    {
        if ((action = state_table[event][i]) != BTA_AG_IGNORE)
        {
            (*bta_ag_action[action])(p_scb, p_data);
        }
        else
        {
            break;
        }
    }
#if BTA_AG_DEBUG == TRUE
    if (p_scb->state != in_state)
    {
        APPL_TRACE_EVENT3("BTA AG State Change: [%s] -> [%s] after Event [%s]",
                      bta_ag_state_str(in_state),
                      bta_ag_state_str(p_scb->state),
                      bta_ag_evt_str(in_event, p_data->api_result.result));
    }
#endif
}