1f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly/*
2f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly * Copyright (C) 2010 The Android Open Source Project
3f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly *
4f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly * Licensed under the Apache License, Version 2.0 (the "License");
5f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly * you may not use this file except in compliance with the License.
6f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly * You may obtain a copy of the License at
7f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly *
8f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly *      http://www.apache.org/licenses/LICENSE-2.0
9f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly *
10f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly * Unless required by applicable law or agreed to in writing, software
11f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly * distributed under the License is distributed on an "AS IS" BASIS,
12f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly * See the License for the specific language governing permissions and
14f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly * limitations under the License.
15f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly */
16f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly
17c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pelly#ifndef __COM_ANDROID_NFC_JNI_H__
18c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pelly#define __COM_ANDROID_NFC_JNI_H__
19f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly
20c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pelly#define LOG_TAG "NFC JNI"
21f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly
22f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#include <JNIHelp.h>
23f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#include <jni.h>
24f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly
25f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#include <pthread.h>
2652e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau#include <sys/queue.h>
27f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly
28f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pellyextern "C" {
29f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#include <phNfcStatus.h>
30f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#include <phNfcTypes.h>
31f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#include <phNfcIoctlCode.h>
32f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#include <phLibNfc.h>
33f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#include <phDal4Nfc_messageQueueLib.h>
343ba3b10867c36bff57b72ff99c7b56d63d418f3fMartijn Coenen#include <phFriNfc_NdefMap.h>
35ef92efa7fd86d75cc35465b84e8740f941ff0f0aJeff Hamilton#include <cutils/log.h>
36b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau#include <com_android_nfc_list.h>
37b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau#include <semaphore.h>
38b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau
39f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly}
40f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#include <cutils/properties.h> // for property_get
41f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly
42ef92efa7fd86d75cc35465b84e8740f941ff0f0aJeff Hamilton
43f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly/* Discovery modes -- keep in sync with NFCManager.DISCOVERY_MODE_* */
44f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#define DISCOVERY_MODE_TAG_READER         0
45f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#define DISCOVERY_MODE_NFCIP1             1
46f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#define DISCOVERY_MODE_CARD_EMULATION     2
47f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly
48f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#define DISCOVERY_MODE_TABLE_SIZE         3
49f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly
50f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#define DISCOVERY_MODE_DISABLED           0
51f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#define DISCOVERY_MODE_ENABLED            1
52f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly
53f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#define MODE_P2P_TARGET                   0
54f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#define MODE_P2P_INITIATOR                1
55f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly
56f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly/* Properties values */
57f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#define PROPERTY_LLCP_LTO                 0
58f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#define PROPERTY_LLCP_MIU                 1
59f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#define PROPERTY_LLCP_WKS                 2
60f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#define PROPERTY_LLCP_OPT                 3
61f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#define PROPERTY_NFC_DISCOVERY_A          4
62f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#define PROPERTY_NFC_DISCOVERY_B          5
63f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#define PROPERTY_NFC_DISCOVERY_F          6
64f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#define PROPERTY_NFC_DISCOVERY_15693      7
65f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#define PROPERTY_NFC_DISCOVERY_NCFIP      8
66f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly
67f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly/* Error codes */
68f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#define ERROR_BUFFER_TOO_SMALL            -12
69f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#define ERROR_INSUFFICIENT_RESOURCES      -9
70f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly
713ba3b10867c36bff57b72ff99c7b56d63d418f3fMartijn Coenen/* Pre-defined card read/write state values. These must match the values in
72f34ea55002a5f7fbe8486c6ab6f4a17481a9558fMartijn Coenen * Ndef.java in the framework.
73f34ea55002a5f7fbe8486c6ab6f4a17481a9558fMartijn Coenen */
74f34ea55002a5f7fbe8486c6ab6f4a17481a9558fMartijn Coenen
758d69f5205e3c4a7c2eb869bbf4983d3d9fe45ab0Nick Pelly#define NDEF_UNKNOWN_TYPE                -1
76f34ea55002a5f7fbe8486c6ab6f4a17481a9558fMartijn Coenen#define NDEF_TYPE1_TAG                   1
77f34ea55002a5f7fbe8486c6ab6f4a17481a9558fMartijn Coenen#define NDEF_TYPE2_TAG                   2
78f34ea55002a5f7fbe8486c6ab6f4a17481a9558fMartijn Coenen#define NDEF_TYPE3_TAG                   3
79f34ea55002a5f7fbe8486c6ab6f4a17481a9558fMartijn Coenen#define NDEF_TYPE4_TAG                   4
808d69f5205e3c4a7c2eb869bbf4983d3d9fe45ab0Nick Pelly#define NDEF_MIFARE_CLASSIC_TAG          101
81e8848005e3c79df26d8cdc4228220205eaeffe4fMartijn Coenen#define NDEF_ICODE_SLI_TAG               102
82f34ea55002a5f7fbe8486c6ab6f4a17481a9558fMartijn Coenen
83f34ea55002a5f7fbe8486c6ab6f4a17481a9558fMartijn Coenen/* Pre-defined tag type values. These must match the values in
84f34ea55002a5f7fbe8486c6ab6f4a17481a9558fMartijn Coenen * Ndef.java in the framework.
853ba3b10867c36bff57b72ff99c7b56d63d418f3fMartijn Coenen */
863ba3b10867c36bff57b72ff99c7b56d63d418f3fMartijn Coenen
873ba3b10867c36bff57b72ff99c7b56d63d418f3fMartijn Coenen#define NDEF_MODE_READ_ONLY              1
883ba3b10867c36bff57b72ff99c7b56d63d418f3fMartijn Coenen#define NDEF_MODE_READ_WRITE             2
893ba3b10867c36bff57b72ff99c7b56d63d418f3fMartijn Coenen#define NDEF_MODE_UNKNOWN                3
903ba3b10867c36bff57b72ff99c7b56d63d418f3fMartijn Coenen
91f34ea55002a5f7fbe8486c6ab6f4a17481a9558fMartijn Coenen
92b74200f40f9d4f536b8782974d444f1f9178076fJeff Hamilton/* Name strings for target types. These *must* match the values in TagTechnology.java */
93b74200f40f9d4f536b8782974d444f1f9178076fJeff Hamilton#define TARGET_TYPE_UNKNOWN               -1
94b74200f40f9d4f536b8782974d444f1f9178076fJeff Hamilton#define TARGET_TYPE_ISO14443_3A           1
95b74200f40f9d4f536b8782974d444f1f9178076fJeff Hamilton#define TARGET_TYPE_ISO14443_3B           2
96b74200f40f9d4f536b8782974d444f1f9178076fJeff Hamilton#define TARGET_TYPE_ISO14443_4            3
973fb30ae5bf51d9ffe6271a345d55905dade8040dJeff Hamilton#define TARGET_TYPE_FELICA                4
983fb30ae5bf51d9ffe6271a345d55905dade8040dJeff Hamilton#define TARGET_TYPE_ISO15693              5
993fb30ae5bf51d9ffe6271a345d55905dade8040dJeff Hamilton#define TARGET_TYPE_NDEF                  6
1003fb30ae5bf51d9ffe6271a345d55905dade8040dJeff Hamilton#define TARGET_TYPE_NDEF_FORMATABLE       7
1013fb30ae5bf51d9ffe6271a345d55905dade8040dJeff Hamilton#define TARGET_TYPE_MIFARE_CLASSIC        8
1023fb30ae5bf51d9ffe6271a345d55905dade8040dJeff Hamilton#define TARGET_TYPE_MIFARE_UL             9
103f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly
1047efbf69a37134ccbd86a1f6b4121f16b4a80eaaeNick Pelly#define SMX_SECURE_ELEMENT_ID   11259375
1057efbf69a37134ccbd86a1f6b4121f16b4a80eaaeNick Pelly
1065e93195e37834429229350bdce670a64e536367amike wakerly/* Maximum byte length of an AID. */
1075e93195e37834429229350bdce670a64e536367amike wakerly#define AID_MAXLEN                        16
1085e93195e37834429229350bdce670a64e536367amike wakerly
109f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly/* Utility macros for logging */
110f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#define GET_LEVEL(status) ((status)==NFCSTATUS_SUCCESS)?ANDROID_LOG_DEBUG:ANDROID_LOG_WARN
111ef92efa7fd86d75cc35465b84e8740f941ff0f0aJeff Hamilton
112ef92efa7fd86d75cc35465b84e8740f941ff0f0aJeff Hamilton#if 0
113ef92efa7fd86d75cc35465b84e8740f941ff0f0aJeff Hamilton  #define LOG_CALLBACK(funcName, status)  LOG_PRI(GET_LEVEL(status), LOG_TAG, "Callback: %s() - status=0x%04x[%s]", funcName, status, nfc_jni_get_status_name(status));
11420a7a37f5e021d576342365151a1b221a39565aeSylvain Fonteneau  #define TRACE(...) LOG(LOG_DEBUG, LOG_TAG, __VA_ARGS__)
115ef92efa7fd86d75cc35465b84e8740f941ff0f0aJeff Hamilton#else
116ef92efa7fd86d75cc35465b84e8740f941ff0f0aJeff Hamilton  #define LOG_CALLBACK(...)
117ef92efa7fd86d75cc35465b84e8740f941ff0f0aJeff Hamilton  #define TRACE(...)
118ef92efa7fd86d75cc35465b84e8740f941ff0f0aJeff Hamilton#endif
119ef92efa7fd86d75cc35465b84e8740f941ff0f0aJeff Hamilton
120c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pellystruct nfc_jni_native_data
121f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly{
122f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly   /* Thread handle */
123f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly   pthread_t thread;
124f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly   int running;
125f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly
126f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly   /* Our VM */
127f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly   JavaVM *vm;
128f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly   int env_version;
129f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly
130f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly   /* Reference to the NFCManager instance */
131f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly   jobject manager;
132f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly
133f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly   /* Cached objects */
134f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly   jobject cached_NfcTag;
135f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly   jobject cached_P2pDevice;
136f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly
137f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly   /* Target discovery configuration */
138f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly   int discovery_modes_state[DISCOVERY_MODE_TABLE_SIZE];
139f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly   phLibNfc_sADD_Cfg_t discovery_cfg;
140f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly   phLibNfc_Registry_Info_t registry_info;
141f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly
142f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly   /* Secure Element selected */
143f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly   int seId;
144f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly
145f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly   /* LLCP params */
146f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly   int lto;
147f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly   int miu;
148f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly   int wks;
149f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly   int opt;
150f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly
151f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly   /* Tag detected */
152f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly   jobject tag;
153f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly
154f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly   /* Lib Status */
155f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly   NFCSTATUS status;
156f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly
157f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly};
158f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly
159c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pellytypedef struct nfc_jni_native_monitor
160f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly{
161f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly   /* Mutex protecting native library against reentrance */
162f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly   pthread_mutex_t reentrance_mutex;
163f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly
164f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly   /* Mutex protecting native library against concurrency */
165f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly   pthread_mutex_t concurrency_mutex;
166f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly
167b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau   /* List used to track pending semaphores waiting for callback */
168b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau   struct listHead sem_list;
169b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau
17052e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau   /* List used to track incoming socket requests (and associated sync variables) */
17152e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau   LIST_HEAD(, nfc_jni_listen_data) incoming_socket_head;
17252e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau   pthread_mutex_t incoming_socket_mutex;
17352e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau   pthread_cond_t  incoming_socket_cond;
17452e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau
175c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pelly} nfc_jni_native_monitor_t;
176f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly
177b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneautypedef struct nfc_jni_callback_data
178b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau{
179b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau   /* Semaphore used to wait for callback */
180b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau   sem_t sem;
181b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau
182b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau   /* Used to store the status sent by the callback */
183b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau   NFCSTATUS status;
184b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau
185b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau   /* Used to provide a local context to the callback */
186b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau   void* pContext;
187b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau
188b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau} nfc_jni_callback_data_t;
189b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau
19052e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneautypedef struct nfc_jni_listen_data
19152e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau{
19252e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau   /* LLCP server socket receiving the connection request */
19352e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau   phLibNfc_Handle pServerSocket;
19452e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau
19552e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau   /* LLCP socket created from the connection request */
19652e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau   phLibNfc_Handle pIncomingSocket;
19752e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau
19852e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau   /* List entries */
19952e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau   LIST_ENTRY(nfc_jni_listen_data) entries;
20052e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau
20152e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau} nfc_jni_listen_data_t;
20252e3711950d017debd9f1783a33a0c9ac90dd51bSylvain Fonteneau
203f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly/* TODO: treat errors and add traces */
204c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pelly#define REENTRANCE_LOCK()        pthread_mutex_lock(&nfc_jni_get_monitor()->reentrance_mutex)
205c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pelly#define REENTRANCE_UNLOCK()      pthread_mutex_unlock(&nfc_jni_get_monitor()->reentrance_mutex)
206c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pelly#define CONCURRENCY_LOCK()       pthread_mutex_lock(&nfc_jni_get_monitor()->concurrency_mutex)
207c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pelly#define CONCURRENCY_UNLOCK()     pthread_mutex_unlock(&nfc_jni_get_monitor()->concurrency_mutex)
208f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly
209f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pellynamespace android {
210f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly
2110412f53e664083dc5307bbcf18c0002b26180203Nick Pellyextern JavaVM *vm;
2120412f53e664083dc5307bbcf18c0002b26180203Nick Pelly
2130412f53e664083dc5307bbcf18c0002b26180203Nick PellyJNIEnv *nfc_get_env();
214b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau
215b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneaubool nfc_cb_data_init(nfc_jni_callback_data* pCallbackData, void* pContext);
216b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneauvoid nfc_cb_data_deinit(nfc_jni_callback_data* pCallbackData);
217b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneauvoid nfc_cb_data_releaseAll();
218b78172c6c46957cc37786b690db9bc854b26b7f9Sylvain Fonteneau
219c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pellyconst char* nfc_jni_get_status_name(NFCSTATUS status);
220c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pellyint nfc_jni_cache_object(JNIEnv *e, const char *clsname,
221f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly   jobject *cached_obj);
222c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pellystruct nfc_jni_native_data* nfc_jni_get_nat(JNIEnv *e, jobject o);
223c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pellystruct nfc_jni_native_data* nfc_jni_get_nat_ext(JNIEnv *e);
224c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pellynfc_jni_native_monitor_t* nfc_jni_init_monitor(void);
225c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pellynfc_jni_native_monitor_t* nfc_jni_get_monitor(void);
226f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly
2270bd11735e8a28db1692f28abcc3e065abae0e8ddDaniel Tomasint get_technology_type(phNfc_eRemDevType_t type, uint8_t sak);
2284f2715ade09afdd18463eb92f15215a43af41d63Martijn Coenenvoid nfc_jni_get_technology_tree(JNIEnv* e, phLibNfc_RemoteDevList_t* devList,
2290a58617a63e32d2f43e3aabc705fb7b9de464482Martijn Coenen                        uint8_t count, jintArray* techList, jintArray* handleList,
2300a58617a63e32d2f43e3aabc705fb7b9de464482Martijn Coenen                        jintArray* typeList);
2310bd11735e8a28db1692f28abcc3e065abae0e8ddDaniel Tomas
23213d8819d9d716c8f0ba03288d058f0bd462d70a7Nick Pelly/* P2P */
233c2fdb614879c601b5162d5d93d705b05c7b1e072Nick PellyphLibNfc_Handle nfc_jni_get_p2p_device_handle(JNIEnv *e, jobject o);
234c2fdb614879c601b5162d5d93d705b05c7b1e072Nick Pellyjshort nfc_jni_get_p2p_device_mode(JNIEnv *e, jobject o);
235f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly
236f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly/* TAG */
237bb78d3749bd0cc3801fdd9d5df06b0f6ee7a400fMartijn Coenenjint nfc_jni_get_connected_technology(JNIEnv *e, jobject o);
2380a58617a63e32d2f43e3aabc705fb7b9de464482Martijn Coenenjint nfc_jni_get_connected_technology_libnfc_type(JNIEnv *e, jobject o);
239bb78d3749bd0cc3801fdd9d5df06b0f6ee7a400fMartijn CoenenphLibNfc_Handle nfc_jni_get_connected_handle(JNIEnv *e, jobject o);
2406d11530887a3e6f30fa21d01bc0de5cdbd0218eaMartijn CoenenjintArray nfc_jni_get_nfc_tag_type(JNIEnv *e, jobject o);
241f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly
242f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly/* LLCP */
243c2fdb614879c601b5162d5d93d705b05c7b1e072Nick PellyphLibNfc_Handle nfc_jni_get_nfc_socket_handle(JNIEnv *e, jobject o);
244f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly
24513d8819d9d716c8f0ba03288d058f0bd462d70a7Nick Pellyint register_com_android_nfc_NativeNfcManager(JNIEnv *e);
24613d8819d9d716c8f0ba03288d058f0bd462d70a7Nick Pellyint register_com_android_nfc_NativeNfcTag(JNIEnv *e);
24713d8819d9d716c8f0ba03288d058f0bd462d70a7Nick Pellyint register_com_android_nfc_NativeP2pDevice(JNIEnv *e);
24813d8819d9d716c8f0ba03288d058f0bd462d70a7Nick Pellyint register_com_android_nfc_NativeLlcpConnectionlessSocket(JNIEnv *e);
24913d8819d9d716c8f0ba03288d058f0bd462d70a7Nick Pellyint register_com_android_nfc_NativeLlcpServiceSocket(JNIEnv *e);
25013d8819d9d716c8f0ba03288d058f0bd462d70a7Nick Pellyint register_com_android_nfc_NativeLlcpSocket(JNIEnv *e);
2510bd11735e8a28db1692f28abcc3e065abae0e8ddDaniel Tomasint register_com_android_nfc_NativeNfcSecureElement(JNIEnv *e);
252f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly
253f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly} // namespace android
254f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly
255f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly#endif
256