| /****************************************************************************** |
| * |
| * Copyright (C) 2024 The Android Open Source Project. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at: |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| ******************************************************************************/ |
| #pragma once |
| #include "nfa_ee_int.h" |
| #include "nfa_sys.h" |
| using namespace std; |
| |
| #define CC_FILE_ID 0xE103 |
| #define NDEF_FILE_ID 0xE104 |
| |
| #define T4TNFCEE_SIZEOF_LEN_BYTES 0x02 |
| #define T4TNFCEE_SIZEOF_STATUS_BYTES 0x02 |
| |
| /*CLA + INS + P1 + P2 + LC*/ |
| #define CAPDU_TL 0x05 |
| #define RW_T4TNFCEE_DATA_PER_WRITE (T4T_MAX_LENGTH_LC - CAPDU_TL) |
| |
| /* |
| POWER_STATE: |
| bit pos 0 = Switch On |
| bit pos 1 = Switch Off |
| bit pos 2 = Battery Off |
| bit pos 3 = Screen On lock |
| bit pos 4 = Screen off unlock |
| bit pos 5 = Screen Off lock |
| */ |
| #define T4TNFCEE_AID_POWER_STATE 0x3B |
| |
| /* Event to notify T4T NFCEE Detection complete*/ |
| #define NFA_T4TNFCEE_EVT 40 |
| /* Event to notify NDEF T4TNFCEE READ complete*/ |
| #define NFA_T4TNFCEE_READ_CPLT_EVT 41 |
| /* Event to notify NDEF T4TNFCEE WRITE complete*/ |
| #define NFA_T4TNFCEE_WRITE_CPLT_EVT 42 |
| /* Event to notify NDEF T4TNFCEE CLEAR complete*/ |
| #define NFA_T4TNFCEE_CLEAR_CPLT_EVT 43 |
| /* Event to notify NDEF T4TNFCEE READ CC DATA complete*/ |
| #define NFA_T4TNFCEE_READ_CC_DATA_CPLT_EVT 44 |
| |
| #define T4T_NFCEE_READ_ALLOWED 0x00 |
| #define T4T_NFCEE_WRITE_NOT_ALLOWED 0xFF |
| |
| /*Status codes*/ |
| #define NFA_T4T_STATUS_INVALID_FILE_ID 0x05 |
| |
| typedef struct { |
| uint16_t capacity; |
| uint8_t read_access; |
| uint8_t write_access; |
| } tNFA_T4TNFCEE_FILE_INFO; |
| |
| enum { |
| NFA_T4TNFCEE_OP_OPEN_CONNECTION, |
| NFA_T4TNFCEE_OP_READ, |
| NFA_T4TNFCEE_OP_WRITE, |
| NFA_T4TNFCEE_OP_CLOSE_CONNECTION, |
| NFA_T4TNFCEE_OP_CLEAR, |
| NFA_T4TNFCEE_OP_READ_CC_FILE, |
| NFA_T4TNFCEE_OP_MAX |
| }; |
| typedef uint8_t tNFA_T4TNFCEE_OP; |
| |
| typedef struct { |
| uint32_t len; |
| uint8_t* p_data; |
| } tNFA_T4TNFCEE_OP_PARAMS_WRITE; |
| |
| /* NDEF EE events */ |
| enum { |
| NFA_T4TNFCEE_OP_REQUEST_EVT = NFA_SYS_EVT_START(NFA_ID_T4TNFCEE), |
| NFA_T4TNFCEE_MAX_EVT |
| }; |
| |
| /* data type for NFA_T4TNFCEE_op_req_EVT */ |
| typedef struct { |
| NFC_HDR hdr; |
| tNFA_T4TNFCEE_OP op; /* NFA T4TNFCEE operation */ |
| uint8_t* p_fileId; |
| tNFA_T4TNFCEE_OP_PARAMS_WRITE write; |
| } tNFA_T4TNFCEE_OPERATION; |
| |
| /* union of all data types */ |
| typedef union { |
| /* GKI event buffer header */ |
| NFC_HDR hdr; |
| tNFA_T4TNFCEE_OPERATION op_req; |
| } tNFA_T4TNFCEE_MSG; |
| |
| typedef enum { |
| /* NFA T4TNFCEE states */ |
| NFA_T4TNFCEE_STATE_DISABLED = 0x00, /* T4TNFCEE is disabled */ |
| NFA_T4TNFCEE_STATE_TRY_ENABLE, |
| NFA_T4TNFCEE_STATE_INITIALIZED, /* T4TNFCEE is waiting to handle api commands |
| */ |
| NFA_T4TNFCEE_STATE_CONNECTED, /* T4TNFCEE is in open sequence */ |
| NFA_T4TNFCEE_STATE_DISCONNECTED, /* T4TNFCEE is in closing sequence */ |
| NFA_T4TNFCEE_STATE_OPEN_FAILED /* T4TNFCEE OPEN Failed */ |
| } tNFA_T4TNFCEE_STATE; |
| |
| typedef enum { |
| PROP_DISABLED = 0x00, |
| WAIT_SELECT_APPLICATION, |
| WAIT_SELECT_CC, |
| WAIT_READ_CC_DATA_LEN, |
| WAIT_READ_CC_FILE, |
| WAIT_SELECT_FILE, |
| WAIT_READ_DATA_LEN, |
| WAIT_READ_FILE, |
| WAIT_RESET_NLEN, |
| WAIT_WRITE, |
| WAIT_WRITE_COMPLETE, |
| WAIT_UPDATE_NLEN, |
| WAIT_CLEAR_NDEF_DATA, |
| OP_COMPLETE = 0x00 |
| } tNFA_T4TNFCEE_RW_STATE; |
| /* NFA T4TNFCEE control block */ |
| typedef struct { |
| tNFA_STATUS status; |
| tNFA_T4TNFCEE_STATE t4tnfcee_state; /* T4T NFCEE state */ |
| tNFA_T4TNFCEE_OP cur_op; /* Current operation */ |
| tNFA_T4TNFCEE_RW_STATE rw_state; /* Read Write state */ |
| tNFA_T4TNFCEE_MSG* p_pending_msg; /* Pending command */ |
| uint8_t* p_dataBuf; /* Data buffer */ |
| uint16_t cur_fileId; /* Current FileId */ |
| uint16_t rd_offset; /* current read-offset of incoming NDEF data */ |
| uint32_t dataLen; /*length of the data*/ |
| bool ndefEmulationSupport; /* NDEF emulation support */ |
| uint8_t connId; /* NDEF NFCEE CONN ID */ |
| } tNFA_T4TNFCEE_CB; |
| extern tNFA_T4TNFCEE_CB nfa_t4tnfcee_cb; |
| |
| /* type definition for action functions */ |
| typedef bool (*tNFA_T4TNFCEE_ACTION)(tNFA_T4TNFCEE_MSG* p_data); |
| |
| bool nfa_t4tnfcee_handle_op_req(tNFA_T4TNFCEE_MSG* p_data); |
| bool nfa_t4tnfcee_handle_event(NFC_HDR* p_msg); |
| void nfa_t4tnfcee_free_rx_buf(void); |
| bool nfa_t4tnfcee_is_enabled(void); |
| bool NFA_T4tNfcEeIsProcessing(void); |
| bool NFA_T4tNfcEeIsEmulationSupported(void); |
| void nfa_t4tnfcee_set_ee_cback(tNFA_EE_ECB* p_ecb); |
| void nfa_t4tnfcee_init(); |
| void nfa_t4tnfcee_deinit(void); |
| tNFC_STATUS nfa_t4tnfcee_proc_disc_evt(tNFA_T4TNFCEE_OP event); |