1e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/****************************************************************************** 2e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 3e9629bad30a9f478b336ab46b8e6e02f7f87af46Evan Chu * Copyright (C) 2010-2014 Broadcom Corporation 4e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 5e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 6e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * you may not use this file except in compliance with the License. 7e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * You may obtain a copy of the License at: 8e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 9e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 11e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * See the License for the specific language governing permissions and 15e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * limitations under the License. 16e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 17e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/ 18e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 195c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 20e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/****************************************************************************** 21e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 22e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * This file contains function of the NFC unit to receive/process NCI 23e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * commands. 24e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 25e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/ 26e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include <string.h> 27e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfc_target.h" 28e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "bt_types.h" 29e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "gki.h" 30e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 31e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if NFC_INCLUDED == TRUE 32e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nci_defs.h" 33e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nci_hmsgs.h" 34e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfc_api.h" 35e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfc_int.h" 36e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 37e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 38e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 39e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nci_proc_core_rsp 40e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 41e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Process NCI responses in the CORE group 42e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 43e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns TRUE-caller of this function to free the GKI buffer p_msg 44e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 45e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 46e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBOOLEAN nci_proc_core_rsp (BT_HDR *p_msg) 47e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 48e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *p; 49e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *pp, len, op_code; 50e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BOOLEAN free = TRUE; 51e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *p_old = nfc_cb.last_cmd; 52e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 53e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* find the start of the NCI message and parse the NCI header */ 54e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p = (UINT8 *) (p_msg + 1) + p_msg->offset; 55e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pp = p+1; 56e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NCI_MSG_PRS_HDR1 (pp, op_code); 57e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_TRACE_DEBUG1 ("nci_proc_core_rsp opcode:0x%x", op_code); 58e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project len = *pp++; 59e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 60e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* process the message based on the opcode and message type */ 61e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (op_code) 62e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 63e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NCI_MSG_CORE_RESET: 64e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_proc_reset_rsp (pp, FALSE); 65e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 66e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 67e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NCI_MSG_CORE_INIT: 68e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_proc_init_rsp (p_msg); 69e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project free = FALSE; 70e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 71e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 72e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NCI_MSG_CORE_GET_CONFIG: 73e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_proc_get_config_rsp (p_msg); 74e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 75e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 76e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NCI_MSG_CORE_SET_CONFIG: 77e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_set_config_status (pp, len); 78e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 79e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 80e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NCI_MSG_CORE_CONN_CREATE: 81e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_proc_conn_create_rsp (p, p_msg->len, *p_old); 82e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 83e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 84e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NCI_MSG_CORE_CONN_CLOSE: 85e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_report_conn_close_evt (*p_old, *pp); 86e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 87e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 88e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project default: 89e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_TRACE_ERROR1 ("unknown opcode:0x%x", op_code); 90e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 91e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 92e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 93e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return free; 94e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 95e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 96e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 97e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 98e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nci_proc_core_ntf 99e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Process NCI notifications in the CORE group 101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 105e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nci_proc_core_ntf (BT_HDR *p_msg) 106e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 107e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *p; 108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *pp, len, op_code; 109e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 conn_id; 110e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 111e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* find the start of the NCI message and parse the NCI header */ 112e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p = (UINT8 *) (p_msg + 1) + p_msg->offset; 113e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pp = p+1; 114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NCI_MSG_PRS_HDR1 (pp, op_code); 115e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_TRACE_DEBUG1 ("nci_proc_core_ntf opcode:0x%x", op_code); 116e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project len = *pp++; 117e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 118e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* process the message based on the opcode and message type */ 119e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (op_code) 120e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 121e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NCI_MSG_CORE_RESET: 122e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_proc_reset_rsp (pp, TRUE); 123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NCI_MSG_CORE_GEN_ERR_STATUS: 126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* process the error ntf */ 127e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* in case of timeout: notify the static connection callback */ 128e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_event_status (NFC_GEN_ERROR_REVT, *pp); 129e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_error_status (NFC_RF_CONN_ID, *pp); 130e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 131e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 132e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NCI_MSG_CORE_INTF_ERR_STATUS: 133e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project conn_id = *(pp+1); 134e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_error_status (conn_id, *pp); 135e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 136e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 137e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NCI_MSG_CORE_CONN_CREDITS: 138e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_proc_credits(pp, len); 139e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 140e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 141e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project default: 142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_TRACE_ERROR1 ("unknown opcode:0x%x", op_code); 143e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 144e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 145e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 146e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 147e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 148e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 149e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 150e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nci_proc_rf_management_rsp 151e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 152e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Process NCI responses in the RF Management group 153e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 154e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 155e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 156e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 157e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nci_proc_rf_management_rsp (BT_HDR *p_msg) 158e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 159e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *p; 160e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *pp, len, op_code; 161e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *p_old = nfc_cb.last_cmd; 162e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 163e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* find the start of the NCI message and parse the NCI header */ 164e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p = (UINT8 *) (p_msg + 1) + p_msg->offset; 165e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pp = p+1; 166e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NCI_MSG_PRS_HDR1 (pp, op_code); 167e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project len = *pp++; 168e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 169e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (op_code) 170e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 171e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NCI_MSG_RF_DISCOVER: 172e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_rf_management_status (NFC_START_DEVT, *pp); 173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 174e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 175e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NCI_MSG_RF_DISCOVER_SELECT: 176e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_rf_management_status (NFC_SELECT_DEVT, *pp); 177e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 178e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 179e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NCI_MSG_RF_T3T_POLLING: 180e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 181e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 182e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NCI_MSG_RF_DISCOVER_MAP: 183e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_rf_management_status (NFC_MAP_DEVT, *pp); 184e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 185e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 186e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NCI_MSG_RF_DEACTIVATE: 187e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_proc_deactivate (*pp, *p_old, FALSE); 188e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 189e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 190e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (NFC_NFCEE_INCLUDED == TRUE) 191e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (NFC_RW_ONLY == FALSE) 192e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 193e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NCI_MSG_RF_SET_ROUTING: 194e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_event_status (NFC_SET_ROUTING_REVT, *pp); 195e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 196e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 197e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NCI_MSG_RF_GET_ROUTING: 198e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (*pp != NFC_STATUS_OK) 199e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_event_status (NFC_GET_ROUTING_REVT, *pp); 200e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 201e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif 202e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif 203e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 204e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NCI_MSG_RF_PARAMETER_UPDATE: 205e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_event_status (NFC_RF_COMM_PARAMS_UPDATE_REVT, *pp); 206e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 207e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 208e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project default: 209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_TRACE_ERROR1 ("unknown opcode:0x%x", op_code); 210e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 211e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 212e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 213e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 215e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 216e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nci_proc_rf_management_ntf 217e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 218e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Process NCI notifications in the RF Management group 219e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 220e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 221e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 222e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 223e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nci_proc_rf_management_ntf (BT_HDR *p_msg) 224e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 225e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *p; 226e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *pp, len, op_code; 227e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 228e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* find the start of the NCI message and parse the NCI header */ 229e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p = (UINT8 *) (p_msg + 1) + p_msg->offset; 230e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pp = p+1; 231e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NCI_MSG_PRS_HDR1 (pp, op_code); 232e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project len = *pp++; 233e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 234e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (op_code) 235e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 236e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NCI_MSG_RF_DISCOVER : 237e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_proc_discover_ntf (p, p_msg->len); 238e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 239e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 240e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NCI_MSG_RF_DEACTIVATE: 241e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_proc_deactivate (NFC_STATUS_OK, *pp, TRUE); 242e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 243e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 244e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NCI_MSG_RF_INTF_ACTIVATED: 245e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_proc_activate (pp, len); 246e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 247e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 248e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NCI_MSG_RF_FIELD: 249e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_proc_rf_field_ntf (*pp); 250e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 251e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 252e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NCI_MSG_RF_T3T_POLLING: 253e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_proc_t3t_polling_ntf (pp, len); 254e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 255e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 256e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (NFC_NFCEE_INCLUDED == TRUE) 257e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (NFC_RW_ONLY == FALSE) 258e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 259e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NCI_MSG_RF_GET_ROUTING: 260e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_proc_get_routing (pp, len); 261e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 262e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 263e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NCI_MSG_RF_EE_ACTION: 264e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_proc_ee_action (pp, len); 265e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 266e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 267e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NCI_MSG_RF_EE_DISCOVERY_REQ: 268e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_proc_ee_discover_req (pp, len); 269e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 270e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif 271e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif 272e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 273e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project default: 274e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_TRACE_ERROR1 ("unknown opcode:0x%x", op_code); 275e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 276e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 277e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 278e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 279e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (NFC_NFCEE_INCLUDED == TRUE) 280e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (NFC_RW_ONLY == FALSE) 281e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 282e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 283e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 284e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nci_proc_ee_management_rsp 285e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 286e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Process NCI responses in the NFCEE Management group 287e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 288e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 289e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 290e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 291e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nci_proc_ee_management_rsp (BT_HDR *p_msg) 292e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 293e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *p; 294e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *pp, len, op_code; 295e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFC_RESPONSE_CBACK *p_cback = nfc_cb.p_resp_cback; 296e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFC_NFCEE_DISCOVER_REVT nfcee_discover; 297e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFC_NFCEE_INFO_REVT nfcee_info; 298e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFC_NFCEE_MODE_SET_REVT mode_set; 299e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFC_RESPONSE *p_evt = (tNFC_RESPONSE *) &nfcee_info; 300e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFC_RESPONSE_EVT event = NFC_NFCEE_INFO_REVT; 301e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *p_old = nfc_cb.last_cmd; 302e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 303e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* find the start of the NCI message and parse the NCI header */ 304e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p = (UINT8 *) (p_msg + 1) + p_msg->offset; 305e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pp = p+1; 306e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NCI_MSG_PRS_HDR1 (pp, op_code); 307e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_TRACE_DEBUG1 ("nci_proc_ee_management_rsp opcode:0x%x", op_code); 308e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project len = *pp++; 309e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 310e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (op_code) 311e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 312e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NCI_MSG_NFCEE_DISCOVER: 313e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_evt = (tNFC_RESPONSE *) &nfcee_discover; 314e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfcee_discover.status = *pp++; 315e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfcee_discover.num_nfcee = *pp++; 316e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 317e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfcee_discover.status != NFC_STATUS_OK) 318e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfcee_discover.num_nfcee = 0; 319e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 320e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project event = NFC_NFCEE_DISCOVER_REVT; 321e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 322e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 323e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NCI_MSG_NFCEE_MODE_SET: 324e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_evt = (tNFC_RESPONSE *) &mode_set; 325e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mode_set.status = *pp; 326e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mode_set.nfcee_id = 0; 327e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project event = NFC_NFCEE_MODE_SET_REVT; 328e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mode_set.nfcee_id = *p_old++; 329e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mode_set.mode = *p_old++; 330e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 331e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 332e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project default: 333e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_cback = NULL; 334e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_TRACE_ERROR1 ("unknown opcode:0x%x", op_code); 335e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 336e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 337e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 338e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_cback) 339e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project (*p_cback) (event, p_evt); 340e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 341e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 342e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 343e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 344e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nci_proc_ee_management_ntf 345e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 346e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Process NCI notifications in the NFCEE Management group 347e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 348e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 349e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 350e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 351e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nci_proc_ee_management_ntf (BT_HDR *p_msg) 352e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 353e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *p; 354e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *pp, len, op_code; 355e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFC_RESPONSE_CBACK *p_cback = nfc_cb.p_resp_cback; 356e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFC_NFCEE_INFO_REVT nfcee_info; 357e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFC_RESPONSE *p_evt = (tNFC_RESPONSE *) &nfcee_info; 358e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFC_RESPONSE_EVT event = NFC_NFCEE_INFO_REVT; 359e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 xx; 360e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 yy; 361e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 ee_status; 362e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFC_NFCEE_TLV *p_tlv; 363e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 364e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* find the start of the NCI message and parse the NCI header */ 365e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p = (UINT8 *) (p_msg + 1) + p_msg->offset; 366e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pp = p+1; 367e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NCI_MSG_PRS_HDR1 (pp, op_code); 368e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_TRACE_DEBUG1 ("nci_proc_ee_management_ntf opcode:0x%x", op_code); 369e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project len = *pp++; 370e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 371e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (op_code == NCI_MSG_NFCEE_DISCOVER) 372e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 373e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfcee_info.nfcee_id = *pp++; 374e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ee_status = *pp++; 375e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 376e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfcee_info.ee_status = ee_status; 377e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project yy = *pp; 378e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfcee_info.num_interface = *pp++; 379e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p = pp; 380e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 381e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfcee_info.num_interface > NFC_MAX_EE_INTERFACE) 382e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfcee_info.num_interface = NFC_MAX_EE_INTERFACE; 383e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 384e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (xx = 0; xx < nfcee_info.num_interface; xx++) 385e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 386e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfcee_info.ee_interface[xx] = *pp++; 387e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 388e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 389e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pp = p + yy; 390e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfcee_info.num_tlvs = *pp++; 391e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_TRACE_DEBUG4 ("nfcee_id: 0x%x num_interface:0x%x/0x%x, num_tlvs:0x%x", 392e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfcee_info.nfcee_id, nfcee_info.num_interface, yy, nfcee_info.num_tlvs); 393e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 394e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfcee_info.num_tlvs > NFC_MAX_EE_TLVS) 395e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfcee_info.num_tlvs = NFC_MAX_EE_TLVS; 396e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 397e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_tlv = &nfcee_info.ee_tlv[0]; 398e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 399e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (xx = 0; xx < nfcee_info.num_tlvs; xx++, p_tlv++) 400e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 401e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_tlv->tag = *pp++; 402e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_tlv->len = yy = *pp++; 403e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_TRACE_DEBUG2 ("tag:0x%x, len:0x%x", p_tlv->tag, p_tlv->len); 404e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_tlv->len > NFC_MAX_EE_INFO) 405e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_tlv->len = NFC_MAX_EE_INFO; 406e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p = pp; 407e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project STREAM_TO_ARRAY (p_tlv->info, pp, p_tlv->len); 408e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pp = p += yy; 409e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 410e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 411e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 412e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 413e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_cback = NULL; 414e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_TRACE_ERROR1 ("unknown opcode:0x%x", op_code); 415e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 416e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 417e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_cback) 418e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project (*p_cback) (event, p_evt); 419e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 420e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 421e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif 422e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif 423e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 424e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 425e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 426e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nci_proc_prop_rsp 427e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 428e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Process NCI responses in the Proprietary group 429e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 430e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 431e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 432e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 433e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nci_proc_prop_rsp (BT_HDR *p_msg) 434e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 435e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *p; 436e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *p_evt; 437e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *pp, len, op_code; 438e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFC_VS_CBACK *p_cback = (tNFC_VS_CBACK *)nfc_cb.p_vsc_cback; 439e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 440e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* find the start of the NCI message and parse the NCI header */ 441e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p = p_evt = (UINT8 *) (p_msg + 1) + p_msg->offset; 442e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pp = p+1; 443e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NCI_MSG_PRS_HDR1 (pp, op_code); 444e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project len = *pp++; 445e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 446e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /*If there's a pending/stored command, restore the associated address of the callback function */ 447e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_cback) 448e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project (*p_cback) ((tNFC_VS_EVT) (NCI_RSP_BIT|op_code), p_msg->len, p_evt); 449e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 450e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 451e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 452e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 453e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nci_proc_prop_ntf 454e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 455e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Process NCI notifications in the Proprietary group 456e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 457e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 458e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 459e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 460e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid nci_proc_prop_ntf (BT_HDR *p_msg) 461e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 462e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *p; 463e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *p_evt; 464e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *pp, len, op_code; 465e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int i; 466e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 467e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* find the start of the NCI message and parse the NCI header */ 468e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p = p_evt = (UINT8 *) (p_msg + 1) + p_msg->offset; 469e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pp = p+1; 470e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NCI_MSG_PRS_HDR1 (pp, op_code); 471e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project len = *pp++; 472e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 473e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (i = 0; i < NFC_NUM_VS_CBACKS; i++) 474e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 475e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfc_cb.p_vs_cb[i]) 476e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 477e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project (*nfc_cb.p_vs_cb[i]) ((tNFC_VS_EVT) (NCI_NTF_BIT|op_code), p_msg->len, p_evt); 478e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 479e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 480e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 481e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 482e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* NFC_INCLUDED == TRUE*/ 483