nfa_rw_int.h revision a24be4f06674b2707b57904deaa0dff5a95823bd
1/****************************************************************************** 2 * 3 * Copyright (C) 2003-2014 Broadcom Corporation 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at: 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 ******************************************************************************/ 18 19 20/****************************************************************************** 21 * 22 * This is the private interface file for NFA_RW 23 * 24 ******************************************************************************/ 25#ifndef NFA_RW_INT_H 26#define NFA_RW_INT_H 27 28#include "nfa_sys.h" 29#include "nfa_api.h" 30#include "nfa_rw_api.h" 31#include "nfc_api.h" 32#include "rw_api.h" 33 34/***************************************************************************** 35** Constants and data types 36*****************************************************************************/ 37 38/* Interval for performing presence check (in ms) */ 39#ifndef NFA_RW_PRESENCE_CHECK_INTERVAL 40#define NFA_RW_PRESENCE_CHECK_INTERVAL 750 41#endif 42 43/* TLV detection status */ 44#define NFA_RW_TLV_DETECT_ST_OP_NOT_STARTED 0x00 /* No Tlv detected */ 45#define NFA_RW_TLV_DETECT_ST_LOCK_TLV_OP_COMPLETE 0x01 /* Lock control tlv detected */ 46#define NFA_RW_TLV_DETECT_ST_MEM_TLV_OP_COMPLETE 0x02 /* Memory control tlv detected */ 47#define NFA_RW_TLV_DETECT_ST_COMPLETE 0x03 /* Both Lock and Memory control Tlvs are detected */ 48 49typedef UINT8 tNFA_RW_TLV_ST; 50 51 52/* RW events */ 53enum 54{ 55 NFA_RW_OP_REQUEST_EVT = NFA_SYS_EVT_START (NFA_ID_RW), 56 NFA_RW_ACTIVATE_NTF_EVT, 57 NFA_RW_DEACTIVATE_NTF_EVT, 58 NFA_RW_PRESENCE_CHECK_TICK_EVT, 59 NFA_RW_PRESENCE_CHECK_TIMEOUT_EVT, 60 NFA_RW_MAX_EVT 61}; 62 63 64 65/* BTA_RW operations */ 66enum 67{ 68 NFA_RW_OP_DETECT_NDEF, 69 NFA_RW_OP_READ_NDEF, 70 NFA_RW_OP_WRITE_NDEF, 71 NFA_RW_OP_PRESENCE_CHECK, 72 NFA_RW_OP_FORMAT_TAG, 73 NFA_RW_OP_SEND_RAW_FRAME, 74 75 /* Exclusive Type-1,Type-2 tag operations */ 76 NFA_RW_OP_DETECT_LOCK_TLV, 77 NFA_RW_OP_DETECT_MEM_TLV, 78 NFA_RW_OP_SET_TAG_RO, 79 80 /* Exclusive Type-1 tag operations */ 81 NFA_RW_OP_T1T_RID, 82 NFA_RW_OP_T1T_RALL, 83 NFA_RW_OP_T1T_READ, 84 NFA_RW_OP_T1T_WRITE, 85 NFA_RW_OP_T1T_RSEG, 86 NFA_RW_OP_T1T_READ8, 87 NFA_RW_OP_T1T_WRITE8, 88 89 /* Exclusive Type-2 tag operations */ 90 NFA_RW_OP_T2T_READ, 91 NFA_RW_OP_T2T_WRITE, 92 NFA_RW_OP_T2T_SECTOR_SELECT, 93 94 /* Exclusive Type-3 tag operations */ 95 NFA_RW_OP_T3T_READ, 96 NFA_RW_OP_T3T_WRITE, 97 NFA_RW_OP_T3T_GET_SYSTEM_CODES, 98 99 /* Exclusive ISO 15693 tag operations */ 100 NFA_RW_OP_I93_INVENTORY, 101 NFA_RW_OP_I93_STAY_QUIET, 102 NFA_RW_OP_I93_READ_SINGLE_BLOCK, 103 NFA_RW_OP_I93_WRITE_SINGLE_BLOCK, 104 NFA_RW_OP_I93_LOCK_BLOCK, 105 NFA_RW_OP_I93_READ_MULTI_BLOCK, 106 NFA_RW_OP_I93_WRITE_MULTI_BLOCK, 107 NFA_RW_OP_I93_SELECT, 108 NFA_RW_OP_I93_RESET_TO_READY, 109 NFA_RW_OP_I93_WRITE_AFI, 110 NFA_RW_OP_I93_LOCK_AFI, 111 NFA_RW_OP_I93_WRITE_DSFID, 112 NFA_RW_OP_I93_LOCK_DSFID, 113 NFA_RW_OP_I93_GET_SYS_INFO, 114 NFA_RW_OP_I93_GET_MULTI_BLOCK_STATUS, 115 116 NFA_RW_OP_MAX 117}; 118typedef UINT8 tNFA_RW_OP; 119 120/* Enumeration of parameter structios for nfa_rw operations */ 121 122/* NFA_RW_OP_WRITE_NDEF params */ 123typedef struct 124{ 125 UINT32 len; 126 UINT8 *p_data; 127} tNFA_RW_OP_PARAMS_WRITE_NDEF; 128 129/* NFA_RW_OP_SEND_RAW_FRAME params */ 130typedef struct 131{ 132 BT_HDR *p_data; 133} tNFA_RW_OP_PARAMS_SEND_RAW_FRAME; 134 135/* NFA_RW_OP_SET_TAG_RO params */ 136typedef struct 137{ 138 BOOLEAN b_hard_lock; 139} tNFA_RW_OP_PARAMS_CONFIG_READ_ONLY; 140 141/* NFA_RW_OP_T1T_READ params */ 142typedef struct 143{ 144 UINT8 segment_number; 145 UINT8 block_number; 146 UINT8 index; 147} tNFA_RW_OP_PARAMS_T1T_READ; 148 149/* NFA_RW_OP_T1T_WRITE_E8,NFA_RW_OP_T1T_WRITE_NE8 150 NFA_RW_OP_T1T_WRITE_E, NFA_RW_OP_T1T_WRITE_NE params */ 151typedef struct 152{ 153 BOOLEAN b_erase; 154 UINT8 block_number; 155 UINT8 index; 156 UINT8 p_block_data[8]; 157} tNFA_RW_OP_PARAMS_T1T_WRITE; 158 159/* NFA_RW_OP_T2T_READ params */ 160typedef struct 161{ 162 UINT8 block_number; 163} tNFA_RW_OP_PARAMS_T2T_READ; 164 165/* NFA_RW_OP_T2T_WRITE params */ 166typedef struct 167{ 168 UINT8 block_number; 169 UINT8 p_block_data[4]; 170} tNFA_RW_OP_PARAMS_T2T_WRITE; 171 172/* NFA_RW_OP_T2T_SECTOR_SELECT params */ 173typedef struct 174{ 175 UINT8 sector_number; 176} tNFA_RW_OP_PARAMS_T2T_SECTOR_SELECT; 177 178/* NFA_RW_OP_T3T_READ params */ 179typedef struct 180{ 181 UINT8 num_blocks; 182 tNFA_T3T_BLOCK_DESC *p_block_desc; 183} tNFA_RW_OP_PARAMS_T3T_READ; 184 185/* NFA_RW_OP_T3T_WRITE params */ 186typedef struct 187{ 188 UINT8 num_blocks; 189 tNFA_T3T_BLOCK_DESC *p_block_desc; 190 UINT8 *p_block_data; 191} tNFA_RW_OP_PARAMS_T3T_WRITE; 192 193/* NFA_RW_OP_I93_XXX params */ 194typedef struct 195{ 196 BOOLEAN uid_present; 197 UINT8 uid[I93_UID_BYTE_LEN]; 198 BOOLEAN afi_present; 199 UINT8 afi; 200 UINT8 dsfid; 201 UINT16 first_block_number; 202 UINT16 number_blocks; 203 UINT8 *p_data; 204} tNFA_RW_OP_PARAMS_I93_CMD; 205 206/* Union of params for all reader/writer operations */ 207typedef union 208{ 209 /* params for NFA_RW_OP_WRITE_NDEF */ 210 tNFA_RW_OP_PARAMS_WRITE_NDEF write_ndef; 211 212 /* params for NFA_RW_OP_SEND_RAW_FRAME */ 213 tNFA_RW_OP_PARAMS_SEND_RAW_FRAME send_raw_frame; 214 215 /* params for NFA_RW_OP_SET_TAG_RO */ 216 tNFA_RW_OP_PARAMS_CONFIG_READ_ONLY set_readonly; 217 218 /* params for NFA_RW_OP_T2T_READ and NFA_RW_OP_T1T_WRITE */ 219 tNFA_RW_OP_PARAMS_T1T_READ t1t_read; 220 tNFA_RW_OP_PARAMS_T1T_WRITE t1t_write; 221 222 /* params for NFA_RW_OP_T2T_READ,NFA_RW_OP_T2T_WRITE and NFA_RW_OP_T2T_SECTOR_SELECT */ 223 tNFA_RW_OP_PARAMS_T2T_READ t2t_read; 224 tNFA_RW_OP_PARAMS_T2T_WRITE t2t_write; 225 tNFA_RW_OP_PARAMS_T2T_SECTOR_SELECT t2t_sector_select; 226 227 /* params for NFA_RW_OP_T3T_READ and NFA_RW_OP_T3T_WRITE */ 228 tNFA_RW_OP_PARAMS_T3T_READ t3t_read; 229 tNFA_RW_OP_PARAMS_T3T_WRITE t3t_write; 230 231 /* params for NFA_RW_OP_PRESENCE_CHECK */ 232 tNFA_RW_PRES_CHK_OPTION option; 233 234 /* params for ISO 15693 */ 235 tNFA_RW_OP_PARAMS_I93_CMD i93_cmd; 236 237} tNFA_RW_OP_PARAMS; 238 239/* data type for NFA_RW_op_req_EVT */ 240typedef struct 241{ 242 BT_HDR hdr; 243 tNFA_RW_OP op; /* NFA RW operation */ 244 tNFA_RW_OP_PARAMS params; 245} tNFA_RW_OPERATION; 246 247/* data type for NFA_RW_ACTIVATE_NTF */ 248typedef struct 249{ 250 BT_HDR hdr; 251 tNFC_ACTIVATE_DEVT *p_activate_params; /* Data from NFC_ACTIVATE_DEVT */ 252 BOOLEAN excl_rf_not_active; /* TRUE if not in exclusive RF mode */ 253} tNFA_RW_ACTIVATE_NTF; 254 255/* union of all data types */ 256typedef union 257{ 258 /* GKI event buffer header */ 259 BT_HDR hdr; 260 tNFA_RW_OPERATION op_req; 261 tNFA_RW_ACTIVATE_NTF activate_ntf; 262} tNFA_RW_MSG; 263 264/* NDEF detection status */ 265enum 266{ 267 NFA_RW_NDEF_ST_UNKNOWN =0, /* NDEF detection not performed yet */ 268 NFA_RW_NDEF_ST_TRUE, /* Tag is NDEF */ 269 NFA_RW_NDEF_ST_FALSE /* Tag is not NDEF */ 270}; 271typedef UINT8 tNFA_RW_NDEF_ST; 272 273/* flags for RW control block */ 274#define NFA_RW_FL_NOT_EXCL_RF_MODE 0x01 /* Activation while not in exclusive RF mode */ 275#define NFA_RW_FL_AUTO_PRESENCE_CHECK_BUSY 0x02 /* Waiting for response from tag for auto-presence check */ 276#define NFA_RW_FL_TAG_IS_READONLY 0x04 /* Read only tag */ 277#define NFA_RW_FL_ACTIVATION_NTF_PENDING 0x08 /* Busy retrieving additional tag information */ 278#define NFA_RW_FL_API_BUSY 0x10 /* Tag operation is in progress */ 279#define NFA_RW_FL_ACTIVATED 0x20 /* Tag is been activated */ 280#define NFA_RW_FL_NDEF_OK 0x40 /* NDEF DETECTed OK */ 281 282/* NFA RW control block */ 283typedef struct 284{ 285 tNFA_RW_OP cur_op; /* Current operation */ 286 287 TIMER_LIST_ENT tle; /* list entry for nfa_rw timer */ 288 tNFA_RW_MSG *p_pending_msg; /* Pending API (if busy performing presence check) */ 289 290 /* Tag info */ 291 tNFC_PROTOCOL protocol; 292 tNFC_INTF_TYPE intf_type; 293 UINT8 pa_sel_res; 294 tNFC_RF_TECH_N_MODE activated_tech_mode; /* activated technology and mode */ 295 296 BOOLEAN b_hard_lock; 297 298 tNFA_RW_MSG *p_buffer_rw_msg; /* Buffer to hold incoming cmd while reading tag id */ 299 300 /* TLV info */ 301 tNFA_RW_TLV_ST tlv_st; /* TLV detection status */ 302 303 /* NDEF info */ 304 tNFA_RW_NDEF_ST ndef_st; /* NDEF detection status */ 305 UINT32 ndef_max_size; /* max number of bytes available for NDEF data */ 306 UINT32 ndef_cur_size; /* current size of stored NDEF data (in bytes) */ 307 UINT8 *p_ndef_buf; 308 UINT32 ndef_rd_offset; /* current read-offset of incoming NDEF data */ 309 310 /* Current NDEF Write info */ 311 UINT8 *p_ndef_wr_buf; /* Pointer to NDEF data being written */ 312 UINT32 ndef_wr_len; /* Length of NDEF data being written */ 313 314 /* Reactivating type 2 tag after NACK rsp */ 315 tRW_EVENT halt_event; /* Event ID from stack after NACK response */ 316 tRW_DATA rw_data; /* Event Data from stack after NACK response */ 317 BOOLEAN skip_dyn_locks; /* To skip reading dynamic locks during NDEF Detect */ 318 319 /* Flags (see defintions for NFA_RW_FL_* ) */ 320 UINT8 flags; 321 322 /* ISO 15693 tag memory information */ 323 UINT16 i93_afi_location; 324 UINT8 i93_dsfid; 325 UINT8 i93_block_size; 326 UINT16 i93_num_block; 327 UINT8 i93_uid[I93_UID_BYTE_LEN]; 328} tNFA_RW_CB; 329extern tNFA_RW_CB nfa_rw_cb; 330 331 332 333/* type definition for action functions */ 334typedef BOOLEAN (*tNFA_RW_ACTION) (tNFA_RW_MSG *p_data); 335 336/* Internal nfa_rw function prototypes */ 337extern void nfa_rw_stop_presence_check_timer (void); 338 339/* Action function prototypes */ 340extern BOOLEAN nfa_rw_handle_op_req (tNFA_RW_MSG *p_data); 341extern BOOLEAN nfa_rw_activate_ntf (tNFA_RW_MSG *p_data); 342extern BOOLEAN nfa_rw_deactivate_ntf (tNFA_RW_MSG *p_data); 343extern BOOLEAN nfa_rw_presence_check_tick (tNFA_RW_MSG *p_data); 344extern BOOLEAN nfa_rw_presence_check_timeout (tNFA_RW_MSG *p_data); 345extern void nfa_rw_handle_sleep_wakeup_rsp (tNFC_STATUS status); 346extern void nfa_rw_handle_presence_check_rsp (tNFC_STATUS status); 347extern void nfa_rw_command_complete (void); 348extern BOOLEAN nfa_rw_handle_event (BT_HDR *p_msg); 349 350extern void nfa_rw_free_ndef_rx_buf (void); 351extern void nfa_rw_sys_disable (void); 352 353#endif /* NFA_DM_INT_H */ 354 355