diff options
| author | 2017-07-21 05:08:25 +0000 | |
|---|---|---|
| committer | 2017-07-21 05:08:25 +0000 | |
| commit | 1e43a74a47b8bafac35226f349d82c4d07d50f08 (patch) | |
| tree | 5a1f485f14ae3e9de103520beacc2c006535bb1b | |
| parent | 640f04ef38d39c03b5374a1616ce96f333df0851 (diff) | |
| parent | f8469ccf17a7ff257c3251af377095d6e004aa6e (diff) | |
Merge "NFC DTA Integration" into oc-dr1-dev
am: f8469ccf17
Change-Id: I8acca990e6191360fc3f4f9c668f74d7a06d6a52
| -rw-r--r-- | Android.mk | 1 | ||||
| -rw-r--r-- | core/java/android/nfc/INfcAdapter.aidl | 3 | ||||
| -rw-r--r-- | core/java/android/nfc/INfcDta.aidl | 34 | ||||
| -rw-r--r-- | core/java/android/nfc/NfcAdapter.java | 20 | ||||
| -rw-r--r-- | core/java/android/nfc/dta/NfcDta.java | 167 |
5 files changed, 222 insertions, 3 deletions
diff --git a/Android.mk b/Android.mk index 37301729ea75..4695a1970cbc 100644 --- a/Android.mk +++ b/Android.mk @@ -247,6 +247,7 @@ LOCAL_SRC_FILES += \ core/java/android/nfc/INfcCardEmulation.aidl \ core/java/android/nfc/INfcFCardEmulation.aidl \ core/java/android/nfc/INfcUnlockHandler.aidl \ + core/java/android/nfc/INfcDta.aidl \ core/java/android/nfc/ITagRemovedCallback.aidl \ core/java/android/os/IBatteryPropertiesListener.aidl \ core/java/android/os/IBatteryPropertiesRegistrar.aidl \ diff --git a/core/java/android/nfc/INfcAdapter.aidl b/core/java/android/nfc/INfcAdapter.aidl index f991efed07eb..6801618e6a68 100644 --- a/core/java/android/nfc/INfcAdapter.aidl +++ b/core/java/android/nfc/INfcAdapter.aidl @@ -29,6 +29,7 @@ import android.nfc.INfcCardEmulation; import android.nfc.INfcFCardEmulation; import android.nfc.INfcUnlockHandler; import android.nfc.ITagRemovedCallback; +import android.nfc.INfcDta; import android.os.Bundle; /** @@ -40,7 +41,7 @@ interface INfcAdapter INfcCardEmulation getNfcCardEmulationInterface(); INfcFCardEmulation getNfcFCardEmulationInterface(); INfcAdapterExtras getNfcAdapterExtrasInterface(in String pkg); - + INfcDta getNfcDtaInterface(in String pkg); int getState(); boolean disable(boolean saveState); boolean enable(); diff --git a/core/java/android/nfc/INfcDta.aidl b/core/java/android/nfc/INfcDta.aidl new file mode 100644 index 000000000000..4cc59271362b --- /dev/null +++ b/core/java/android/nfc/INfcDta.aidl @@ -0,0 +1,34 @@ + /* + * Copyright (C) 2017 NXP Semiconductors + * + * 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. + */ +package android.nfc; + +import android.os.Bundle; + +/** + * {@hide} + */ +interface INfcDta { + + void enableDta(); + void disableDta(); + boolean enableServer(String serviceName, int serviceSap, int miu, + int rwSize,int testCaseId); + void disableServer(); + boolean enableClient(String serviceName, int miu, int rwSize, + int testCaseId); + void disableClient(); + boolean registerMessageService(String msgServiceName); +} diff --git a/core/java/android/nfc/NfcAdapter.java b/core/java/android/nfc/NfcAdapter.java index 48869c71b685..debef6310f14 100644 --- a/core/java/android/nfc/NfcAdapter.java +++ b/core/java/android/nfc/NfcAdapter.java @@ -16,8 +16,6 @@ package android.nfc; -import java.util.HashMap; - import android.annotation.RequiresPermission; import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; @@ -43,6 +41,7 @@ import android.os.ServiceManager; import android.util.Log; import java.io.IOException; +import java.util.HashMap; /** * Represents the local NFC adapter. @@ -627,6 +626,23 @@ public final class NfcAdapter { } /** + * Returns the binder interface to the NFC-DTA test interface. + * @hide + */ + public INfcDta getNfcDtaInterface() { + if (mContext == null) { + throw new UnsupportedOperationException("You need a context on NfcAdapter to use the " + + " NFC extras APIs"); + } + try { + return sService.getNfcDtaInterface(mContext.getPackageName()); + } catch (RemoteException e) { + attemptDeadServiceRecovery(e); + return null; + } + } + + /** * NFC service dead - attempt best effort recovery * @hide */ diff --git a/core/java/android/nfc/dta/NfcDta.java b/core/java/android/nfc/dta/NfcDta.java new file mode 100644 index 000000000000..88016623434d --- /dev/null +++ b/core/java/android/nfc/dta/NfcDta.java @@ -0,0 +1,167 @@ +/* + * Copyright (C) 2017 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. + */ + +package android.nfc.dta; + +import android.content.Context; +import android.nfc.INfcDta; +import android.nfc.NfcAdapter; +import android.os.RemoteException; +import android.util.Log; + +import java.util.HashMap; + +/** + * This class provides the primary API for DTA operations. + * @hide + */ +public final class NfcDta { + private static final String TAG = "NfcDta"; + + private static INfcDta sService; + private static HashMap<Context, NfcDta> sNfcDtas = new HashMap<Context, NfcDta>(); + + private final Context mContext; + + private NfcDta(Context context, INfcDta service) { + mContext = context.getApplicationContext(); + sService = service; + } + + /** + * Helper to get an instance of this class. + * + * @param adapter A reference to an NfcAdapter object. + * @return + */ + public static synchronized NfcDta getInstance(NfcAdapter adapter) { + if (adapter == null) throw new NullPointerException("NfcAdapter is null"); + Context context = adapter.getContext(); + if (context == null) { + Log.e(TAG, "NfcAdapter context is null."); + throw new UnsupportedOperationException(); + } + + NfcDta manager = sNfcDtas.get(context); + if (manager == null) { + INfcDta service = adapter.getNfcDtaInterface(); + if (service == null) { + Log.e(TAG, "This device does not implement the INfcDta interface."); + throw new UnsupportedOperationException(); + } + manager = new NfcDta(context, service); + sNfcDtas.put(context, manager); + } + return manager; + } + + /** + * Enables DTA mode + * + * @return true/false if enabling was successful + */ + public boolean enableDta() { + try { + sService.enableDta(); + } catch (RemoteException e) { + return false; + } + return true; + } + + /** + * Disables DTA mode + * + * @return true/false if disabling was successful + */ + public boolean disableDta() { + try { + sService.disableDta(); + } catch (RemoteException e) { + return false; + } + return true; + } + + /** + * Enables Server + * + * @return true/false if enabling was successful + */ + public boolean enableServer(String serviceName, int serviceSap, int miu, + int rwSize, int testCaseId) { + try { + return sService.enableServer(serviceName, serviceSap, miu, rwSize, testCaseId); + } catch (RemoteException e) { + return false; + } + } + + /** + * Disables Server + * + * @return true/false if disabling was successful + */ + public boolean disableServer() { + try { + sService.disableServer(); + } catch (RemoteException e) { + return false; + } + return true; + } + + /** + * Enables Client + * + * @return true/false if enabling was successful + */ + public boolean enableClient(String serviceName, int miu, int rwSize, + int testCaseId) { + try { + return sService.enableClient(serviceName, miu, rwSize, testCaseId); + } catch (RemoteException e) { + return false; + } + } + + /** + * Disables client + * + * @return true/false if disabling was successful + */ + public boolean disableClient() { + try { + sService.disableClient(); + } catch (RemoteException e) { + return false; + } + return true; + } + + /** + * Registers Message Service + * + * @return true/false if registration was successful + */ + public boolean registerMessageService(String msgServiceName) { + try { + return sService.registerMessageService(msgServiceName); + } catch (RemoteException e) { + return false; + } + } +} |