/*******************************************************************************
**
** Function         rw_t2t_conn_cback
**
** Description      This callback function receives events/data from NFCC.
**
** Returns          none
**
*******************************************************************************/
void rw_t2t_conn_cback (UINT8 conn_id, tNFC_CONN_EVT event, tNFC_CONN *p_data)
{
    tRW_T2T_CB  *p_t2t  = &rw_cb.tcb.t2t;
    tRW_READ_DATA       evt_data;

    RW_TRACE_DEBUG2 ("rw_t2t_conn_cback: conn_id=%i, evt=%i", conn_id, event);
    /* Only handle static conn_id */
    if (conn_id != NFC_RF_CONN_ID)
    {
        return;
    }

    switch (event)
    {
    case NFC_CONN_CREATE_CEVT:
    case NFC_CONN_CLOSE_CEVT:
        break;

    case NFC_DEACTIVATE_CEVT:
#if (defined (RW_STATS_INCLUDED) && (RW_STATS_INCLUDED == TRUE))
        /* Display stats */
        rw_main_log_stats ();
#endif
        /* Stop t2t timer (if started) */
        nfc_stop_quick_timer (&p_t2t->t2_timer);

        /* Free cmd buf for retransmissions */
        if (p_t2t->p_cur_cmd_buf)
        {
            GKI_freebuf (p_t2t->p_cur_cmd_buf);
            p_t2t->p_cur_cmd_buf = NULL;
        }
        /* Free cmd buf used to hold command before sector change */
        if (p_t2t->p_sec_cmd_buf)
        {
            GKI_freebuf (p_t2t->p_sec_cmd_buf);
            p_t2t->p_sec_cmd_buf = NULL;
        }

        p_t2t->state = RW_T2T_STATE_NOT_ACTIVATED;
        NFC_SetStaticRfCback (NULL);
        break;

    case NFC_DATA_CEVT:
        if (  (p_data != NULL)
            &&(  (p_data->data.status == NFC_STATUS_OK)
               ||(p_data->data.status == NFC_STATUS_CONTINUE)  )  )
        {
            rw_t2t_proc_data (conn_id, &(p_data->data));
            break;
        }
        /* Data event with error status...fall through to NFC_ERROR_CEVT case */

    case NFC_ERROR_CEVT:
        if (  (p_t2t->state == RW_T2T_STATE_NOT_ACTIVATED)
            ||(p_t2t->state == RW_T2T_STATE_IDLE)
            ||(p_t2t->state == RW_T2T_STATE_HALT)  )
        {
#if (defined (RW_STATS_INCLUDED) && (RW_STATS_INCLUDED == TRUE))
            rw_main_update_trans_error_stats ();
#endif  /* RW_STATS_INCLUDED */
            if (event == NFC_ERROR_CEVT)
                evt_data.status = (tNFC_STATUS) (*(UINT8*) p_data);
            else if (p_data)
                evt_data.status = p_data->status;
            else
                evt_data.status = NFC_STATUS_FAILED;

            evt_data.p_data = NULL;
            (*rw_cb.p_cback) (RW_T2T_INTF_ERROR_EVT, (tRW_DATA *) &evt_data);
            break;
        }
        nfc_stop_quick_timer (&p_t2t->t2_timer);
#if (defined (RW_STATS_INCLUDED) && (RW_STATS_INCLUDED == TRUE))
        rw_main_update_trans_error_stats ();
#endif
        if (p_t2t->state == RW_T2T_STATE_CHECK_PRESENCE)
        {
            if (p_t2t->check_tag_halt)
            {
                p_t2t->state = RW_T2T_STATE_HALT;
                rw_t2t_handle_presence_check_rsp (NFC_STATUS_REJECTED);
            }
            else
            {
                /* Move back to idle state */
                rw_t2t_handle_presence_check_rsp (NFC_STATUS_FAILED);
            }
        }
        else
        {
            rw_t2t_process_error ();
        }
#if(NFC_NXP_NOT_OPEN_INCLUDED == TRUE)
        /* Free the response buffer in case of invalid response*/
        if (p_data != NULL) {
                GKI_freebuf((BT_HDR *) (p_data->data.p_data));
        }
#endif
        break;

    default:
        break;

    }
}
Beispiel #2
0
/*******************************************************************************
**
** Function         rw_t1t_conn_cback
**
** Description      This callback function receives the events/data from NFCC.
**
** Returns          none
**
*******************************************************************************/
void rw_t1t_conn_cback (UINT8 conn_id, tNFC_CONN_EVT event, tNFC_CONN *p_data)
{
    tRW_T1T_CB          *p_t1t  = &rw_cb.tcb.t1t;
    tRW_READ_DATA       evt_data;

    RW_TRACE_DEBUG2 ("rw_t1t_conn_cback: conn_id=%i, evt=0x%x", conn_id, event);
    /* Only handle static conn_id */
    if (conn_id != NFC_RF_CONN_ID)
    {
        RW_TRACE_WARNING1 ("rw_t1t_conn_cback - Not static connection id: =%i", conn_id);
        return;
    }

    switch (event)
    {
    case NFC_CONN_CREATE_CEVT:
    case NFC_CONN_CLOSE_CEVT:
        break;

    case NFC_DEACTIVATE_CEVT:
#if (defined (RW_STATS_INCLUDED) && (RW_STATS_INCLUDED == TRUE))
        /* Display stats */
        rw_main_log_stats ();
#endif  /* RW_STATS_INCLUDED */

        /* Stop t1t timer (if started) */
        nfc_stop_quick_timer (&p_t1t->timer);

        /* Free cmd buf for retransmissions */
        if (p_t1t->p_cur_cmd_buf)
        {
            GKI_freebuf (p_t1t->p_cur_cmd_buf);
            p_t1t->p_cur_cmd_buf = NULL;
        }

        p_t1t->state = RW_T1T_STATE_NOT_ACTIVATED;
        NFC_SetStaticRfCback (NULL);
        break;

    case NFC_DATA_CEVT:
        if (  (p_data != NULL)
            &&(p_data->data.status == NFC_STATUS_OK)  )
        {
            rw_t1t_data_cback (conn_id, event, p_data);
            break;
        }
        /* Data event with error status...fall through to NFC_ERROR_CEVT case */

    case NFC_ERROR_CEVT:
        if (  (p_t1t->state == RW_T1T_STATE_NOT_ACTIVATED)
            ||(p_t1t->state == RW_T1T_STATE_IDLE)  )
        {
#if (defined (RW_STATS_INCLUDED) && (RW_STATS_INCLUDED == TRUE))
            rw_main_update_trans_error_stats ();
#endif  /* RW_STATS_INCLUDED */

            if (event == NFC_ERROR_CEVT)
                evt_data.status = (tNFC_STATUS) (*(UINT8*) p_data);
            else if (p_data)
                evt_data.status = p_data->status;
            else
                evt_data.status = NFC_STATUS_FAILED;

            evt_data.p_data = NULL;
            (*rw_cb.p_cback) (RW_T1T_INTF_ERROR_EVT, (tRW_DATA *) &evt_data);
            break;
        }
        nfc_stop_quick_timer (&p_t1t->timer);

#if (defined (RW_STATS_INCLUDED) && (RW_STATS_INCLUDED == TRUE))
        rw_main_update_trans_error_stats ();
#endif  /* RW_STATS_INCLUDED */

        if (p_t1t->state == RW_T1T_STATE_CHECK_PRESENCE)
        {
            rw_t1t_handle_presence_check_rsp (NFC_STATUS_FAILED);
        }
        else
        {
            rw_t1t_process_error ();
        }
        break;

    default:
        break;

    }
}