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