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 19e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/****************************************************************************** 20e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 21e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * This file contains functions that interface with the NFC NCI transport. 22e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * On the receive side, it routes events to the appropriate handler 23e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * (callback). On the transmit side, it manages the command transmission. 24e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 255c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen******************************************************************************/ 26e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include <string.h> 27e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "bt_types.h" 286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#include "nfc_target.h" 29e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 30e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nci_hmsgs.h" 316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#include "nfc_api.h" 32e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "rw_api.h" 33e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "rw_int.h" 34e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 35e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttRW_CB rw_cb; 36e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 37e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid rw_init(void) { 396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi memset(&rw_cb, 0, sizeof(tRW_CB)); 406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi rw_cb.trace_level = NFC_INITIAL_TRACE_LEVEL; 41e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 42e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 43303fec1d79b7ac30a09713e5db9fff299f7227fbRuchi Kandoi#if (RW_STATS_INCLUDED == TRUE) 44e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 45e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project* Internal functions for statistics 46e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 47e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 48e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 49e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function rw_main_reset_stats 50e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 51e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Reset counters for statistics 52e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 53e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 54e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 55e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid rw_main_reset_stats(void) { 576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi memset(&rw_cb.stats, 0, sizeof(tRW_STATS)); 58e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* Get current tick count */ 606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi rw_cb.stats.start_tick = GKI_get_tick_count(); 61e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 62e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 63e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 64e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 65e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function rw_main_update_tx_stats 66e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 67e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Update stats for tx 68e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 69e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 70e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 71e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid rw_main_update_tx_stats(uint32_t num_bytes, bool is_retry) { 736fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi rw_cb.stats.bytes_sent += num_bytes; 746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi rw_cb.stats.num_ops++; 75e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (is_retry) rw_cb.stats.num_retries++; 77e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 78e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 79e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 80e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 81e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function rw_main_update_fail_stats 82e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 83e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Increment failure count 84e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 85e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 86e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 87e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid rw_main_update_fail_stats(void) { rw_cb.stats.num_fail++; } 89e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 90e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 91e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 92e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function rw_main_update_crc_error_stats 93e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 94e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Increment crc error count 95e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 96e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 97e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 98e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid rw_main_update_crc_error_stats(void) { rw_cb.stats.num_crc++; } 100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function rw_main_update_trans_error_stats 104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 105e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Increment trans error count 106e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 107e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 109e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid rw_main_update_trans_error_stats(void) { rw_cb.stats.num_trans_err++; } 111e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 112e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 113e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function rw_main_update_rx_stats 115e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 116e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Update stats for rx 117e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 118e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 119e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 120e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid rw_main_update_rx_stats(uint32_t num_bytes) { 1226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi rw_cb.stats.bytes_received += num_bytes; 123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 127e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function rw_main_log_stats 128e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 129e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Dump stats 130e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 131e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns void 132e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 133e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid rw_main_log_stats(void) { 1356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint32_t ticks, elapsed_ms; 136e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi ticks = GKI_get_tick_count() - rw_cb.stats.start_tick; 1386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi elapsed_ms = GKI_TICKS_TO_MS(ticks); 139e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi RW_TRACE_DEBUG5( 1416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi "NFC tx stats: cmds:%i, retries:%i, aborted: %i, tx_errs: %i, bytes " 1426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi "sent:%i", 1436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi rw_cb.stats.num_ops, rw_cb.stats.num_retries, rw_cb.stats.num_fail, 1446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi rw_cb.stats.num_trans_err, rw_cb.stats.bytes_sent); 1456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi RW_TRACE_DEBUG2(" rx stats: rx-crc errors %i, bytes received: %i", 1466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi rw_cb.stats.num_crc, rw_cb.stats.bytes_received); 1476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi RW_TRACE_DEBUG1(" time activated %i ms", elapsed_ms); 148e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#endif /* RW_STATS_INCLUDED */ 150e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 151e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 152e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 153e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function RW_SendRawFrame 154e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 155e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function sends a raw frame to the peer device. 156e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 157e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns tNFC_STATUS 158e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 159e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1606fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFC_STATUS RW_SendRawFrame(uint8_t* p_raw_data, uint16_t data_len) { 1616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFC_STATUS status = NFC_STATUS_FAILED; 1626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR* p_data; 1636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t* p; 164e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (rw_cb.p_cback) { 1666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* a valid opcode for RW - remove */ 1676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_data = (NFC_HDR*)GKI_getpoolbuf(NFC_RW_POOL_ID); 1686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (p_data) { 1696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_data->offset = NCI_MSG_OFFSET_SIZE + NCI_DATA_HDR_SIZE; 1706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p = (uint8_t*)(p_data + 1) + p_data->offset; 1716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi memcpy(p, p_raw_data, data_len); 1726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_data->len = data_len; 173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi RW_TRACE_EVENT1("RW SENT raw frame (0x%x)", data_len); 1756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi status = NFC_SendData(NFC_RF_CONN_ID, p_data); 176e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 1786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return status; 179e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 180e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 181e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 182e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 183e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function RW_SetActivatedTagType 184e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 185e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function selects the tag type for Reader/Writer mode. 186e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 187e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns tNFC_STATUS 188e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 189e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1906fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFC_STATUS RW_SetActivatedTagType(tNFC_ACTIVATE_DEVT* p_activate_params, 1916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tRW_CBACK* p_cback) { 1926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFC_STATUS status = NFC_STATUS_FAILED; 193e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* check for null cback here / remove checks from rw_t?t */ 1956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi RW_TRACE_DEBUG3("RW_SetActivatedTagType protocol:%d, technology:%d, SAK:%d", 1966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_activate_params->protocol, 1976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_activate_params->rf_tech_param.mode, 1986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_activate_params->rf_tech_param.param.pa.sel_rsp); 199e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (p_cback == NULL) { 2016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi RW_TRACE_ERROR0("RW_SetActivatedTagType called with NULL callback"); 2026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFC_STATUS_FAILED); 2036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 204e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* Reset tag-specific area of control block */ 2066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi memset(&rw_cb.tcb, 0, sizeof(tRW_TCB)); 207e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 208303fec1d79b7ac30a09713e5db9fff299f7227fbRuchi Kandoi#if (RW_STATS_INCLUDED == TRUE) 2096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* Reset RW stats */ 2106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi rw_main_reset_stats(); 2116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#endif /* RW_STATS_INCLUDED */ 212e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi rw_cb.p_cback = p_cback; 2146fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* not a tag NFC_PROTOCOL_NFCIP1: NFCDEP/LLCP - NFC-A or NFC-F */ 2156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (NFC_PROTOCOL_T1T == p_activate_params->protocol) { 2166fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* Type1Tag - NFC-A */ 2176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (p_activate_params->rf_tech_param.mode == NFC_DISCOVERY_TYPE_POLL_A) { 2186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi status = rw_t1t_select(p_activate_params->rf_tech_param.param.pa.hr, 2196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_activate_params->rf_tech_param.param.pa.nfcid1); 220acf1ec0cfce2d61dcab8560cad5072fa30afeb82Jizhou Liao } 2216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } else if (NFC_PROTOCOL_T2T == p_activate_params->protocol) { 2226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* Type2Tag - NFC-A */ 2236fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (p_activate_params->rf_tech_param.mode == NFC_DISCOVERY_TYPE_POLL_A) { 2246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (p_activate_params->rf_tech_param.param.pa.sel_rsp == 2256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_SEL_RES_NFC_FORUM_T2T) 2266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi status = rw_t2t_select(); 227acf1ec0cfce2d61dcab8560cad5072fa30afeb82Jizhou Liao } 2286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } else if (NFC_PROTOCOL_T3T == p_activate_params->protocol) { 2296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* Type3Tag - NFC-F */ 2306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (p_activate_params->rf_tech_param.mode == NFC_DISCOVERY_TYPE_POLL_F) { 2316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi status = 2326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi rw_t3t_select(p_activate_params->rf_tech_param.param.pf.nfcid2, 2336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_activate_params->rf_tech_param.param.pf.mrti_check, 2346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_activate_params->rf_tech_param.param.pf.mrti_update); 235acf1ec0cfce2d61dcab8560cad5072fa30afeb82Jizhou Liao } 2366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } else if (NFC_PROTOCOL_ISO_DEP == p_activate_params->protocol) { 2376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* ISODEP/4A,4B- NFC-A or NFC-B */ 2386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if ((p_activate_params->rf_tech_param.mode == NFC_DISCOVERY_TYPE_POLL_B) || 2396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi (p_activate_params->rf_tech_param.mode == NFC_DISCOVERY_TYPE_POLL_A)) { 2406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi status = rw_t4t_select(); 241acf1ec0cfce2d61dcab8560cad5072fa30afeb82Jizhou Liao } 24257a3dfa388d16f35d4182782b3ee017164c933ebLove Khanna } else if (NFC_PROTOCOL_T5T == p_activate_params->protocol) { 24357a3dfa388d16f35d4182782b3ee017164c933ebLove Khanna /* T5T */ 24457a3dfa388d16f35d4182782b3ee017164c933ebLove Khanna if (p_activate_params->rf_tech_param.mode == NFC_DISCOVERY_TYPE_POLL_V) { 2456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi status = rw_i93_select(p_activate_params->rf_tech_param.param.pi93.uid); 246e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 2476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 2486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* TODO set up callback for proprietary protocol */ 2496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi else { 2506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi RW_TRACE_ERROR0("RW_SetActivatedTagType Invalid protocol"); 2516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 252e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (status != NFC_STATUS_OK) rw_cb.p_cback = NULL; 2546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return status; 255e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 256e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 257e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 258e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 259e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function RW_SetTraceLevel 260e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 261e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function sets the trace level for Reader/Writer mode. 262e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** If called with a value of 0xFF, 263e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** it simply returns the current trace level. 264e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 265e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns The new or current trace level 266e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 267e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 2686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiuint8_t RW_SetTraceLevel(uint8_t new_level) { 2696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (new_level != 0xFF) rw_cb.trace_level = new_level; 270e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (rw_cb.trace_level); 272e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 273