1e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/****************************************************************************** 2e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 3e9629bad30a9f478b336ab46b8e6e02f7f87af46Evan Chu * Copyright (C) 2009-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 functions that interface with the NFC NCI transport. 23e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * On the receive side, it routes events to the appropriate handler 24e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * (callback). On the transmit side, it manages the command transmission. 25e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 26e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/ 27e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include <string.h> 28e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfc_target.h" 29e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "bt_types.h" 30e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 31e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (NFC_INCLUDED == TRUE) 32e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfc_api.h" 33e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nci_hmsgs.h" 34e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "ce_api.h" 35e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "ce_int.h" 36e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "gki.h" 37e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 38e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttCE_CB ce_cb; 39e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 40e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 41e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 42e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid ce_init (void) 43e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 44e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project memset (&ce_cb, 0, sizeof (tCE_CB)); 45e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ce_cb.trace_level = NFC_INITIAL_TRACE_LEVEL; 46e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 47e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Initialize tag-specific fields of ce control block */ 48e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ce_t3t_init (); 49e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 50e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 51e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 52e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 53e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function CE_SendRawFrame 54e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 55e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function sends a raw frame to the peer device. 56e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 57e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns tNFC_STATUS 58e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 59e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 60e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFC_STATUS CE_SendRawFrame (UINT8 *p_raw_data, UINT16 data_len) 61e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 62e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFC_STATUS status = NFC_STATUS_FAILED; 63e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BT_HDR *p_data; 64e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *p; 65e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 66e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (ce_cb.p_cback) 67e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 68e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* a valid opcode for RW */ 69e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_data = (BT_HDR *) GKI_getpoolbuf (NFC_RW_POOL_ID); 70e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_data) 71e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 72e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_data->offset = NCI_MSG_OFFSET_SIZE + NCI_DATA_HDR_SIZE; 73e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p = (UINT8 *) (p_data + 1) + p_data->offset; 74e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project memcpy (p, p_raw_data, data_len); 75e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_data->len = data_len; 76e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project CE_TRACE_EVENT1 ("CE SENT raw frame (0x%x)", data_len); 77e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project status = NFC_SendData (NFC_RF_CONN_ID, p_data); 78e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 79e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 80e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 81e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return status; 82e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 83e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 84e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 85e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 86e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function CE_SetActivatedTagType 87e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 88e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function selects the tag type for CE mode. 89e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 90e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns tNFC_STATUS 91e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 92e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 93e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFC_STATUS CE_SetActivatedTagType (tNFC_ACTIVATE_DEVT *p_activate_params, UINT16 t3t_system_code, tCE_CBACK *p_cback) 94e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 95e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFC_STATUS status = NFC_STATUS_FAILED; 96e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFC_PROTOCOL protocol = p_activate_params->protocol; 97e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 98e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project CE_TRACE_API1 ("CE_SetActivatedTagType protocol:%d", protocol); 99e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (protocol) 101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_PROTOCOL_T1T: 103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_PROTOCOL_T2T: 104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return NFC_STATUS_FAILED; 105e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 106e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_PROTOCOL_T3T: /* Type3Tag - NFC-F */ 107e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* store callback function before NFC_SetStaticRfCback () */ 108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ce_cb.p_cback = p_cback; 109e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project status = ce_select_t3t (t3t_system_code, p_activate_params->rf_tech_param.param.lf.nfcid2); 110e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 111e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 112e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NFC_PROTOCOL_ISO_DEP: /* ISODEP/4A,4B- NFC-A or NFC-B */ 113e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* store callback function before NFC_SetStaticRfCback () */ 114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ce_cb.p_cback = p_cback; 115e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project status = ce_select_t4t (); 116e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 117e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 118e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project default: 119e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project CE_TRACE_ERROR0 ("CE_SetActivatedTagType Invalid protocol"); 120e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return NFC_STATUS_FAILED; 121e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 122e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (status != NFC_STATUS_OK) 124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFC_SetStaticRfCback (NULL); 126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ce_cb.p_cback = NULL; 127e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 128e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return status; 129e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 130e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 131e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 132e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 133e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function CE_SetTraceLevel 134e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 135e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function sets the trace level for Card Emulation mode. 136e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** If called with a value of 0xFF, 137e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** it simply returns the current trace level. 138e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 139e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns The new or current trace level 140e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 141e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectUINT8 CE_SetTraceLevel (UINT8 new_level) 143e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 144e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (new_level != 0xFF) 145e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ce_cb.trace_level = new_level; 146e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 147e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (ce_cb.trace_level); 148e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 149e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 150e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* NFC_INCLUDED == TRUE */ 151