blob: 8ab2b911de156b5818c67aebde01b945a0709139 [file] [log] [blame]
nxpandroid64fd68c2015-09-23 16:45:15 +05301/*
2 * Copyright (C) 2010 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16/******************************************************************************
nxf500513a018e72019-04-23 17:11:41 +053017*
18* The original Work has been changed by NXP.
19*
20* Licensed under the Apache License, Version 2.0 (the "License");
21* you may not use this file except in compliance with the License.
22* You may obtain a copy of the License at
23*
24* http://www.apache.org/licenses/LICENSE-2.0
25*
26* Unless required by applicable law or agreed to in writing, software
27* distributed under the License is distributed on an "AS IS" BASIS,
28* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
29* See the License for the specific language governing permissions and
30* limitations under the License.
31*
32* Copyright 2018-2019 NXP
33*
34******************************************************************************/
nxpandroid64fd68c2015-09-23 16:45:15 +053035package com.android.nfc.dhimpl;
36
nxpandroid64fd68c2015-09-23 16:45:15 +053037import android.content.Context;
nxpandroid64fd68c2015-09-23 16:45:15 +053038import android.nfc.ErrorCodes;
39import android.nfc.tech.Ndef;
40import android.nfc.tech.TagTechnology;
41import android.util.Log;
nxpandroid64fd68c2015-09-23 16:45:15 +053042
nxpandroid64fd68c2015-09-23 16:45:15 +053043import com.android.nfc.DeviceHost;
44import com.android.nfc.LlcpException;
45import com.android.nfc.NfcDiscoveryParameters;
Nikhil Chhabra1e1ac462018-01-10 12:53:43 +053046
47import java.io.FileDescriptor;
nxpandroid34627bd2016-05-27 15:52:30 +053048import java.util.Arrays;
49import java.util.Iterator;
50import java.util.HashMap;
51
nxpandroid64fd68c2015-09-23 16:45:15 +053052/**
53 * Native interface to the NFC Manager functions
54 */
55public class NativeNfcManager implements DeviceHost {
56 private static final String TAG = "NativeNfcManager";
nxpandroid64fd68c2015-09-23 16:45:15 +053057 static final String PREF = "NciDeviceHost";
58
59 static final int DEFAULT_LLCP_MIU = 1980;
60 static final int DEFAULT_LLCP_RWSIZE = 2;
Anil Hiranniahc1805912019-05-15 21:49:59 +053061 static final int MODE_DEDICATED = 1;
62 static final int MODE_NORMAL = 0;
nxpandroid64fd68c2015-09-23 16:45:15 +053063 static final String DRIVER_NAME = "android-nci";
64
nxpandroid64fd68c2015-09-23 16:45:15 +053065 static {
66 System.loadLibrary("nfc_nci_jni");
67 }
68
nxpandroid64fd68c2015-09-23 16:45:15 +053069 /* Native structure */
70 private long mNative;
71
Suhas Suresh28342232018-04-26 19:10:52 +053072 private int mIsoDepMaxTransceiveLength;
nxpandroid64fd68c2015-09-23 16:45:15 +053073 private final DeviceHostListener mListener;
Pratap Reddy7e57f0d2018-03-15 16:54:33 +053074 private final NativeNfcMposManager mMposMgr;
nxpandroid64fd68c2015-09-23 16:45:15 +053075 private final Context mContext;
nxf500513a018e72019-04-23 17:11:41 +053076
nxpandroid34627bd2016-05-27 15:52:30 +053077 private final Object mLock = new Object();
78 private final HashMap<Integer, byte[]> mT3tIdentifiers = new HashMap<Integer, byte[]>();
nxf500513a018e72019-04-23 17:11:41 +053079
nxpandroid64fd68c2015-09-23 16:45:15 +053080 public NativeNfcManager(Context context, DeviceHostListener listener) {
81 mListener = listener;
82 initializeNativeStructure();
83 mContext = context;
Pratap Reddy7e57f0d2018-03-15 16:54:33 +053084 mMposMgr = new NativeNfcMposManager();
nxpandroid64fd68c2015-09-23 16:45:15 +053085 }
86
87 public native boolean initializeNativeStructure();
88
89 private native boolean doDownload();
nxpandroid64fd68c2015-09-23 16:45:15 +053090
91 public native int doGetLastError();
92
93 @Override
nxf500513a018e72019-04-23 17:11:41 +053094 public boolean checkFirmware() {
95 return doDownload();
96 }
Anil Hiranniahc1805912019-05-15 21:49:59 +053097 public native boolean doPartialInitForEseCosUpdate();
98 public native boolean doPartialDeinitForEseCosUpdate();
nxf500513a018e72019-04-23 17:11:41 +053099
100 @Override
Anil Hiranniahc1805912019-05-15 21:49:59 +0530101 public boolean accessControlForCOSU (int mode) {
102 boolean stat = false;
103 if(mode == MODE_DEDICATED) {
104 stat = doPartialInitForEseCosUpdate();
105 }
106 else if(mode == MODE_NORMAL) {
107 stat = doPartialDeinitForEseCosUpdate();
108 }
109 return stat;
nxpandroid64fd68c2015-09-23 16:45:15 +0530110 }
111
112 private native boolean doInitialize();
113
Suhas Suresh28342232018-04-26 19:10:52 +0530114 private native int getIsoDepMaxTransceiveLength();
115
nxpandroid64fd68c2015-09-23 16:45:15 +0530116 @Override
117 public boolean initialize() {
Suhas Suresh28342232018-04-26 19:10:52 +0530118 boolean ret = doInitialize();
119 mIsoDepMaxTransceiveLength = getIsoDepMaxTransceiveLength();
120 return ret;
nxpandroid64fd68c2015-09-23 16:45:15 +0530121 }
122
123 private native void doEnableDtaMode();
124
125 @Override
126 public void enableDtaMode() {
nxpandroid64fd68c2015-09-23 16:45:15 +0530127 doEnableDtaMode();
128 }
129
130 private native void doDisableDtaMode();
131
132 @Override
133 public void disableDtaMode() {
134 Log.d(TAG,"disableDtaMode : entry");
135 doDisableDtaMode();
136 }
137
Suhas Suresh1fe09dc2018-05-07 11:55:06 +0530138 private native void doFactoryReset();
139
140 @Override
141 public void factoryReset() {
142 doFactoryReset();
143 }
144
Suhas Sureshc9772c82018-04-27 15:41:19 +0530145 private native void doShutdown();
146
147 @Override
148 public void shutdown() {
149 doShutdown();
150 }
151
nxpandroid64fd68c2015-09-23 16:45:15 +0530152 private native boolean doDeinitialize();
153
154 @Override
155 public boolean deinitialize() {
nxpandroid64fd68c2015-09-23 16:45:15 +0530156 return doDeinitialize();
157 }
158
159 @Override
160 public String getName() {
161 return DRIVER_NAME;
162 }
163
164 @Override
165 public native boolean sendRawFrame(byte[] data);
166
nxf500513a018e72019-04-23 17:11:41 +0530167 public native boolean doClearRoutingEntry(int type );
168
nxpandroid64fd68c2015-09-23 16:45:15 +0530169 @Override
nxf500513a018e72019-04-23 17:11:41 +0530170 public boolean clearRoutingEntry( int type ) {
171 return(doClearRoutingEntry( type ));
nxpandroid64fd68c2015-09-23 16:45:15 +0530172 }
173
nxf500513a018e72019-04-23 17:11:41 +0530174 public native boolean doSetRoutingEntry(int type, int value, int route, int power);
175 @Override
176 public boolean setRoutingEntry(int type, int value, int route, int power) {
177 return(doSetRoutingEntry(type, value, route, power));
178 }
Ganesh Deva9857c432019-06-12 12:27:21 +0530179
nxf500513a018e72019-04-23 17:11:41 +0530180 @Override
181 public native boolean routeAid(byte[] aid, int route, int aidInfo, int powerState);
182
183
184 @Override
185 public native boolean unrouteAid(byte[] aid);
nxpandroid64fd68c2015-09-23 16:45:15 +0530186
187 @Override
nxpandroid64fd68c2015-09-23 16:45:15 +0530188 public native int getAidTableSize();
189
190 @Override
191 public native int getDefaultAidRoute();
192
193 @Override
194 public native int getDefaultDesfireRoute();
195
196 @Override
197 public native int getDefaultMifareCLTRoute();
198
199 @Override
nxf500513a018e72019-04-23 17:11:41 +0530200 public native int getDefaultFelicaCLTRoute();
nxpandroida9a68ba2016-01-14 21:12:17 +0530201
202 @Override
Ganesh Deva9857c432019-06-12 12:27:21 +0530203 public native void doResonantFrequency(boolean isResonantFreq);
204
205 @Override
nxf500513a018e72019-04-23 17:11:41 +0530206 public native int getDefaultAidPowerState();
nxf38293cd495622018-06-29 10:25:10 +0530207
208 @Override
nxpandroida9a68ba2016-01-14 21:12:17 +0530209 public native int getDefaultDesfirePowerState();
210
211 @Override
212 public native int getDefaultMifareCLTPowerState();
213
214 @Override
nxf500513a018e72019-04-23 17:11:41 +0530215 public native int getDefaultFelicaCLTPowerState();
216
217 @Override
218 public native int getGsmaPwrState();
219
220 @Override
221 public native boolean commitRouting();
222
223 @Override
224 public native void doChangeDiscoveryTech(int pollTech, int listenTech);
225
226 @Override
227 public native void setEmptyAidRoute(int deafultAidroute);
228
229 @Override
nxf500513a018e72019-04-23 17:11:41 +0530230 public native int[] doGetActiveSecureElementList();
231
Suhas Sureshf2aa04f2019-06-14 17:55:46 +0530232 @Override
233 public native int doSetFieldDetectMode(boolean mode);
234
235 @Override
236 public native boolean isFieldDetectEnabled();
237
nxf500513a018e72019-04-23 17:11:41 +0530238 public native int doRegisterT3tIdentifier(byte[] t3tIdentifier);
239
240 @Override
241 public void registerT3tIdentifier(byte[] t3tIdentifier) {
242 synchronized (mLock) {
243 int handle = doRegisterT3tIdentifier(t3tIdentifier);
244 if (handle != 0xffff) {
245 mT3tIdentifiers.put(Integer.valueOf(handle), t3tIdentifier);
246 }
247 }
248 }
249
250 public native void doDeregisterT3tIdentifier(int handle);
251
252 @Override
253 public void deregisterT3tIdentifier(byte[] t3tIdentifier) {
254 synchronized (mLock) {
255 Iterator<Integer> it = mT3tIdentifiers.keySet().iterator();
256 while (it.hasNext()) {
257 int handle = it.next().intValue();
258 byte[] value = mT3tIdentifiers.get(handle);
259 if (Arrays.equals(value, t3tIdentifier)) {
260 doDeregisterT3tIdentifier(handle);
261 mT3tIdentifiers.remove(handle);
262 break;
263 }
264 }
265 }
266 }
267
268 @Override
269 public void clearT3tIdentifiersCache() {
270 synchronized (mLock) {
271 mT3tIdentifiers.clear();
272 }
273 }
274
275 @Override
276 public native int getLfT3tMax();
nxpandroid64fd68c2015-09-23 16:45:15 +0530277
278 @Override
nxpandroide66eb092017-07-12 21:36:08 +0530279 public native void doSetScreenState(int screen_state_mask);
nxpandroid64fd68c2015-09-23 16:45:15 +0530280
nxpandroid1153eb32015-11-06 18:46:58 +0530281 @Override
nxpandroide66eb092017-07-12 21:36:08 +0530282 public native int getNciVersion();
nxpandroid64fd68c2015-09-23 16:45:15 +0530283
284 private native void doEnableDiscovery(int techMask,
285 boolean enableLowPowerPolling,
286 boolean enableReaderMode,
nxf500513a018e72019-04-23 17:11:41 +0530287 boolean enableHostRouting,
nxpandroid64fd68c2015-09-23 16:45:15 +0530288 boolean enableP2p,
289 boolean restart);
nxpandroid64fd68c2015-09-23 16:45:15 +0530290 @Override
291 public void enableDiscovery(NfcDiscoveryParameters params, boolean restart) {
292 doEnableDiscovery(params.getTechMask(), params.shouldEnableLowPowerDiscovery(),
nxf500513a018e72019-04-23 17:11:41 +0530293 params.shouldEnableReaderMode(), params.shouldEnableHostRouting(),
294 params.shouldEnableP2p(), restart);
nxpandroid64fd68c2015-09-23 16:45:15 +0530295 }
296
297 @Override
298 public native void disableDiscovery();
nxpandroid64fd68c2015-09-23 16:45:15 +0530299
nxf500513a018e72019-04-23 17:11:41 +0530300 @Override
Pratap Reddy7e57f0d2018-03-15 16:54:33 +0530301 public void setEtsiReaederState(int newState) {
302 mMposMgr.doSetEtsiReaederState(newState);
303 }
nxpandroid64fd68c2015-09-23 16:45:15 +0530304
305 @Override
Pratap Reddy7e57f0d2018-03-15 16:54:33 +0530306 public int getEtsiReaederState() {
307 int state;
308 state = mMposMgr.doGetEtsiReaederState();
309 return state;
310 }
nxpandroid64fd68c2015-09-23 16:45:15 +0530311
312 @Override
Pratap Reddy7e57f0d2018-03-15 16:54:33 +0530313 public void etsiReaderConfig(int eeHandle) {
314 mMposMgr.doEtsiReaderConfig(eeHandle);
315 }
nxpandroid64fd68c2015-09-23 16:45:15 +0530316
317 @Override
Pratap Reddy7e57f0d2018-03-15 16:54:33 +0530318 public void notifyEEReaderEvent(int evt) {
319 mMposMgr.doNotifyEEReaderEvent(evt);
320 }
nxpandroid64fd68c2015-09-23 16:45:15 +0530321
322 @Override
Pratap Reddy7e57f0d2018-03-15 16:54:33 +0530323 public void etsiInitConfig() {
324 mMposMgr.doEtsiInitConfig();
325 }
nxpandroid64fd68c2015-09-23 16:45:15 +0530326
327 @Override
Pratap Reddy7e57f0d2018-03-15 16:54:33 +0530328 public void etsiResetReaderConfig() {
329 mMposMgr.doEtsiResetReaderConfig();
330 }
331
332 @Override
333 public void stopPoll(int mode) {
334 mMposMgr.doStopPoll(mode);
335 }
336
337 @Override
338 public void startPoll() {
339 mMposMgr.doStartPoll();
340 }
341
342 @Override
343 public int mposSetReaderMode(boolean on) {
344 return mMposMgr.doMposSetReaderMode(on);
345 }
nxpandroid64fd68c2015-09-23 16:45:15 +0530346
347 @Override
Pratap Reddy49abbe32018-03-27 16:51:59 +0530348 public boolean mposGetReaderMode() {
349 return mMposMgr.doMposGetReaderMode();
350 }
351
nxpandroid64fd68c2015-09-23 16:45:15 +0530352 private native NativeLlcpConnectionlessSocket doCreateLlcpConnectionlessSocket(int nSap,
353 String sn);
354
355 @Override
356 public LlcpConnectionlessSocket createLlcpConnectionlessSocket(int nSap, String sn)
357 throws LlcpException {
358 LlcpConnectionlessSocket socket = doCreateLlcpConnectionlessSocket(nSap, sn);
359 if (socket != null) {
360 return socket;
361 } else {
362 /* Get Error Status */
363 int error = doGetLastError();
364
365 Log.d(TAG, "failed to create llcp socket: " + ErrorCodes.asString(error));
366
367 switch (error) {
368 case ErrorCodes.ERROR_BUFFER_TO_SMALL:
369 case ErrorCodes.ERROR_INSUFFICIENT_RESOURCES:
370 throw new LlcpException(error);
371 default:
372 throw new LlcpException(ErrorCodes.ERROR_SOCKET_CREATION);
373 }
374 }
375 }
376
377 private native NativeLlcpServiceSocket doCreateLlcpServiceSocket(int nSap, String sn, int miu,
378 int rw, int linearBufferLength);
379 @Override
380 public LlcpServerSocket createLlcpServerSocket(int nSap, String sn, int miu,
381 int rw, int linearBufferLength) throws LlcpException {
382 LlcpServerSocket socket = doCreateLlcpServiceSocket(nSap, sn, miu, rw, linearBufferLength);
383 if (socket != null) {
384 return socket;
385 } else {
386 /* Get Error Status */
387 int error = doGetLastError();
388
389 Log.d(TAG, "failed to create llcp socket: " + ErrorCodes.asString(error));
390
391 switch (error) {
392 case ErrorCodes.ERROR_BUFFER_TO_SMALL:
393 case ErrorCodes.ERROR_INSUFFICIENT_RESOURCES:
394 throw new LlcpException(error);
395 default:
396 throw new LlcpException(ErrorCodes.ERROR_SOCKET_CREATION);
397 }
398 }
399 }
400
401 private native NativeLlcpSocket doCreateLlcpSocket(int sap, int miu, int rw,
402 int linearBufferLength);
403 @Override
404 public LlcpSocket createLlcpSocket(int sap, int miu, int rw,
405 int linearBufferLength) throws LlcpException {
406 LlcpSocket socket = doCreateLlcpSocket(sap, miu, rw, linearBufferLength);
407 if (socket != null) {
408 return socket;
409 } else {
410 /* Get Error Status */
411 int error = doGetLastError();
412
413 Log.d(TAG, "failed to create llcp socket: " + ErrorCodes.asString(error));
414
415 switch (error) {
416 case ErrorCodes.ERROR_BUFFER_TO_SMALL:
417 case ErrorCodes.ERROR_INSUFFICIENT_RESOURCES:
418 throw new LlcpException(error);
419 default:
420 throw new LlcpException(ErrorCodes.ERROR_SOCKET_CREATION);
421 }
422 }
423 }
424
425 @Override
426 public native boolean doCheckLlcp();
427
428 @Override
nxpandroid64fd68c2015-09-23 16:45:15 +0530429 public native boolean doActivateLlcp();
430
431 private native void doResetTimeouts();
432
433 @Override
434 public void resetTimeouts() {
435 doResetTimeouts();
436 }
437
438 @Override
nxpandroid6fd9cdb2017-07-12 18:25:41 +0530439 public native void doAbort(String msg);
nxpandroid64fd68c2015-09-23 16:45:15 +0530440
441 private native boolean doSetTimeout(int tech, int timeout);
442 @Override
443 public boolean setTimeout(int tech, int timeout) {
444 return doSetTimeout(tech, timeout);
445 }
446
447 private native int doGetTimeout(int tech);
448 @Override
449 public int getTimeout(int tech) {
450 return doGetTimeout(tech);
451 }
452
453
454 @Override
455 public boolean canMakeReadOnly(int ndefType) {
nxf500513a018e72019-04-23 17:11:41 +0530456 return (ndefType == Ndef.TYPE_1 || ndefType == Ndef.TYPE_2);
nxpandroid64fd68c2015-09-23 16:45:15 +0530457 }
458
459 @Override
460 public int getMaxTransceiveLength(int technology) {
461 switch (technology) {
462 case (TagTechnology.NFC_A):
463 case (TagTechnology.MIFARE_CLASSIC):
464 case (TagTechnology.MIFARE_ULTRALIGHT):
465 return 253; // PN544 RF buffer = 255 bytes, subtract two for CRC
466 case (TagTechnology.NFC_B):
467 /////////////////////////////////////////////////////////////////
468 // Broadcom: Since BCM2079x supports this, set NfcB max size.
469 //return 0; // PN544 does not support transceive of raw NfcB
470 return 253; // PN544 does not support transceive of raw NfcB
471 case (TagTechnology.NFC_V):
472 return 253; // PN544 RF buffer = 255 bytes, subtract two for CRC
473 case (TagTechnology.ISO_DEP):
Suhas Suresh28342232018-04-26 19:10:52 +0530474 return mIsoDepMaxTransceiveLength;
nxpandroid64fd68c2015-09-23 16:45:15 +0530475 case (TagTechnology.NFC_F):
Suhas Sureshca03da42018-05-15 17:51:57 +0530476 return 255;
nxpandroid64fd68c2015-09-23 16:45:15 +0530477 default:
478 return 0;
479 }
480
481 }
482
nxpandroid64fd68c2015-09-23 16:45:15 +0530483 private native void doSetP2pInitiatorModes(int modes);
484 @Override
485 public void setP2pInitiatorModes(int modes) {
486 doSetP2pInitiatorModes(modes);
487 }
488
489 private native void doSetP2pTargetModes(int modes);
490 @Override
491 public void setP2pTargetModes(int modes) {
492 doSetP2pTargetModes(modes);
493 }
494
495 @Override
496 public boolean getExtendedLengthApdusSupported() {
Suhas Suresh28342232018-04-26 19:10:52 +0530497 /* 261 is the default size if extended length frames aren't supported */
nxf500513a018e72019-04-23 17:11:41 +0530498 if (getMaxTransceiveLength(TagTechnology.ISO_DEP) > 261)
Suhas Suresh28342232018-04-26 19:10:52 +0530499 return true;
nxf500513a018e72019-04-23 17:11:41 +0530500 return false;
nxpandroid64fd68c2015-09-23 16:45:15 +0530501 }
502
503 @Override
504 public int getDefaultLlcpMiu() {
505 return DEFAULT_LLCP_MIU;
506 }
507
508 @Override
509 public int getDefaultLlcpRwSize() {
510 return DEFAULT_LLCP_RWSIZE;
511 }
512
Nikhil Chhabra1e1ac462018-01-10 12:53:43 +0530513 private native void doDump(FileDescriptor fd);
nxpandroid64fd68c2015-09-23 16:45:15 +0530514 @Override
Nikhil Chhabra1e1ac462018-01-10 12:53:43 +0530515 public void dump(FileDescriptor fd) {
516 doDump(fd);
nxpandroid64fd68c2015-09-23 16:45:15 +0530517 }
518
519 private native void doEnableScreenOffSuspend();
520 @Override
521 public boolean enableScreenOffSuspend() {
522 doEnableScreenOffSuspend();
523 return true;
524 }
525
526 private native void doDisableScreenOffSuspend();
527 @Override
528 public boolean disableScreenOffSuspend() {
529 doDisableScreenOffSuspend();
530 return true;
531 }
532
nxf500513a018e72019-04-23 17:11:41 +0530533 private native boolean doSetNfcSecure(boolean enable);
nxpandroid64fd68c2015-09-23 16:45:15 +0530534 @Override
nxf500513a018e72019-04-23 17:11:41 +0530535 public boolean setNfcSecure(boolean enable) {
536 return doSetNfcSecure(enable);
nxpandroid34627bd2016-05-27 15:52:30 +0530537 }
538
nxpandroid64fd68c2015-09-23 16:45:15 +0530539 /**
540 * Notifies Ndef Message (TODO: rename into notifyTargetDiscovered)
541 */
542 private void notifyNdefMessageListeners(NativeNfcTag tag) {
543 mListener.onRemoteEndpointDiscovered(tag);
544 }
nxf500513a018e72019-04-23 17:11:41 +0530545 private void notifySeListenActivated() {
546 mListener.onSeListenActivated();
nxpandroid64fd68c2015-09-23 16:45:15 +0530547 }
548
nxf500513a018e72019-04-23 17:11:41 +0530549 private void notifySeListenDeactivated() {
550 mListener.onSeListenDeactivated();
nxpandroid64fd68c2015-09-23 16:45:15 +0530551 }
552
nxf500513a018e72019-04-23 17:11:41 +0530553 private void notifySeInitialized() {
554 mListener.onSeInitialized();
nxpandroid64fd68c2015-09-23 16:45:15 +0530555 }
nxpandroid64fd68c2015-09-23 16:45:15 +0530556 /**
557 * Notifies P2P Device detected, to activate LLCP link
558 */
559 private void notifyLlcpLinkActivation(NativeP2pDevice device) {
560 mListener.onLlcpLinkActivated(device);
561 }
562
563 /**
564 * Notifies P2P Device detected, to activate LLCP link
565 */
566 private void notifyLlcpLinkDeactivated(NativeP2pDevice device) {
567 mListener.onLlcpLinkDeactivated(device);
568 }
569
570 /**
571 * Notifies first packet received from remote LLCP
572 */
573 private void notifyLlcpLinkFirstPacketReceived(NativeP2pDevice device) {
574 mListener.onLlcpFirstPacketReceived(device);
575 }
576
nxpandroid64fd68c2015-09-23 16:45:15 +0530577 /* Reader over SWP listeners*/
Pratap Reddy7e57f0d2018-03-15 16:54:33 +0530578 private void notifyETSIReaderRequested(boolean istechA, boolean istechB) {
579 mListener.onETSIReaderRequestedEvent(istechA, istechB);
nxpandroid64fd68c2015-09-23 16:45:15 +0530580 }
581
Pratap Reddy7e57f0d2018-03-15 16:54:33 +0530582 private void notifyETSIReaderRequestedFail(int FailureCause) {
583 mListener.onETSIReaderRequestedFail(FailureCause);
nxpandroid64fd68c2015-09-23 16:45:15 +0530584 }
585
nxpandroid64fd68c2015-09-23 16:45:15 +0530586 private void notifyonETSIReaderModeStartConfig(int eeHandle) {
587 mListener.onETSIReaderModeStartConfig(eeHandle);
588 }
589
590 private void notifyonETSIReaderModeStopConfig(int disc_ntf_timeout) {
591 mListener.onETSIReaderModeStopConfig(disc_ntf_timeout);
592 }
593
nxf500513a018e72019-04-23 17:11:41 +0530594 private void notifyHostEmuActivated(int technology) {
595 mListener.onHostCardEmulationActivated(technology);
596 }
597
nxpandroid64fd68c2015-09-23 16:45:15 +0530598 private void notifyonETSIReaderModeSwpTimeout(int disc_ntf_timeout) {
599 mListener.onETSIReaderModeSwpTimeout(disc_ntf_timeout);
600 }
601
Pratap Reddy7e57f0d2018-03-15 16:54:33 +0530602 private void notifyonETSIReaderModeRestart() {
603 mListener.onETSIReaderModeRestart();
604 }
605
nxpandroid34627bd2016-05-27 15:52:30 +0530606 private void notifyHostEmuData(int technology, byte[] data) {
607 mListener.onHostCardEmulationData(technology, data);
nxpandroid64fd68c2015-09-23 16:45:15 +0530608 }
609
nxpandroid34627bd2016-05-27 15:52:30 +0530610 private void notifyHostEmuDeactivated(int technology) {
611 mListener.onHostCardEmulationDeactivated(technology);
nxpandroid64fd68c2015-09-23 16:45:15 +0530612 }
613
nxpandroid64fd68c2015-09-23 16:45:15 +0530614 private void notifyRfFieldActivated() {
615 mListener.onRemoteFieldActivated();
616 }
617
618 private void notifyRfFieldDeactivated() {
619 mListener.onRemoteFieldDeactivated();
620 }
621
Suhas Sureshca6584b2018-04-27 17:17:22 +0530622 private void notifyTransactionListeners(byte[] aid, byte[] data, String evtSrc) {
623 mListener.onNfcTransactionEvent(aid, data, evtSrc);
624 }
nxf500513a018e72019-04-23 17:11:41 +0530625/* NXP extension are here */
626 @Override
627 public native int getFWVersion();
628 @Override
629 public native byte[] readerPassThruMode(byte status, byte modulationTyp);
630 @Override
631 public native byte[] transceiveAppData(byte[] data);
632 @Override
633 public native boolean isNfccBusy();
634 @Override
635 public native int setTransitConfig(String configs);
636 @Override
637 public native int getRemainingAidTableSize();
638 @Override
639 public native int doselectUicc(int uiccSlot);
640 @Override
641 public native int doGetSelectedUicc();
642 @Override
643 public native int setPreferredSimSlot(int uiccSlot);
nxpandroid64fd68c2015-09-23 16:45:15 +0530644}