1525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/*
2525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * Copyright (C) 2012 The Android Open Source Project
3525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project *
4525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * you may not use this file except in compliance with the License.
6525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * You may obtain a copy of the License at
7525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project *
8525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project *
10525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * See the License for the specific language governing permissions and
14525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * limitations under the License.
15525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project */
16525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
17525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#pragma once
182534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes#undef LOG_TAG
19525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define LOG_TAG "BrcmNfcJni"
20525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#include <jni.h>
21525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#include <pthread.h>
22525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#include <sys/queue.h>
23525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#include <semaphore.h>
24525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
25525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
26525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/* Discovery modes -- keep in sync with NFCManager.DISCOVERY_MODE_* */
27525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define DISCOVERY_MODE_TAG_READER         0
28525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define DISCOVERY_MODE_NFCIP1             1
29525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define DISCOVERY_MODE_CARD_EMULATION     2
30525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define DISCOVERY_MODE_TABLE_SIZE         3
31525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
32525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define DISCOVERY_MODE_DISABLED           0
33525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define DISCOVERY_MODE_ENABLED            1
34525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
35525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define MODE_P2P_TARGET                   0
36525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define MODE_P2P_INITIATOR                1
37525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
38525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
39525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/* Properties values */
40525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define PROPERTY_LLCP_LTO                 0
41525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define PROPERTY_LLCP_MIU                 1
42525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define PROPERTY_LLCP_WKS                 2
43525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define PROPERTY_LLCP_OPT                 3
44525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define PROPERTY_NFC_DISCOVERY_A          4
45525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define PROPERTY_NFC_DISCOVERY_B          5
46525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define PROPERTY_NFC_DISCOVERY_F          6
47525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define PROPERTY_NFC_DISCOVERY_15693      7
48525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define PROPERTY_NFC_DISCOVERY_NCFIP      8
49525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
50525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
51525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/* Error codes */
52525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define ERROR_BUFFER_TOO_SMALL            -12
53525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define ERROR_INSUFFICIENT_RESOURCES      -9
54525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
55525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
56525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/* Pre-defined tag type values. These must match the values in
57525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * Ndef.java in the framework.
58525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project */
59525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define NDEF_UNKNOWN_TYPE                -1
60525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define NDEF_TYPE1_TAG                   1
61525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define NDEF_TYPE2_TAG                   2
62525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define NDEF_TYPE3_TAG                   3
63525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define NDEF_TYPE4_TAG                   4
64525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define NDEF_MIFARE_CLASSIC_TAG          101
65525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
66525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
67525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/* Pre-defined card read/write state values. These must match the values in
68525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * Ndef.java in the framework.
69525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project */
70525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define NDEF_MODE_READ_ONLY              1
71525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define NDEF_MODE_READ_WRITE             2
72525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define NDEF_MODE_UNKNOWN                3
73525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
74525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
75525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/* Name strings for target types. These *must* match the values in TagTechnology.java */
76525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define TARGET_TYPE_UNKNOWN               -1
77525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define TARGET_TYPE_ISO14443_3A           1
78525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define TARGET_TYPE_ISO14443_3B           2
79525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define TARGET_TYPE_ISO14443_4            3
80525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define TARGET_TYPE_FELICA                4
81525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define TARGET_TYPE_ISO15693              5
82525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define TARGET_TYPE_NDEF                  6
83525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define TARGET_TYPE_NDEF_FORMATABLE       7
84525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define TARGET_TYPE_MIFARE_CLASSIC        8
85525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define TARGET_TYPE_MIFARE_UL             9
8697a71fe90493efd5947bb6f18c7b58a7e795c1ddEvan Chu#define TARGET_TYPE_KOVIO_BARCODE         10
87525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
88525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
89525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project//define a few NXP error codes that NFC service expects;
90525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project//see external/libnfc-nxp/src/phLibNfcStatus.h;
91525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project//see external/libnfc-nxp/inc/phNfcStatus.h
92525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define NFCSTATUS_SUCCESS (0x0000)
93525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#define NFCSTATUS_FAILED (0x00FF)
94525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
95525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectstruct nfc_jni_native_data
96525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{
97525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project   /* Thread handle */
98525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project   pthread_t thread;
99525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project   int running;
100525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
101525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project   /* Our VM */
102525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project   JavaVM *vm;
103525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project   int env_version;
104525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
105525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project   /* Reference to the NFCManager instance */
106525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project   jobject manager;
107525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
108525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project   /* Cached objects */
109525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project   jobject cached_NfcTag;
110525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project   jobject cached_P2pDevice;
111525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
112525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project   /* Secure Element selected */
113525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project   int seId;
114525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
115525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project   /* LLCP params */
116525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project   int lto;
117525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project   int miu;
118525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project   int wks;
119525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project   int opt;
120525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
121525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project   int tech_mask;
122c4e4277a71c70e96198cb760676ad3b40f9e0e3dMartijn Coenen   int discovery_duration;
123525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
124525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project   /* Tag detected */
125525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project   jobject tag;
126525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
127525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project   int tHandle;
128525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project   int tProtocols[16];
129525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project   int handles[16];
130525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project};
131525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
132525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
133a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chuclass ScopedAttach
134a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu{
135a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chupublic:
136a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu    ScopedAttach(JavaVM* vm, JNIEnv** env) : vm_(vm)
137a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu    {
138a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu        vm_->AttachCurrentThread(env, NULL);
139a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu    }
140a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu
141a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu    ~ScopedAttach()
142a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu    {
143a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu        vm_->DetachCurrentThread();
144a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu    }
145a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu
146a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chuprivate:
147a8aa07142ea0078d3ae4ae486e094e2f2f4ff732Evan Chu        JavaVM* vm_;
1482534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes};
1492534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes
1502534d9a546f24435d9dab8168f9ea5bf8ca1eb9bElliott Hughes
151525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectextern "C"
152525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{
153525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project    jint JNI_OnLoad(JavaVM *jvm, void *reserved);
154525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project}
155525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
156525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
157525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectnamespace android
158525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{
159525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project    int nfc_jni_cache_object (JNIEnv *e, const char *clsname, jobject *cached_obj);
160b5a6c9615433734869c7a73a06c1b3799ebe0c9fMartijn Coenen    int nfc_jni_cache_object_local (JNIEnv *e, const char *className, jobject *cachedObj);
161525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project    int nfc_jni_get_nfc_socket_handle (JNIEnv *e, jobject o);
162525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project    struct nfc_jni_native_data* nfc_jni_get_nat (JNIEnv *e, jobject o);
163525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project    int register_com_android_nfc_NativeNfcManager (JNIEnv *e);
164525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project    int register_com_android_nfc_NativeNfcTag (JNIEnv *e);
165525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project    int register_com_android_nfc_NativeP2pDevice (JNIEnv *e);
166525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project    int register_com_android_nfc_NativeLlcpConnectionlessSocket (JNIEnv *e);
167525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project    int register_com_android_nfc_NativeLlcpServiceSocket (JNIEnv *e);
168525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project    int register_com_android_nfc_NativeLlcpSocket (JNIEnv *e);
169525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} // namespace android
170