Revert "Add SE hal support for SNXXX" am: 8803e33ec0 am: e950fb8034
Original change: https://android-review.googlesource.com/c/platform/hardware/nxp/secure_element/+/1705508
Change-Id: Ic2b887a470c65ed8b6c70d36ba5151c68377129a
diff --git a/pn8x/1.0/NxpEseService.cpp b/1.0/NxpEseService.cpp
similarity index 99%
rename from pn8x/1.0/NxpEseService.cpp
rename to 1.0/NxpEseService.cpp
index 2569a07..c305338 100755
--- a/pn8x/1.0/NxpEseService.cpp
+++ b/1.0/NxpEseService.cpp
@@ -25,13 +25,13 @@
#include "SecureElement.h"
// Generated HIDL files
+using android::hardware::secure_element::V1_0::ISecureElement;
+using android::hardware::secure_element::V1_0::implementation::SecureElement;
+using android::hardware::configureRpcThreadpool;
+using android::hardware::joinRpcThreadpool;
using android::OK;
using android::sp;
using android::status_t;
-using android::hardware::configureRpcThreadpool;
-using android::hardware::joinRpcThreadpool;
-using android::hardware::secure_element::V1_0::ISecureElement;
-using android::hardware::secure_element::V1_0::implementation::SecureElement;
using vendor::nxp::nxpese::V1_0::INxpEse;
using vendor::nxp::nxpese::V1_0::implementation::NxpEse;
diff --git a/pn8x/1.0/SecureElement.cpp b/1.0/SecureElement.cpp
similarity index 99%
rename from pn8x/1.0/SecureElement.cpp
rename to 1.0/SecureElement.cpp
index 039d872..d4cde23 100644
--- a/pn8x/1.0/SecureElement.cpp
+++ b/1.0/SecureElement.cpp
@@ -37,7 +37,8 @@
}
SecureElement::SecureElement()
- : mOpenedchannelCount(0), mOpenedChannels{false, false, false, false} {}
+ : mOpenedchannelCount(0),
+ mOpenedChannels{false, false, false, false} {}
Return<void> SecureElement::init(
const sp<
diff --git a/pn8x/1.0/SecureElement.h b/1.0/SecureElement.h
similarity index 99%
rename from pn8x/1.0/SecureElement.h
rename to 1.0/SecureElement.h
index 6c314e4..a15028a 100755
--- a/pn8x/1.0/SecureElement.h
+++ b/1.0/SecureElement.h
@@ -31,12 +31,12 @@
namespace V1_0 {
namespace implementation {
-using ::android::sp;
+using ::android::hidl::base::V1_0::IBase;
using ::android::hardware::hidl_vec;
using ::android::hardware::Return;
-using ::android::hardware::Void;
using ::android::hardware::secure_element::V1_0::ISecureElementHalCallback;
-using ::android::hidl::base::V1_0::IBase;
+using ::android::hardware::Void;
+using ::android::sp;
#ifndef MAX_LOGICAL_CHANNELS
#define MAX_LOGICAL_CHANNELS 0x04
diff --git a/pn8x/1.0/android.hardware.secure_element@1.0-service-disabled.rc b/1.0/android.hardware.secure_element@1.0-service-disabled.rc
similarity index 100%
rename from pn8x/1.0/android.hardware.secure_element@1.0-service-disabled.rc
rename to 1.0/android.hardware.secure_element@1.0-service-disabled.rc
diff --git a/pn8x/1.0/android.hardware.secure_element@1.0-service.rc b/1.0/android.hardware.secure_element@1.0-service.rc
similarity index 100%
rename from pn8x/1.0/android.hardware.secure_element@1.0-service.rc
rename to 1.0/android.hardware.secure_element@1.0-service.rc
diff --git a/pn8x/1.1/NxpEseService.cpp b/1.1/NxpEseService.cpp
similarity index 100%
rename from pn8x/1.1/NxpEseService.cpp
rename to 1.1/NxpEseService.cpp
diff --git a/pn8x/1.1/SecureElement.cpp b/1.1/SecureElement.cpp
similarity index 100%
rename from pn8x/1.1/SecureElement.cpp
rename to 1.1/SecureElement.cpp
diff --git a/pn8x/1.1/SecureElement.h b/1.1/SecureElement.h
similarity index 100%
rename from pn8x/1.1/SecureElement.h
rename to 1.1/SecureElement.h
diff --git a/pn8x/1.1/android.hardware.secure_element@1.1-service-disabled.rc b/1.1/android.hardware.secure_element@1.1-service-disabled.rc
similarity index 100%
rename from pn8x/1.1/android.hardware.secure_element@1.1-service-disabled.rc
rename to 1.1/android.hardware.secure_element@1.1-service-disabled.rc
diff --git a/pn8x/1.1/android.hardware.secure_element@1.1-service.rc b/1.1/android.hardware.secure_element@1.1-service.rc
similarity index 100%
rename from pn8x/1.1/android.hardware.secure_element@1.1-service.rc
rename to 1.1/android.hardware.secure_element@1.1-service.rc
diff --git a/Android.bp b/Android.bp
old mode 100644
new mode 100755
index 435a352..d33252c
--- a/Android.bp
+++ b/Android.bp
@@ -1,21 +1,170 @@
-/******************************************************************************
- *
- * Copyright 2021 NXP
- *
- * 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 {
+ default_applicable_licenses: ["hardware_nxp_secure_element_license"],
+}
-subdirs = [
- "snxxx","intf","pn8x",
-]
+// Added automatically by a large-scale-change
+// See: http://go/android-license-faq
+license {
+ name: "hardware_nxp_secure_element_license",
+ visibility: [":__subpackages__"],
+ license_kinds: [
+ "SPDX-license-identifier-Apache-2.0",
+ ],
+ // large-scale-change unable to identify any license_text files
+}
+
+cc_library_shared {
+
+ name: "ese_spi_nxp",
+ defaults: ["hidl_defaults"],
+ proprietary: true,
+
+ srcs: [
+ "libese-spi/p73/lib/phNxpEseDataMgr.cpp",
+ "libese-spi/p73/lib/phNxpEseProto7816_3.cpp",
+ "libese-spi/p73/lib/phNxpEse_Api.cpp",
+ "libese-spi/p73/pal/phNxpEsePal.cpp",
+ "libese-spi/p73/pal/spi/phNxpEsePal_spi.cpp",
+ "libese-spi/p73/spm/phNxpEse_Spm.cpp",
+ "libese-spi/p73/utils/ese_config.cpp",
+ "libese-spi/p73/utils/config.cpp",
+ "libese-spi/p73/utils/ringbuffer.cpp",
+ "libese-spi/src/adaptation/NfcAdaptation.cpp",
+ ],
+
+ local_include_dirs: [
+ "libese-spi/p73/lib",
+ "libese-spi/p73/pal/spi",
+ "libese-spi/p73/utils",
+ "libese-spi/src/include",
+ ],
+ export_include_dirs: [
+ "extns/impl",
+ "libese-spi/common/include",
+ "libese-spi/p73/common",
+ "libese-spi/p73/inc",
+ "libese-spi/p73/pal",
+ ],
+
+ cflags: [
+ "-DANDROID",
+ "-DBUILDCFG=1",
+ "-DNXP_EXTNS=TRUE",
+ "-Wall",
+ "-Werror",
+ ],
+
+ shared_libs: [
+ "android.hardware.nfc@1.0",
+ "android.hardware.nfc@1.1",
+ "libcutils",
+ "libhardware",
+ "libhidlbase",
+ "libutils",
+ "liblog",
+ "libbase",
+ "vendor.nxp.nxpese@1.0",
+ "vendor.nxp.nxpnfc@1.0",
+ ],
+}
+
+cc_library_shared {
+
+ name: "ls_client",
+ defaults: ["hidl_defaults"],
+ proprietary: true,
+
+ srcs: [
+ "ls_client/src/LsLib.cpp",
+ "ls_client/src/LsClient.cpp",
+ ],
+
+ export_include_dirs: ["ls_client/inc"],
+
+ shared_libs: [
+ "ese_spi_nxp",
+ "libcutils",
+ "liblog",
+ "libhidlbase",
+ "liblog",
+ "libutils",
+ "libcrypto"
+ ],
+}
+
+cc_defaults {
+ name: "android.hardware.secure_element@1.1_defaults",
+ relative_install_path: "hw",
+ proprietary: true,
+ defaults: ["hidl_defaults"],
+ srcs: [
+ "1.1/NxpEseService.cpp",
+ "1.1/SecureElement.cpp",
+ "extns/impl/NxpEse.cpp",
+ ],
+
+ shared_libs: [
+ "android.hardware.secure_element@1.0",
+ "android.hardware.secure_element@1.1",
+ "ese_spi_nxp",
+ "libbase",
+ "ls_client",
+ "libcutils",
+ "libhardware",
+ "libhidlbase",
+ "liblog",
+ "libutils",
+ "vendor.nxp.nxpese@1.0",
+ "vendor.nxp.nxpnfc@1.0",
+ ],
+}
+
+cc_defaults {
+ name: "android.hardware.secure_element@1.0_defaults",
+ relative_install_path: "hw",
+ proprietary: true,
+ defaults: ["hidl_defaults"],
+ srcs: [
+ "1.0/NxpEseService.cpp",
+ "1.0/SecureElement.cpp",
+ "extns/impl/NxpEse.cpp",
+ ],
+
+ shared_libs: [
+ "android.hardware.secure_element@1.0",
+ "ese_spi_nxp",
+ "libbase",
+ "ls_client",
+ "libcutils",
+ "libhardware",
+ "libhidlbase",
+ "liblog",
+ "libutils",
+ "vendor.nxp.nxpese@1.0",
+ "vendor.nxp.nxpnfc@1.0",
+ ],
+}
+
+cc_binary {
+ name: "android.hardware.secure_element@1.0-service",
+ init_rc: ["1.0/android.hardware.secure_element@1.0-service.rc"],
+ defaults: ["android.hardware.secure_element@1.0_defaults"],
+}
+
+cc_binary {
+ name: "android.hardware.secure_element@1.0-service-disabled",
+ init_rc: ["1.0/android.hardware.secure_element@1.0-service-disabled.rc"],
+ defaults: ["android.hardware.secure_element@1.0_defaults"],
+}
+
+cc_binary {
+ name: "android.hardware.secure_element@1.1-service",
+ init_rc: ["1.1/android.hardware.secure_element@1.1-service.rc"],
+ defaults: ["android.hardware.secure_element@1.1_defaults"],
+}
+
+cc_binary {
+ name: "android.hardware.secure_element@1.1-service-disabled",
+ init_rc: ["1.1/android.hardware.secure_element@1.1-service-disabled.rc"],
+ defaults: ["android.hardware.secure_element@1.1_defaults"],
+}
diff --git a/pn8x/extns/impl/NxpEse.cpp b/extns/impl/NxpEse.cpp
similarity index 100%
rename from pn8x/extns/impl/NxpEse.cpp
rename to extns/impl/NxpEse.cpp
diff --git a/pn8x/extns/impl/NxpEse.h b/extns/impl/NxpEse.h
similarity index 99%
rename from pn8x/extns/impl/NxpEse.h
rename to extns/impl/NxpEse.h
index 5da9b07..b6af6e3 100644
--- a/pn8x/extns/impl/NxpEse.h
+++ b/extns/impl/NxpEse.h
@@ -31,16 +31,16 @@
namespace V1_0 {
namespace implementation {
-using ::android::sp;
+using ::android::hidl::base::V1_0::DebugInfo;
+using ::android::hidl::base::V1_0::IBase;
+using ::vendor::nxp::nxpese::V1_0::INxpEse;
using ::android::hardware::hidl_array;
using ::android::hardware::hidl_memory;
using ::android::hardware::hidl_string;
using ::android::hardware::hidl_vec;
using ::android::hardware::Return;
using ::android::hardware::Void;
-using ::android::hidl::base::V1_0::DebugInfo;
-using ::android::hidl::base::V1_0::IBase;
-using ::vendor::nxp::nxpese::V1_0::INxpEse;
+using ::android::sp;
struct NxpEse : public INxpEse {
Return<void> ioctl(uint64_t ioctlType, const hidl_vec<uint8_t>& inOutData,
diff --git a/pn8x/extns/impl/hal_nxpese.h b/extns/impl/hal_nxpese.h
similarity index 100%
rename from pn8x/extns/impl/hal_nxpese.h
rename to extns/impl/hal_nxpese.h
diff --git a/extns/intf/nxpese/1.0/Android.bp b/extns/intf/nxpese/1.0/Android.bp
new file mode 100644
index 0000000..013be4f
--- /dev/null
+++ b/extns/intf/nxpese/1.0/Android.bp
@@ -0,0 +1,24 @@
+// This file is autogenerated by hidl-gen -Landroidbp.
+
+package {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "hardware_nxp_secure_element_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-Apache-2.0
+ default_applicable_licenses: ["hardware_nxp_secure_element_license"],
+}
+
+hidl_interface {
+ name: "vendor.nxp.nxpese@1.0",
+ root: "vendor.nxp.nxpese",
+ srcs: [
+ "INxpEse.hal",
+ ],
+ interfaces: [
+ "android.hidl.base@1.0",
+ ],
+ types: [
+ ],
+ gen_java: true,
+}
diff --git a/intf/nxpese/1.0/INxpEse.hal b/extns/intf/nxpese/1.0/INxpEse.hal
similarity index 100%
rename from intf/nxpese/1.0/INxpEse.hal
rename to extns/intf/nxpese/1.0/INxpEse.hal
diff --git a/intf/nxpese/1.0/manifest.xml b/extns/intf/nxpese/1.0/manifest.xml
similarity index 100%
rename from intf/nxpese/1.0/manifest.xml
rename to extns/intf/nxpese/1.0/manifest.xml
diff --git a/extns/intf/nxpese/Android.bp b/extns/intf/nxpese/Android.bp
new file mode 100644
index 0000000..f8abae8
--- /dev/null
+++ b/extns/intf/nxpese/Android.bp
@@ -0,0 +1,12 @@
+package {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "hardware_nxp_secure_element_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-Apache-2.0
+ default_applicable_licenses: ["hardware_nxp_secure_element_license"],
+}
+
+hidl_package_root {
+ name: "vendor.nxp.nxpese",
+}
diff --git a/intf/nxpese/current.txt b/extns/intf/nxpese/current.txt
similarity index 100%
rename from intf/nxpese/current.txt
rename to extns/intf/nxpese/current.txt
diff --git a/intf/nxpese/1.0/Android.bp b/intf/nxpese/1.0/Android.bp
deleted file mode 100644
index 8e22179..0000000
--- a/intf/nxpese/1.0/Android.bp
+++ /dev/null
@@ -1,15 +0,0 @@
-// This file is autogenerated by hidl-gen -Landroidbp.
-
-hidl_interface {
- name: "vendor.nxp.nxpese@1.0",
- root: "vendor.nxp.nxpese",
- srcs: [
- "INxpEse.hal",
- ],
- interfaces: [
- "android.hidl.base@1.0",
- ],
- types: [
- ],
- gen_java: true,
-}
diff --git a/intf/nxpese/Android.bp b/intf/nxpese/Android.bp
deleted file mode 100644
index cdee88e..0000000
--- a/intf/nxpese/Android.bp
+++ /dev/null
@@ -1,3 +0,0 @@
-hidl_package_root {
- name: "vendor.nxp.nxpese",
-}
diff --git a/pn8x/libese-spi/common/include/phNxpEseFeatures.h b/libese-spi/common/include/phNxpEseFeatures.h
similarity index 100%
rename from pn8x/libese-spi/common/include/phNxpEseFeatures.h
rename to libese-spi/common/include/phNxpEseFeatures.h
diff --git a/pn8x/libese-spi/p73/common/phEseStatus.h b/libese-spi/p73/common/phEseStatus.h
similarity index 100%
rename from pn8x/libese-spi/p73/common/phEseStatus.h
rename to libese-spi/p73/common/phEseStatus.h
diff --git a/pn8x/libese-spi/p73/inc/phNxpEse_Api.h b/libese-spi/p73/inc/phNxpEse_Api.h
similarity index 100%
rename from pn8x/libese-spi/p73/inc/phNxpEse_Api.h
rename to libese-spi/p73/inc/phNxpEse_Api.h
diff --git a/pn8x/libese-spi/p73/lib/phNxpEseDataMgr.cpp b/libese-spi/p73/lib/phNxpEseDataMgr.cpp
similarity index 100%
rename from pn8x/libese-spi/p73/lib/phNxpEseDataMgr.cpp
rename to libese-spi/p73/lib/phNxpEseDataMgr.cpp
diff --git a/pn8x/libese-spi/p73/lib/phNxpEseDataMgr.h b/libese-spi/p73/lib/phNxpEseDataMgr.h
similarity index 100%
rename from pn8x/libese-spi/p73/lib/phNxpEseDataMgr.h
rename to libese-spi/p73/lib/phNxpEseDataMgr.h
diff --git a/pn8x/libese-spi/p73/lib/phNxpEseProto7816_3.cpp b/libese-spi/p73/lib/phNxpEseProto7816_3.cpp
similarity index 100%
rename from pn8x/libese-spi/p73/lib/phNxpEseProto7816_3.cpp
rename to libese-spi/p73/lib/phNxpEseProto7816_3.cpp
diff --git a/pn8x/libese-spi/p73/lib/phNxpEseProto7816_3.h b/libese-spi/p73/lib/phNxpEseProto7816_3.h
similarity index 100%
rename from pn8x/libese-spi/p73/lib/phNxpEseProto7816_3.h
rename to libese-spi/p73/lib/phNxpEseProto7816_3.h
diff --git a/pn8x/libese-spi/p73/lib/phNxpEse_Api.cpp b/libese-spi/p73/lib/phNxpEse_Api.cpp
similarity index 100%
rename from pn8x/libese-spi/p73/lib/phNxpEse_Api.cpp
rename to libese-spi/p73/lib/phNxpEse_Api.cpp
diff --git a/pn8x/libese-spi/p73/lib/phNxpEse_Internal.h b/libese-spi/p73/lib/phNxpEse_Internal.h
similarity index 100%
rename from pn8x/libese-spi/p73/lib/phNxpEse_Internal.h
rename to libese-spi/p73/lib/phNxpEse_Internal.h
diff --git a/pn8x/libese-spi/p73/libese-nxp-P73.conf b/libese-spi/p73/libese-nxp-P73.conf
similarity index 100%
rename from pn8x/libese-spi/p73/libese-nxp-P73.conf
rename to libese-spi/p73/libese-nxp-P73.conf
diff --git a/pn8x/libese-spi/p73/pal/phNxpEsePal.cpp b/libese-spi/p73/pal/phNxpEsePal.cpp
similarity index 100%
rename from pn8x/libese-spi/p73/pal/phNxpEsePal.cpp
rename to libese-spi/p73/pal/phNxpEsePal.cpp
diff --git a/pn8x/libese-spi/p73/pal/phNxpEsePal.h b/libese-spi/p73/pal/phNxpEsePal.h
similarity index 100%
rename from pn8x/libese-spi/p73/pal/phNxpEsePal.h
rename to libese-spi/p73/pal/phNxpEsePal.h
diff --git a/pn8x/libese-spi/p73/pal/spi/phNxpEsePal_spi.cpp b/libese-spi/p73/pal/spi/phNxpEsePal_spi.cpp
similarity index 99%
rename from pn8x/libese-spi/p73/pal/spi/phNxpEsePal_spi.cpp
rename to libese-spi/p73/pal/spi/phNxpEsePal_spi.cpp
index a89a5fd..cb2d4c5 100755
--- a/pn8x/libese-spi/p73/pal/spi/phNxpEsePal_spi.cpp
+++ b/libese-spi/p73/pal/spi/phNxpEsePal_spi.cpp
@@ -161,7 +161,7 @@
}
ALOGD_IF(ese_debug_enabled, "Opening port=%s\n", pConfig->pDevName);
- /* open port */
+/* open port */
retry:
nHandle = open((char const*)pConfig->pDevName, O_RDWR);
diff --git a/pn8x/libese-spi/p73/pal/spi/phNxpEsePal_spi.h b/libese-spi/p73/pal/spi/phNxpEsePal_spi.h
similarity index 100%
rename from pn8x/libese-spi/p73/pal/spi/phNxpEsePal_spi.h
rename to libese-spi/p73/pal/spi/phNxpEsePal_spi.h
diff --git a/pn8x/libese-spi/p73/spm/phNxpEse_Spm.cpp b/libese-spi/p73/spm/phNxpEse_Spm.cpp
similarity index 100%
rename from pn8x/libese-spi/p73/spm/phNxpEse_Spm.cpp
rename to libese-spi/p73/spm/phNxpEse_Spm.cpp
diff --git a/pn8x/libese-spi/p73/spm/phNxpEse_Spm.h b/libese-spi/p73/spm/phNxpEse_Spm.h
similarity index 100%
rename from pn8x/libese-spi/p73/spm/phNxpEse_Spm.h
rename to libese-spi/p73/spm/phNxpEse_Spm.h
diff --git a/pn8x/libese-spi/p73/utils/config.cpp b/libese-spi/p73/utils/config.cpp
similarity index 100%
rename from pn8x/libese-spi/p73/utils/config.cpp
rename to libese-spi/p73/utils/config.cpp
diff --git a/pn8x/libese-spi/p73/utils/config.h b/libese-spi/p73/utils/config.h
similarity index 100%
rename from pn8x/libese-spi/p73/utils/config.h
rename to libese-spi/p73/utils/config.h
diff --git a/pn8x/libese-spi/p73/utils/ese_config.cpp b/libese-spi/p73/utils/ese_config.cpp
similarity index 100%
rename from pn8x/libese-spi/p73/utils/ese_config.cpp
rename to libese-spi/p73/utils/ese_config.cpp
diff --git a/pn8x/libese-spi/p73/utils/ese_config.h b/libese-spi/p73/utils/ese_config.h
similarity index 100%
rename from pn8x/libese-spi/p73/utils/ese_config.h
rename to libese-spi/p73/utils/ese_config.h
diff --git a/pn8x/libese-spi/p73/utils/ringbuffer.cpp b/libese-spi/p73/utils/ringbuffer.cpp
similarity index 100%
rename from pn8x/libese-spi/p73/utils/ringbuffer.cpp
rename to libese-spi/p73/utils/ringbuffer.cpp
diff --git a/pn8x/libese-spi/p73/utils/ringbuffer.h b/libese-spi/p73/utils/ringbuffer.h
similarity index 100%
rename from pn8x/libese-spi/p73/utils/ringbuffer.h
rename to libese-spi/p73/utils/ringbuffer.h
diff --git a/pn8x/libese-spi/src/adaptation/NfcAdaptation.cpp b/libese-spi/src/adaptation/NfcAdaptation.cpp
similarity index 99%
rename from pn8x/libese-spi/src/adaptation/NfcAdaptation.cpp
rename to libese-spi/src/adaptation/NfcAdaptation.cpp
index 5f45e44..55745f5 100755
--- a/pn8x/libese-spi/src/adaptation/NfcAdaptation.cpp
+++ b/libese-spi/src/adaptation/NfcAdaptation.cpp
@@ -24,9 +24,9 @@
#include <pthread.h>
using android::sp;
-using android::hardware::hidl_vec;
using android::hardware::Return;
using android::hardware::Void;
+using android::hardware::hidl_vec;
using vendor::nxp::nxpnfc::V1_0::INxpNfc;
sp<INxpNfc> NfcAdaptation::mHalNxpNfc = nullptr;
diff --git a/pn8x/libese-spi/src/include/NfcAdaptation.h b/libese-spi/src/include/NfcAdaptation.h
similarity index 100%
rename from pn8x/libese-spi/src/include/NfcAdaptation.h
rename to libese-spi/src/include/NfcAdaptation.h
diff --git a/pn8x/ls_client/inc/LsClient.h b/ls_client/inc/LsClient.h
similarity index 100%
rename from pn8x/ls_client/inc/LsClient.h
rename to ls_client/inc/LsClient.h
diff --git a/pn8x/ls_client/inc/LsLib.h b/ls_client/inc/LsLib.h
similarity index 100%
rename from pn8x/ls_client/inc/LsLib.h
rename to ls_client/inc/LsLib.h
diff --git a/pn8x/ls_client/src/LsClient.cpp b/ls_client/src/LsClient.cpp
similarity index 99%
rename from pn8x/ls_client/src/LsClient.cpp
rename to ls_client/src/LsClient.cpp
index 8fb4fcd..4c874a9 100755
--- a/pn8x/ls_client/src/LsClient.cpp
+++ b/ls_client/src/LsClient.cpp
@@ -106,7 +106,8 @@
<< (int)(info->m_status);
buff << std::setw(2) << std::setfill('0') << std::hex
<< (int)(info->m_version);
- buff << std::setw(2) << std::setfill('0') << std::hex << (int)(info->m_mode);
+ buff << std::setw(2) << std::setfill('0') << std::hex
+ << (int)(info->m_mode);
buff << std::setw(2) << std::setfill('0') << std::hex
<< (int)(info->m_slot1_status);
buff << std::setw(2) << std::setfill('0') << std::hex
diff --git a/pn8x/ls_client/src/LsLib.cpp b/ls_client/src/LsLib.cpp
similarity index 100%
rename from pn8x/ls_client/src/LsLib.cpp
rename to ls_client/src/LsLib.cpp
diff --git a/pn8x/Android.bp b/pn8x/Android.bp
deleted file mode 100755
index 0e83bab..0000000
--- a/pn8x/Android.bp
+++ /dev/null
@@ -1,155 +0,0 @@
-cc_library_shared {
-
- name: "ese_spi_nxp",
- defaults: ["hidl_defaults"],
- proprietary: true,
-
- srcs: [
- "libese-spi/p73/lib/phNxpEseDataMgr.cpp",
- "libese-spi/p73/lib/phNxpEseProto7816_3.cpp",
- "libese-spi/p73/lib/phNxpEse_Api.cpp",
- "libese-spi/p73/pal/phNxpEsePal.cpp",
- "libese-spi/p73/pal/spi/phNxpEsePal_spi.cpp",
- "libese-spi/p73/spm/phNxpEse_Spm.cpp",
- "libese-spi/p73/utils/ese_config.cpp",
- "libese-spi/p73/utils/config.cpp",
- "libese-spi/p73/utils/ringbuffer.cpp",
- "libese-spi/src/adaptation/NfcAdaptation.cpp",
- ],
-
- local_include_dirs: [
- "libese-spi/p73/lib",
- "libese-spi/p73/pal/spi",
- "libese-spi/p73/utils",
- "libese-spi/src/include",
- ],
- export_include_dirs: [
- "extns/impl",
- "libese-spi/common/include",
- "libese-spi/p73/common",
- "libese-spi/p73/inc",
- "libese-spi/p73/pal",
- ],
-
- cflags: [
- "-DANDROID",
- "-DBUILDCFG=1",
- "-DNXP_EXTNS=TRUE",
- "-Wall",
- "-Werror",
- ],
-
- shared_libs: [
- "android.hardware.nfc@1.0",
- "android.hardware.nfc@1.1",
- "libcutils",
- "libhardware",
- "libhidlbase",
- "libutils",
- "liblog",
- "libbase",
- "vendor.nxp.nxpese@1.0",
- "vendor.nxp.nxpnfc@1.0",
- ],
-}
-
-cc_library_shared {
-
- name: "ls_client",
- defaults: ["hidl_defaults"],
- proprietary: true,
-
- srcs: [
- "ls_client/src/LsLib.cpp",
- "ls_client/src/LsClient.cpp",
- ],
-
- export_include_dirs: ["ls_client/inc"],
-
- shared_libs: [
- "ese_spi_nxp",
- "libcutils",
- "liblog",
- "libhidlbase",
- "liblog",
- "libutils",
- "libcrypto"
- ],
-}
-
-cc_defaults {
- name: "android.hardware.secure_element@1.1_defaults",
- relative_install_path: "hw",
- proprietary: true,
- defaults: ["hidl_defaults"],
- srcs: [
- "1.1/NxpEseService.cpp",
- "1.1/SecureElement.cpp",
- "extns/impl/NxpEse.cpp",
- ],
-
- shared_libs: [
- "android.hardware.secure_element@1.0",
- "android.hardware.secure_element@1.1",
- "ese_spi_nxp",
- "libbase",
- "ls_client",
- "libcutils",
- "libhardware",
- "libhidlbase",
- "liblog",
- "libutils",
- "vendor.nxp.nxpese@1.0",
- "vendor.nxp.nxpnfc@1.0",
- ],
-}
-
-cc_defaults {
- name: "android.hardware.secure_element@1.0_defaults",
- relative_install_path: "hw",
- proprietary: true,
- defaults: ["hidl_defaults"],
- srcs: [
- "1.0/NxpEseService.cpp",
- "1.0/SecureElement.cpp",
- "extns/impl/NxpEse.cpp",
- ],
-
- shared_libs: [
- "android.hardware.secure_element@1.0",
- "ese_spi_nxp",
- "libbase",
- "ls_client",
- "libcutils",
- "libhardware",
- "libhidlbase",
- "liblog",
- "libutils",
- "vendor.nxp.nxpese@1.0",
- "vendor.nxp.nxpnfc@1.0",
- ],
-}
-
-cc_binary {
- name: "android.hardware.secure_element@1.0-service",
- init_rc: ["1.0/android.hardware.secure_element@1.0-service.rc"],
- defaults: ["android.hardware.secure_element@1.0_defaults"],
-}
-
-cc_binary {
- name: "android.hardware.secure_element@1.0-service-disabled",
- init_rc: ["1.0/android.hardware.secure_element@1.0-service-disabled.rc"],
- defaults: ["android.hardware.secure_element@1.0_defaults"],
-}
-
-cc_binary {
- name: "android.hardware.secure_element@1.1-service",
- init_rc: ["1.1/android.hardware.secure_element@1.1-service.rc"],
- defaults: ["android.hardware.secure_element@1.1_defaults"],
-}
-
-cc_binary {
- name: "android.hardware.secure_element@1.1-service-disabled",
- init_rc: ["1.1/android.hardware.secure_element@1.1-service-disabled.rc"],
- defaults: ["android.hardware.secure_element@1.1_defaults"],
-}
diff --git a/snxxx/1.0/NxpEseService.cpp b/snxxx/1.0/NxpEseService.cpp
deleted file mode 100644
index c27b781..0000000
--- a/snxxx/1.0/NxpEseService.cpp
+++ /dev/null
@@ -1,127 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2018 NXP
- *
- * 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.
- *
- ******************************************************************************/
-#define LOG_TAG "nxpese@1.0-service"
-#include <android-base/stringprintf.h>
-#include <android/hardware/secure_element/1.0/ISecureElement.h>
-#include <base/logging.h>
-#include <vendor/nxp/nxpese/1.0/INxpEse.h>
-#include "VirtualISO.h"
-
-#include <hidl/LegacySupport.h>
-#include <string.h>
-#include "NxpEse.h"
-#include "SecureElement.h"
-#include "eSEClient.h"
-
-// Generated HIDL files
-using android::OK;
-using android::base::StringPrintf;
-using android::hardware::configureRpcThreadpool;
-using android::hardware::defaultPassthroughServiceImplementation;
-using android::hardware::joinRpcThreadpool;
-using android::hardware::registerPassthroughServiceImplementation;
-using android::hardware::secure_element::V1_0::ISecureElement;
-using android::hardware::secure_element::V1_0::implementation::SecureElement;
-using vendor::nxp::nxpese::V1_0::INxpEse;
-using vendor::nxp::nxpese::V1_0::implementation::NxpEse;
-using vendor::nxp::virtual_iso::V1_0::implementation::VirtualISO;
-
-using android::OK;
-using android::sp;
-using android::status_t;
-
-int main() {
- status_t status;
-
- char terminalID[5];
- const char* SEterminal = "eSEx";
- bool ret = false;
-
- android::sp<ISecureElement> se_service = nullptr;
- android::sp<INxpEse> nxp_se_service = nullptr;
- android::sp<ISecureElement> virtual_iso_service = nullptr;
-
- ALOGI("Secure Element HAL Service 1.0 is starting.");
- se_service = new SecureElement();
- if (se_service == nullptr) {
- LOG(ERROR) << StringPrintf(
- "Can not create an instance of Secure Element HAL Iface, exiting.");
- goto shutdown;
- }
- configureRpcThreadpool(1, true /*callerWillJoin*/);
-
- checkEseClientUpdate();
- ret = geteSETerminalId(terminalID);
- ALOGI("Terminal val = %s", terminalID);
- if ((ret) && (strncmp(SEterminal, terminalID, 3) == 0)) {
- ALOGI("Terminal ID found");
- status = se_service->registerAsService(terminalID);
-
- if (status != OK) {
- LOG(ERROR) << StringPrintf(
- "Could not register service for Secure Element HAL Iface (%d).",
- status);
- goto shutdown;
- }
- ALOGI("Secure Element Service is ready");
-
- ALOGI("NXP Secure Element Extn Service 1.0 is starting.");
- nxp_se_service = new NxpEse();
- if (nxp_se_service == nullptr) {
- LOG(ERROR) << StringPrintf(
- "Can not create an instance of NXP Secure Element Extn "
- "Iface,exiting.");
- goto shutdown;
- }
- status = nxp_se_service->registerAsService();
- if (status != OK) {
- LOG(ERROR) << StringPrintf(
- "Could not register service for Power Secure Element Extn Iface "
- "(%d).",
- status);
- goto shutdown;
- }
- ALOGI("Secure Element Service is ready");
- }
-
- ALOGI("Virtual ISO HAL Service 1.0 is starting.");
- virtual_iso_service = new VirtualISO();
- if (virtual_iso_service == nullptr) {
- LOG(ERROR) << StringPrintf(
- "Can not create an instance of Virtual ISO HAL Iface, exiting.");
- goto shutdown;
- }
- ret = geteUICCTerminalId(terminalID);
- if ((ret) && (strncmp(SEterminal, terminalID, 3) == 0)) {
- status = virtual_iso_service->registerAsService(terminalID);
- if (status != OK) {
- LOG(ERROR) << StringPrintf(
- "Could not register service for Virtual ISO HAL Iface (%d).", status);
- goto shutdown;
- }
- }
-
- ALOGI("Virtual ISO: Secure Element Service is ready");
- perform_eSEClientUpdate();
- joinRpcThreadpool();
-// Should not pass this line
-shutdown:
- // In normal operation, we don't expect the thread pool to exit
- LOG(ERROR) << StringPrintf("Secure Element Service is shutting down");
- return 1;
-}
diff --git a/snxxx/1.0/SecureElement.cpp b/snxxx/1.0/SecureElement.cpp
deleted file mode 100755
index 61f1e7f..0000000
--- a/snxxx/1.0/SecureElement.cpp
+++ /dev/null
@@ -1,688 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2018-2021 NXP
- *
- * 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.
- *
- ******************************************************************************/
-#include "SecureElement.h"
-#include <android-base/logging.h>
-#include <android-base/stringprintf.h>
-#include "NxpEse.h"
-#include "eSEClient.h"
-#include "hal_nxpese.h"
-#include "phNxpEse_Apdu_Api.h"
-#include "phNxpEse_Api.h"
-/* Mutex to synchronize multiple transceive */
-
-namespace android {
-namespace hardware {
-namespace secure_element {
-namespace V1_0 {
-namespace implementation {
-
-#define LOG_TAG "nxpese@1.0-service"
-#define DEFAULT_BASIC_CHANNEL 0x00
-#define INVALID_LEN_SW1 0x64
-#define INVALID_LEN_SW2 0xFF
-
-typedef struct gsTransceiveBuffer {
- phNxpEse_data cmdData;
- phNxpEse_data rspData;
- hidl_vec<uint8_t>* pRspDataBuff;
-} sTransceiveBuffer_t;
-
-static sTransceiveBuffer_t gsTxRxBuffer;
-static hidl_vec<uint8_t> gsRspDataBuff(256);
-static android::sp<ISecureElementHalCallback> cCallback;
-std::vector<bool> SecureElement::mOpenedChannels;
-using vendor::nxp::nxpese::V1_0::implementation::NxpEse;
-SecureElement::SecureElement()
- : mMaxChannelCount(0), mOpenedchannelCount(0), mIsEseInitialized(false) {}
-
-Return<void> SecureElement::init(
- const sp<
- ::android::hardware::secure_element::V1_0::ISecureElementHalCallback>&
- clientCallback) {
- ESESTATUS status = ESESTATUS_SUCCESS;
- bool mIsInitDone = false;
- phNxpEse_initParams initParams;
- gsTxRxBuffer.pRspDataBuff = &gsRspDataBuff;
- memset(&initParams, 0x00, sizeof(phNxpEse_initParams));
- initParams.initMode = ESE_MODE_NORMAL;
- initParams.mediaType = ESE_PROTOCOL_MEDIA_SPI_APDU_GATE;
-
- if (clientCallback == nullptr) {
- return Void();
- } else {
- clientCallback->linkToDeath(this, 0 /*cookie*/);
- }
- LOG(INFO) << "SecureElement::init called here";
- if (ese_update != ESE_UPDATE_COMPLETED) {
- cCallback = clientCallback;
- clientCallback->onStateChange(false);
- LOG(INFO) << "ESE JCOP Download in progress";
- NxpEse::setSeCallBack(clientCallback);
- return Void();
- // Register
- }
- if (mIsEseInitialized) {
- clientCallback->onStateChange(true);
- return Void();
- }
-
- status = phNxpEse_open(initParams);
- if (status == ESESTATUS_SUCCESS || ESESTATUS_BUSY == status) {
- ESESTATUS deInitStatus = ESESTATUS_SUCCESS;
- if (ESESTATUS_SUCCESS == phNxpEse_SetEndPoint_Cntxt(0) &&
- ESESTATUS_SUCCESS == phNxpEse_init(initParams)) {
- if (ESESTATUS_SUCCESS == phNxpEse_ResetEndPoint_Cntxt(0)) {
- LOG(INFO) << "ESE SPI init complete!!!";
- mIsInitDone = true;
- }
- deInitStatus = phNxpEse_deInit();
- if (ESESTATUS_SUCCESS != deInitStatus) mIsInitDone = false;
- }
- status = phNxpEse_close(deInitStatus);
- }
- if (status == ESESTATUS_SUCCESS && mIsInitDone) {
- mMaxChannelCount = (GET_CHIP_OS_VERSION() >= OS_VERSION_6_2) ? 0x0C : 0x04;
- mOpenedChannels.resize(mMaxChannelCount, false);
- clientCallback->onStateChange(true);
- cCallback = clientCallback;
- } else {
- LOG(ERROR) << "eSE-Hal Init failed";
- clientCallback->onStateChange(false);
- }
- return Void();
-}
-
-Return<void> SecureElement::getAtr(getAtr_cb _hidl_cb) {
- LOG(ERROR) << "Processing ATR.....";
- phNxpEse_data atrData;
- hidl_vec<uint8_t> response;
- ESESTATUS status = ESESTATUS_FAILED;
- bool mIsSeHalInitDone = false;
-
- if (!mIsEseInitialized) {
- ESESTATUS status = seHalInit();
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "%s: seHalInit Failed!!!" << __func__;
- _hidl_cb(response); /*Return with empty Vector*/
- return Void();
- } else {
- mIsSeHalInitDone = true;
- }
- }
- status = phNxpEse_SetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "Endpoint set failed";
- }
- status = phNxpEse_getAtr(&atrData);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_getAtr failed";
- _hidl_cb(response); /*Return with empty Vector*/
- return Void();
- } else {
- response.resize(atrData.len);
- memcpy(&response[0], atrData.p_data, atrData.len);
- }
-
- status = phNxpEse_ResetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "Endpoint set failed";
- }
-
- if (status != ESESTATUS_SUCCESS) {
- LOG(INFO) << StringPrintf("ATR Data[BytebyByte]=Look below for %d bytes",
- atrData.len);
- for (auto i = response.begin(); i != response.end(); ++i)
- LOG(INFO) << StringPrintf("0x%x\t", *i);
- }
-
- _hidl_cb(response);
- if (atrData.p_data != NULL) {
- phNxpEse_free(atrData.p_data);
- }
- if (mIsSeHalInitDone) {
- if (SecureElementStatus::SUCCESS != seHalDeInit())
- LOG(ERROR) << "phNxpEse_getAtr seHalDeInit failed";
- mIsEseInitialized = false;
- mIsSeHalInitDone = false;
- }
- return Void();
-}
-
-Return<bool> SecureElement::isCardPresent() { return true; }
-
-Return<void> SecureElement::transmit(const hidl_vec<uint8_t>& data,
- transmit_cb _hidl_cb) {
- ESESTATUS status = ESESTATUS_FAILED;
- hidl_vec<uint8_t> result;
- phNxpEse_memset(&gsTxRxBuffer.cmdData, 0x00, sizeof(phNxpEse_data));
- phNxpEse_memset(&gsTxRxBuffer.rspData, 0x00, sizeof(phNxpEse_data));
- gsTxRxBuffer.cmdData.len = data.size();
- gsTxRxBuffer.cmdData.p_data =
- (uint8_t*)phNxpEse_memalloc(data.size() * sizeof(uint8_t));
- if (NULL == gsTxRxBuffer.cmdData.p_data) {
- LOG(ERROR) << "transmit failed to allocate the Memory!!!";
- /*Return empty hidl_vec*/
- _hidl_cb(result);
- return Void();
- }
- memcpy(gsTxRxBuffer.cmdData.p_data, data.data(), gsTxRxBuffer.cmdData.len);
- LOG(INFO) << "Acquired lock for SPI";
- status = phNxpEse_SetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- status = phNxpEse_Transceive(&gsTxRxBuffer.cmdData, &gsTxRxBuffer.rspData);
-
- if (status == ESESTATUS_SUCCESS) {
- result.resize(gsTxRxBuffer.rspData.len);
- memcpy(&result[0], gsTxRxBuffer.rspData.p_data, gsTxRxBuffer.rspData.len);
- } else if (status == ESESTATUS_INVALID_RECEIVE_LENGTH) {
- uint8_t respBuf[] = {INVALID_LEN_SW1, INVALID_LEN_SW2};
- result.resize(sizeof(respBuf));
- memcpy(&result[0], respBuf, sizeof(respBuf));
- } else {
- LOG(ERROR) << "transmit failed!!!";
- }
- status = phNxpEse_ResetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
-
- _hidl_cb(result);
- if (NULL != gsTxRxBuffer.cmdData.p_data) {
- phNxpEse_free(gsTxRxBuffer.cmdData.p_data);
- gsTxRxBuffer.cmdData.p_data = NULL;
- }
- if (NULL != gsTxRxBuffer.rspData.p_data) {
- phNxpEse_free(gsTxRxBuffer.rspData.p_data);
- gsTxRxBuffer.rspData.p_data = NULL;
- }
-
- return Void();
-}
-
-Return<void> SecureElement::openLogicalChannel(const hidl_vec<uint8_t>& aid,
- uint8_t p2,
- openLogicalChannel_cb _hidl_cb) {
- hidl_vec<uint8_t> manageChannelCommand = {0x00, 0x70, 0x00, 0x00, 0x01};
-
- LogicalChannelResponse resApduBuff;
- resApduBuff.channelNumber = 0xff;
- memset(&resApduBuff, 0x00, sizeof(resApduBuff));
-
- LOG(INFO) << "Acquired the lock from SPI openLogicalChannel";
-
- if (!mIsEseInitialized) {
- ESESTATUS status = seHalInit();
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "%s: seHalInit Failed!!!" << __func__;
- _hidl_cb(resApduBuff, SecureElementStatus::IOERROR);
- return Void();
- }
- }
-
- SecureElementStatus sestatus = SecureElementStatus::IOERROR;
- ESESTATUS status = ESESTATUS_FAILED;
- phNxpEse_data cmdApdu;
- phNxpEse_data rspApdu;
-
- phNxpEse_memset(&cmdApdu, 0x00, sizeof(phNxpEse_data));
-
- phNxpEse_memset(&rspApdu, 0x00, sizeof(phNxpEse_data));
-
- cmdApdu.len = manageChannelCommand.size();
- cmdApdu.p_data = (uint8_t*)phNxpEse_memalloc(manageChannelCommand.size() *
- sizeof(uint8_t));
- memcpy(cmdApdu.p_data, manageChannelCommand.data(), cmdApdu.len);
-
- status = phNxpEse_SetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- status = phNxpEse_Transceive(&cmdApdu, &rspApdu);
- if (status != ESESTATUS_SUCCESS) {
- resApduBuff.channelNumber = 0xff;
- if (NULL != rspApdu.p_data && rspApdu.len > 0) {
- if (rspApdu.p_data[0] == 0x64 && rspApdu.p_data[1] == 0xFF) {
- sestatus = SecureElementStatus::IOERROR;
- }
- }
- if (SecureElementStatus::IOERROR != sestatus) {
- sestatus = SecureElementStatus::FAILED;
- }
- } else if (rspApdu.p_data[rspApdu.len - 2] == 0x6A &&
- rspApdu.p_data[rspApdu.len - 1] == 0x81) {
- resApduBuff.channelNumber = 0xff;
- sestatus = SecureElementStatus::CHANNEL_NOT_AVAILABLE;
- } else if (rspApdu.p_data[rspApdu.len - 2] == 0x90 &&
- rspApdu.p_data[rspApdu.len - 1] == 0x00) {
- resApduBuff.channelNumber = rspApdu.p_data[0];
- mOpenedchannelCount++;
- mOpenedChannels[resApduBuff.channelNumber] = true;
- sestatus = SecureElementStatus::SUCCESS;
- } else if (((rspApdu.p_data[rspApdu.len - 2] == 0x6E) ||
- (rspApdu.p_data[rspApdu.len - 2] == 0x6D)) &&
- rspApdu.p_data[rspApdu.len - 1] == 0x00) {
- sestatus = SecureElementStatus::UNSUPPORTED_OPERATION;
- }
- /*Free the allocations*/
- phNxpEse_free(cmdApdu.p_data);
- phNxpEse_free(rspApdu.p_data);
-
- if (sestatus != SecureElementStatus::SUCCESS) {
- if (mOpenedchannelCount == 0) {
- SecureElementStatus deInitStatus = seHalDeInit();
- if (deInitStatus != SecureElementStatus::SUCCESS) {
- LOG(INFO) << "seDeInit Failed";
- }
- }
- /*If manageChanle is failed in any of above cases
- send the callback and return*/
- status = phNxpEse_ResetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- _hidl_cb(resApduBuff, sestatus);
- return Void();
- }
- LOG(INFO) << "openLogicalChannel Sending selectApdu";
- sestatus = SecureElementStatus::IOERROR;
- status = ESESTATUS_FAILED;
-
- phNxpEse_7816_cpdu_t cpdu;
- phNxpEse_7816_rpdu_t rpdu;
- phNxpEse_memset(&cpdu, 0x00, sizeof(phNxpEse_7816_cpdu_t));
- phNxpEse_memset(&rpdu, 0x00, sizeof(phNxpEse_7816_rpdu_t));
-
- if ((resApduBuff.channelNumber > 0x03) &&
- (resApduBuff.channelNumber < 0x14)) {
- /* update CLA byte accoridng to GP spec Table 11-12*/
- cpdu.cla =
- 0x40 + (resApduBuff.channelNumber - 4); /* Class of instruction */
- } else if ((resApduBuff.channelNumber > 0x00) &&
- (resApduBuff.channelNumber < 0x04)) {
- /* update CLA byte accoridng to GP spec Table 11-11*/
- cpdu.cla = resApduBuff.channelNumber; /* Class of instruction */
- } else {
- LOG(ERROR) << StringPrintf("%s: Invalid Channel no: %02x", __func__,
- resApduBuff.channelNumber);
- resApduBuff.channelNumber = 0xff;
- _hidl_cb(resApduBuff, SecureElementStatus::IOERROR);
- return Void();
- }
- cpdu.ins = 0xA4; /* Instruction code */
- cpdu.p1 = 0x04; /* Instruction parameter 1 */
- cpdu.p2 = p2; /* Instruction parameter 2 */
- cpdu.lc = aid.size();
- cpdu.le_type = 0x01;
- cpdu.pdata = (uint8_t*)phNxpEse_memalloc(aid.size() * sizeof(uint8_t));
- memcpy(cpdu.pdata, aid.data(), cpdu.lc);
- cpdu.le = 256;
-
- rpdu.len = 0x02;
- rpdu.pdata = (uint8_t*)phNxpEse_memalloc(cpdu.le * sizeof(uint8_t));
-
- status = phNxpEse_7816_Transceive(&cpdu, &rpdu);
-
- if (status != ESESTATUS_SUCCESS) {
- /*Transceive failed*/
- if (rpdu.len > 0 && (rpdu.sw1 == 0x64 && rpdu.sw2 == 0xFF)) {
- sestatus = SecureElementStatus::IOERROR;
- } else {
- sestatus = SecureElementStatus::FAILED;
- }
- } else {
- /*Status word to be passed as part of response
- So include additional length*/
- uint16_t responseLen = rpdu.len + 2;
- resApduBuff.selectResponse.resize(responseLen);
- memcpy(&resApduBuff.selectResponse[0], rpdu.pdata, rpdu.len);
- resApduBuff.selectResponse[responseLen - 1] = rpdu.sw2;
- resApduBuff.selectResponse[responseLen - 2] = rpdu.sw1;
-
- /*Status is success*/
- if ((rpdu.sw1 == 0x90 && rpdu.sw2 == 0x00) || (rpdu.sw1 == 0x62) ||
- (rpdu.sw1 == 0x63)) {
- sestatus = SecureElementStatus::SUCCESS;
- }
- /*AID provided doesn't match any applet on the secure element*/
- else if ((rpdu.sw1 == 0x6A && rpdu.sw2 == 0x82) ||
- (rpdu.sw1 == 0x69 && (rpdu.sw2 == 0x99 || rpdu.sw2 == 0x85))) {
- sestatus = SecureElementStatus::NO_SUCH_ELEMENT_ERROR;
- }
- /*Operation provided by the P2 parameter is not permitted by the applet.*/
- else if (rpdu.sw1 == 0x6A && rpdu.sw2 == 0x86) {
- sestatus = SecureElementStatus::UNSUPPORTED_OPERATION;
- } else {
- sestatus = SecureElementStatus::FAILED;
- }
- }
- if (sestatus != SecureElementStatus::SUCCESS) {
- SecureElementStatus closeChannelStatus =
- internalCloseChannel(resApduBuff.channelNumber);
- if (closeChannelStatus != SecureElementStatus::SUCCESS) {
- LOG(ERROR) << "%s: closeChannel Failed" << __func__;
- } else {
- resApduBuff.channelNumber = 0xff;
- }
- }
- status = phNxpEse_ResetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- _hidl_cb(resApduBuff, sestatus);
- phNxpEse_free(cpdu.pdata);
- phNxpEse_free(rpdu.pdata);
-
- return Void();
-}
-
-Return<void> SecureElement::openBasicChannel(const hidl_vec<uint8_t>& aid,
- uint8_t p2,
- openBasicChannel_cb _hidl_cb) {
- ESESTATUS status = ESESTATUS_SUCCESS;
- phNxpEse_7816_cpdu_t cpdu;
- phNxpEse_7816_rpdu_t rpdu;
- hidl_vec<uint8_t> result;
- hidl_vec<uint8_t> ls_aid = {0xA0, 0x00, 0x00, 0x03, 0x96, 0x41, 0x4C,
- 0x41, 0x01, 0x43, 0x4F, 0x52, 0x01};
-
- LOG(ERROR) << "Acquired the lock in SPI openBasicChannel";
-
- if (!mIsEseInitialized) {
- ESESTATUS status = seHalInit();
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "%s: seHalInit Failed!!!" << __func__;
- _hidl_cb(result, SecureElementStatus::IOERROR);
- return Void();
- }
- }
- phNxpEse_memset(&cpdu, 0x00, sizeof(phNxpEse_7816_cpdu_t));
- phNxpEse_memset(&rpdu, 0x00, sizeof(phNxpEse_7816_rpdu_t));
-
- cpdu.cla = 0x00; /* Class of instruction */
- cpdu.ins = 0xA4; /* Instruction code */
- cpdu.p1 = 0x04; /* Instruction parameter 1 */
- cpdu.p2 = p2; /* Instruction parameter 2 */
- cpdu.lc = aid.size();
- cpdu.le_type = 0x01;
- cpdu.pdata = (uint8_t*)phNxpEse_memalloc(aid.size() * sizeof(uint8_t));
- memcpy(cpdu.pdata, aid.data(), cpdu.lc);
- cpdu.le = 256;
-
- rpdu.len = 0x02;
- rpdu.pdata = (uint8_t*)phNxpEse_memalloc(cpdu.le * sizeof(uint8_t));
-
- status = phNxpEse_SetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- status = phNxpEse_7816_Transceive(&cpdu, &rpdu);
- SecureElementStatus sestatus;
- memset(&sestatus, 0x00, sizeof(sestatus));
-
- if (status != ESESTATUS_SUCCESS) {
- /* Transceive failed */
- if (rpdu.len > 0 && (rpdu.sw1 == 0x64 && rpdu.sw2 == 0xFF)) {
- sestatus = SecureElementStatus::IOERROR;
- } else {
- sestatus = SecureElementStatus::FAILED;
- }
- } else {
- /*Status word to be passed as part of response
- So include additional length*/
- uint16_t responseLen = rpdu.len + 2;
- result.resize(responseLen);
- memcpy(&result[0], rpdu.pdata, rpdu.len);
- result[responseLen - 1] = rpdu.sw2;
- result[responseLen - 2] = rpdu.sw1;
-
- /*Status is success*/
- if (((rpdu.sw1 == 0x90) && (rpdu.sw2 == 0x00)) || (rpdu.sw1 == 0x62) ||
- (rpdu.sw1 == 0x63)) {
- /*Set basic channel reference if it is not set */
- if (!mOpenedChannels[0]) {
- mOpenedChannels[0] = true;
- mOpenedchannelCount++;
- }
-
- sestatus = SecureElementStatus::SUCCESS;
- }
- /*AID provided doesn't match any applet on the secure element*/
- else if ((rpdu.sw1 == 0x6A && rpdu.sw2 == 0x82) ||
- (rpdu.sw1 == 0x69 && (rpdu.sw2 == 0x99 || rpdu.sw2 == 0x85))) {
- sestatus = SecureElementStatus::NO_SUCH_ELEMENT_ERROR;
- }
- /*Operation provided by the P2 parameter is not permitted by the applet.*/
- else if (rpdu.sw1 == 0x6A && rpdu.sw2 == 0x86) {
- sestatus = SecureElementStatus::UNSUPPORTED_OPERATION;
- } else {
- sestatus = SecureElementStatus::FAILED;
- }
- }
- status = phNxpEse_ResetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- if (sestatus != SecureElementStatus::SUCCESS) {
- SecureElementStatus closeChannelStatus =
- internalCloseChannel(DEFAULT_BASIC_CHANNEL);
- if (closeChannelStatus != SecureElementStatus::SUCCESS) {
- LOG(ERROR) << "%s: closeChannel Failed" << __func__;
- }
- }
- _hidl_cb(result, sestatus);
- phNxpEse_free(cpdu.pdata);
- phNxpEse_free(rpdu.pdata);
- return Void();
-}
-
-Return<::android::hardware::secure_element::V1_0::SecureElementStatus>
-SecureElement::internalCloseChannel(uint8_t channelNumber) {
- ESESTATUS status = ESESTATUS_SUCCESS;
- SecureElementStatus sestatus = SecureElementStatus::FAILED;
- phNxpEse_7816_cpdu_t cpdu;
- phNxpEse_7816_rpdu_t rpdu;
-
- LOG(ERROR) << "Acquired the lock in SPI internalCloseChannel";
- LOG(INFO) << StringPrintf("mMaxChannelCount = %d, Closing Channel = %d",
- mMaxChannelCount, channelNumber);
- if (channelNumber < DEFAULT_BASIC_CHANNEL ||
- channelNumber >= mMaxChannelCount) {
- LOG(ERROR) << StringPrintf("invalid channel!!! %d for %d", channelNumber,
- mOpenedChannels[channelNumber]);
- sestatus = SecureElementStatus::FAILED;
- } else if (channelNumber > DEFAULT_BASIC_CHANNEL) {
- phNxpEse_memset(&cpdu, 0x00, sizeof(phNxpEse_7816_cpdu_t));
- phNxpEse_memset(&rpdu, 0x00, sizeof(phNxpEse_7816_rpdu_t));
- cpdu.cla = channelNumber; /* Class of instruction */
- cpdu.ins = 0x70; /* Instruction code */
- cpdu.p1 = 0x80; /* Instruction parameter 1 */
- cpdu.p2 = channelNumber; /* Instruction parameter 2 */
- cpdu.lc = 0x00;
- cpdu.le = 0x9000;
- status = phNxpEse_SetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- status = phNxpEse_7816_Transceive(&cpdu, &rpdu);
- if (status != ESESTATUS_SUCCESS) {
- if (rpdu.len > 0 && (rpdu.sw1 == 0x64 && rpdu.sw2 == 0xFF)) {
- sestatus = SecureElementStatus::FAILED;
- } else {
- sestatus = SecureElementStatus::FAILED;
- }
- } else {
- if ((rpdu.sw1 == 0x90) && (rpdu.sw2 == 0x00)) {
- sestatus = SecureElementStatus::SUCCESS;
- } else {
- sestatus = SecureElementStatus::FAILED;
- }
- }
- status = phNxpEse_ResetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- }
- if (mOpenedChannels[channelNumber]) {
- mOpenedChannels[channelNumber] = false;
- mOpenedchannelCount--;
- }
- /*If there are no channels remaining close secureElement*/
- if (mOpenedchannelCount == 0) {
- sestatus = seHalDeInit();
- } else {
- sestatus = SecureElementStatus::SUCCESS;
- }
- return sestatus;
-}
-
-Return<::android::hardware::secure_element::V1_0::SecureElementStatus>
-SecureElement::closeChannel(uint8_t channelNumber) {
- ESESTATUS status = ESESTATUS_SUCCESS;
- SecureElementStatus sestatus = SecureElementStatus::FAILED;
- phNxpEse_7816_cpdu_t cpdu;
- phNxpEse_7816_rpdu_t rpdu;
-
- LOG(ERROR) << "Acquired the lock in SPI closeChannel";
- if (channelNumber < DEFAULT_BASIC_CHANNEL ||
- channelNumber >= mMaxChannelCount) {
- LOG(ERROR) << StringPrintf("invalid channel!!! %d for %d", channelNumber,
- mOpenedChannels[channelNumber]);
- sestatus = SecureElementStatus::FAILED;
- } else if (channelNumber > DEFAULT_BASIC_CHANNEL) {
- phNxpEse_memset(&cpdu, 0x00, sizeof(phNxpEse_7816_cpdu_t));
- phNxpEse_memset(&rpdu, 0x00, sizeof(phNxpEse_7816_rpdu_t));
- cpdu.cla = channelNumber; /* Class of instruction */
- cpdu.ins = 0x70; /* Instruction code */
- cpdu.p1 = 0x80; /* Instruction parameter 1 */
- cpdu.p2 = channelNumber; /* Instruction parameter 2 */
- cpdu.lc = 0x00;
- cpdu.le = 0x9000;
- status = phNxpEse_SetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- status = phNxpEse_7816_Transceive(&cpdu, &rpdu);
- if (status != ESESTATUS_SUCCESS) {
- if (rpdu.len > 0 && (rpdu.sw1 == 0x64 && rpdu.sw2 == 0xFF)) {
- sestatus = SecureElementStatus::FAILED;
- } else {
- sestatus = SecureElementStatus::FAILED;
- }
- } else {
- if ((rpdu.sw1 == 0x90) && (rpdu.sw2 == 0x00)) {
- sestatus = SecureElementStatus::SUCCESS;
- } else {
- sestatus = SecureElementStatus::FAILED;
- }
- }
- status = phNxpEse_ResetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- }
- if (mOpenedChannels[channelNumber]) {
- mOpenedChannels[channelNumber] = false;
- mOpenedchannelCount--;
- }
- /*If there are no channels remaining close secureElement*/
- if (mOpenedchannelCount == 0) {
- sestatus = seHalDeInit();
- } else {
- sestatus = SecureElementStatus::SUCCESS;
- }
- return sestatus;
-}
-void SecureElement::serviceDied(uint64_t /*cookie*/, const wp<IBase>& /*who*/) {
- LOG(ERROR) << " SecureElement serviceDied!!!";
- mIsEseInitialized = false;
- if (seHalDeInit() != SecureElementStatus::SUCCESS) {
- LOG(ERROR) << "SE Deinit not successful";
- }
-}
-ESESTATUS SecureElement::seHalInit() {
- ESESTATUS status = ESESTATUS_SUCCESS;
- phNxpEse_initParams initParams;
- ESESTATUS deInitStatus = ESESTATUS_SUCCESS;
- memset(&initParams, 0x00, sizeof(phNxpEse_initParams));
- initParams.initMode = ESE_MODE_NORMAL;
- initParams.mediaType = ESE_PROTOCOL_MEDIA_SPI_APDU_GATE;
-
- status = phNxpEse_open(initParams);
- if (ESESTATUS_SUCCESS == status || ESESTATUS_BUSY == status) {
- if (ESESTATUS_SUCCESS == phNxpEse_SetEndPoint_Cntxt(0) &&
- ESESTATUS_SUCCESS == phNxpEse_init(initParams)) {
- if (ESESTATUS_SUCCESS == phNxpEse_ResetEndPoint_Cntxt(0)) {
- mIsEseInitialized = true;
- LOG(INFO) << "ESE SPI init complete!!!";
- return ESESTATUS_SUCCESS;
- }
- deInitStatus = phNxpEse_deInit();
- } else {
- LOG(INFO) << "ESE SPI init NOT successful";
- status = ESESTATUS_FAILED;
- }
- if (phNxpEse_close(deInitStatus) != ESESTATUS_SUCCESS) {
- LOG(INFO) << "ESE close not successful";
- status = ESESTATUS_FAILED;
- }
- mIsEseInitialized = false;
- }
- return status;
-}
-
-Return<::android::hardware::secure_element::V1_0::SecureElementStatus>
-SecureElement::seHalDeInit() {
- ESESTATUS status = ESESTATUS_SUCCESS;
- ESESTATUS deInitStatus = ESESTATUS_SUCCESS;
- bool mIsDeInitDone = true;
- SecureElementStatus sestatus = SecureElementStatus::FAILED;
- status = phNxpEse_SetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- mIsDeInitDone = false;
- }
- deInitStatus = phNxpEse_deInit();
- if (ESESTATUS_SUCCESS != deInitStatus) mIsDeInitDone = false;
- status = phNxpEse_ResetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- mIsDeInitDone = false;
- }
- status = phNxpEse_close(deInitStatus);
- if (status == ESESTATUS_SUCCESS && mIsDeInitDone) {
- sestatus = SecureElementStatus::SUCCESS;
- ;
- } else {
- LOG(ERROR) << "seHalDeInit: Failed";
- }
- mIsEseInitialized = false;
- for (uint8_t xx = 0; xx < mMaxChannelCount; xx++) {
- mOpenedChannels[xx] = false;
- }
- mOpenedchannelCount = 0;
-
- return sestatus;
-}
-
-} // namespace implementation
-} // namespace V1_0
-} // namespace secure_element
-} // namespace hardware
-} // namespace android
diff --git a/snxxx/1.0/SecureElement.h b/snxxx/1.0/SecureElement.h
deleted file mode 100644
index f46b666..0000000
--- a/snxxx/1.0/SecureElement.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2018 NXP
- *
- * 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.
- *
- ******************************************************************************/
-#ifndef ANDROID_HARDWARE_SECURE_ELEMENT_V1_0_SECUREELEMENT_H
-#define ANDROID_HARDWARE_SECURE_ELEMENT_V1_0_SECUREELEMENT_H
-
-#include <android-base/stringprintf.h>
-#include <android/hardware/secure_element/1.0/ISecureElement.h>
-#include <hardware/hardware.h>
-#include <hidl/MQDescriptor.h>
-#include <hidl/Status.h>
-#include <pthread.h>
-#include "phNxpEse_Api.h"
-
-class ThreadMutex {
- public:
- ThreadMutex();
- virtual ~ThreadMutex();
- void lock();
- void unlock();
- operator pthread_mutex_t*() { return &mMutex; }
-
- private:
- pthread_mutex_t mMutex;
-};
-
-class AutoThreadMutex {
- public:
- AutoThreadMutex(ThreadMutex& m);
- virtual ~AutoThreadMutex();
- operator ThreadMutex&() { return mm; }
- operator pthread_mutex_t*() { return (pthread_mutex_t*)mm; }
-
- private:
- ThreadMutex& mm;
-};
-
-namespace android {
-namespace hardware {
-namespace secure_element {
-namespace V1_0 {
-namespace implementation {
-
-using ::android::sp;
-using android::base::StringPrintf;
-using ::android::hardware::hidl_array;
-using ::android::hardware::hidl_memory;
-using ::android::hardware::hidl_string;
-using ::android::hardware::hidl_vec;
-using ::android::hardware::Return;
-using ::android::hardware::Void;
-using ::android::hidl::base::V1_0::IBase;
-
-#ifndef MIN_APDU_LENGTH
-#define MIN_APDU_LENGTH 0x04
-#endif
-#ifndef DEFAULT_BASIC_CHANNEL
-#define DEFAULT_BASIC_CHANNEL 0x00
-#endif
-
-struct SecureElement : public ISecureElement, public hidl_death_recipient {
- SecureElement();
- Return<void> init(
- const sp<
- ::android::hardware::secure_element::V1_0::ISecureElementHalCallback>&
- clientCallback) override;
- Return<void> getAtr(getAtr_cb _hidl_cb) override;
- Return<bool> isCardPresent() override;
- Return<void> transmit(const hidl_vec<uint8_t>& data,
- transmit_cb _hidl_cb) override;
- Return<void> openLogicalChannel(const hidl_vec<uint8_t>& aid, uint8_t p2,
- openLogicalChannel_cb _hidl_cb) override;
- Return<void> openBasicChannel(const hidl_vec<uint8_t>& aid, uint8_t p2,
- openBasicChannel_cb _hidl_cb) override;
- Return<::android::hardware::secure_element::V1_0::SecureElementStatus>
- closeChannel(uint8_t channelNumber) override;
-
- void serviceDied(uint64_t /*cookie*/, const wp<IBase>& /*who*/);
-
- private:
- uint8_t mMaxChannelCount;
- uint8_t mOpenedchannelCount = 0;
- bool mIsEseInitialized = false;
- static std::vector<bool> mOpenedChannels;
- static sp<V1_0::ISecureElementHalCallback> mCallbackV1_0;
- Return<::android::hardware::secure_element::V1_0::SecureElementStatus>
- seHalDeInit();
- ESESTATUS seHalInit();
- Return<::android::hardware::secure_element::V1_0::SecureElementStatus>
- internalCloseChannel(uint8_t channelNumber);
-};
-
-} // namespace implementation
-} // namespace V1_0
-} // namespace secure_element
-} // namespace hardware
-} // namespace android
-
-#endif // ANDROID_HARDWARE_SECURE_ELEMENT_V1_0_SECUREELEMENT_H
diff --git a/snxxx/1.0/VirtualISO.cpp b/snxxx/1.0/VirtualISO.cpp
deleted file mode 100644
index e92bce8..0000000
--- a/snxxx/1.0/VirtualISO.cpp
+++ /dev/null
@@ -1,612 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2018-2020 NXP
- *
- * 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.
- *
- ******************************************************************************/
-#include "VirtualISO.h"
-#include <android-base/logging.h>
-#include "NxpEse.h"
-#include "SecureElement.h"
-#include "eSEClient.h"
-#include "hal_nxpese.h"
-#include "phNxpEse_Apdu_Api.h"
-#include "phNxpEse_Api.h"
-using vendor::nxp::nxpese::V1_0::implementation::NxpEse;
-namespace vendor {
-namespace nxp {
-namespace virtual_iso {
-namespace V1_0 {
-namespace implementation {
-
-#define LOG_TAG "nxpVIsoese@1.0-service"
-
-#define DEFAULT_BASIC_CHANNEL 0x00
-
-typedef struct gsTransceiveBuffer {
- phNxpEse_data cmdData;
- phNxpEse_data rspData;
- hidl_vec<uint8_t>* pRspDataBuff;
-} sTransceiveBuffer_t;
-
-static sTransceiveBuffer_t gsTxRxBuffer;
-static hidl_vec<uint8_t> gsRspDataBuff(256);
-static android::sp<ISecureElementHalCallback> cCallback;
-std::vector<bool> VirtualISO::mOpenedChannels;
-
-VirtualISO::VirtualISO()
- : mMaxChannelCount(0), mOpenedchannelCount(0), mIsEseInitialized(false) {}
-
-Return<void> VirtualISO::init(
- const sp<
- ::android::hardware::secure_element::V1_0::ISecureElementHalCallback>&
- clientCallback) {
- ESESTATUS status = ESESTATUS_SUCCESS;
- ESESTATUS deInitStatus = ESESTATUS_SUCCESS;
- bool mIsInitDone = false;
- phNxpEse_initParams initParams;
- LOG(INFO) << "Virtual ISO::init Enter";
- gsTxRxBuffer.pRspDataBuff = &gsRspDataBuff;
- memset(&initParams, 0x00, sizeof(phNxpEse_initParams));
- initParams.initMode = ESE_MODE_NORMAL;
- initParams.mediaType = ESE_PROTOCOL_MEDIA_SPI_APDU_GATE;
-
- if (clientCallback == nullptr) {
- return Void();
- } else {
- clientCallback->linkToDeath(this, 0 /*cookie*/);
- }
- if (ese_update != ESE_UPDATE_COMPLETED) {
- cCallback = clientCallback;
- clientCallback->onStateChange(false);
- LOG(INFO) << "ESE JCOP Download in progress";
- NxpEse::setVirtualISOCallBack(clientCallback);
- return Void();
- // Register
- }
- if (mIsEseInitialized) {
- clientCallback->onStateChange(true);
- return Void();
- }
- status = phNxpEse_open(initParams);
- if (status == ESESTATUS_SUCCESS || ESESTATUS_BUSY == status) {
- if (ESESTATUS_SUCCESS == phNxpEse_SetEndPoint_Cntxt(1) &&
- ESESTATUS_SUCCESS == phNxpEse_init(initParams)) {
- if (ESESTATUS_SUCCESS == phNxpEse_ResetEndPoint_Cntxt(1)) {
- LOG(INFO) << "VISO init complete!!!";
- mIsInitDone = true;
- }
- deInitStatus = phNxpEse_deInit();
- if (ESESTATUS_SUCCESS != deInitStatus) mIsInitDone = false;
- }
- status = phNxpEse_close(deInitStatus);
- }
- if (status == ESESTATUS_SUCCESS && mIsInitDone) {
- mMaxChannelCount = (GET_CHIP_OS_VERSION() >= OS_VERSION_6_2) ? 0x0C : 0x04;
- mOpenedChannels.resize(mMaxChannelCount, false);
- clientCallback->onStateChange(true);
- } else {
- LOG(ERROR) << "VISO-Hal Init failed";
- clientCallback->onStateChange(false);
- }
- return Void();
-}
-
-Return<void> VirtualISO::getAtr(getAtr_cb _hidl_cb) {
- hidl_vec<uint8_t> response;
- _hidl_cb(response);
- return Void();
-}
-
-Return<bool> VirtualISO::isCardPresent() { return true; }
-
-Return<void> VirtualISO::transmit(const hidl_vec<uint8_t>& data,
- transmit_cb _hidl_cb) {
- ESESTATUS status = ESESTATUS_FAILED;
- hidl_vec<uint8_t> result;
- phNxpEse_memset(&gsTxRxBuffer.cmdData, 0x00, sizeof(phNxpEse_data));
- phNxpEse_memset(&gsTxRxBuffer.rspData, 0x00, sizeof(phNxpEse_data));
- gsTxRxBuffer.cmdData.len = data.size();
- gsTxRxBuffer.cmdData.p_data =
- (uint8_t*)phNxpEse_memalloc(data.size() * sizeof(uint8_t));
- if (NULL == gsTxRxBuffer.cmdData.p_data) {
- LOG(ERROR) << "transmit failed to allocate the Memory!!!";
- /*Return empty hidl_vec*/
- _hidl_cb(result);
- return Void();
- }
- memcpy(gsTxRxBuffer.cmdData.p_data, data.data(), gsTxRxBuffer.cmdData.len);
- LOG(ERROR) << "Acquired the lock in VISO ";
- status = phNxpEse_SetEndPoint_Cntxt(1);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- status = phNxpEse_Transceive(&gsTxRxBuffer.cmdData, &gsTxRxBuffer.rspData);
-
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "transmit failed!!!";
- } else {
- result.resize(gsTxRxBuffer.rspData.len);
- memcpy(&result[0], gsTxRxBuffer.rspData.p_data, gsTxRxBuffer.rspData.len);
- }
- status = phNxpEse_ResetEndPoint_Cntxt(1);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
-
- _hidl_cb(result);
- if (NULL != gsTxRxBuffer.cmdData.p_data) {
- phNxpEse_free(gsTxRxBuffer.cmdData.p_data);
- gsTxRxBuffer.cmdData.p_data = NULL;
- }
- if (NULL != gsTxRxBuffer.rspData.p_data) {
- phNxpEse_free(gsTxRxBuffer.rspData.p_data);
- gsTxRxBuffer.rspData.p_data = NULL;
- }
-
- return Void();
-}
-
-Return<void> VirtualISO::openLogicalChannel(const hidl_vec<uint8_t>& aid,
- uint8_t p2,
- openLogicalChannel_cb _hidl_cb) {
- hidl_vec<uint8_t> manageChannelCommand = {0x00, 0x70, 0x00, 0x00, 0x01};
-
- LogicalChannelResponse resApduBuff;
-
- LOG(INFO) << "Acquired the lock in VISO openLogicalChannel";
-
- resApduBuff.channelNumber = 0xff;
- memset(&resApduBuff, 0x00, sizeof(resApduBuff));
- if (!mIsEseInitialized) {
- ESESTATUS status = seHalInit();
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "%s: seHalInit Failed!!!" << __func__;
- _hidl_cb(resApduBuff, SecureElementStatus::IOERROR);
- return Void();
- }
- }
-
- SecureElementStatus sestatus = SecureElementStatus::IOERROR;
- ESESTATUS status = ESESTATUS_FAILED;
- phNxpEse_data cmdApdu;
- phNxpEse_data rspApdu;
-
- phNxpEse_memset(&cmdApdu, 0x00, sizeof(phNxpEse_data));
- phNxpEse_memset(&rspApdu, 0x00, sizeof(phNxpEse_data));
-
- cmdApdu.len = manageChannelCommand.size();
- cmdApdu.p_data = (uint8_t*)phNxpEse_memalloc(manageChannelCommand.size() *
- sizeof(uint8_t));
- memcpy(cmdApdu.p_data, manageChannelCommand.data(), cmdApdu.len);
-
- memset(&sestatus, 0x00, sizeof(sestatus));
-
- status = phNxpEse_SetEndPoint_Cntxt(1);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- status = phNxpEse_Transceive(&cmdApdu, &rspApdu);
- if (status != ESESTATUS_SUCCESS) {
- resApduBuff.channelNumber = 0xff;
- if (NULL != rspApdu.p_data && rspApdu.len > 0) {
- if ((rspApdu.p_data[0] == 0x64 && rspApdu.p_data[1] == 0xFF)) {
- sestatus = SecureElementStatus::IOERROR;
- }
- }
- if (SecureElementStatus::IOERROR != sestatus) {
- sestatus = SecureElementStatus::FAILED;
- }
- } else if (rspApdu.p_data[rspApdu.len - 2] == 0x6A &&
- rspApdu.p_data[rspApdu.len - 1] == 0x81) {
- resApduBuff.channelNumber = 0xff;
- sestatus = SecureElementStatus::CHANNEL_NOT_AVAILABLE;
- } else if (rspApdu.p_data[rspApdu.len - 2] == 0x90 &&
- rspApdu.p_data[rspApdu.len - 1] == 0x00) {
- resApduBuff.channelNumber = rspApdu.p_data[0];
- mOpenedchannelCount++;
- mOpenedChannels[resApduBuff.channelNumber] = true;
- sestatus = SecureElementStatus::SUCCESS;
- } else if (((rspApdu.p_data[rspApdu.len - 2] == 0x6E) ||
- (rspApdu.p_data[rspApdu.len - 2] == 0x6D)) &&
- rspApdu.p_data[rspApdu.len - 1] == 0x00) {
- sestatus = SecureElementStatus::UNSUPPORTED_OPERATION;
- }
-
- /*Free the allocations*/
- phNxpEse_free(cmdApdu.p_data);
- phNxpEse_free(rspApdu.p_data);
-
- if (sestatus != SecureElementStatus::SUCCESS) {
- if (mOpenedchannelCount == 0) {
- sestatus = seHalDeInit();
- if (sestatus != SecureElementStatus::SUCCESS) {
- LOG(INFO) << "seDeInit Failed";
- }
- }
- /*If manageChanle is failed in any of above cases
- send the callback and return*/
- status = phNxpEse_ResetEndPoint_Cntxt(1);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- _hidl_cb(resApduBuff, sestatus);
- return Void();
- }
- LOG(INFO) << "openLogicalChannel Sending selectApdu";
- sestatus = SecureElementStatus::IOERROR;
- status = ESESTATUS_FAILED;
-
- phNxpEse_7816_cpdu_t cpdu;
- phNxpEse_7816_rpdu_t rpdu;
- phNxpEse_memset(&cpdu, 0x00, sizeof(phNxpEse_7816_cpdu_t));
- phNxpEse_memset(&rpdu, 0x00, sizeof(phNxpEse_7816_rpdu_t));
-
- if ((resApduBuff.channelNumber > 0x03) &&
- (resApduBuff.channelNumber < 0x14)) {
- /* update CLA byte accoridng to GP spec Table 11-12*/
- cpdu.cla =
- 0x40 + (resApduBuff.channelNumber - 4); /* Class of instruction */
- } else if ((resApduBuff.channelNumber > 0x00) &&
- (resApduBuff.channelNumber < 0x04)) {
- /* update CLA byte accoridng to GP spec Table 11-11*/
- cpdu.cla = resApduBuff.channelNumber; /* Class of instruction */
- } else {
- LOG(ERROR) << StringPrintf("%s: Invalid Channel no: %02x", __func__,
- resApduBuff.channelNumber);
- resApduBuff.channelNumber = 0xff;
- _hidl_cb(resApduBuff, SecureElementStatus::IOERROR);
- return Void();
- }
- cpdu.ins = 0xA4; /* Instruction code */
- cpdu.p1 = 0x04; /* Instruction parameter 1 */
- cpdu.p2 = p2; /* Instruction parameter 2 */
- cpdu.lc = aid.size();
- cpdu.le_type = 0x01;
- cpdu.pdata = (uint8_t*)phNxpEse_memalloc(aid.size() * sizeof(uint8_t));
- memcpy(cpdu.pdata, aid.data(), cpdu.lc);
- cpdu.le = 256;
-
- rpdu.len = 0x02;
- rpdu.pdata = (uint8_t*)phNxpEse_memalloc(cpdu.le * sizeof(uint8_t));
-
- status = phNxpEse_7816_Transceive(&cpdu, &rpdu);
- if (status != ESESTATUS_SUCCESS) {
- /*Transceive failed*/
- if (rpdu.len > 0 && (rpdu.sw1 == 0x64 && rpdu.sw2 == 0xFF)) {
- sestatus = SecureElementStatus::IOERROR;
- } else {
- sestatus = SecureElementStatus::FAILED;
- }
- } else {
- /*Status word to be passed as part of response
- So include additional length*/
- uint16_t responseLen = rpdu.len + 2;
- resApduBuff.selectResponse.resize(responseLen);
- memcpy(&resApduBuff.selectResponse[0], rpdu.pdata, rpdu.len);
- resApduBuff.selectResponse[responseLen - 1] = rpdu.sw2;
- resApduBuff.selectResponse[responseLen - 2] = rpdu.sw1;
-
- /*Status is success*/
- if (rpdu.sw1 == 0x90 && rpdu.sw2 == 0x00) {
- sestatus = SecureElementStatus::SUCCESS;
- }
- /*AID provided doesn't match any applet on the secure element*/
- else if (rpdu.sw1 == 0x6A && rpdu.sw2 == 0x82) {
- sestatus = SecureElementStatus::NO_SUCH_ELEMENT_ERROR;
- }
- /*Operation provided by the P2 parameter is not permitted by the applet.*/
- else if (rpdu.sw1 == 0x6A && rpdu.sw2 == 0x86) {
- sestatus = SecureElementStatus::UNSUPPORTED_OPERATION;
- } else {
- sestatus = SecureElementStatus::FAILED;
- }
- }
- if (sestatus != SecureElementStatus::SUCCESS) {
- SecureElementStatus closeChannelStatus =
- internalCloseChannel(resApduBuff.channelNumber);
- if (closeChannelStatus != SecureElementStatus::SUCCESS) {
- LOG(ERROR) << "%s: closeChannel Failed" << __func__;
- } else {
- resApduBuff.channelNumber = 0xff;
- }
- }
- status = phNxpEse_ResetEndPoint_Cntxt(1);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- _hidl_cb(resApduBuff, sestatus);
- phNxpEse_free(cpdu.pdata);
- phNxpEse_free(rpdu.pdata);
-
- return Void();
-}
-
-Return<void> VirtualISO::openBasicChannel(const hidl_vec<uint8_t>& aid,
- uint8_t p2,
- openBasicChannel_cb _hidl_cb) {
- ESESTATUS status = ESESTATUS_SUCCESS;
- phNxpEse_7816_cpdu_t cpdu;
- phNxpEse_7816_rpdu_t rpdu;
- hidl_vec<uint8_t> result;
-
- LOG(INFO) << "Acquired the lock in VISO openBasicChannel";
-
- if (!mIsEseInitialized) {
- ESESTATUS status = seHalInit();
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "%s: seHalInit Failed!!!" << __func__;
- _hidl_cb(result, SecureElementStatus::IOERROR);
- return Void();
- }
- }
-
- phNxpEse_memset(&cpdu, 0x00, sizeof(phNxpEse_7816_cpdu_t));
- phNxpEse_memset(&rpdu, 0x00, sizeof(phNxpEse_7816_rpdu_t));
-
- cpdu.cla = 0x00; /* Class of instruction */
- cpdu.ins = 0xA4; /* Instruction code */
- cpdu.p1 = 0x04; /* Instruction parameter 1 */
- cpdu.p2 = p2; /* Instruction parameter 2 */
- cpdu.lc = aid.size();
- cpdu.le_type = 0x01;
- cpdu.pdata = (uint8_t*)phNxpEse_memalloc(aid.size() * sizeof(uint8_t));
- memcpy(cpdu.pdata, aid.data(), cpdu.lc);
- cpdu.le = 256;
-
- rpdu.len = 0x02;
- rpdu.pdata = (uint8_t*)phNxpEse_memalloc(cpdu.le * sizeof(uint8_t));
-
- status = phNxpEse_SetEndPoint_Cntxt(1);
- status = phNxpEse_7816_Transceive(&cpdu, &rpdu);
-
- SecureElementStatus sestatus;
- memset(&sestatus, 0x00, sizeof(sestatus));
-
- if (status != ESESTATUS_SUCCESS) {
- /* Transceive failed */
- if (rpdu.len > 0 && (rpdu.sw1 == 0x64 && rpdu.sw2 == 0xFF)) {
- sestatus = SecureElementStatus::IOERROR;
- } else {
- sestatus = SecureElementStatus::FAILED;
- }
- } else {
- /*Status word to be passed as part of response
- So include additional length*/
- uint16_t responseLen = rpdu.len + 2;
- result.resize(responseLen);
- memcpy(&result[0], rpdu.pdata, rpdu.len);
- result[responseLen - 1] = rpdu.sw2;
- result[responseLen - 2] = rpdu.sw1;
-
- /*Status is success*/
- if ((rpdu.sw1 == 0x90) && (rpdu.sw2 == 0x00)) {
- /*Set basic channel reference if it is not set */
- if (!mOpenedChannels[0]) {
- mOpenedChannels[0] = true;
- mOpenedchannelCount++;
- }
-
- sestatus = SecureElementStatus::SUCCESS;
- }
- /*AID provided doesn't match any applet on the secure element*/
- else if (rpdu.sw1 == 0x6A && rpdu.sw2 == 0x82) {
- sestatus = SecureElementStatus::NO_SUCH_ELEMENT_ERROR;
- }
- /*Operation provided by the P2 parameter is not permitted by the applet.*/
- else if (rpdu.sw1 == 0x6A && rpdu.sw2 == 0x86) {
- sestatus = SecureElementStatus::UNSUPPORTED_OPERATION;
- } else {
- sestatus = SecureElementStatus::FAILED;
- }
- }
- status = phNxpEse_ResetEndPoint_Cntxt(1);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- if (sestatus != SecureElementStatus::SUCCESS) {
- SecureElementStatus closeChannelStatus =
- internalCloseChannel(DEFAULT_BASIC_CHANNEL);
- if (closeChannelStatus != SecureElementStatus::SUCCESS) {
- LOG(ERROR) << "%s: closeChannel Failed" << __func__;
- }
- }
- _hidl_cb(result, sestatus);
- phNxpEse_free(cpdu.pdata);
- phNxpEse_free(rpdu.pdata);
- return Void();
-}
-
-Return<::android::hardware::secure_element::V1_0::SecureElementStatus>
-VirtualISO::internalCloseChannel(uint8_t channelNumber) {
- ESESTATUS status = ESESTATUS_SUCCESS;
- SecureElementStatus sestatus = SecureElementStatus::FAILED;
- phNxpEse_7816_cpdu_t cpdu;
- phNxpEse_7816_rpdu_t rpdu;
-
- LOG(ERROR) << "internalCloseChannel Enter";
- LOG(INFO) << StringPrintf("mMaxChannelCount = %d, Closing Channel = %d",
- mMaxChannelCount, channelNumber);
- if (channelNumber < DEFAULT_BASIC_CHANNEL ||
- channelNumber >= mMaxChannelCount) {
- LOG(ERROR) << StringPrintf("invalid channel!!! %d", channelNumber);
- sestatus = SecureElementStatus::FAILED;
- } else if (channelNumber > DEFAULT_BASIC_CHANNEL) {
- phNxpEse_memset(&cpdu, 0x00, sizeof(phNxpEse_7816_cpdu_t));
- phNxpEse_memset(&rpdu, 0x00, sizeof(phNxpEse_7816_rpdu_t));
- cpdu.cla = channelNumber; /* Class of instruction */
- cpdu.ins = 0x70; /* Instruction code */
- cpdu.p1 = 0x80; /* Instruction parameter 1 */
- cpdu.p2 = channelNumber; /* Instruction parameter 2 */
- cpdu.lc = 0x00;
- cpdu.le = 0x9000;
- status = phNxpEse_SetEndPoint_Cntxt(1);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- status = phNxpEse_7816_Transceive(&cpdu, &rpdu);
-
- if (status != ESESTATUS_SUCCESS) {
- if (rpdu.len > 0 && (rpdu.sw1 == 0x64 && rpdu.sw2 == 0xFF)) {
- sestatus = SecureElementStatus::FAILED;
- } else {
- sestatus = SecureElementStatus::FAILED;
- }
- } else {
- if ((rpdu.sw1 == 0x90) && (rpdu.sw2 == 0x00)) {
- sestatus = SecureElementStatus::SUCCESS;
- } else {
- sestatus = SecureElementStatus::FAILED;
- }
- }
- status = phNxpEse_ResetEndPoint_Cntxt(1);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- }
- if (mOpenedChannels[channelNumber]) {
- mOpenedChannels[channelNumber] = false;
- mOpenedchannelCount--;
- }
- /*If there are no channels remaining close secureElement*/
- if (mOpenedchannelCount == 0) {
- sestatus = seHalDeInit();
- } else {
- sestatus = SecureElementStatus::SUCCESS;
- }
- return sestatus;
-}
-
-Return<::android::hardware::secure_element::V1_0::SecureElementStatus>
-VirtualISO::closeChannel(uint8_t channelNumber) {
- ESESTATUS status = ESESTATUS_SUCCESS;
- SecureElementStatus sestatus = SecureElementStatus::FAILED;
- phNxpEse_7816_cpdu_t cpdu;
- phNxpEse_7816_rpdu_t rpdu;
-
- LOG(INFO) << "Acquired the lock in VISO closeChannel";
- if (channelNumber < DEFAULT_BASIC_CHANNEL ||
- channelNumber >= mMaxChannelCount) {
- LOG(ERROR) << StringPrintf("invalid channel!!! %d for %d", channelNumber,
- mOpenedChannels[channelNumber]);
- sestatus = SecureElementStatus::FAILED;
- } else if (channelNumber > DEFAULT_BASIC_CHANNEL) {
- phNxpEse_memset(&cpdu, 0x00, sizeof(phNxpEse_7816_cpdu_t));
- phNxpEse_memset(&rpdu, 0x00, sizeof(phNxpEse_7816_rpdu_t));
- cpdu.cla = channelNumber; /* Class of instruction */
- cpdu.ins = 0x70; /* Instruction code */
- cpdu.p1 = 0x80; /* Instruction parameter 1 */
- cpdu.p2 = channelNumber; /* Instruction parameter 2 */
- cpdu.lc = 0x00;
- cpdu.le = 0x9000;
- status = phNxpEse_SetEndPoint_Cntxt(1);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- status = phNxpEse_7816_Transceive(&cpdu, &rpdu);
-
- if (status != ESESTATUS_SUCCESS) {
- if (rpdu.len > 0 && (rpdu.sw1 == 0x64 && rpdu.sw2 == 0xFF)) {
- sestatus = SecureElementStatus::FAILED;
- } else {
- sestatus = SecureElementStatus::FAILED;
- }
- } else {
- if ((rpdu.sw1 == 0x90) && (rpdu.sw2 == 0x00)) {
- sestatus = SecureElementStatus::SUCCESS;
- } else {
- sestatus = SecureElementStatus::FAILED;
- }
- }
- status = phNxpEse_ResetEndPoint_Cntxt(1);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- }
- if (mOpenedChannels[channelNumber]) {
- mOpenedChannels[channelNumber] = false;
- mOpenedchannelCount--;
- }
- /*If there are no channels remaining close secureElement*/
- if (mOpenedchannelCount == 0) {
- sestatus = seHalDeInit();
- } else {
- sestatus = SecureElementStatus::SUCCESS;
- }
- return sestatus;
-}
-ESESTATUS VirtualISO::seHalInit() {
- ESESTATUS status = ESESTATUS_SUCCESS;
- ESESTATUS deInitStatus = ESESTATUS_SUCCESS;
- phNxpEse_initParams initParams;
- memset(&initParams, 0x00, sizeof(phNxpEse_initParams));
- initParams.initMode = ESE_MODE_NORMAL;
- initParams.mediaType = ESE_PROTOCOL_MEDIA_SPI_APDU_GATE;
-
- status = phNxpEse_open(initParams);
- if (ESESTATUS_SUCCESS == status || ESESTATUS_BUSY == status) {
- if (ESESTATUS_SUCCESS == phNxpEse_SetEndPoint_Cntxt(1) &&
- ESESTATUS_SUCCESS == phNxpEse_init(initParams)) {
- if (ESESTATUS_SUCCESS == phNxpEse_ResetEndPoint_Cntxt(1)) {
- mIsEseInitialized = true;
- LOG(INFO) << "VISO init complete!!!";
- return ESESTATUS_SUCCESS;
- }
- deInitStatus = phNxpEse_deInit();
- }
- phNxpEse_close(deInitStatus);
- mIsEseInitialized = false;
- }
- return status;
-}
-
-Return<::android::hardware::secure_element::V1_0::SecureElementStatus>
-VirtualISO::seHalDeInit() {
- ESESTATUS status = ESESTATUS_SUCCESS;
- ESESTATUS deInitStatus = ESESTATUS_SUCCESS;
- bool mIsDeInitDone = true;
- SecureElementStatus sestatus = SecureElementStatus::FAILED;
- status = phNxpEse_SetEndPoint_Cntxt(1);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- mIsDeInitDone = false;
- }
- deInitStatus = phNxpEse_deInit();
- if (ESESTATUS_SUCCESS != deInitStatus) mIsDeInitDone = false;
- status = phNxpEse_ResetEndPoint_Cntxt(1);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- mIsDeInitDone = false;
- }
- status = phNxpEse_close(deInitStatus);
- if (status == ESESTATUS_SUCCESS && mIsDeInitDone) {
- sestatus = SecureElementStatus::SUCCESS;
- ;
- } else {
- LOG(ERROR) << "seHalDeInit: Failed";
- }
- // Clear all the flags as SPI driver is closed.
- mIsEseInitialized = false;
- for (uint8_t xx = 0; xx < mMaxChannelCount; xx++) {
- mOpenedChannels[xx] = false;
- }
- mOpenedchannelCount = 0;
- return sestatus;
-}
-
-} // namespace implementation
-} // namespace V1_0
-} // namespace virtual_iso
-} // namespace nxp
-} // namespace vendor
diff --git a/snxxx/1.0/VirtualISO.h b/snxxx/1.0/VirtualISO.h
deleted file mode 100644
index 9d7438f..0000000
--- a/snxxx/1.0/VirtualISO.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2018 NXP
- *
- * 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.
- *
- ******************************************************************************/
-#ifndef VENDOR_NXP_VIRTUAL_ISO_V1_0_SECUREELEMENT_H
-#define VENDOR_NXP_VIRTUAL_ISO_V1_0_SECUREELEMENT_H
-
-#include <android-base/stringprintf.h>
-#include <android/hardware/secure_element/1.0/ISecureElement.h>
-#include <hardware/hardware.h>
-#include <hidl/MQDescriptor.h>
-#include <hidl/Status.h>
-#include "phNxpEse_Api.h"
-
-namespace vendor {
-namespace nxp {
-namespace virtual_iso {
-namespace V1_0 {
-namespace implementation {
-
-using ::android::sp;
-using ::android::wp;
-using android::base::StringPrintf;
-using ::android::hardware::hidl_array;
-using ::android::hardware::hidl_death_recipient;
-using ::android::hardware::hidl_memory;
-using ::android::hardware::hidl_string;
-using ::android::hardware::hidl_vec;
-using ::android::hardware::Return;
-using ::android::hardware::Void;
-using ::android::hardware::secure_element::V1_0::ISecureElement;
-using ::android::hardware::secure_element::V1_0::LogicalChannelResponse;
-using ::android::hardware::secure_element::V1_0::SecureElementStatus;
-using ::android::hidl::base::V1_0::IBase;
-
-#ifndef DEFAULT_BASIC_CHANNEL
-#define DEFAULT_BASIC_CHANNEL 0x00
-#endif
-
-struct VirtualISO : public ISecureElement, public hidl_death_recipient {
- VirtualISO();
- Return<void> init(
- const sp<
- ::android::hardware::secure_element::V1_0::ISecureElementHalCallback>&
- clientCallback) override;
- Return<void> getAtr(getAtr_cb _hidl_cb) override;
- Return<bool> isCardPresent() override;
- Return<void> transmit(const hidl_vec<uint8_t>& data,
- transmit_cb _hidl_cb) override;
- Return<void> openLogicalChannel(const hidl_vec<uint8_t>& aid, uint8_t p2,
- openLogicalChannel_cb _hidl_cb) override;
- Return<void> openBasicChannel(const hidl_vec<uint8_t>& aid, uint8_t p2,
- openBasicChannel_cb _hidl_cb) override;
- Return<::android::hardware::secure_element::V1_0::SecureElementStatus>
- closeChannel(uint8_t channelNumber) override;
-
- virtual void serviceDied(uint64_t /*cookie*/, const wp<IBase>& /*who*/) {
- // TODO: Implement graceful closure, to close ongoing tx-rx and deinit
- // T=1 stack
- // close(0);
- }
-
- private:
- uint8_t mMaxChannelCount;
- uint8_t mOpenedchannelCount = 0;
- bool mIsEseInitialized = false;
- static std::vector<bool> mOpenedChannels;
- Return<::android::hardware::secure_element::V1_0::SecureElementStatus>
- seHalDeInit();
- ESESTATUS seHalInit();
- Return<::android::hardware::secure_element::V1_0::SecureElementStatus>
- internalCloseChannel(uint8_t channelNumber);
-};
-
-} // namespace implementation
-} // namespace V1_0
-} // namespace virtual_iso
-} // namespace nxp
-} // namespace vendor
-
-#endif // VENDOR_NXP_VIRTUAL_ISO_V1_0_SECUREELEMENT_H
diff --git a/snxxx/1.0/android.hardware.secure_element_snxxx@1.0-service.rc b/snxxx/1.0/android.hardware.secure_element_snxxx@1.0-service.rc
deleted file mode 100644
index 7c6c36e..0000000
--- a/snxxx/1.0/android.hardware.secure_element_snxxx@1.0-service.rc
+++ /dev/null
@@ -1,4 +0,0 @@
-service secure_element_hal_service /vendor/bin/hw/android.hardware.secure_element_snxxx@1.0-service
- class hal
- user secure_element
- group secure_element
diff --git a/snxxx/1.1/NxpEseService.cpp b/snxxx/1.1/NxpEseService.cpp
deleted file mode 100755
index dcb1541..0000000
--- a/snxxx/1.1/NxpEseService.cpp
+++ /dev/null
@@ -1,132 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2018-2021 NXP
- *
- * 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.
- *
- ******************************************************************************/
-#define LOG_TAG "nxpese@1.1-service"
-#include <android/hardware/secure_element/1.1/ISecureElement.h>
-#include <log/log.h>
-#include <vendor/nxp/nxpese/1.0/INxpEse.h>
-#include "VirtualISO.h"
-
-#include <hidl/LegacySupport.h>
-#include <string.h>
-#include <regex>
-#include "NxpEse.h"
-#include "SecureElement.h"
-#include "eSEClient.h"
-
-// Generated HIDL files
-using android::OK;
-using android::base::StringPrintf;
-using android::hardware::configureRpcThreadpool;
-using android::hardware::defaultPassthroughServiceImplementation;
-using android::hardware::joinRpcThreadpool;
-using android::hardware::registerPassthroughServiceImplementation;
-using android::hardware::secure_element::V1_1::ISecureElement;
-using android::hardware::secure_element::V1_1::implementation::SecureElement;
-using vendor::nxp::nxpese::V1_0::INxpEse;
-using vendor::nxp::nxpese::V1_0::implementation::NxpEse;
-using vendor::nxp::virtual_iso::V1_0::implementation::VirtualISO;
-
-using android::OK;
-using android::sp;
-using android::status_t;
-
-int main() {
- status_t status;
-
- char terminalID[5];
- const char* SEterminal = "eSEx";
- bool ret = false;
-
- android::sp<ISecureElement> se_service = nullptr;
- android::sp<INxpEse> nxp_se_service = nullptr;
- android::sp<ISecureElement> virtual_iso_service = nullptr;
-
- ALOGI("Secure Element HAL Service 1.1 is starting.");
- try {
- se_service = new SecureElement();
- if (se_service == nullptr) {
- ALOGE("Can not create an instance of Secure Element HAL Iface, exiting.");
- goto shutdown;
- }
- configureRpcThreadpool(1, true /*callerWillJoin*/);
-
- checkEseClientUpdate();
- ret = geteSETerminalId(terminalID);
- ALOGI("Terminal val = %s", terminalID);
- if ((ret) && (strncmp(SEterminal, terminalID, 3) == 0)) {
- ALOGI("Terminal ID found");
- status = se_service->registerAsService(terminalID);
-
- if (status != OK) {
- ALOGE("Could not register service for Secure Element HAL Iface (%d).",
- status);
- goto shutdown;
- }
- ALOGI("Secure Element Service is ready");
-
- ALOGI("NXP Secure Element Extn Service 1.0 is starting.");
- nxp_se_service = new NxpEse();
- if (nxp_se_service == nullptr) {
- ALOGE(
- "Can not create an instance of NXP Secure Element Extn "
- "Iface,exiting.");
- goto shutdown;
- }
- status = nxp_se_service->registerAsService();
- if (status != OK) {
- ALOGE(
- "Could not register service for Power Secure Element Extn Iface "
- "(%d).",
- status);
- goto shutdown;
- }
- ALOGI("Secure Element Service is ready");
- }
-
- ALOGI("Virtual ISO HAL Service 1.0 is starting.");
- virtual_iso_service = new VirtualISO();
- if (virtual_iso_service == nullptr) {
- ALOGE("Can not create an instance of Virtual ISO HAL Iface, exiting.");
- goto shutdown;
- }
- ret = geteUICCTerminalId(terminalID);
- if ((ret) && (strncmp(SEterminal, terminalID, 3) == 0)) {
- status = virtual_iso_service->registerAsService(terminalID);
- if (status != OK) {
- ALOGE("Could not register service for Virtual ISO HAL Iface (%d).",
- status);
- goto shutdown;
- }
- }
-
- ALOGI("Virtual ISO: Secure Element Service is ready");
- perform_eSEClientUpdate();
- joinRpcThreadpool();
- } catch (const std::length_error& e) {
- ALOGE("Length Exception occurred = %s ", e.what());
- } catch (const std::__1::ios_base::failure& e) {
- ALOGE("ios failure Exception occurred = %s ", e.what());
- } catch (std::__1::regex_error& e) {
- ALOGE("Regex Exception occurred = %s ", e.what());
- }
-// Should not pass this line
-shutdown:
- // In normal operation, we don't expect the thread pool to exit
- ALOGE("Secure Element Service is shutting down");
- return 1;
-}
diff --git a/snxxx/1.1/SecureElement.cpp b/snxxx/1.1/SecureElement.cpp
deleted file mode 100755
index 409811f..0000000
--- a/snxxx/1.1/SecureElement.cpp
+++ /dev/null
@@ -1,691 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2018-2020 NXP
- *
- * 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.
- *
- ******************************************************************************/
-#include "SecureElement.h"
-#include <android-base/logging.h>
-#include <android-base/stringprintf.h>
-#include "NxpEse.h"
-#include "eSEClient.h"
-#include "hal_nxpese.h"
-#include "phNxpEse_Apdu_Api.h"
-#include "phNxpEse_Api.h"
-/* Mutex to synchronize multiple transceive */
-
-namespace android {
-namespace hardware {
-namespace secure_element {
-namespace V1_1 {
-namespace implementation {
-
-#define LOG_TAG "nxpese@1.1-service"
-#define DEFAULT_BASIC_CHANNEL 0x00
-#define INVALID_LEN_SW1 0x64
-#define INVALID_LEN_SW2 0xFF
-
-typedef struct gsTransceiveBuffer {
- phNxpEse_data cmdData;
- phNxpEse_data rspData;
- hidl_vec<uint8_t>* pRspDataBuff;
-} sTransceiveBuffer_t;
-
-static sTransceiveBuffer_t gsTxRxBuffer;
-static hidl_vec<uint8_t> gsRspDataBuff(256);
-sp<V1_0::ISecureElementHalCallback> SecureElement::mCallbackV1_0 = nullptr;
-sp<V1_1::ISecureElementHalCallback> SecureElement::mCallbackV1_1 = nullptr;
-std::vector<bool> SecureElement::mOpenedChannels;
-using vendor::nxp::nxpese::V1_0::implementation::NxpEse;
-SecureElement::SecureElement()
- : mMaxChannelCount(0), mOpenedchannelCount(0), mIsEseInitialized(false) {}
-
-void SecureElement::NotifySeWaitExtension(phNxpEse_wtxState state) {
- if (state == WTX_ONGOING) {
- LOG(INFO) << "SecureElement::WTX ongoing";
- } else if (state == WTX_END) {
- LOG(INFO) << "SecureElement::WTX ended";
- }
-}
-
-Return<void> SecureElement::init(
- const sp<
- ::android::hardware::secure_element::V1_0::ISecureElementHalCallback>&
- clientCallback) {
- ESESTATUS status = ESESTATUS_SUCCESS;
- bool mIsInitDone = false;
- phNxpEse_initParams initParams;
- gsTxRxBuffer.pRspDataBuff = &gsRspDataBuff;
- memset(&initParams, 0x00, sizeof(phNxpEse_initParams));
- initParams.initMode = ESE_MODE_NORMAL;
- initParams.mediaType = ESE_PROTOCOL_MEDIA_SPI_APDU_GATE;
- initParams.fPtr_WtxNtf = SecureElement::NotifySeWaitExtension;
-
- if (clientCallback == nullptr) {
- return Void();
- } else {
- clientCallback->linkToDeath(this, 0 /*cookie*/);
- }
- LOG(INFO) << "SecureElement::init called here";
- if (ese_update != ESE_UPDATE_COMPLETED) {
- mCallbackV1_0 = clientCallback;
- clientCallback->onStateChange(false);
- LOG(INFO) << "ESE JCOP Download in progress";
- NxpEse::setSeCallBack(clientCallback);
- return Void();
- // Register
- }
- if (mIsEseInitialized) {
- clientCallback->onStateChange(true);
- return Void();
- }
-
- status = phNxpEse_open(initParams);
- if (status == ESESTATUS_SUCCESS || ESESTATUS_BUSY == status) {
- ESESTATUS deInitStatus = ESESTATUS_SUCCESS;
- if (ESESTATUS_SUCCESS == phNxpEse_SetEndPoint_Cntxt(0) &&
- ESESTATUS_SUCCESS == phNxpEse_init(initParams)) {
- if (ESESTATUS_SUCCESS == phNxpEse_ResetEndPoint_Cntxt(0)) {
- LOG(INFO) << "ESE SPI init complete!!!";
- mIsInitDone = true;
- }
- deInitStatus = phNxpEse_deInit();
- if (ESESTATUS_SUCCESS != deInitStatus) mIsInitDone = false;
- }
- status = phNxpEse_close(deInitStatus);
- }
- if (status == ESESTATUS_SUCCESS && mIsInitDone) {
- mMaxChannelCount = (GET_CHIP_OS_VERSION() >= OS_VERSION_6_2) ? 0x0C : 0x04;
- mOpenedChannels.resize(mMaxChannelCount, false);
- clientCallback->onStateChange(true);
- mCallbackV1_0 = clientCallback;
- } else {
- LOG(ERROR) << "eSE-Hal Init failed";
- clientCallback->onStateChange(false);
- }
- return Void();
-}
-
-Return<void> SecureElement::init_1_1(
- const sp<
- ::android::hardware::secure_element::V1_1::ISecureElementHalCallback>&
- clientCallback) {
- ESESTATUS status = ESESTATUS_SUCCESS;
- bool mIsInitDone = false;
- phNxpEse_initParams initParams;
- gsTxRxBuffer.pRspDataBuff = &gsRspDataBuff;
- memset(&initParams, 0x00, sizeof(phNxpEse_initParams));
- initParams.initMode = ESE_MODE_NORMAL;
- initParams.mediaType = ESE_PROTOCOL_MEDIA_SPI_APDU_GATE;
- initParams.fPtr_WtxNtf = SecureElement::NotifySeWaitExtension;
- if (clientCallback == nullptr) {
- return Void();
- } else {
- clientCallback->linkToDeath(this, 0 /*cookie*/);
- }
- LOG(INFO) << "SecureElement::init called here";
- if (ese_update != ESE_UPDATE_COMPLETED) {
- mCallbackV1_1 = clientCallback;
- clientCallback->onStateChange_1_1(false, "NXP SE update going on");
- LOG(INFO) << "ESE JCOP Download in progress";
- NxpEse::setSeCallBack_1_1(clientCallback);
- return Void();
- // Register
- }
- if (mIsEseInitialized) {
- clientCallback->onStateChange_1_1(true, "NXP SE HAL init ok");
- return Void();
- }
-
- status = phNxpEse_open(initParams);
- if (status == ESESTATUS_SUCCESS || ESESTATUS_BUSY == status) {
- ESESTATUS deInitStatus = ESESTATUS_SUCCESS;
- if (ESESTATUS_SUCCESS == phNxpEse_SetEndPoint_Cntxt(0) &&
- ESESTATUS_SUCCESS == phNxpEse_init(initParams)) {
- if (ESESTATUS_SUCCESS == phNxpEse_ResetEndPoint_Cntxt(0)) {
- LOG(INFO) << "ESE SPI init complete!!!";
- mIsInitDone = true;
- }
- deInitStatus = phNxpEse_deInit();
- if (ESESTATUS_SUCCESS != deInitStatus) mIsInitDone = false;
- }
- status = phNxpEse_close(deInitStatus);
- }
- if (status == ESESTATUS_SUCCESS && mIsInitDone) {
- mMaxChannelCount = (GET_CHIP_OS_VERSION() >= OS_VERSION_6_2) ? 0x0C : 0x04;
- mOpenedChannels.resize(mMaxChannelCount, false);
- clientCallback->onStateChange_1_1(true, "NXP SE HAL init ok");
- mCallbackV1_1 = clientCallback;
- } else {
- LOG(ERROR) << "eSE-Hal Init failed";
- clientCallback->onStateChange_1_1(false, "NXP SE HAL init failed");
- }
- return Void();
-}
-
-Return<void> SecureElement::getAtr(getAtr_cb _hidl_cb) {
- AutoMutex guard(seHalLock);
- LOG(ERROR) << "Processing ATR.....";
- phNxpEse_data atrData;
- hidl_vec<uint8_t> response;
- ESESTATUS status = ESESTATUS_FAILED;
- bool mIsSeHalInitDone = false;
-
- if (!mIsEseInitialized) {
- ESESTATUS status = seHalInit();
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "%s: seHalInit Failed!!!" << __func__;
- _hidl_cb(response); /*Return with empty Vector*/
- return Void();
- } else {
- mIsSeHalInitDone = true;
- }
- }
- status = phNxpEse_SetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "Endpoint set failed";
- }
- status = phNxpEse_getAtr(&atrData);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_getAtr failed";
- _hidl_cb(response); /*Return with empty Vector*/
- return Void();
- } else {
- response.resize(atrData.len);
- memcpy(&response[0], atrData.p_data, atrData.len);
- }
-
- status = phNxpEse_ResetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "Endpoint set failed";
- }
-
- if (status != ESESTATUS_SUCCESS) {
- LOG(INFO) << StringPrintf("ATR Data[BytebyByte]=Look below for %d bytes",
- atrData.len);
- for (auto i = response.begin(); i != response.end(); ++i)
- LOG(INFO) << StringPrintf("0x%x\t", *i);
- }
-
- _hidl_cb(response);
- if (atrData.p_data != NULL) {
- phNxpEse_free(atrData.p_data);
- }
- if (mIsSeHalInitDone) {
- if (SecureElementStatus::SUCCESS != seHalDeInit())
- LOG(ERROR) << "phNxpEse_getAtr seHalDeInit failed";
- mIsEseInitialized = false;
- mIsSeHalInitDone = false;
- }
- return Void();
-}
-
-Return<bool> SecureElement::isCardPresent() { return true; }
-
-Return<void> SecureElement::transmit(const hidl_vec<uint8_t>& data,
- transmit_cb _hidl_cb) {
- AutoMutex guard(seHalLock);
- ESESTATUS status = ESESTATUS_FAILED;
- hidl_vec<uint8_t> result;
- phNxpEse_memset(&gsTxRxBuffer.cmdData, 0x00, sizeof(phNxpEse_data));
- phNxpEse_memset(&gsTxRxBuffer.rspData, 0x00, sizeof(phNxpEse_data));
- gsTxRxBuffer.cmdData.len = (uint32_t)data.size();
- gsTxRxBuffer.cmdData.p_data =
- (uint8_t*)phNxpEse_memalloc(data.size() * sizeof(uint8_t));
- if (NULL == gsTxRxBuffer.cmdData.p_data) {
- LOG(ERROR) << "transmit failed to allocate the Memory!!!";
- /*Return empty hidl_vec*/
- _hidl_cb(result);
- return Void();
- }
- memcpy(gsTxRxBuffer.cmdData.p_data, data.data(), gsTxRxBuffer.cmdData.len);
- LOG(INFO) << "Acquired lock for SPI";
- status = phNxpEse_SetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- status = phNxpEse_Transceive(&gsTxRxBuffer.cmdData, &gsTxRxBuffer.rspData);
-
- if (status == ESESTATUS_SUCCESS) {
- result.resize(gsTxRxBuffer.rspData.len);
- memcpy(&result[0], gsTxRxBuffer.rspData.p_data, gsTxRxBuffer.rspData.len);
- } else if (status == ESESTATUS_INVALID_RECEIVE_LENGTH) {
- uint8_t respBuf[] = {INVALID_LEN_SW1, INVALID_LEN_SW2};
- result.resize(sizeof(respBuf));
- memcpy(&result[0], respBuf, sizeof(respBuf));
- } else {
- LOG(ERROR) << "transmit failed!!!";
- }
- status = phNxpEse_ResetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
-
- _hidl_cb(result);
- if (NULL != gsTxRxBuffer.cmdData.p_data) {
- phNxpEse_free(gsTxRxBuffer.cmdData.p_data);
- gsTxRxBuffer.cmdData.p_data = NULL;
- }
- if (NULL != gsTxRxBuffer.rspData.p_data) {
- phNxpEse_free(gsTxRxBuffer.rspData.p_data);
- gsTxRxBuffer.rspData.p_data = NULL;
- }
-
- return Void();
-}
-
-Return<void> SecureElement::openLogicalChannel(const hidl_vec<uint8_t>& aid,
- uint8_t p2,
- openLogicalChannel_cb _hidl_cb) {
- AutoMutex guard(seHalLock);
- hidl_vec<uint8_t> manageChannelCommand = {0x00, 0x70, 0x00, 0x00, 0x01};
-
- LogicalChannelResponse resApduBuff;
- resApduBuff.channelNumber = 0xff;
- memset(&resApduBuff, 0x00, sizeof(resApduBuff));
-
- LOG(INFO) << "Acquired the lock from SPI openLogicalChannel";
-
- if (!mIsEseInitialized) {
- ESESTATUS status = seHalInit();
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "%s: seHalInit Failed!!!" << __func__;
- _hidl_cb(resApduBuff, SecureElementStatus::IOERROR);
- return Void();
- }
- }
-
- SecureElementStatus sestatus = SecureElementStatus::IOERROR;
- ESESTATUS status = ESESTATUS_FAILED;
- phNxpEse_data cmdApdu;
- phNxpEse_data rspApdu;
-
- phNxpEse_memset(&cmdApdu, 0x00, sizeof(phNxpEse_data));
-
- phNxpEse_memset(&rspApdu, 0x00, sizeof(phNxpEse_data));
-
- cmdApdu.len = (uint32_t)manageChannelCommand.size();
- cmdApdu.p_data = (uint8_t*)phNxpEse_memalloc(manageChannelCommand.size() *
- sizeof(uint8_t));
- memcpy(cmdApdu.p_data, manageChannelCommand.data(), cmdApdu.len);
-
- status = phNxpEse_SetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- status = phNxpEse_Transceive(&cmdApdu, &rspApdu);
- if (status != ESESTATUS_SUCCESS) {
- resApduBuff.channelNumber = 0xff;
- } else if (rspApdu.p_data[rspApdu.len - 2] == 0x6A &&
- rspApdu.p_data[rspApdu.len - 1] == 0x81) {
- resApduBuff.channelNumber = 0xff;
- sestatus = SecureElementStatus::CHANNEL_NOT_AVAILABLE;
- } else if (rspApdu.p_data[rspApdu.len - 2] == 0x90 &&
- rspApdu.p_data[rspApdu.len - 1] == 0x00) {
- resApduBuff.channelNumber = rspApdu.p_data[0];
- mOpenedchannelCount++;
- mOpenedChannels[resApduBuff.channelNumber] = true;
- sestatus = SecureElementStatus::SUCCESS;
- } else if (((rspApdu.p_data[rspApdu.len - 2] == 0x6E) ||
- (rspApdu.p_data[rspApdu.len - 2] == 0x6D)) &&
- rspApdu.p_data[rspApdu.len - 1] == 0x00) {
- sestatus = SecureElementStatus::UNSUPPORTED_OPERATION;
- }
- /*Free the allocations*/
- phNxpEse_free(cmdApdu.p_data);
- phNxpEse_free(rspApdu.p_data);
-
- if (sestatus != SecureElementStatus::SUCCESS) {
- if (mOpenedchannelCount == 0) {
- SecureElementStatus deInitStatus = seHalDeInit();
- if (deInitStatus != SecureElementStatus::SUCCESS) {
- LOG(INFO) << "seDeInit Failed";
- }
- }
- /*If manageChanle is failed in any of above cases
- send the callback and return*/
- status = phNxpEse_ResetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- _hidl_cb(resApduBuff, sestatus);
- return Void();
- }
- LOG(INFO) << "openLogicalChannel Sending selectApdu";
- sestatus = SecureElementStatus::IOERROR;
- status = ESESTATUS_FAILED;
-
- phNxpEse_7816_cpdu_t cpdu;
- phNxpEse_7816_rpdu_t rpdu;
- phNxpEse_memset(&cpdu, 0x00, sizeof(phNxpEse_7816_cpdu_t));
- phNxpEse_memset(&rpdu, 0x00, sizeof(phNxpEse_7816_rpdu_t));
-
- if ((resApduBuff.channelNumber > 0x03) &&
- (resApduBuff.channelNumber < 0x14)) {
- /* update CLA byte accoridng to GP spec Table 11-12*/
- cpdu.cla =
- 0x40 + (resApduBuff.channelNumber - 4); /* Class of instruction */
- } else if ((resApduBuff.channelNumber > 0x00) &&
- (resApduBuff.channelNumber < 0x04)) {
- /* update CLA byte accoridng to GP spec Table 11-11*/
- cpdu.cla = resApduBuff.channelNumber; /* Class of instruction */
- } else {
- LOG(ERROR) << StringPrintf("%s: Invalid Channel no: %02x", __func__,
- resApduBuff.channelNumber);
- resApduBuff.channelNumber = 0xff;
- _hidl_cb(resApduBuff, SecureElementStatus::IOERROR);
- return Void();
- }
- cpdu.ins = 0xA4; /* Instruction code */
- cpdu.p1 = 0x04; /* Instruction parameter 1 */
- cpdu.p2 = p2; /* Instruction parameter 2 */
- cpdu.lc = (uint16_t)aid.size();
- cpdu.le_type = 0x01;
- cpdu.pdata = (uint8_t*)phNxpEse_memalloc(aid.size() * sizeof(uint8_t));
- memcpy(cpdu.pdata, aid.data(), cpdu.lc);
- cpdu.le = 256;
-
- rpdu.len = 0x02;
- rpdu.pdata = (uint8_t*)phNxpEse_memalloc(cpdu.le * sizeof(uint8_t));
-
- status = phNxpEse_7816_Transceive(&cpdu, &rpdu);
-
- if (status != ESESTATUS_SUCCESS) {
- /*Transceive failed*/
- if (rpdu.len > 0 && (rpdu.sw1 == 0x64 && rpdu.sw2 == 0xFF)) {
- sestatus = SecureElementStatus::IOERROR;
- } else {
- sestatus = SecureElementStatus::FAILED;
- }
- } else {
- /*Status word to be passed as part of response
- So include additional length*/
- uint16_t responseLen = rpdu.len + 2;
- resApduBuff.selectResponse.resize(responseLen);
- memcpy(&resApduBuff.selectResponse[0], rpdu.pdata, rpdu.len);
- resApduBuff.selectResponse[responseLen - 1] = rpdu.sw2;
- resApduBuff.selectResponse[responseLen - 2] = rpdu.sw1;
-
- /*Status is success*/
- if ((rpdu.sw1 == 0x90 && rpdu.sw2 == 0x00) || (rpdu.sw1 == 0x62) ||
- (rpdu.sw1 == 0x63)) {
- sestatus = SecureElementStatus::SUCCESS;
- }
- /*AID provided doesn't match any applet on the secure element*/
- else if ((rpdu.sw1 == 0x6A && rpdu.sw2 == 0x82) ||
- (rpdu.sw1 == 0x69 && (rpdu.sw2 == 0x99 || rpdu.sw2 == 0x85))) {
- sestatus = SecureElementStatus::NO_SUCH_ELEMENT_ERROR;
- }
- /*Operation provided by the P2 parameter is not permitted by the applet.*/
- else if (rpdu.sw1 == 0x6A && rpdu.sw2 == 0x86) {
- sestatus = SecureElementStatus::UNSUPPORTED_OPERATION;
- } else {
- sestatus = SecureElementStatus::FAILED;
- }
- }
- if (sestatus != SecureElementStatus::SUCCESS) {
- SecureElementStatus closeChannelStatus =
- internalCloseChannel(resApduBuff.channelNumber);
- if (closeChannelStatus != SecureElementStatus::SUCCESS) {
- LOG(ERROR) << "%s: closeChannel Failed" << __func__;
- } else {
- resApduBuff.channelNumber = 0xff;
- }
- }
- status = phNxpEse_ResetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- _hidl_cb(resApduBuff, sestatus);
- phNxpEse_free(cpdu.pdata);
- phNxpEse_free(rpdu.pdata);
-
- return Void();
-}
-
-Return<void> SecureElement::openBasicChannel(const hidl_vec<uint8_t>& aid,
- uint8_t p2,
- openBasicChannel_cb _hidl_cb) {
- AutoMutex guard(seHalLock);
- ESESTATUS status = ESESTATUS_SUCCESS;
- phNxpEse_7816_cpdu_t cpdu;
- phNxpEse_7816_rpdu_t rpdu;
- hidl_vec<uint8_t> result;
- hidl_vec<uint8_t> ls_aid = {0xA0, 0x00, 0x00, 0x03, 0x96, 0x41, 0x4C,
- 0x41, 0x01, 0x43, 0x4F, 0x52, 0x01};
-
- LOG(ERROR) << "Acquired the lock in SPI openBasicChannel";
-
- if (!mIsEseInitialized) {
- ESESTATUS status = seHalInit();
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "%s: seHalInit Failed!!!" << __func__;
- _hidl_cb(result, SecureElementStatus::IOERROR);
- return Void();
- }
- }
- phNxpEse_memset(&cpdu, 0x00, sizeof(phNxpEse_7816_cpdu_t));
- phNxpEse_memset(&rpdu, 0x00, sizeof(phNxpEse_7816_rpdu_t));
-
- cpdu.cla = 0x00; /* Class of instruction */
- cpdu.ins = 0xA4; /* Instruction code */
- cpdu.p1 = 0x04; /* Instruction parameter 1 */
- cpdu.p2 = p2; /* Instruction parameter 2 */
- cpdu.lc = (uint16_t)aid.size();
- cpdu.le_type = 0x01;
- cpdu.pdata = (uint8_t*)phNxpEse_memalloc(aid.size() * sizeof(uint8_t));
- memcpy(cpdu.pdata, aid.data(), cpdu.lc);
- cpdu.le = 256;
-
- rpdu.len = 0x02;
- rpdu.pdata = (uint8_t*)phNxpEse_memalloc(cpdu.le * sizeof(uint8_t));
-
- status = phNxpEse_SetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- status = phNxpEse_7816_Transceive(&cpdu, &rpdu);
- SecureElementStatus sestatus;
- memset(&sestatus, 0x00, sizeof(sestatus));
-
- if (status != ESESTATUS_SUCCESS) {
- /* Transceive failed */
- if (rpdu.len > 0 && (rpdu.sw1 == 0x64 && rpdu.sw2 == 0xFF)) {
- sestatus = SecureElementStatus::IOERROR;
- } else {
- sestatus = SecureElementStatus::FAILED;
- }
- } else {
- /*Status word to be passed as part of response
- So include additional length*/
- uint16_t responseLen = rpdu.len + 2;
- result.resize(responseLen);
- memcpy(&result[0], rpdu.pdata, rpdu.len);
- result[responseLen - 1] = rpdu.sw2;
- result[responseLen - 2] = rpdu.sw1;
-
- /*Status is success*/
- if (((rpdu.sw1 == 0x90) && (rpdu.sw2 == 0x00)) || (rpdu.sw1 == 0x62) ||
- (rpdu.sw1 == 0x63)) {
- /*Set basic channel reference if it is not set */
- if (!mOpenedChannels[0]) {
- mOpenedChannels[0] = true;
- mOpenedchannelCount++;
- }
-
- sestatus = SecureElementStatus::SUCCESS;
- }
- /*AID provided doesn't match any applet on the secure element*/
- else if ((rpdu.sw1 == 0x6A && rpdu.sw2 == 0x82) ||
- (rpdu.sw1 == 0x69 && (rpdu.sw2 == 0x99 || rpdu.sw2 == 0x85))) {
- sestatus = SecureElementStatus::NO_SUCH_ELEMENT_ERROR;
- }
- /*Operation provided by the P2 parameter is not permitted by the applet.*/
- else if (rpdu.sw1 == 0x6A && rpdu.sw2 == 0x86) {
- sestatus = SecureElementStatus::UNSUPPORTED_OPERATION;
- } else {
- sestatus = SecureElementStatus::FAILED;
- }
- }
- status = phNxpEse_ResetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- if (sestatus != SecureElementStatus::SUCCESS) {
- SecureElementStatus closeChannelStatus =
- internalCloseChannel(DEFAULT_BASIC_CHANNEL);
- if (closeChannelStatus != SecureElementStatus::SUCCESS) {
- LOG(ERROR) << "%s: closeChannel Failed" << __func__;
- }
- }
- _hidl_cb(result, sestatus);
- phNxpEse_free(cpdu.pdata);
- phNxpEse_free(rpdu.pdata);
- return Void();
-}
-
-Return<SecureElementStatus> SecureElement::internalCloseChannel(
- uint8_t channelNumber) {
- ESESTATUS status = ESESTATUS_SUCCESS;
- SecureElementStatus sestatus = SecureElementStatus::FAILED;
- phNxpEse_7816_cpdu_t cpdu;
- phNxpEse_7816_rpdu_t rpdu;
-
- LOG(ERROR) << "Acquired the lock in SPI internalCloseChannel";
- LOG(INFO) << StringPrintf("mMaxChannelCount = %d, Closing Channel = %d",
- mMaxChannelCount, channelNumber);
- if ((int8_t)channelNumber < DEFAULT_BASIC_CHANNEL ||
- channelNumber >= mMaxChannelCount) {
- LOG(ERROR) << StringPrintf("invalid channel!!! %d", channelNumber);
- } else if (channelNumber > DEFAULT_BASIC_CHANNEL) {
- phNxpEse_memset(&cpdu, 0x00, sizeof(phNxpEse_7816_cpdu_t));
- phNxpEse_memset(&rpdu, 0x00, sizeof(phNxpEse_7816_rpdu_t));
- cpdu.cla = channelNumber; /* Class of instruction */
- cpdu.ins = 0x70; /* Instruction code */
- cpdu.p1 = 0x80; /* Instruction parameter 1 */
- cpdu.p2 = channelNumber; /* Instruction parameter 2 */
- cpdu.lc = 0x00;
- cpdu.le = 0x9000;
- status = phNxpEse_SetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- status = phNxpEse_7816_Transceive(&cpdu, &rpdu);
- if (status == ESESTATUS_SUCCESS) {
- if ((rpdu.sw1 == 0x90) && (rpdu.sw2 == 0x00)) {
- sestatus = SecureElementStatus::SUCCESS;
- }
- }
- status = phNxpEse_ResetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- }
- if (channelNumber < mMaxChannelCount) {
- if (mOpenedChannels[channelNumber]) {
- mOpenedChannels[channelNumber] = false;
- mOpenedchannelCount--;
- }
- }
- /*If there are no channels remaining close secureElement*/
- if (mOpenedchannelCount == 0) {
- sestatus = seHalDeInit();
- } else {
- sestatus = SecureElementStatus::SUCCESS;
- }
- return sestatus;
-}
-
-Return<SecureElementStatus> SecureElement::closeChannel(uint8_t channelNumber) {
- AutoMutex guard(seHalLock);
- return internalCloseChannel(channelNumber);
-}
-
-void SecureElement::serviceDied(uint64_t /*cookie*/, const wp<IBase>& /*who*/) {
- LOG(ERROR) << " SecureElement serviceDied!!!";
- mIsEseInitialized = false;
- if (seHalDeInit() != SecureElementStatus::SUCCESS) {
- LOG(ERROR) << "SE Deinit not successful";
- }
-}
-ESESTATUS SecureElement::seHalInit() {
- ESESTATUS status = ESESTATUS_SUCCESS;
- phNxpEse_initParams initParams;
- ESESTATUS deInitStatus = ESESTATUS_SUCCESS;
- memset(&initParams, 0x00, sizeof(phNxpEse_initParams));
- initParams.initMode = ESE_MODE_NORMAL;
- initParams.mediaType = ESE_PROTOCOL_MEDIA_SPI_APDU_GATE;
- initParams.fPtr_WtxNtf = SecureElement::NotifySeWaitExtension;
-
- status = phNxpEse_open(initParams);
- if (ESESTATUS_SUCCESS == status || ESESTATUS_BUSY == status) {
- if (ESESTATUS_SUCCESS == phNxpEse_SetEndPoint_Cntxt(0) &&
- ESESTATUS_SUCCESS == phNxpEse_init(initParams)) {
- if (ESESTATUS_SUCCESS == phNxpEse_ResetEndPoint_Cntxt(0)) {
- mIsEseInitialized = true;
- LOG(INFO) << "ESE SPI init complete!!!";
- return ESESTATUS_SUCCESS;
- }
- deInitStatus = phNxpEse_deInit();
- } else {
- LOG(INFO) << "ESE SPI init NOT successful";
- status = ESESTATUS_FAILED;
- }
- if (phNxpEse_close(deInitStatus) != ESESTATUS_SUCCESS) {
- LOG(INFO) << "ESE close not successful";
- status = ESESTATUS_FAILED;
- }
- mIsEseInitialized = false;
- }
- return status;
-}
-
-Return<SecureElementStatus> SecureElement::seHalDeInit() {
- ESESTATUS status = ESESTATUS_SUCCESS;
- ESESTATUS deInitStatus = ESESTATUS_SUCCESS;
- bool mIsDeInitDone = true;
- SecureElementStatus sestatus = SecureElementStatus::FAILED;
- status = phNxpEse_SetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- mIsDeInitDone = false;
- }
- deInitStatus = phNxpEse_deInit();
- if (ESESTATUS_SUCCESS != deInitStatus) mIsDeInitDone = false;
- status = phNxpEse_ResetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- mIsDeInitDone = false;
- }
- status = phNxpEse_close(deInitStatus);
- if (status == ESESTATUS_SUCCESS && mIsDeInitDone) {
- sestatus = SecureElementStatus::SUCCESS;
- ;
- } else {
- LOG(ERROR) << "seHalDeInit: Failed";
- }
- mIsEseInitialized = false;
- for (uint8_t xx = 0; xx < mMaxChannelCount; xx++) {
- mOpenedChannels[xx] = false;
- }
- mOpenedchannelCount = 0;
-
- return sestatus;
-}
-
-} // namespace implementation
-} // namespace V1_1
-} // namespace secure_element
-} // namespace hardware
-} // namespace android
diff --git a/snxxx/1.1/SecureElement.h b/snxxx/1.1/SecureElement.h
deleted file mode 100755
index 5c15da1..0000000
--- a/snxxx/1.1/SecureElement.h
+++ /dev/null
@@ -1,124 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2018-2019 NXP
- *
- * 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.
- *
- ******************************************************************************/
-#ifndef ANDROID_HARDWARE_SECURE_ELEMENT_V1_1_SECUREELEMENT_H
-#define ANDROID_HARDWARE_SECURE_ELEMENT_V1_1_SECUREELEMENT_H
-
-#include <SyncEvent.h>
-#include <android-base/stringprintf.h>
-#include <android/hardware/secure_element/1.0/types.h>
-#include <android/hardware/secure_element/1.1/ISecureElement.h>
-#include <hardware/hardware.h>
-#include <hidl/MQDescriptor.h>
-#include <hidl/Status.h>
-#include <pthread.h>
-#include "phNxpEse_Api.h"
-
-class ThreadMutex {
- public:
- ThreadMutex();
- virtual ~ThreadMutex();
- void lock();
- void unlock();
- operator pthread_mutex_t*() { return &mMutex; }
-
- private:
- pthread_mutex_t mMutex;
-};
-
-class AutoThreadMutex {
- public:
- AutoThreadMutex(ThreadMutex& m);
- virtual ~AutoThreadMutex();
- operator ThreadMutex&() { return mm; }
- operator pthread_mutex_t*() { return (pthread_mutex_t*)mm; }
-
- private:
- ThreadMutex& mm;
-};
-
-namespace android {
-namespace hardware {
-namespace secure_element {
-namespace V1_1 {
-namespace implementation {
-
-using ::android::sp;
-using android::base::StringPrintf;
-using ::android::hardware::hidl_array;
-using ::android::hardware::hidl_memory;
-using ::android::hardware::hidl_string;
-using ::android::hardware::hidl_vec;
-using ::android::hardware::Return;
-using ::android::hardware::Void;
-using ::android::hardware::secure_element::V1_0::LogicalChannelResponse;
-using ::android::hardware::secure_element::V1_0::SecureElementStatus;
-using ::android::hardware::secure_element::V1_1::ISecureElement;
-using ::android::hidl::base::V1_0::IBase;
-
-#ifndef MIN_APDU_LENGTH
-#define MIN_APDU_LENGTH 0x04
-#endif
-#ifndef DEFAULT_BASIC_CHANNEL
-#define DEFAULT_BASIC_CHANNEL 0x00
-#endif
-
-struct SecureElement : public V1_1::ISecureElement,
- public hidl_death_recipient {
- SecureElement();
- Return<void> init(
- const sp<
- ::android::hardware::secure_element::V1_0::ISecureElementHalCallback>&
- clientCallback) override;
- Return<void> init_1_1(
- const sp<
- ::android::hardware::secure_element::V1_1::ISecureElementHalCallback>&
- clientCallback) override;
- Return<void> getAtr(getAtr_cb _hidl_cb) override;
- Return<bool> isCardPresent() override;
- Return<void> transmit(const hidl_vec<uint8_t>& data,
- transmit_cb _hidl_cb) override;
- Return<void> openLogicalChannel(const hidl_vec<uint8_t>& aid, uint8_t p2,
- openLogicalChannel_cb _hidl_cb) override;
- Return<void> openBasicChannel(const hidl_vec<uint8_t>& aid, uint8_t p2,
- openBasicChannel_cb _hidl_cb) override;
- Return<SecureElementStatus> closeChannel(uint8_t channelNumber) override;
-
- void serviceDied(uint64_t /*cookie*/, const wp<IBase>& /*who*/);
-
- static void NotifySeWaitExtension(phNxpEse_wtxState state);
-
- private:
- uint8_t mMaxChannelCount;
- uint8_t mOpenedchannelCount = 0;
- Mutex seHalLock;
- bool mIsEseInitialized = false;
- static std::vector<bool> mOpenedChannels;
- static sp<V1_0::ISecureElementHalCallback> mCallbackV1_0;
- static sp<V1_1::ISecureElementHalCallback> mCallbackV1_1;
- Return<SecureElementStatus> seHalDeInit();
- ESESTATUS seHalInit();
- Return<SecureElementStatus> internalCloseChannel(uint8_t channelNumber);
-};
-
-} // namespace implementation
-} // namespace V1_1
-} // namespace secure_element
-} // namespace hardware
-} // namespace android
-
-#endif // ANDROID_HARDWARE_SECURE_ELEMENT_V1_1_SECUREELEMENT_H
diff --git a/snxxx/1.1/VirtualISO.cpp b/snxxx/1.1/VirtualISO.cpp
deleted file mode 100755
index aa0355e..0000000
--- a/snxxx/1.1/VirtualISO.cpp
+++ /dev/null
@@ -1,655 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2018-2020 NXP
- *
- * 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.
- *
- ******************************************************************************/
-#include "VirtualISO.h"
-#include <android-base/logging.h>
-#include "NxpEse.h"
-#include "SecureElement.h"
-#include "eSEClient.h"
-#include "hal_nxpese.h"
-#include "phNxpEse_Apdu_Api.h"
-#include "phNxpEse_Api.h"
-
-namespace vendor {
-namespace nxp {
-namespace virtual_iso {
-namespace V1_0 {
-namespace implementation {
-
-#define LOG_TAG "nxpVIsoese@1.1-service"
-
-#define DEFAULT_BASIC_CHANNEL 0x00
-
-using ::android::hardware::secure_element::V1_1::ISecureElement;
-using vendor::nxp::nxpese::V1_0::implementation::NxpEse;
-
-typedef struct gsTransceiveBuffer {
- phNxpEse_data cmdData;
- phNxpEse_data rspData;
- hidl_vec<uint8_t>* pRspDataBuff;
-} sTransceiveBuffer_t;
-
-static sTransceiveBuffer_t gsTxRxBuffer;
-static hidl_vec<uint8_t> gsRspDataBuff(256);
-sp<::android::hardware::secure_element::V1_0::ISecureElementHalCallback>
- VirtualISO::mCallbackV1_0 = nullptr;
-sp<::android::hardware::secure_element::V1_1::ISecureElementHalCallback>
- VirtualISO::mCallbackV1_1 = nullptr;
-std::vector<bool> VirtualISO::mOpenedChannels;
-
-VirtualISO::VirtualISO()
- : mMaxChannelCount(0), mOpenedchannelCount(0), mIsEseInitialized(false) {}
-
-Return<void> VirtualISO::init(
- const sp<
- ::android::hardware::secure_element::V1_0::ISecureElementHalCallback>&
- clientCallback) {
- ESESTATUS status = ESESTATUS_SUCCESS;
- ESESTATUS deInitStatus = ESESTATUS_SUCCESS;
- bool mIsInitDone = false;
- phNxpEse_initParams initParams;
- LOG(INFO) << "Virtual ISO::init Enter";
- gsTxRxBuffer.pRspDataBuff = &gsRspDataBuff;
- memset(&initParams, 0x00, sizeof(phNxpEse_initParams));
- initParams.initMode = ESE_MODE_NORMAL;
- initParams.mediaType = ESE_PROTOCOL_MEDIA_SPI_APDU_GATE;
-
- if (clientCallback == nullptr) {
- return Void();
- } else {
- clientCallback->linkToDeath(this, 0 /*cookie*/);
- }
- if (ese_update != ESE_UPDATE_COMPLETED) {
- mCallbackV1_0 = clientCallback;
- clientCallback->onStateChange(false);
- LOG(INFO) << "ESE JCOP Download in progress";
- NxpEse::setVirtualISOCallBack(clientCallback);
- return Void();
- // Register
- }
- if (mIsEseInitialized) {
- clientCallback->onStateChange(true);
- return Void();
- }
- status = phNxpEse_open(initParams);
- if (status == ESESTATUS_SUCCESS || ESESTATUS_BUSY == status) {
- if (ESESTATUS_SUCCESS == phNxpEse_SetEndPoint_Cntxt(1) &&
- ESESTATUS_SUCCESS == phNxpEse_init(initParams)) {
- if (ESESTATUS_SUCCESS == phNxpEse_ResetEndPoint_Cntxt(1)) {
- LOG(INFO) << "VISO init complete!!!";
- mIsInitDone = true;
- }
- deInitStatus = phNxpEse_deInit();
- if (ESESTATUS_SUCCESS != deInitStatus) mIsInitDone = false;
- }
- status = phNxpEse_close(deInitStatus);
- }
- if (status == ESESTATUS_SUCCESS && mIsInitDone) {
- mMaxChannelCount = (GET_CHIP_OS_VERSION() >= OS_VERSION_6_2) ? 0x0C : 0x04;
- mOpenedChannels.resize(mMaxChannelCount, false);
- clientCallback->onStateChange(true);
- } else {
- LOG(ERROR) << "VISO-Hal Init failed";
- clientCallback->onStateChange(false);
- }
- return Void();
-}
-
-Return<void> VirtualISO::init_1_1(
- const sp<
- ::android::hardware::secure_element::V1_1::ISecureElementHalCallback>&
- clientCallback) {
- ESESTATUS status = ESESTATUS_SUCCESS;
- ESESTATUS deInitStatus = ESESTATUS_SUCCESS;
- bool mIsInitDone = false;
- phNxpEse_initParams initParams;
- LOG(INFO) << "Virtual ISO::init Enter";
- gsTxRxBuffer.pRspDataBuff = &gsRspDataBuff;
- memset(&initParams, 0x00, sizeof(phNxpEse_initParams));
- initParams.initMode = ESE_MODE_NORMAL;
- initParams.mediaType = ESE_PROTOCOL_MEDIA_SPI_APDU_GATE;
-
- if (clientCallback == nullptr) {
- return Void();
- } else {
- clientCallback->linkToDeath(this, 0 /*cookie*/);
- }
- if (ese_update != ESE_UPDATE_COMPLETED) {
- mCallbackV1_1 = clientCallback;
- clientCallback->onStateChange_1_1(false, "NXP SE update going on");
- LOG(INFO) << "ESE JCOP Download in progress";
- NxpEse::setVirtualISOCallBack_1_1(clientCallback);
- return Void();
- // Register
- }
- if (mIsEseInitialized) {
- clientCallback->onStateChange_1_1(true, "NXP VISIO HAL init ok");
- return Void();
- }
- status = phNxpEse_open(initParams);
- if (status == ESESTATUS_SUCCESS || ESESTATUS_BUSY == status) {
- if (ESESTATUS_SUCCESS == phNxpEse_SetEndPoint_Cntxt(1) &&
- ESESTATUS_SUCCESS == phNxpEse_init(initParams)) {
- if (ESESTATUS_SUCCESS == phNxpEse_ResetEndPoint_Cntxt(1)) {
- LOG(INFO) << "VISO init complete!!!";
- mIsInitDone = true;
- }
- deInitStatus = phNxpEse_deInit();
- if (ESESTATUS_SUCCESS != deInitStatus) mIsInitDone = false;
- }
- status = phNxpEse_close(deInitStatus);
- }
- if (status == ESESTATUS_SUCCESS && mIsInitDone) {
- mMaxChannelCount = (GET_CHIP_OS_VERSION() >= OS_VERSION_6_2) ? 0x0C : 0x04;
- mOpenedChannels.resize(mMaxChannelCount, false);
- clientCallback->onStateChange_1_1(true, "NXP VISIO HAL init ok");
- } else {
- LOG(ERROR) << "VISO-Hal Init failed";
- clientCallback->onStateChange_1_1(false, "NXP VISIO HAL init failed");
- }
- return Void();
-}
-
-Return<void> VirtualISO::getAtr(getAtr_cb _hidl_cb) {
- hidl_vec<uint8_t> response;
- _hidl_cb(response);
- return Void();
-}
-
-Return<bool> VirtualISO::isCardPresent() { return true; }
-
-Return<void> VirtualISO::transmit(const hidl_vec<uint8_t>& data,
- transmit_cb _hidl_cb) {
- ESESTATUS status = ESESTATUS_FAILED;
- hidl_vec<uint8_t> result;
- phNxpEse_memset(&gsTxRxBuffer.cmdData, 0x00, sizeof(phNxpEse_data));
- phNxpEse_memset(&gsTxRxBuffer.rspData, 0x00, sizeof(phNxpEse_data));
- gsTxRxBuffer.cmdData.len = data.size();
- gsTxRxBuffer.cmdData.p_data =
- (uint8_t*)phNxpEse_memalloc(data.size() * sizeof(uint8_t));
- if (NULL == gsTxRxBuffer.cmdData.p_data) {
- LOG(ERROR) << "transmit failed to allocate the Memory!!!";
- /*Return empty hidl_vec*/
- _hidl_cb(result);
- return Void();
- }
- memcpy(gsTxRxBuffer.cmdData.p_data, data.data(), gsTxRxBuffer.cmdData.len);
- LOG(ERROR) << "Acquired the lock in VISO ";
- status = phNxpEse_SetEndPoint_Cntxt(1);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- status = phNxpEse_Transceive(&gsTxRxBuffer.cmdData, &gsTxRxBuffer.rspData);
-
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "transmit failed!!!";
- } else {
- result.resize(gsTxRxBuffer.rspData.len);
- memcpy(&result[0], gsTxRxBuffer.rspData.p_data, gsTxRxBuffer.rspData.len);
- }
- status = phNxpEse_ResetEndPoint_Cntxt(1);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
-
- _hidl_cb(result);
- if (NULL != gsTxRxBuffer.cmdData.p_data) {
- phNxpEse_free(gsTxRxBuffer.cmdData.p_data);
- gsTxRxBuffer.cmdData.p_data = NULL;
- }
- if (NULL != gsTxRxBuffer.rspData.p_data) {
- phNxpEse_free(gsTxRxBuffer.rspData.p_data);
- gsTxRxBuffer.rspData.p_data = NULL;
- }
-
- return Void();
-}
-
-Return<void> VirtualISO::openLogicalChannel(const hidl_vec<uint8_t>& aid,
- uint8_t p2,
- openLogicalChannel_cb _hidl_cb) {
- hidl_vec<uint8_t> manageChannelCommand = {0x00, 0x70, 0x00, 0x00, 0x01};
-
- LogicalChannelResponse resApduBuff;
-
- LOG(INFO) << "Acquired the lock in VISO openLogicalChannel";
-
- resApduBuff.channelNumber = 0xff;
- memset(&resApduBuff, 0x00, sizeof(resApduBuff));
- if (!mIsEseInitialized) {
- ESESTATUS status = seHalInit();
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "%s: seHalInit Failed!!!" << __func__;
- _hidl_cb(resApduBuff, SecureElementStatus::IOERROR);
- return Void();
- }
- }
-
- SecureElementStatus sestatus = SecureElementStatus::IOERROR;
- ESESTATUS status = ESESTATUS_FAILED;
- phNxpEse_data cmdApdu;
- phNxpEse_data rspApdu;
-
- phNxpEse_memset(&cmdApdu, 0x00, sizeof(phNxpEse_data));
- phNxpEse_memset(&rspApdu, 0x00, sizeof(phNxpEse_data));
-
- cmdApdu.len = manageChannelCommand.size();
- cmdApdu.p_data = (uint8_t*)phNxpEse_memalloc(manageChannelCommand.size() *
- sizeof(uint8_t));
- memcpy(cmdApdu.p_data, manageChannelCommand.data(), cmdApdu.len);
-
- memset(&sestatus, 0x00, sizeof(sestatus));
-
- status = phNxpEse_SetEndPoint_Cntxt(1);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- status = phNxpEse_Transceive(&cmdApdu, &rspApdu);
- if (status != ESESTATUS_SUCCESS) {
- resApduBuff.channelNumber = 0xff;
- if (NULL != rspApdu.p_data && rspApdu.len > 0) {
- if ((rspApdu.p_data[0] == 0x64 && rspApdu.p_data[1] == 0xFF)) {
- sestatus = SecureElementStatus::IOERROR;
- }
- }
- if (SecureElementStatus::IOERROR != sestatus) {
- sestatus = SecureElementStatus::FAILED;
- }
- } else if (rspApdu.p_data[rspApdu.len - 2] == 0x6A &&
- rspApdu.p_data[rspApdu.len - 1] == 0x81) {
- resApduBuff.channelNumber = 0xff;
- sestatus = SecureElementStatus::CHANNEL_NOT_AVAILABLE;
- } else if (rspApdu.p_data[rspApdu.len - 2] == 0x90 &&
- rspApdu.p_data[rspApdu.len - 1] == 0x00) {
- resApduBuff.channelNumber = rspApdu.p_data[0];
- mOpenedchannelCount++;
- mOpenedChannels[resApduBuff.channelNumber] = true;
- sestatus = SecureElementStatus::SUCCESS;
- } else if (((rspApdu.p_data[rspApdu.len - 2] == 0x6E) ||
- (rspApdu.p_data[rspApdu.len - 2] == 0x6D)) &&
- rspApdu.p_data[rspApdu.len - 1] == 0x00) {
- sestatus = SecureElementStatus::UNSUPPORTED_OPERATION;
- }
-
- /*Free the allocations*/
- phNxpEse_free(cmdApdu.p_data);
- phNxpEse_free(rspApdu.p_data);
-
- if (sestatus != SecureElementStatus::SUCCESS) {
- if (mOpenedchannelCount == 0) {
- sestatus = seHalDeInit();
- if (sestatus != SecureElementStatus::SUCCESS) {
- LOG(INFO) << "seDeInit Failed";
- }
- }
- /*If manageChanle is failed in any of above cases
- send the callback and return*/
- status = phNxpEse_ResetEndPoint_Cntxt(1);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- _hidl_cb(resApduBuff, sestatus);
- return Void();
- }
- LOG(INFO) << "openLogicalChannel Sending selectApdu";
- sestatus = SecureElementStatus::IOERROR;
- status = ESESTATUS_FAILED;
-
- phNxpEse_7816_cpdu_t cpdu;
- phNxpEse_7816_rpdu_t rpdu;
- phNxpEse_memset(&cpdu, 0x00, sizeof(phNxpEse_7816_cpdu_t));
- phNxpEse_memset(&rpdu, 0x00, sizeof(phNxpEse_7816_rpdu_t));
-
- if ((resApduBuff.channelNumber > 0x03) &&
- (resApduBuff.channelNumber < 0x14)) {
- /* update CLA byte accoridng to GP spec Table 11-12*/
- cpdu.cla =
- 0x40 + (resApduBuff.channelNumber - 4); /* Class of instruction */
- } else if ((resApduBuff.channelNumber > 0x00) &&
- (resApduBuff.channelNumber < 0x04)) {
- /* update CLA byte accoridng to GP spec Table 11-11*/
- cpdu.cla = resApduBuff.channelNumber; /* Class of instruction */
- } else {
- LOG(ERROR) << StringPrintf("%s: Invalid Channel no: %02x", __func__,
- resApduBuff.channelNumber);
- resApduBuff.channelNumber = 0xff;
- _hidl_cb(resApduBuff, SecureElementStatus::IOERROR);
- return Void();
- }
- cpdu.ins = 0xA4; /* Instruction code */
- cpdu.p1 = 0x04; /* Instruction parameter 1 */
- cpdu.p2 = p2; /* Instruction parameter 2 */
- cpdu.lc = aid.size();
- cpdu.le_type = 0x01;
- cpdu.pdata = (uint8_t*)phNxpEse_memalloc(aid.size() * sizeof(uint8_t));
- memcpy(cpdu.pdata, aid.data(), cpdu.lc);
- cpdu.le = 256;
-
- rpdu.len = 0x02;
- rpdu.pdata = (uint8_t*)phNxpEse_memalloc(cpdu.le * sizeof(uint8_t));
-
- status = phNxpEse_7816_Transceive(&cpdu, &rpdu);
- if (status != ESESTATUS_SUCCESS) {
- /*Transceive failed*/
- if (rpdu.len > 0 && (rpdu.sw1 == 0x64 && rpdu.sw2 == 0xFF)) {
- sestatus = SecureElementStatus::IOERROR;
- } else {
- sestatus = SecureElementStatus::FAILED;
- }
- } else {
- /*Status word to be passed as part of response
- So include additional length*/
- uint16_t responseLen = rpdu.len + 2;
- resApduBuff.selectResponse.resize(responseLen);
- memcpy(&resApduBuff.selectResponse[0], rpdu.pdata, rpdu.len);
- resApduBuff.selectResponse[responseLen - 1] = rpdu.sw2;
- resApduBuff.selectResponse[responseLen - 2] = rpdu.sw1;
-
- /*Status is success*/
- if (rpdu.sw1 == 0x90 && rpdu.sw2 == 0x00) {
- sestatus = SecureElementStatus::SUCCESS;
- }
- /*AID provided doesn't match any applet on the secure element*/
- else if (rpdu.sw1 == 0x6A && rpdu.sw2 == 0x82) {
- sestatus = SecureElementStatus::NO_SUCH_ELEMENT_ERROR;
- }
- /*Operation provided by the P2 parameter is not permitted by the applet.*/
- else if (rpdu.sw1 == 0x6A && rpdu.sw2 == 0x86) {
- sestatus = SecureElementStatus::UNSUPPORTED_OPERATION;
- } else {
- sestatus = SecureElementStatus::FAILED;
- }
- }
- if (sestatus != SecureElementStatus::SUCCESS) {
- SecureElementStatus closeChannelStatus =
- internalCloseChannel(resApduBuff.channelNumber);
- if (closeChannelStatus != SecureElementStatus::SUCCESS) {
- LOG(ERROR) << "%s: closeChannel Failed" << __func__;
- } else {
- resApduBuff.channelNumber = 0xff;
- }
- }
- status = phNxpEse_ResetEndPoint_Cntxt(1);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- _hidl_cb(resApduBuff, sestatus);
- phNxpEse_free(cpdu.pdata);
- phNxpEse_free(rpdu.pdata);
-
- return Void();
-}
-
-Return<void> VirtualISO::openBasicChannel(const hidl_vec<uint8_t>& aid,
- uint8_t p2,
- openBasicChannel_cb _hidl_cb) {
- ESESTATUS status = ESESTATUS_SUCCESS;
- phNxpEse_7816_cpdu_t cpdu;
- phNxpEse_7816_rpdu_t rpdu;
- hidl_vec<uint8_t> result;
-
- LOG(INFO) << "Acquired the lock in VISO openBasicChannel";
-
- if (!mIsEseInitialized) {
- ESESTATUS status = seHalInit();
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "%s: seHalInit Failed!!!" << __func__;
- _hidl_cb(result, SecureElementStatus::IOERROR);
- return Void();
- }
- }
-
- phNxpEse_memset(&cpdu, 0x00, sizeof(phNxpEse_7816_cpdu_t));
- phNxpEse_memset(&rpdu, 0x00, sizeof(phNxpEse_7816_rpdu_t));
-
- cpdu.cla = 0x00; /* Class of instruction */
- cpdu.ins = 0xA4; /* Instruction code */
- cpdu.p1 = 0x04; /* Instruction parameter 1 */
- cpdu.p2 = p2; /* Instruction parameter 2 */
- cpdu.lc = aid.size();
- cpdu.le_type = 0x01;
- cpdu.pdata = (uint8_t*)phNxpEse_memalloc(aid.size() * sizeof(uint8_t));
- memcpy(cpdu.pdata, aid.data(), cpdu.lc);
- cpdu.le = 256;
-
- rpdu.len = 0x02;
- rpdu.pdata = (uint8_t*)phNxpEse_memalloc(cpdu.le * sizeof(uint8_t));
-
- status = phNxpEse_SetEndPoint_Cntxt(1);
- status = phNxpEse_7816_Transceive(&cpdu, &rpdu);
-
- SecureElementStatus sestatus;
- memset(&sestatus, 0x00, sizeof(sestatus));
-
- if (status != ESESTATUS_SUCCESS) {
- /* Transceive failed */
- if (rpdu.len > 0 && (rpdu.sw1 == 0x64 && rpdu.sw2 == 0xFF)) {
- sestatus = SecureElementStatus::IOERROR;
- } else {
- sestatus = SecureElementStatus::FAILED;
- }
- } else {
- /*Status word to be passed as part of response
- So include additional length*/
- uint16_t responseLen = rpdu.len + 2;
- result.resize(responseLen);
- memcpy(&result[0], rpdu.pdata, rpdu.len);
- result[responseLen - 1] = rpdu.sw2;
- result[responseLen - 2] = rpdu.sw1;
-
- /*Status is success*/
- if ((rpdu.sw1 == 0x90) && (rpdu.sw2 == 0x00)) {
- /*Set basic channel reference if it is not set */
- if (!mOpenedChannels[0]) {
- mOpenedChannels[0] = true;
- mOpenedchannelCount++;
- }
-
- sestatus = SecureElementStatus::SUCCESS;
- }
- /*AID provided doesn't match any applet on the secure element*/
- else if (rpdu.sw1 == 0x6A && rpdu.sw2 == 0x82) {
- sestatus = SecureElementStatus::NO_SUCH_ELEMENT_ERROR;
- }
- /*Operation provided by the P2 parameter is not permitted by the applet.*/
- else if (rpdu.sw1 == 0x6A && rpdu.sw2 == 0x86) {
- sestatus = SecureElementStatus::UNSUPPORTED_OPERATION;
- } else {
- sestatus = SecureElementStatus::FAILED;
- }
- }
- status = phNxpEse_ResetEndPoint_Cntxt(1);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- if (sestatus != SecureElementStatus::SUCCESS) {
- SecureElementStatus closeChannelStatus =
- internalCloseChannel(DEFAULT_BASIC_CHANNEL);
- if (closeChannelStatus != SecureElementStatus::SUCCESS) {
- LOG(ERROR) << "%s: closeChannel Failed" << __func__;
- }
- }
- _hidl_cb(result, sestatus);
- phNxpEse_free(cpdu.pdata);
- phNxpEse_free(rpdu.pdata);
- return Void();
-}
-
-Return<::android::hardware::secure_element::V1_0::SecureElementStatus>
-VirtualISO::internalCloseChannel(uint8_t channelNumber) {
- ESESTATUS status = ESESTATUS_SUCCESS;
- SecureElementStatus sestatus = SecureElementStatus::FAILED;
- phNxpEse_7816_cpdu_t cpdu;
- phNxpEse_7816_rpdu_t rpdu;
-
- LOG(ERROR) << "internalCloseChannel Enter";
- LOG(INFO) << StringPrintf("mMaxChannelCount = %d, Closing Channel = %d",
- mMaxChannelCount, channelNumber);
- if ((int8_t)channelNumber < DEFAULT_BASIC_CHANNEL ||
- channelNumber >= mMaxChannelCount) {
- LOG(ERROR) << StringPrintf("invalid channel!!! %d", channelNumber);
- } else if (channelNumber > DEFAULT_BASIC_CHANNEL) {
- phNxpEse_memset(&cpdu, 0x00, sizeof(phNxpEse_7816_cpdu_t));
- phNxpEse_memset(&rpdu, 0x00, sizeof(phNxpEse_7816_rpdu_t));
- cpdu.cla = channelNumber; /* Class of instruction */
- cpdu.ins = 0x70; /* Instruction code */
- cpdu.p1 = 0x80; /* Instruction parameter 1 */
- cpdu.p2 = channelNumber; /* Instruction parameter 2 */
- cpdu.lc = 0x00;
- cpdu.le = 0x9000;
- status = phNxpEse_SetEndPoint_Cntxt(1);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- status = phNxpEse_7816_Transceive(&cpdu, &rpdu);
-
- if (status == ESESTATUS_SUCCESS) {
- if ((rpdu.sw1 == 0x90) && (rpdu.sw2 == 0x00)) {
- sestatus = SecureElementStatus::SUCCESS;
- }
- }
- status = phNxpEse_ResetEndPoint_Cntxt(1);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- if (mOpenedChannels[channelNumber]) {
- mOpenedChannels[channelNumber] = false;
- mOpenedchannelCount--;
- }
- }
- /*If there are no channels remaining close secureElement*/
- if (mOpenedchannelCount == 0) {
- sestatus = seHalDeInit();
- } else {
- sestatus = SecureElementStatus::SUCCESS;
- }
- return sestatus;
-}
-
-Return<::android::hardware::secure_element::V1_0::SecureElementStatus>
-VirtualISO::closeChannel(uint8_t channelNumber) {
- ESESTATUS status = ESESTATUS_SUCCESS;
- SecureElementStatus sestatus = SecureElementStatus::FAILED;
- phNxpEse_7816_cpdu_t cpdu;
- phNxpEse_7816_rpdu_t rpdu;
-
- LOG(INFO) << "Acquired the lock in VISO closeChannel";
- if ((int8_t)channelNumber < DEFAULT_BASIC_CHANNEL ||
- channelNumber >= mMaxChannelCount) {
- LOG(ERROR) << StringPrintf("invalid channel!!! %d", channelNumber);
- } else if (channelNumber > DEFAULT_BASIC_CHANNEL) {
- phNxpEse_memset(&cpdu, 0x00, sizeof(phNxpEse_7816_cpdu_t));
- phNxpEse_memset(&rpdu, 0x00, sizeof(phNxpEse_7816_rpdu_t));
- cpdu.cla = channelNumber; /* Class of instruction */
- cpdu.ins = 0x70; /* Instruction code */
- cpdu.p1 = 0x80; /* Instruction parameter 1 */
- cpdu.p2 = channelNumber; /* Instruction parameter 2 */
- cpdu.lc = 0x00;
- cpdu.le = 0x9000;
- status = phNxpEse_SetEndPoint_Cntxt(1);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- status = phNxpEse_7816_Transceive(&cpdu, &rpdu);
-
- if (status == ESESTATUS_SUCCESS) {
- if ((rpdu.sw1 == 0x90) && (rpdu.sw2 == 0x00)) {
- sestatus = SecureElementStatus::SUCCESS;
- }
- }
- status = phNxpEse_ResetEndPoint_Cntxt(1);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- if (mOpenedChannels[channelNumber]) {
- mOpenedChannels[channelNumber] = false;
- mOpenedchannelCount--;
- }
- }
-
- /*If there are no channels remaining close secureElement*/
- if (mOpenedchannelCount == 0) {
- sestatus = seHalDeInit();
- } else {
- sestatus = SecureElementStatus::SUCCESS;
- }
- return sestatus;
-}
-ESESTATUS VirtualISO::seHalInit() {
- ESESTATUS status = ESESTATUS_SUCCESS;
- ESESTATUS deInitStatus = ESESTATUS_SUCCESS;
- phNxpEse_initParams initParams;
- memset(&initParams, 0x00, sizeof(phNxpEse_initParams));
- initParams.initMode = ESE_MODE_NORMAL;
- initParams.mediaType = ESE_PROTOCOL_MEDIA_SPI_APDU_GATE;
-
- status = phNxpEse_open(initParams);
- if (ESESTATUS_SUCCESS == status || ESESTATUS_BUSY == status) {
- if (ESESTATUS_SUCCESS == phNxpEse_SetEndPoint_Cntxt(1) &&
- ESESTATUS_SUCCESS == phNxpEse_init(initParams)) {
- if (ESESTATUS_SUCCESS == phNxpEse_ResetEndPoint_Cntxt(1)) {
- mIsEseInitialized = true;
- LOG(INFO) << "VISO init complete!!!";
- return ESESTATUS_SUCCESS;
- }
- deInitStatus = phNxpEse_deInit();
- }
- phNxpEse_close(deInitStatus);
- mIsEseInitialized = false;
- }
- return status;
-}
-
-Return<::android::hardware::secure_element::V1_0::SecureElementStatus>
-VirtualISO::seHalDeInit() {
- ESESTATUS status = ESESTATUS_SUCCESS;
- ESESTATUS deInitStatus = ESESTATUS_SUCCESS;
- bool mIsDeInitDone = true;
- SecureElementStatus sestatus = SecureElementStatus::FAILED;
- status = phNxpEse_SetEndPoint_Cntxt(1);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- mIsDeInitDone = false;
- }
- deInitStatus = phNxpEse_deInit();
- if (ESESTATUS_SUCCESS != deInitStatus) mIsDeInitDone = false;
- status = phNxpEse_ResetEndPoint_Cntxt(1);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- mIsDeInitDone = false;
- }
- status = phNxpEse_close(deInitStatus);
- if (status == ESESTATUS_SUCCESS && mIsDeInitDone) {
- sestatus = SecureElementStatus::SUCCESS;
- ;
- } else {
- LOG(ERROR) << "seHalDeInit: Failed";
- }
- // Clear all the flags as SPI driver is closed.
- mIsEseInitialized = false;
- for (uint8_t xx = 0; xx < mMaxChannelCount; xx++) {
- mOpenedChannels[xx] = false;
- }
- mOpenedchannelCount = 0;
- return sestatus;
-}
-
-} // namespace implementation
-} // namespace V1_0
-} // namespace virtual_iso
-} // namespace nxp
-} // namespace vendor
diff --git a/snxxx/1.1/VirtualISO.h b/snxxx/1.1/VirtualISO.h
deleted file mode 100755
index 504a535..0000000
--- a/snxxx/1.1/VirtualISO.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2018-2019 NXP
- *
- * 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.
- *
- ******************************************************************************/
-#ifndef VENDOR_NXP_VIRTUAL_ISO_V1_0_SECUREELEMENT_H
-#define VENDOR_NXP_VIRTUAL_ISO_V1_0_SECUREELEMENT_H
-
-#include <android-base/stringprintf.h>
-#include <android/hardware/secure_element/1.0/types.h>
-#include <android/hardware/secure_element/1.1/ISecureElement.h>
-#include <hardware/hardware.h>
-#include <hidl/MQDescriptor.h>
-#include <hidl/Status.h>
-#include "phNxpEse_Api.h"
-
-namespace vendor {
-namespace nxp {
-namespace virtual_iso {
-namespace V1_0 {
-namespace implementation {
-
-using ::android::sp;
-using ::android::wp;
-using android::base::StringPrintf;
-using ::android::hardware::hidl_array;
-using ::android::hardware::hidl_death_recipient;
-using ::android::hardware::hidl_memory;
-using ::android::hardware::hidl_string;
-using ::android::hardware::hidl_vec;
-using ::android::hardware::Return;
-using ::android::hardware::Void;
-using ::android::hardware::secure_element::V1_0::LogicalChannelResponse;
-using ::android::hardware::secure_element::V1_0::SecureElementStatus;
-using ::android::hardware::secure_element::V1_1::ISecureElement;
-using ::android::hidl::base::V1_0::IBase;
-
-#ifndef MIN_APDU_LENGTH
-#define MIN_APDU_LENGTH 0x04
-#endif
-#ifndef DEFAULT_BASIC_CHANNEL
-#define DEFAULT_BASIC_CHANNEL 0x00
-#endif
-
-struct VirtualISO : public ISecureElement, public hidl_death_recipient {
- VirtualISO();
- Return<void> init(
- const sp<
- ::android::hardware::secure_element::V1_0::ISecureElementHalCallback>&
- clientCallback) override;
- Return<void> init_1_1(
- const sp<
- ::android::hardware::secure_element::V1_1::ISecureElementHalCallback>&
- clientCallback) override;
- Return<void> getAtr(getAtr_cb _hidl_cb) override;
- Return<bool> isCardPresent() override;
- Return<void> transmit(const hidl_vec<uint8_t>& data,
- transmit_cb _hidl_cb) override;
- Return<void> openLogicalChannel(const hidl_vec<uint8_t>& aid, uint8_t p2,
- openLogicalChannel_cb _hidl_cb) override;
- Return<void> openBasicChannel(const hidl_vec<uint8_t>& aid, uint8_t p2,
- openBasicChannel_cb _hidl_cb) override;
- Return<SecureElementStatus> closeChannel(uint8_t channelNumber) override;
-
- virtual void serviceDied(uint64_t /*cookie*/, const wp<IBase>& /*who*/) {
- // TODO: Implement graceful closure, to close ongoing tx-rx and deinit
- // T=1 stack
- // close(0);
- }
-
- private:
- uint8_t mMaxChannelCount;
- uint8_t mOpenedchannelCount = 0;
- bool mIsEseInitialized = false;
- static std::vector<bool> mOpenedChannels;
- static sp<
- ::android::hardware::secure_element::V1_0::ISecureElementHalCallback>
- mCallbackV1_0;
- static sp<
- ::android::hardware::secure_element::V1_1::ISecureElementHalCallback>
- mCallbackV1_1;
- Return<SecureElementStatus> seHalDeInit();
- ESESTATUS seHalInit();
- Return<SecureElementStatus> internalCloseChannel(uint8_t channelNumber);
-};
-
-} // namespace implementation
-} // namespace V1_0
-} // namespace virtual_iso
-} // namespace nxp
-} // namespace vendor
-
-#endif // VENDOR_NXP_VIRTUAL_ISO_V1_0_SECUREELEMENT_H
diff --git a/snxxx/1.1/android.hardware.secure_element_snxxx@1.1-service.rc b/snxxx/1.1/android.hardware.secure_element_snxxx@1.1-service.rc
deleted file mode 100755
index 1a29769..0000000
--- a/snxxx/1.1/android.hardware.secure_element_snxxx@1.1-service.rc
+++ /dev/null
@@ -1,4 +0,0 @@
-service vendor.secure_element_hal_service /vendor/bin/hw/android.hardware.secure_element_snxxx@1.1-service
- class hal
- user secure_element
- group secure_element
diff --git a/snxxx/1.2/NxpEseService.cpp b/snxxx/1.2/NxpEseService.cpp
deleted file mode 100755
index 7e9559a..0000000
--- a/snxxx/1.2/NxpEseService.cpp
+++ /dev/null
@@ -1,145 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2018-2021 NXP
- *
- * 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.
- *
- ******************************************************************************/
-#define LOG_TAG "nxpese@1.2-service"
-#include <android/hardware/secure_element/1.2/ISecureElement.h>
-#include <log/log.h>
-#include <vendor/nxp/nxpese/1.0/INxpEse.h>
-#include "VirtualISO.h"
-
-#include <hidl/LegacySupport.h>
-#include <string.h>
-#include <regex>
-#include "NxpEse.h"
-#include "SecureElement.h"
-#ifdef NXP_BOOTTIME_UPDATE
-#include "eSEClient.h"
-#endif
-
-// Generated HIDL files
-using android::OK;
-using android::base::StringPrintf;
-using android::hardware::configureRpcThreadpool;
-using android::hardware::defaultPassthroughServiceImplementation;
-using android::hardware::joinRpcThreadpool;
-using android::hardware::registerPassthroughServiceImplementation;
-using android::hardware::secure_element::V1_2::ISecureElement;
-using android::hardware::secure_element::V1_2::implementation::SecureElement;
-using vendor::nxp::nxpese::V1_0::INxpEse;
-using vendor::nxp::nxpese::V1_0::implementation::NxpEse;
-using vendor::nxp::virtual_iso::V1_0::implementation::VirtualISO;
-
-using android::OK;
-using android::sp;
-using android::status_t;
-
-int main() {
- status_t status;
-
- char terminalID[5] = "eSE1";
- const char* SEterminal = "eSEx";
- bool ret = false;
-
- android::sp<ISecureElement> se_service = nullptr;
- android::sp<INxpEse> nxp_se_service = nullptr;
- android::sp<ISecureElement> virtual_iso_service = nullptr;
-
- ALOGI("Secure Element HAL Service 1.2 is starting.");
- try {
- se_service = new SecureElement();
- if (se_service == nullptr) {
- ALOGE("Can not create an instance of Secure Element HAL Iface, exiting.");
- goto shutdown;
- }
- configureRpcThreadpool(1, true /*callerWillJoin*/);
-
-#ifdef NXP_BOOTTIME_UPDATE
- checkEseClientUpdate();
- ret = geteSETerminalId(terminalID);
-#else
- ret = true;
-#endif
- ALOGI("Terminal val = %s", terminalID);
- if ((ret) && (strncmp(SEterminal, terminalID, 3) == 0)) {
- ALOGI("Terminal ID found");
- status = se_service->registerAsService(terminalID);
-
- if (status != OK) {
- ALOGE("Could not register service for Secure Element HAL Iface (%d).",
- status);
- goto shutdown;
- }
- ALOGI("Secure Element Service is ready");
-
- ALOGI("NXP Secure Element Extn Service 1.0 is starting.");
- nxp_se_service = new NxpEse();
- if (nxp_se_service == nullptr) {
- ALOGE(
- "Can not create an instance of NXP Secure Element Extn "
- "Iface,exiting.");
- goto shutdown;
- }
- status = nxp_se_service->registerAsService();
- if (status != OK) {
- ALOGE(
- "Could not register service for Power Secure Element Extn Iface "
- "(%d).",
- status);
- goto shutdown;
- }
- ALOGI("Secure Element Service is ready");
- }
-
- ALOGI("Virtual ISO HAL Service 1.0 is starting.");
- virtual_iso_service = new VirtualISO();
- if (virtual_iso_service == nullptr) {
- ALOGE("Can not create an instance of Virtual ISO HAL Iface, exiting.");
- goto shutdown;
- }
-#ifdef NXP_BOOTTIME_UPDATE
- ret = geteUICCTerminalId(terminalID);
-#else
- strncpy(terminalID, "eSE2", 4);
- ret = true;
-#endif
- if ((ret) && (strncmp(SEterminal, terminalID, 3) == 0)) {
- status = virtual_iso_service->registerAsService(terminalID);
- if (status != OK) {
- ALOGE("Could not register service for Virtual ISO HAL Iface (%d).",
- status);
- } else {
- ALOGI("Virtual ISO: Secure Element Service is ready");
- }
- }
-
-#ifdef NXP_BOOTTIME_UPDATE
- perform_eSEClientUpdate();
-#endif
- joinRpcThreadpool();
- } catch (const std::length_error& e) {
- ALOGE("Length Exception occurred = %s ", e.what());
- } catch (const std::__1::ios_base::failure& e) {
- ALOGE("ios failure Exception occurred = %s ", e.what());
- } catch (std::__1::regex_error& e) {
- ALOGE("Regex Exception occurred = %s ", e.what());
- }
-// Should not pass this line
-shutdown:
- // In normal operation, we don't expect the thread pool to exit
- ALOGE("Secure Element Service is shutting down");
- return 1;
-}
diff --git a/snxxx/1.2/OsuHal/inc/OsuHalExtn.h b/snxxx/1.2/OsuHal/inc/OsuHalExtn.h
deleted file mode 100644
index 6630d7a..0000000
--- a/snxxx/1.2/OsuHal/inc/OsuHalExtn.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2020 NXP
- *
- * 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 <android-base/logging.h>
-#include <android-base/stringprintf.h>
-#include <hardware/hardware.h>
-#include <hidl/MQDescriptor.h>
-#include <hidl/Status.h>
-#include <string.h>
-#include "phNxpEse_Api.h"
-
-using ::android::hardware::hidl_vec;
-#define OSU_PROP_CLA 0x80
-#define OSU_PROP_INS 0xDF
-#define OSU_PROP_RST_P1 0xEF
-
-#define ISO7816_BASIC_CHANNEL 0x00
-#define ISO7816_CLA_OFFSET 0
-#define ISO7816_INS_OFFSET 1
-#define ISO7816_P1_OFFSET 2
-#define ISO7816_P2_OFFSET 3
-#define ISO7816_LC_OFFSET 4
-#define ISO7816_EXTENDED_LC_VALUE 0
-#define ISO7816_SHORT_APDU_HEADER 5
-#define ISO7816_EXTENDED_APDU_HEADER 7
-#define ISO7816_CLA_CHN_MASK 0x03
-#define IS_OSU_MODE(...) (OsuHalExtn::getInstance().isOsuMode(__VA_ARGS__))
-
-class OsuHalExtn {
- public:
- typedef enum {
- NON_OSU_MODE, // Normal Mode : All HAL APIs allowed
- OSU_PROP_MODE, // OSU mode : Only OSU JAR command allowed
- OSU_GP_MODE, // OSU Mode : GP command in the OSU mode
- OSU_RST_MODE, // OSU mode : Proprietary HARD reset
- OSU_BLOCKED_MODE, // OSU mode : Command not allowed return error
- } OsuApduMode;
-
- typedef enum {
- INIT,
- OPENBASIC,
- OPENLOGICAL,
- TRANSMIT,
- CLOSE,
- RESET,
- } SecureElementAPI;
-
- static OsuHalExtn& getInstance();
-
- OsuApduMode isOsuMode(const hidl_vec<uint8_t>& evt, uint8_t type,
- phNxpEse_data* pCmdData = nullptr);
- bool isOsuMode(uint8_t type, uint8_t channel = 0xFF);
- virtual ~OsuHalExtn();
- OsuHalExtn() noexcept;
- void checkAndUpdateOsuMode();
- unsigned long int getOSUMaxWtxCount();
-
- private:
- bool isAppOSUMode;
- bool isJcopOSUMode;
- static const hidl_vec<uint8_t> osu_aid[10];
- OsuApduMode checkTransmit(uint8_t* input, size_t length, uint32_t* outLength);
- bool isOsuMode();
-};
diff --git a/snxxx/1.2/OsuHal/src/OsuHalExtn.cpp b/snxxx/1.2/OsuHal/src/OsuHalExtn.cpp
deleted file mode 100644
index 2eaec96..0000000
--- a/snxxx/1.2/OsuHal/src/OsuHalExtn.cpp
+++ /dev/null
@@ -1,273 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2020-2021 NXP
- *
- * 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.
- *
- ******************************************************************************/
-#include "OsuHalExtn.h"
-#include <ese_config.h>
-
-#define LOG_TAG "OsuHalExtn"
-#include <log/log.h>
-
-#define DEFAULT_MAX_WTX_COUNT 60
-
-const static hidl_vec<uint8_t> OSU_AID = {0x4F, 0x70, 0x80, 0x13, 0x04,
- 0xDE, 0xAD, 0xBE, 0xEF};
-const static uint8_t defaultSelectAid[] = {0x00, 0xA4, 0x04, 0x00, 0x00};
-
-/*******************************************************************************
-**
-** Function: OsuHalExtn::isOsuMode
-**
-** Description: Check, update and return current mode for below SE HAL API
-** requests openBasicChannel() and transmit()
-**
-** Returns: OsuApduMode(NON_OSU_MODE, OSU_PROP_MODE, OSU_RST_MODE,
-** OSU_BLOCKED_MODE, OSU_GP_MODE)
-**
-*******************************************************************************/
-OsuHalExtn::OsuApduMode OsuHalExtn::isOsuMode(const hidl_vec<uint8_t>& evt,
- uint8_t type,
- phNxpEse_data* pCmdData) {
- OsuApduMode osuSubState = (isAppOSUMode ? OSU_PROP_MODE : NON_OSU_MODE);
-
- switch (type) {
- case OPENBASIC:
- /*
- * update & return OSU_PROP_MODE if OpenBasicChannel AID request matches
- * OSU_AID
- */
- if (!memcmp(&evt[0], &OSU_AID[0], OSU_AID.size())) {
- isAppOSUMode = true;
- osuSubState = OSU_PROP_MODE;
- ALOGD("Dedicated mode is set !!!!!!!!!!!!!!!!!");
- } else if (isOsuMode()) {
- // OpenBasic channel requests with non OSU_AID are not allowed/blocked
- osuSubState = OSU_BLOCKED_MODE;
- ALOGE("Non OSU AID Not allowed");
- }
- break;
- case TRANSMIT:
- memcpy(pCmdData->p_data, evt.data(), evt.size());
- if (isOsuMode()) {
- /*
- * Process transmit request(unwrap APDU, proprietary actions) in OSU
- * mode
- */
- osuSubState =
- checkTransmit(pCmdData->p_data, evt.size(), &pCmdData->len);
- } else {
- pCmdData->len = evt.size();
- osuSubState = NON_OSU_MODE;
- }
- break;
- }
- return osuSubState;
-}
-
-/*******************************************************************************
-**
-** Function: OsuHalExtn::isOsuMode
-**
-** Description: Check, update and return current mode for below SE HAL API
-** requests init(), openLogicalChannel() and closeChannel()
-**
-** Returns: true(OSU)/false(normal)
-**
-*******************************************************************************/
-bool OsuHalExtn::isOsuMode(uint8_t type, uint8_t channel) {
- switch (type) {
- case INIT:
- checkAndUpdateOsuMode();
- break;
- case OPENLOGICAL:
- // No action, only return current mode
- break;
- case CLOSE:
- /*
- * If in OSU mode close basic channel is called
- * clear osu APP and update JCOP mode
- */
- if (channel == ISO7816_BASIC_CHANNEL && isOsuMode()) {
- if (phNxpEse_doResetProtection(false) != ESESTATUS_SUCCESS) {
- ALOGE("Disable Reset Protection Failed");
- }
- phNxpEse_setWtxCountLimit(RESET_APP_WTX_COUNT);
- isAppOSUMode = false;
- ALOGD("Setting to normal mode!!!");
- }
- break;
- }
- return isOsuMode();
-}
-
-/*******************************************************************************
-**
-** Function: OsuHalExtn::checkAndUpdateOsuMode
-**
-** Description: Check and update current JCOP mode OSU/Normal
-**
-** Returns: None
-**
-*******************************************************************************/
-void OsuHalExtn::checkAndUpdateOsuMode() {
- isJcopOSUMode = (phNxpEse_GetOsMode() == OSU_MODE);
-}
-
-/*******************************************************************************
-**
-** Function: OsuHalExtn::getInstance
-**
-** Description: get class singleton object
-**
-** Returns: OsuHalExtn
-**
-*******************************************************************************/
-OsuHalExtn& OsuHalExtn::getInstance() {
- static OsuHalExtn manager;
- return manager;
-}
-
-/*******************************************************************************
-**
-** Function: OsuHalExtn::OsuHalExtn()
-**
-** Description: class constructor
-**
-** Returns: none
-**
-*******************************************************************************/
-OsuHalExtn::OsuHalExtn() noexcept {
- isAppOSUMode = false;
- isJcopOSUMode = false;
-}
-
-/*******************************************************************************
-**
-** Function: OsuHalExtn::~OsuHalExtn()
-**
-** Description: class destructor
-**
-** Returns: none
-**
-*******************************************************************************/
-OsuHalExtn::~OsuHalExtn() {}
-
-/*******************************************************************************
-**
-** Function: OsuHalExtn::isOsuMode()
-**
-** Description: Returns current JCOP mode
-**
-** Returns: true(OSU)/false(Normal)
-**
-*******************************************************************************/
-bool OsuHalExtn::isOsuMode() { return (isAppOSUMode || isJcopOSUMode); }
-
-/*******************************************************************************
-**
-** Function: OsuHalExtn::checkTransmit
-**
-** Description: Process transmit request in OSU mode
-** 1) Unwrap proprietary APDU's to native commands
-** 2) Block unexpected command request in OSU Mode
-** 3) Perform hard reset on receiving proprietary reset APDU
-**
-** Returns: OsuApduMode
-**
-*******************************************************************************/
-OsuHalExtn::OsuApduMode OsuHalExtn::checkTransmit(uint8_t* input, size_t length,
- uint32_t* outLength) {
- OsuHalExtn::OsuApduMode halMode = NON_OSU_MODE;
-
- /*
- * 1) Transmit request on logical channels(ISO7816_CLA_CHN_MASK)shall be
- * blocked in OSU mode
- * 2) Empty/Default GP card manger select from OMAPI shall
- * be blocked in OSU Mode
- */
- if (((*input & ISO7816_CLA_CHN_MASK) != ISO7816_BASIC_CHANNEL) ||
- (isJcopOSUMode && (length == ISO7816_SHORT_APDU_HEADER &&
- !memcmp(input, defaultSelectAid, length)))) {
- phNxpEse_free(input);
- input = nullptr;
- halMode = OSU_BLOCKED_MODE;
- } else if ((*input == OSU_PROP_CLA) &&
- (*(input + ISO7816_INS_OFFSET) == OSU_PROP_INS) &&
- (*(input + ISO7816_P1_OFFSET) != OSU_PROP_RST_P1)) {
- /*
- * 1) Unwrap GP command to native commands
- * 2) Check APDU type short/extended before unwrapping
- */
- ALOGD("checkTransmit in OSU_PROP_MODE");
- if (*(input + ISO7816_LC_OFFSET) != 0) {
- if (length > ISO7816_SHORT_APDU_HEADER) {
- *outLength = length - ISO7816_SHORT_APDU_HEADER;
- memcpy(input, input + ISO7816_SHORT_APDU_HEADER,
- length - ISO7816_SHORT_APDU_HEADER);
- } else {
- *outLength = 0;
- ALOGE("checkTransmit input data length is incorrect");
- }
- } else {
- if (length > ISO7816_EXTENDED_APDU_HEADER) {
- *outLength = length - ISO7816_EXTENDED_APDU_HEADER;
- memcpy(input, input + ISO7816_EXTENDED_APDU_HEADER,
- length - ISO7816_EXTENDED_APDU_HEADER);
- } else {
- *outLength = 0;
- ALOGE("checkTransmit input data length is incorrect");
- }
- }
- halMode = OSU_PROP_MODE;
- } else if ((*input == OSU_PROP_CLA) &&
- (*(input + ISO7816_INS_OFFSET) == OSU_PROP_INS) &&
- (*(input + ISO7816_P1_OFFSET) == OSU_PROP_RST_P1)) {
- // eSE hard reset on receiving proprietary reset APDU
- ALOGD("checkTransmit in OSU_PROP_RST_INS");
- if (phNxpEse_SetEndPoint_Cntxt(0) != ESESTATUS_SUCCESS) {
- ALOGE("phNxpEse_SetEndPoint_Cntxt failed!!!");
- }
- phNxpEse_resetJcopUpdate();
- if (phNxpEse_ResetEndPoint_Cntxt(0) != ESESTATUS_SUCCESS) {
- ALOGE("phNxpEse_ResetEndPoint_Cntxt failed!!!");
- }
- // Update mode after eSE reset
- checkAndUpdateOsuMode();
- phNxpEse_free(input);
- input = nullptr;
- halMode = OSU_RST_MODE;
- } else {
- // Process remaining OSU commands
- *outLength = length;
- halMode = OSU_GP_MODE;
- }
- return halMode;
-}
-
-/*******************************************************************************
-**
-** Function: OsuHalExtn::getOSUMaxWtxCount
-**
-** Description: Read OSU_MAX_WTX_COUNT from config file allowed when in OSU
-** mode
-**
-** Returns: Return maximum WTX count
-**
-*******************************************************************************/
-unsigned long int OsuHalExtn::getOSUMaxWtxCount() {
- return EseConfig::getUnsigned(NAME_NXP_OSU_MAX_WTX_COUNT,
- DEFAULT_MAX_WTX_COUNT);
-}
\ No newline at end of file
diff --git a/snxxx/1.2/SecureElement.cpp b/snxxx/1.2/SecureElement.cpp
deleted file mode 100755
index 4c6756d..0000000
--- a/snxxx/1.2/SecureElement.cpp
+++ /dev/null
@@ -1,832 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2018-2021 NXP
- *
- * 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.
- *
- ******************************************************************************/
-#include "SecureElement.h"
-#include <android-base/logging.h>
-#include <android-base/stringprintf.h>
-#include "NxpEse.h"
-#include "hal_nxpese.h"
-#include "phNxpEse_Apdu_Api.h"
-#include "phNxpEse_Api.h"
-#ifdef NXP_BOOTTIME_UPDATE
-#include "eSEClient.h"
-#endif
-/* Mutex to synchronize multiple transceive */
-
-namespace android {
-namespace hardware {
-namespace secure_element {
-namespace V1_2 {
-namespace implementation {
-
-#define LOG_TAG "nxpese@1.2-service"
-#define DEFAULT_BASIC_CHANNEL 0x00
-#define INVALID_LEN_SW1 0x64
-#define INVALID_LEN_SW2 0xFF
-
-typedef struct gsTransceiveBuffer {
- phNxpEse_data cmdData;
- phNxpEse_data rspData;
- hidl_vec<uint8_t>* pRspDataBuff;
-} sTransceiveBuffer_t;
-
-static sTransceiveBuffer_t gsTxRxBuffer;
-static hidl_vec<uint8_t> gsRspDataBuff(256);
-sp<V1_0::ISecureElementHalCallback> SecureElement::mCallbackV1_0 = nullptr;
-sp<V1_1::ISecureElementHalCallback> SecureElement::mCallbackV1_1 = nullptr;
-std::vector<bool> SecureElement::mOpenedChannels;
-using vendor::nxp::nxpese::V1_0::implementation::NxpEse;
-SecureElement::SecureElement()
- : mMaxChannelCount(0), mOpenedchannelCount(0), mIsEseInitialized(false) {}
-
-void SecureElement::NotifySeWaitExtension(phNxpEse_wtxState state) {
- if (state == WTX_ONGOING) {
- LOG(INFO) << "SecureElement::WTX ongoing";
- } else if (state == WTX_END) {
- LOG(INFO) << "SecureElement::WTX ended";
- }
-}
-
-Return<void> SecureElement::init(
- const sp<
- ::android::hardware::secure_element::V1_0::ISecureElementHalCallback>&
- clientCallback) {
- ESESTATUS status = ESESTATUS_SUCCESS;
- bool mIsInitDone = false;
- phNxpEse_initParams initParams;
- gsTxRxBuffer.pRspDataBuff = &gsRspDataBuff;
- memset(&initParams, 0x00, sizeof(phNxpEse_initParams));
- initParams.initMode = ESE_MODE_NORMAL;
- initParams.mediaType = ESE_PROTOCOL_MEDIA_SPI_APDU_GATE;
- initParams.fPtr_WtxNtf = SecureElement::NotifySeWaitExtension;
-
- if (clientCallback == nullptr) {
- return Void();
- } else {
- clientCallback->linkToDeath(this, 0 /*cookie*/);
- }
- LOG(INFO) << "SecureElement::init called here";
-#ifdef NXP_BOOTTIME_UPDATE
- if (ese_update != ESE_UPDATE_COMPLETED) {
- mCallbackV1_0 = clientCallback;
- clientCallback->onStateChange(false);
- LOG(INFO) << "ESE JCOP Download in progress";
- NxpEse::setSeCallBack(clientCallback);
- return Void();
- // Register
- }
-#endif
- if (mIsEseInitialized) {
- clientCallback->onStateChange(true);
- return Void();
- }
-
- phNxpEse_setWtxCountLimit(OsuHalExtn::getInstance().getOSUMaxWtxCount());
- status = phNxpEse_open(initParams);
- if (status == ESESTATUS_SUCCESS || ESESTATUS_BUSY == status) {
- ESESTATUS deInitStatus = ESESTATUS_SUCCESS;
- if (ESESTATUS_SUCCESS == phNxpEse_SetEndPoint_Cntxt(0) &&
- ESESTATUS_SUCCESS == phNxpEse_init(initParams)) {
- /*update OS mode during first init*/
- IS_OSU_MODE(OsuHalExtn::getInstance().INIT, 0);
-
- if (ESESTATUS_SUCCESS == phNxpEse_ResetEndPoint_Cntxt(0)) {
- LOG(INFO) << "ESE SPI init complete!!!";
- mIsInitDone = true;
- }
- deInitStatus = phNxpEse_deInit();
- if (ESESTATUS_SUCCESS != deInitStatus) mIsInitDone = false;
- }
- status = phNxpEse_close(deInitStatus);
- }
- phNxpEse_setWtxCountLimit(RESET_APP_WTX_COUNT);
- if (status == ESESTATUS_SUCCESS && mIsInitDone) {
- mMaxChannelCount = (GET_CHIP_OS_VERSION() >= OS_VERSION_6_2) ? 0x0C : 0x04;
- mOpenedChannels.resize(mMaxChannelCount, false);
- clientCallback->onStateChange(true);
- mCallbackV1_0 = clientCallback;
- } else {
- LOG(ERROR) << "eSE-Hal Init failed";
- clientCallback->onStateChange(false);
- }
- return Void();
-}
-
-Return<void> SecureElement::init_1_1(
- const sp<
- ::android::hardware::secure_element::V1_1::ISecureElementHalCallback>&
- clientCallback) {
- ESESTATUS status = ESESTATUS_SUCCESS;
- bool mIsInitDone = false;
- phNxpEse_initParams initParams;
- gsTxRxBuffer.pRspDataBuff = &gsRspDataBuff;
- memset(&initParams, 0x00, sizeof(phNxpEse_initParams));
- initParams.initMode = ESE_MODE_NORMAL;
- initParams.mediaType = ESE_PROTOCOL_MEDIA_SPI_APDU_GATE;
- initParams.fPtr_WtxNtf = SecureElement::NotifySeWaitExtension;
- if (clientCallback == nullptr) {
- return Void();
- } else {
- clientCallback->linkToDeath(this, 0 /*cookie*/);
- }
- LOG(INFO) << "SecureElement::init called here";
-#ifdef NXP_BOOTTIME_UPDATE
- if (ese_update != ESE_UPDATE_COMPLETED) {
- mCallbackV1_1 = clientCallback;
- clientCallback->onStateChange_1_1(false, "NXP SE update going on");
- LOG(INFO) << "ESE JCOP Download in progress";
- NxpEse::setSeCallBack_1_1(clientCallback);
- return Void();
- // Register
- }
-#endif
- if (mIsEseInitialized) {
- clientCallback->onStateChange_1_1(true, "NXP SE HAL init ok");
- return Void();
- }
-
- phNxpEse_setWtxCountLimit(OsuHalExtn::getInstance().getOSUMaxWtxCount());
- status = phNxpEse_open(initParams);
- if (status == ESESTATUS_SUCCESS || ESESTATUS_BUSY == status) {
- ESESTATUS deInitStatus = ESESTATUS_SUCCESS;
- if (ESESTATUS_SUCCESS == phNxpEse_SetEndPoint_Cntxt(0) &&
- ESESTATUS_SUCCESS == phNxpEse_init(initParams)) {
- /*update OS mode during first init*/
- IS_OSU_MODE(OsuHalExtn::getInstance().INIT, 0);
-
- if (ESESTATUS_SUCCESS == phNxpEse_ResetEndPoint_Cntxt(0)) {
- LOG(INFO) << "ESE SPI init complete!!!";
- mIsInitDone = true;
- }
- deInitStatus = phNxpEse_deInit();
- if (ESESTATUS_SUCCESS != deInitStatus) mIsInitDone = false;
- }
- status = phNxpEse_close(deInitStatus);
- }
- phNxpEse_setWtxCountLimit(RESET_APP_WTX_COUNT);
- if (status == ESESTATUS_SUCCESS && mIsInitDone) {
- mMaxChannelCount = (GET_CHIP_OS_VERSION() >= OS_VERSION_6_2) ? 0x0C : 0x04;
- mOpenedChannels.resize(mMaxChannelCount, false);
- clientCallback->onStateChange_1_1(true, "NXP SE HAL init ok");
- mCallbackV1_1 = clientCallback;
- } else {
- LOG(ERROR) << "eSE-Hal Init failed";
- clientCallback->onStateChange_1_1(false, "NXP SE HAL init failed");
- }
- return Void();
-}
-
-Return<void> SecureElement::getAtr(getAtr_cb _hidl_cb) {
- AutoMutex guard(seHalLock);
- LOG(ERROR) << "Processing ATR.....";
- phNxpEse_data atrData;
- hidl_vec<uint8_t> response;
- ESESTATUS status = ESESTATUS_FAILED;
- bool mIsSeHalInitDone = false;
-
- if (IS_OSU_MODE(OsuHalExtn::getInstance().OPENLOGICAL) >=
- OsuHalExtn::getInstance().OSU_PROP_MODE) {
- LOG(ERROR) << "%s: Not allowed in dedicated mode!!!" << __func__;
- _hidl_cb(response);
- return Void();
- }
-
- if (!mIsEseInitialized) {
- ESESTATUS status = seHalInit();
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "%s: seHalInit Failed!!!" << __func__;
- _hidl_cb(response); /*Return with empty Vector*/
- return Void();
- } else {
- mIsSeHalInitDone = true;
- }
- }
- status = phNxpEse_SetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "Endpoint set failed";
- }
- status = phNxpEse_getAtr(&atrData);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_getAtr failed";
- _hidl_cb(response); /*Return with empty Vector*/
- return Void();
- } else {
- response.resize(atrData.len);
- memcpy(&response[0], atrData.p_data, atrData.len);
- }
-
- status = phNxpEse_ResetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "Endpoint set failed";
- }
-
- if (status != ESESTATUS_SUCCESS) {
- LOG(INFO) << StringPrintf("ATR Data[BytebyByte]=Look below for %d bytes",
- atrData.len);
- for (auto i = response.begin(); i != response.end(); ++i)
- LOG(INFO) << StringPrintf("0x%x\t", *i);
- }
-
- _hidl_cb(response);
- if (atrData.p_data != NULL) {
- phNxpEse_free(atrData.p_data);
- }
- if (mIsSeHalInitDone) {
- if (SecureElementStatus::SUCCESS != seHalDeInit())
- LOG(ERROR) << "phNxpEse_getAtr seHalDeInit failed";
- mIsEseInitialized = false;
- mIsSeHalInitDone = false;
- }
- return Void();
-}
-
-Return<bool> SecureElement::isCardPresent() { return true; }
-
-Return<void> SecureElement::transmit(const hidl_vec<uint8_t>& data,
- transmit_cb _hidl_cb) {
- AutoMutex guard(seHalLock);
- ESESTATUS status = ESESTATUS_FAILED;
- hidl_vec<uint8_t> result;
- phNxpEse_memset(&gsTxRxBuffer.cmdData, 0x00, sizeof(phNxpEse_data));
- phNxpEse_memset(&gsTxRxBuffer.rspData, 0x00, sizeof(phNxpEse_data));
- gsTxRxBuffer.cmdData.len = (uint32_t)data.size();
- gsTxRxBuffer.cmdData.p_data =
- (uint8_t*)phNxpEse_memalloc(data.size() * sizeof(uint8_t));
- if (NULL == gsTxRxBuffer.cmdData.p_data) {
- LOG(ERROR) << "transmit failed to allocate the Memory!!!";
- /*Return empty hidl_vec*/
- _hidl_cb(result);
- return Void();
- }
- OsuHalExtn::OsuApduMode mode = IS_OSU_MODE(
- data, OsuHalExtn::getInstance().TRANSMIT, &gsTxRxBuffer.cmdData);
- if (mode == OsuHalExtn::getInstance().OSU_BLOCKED_MODE) {
- LOG(ERROR) << "Not allowed in dedicated mode!!!";
- /*Return empty hidl_vec*/
- _hidl_cb(result);
- return Void();
- } else if (mode == OsuHalExtn::getInstance().OSU_RST_MODE) {
- uint8_t sw[2] = {0x90, 0x00};
- result.resize(sizeof(sw));
- memcpy(&result[0], sw, sizeof(sw));
- _hidl_cb(result);
- return Void();
- } else {
- // continue with normal processing
- }
- // memcpy(gsTxRxBuffer.cmdData.p_data, data.data(), gsTxRxBuffer.cmdData.len);
- LOG(INFO) << "Acquired lock for SPI";
- status = phNxpEse_SetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- status = phNxpEse_Transceive(&gsTxRxBuffer.cmdData, &gsTxRxBuffer.rspData);
-
- if (status == ESESTATUS_SUCCESS) {
- result.resize(gsTxRxBuffer.rspData.len);
- memcpy(&result[0], gsTxRxBuffer.rspData.p_data, gsTxRxBuffer.rspData.len);
- } else if (status == ESESTATUS_INVALID_RECEIVE_LENGTH) {
- uint8_t respBuf[] = {INVALID_LEN_SW1, INVALID_LEN_SW2};
- result.resize(sizeof(respBuf));
- memcpy(&result[0], respBuf, sizeof(respBuf));
- } else {
- LOG(ERROR) << "transmit failed!!!";
- }
- status = phNxpEse_ResetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
-
- _hidl_cb(result);
- if (NULL != gsTxRxBuffer.cmdData.p_data) {
- phNxpEse_free(gsTxRxBuffer.cmdData.p_data);
- gsTxRxBuffer.cmdData.p_data = NULL;
- }
- if (NULL != gsTxRxBuffer.rspData.p_data) {
- phNxpEse_free(gsTxRxBuffer.rspData.p_data);
- gsTxRxBuffer.rspData.p_data = NULL;
- }
-
- return Void();
-}
-
-Return<void> SecureElement::openLogicalChannel(const hidl_vec<uint8_t>& aid,
- uint8_t p2,
- openLogicalChannel_cb _hidl_cb) {
- AutoMutex guard(seHalLock);
- hidl_vec<uint8_t> manageChannelCommand = {0x00, 0x70, 0x00, 0x00, 0x01};
-
- LogicalChannelResponse resApduBuff;
- resApduBuff.channelNumber = 0xff;
- memset(&resApduBuff, 0x00, sizeof(resApduBuff));
-
- LOG(INFO) << "Acquired the lock from SPI openLogicalChannel";
-
- if (IS_OSU_MODE(OsuHalExtn::getInstance().OPENLOGICAL) >=
- OsuHalExtn::getInstance().OSU_PROP_MODE) {
- LOG(ERROR) << "%s: Not allowed in dedicated mode!!!" << __func__;
- _hidl_cb(resApduBuff, SecureElementStatus::IOERROR);
- return Void();
- }
- if (!mIsEseInitialized) {
- ESESTATUS status = seHalInit();
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "%s: seHalInit Failed!!!" << __func__;
- _hidl_cb(resApduBuff, SecureElementStatus::IOERROR);
- return Void();
- }
- }
-
- if (mOpenedChannels.size() == 0x00) {
- mMaxChannelCount = (GET_CHIP_OS_VERSION() >= OS_VERSION_6_2) ? 0x0C : 0x04;
- mOpenedChannels.resize(mMaxChannelCount, false);
- }
-
- SecureElementStatus sestatus = SecureElementStatus::IOERROR;
- ESESTATUS status = ESESTATUS_FAILED;
- phNxpEse_data cmdApdu;
- phNxpEse_data rspApdu;
-
- phNxpEse_memset(&cmdApdu, 0x00, sizeof(phNxpEse_data));
-
- phNxpEse_memset(&rspApdu, 0x00, sizeof(phNxpEse_data));
-
- cmdApdu.len = (uint32_t)manageChannelCommand.size();
- cmdApdu.p_data = (uint8_t*)phNxpEse_memalloc(manageChannelCommand.size() *
- sizeof(uint8_t));
- memcpy(cmdApdu.p_data, manageChannelCommand.data(), cmdApdu.len);
-
- status = phNxpEse_SetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- status = phNxpEse_Transceive(&cmdApdu, &rspApdu);
- if (status != ESESTATUS_SUCCESS) {
- resApduBuff.channelNumber = 0xff;
- } else if (rspApdu.p_data[rspApdu.len - 2] == 0x6A &&
- rspApdu.p_data[rspApdu.len - 1] == 0x81) {
- resApduBuff.channelNumber = 0xff;
- sestatus = SecureElementStatus::CHANNEL_NOT_AVAILABLE;
- } else if (rspApdu.p_data[rspApdu.len - 2] == 0x90 &&
- rspApdu.p_data[rspApdu.len - 1] == 0x00) {
- resApduBuff.channelNumber = rspApdu.p_data[0];
- mOpenedchannelCount++;
- mOpenedChannels[resApduBuff.channelNumber] = true;
- sestatus = SecureElementStatus::SUCCESS;
- } else if (((rspApdu.p_data[rspApdu.len - 2] == 0x6E) ||
- (rspApdu.p_data[rspApdu.len - 2] == 0x6D)) &&
- rspApdu.p_data[rspApdu.len - 1] == 0x00) {
- sestatus = SecureElementStatus::UNSUPPORTED_OPERATION;
- }
- /*Free the allocations*/
- phNxpEse_free(cmdApdu.p_data);
- phNxpEse_free(rspApdu.p_data);
-
- if (sestatus != SecureElementStatus::SUCCESS) {
- if (mOpenedchannelCount == 0) {
- SecureElementStatus deInitStatus = seHalDeInit();
- if (deInitStatus != SecureElementStatus::SUCCESS) {
- LOG(INFO) << "seDeInit Failed";
- }
- }
- /*If manageChanle is failed in any of above cases
- send the callback and return*/
- status = phNxpEse_ResetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- _hidl_cb(resApduBuff, sestatus);
- return Void();
- }
- LOG(INFO) << "openLogicalChannel Sending selectApdu";
- sestatus = SecureElementStatus::IOERROR;
- status = ESESTATUS_FAILED;
-
- phNxpEse_7816_cpdu_t cpdu;
- phNxpEse_7816_rpdu_t rpdu;
- phNxpEse_memset(&cpdu, 0x00, sizeof(phNxpEse_7816_cpdu_t));
- phNxpEse_memset(&rpdu, 0x00, sizeof(phNxpEse_7816_rpdu_t));
-
- if ((resApduBuff.channelNumber > 0x03) &&
- (resApduBuff.channelNumber < 0x14)) {
- /* update CLA byte accoridng to GP spec Table 11-12*/
- cpdu.cla =
- 0x40 + (resApduBuff.channelNumber - 4); /* Class of instruction */
- } else if ((resApduBuff.channelNumber > 0x00) &&
- (resApduBuff.channelNumber < 0x04)) {
- /* update CLA byte accoridng to GP spec Table 11-11*/
- cpdu.cla = resApduBuff.channelNumber; /* Class of instruction */
- } else {
- LOG(ERROR) << StringPrintf("%s: Invalid Channel no: %02x", __func__,
- resApduBuff.channelNumber);
- resApduBuff.channelNumber = 0xff;
- _hidl_cb(resApduBuff, SecureElementStatus::IOERROR);
- return Void();
- }
- cpdu.ins = 0xA4; /* Instruction code */
- cpdu.p1 = 0x04; /* Instruction parameter 1 */
- cpdu.p2 = p2; /* Instruction parameter 2 */
- cpdu.lc = (uint16_t)aid.size();
- cpdu.le_type = 0x01;
- cpdu.pdata = (uint8_t*)phNxpEse_memalloc(aid.size() * sizeof(uint8_t));
- memcpy(cpdu.pdata, aid.data(), cpdu.lc);
- cpdu.le = 256;
-
- rpdu.len = 0x02;
- rpdu.pdata = (uint8_t*)phNxpEse_memalloc(cpdu.le * sizeof(uint8_t));
-
- status = phNxpEse_7816_Transceive(&cpdu, &rpdu);
-
- if (status != ESESTATUS_SUCCESS) {
- /*Transceive failed*/
- if (rpdu.len > 0 && (rpdu.sw1 == 0x64 && rpdu.sw2 == 0xFF)) {
- sestatus = SecureElementStatus::IOERROR;
- } else {
- sestatus = SecureElementStatus::FAILED;
- }
- } else {
- /*Status word to be passed as part of response
- So include additional length*/
- uint16_t responseLen = rpdu.len + 2;
- resApduBuff.selectResponse.resize(responseLen);
- memcpy(&resApduBuff.selectResponse[0], rpdu.pdata, rpdu.len);
- resApduBuff.selectResponse[responseLen - 1] = rpdu.sw2;
- resApduBuff.selectResponse[responseLen - 2] = rpdu.sw1;
-
- /*Status is success*/
- if ((rpdu.sw1 == 0x90 && rpdu.sw2 == 0x00) || (rpdu.sw1 == 0x62) ||
- (rpdu.sw1 == 0x63)) {
- sestatus = SecureElementStatus::SUCCESS;
- }
- /*AID provided doesn't match any applet on the secure element*/
- else if ((rpdu.sw1 == 0x6A && rpdu.sw2 == 0x82) ||
- (rpdu.sw1 == 0x69 && (rpdu.sw2 == 0x99 || rpdu.sw2 == 0x85))) {
- sestatus = SecureElementStatus::NO_SUCH_ELEMENT_ERROR;
- }
- /*Operation provided by the P2 parameter is not permitted by the applet.*/
- else if (rpdu.sw1 == 0x6A && rpdu.sw2 == 0x86) {
- sestatus = SecureElementStatus::UNSUPPORTED_OPERATION;
- } else {
- sestatus = SecureElementStatus::FAILED;
- }
- }
- if (sestatus != SecureElementStatus::SUCCESS) {
- SecureElementStatus closeChannelStatus =
- internalCloseChannel(resApduBuff.channelNumber);
- if (closeChannelStatus != SecureElementStatus::SUCCESS) {
- LOG(ERROR) << "%s: closeChannel Failed" << __func__;
- } else {
- resApduBuff.channelNumber = 0xff;
- }
- }
- status = phNxpEse_ResetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- _hidl_cb(resApduBuff, sestatus);
- phNxpEse_free(cpdu.pdata);
- phNxpEse_free(rpdu.pdata);
-
- return Void();
-}
-
-Return<void> SecureElement::openBasicChannel(const hidl_vec<uint8_t>& aid,
- uint8_t p2,
- openBasicChannel_cb _hidl_cb) {
- AutoMutex guard(seHalLock);
- ESESTATUS status = ESESTATUS_SUCCESS;
- phNxpEse_7816_cpdu_t cpdu;
- phNxpEse_7816_rpdu_t rpdu;
- hidl_vec<uint8_t> result;
- hidl_vec<uint8_t> ls_aid = {0xA0, 0x00, 0x00, 0x03, 0x96, 0x41, 0x4C,
- 0x41, 0x01, 0x43, 0x4F, 0x52, 0x01};
-
- LOG(ERROR) << "Acquired the lock in SPI openBasicChannel";
- OsuHalExtn::OsuApduMode mode =
- IS_OSU_MODE(aid, OsuHalExtn::getInstance().OPENBASIC);
- if (mode == OsuHalExtn::OSU_PROP_MODE) {
- uint8_t sw[2] = {0x90, 0x00};
- result.resize(sizeof(sw));
- memcpy(&result[0], sw, 2);
- if (mIsEseInitialized) {
- /*Close existing sessions if any to start dedicated OSU Mode
- * with OSU specific settings in TZ/TEE*/
- if (seHalDeInit() != SecureElementStatus::SUCCESS) {
- LOG(INFO) << "seDeInit Failed";
- _hidl_cb(result, SecureElementStatus::IOERROR);
- return Void();
- }
- }
- phNxpEse_setWtxCountLimit(OsuHalExtn::getInstance().getOSUMaxWtxCount());
- ESESTATUS status = ESESTATUS_FAILED;
- uint8_t retry = 0;
- do {
- /*For Reset Recovery*/
- status = seHalInit();
- } while (status != ESESTATUS_SUCCESS && retry++ < 1);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "%s: seHalInit Failed!!!" << __func__;
- phNxpEse_setWtxCountLimit(RESET_APP_WTX_COUNT);
- _hidl_cb(result, SecureElementStatus::IOERROR);
- return Void();
- }
- if (phNxpEse_doResetProtection(true) != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "%s: Enable Reset Protection Failed!!!" << __func__;
- _hidl_cb(result, SecureElementStatus::FAILED);
- } else {
- _hidl_cb(result, SecureElementStatus::SUCCESS);
- }
- return Void();
- } else if (mode == OsuHalExtn::OSU_BLOCKED_MODE) {
- _hidl_cb(result, SecureElementStatus::IOERROR);
- return Void();
- } else {
- }
-
- if (!mIsEseInitialized) {
- ESESTATUS status = seHalInit();
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "%s: seHalInit Failed!!!" << __func__;
- _hidl_cb(result, SecureElementStatus::IOERROR);
- return Void();
- }
- }
-
- if (mOpenedChannels.size() == 0x00) {
- mMaxChannelCount = (GET_CHIP_OS_VERSION() >= OS_VERSION_6_2) ? 0x0C : 0x04;
- mOpenedChannels.resize(mMaxChannelCount, false);
- }
- phNxpEse_memset(&cpdu, 0x00, sizeof(phNxpEse_7816_cpdu_t));
- phNxpEse_memset(&rpdu, 0x00, sizeof(phNxpEse_7816_rpdu_t));
-
- cpdu.cla = 0x00; /* Class of instruction */
- cpdu.ins = 0xA4; /* Instruction code */
- cpdu.p1 = 0x04; /* Instruction parameter 1 */
- cpdu.p2 = p2; /* Instruction parameter 2 */
- cpdu.lc = (uint16_t)aid.size();
- cpdu.le_type = 0x01;
- cpdu.pdata = (uint8_t*)phNxpEse_memalloc(aid.size() * sizeof(uint8_t));
- memcpy(cpdu.pdata, aid.data(), cpdu.lc);
- cpdu.le = 256;
-
- rpdu.len = 0x02;
- rpdu.pdata = (uint8_t*)phNxpEse_memalloc(cpdu.le * sizeof(uint8_t));
-
- status = phNxpEse_SetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- status = phNxpEse_7816_Transceive(&cpdu, &rpdu);
- SecureElementStatus sestatus;
- memset(&sestatus, 0x00, sizeof(sestatus));
-
- if (status != ESESTATUS_SUCCESS) {
- /* Transceive failed */
- if (rpdu.len > 0 && (rpdu.sw1 == 0x64 && rpdu.sw2 == 0xFF)) {
- sestatus = SecureElementStatus::IOERROR;
- } else {
- sestatus = SecureElementStatus::FAILED;
- }
- } else {
- /*Status word to be passed as part of response
- So include additional length*/
- uint16_t responseLen = rpdu.len + 2;
- result.resize(responseLen);
- memcpy(&result[0], rpdu.pdata, rpdu.len);
- result[responseLen - 1] = rpdu.sw2;
- result[responseLen - 2] = rpdu.sw1;
-
- /*Status is success*/
- if (((rpdu.sw1 == 0x90) && (rpdu.sw2 == 0x00)) || (rpdu.sw1 == 0x62) ||
- (rpdu.sw1 == 0x63)) {
- /*Set basic channel reference if it is not set */
- if (!mOpenedChannels[0]) {
- mOpenedChannels[0] = true;
- mOpenedchannelCount++;
- }
-
- sestatus = SecureElementStatus::SUCCESS;
- }
- /*AID provided doesn't match any applet on the secure element*/
- else if ((rpdu.sw1 == 0x6A && rpdu.sw2 == 0x82) ||
- (rpdu.sw1 == 0x69 && (rpdu.sw2 == 0x99 || rpdu.sw2 == 0x85))) {
- sestatus = SecureElementStatus::NO_SUCH_ELEMENT_ERROR;
- }
- /*Operation provided by the P2 parameter is not permitted by the applet.*/
- else if (rpdu.sw1 == 0x6A && rpdu.sw2 == 0x86) {
- sestatus = SecureElementStatus::UNSUPPORTED_OPERATION;
- } else {
- sestatus = SecureElementStatus::FAILED;
- }
- }
- status = phNxpEse_ResetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- if (sestatus != SecureElementStatus::SUCCESS) {
- SecureElementStatus closeChannelStatus =
- internalCloseChannel(DEFAULT_BASIC_CHANNEL);
- if (closeChannelStatus != SecureElementStatus::SUCCESS) {
- LOG(ERROR) << "%s: closeChannel Failed" << __func__;
- }
- }
- _hidl_cb(result, sestatus);
- phNxpEse_free(cpdu.pdata);
- phNxpEse_free(rpdu.pdata);
- return Void();
-}
-
-Return<SecureElementStatus> SecureElement::internalCloseChannel(
- uint8_t channelNumber) {
- ESESTATUS status = ESESTATUS_SUCCESS;
- SecureElementStatus sestatus = SecureElementStatus::FAILED;
- phNxpEse_7816_cpdu_t cpdu;
- phNxpEse_7816_rpdu_t rpdu;
-
- LOG(ERROR) << "Acquired the lock in SPI internalCloseChannel";
- LOG(INFO) << StringPrintf("mMaxChannelCount = %d, Closing Channel = %d",
- mMaxChannelCount, channelNumber);
- if ((int8_t)channelNumber < DEFAULT_BASIC_CHANNEL ||
- channelNumber >= mMaxChannelCount) {
- LOG(ERROR) << StringPrintf("invalid channel!!! %d", channelNumber);
- } else if (channelNumber > DEFAULT_BASIC_CHANNEL) {
- phNxpEse_memset(&cpdu, 0x00, sizeof(phNxpEse_7816_cpdu_t));
- phNxpEse_memset(&rpdu, 0x00, sizeof(phNxpEse_7816_rpdu_t));
- cpdu.cla = channelNumber; /* Class of instruction */
- cpdu.ins = 0x70; /* Instruction code */
- cpdu.p1 = 0x80; /* Instruction parameter 1 */
- cpdu.p2 = channelNumber; /* Instruction parameter 2 */
- cpdu.lc = 0x00;
- cpdu.le = 0x9000;
- status = phNxpEse_SetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- status = phNxpEse_7816_Transceive(&cpdu, &rpdu);
- if (status == ESESTATUS_SUCCESS) {
- if ((rpdu.sw1 == 0x90) && (rpdu.sw2 == 0x00)) {
- sestatus = SecureElementStatus::SUCCESS;
- }
- }
- status = phNxpEse_ResetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- }
- if (channelNumber < mMaxChannelCount) {
- if (mOpenedChannels[channelNumber]) {
- mOpenedChannels[channelNumber] = false;
- mOpenedchannelCount--;
- }
- }
- /*If there are no channels remaining close secureElement*/
- if (mOpenedchannelCount == 0) {
- sestatus = seHalDeInit();
- } else {
- sestatus = SecureElementStatus::SUCCESS;
- }
- return sestatus;
-}
-
-Return<SecureElementStatus> SecureElement::closeChannel(uint8_t channelNumber) {
- AutoMutex guard(seHalLock);
- if (IS_OSU_MODE(OsuHalExtn::getInstance().CLOSE, channelNumber) ==
- OsuHalExtn::getInstance().NON_OSU_MODE) {
- return internalCloseChannel(channelNumber);
- } else {
- /*Decrement channel count opened to
- * keep in sync with service */
- if (channelNumber < mMaxChannelCount) {
- if (mOpenedChannels[channelNumber]) {
- mOpenedChannels[channelNumber] = false;
- mOpenedchannelCount--;
- }
- }
- return SecureElementStatus::SUCCESS;
- }
-}
-
-void SecureElement::serviceDied(uint64_t /*cookie*/, const wp<IBase>& /*who*/) {
- LOG(ERROR) << " SecureElement serviceDied!!!";
- mIsEseInitialized = false;
- if (seHalDeInit() != SecureElementStatus::SUCCESS) {
- LOG(ERROR) << "SE Deinit not successful";
- }
-}
-ESESTATUS SecureElement::seHalInit() {
- ESESTATUS status = ESESTATUS_SUCCESS;
- phNxpEse_initParams initParams;
- ESESTATUS deInitStatus = ESESTATUS_SUCCESS;
- memset(&initParams, 0x00, sizeof(phNxpEse_initParams));
- initParams.initMode = ESE_MODE_NORMAL;
- initParams.mediaType = ESE_PROTOCOL_MEDIA_SPI_APDU_GATE;
- initParams.fPtr_WtxNtf = SecureElement::NotifySeWaitExtension;
-
- status = phNxpEse_open(initParams);
- if (ESESTATUS_SUCCESS == status || ESESTATUS_BUSY == status) {
- if (ESESTATUS_SUCCESS == phNxpEse_SetEndPoint_Cntxt(0) &&
- ESESTATUS_SUCCESS == (status = phNxpEse_init(initParams))) {
- if (ESESTATUS_SUCCESS == phNxpEse_ResetEndPoint_Cntxt(0)) {
- mIsEseInitialized = true;
- LOG(INFO) << "ESE SPI init complete!!!";
- return ESESTATUS_SUCCESS;
- }
- } else {
- LOG(INFO) << "ESE SPI init NOT successful";
- status = ESESTATUS_FAILED;
- }
- deInitStatus = phNxpEse_deInit();
- if (phNxpEse_close(deInitStatus) != ESESTATUS_SUCCESS) {
- LOG(INFO) << "ESE close not successful";
- status = ESESTATUS_FAILED;
- }
- mIsEseInitialized = false;
- }
- return status;
-}
-
-Return<SecureElementStatus> SecureElement::seHalDeInit() {
- ESESTATUS status = ESESTATUS_SUCCESS;
- ESESTATUS deInitStatus = ESESTATUS_SUCCESS;
- bool mIsDeInitDone = true;
- SecureElementStatus sestatus = SecureElementStatus::FAILED;
- status = phNxpEse_SetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- mIsDeInitDone = false;
- }
- deInitStatus = phNxpEse_deInit();
- if (ESESTATUS_SUCCESS != deInitStatus) mIsDeInitDone = false;
- status = phNxpEse_ResetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- mIsDeInitDone = false;
- }
- status = phNxpEse_close(deInitStatus);
- if (status == ESESTATUS_SUCCESS && mIsDeInitDone) {
- sestatus = SecureElementStatus::SUCCESS;
- ;
- } else {
- LOG(ERROR) << "seHalDeInit: Failed";
- }
- mIsEseInitialized = false;
- for (uint8_t xx = 0; xx < mMaxChannelCount; xx++) {
- mOpenedChannels[xx] = false;
- }
- mOpenedchannelCount = 0;
-
- return sestatus;
-}
-Return<::android::hardware::secure_element::V1_0::SecureElementStatus>
-SecureElement::reset() {
- ESESTATUS status = ESESTATUS_SUCCESS;
- SecureElementStatus sestatus = SecureElementStatus::FAILED;
- LOG(ERROR) << "%s: Enter" << __func__;
- if (!mIsEseInitialized) {
- ESESTATUS status = seHalInit();
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "%s: seHalInit Failed!!!" << __func__;
- }
- }
- if (status == ESESTATUS_SUCCESS) {
- mCallbackV1_1->onStateChange_1_1(false, "reset the SE");
- status = phNxpEse_reset();
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "%s: SecureElement reset failed!!" << __func__;
- } else {
- sestatus = SecureElementStatus::SUCCESS;
- if (mOpenedChannels.size() == 0x00) {
- mMaxChannelCount =
- (GET_CHIP_OS_VERSION() >= OS_VERSION_6_2) ? 0x0C : 0x04;
- mOpenedChannels.resize(mMaxChannelCount, false);
- }
- for (uint8_t xx = 0; xx < mMaxChannelCount; xx++) {
- mOpenedChannels[xx] = false;
- }
- mOpenedchannelCount = 0;
- mCallbackV1_1->onStateChange_1_1(true, "SE initialized");
- }
- }
- LOG(ERROR) << "%s: Exit" << __func__;
- return sestatus;
-}
-
-} // namespace implementation
-} // namespace V1_2
-} // namespace secure_element
-} // namespace hardware
-} // namespace android
diff --git a/snxxx/1.2/SecureElement.h b/snxxx/1.2/SecureElement.h
deleted file mode 100755
index 8853444..0000000
--- a/snxxx/1.2/SecureElement.h
+++ /dev/null
@@ -1,127 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2020 NXP
- *
- * 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.
- *
- ******************************************************************************/
-#ifndef ANDROID_HARDWARE_SECURE_ELEMENT_V1_2_SECUREELEMENT_H
-#define ANDROID_HARDWARE_SECURE_ELEMENT_V1_2_SECUREELEMENT_H
-
-#include <SyncEvent.h>
-#include <android-base/stringprintf.h>
-#include <android/hardware/secure_element/1.0/types.h>
-#include <android/hardware/secure_element/1.2/ISecureElement.h>
-#include <hardware/hardware.h>
-#include <hidl/MQDescriptor.h>
-#include <hidl/Status.h>
-#include <pthread.h>
-#include "OsuHalExtn.h"
-#include "phNxpEse_Api.h"
-
-class ThreadMutex {
- public:
- ThreadMutex();
- virtual ~ThreadMutex();
- void lock();
- void unlock();
- operator pthread_mutex_t*() { return &mMutex; }
-
- private:
- pthread_mutex_t mMutex;
-};
-
-class AutoThreadMutex {
- public:
- AutoThreadMutex(ThreadMutex& m);
- virtual ~AutoThreadMutex();
- operator ThreadMutex&() { return mm; }
- operator pthread_mutex_t*() { return (pthread_mutex_t*)mm; }
-
- private:
- ThreadMutex& mm;
-};
-
-namespace android {
-namespace hardware {
-namespace secure_element {
-namespace V1_2 {
-namespace implementation {
-
-using ::android::sp;
-using android::base::StringPrintf;
-using ::android::hardware::hidl_array;
-using ::android::hardware::hidl_memory;
-using ::android::hardware::hidl_string;
-using ::android::hardware::hidl_vec;
-using ::android::hardware::Return;
-using ::android::hardware::Void;
-using ::android::hardware::secure_element::V1_0::LogicalChannelResponse;
-using ::android::hardware::secure_element::V1_0::SecureElementStatus;
-using ::android::hardware::secure_element::V1_2::ISecureElement;
-using ::android::hidl::base::V1_0::IBase;
-
-#ifndef MIN_APDU_LENGTH
-#define MIN_APDU_LENGTH 0x04
-#endif
-#ifndef DEFAULT_BASIC_CHANNEL
-#define DEFAULT_BASIC_CHANNEL 0x00
-#endif
-
-struct SecureElement : public V1_2::ISecureElement,
- public hidl_death_recipient {
- SecureElement();
- Return<void> init(
- const sp<
- ::android::hardware::secure_element::V1_0::ISecureElementHalCallback>&
- clientCallback) override;
- Return<void> init_1_1(
- const sp<
- ::android::hardware::secure_element::V1_1::ISecureElementHalCallback>&
- clientCallback) override;
- Return<void> getAtr(getAtr_cb _hidl_cb) override;
- Return<bool> isCardPresent() override;
- Return<void> transmit(const hidl_vec<uint8_t>& data,
- transmit_cb _hidl_cb) override;
- Return<void> openLogicalChannel(const hidl_vec<uint8_t>& aid, uint8_t p2,
- openLogicalChannel_cb _hidl_cb) override;
- Return<void> openBasicChannel(const hidl_vec<uint8_t>& aid, uint8_t p2,
- openBasicChannel_cb _hidl_cb) override;
- Return<SecureElementStatus> closeChannel(uint8_t channelNumber) override;
-
- void serviceDied(uint64_t /*cookie*/, const wp<IBase>& /*who*/);
-
- static void NotifySeWaitExtension(phNxpEse_wtxState state);
- Return<::android::hardware::secure_element::V1_0::SecureElementStatus>
- reset();
-
- private:
- uint8_t mMaxChannelCount;
- uint8_t mOpenedchannelCount = 0;
- Mutex seHalLock;
- bool mIsEseInitialized = false;
- static std::vector<bool> mOpenedChannels;
- static sp<V1_0::ISecureElementHalCallback> mCallbackV1_0;
- static sp<V1_1::ISecureElementHalCallback> mCallbackV1_1;
- Return<SecureElementStatus> seHalDeInit();
- ESESTATUS seHalInit();
- Return<SecureElementStatus> internalCloseChannel(uint8_t channelNumber);
-};
-
-} // namespace implementation
-} // namespace V1_2
-} // namespace secure_element
-} // namespace hardware
-} // namespace android
-
-#endif // ANDROID_HARDWARE_SECURE_ELEMENT_V1_1_SECUREELEMENT_H
diff --git a/snxxx/1.2/VirtualISO.cpp b/snxxx/1.2/VirtualISO.cpp
deleted file mode 100755
index 4550605..0000000
--- a/snxxx/1.2/VirtualISO.cpp
+++ /dev/null
@@ -1,704 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2018-2021 NXP
- *
- * 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.
- *
- ******************************************************************************/
-#include "VirtualISO.h"
-#include <android-base/logging.h>
-#include "SecureElement.h"
-#include "phNxpEse_Apdu_Api.h"
-#include "phNxpEse_Api.h"
-#ifdef NXP_BOOTTIME_UPDATE
-#include "eSEClient.h"
-#endif
-#include "NxpEse.h"
-#include "hal_nxpese.h"
-
-namespace vendor {
-namespace nxp {
-namespace virtual_iso {
-namespace V1_0 {
-namespace implementation {
-
-#define LOG_TAG "nxpVIsoese@1.2-service"
-
-#define DEFAULT_BASIC_CHANNEL 0x00
-
-using ::android::hardware::secure_element::V1_2::ISecureElement;
-using vendor::nxp::nxpese::V1_0::implementation::NxpEse;
-
-typedef struct gsTransceiveBuffer {
- phNxpEse_data cmdData;
- phNxpEse_data rspData;
- hidl_vec<uint8_t>* pRspDataBuff;
-} sTransceiveBuffer_t;
-
-static sTransceiveBuffer_t gsTxRxBuffer;
-static hidl_vec<uint8_t> gsRspDataBuff(256);
-sp<::android::hardware::secure_element::V1_0::ISecureElementHalCallback>
- VirtualISO::mCallbackV1_0 = nullptr;
-sp<::android::hardware::secure_element::V1_1::ISecureElementHalCallback>
- VirtualISO::mCallbackV1_1 = nullptr;
-std::vector<bool> VirtualISO::mOpenedChannels;
-
-VirtualISO::VirtualISO()
- : mMaxChannelCount(0), mOpenedchannelCount(0), mIsEseInitialized(false) {}
-
-Return<void> VirtualISO::init(
- const sp<
- ::android::hardware::secure_element::V1_0::ISecureElementHalCallback>&
- clientCallback) {
- ESESTATUS status = ESESTATUS_SUCCESS;
- ESESTATUS deInitStatus = ESESTATUS_SUCCESS;
- bool mIsInitDone = false;
- phNxpEse_initParams initParams;
- LOG(INFO) << "Virtual ISO::init Enter";
- gsTxRxBuffer.pRspDataBuff = &gsRspDataBuff;
- memset(&initParams, 0x00, sizeof(phNxpEse_initParams));
- initParams.initMode = ESE_MODE_NORMAL;
- initParams.mediaType = ESE_PROTOCOL_MEDIA_SPI_APDU_GATE;
-
- if (clientCallback == nullptr) {
- return Void();
- } else {
- clientCallback->linkToDeath(this, 0 /*cookie*/);
- }
-#ifdef NXP_BOOTTIME_UPDATE
- if (ese_update != ESE_UPDATE_COMPLETED) {
- mCallbackV1_0 = clientCallback;
- clientCallback->onStateChange(false);
- LOG(INFO) << "ESE JCOP Download in progress";
- NxpEse::setVirtualISOCallBack(clientCallback);
- return Void();
- // Register
- }
-#endif
- if (mIsEseInitialized) {
- clientCallback->onStateChange(true);
- return Void();
- }
- status = phNxpEse_open(initParams);
- if (status == ESESTATUS_SUCCESS || ESESTATUS_BUSY == status) {
- if (ESESTATUS_SUCCESS == phNxpEse_SetEndPoint_Cntxt(1) &&
- ESESTATUS_SUCCESS == phNxpEse_init(initParams)) {
- if (ESESTATUS_SUCCESS == phNxpEse_ResetEndPoint_Cntxt(1)) {
- LOG(INFO) << "VISO init complete!!!";
- mIsInitDone = true;
- }
- deInitStatus = phNxpEse_deInit();
- if (ESESTATUS_SUCCESS != deInitStatus) mIsInitDone = false;
- }
- status = phNxpEse_close(deInitStatus);
- }
- if (status == ESESTATUS_SUCCESS && mIsInitDone) {
- mMaxChannelCount = (GET_CHIP_OS_VERSION() >= OS_VERSION_6_2) ? 0x0C : 0x04;
- mOpenedChannels.resize(mMaxChannelCount, false);
- clientCallback->onStateChange(true);
- } else {
- LOG(ERROR) << "VISO-Hal Init failed";
- clientCallback->onStateChange(false);
- }
- return Void();
-}
-
-Return<void> VirtualISO::init_1_1(
- const sp<
- ::android::hardware::secure_element::V1_1::ISecureElementHalCallback>&
- clientCallback) {
- ESESTATUS status = ESESTATUS_SUCCESS;
- ESESTATUS deInitStatus = ESESTATUS_SUCCESS;
- bool mIsInitDone = false;
- phNxpEse_initParams initParams;
- LOG(INFO) << "Virtual ISO::init Enter";
- gsTxRxBuffer.pRspDataBuff = &gsRspDataBuff;
- memset(&initParams, 0x00, sizeof(phNxpEse_initParams));
- initParams.initMode = ESE_MODE_NORMAL;
- initParams.mediaType = ESE_PROTOCOL_MEDIA_SPI_APDU_GATE;
-
- if (clientCallback == nullptr) {
- return Void();
- } else {
- clientCallback->linkToDeath(this, 0 /*cookie*/);
- }
-#ifdef NXP_BOOTTIME_UPDATE
- if (ese_update != ESE_UPDATE_COMPLETED) {
- mCallbackV1_1 = clientCallback;
- clientCallback->onStateChange_1_1(false, "NXP SE update going on");
- LOG(INFO) << "ESE JCOP Download in progress";
- NxpEse::setVirtualISOCallBack_1_1(clientCallback);
- return Void();
- // Register
- }
-#endif
- if (mIsEseInitialized) {
- clientCallback->onStateChange_1_1(true, "NXP VISIO HAL init ok");
- return Void();
- }
- status = phNxpEse_open(initParams);
- if (status == ESESTATUS_SUCCESS || ESESTATUS_BUSY == status) {
- if (ESESTATUS_SUCCESS == phNxpEse_SetEndPoint_Cntxt(1) &&
- ESESTATUS_SUCCESS == phNxpEse_init(initParams)) {
- if (ESESTATUS_SUCCESS == phNxpEse_ResetEndPoint_Cntxt(1)) {
- LOG(INFO) << "VISO init complete!!!";
- mIsInitDone = true;
- }
- deInitStatus = phNxpEse_deInit();
- if (ESESTATUS_SUCCESS != deInitStatus) mIsInitDone = false;
- }
- status = phNxpEse_close(deInitStatus);
- }
- if (status == ESESTATUS_SUCCESS && mIsInitDone) {
- mMaxChannelCount = (GET_CHIP_OS_VERSION() >= OS_VERSION_6_2) ? 0x0C : 0x04;
- mOpenedChannels.resize(mMaxChannelCount, false);
- clientCallback->onStateChange_1_1(true, "NXP VISIO HAL init ok");
- } else {
- LOG(ERROR) << "VISO-Hal Init failed";
- clientCallback->onStateChange_1_1(false, "NXP VISIO HAL init failed");
- }
- return Void();
-}
-
-Return<void> VirtualISO::getAtr(getAtr_cb _hidl_cb) {
- hidl_vec<uint8_t> response;
- _hidl_cb(response);
- return Void();
-}
-
-Return<bool> VirtualISO::isCardPresent() { return true; }
-
-Return<void> VirtualISO::transmit(const hidl_vec<uint8_t>& data,
- transmit_cb _hidl_cb) {
- ESESTATUS status = ESESTATUS_FAILED;
- hidl_vec<uint8_t> result;
- phNxpEse_memset(&gsTxRxBuffer.cmdData, 0x00, sizeof(phNxpEse_data));
- phNxpEse_memset(&gsTxRxBuffer.rspData, 0x00, sizeof(phNxpEse_data));
- gsTxRxBuffer.cmdData.len = data.size();
- gsTxRxBuffer.cmdData.p_data =
- (uint8_t*)phNxpEse_memalloc(data.size() * sizeof(uint8_t));
- if (NULL == gsTxRxBuffer.cmdData.p_data) {
- LOG(ERROR) << "transmit failed to allocate the Memory!!!";
- /*Return empty hidl_vec*/
- _hidl_cb(result);
- return Void();
- }
- memcpy(gsTxRxBuffer.cmdData.p_data, data.data(), gsTxRxBuffer.cmdData.len);
- LOG(ERROR) << "Acquired the lock in VISO ";
- status = phNxpEse_SetEndPoint_Cntxt(1);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- status = phNxpEse_Transceive(&gsTxRxBuffer.cmdData, &gsTxRxBuffer.rspData);
-
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "transmit failed!!!";
- } else {
- result.resize(gsTxRxBuffer.rspData.len);
- memcpy(&result[0], gsTxRxBuffer.rspData.p_data, gsTxRxBuffer.rspData.len);
- }
- status = phNxpEse_ResetEndPoint_Cntxt(1);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
-
- _hidl_cb(result);
- if (NULL != gsTxRxBuffer.cmdData.p_data) {
- phNxpEse_free(gsTxRxBuffer.cmdData.p_data);
- gsTxRxBuffer.cmdData.p_data = NULL;
- }
- if (NULL != gsTxRxBuffer.rspData.p_data) {
- phNxpEse_free(gsTxRxBuffer.rspData.p_data);
- gsTxRxBuffer.rspData.p_data = NULL;
- }
-
- return Void();
-}
-
-Return<void> VirtualISO::openLogicalChannel(const hidl_vec<uint8_t>& aid,
- uint8_t p2,
- openLogicalChannel_cb _hidl_cb) {
- hidl_vec<uint8_t> manageChannelCommand = {0x00, 0x70, 0x00, 0x00, 0x01};
-
- LogicalChannelResponse resApduBuff;
-
- LOG(INFO) << "Acquired the lock in VISO openLogicalChannel";
-
- resApduBuff.channelNumber = 0xff;
- memset(&resApduBuff, 0x00, sizeof(resApduBuff));
- if (!mIsEseInitialized) {
- ESESTATUS status = seHalInit();
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "%s: seHalInit Failed!!!" << __func__;
- _hidl_cb(resApduBuff, SecureElementStatus::IOERROR);
- return Void();
- }
- }
-
- if (mOpenedChannels.size() == 0x00) {
- mMaxChannelCount = (GET_CHIP_OS_VERSION() >= OS_VERSION_6_2) ? 0x0C : 0x04;
- mOpenedChannels.resize(mMaxChannelCount, false);
- }
-
- SecureElementStatus sestatus = SecureElementStatus::IOERROR;
- ESESTATUS status = ESESTATUS_FAILED;
- phNxpEse_data cmdApdu;
- phNxpEse_data rspApdu;
-
- phNxpEse_memset(&cmdApdu, 0x00, sizeof(phNxpEse_data));
- phNxpEse_memset(&rspApdu, 0x00, sizeof(phNxpEse_data));
-
- cmdApdu.len = manageChannelCommand.size();
- cmdApdu.p_data = (uint8_t*)phNxpEse_memalloc(manageChannelCommand.size() *
- sizeof(uint8_t));
- memcpy(cmdApdu.p_data, manageChannelCommand.data(), cmdApdu.len);
-
- memset(&sestatus, 0x00, sizeof(sestatus));
-
- status = phNxpEse_SetEndPoint_Cntxt(1);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- status = phNxpEse_Transceive(&cmdApdu, &rspApdu);
- if (status != ESESTATUS_SUCCESS) {
- resApduBuff.channelNumber = 0xff;
- if (NULL != rspApdu.p_data && rspApdu.len > 0) {
- if ((rspApdu.p_data[0] == 0x64 && rspApdu.p_data[1] == 0xFF)) {
- sestatus = SecureElementStatus::IOERROR;
- }
- }
- if (SecureElementStatus::IOERROR != sestatus) {
- sestatus = SecureElementStatus::FAILED;
- }
- } else if (rspApdu.p_data[rspApdu.len - 2] == 0x6A &&
- rspApdu.p_data[rspApdu.len - 1] == 0x81) {
- resApduBuff.channelNumber = 0xff;
- sestatus = SecureElementStatus::CHANNEL_NOT_AVAILABLE;
- } else if (rspApdu.p_data[rspApdu.len - 2] == 0x90 &&
- rspApdu.p_data[rspApdu.len - 1] == 0x00) {
- resApduBuff.channelNumber = rspApdu.p_data[0];
- mOpenedchannelCount++;
- mOpenedChannels[resApduBuff.channelNumber] = true;
- sestatus = SecureElementStatus::SUCCESS;
- } else if (((rspApdu.p_data[rspApdu.len - 2] == 0x6E) ||
- (rspApdu.p_data[rspApdu.len - 2] == 0x6D)) &&
- rspApdu.p_data[rspApdu.len - 1] == 0x00) {
- sestatus = SecureElementStatus::UNSUPPORTED_OPERATION;
- }
-
- /*Free the allocations*/
- phNxpEse_free(cmdApdu.p_data);
- phNxpEse_free(rspApdu.p_data);
-
- if (sestatus != SecureElementStatus::SUCCESS) {
- if (mOpenedchannelCount == 0) {
- sestatus = seHalDeInit();
- if (sestatus != SecureElementStatus::SUCCESS) {
- LOG(INFO) << "seDeInit Failed";
- }
- }
- /*If manageChanle is failed in any of above cases
- send the callback and return*/
- status = phNxpEse_ResetEndPoint_Cntxt(1);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- _hidl_cb(resApduBuff, sestatus);
- return Void();
- }
- LOG(INFO) << "openLogicalChannel Sending selectApdu";
- sestatus = SecureElementStatus::IOERROR;
- status = ESESTATUS_FAILED;
-
- phNxpEse_7816_cpdu_t cpdu;
- phNxpEse_7816_rpdu_t rpdu;
- phNxpEse_memset(&cpdu, 0x00, sizeof(phNxpEse_7816_cpdu_t));
- phNxpEse_memset(&rpdu, 0x00, sizeof(phNxpEse_7816_rpdu_t));
-
- if ((resApduBuff.channelNumber > 0x03) &&
- (resApduBuff.channelNumber < 0x14)) {
- /* update CLA byte accoridng to GP spec Table 11-12*/
- cpdu.cla =
- 0x40 + (resApduBuff.channelNumber - 4); /* Class of instruction */
- } else if ((resApduBuff.channelNumber > 0x00) &&
- (resApduBuff.channelNumber < 0x04)) {
- /* update CLA byte accoridng to GP spec Table 11-11*/
- cpdu.cla = resApduBuff.channelNumber; /* Class of instruction */
- } else {
- LOG(ERROR) << StringPrintf("%s: Invalid Channel no: %02x", __func__,
- resApduBuff.channelNumber);
- resApduBuff.channelNumber = 0xff;
- _hidl_cb(resApduBuff, SecureElementStatus::IOERROR);
- return Void();
- }
- cpdu.ins = 0xA4; /* Instruction code */
- cpdu.p1 = 0x04; /* Instruction parameter 1 */
- cpdu.p2 = p2; /* Instruction parameter 2 */
- cpdu.lc = aid.size();
- cpdu.le_type = 0x01;
- cpdu.pdata = (uint8_t*)phNxpEse_memalloc(aid.size() * sizeof(uint8_t));
- memcpy(cpdu.pdata, aid.data(), cpdu.lc);
- cpdu.le = 256;
-
- rpdu.len = 0x02;
- rpdu.pdata = (uint8_t*)phNxpEse_memalloc(cpdu.le * sizeof(uint8_t));
-
- status = phNxpEse_7816_Transceive(&cpdu, &rpdu);
- if (status != ESESTATUS_SUCCESS) {
- /*Transceive failed*/
- if (rpdu.len > 0 && (rpdu.sw1 == 0x64 && rpdu.sw2 == 0xFF)) {
- sestatus = SecureElementStatus::IOERROR;
- } else {
- sestatus = SecureElementStatus::FAILED;
- }
- } else {
- /*Status word to be passed as part of response
- So include additional length*/
- uint16_t responseLen = rpdu.len + 2;
- resApduBuff.selectResponse.resize(responseLen);
- memcpy(&resApduBuff.selectResponse[0], rpdu.pdata, rpdu.len);
- resApduBuff.selectResponse[responseLen - 1] = rpdu.sw2;
- resApduBuff.selectResponse[responseLen - 2] = rpdu.sw1;
-
- /*Status is success*/
- if (rpdu.sw1 == 0x90 && rpdu.sw2 == 0x00) {
- sestatus = SecureElementStatus::SUCCESS;
- }
- /*AID provided doesn't match any applet on the secure element*/
- else if (rpdu.sw1 == 0x6A && rpdu.sw2 == 0x82) {
- sestatus = SecureElementStatus::NO_SUCH_ELEMENT_ERROR;
- }
- /*Operation provided by the P2 parameter is not permitted by the applet.*/
- else if (rpdu.sw1 == 0x6A && rpdu.sw2 == 0x86) {
- sestatus = SecureElementStatus::UNSUPPORTED_OPERATION;
- } else {
- sestatus = SecureElementStatus::FAILED;
- }
- }
- if (sestatus != SecureElementStatus::SUCCESS) {
- SecureElementStatus closeChannelStatus =
- internalCloseChannel(resApduBuff.channelNumber);
- if (closeChannelStatus != SecureElementStatus::SUCCESS) {
- LOG(ERROR) << "%s: closeChannel Failed" << __func__;
- } else {
- resApduBuff.channelNumber = 0xff;
- }
- }
- status = phNxpEse_ResetEndPoint_Cntxt(1);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- _hidl_cb(resApduBuff, sestatus);
- phNxpEse_free(cpdu.pdata);
- phNxpEse_free(rpdu.pdata);
-
- return Void();
-}
-
-Return<void> VirtualISO::openBasicChannel(const hidl_vec<uint8_t>& aid,
- uint8_t p2,
- openBasicChannel_cb _hidl_cb) {
- ESESTATUS status = ESESTATUS_SUCCESS;
- phNxpEse_7816_cpdu_t cpdu;
- phNxpEse_7816_rpdu_t rpdu;
- hidl_vec<uint8_t> result;
-
- LOG(INFO) << "Acquired the lock in VISO openBasicChannel";
-
- if (!mIsEseInitialized) {
- ESESTATUS status = seHalInit();
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "%s: seHalInit Failed!!!" << __func__;
- _hidl_cb(result, SecureElementStatus::IOERROR);
- return Void();
- }
- }
-
- if (mOpenedChannels.size() == 0x00) {
- mMaxChannelCount = (GET_CHIP_OS_VERSION() >= OS_VERSION_6_2) ? 0x0C : 0x04;
- mOpenedChannels.resize(mMaxChannelCount, false);
- }
-
- phNxpEse_memset(&cpdu, 0x00, sizeof(phNxpEse_7816_cpdu_t));
- phNxpEse_memset(&rpdu, 0x00, sizeof(phNxpEse_7816_rpdu_t));
-
- cpdu.cla = 0x00; /* Class of instruction */
- cpdu.ins = 0xA4; /* Instruction code */
- cpdu.p1 = 0x04; /* Instruction parameter 1 */
- cpdu.p2 = p2; /* Instruction parameter 2 */
- cpdu.lc = aid.size();
- cpdu.le_type = 0x01;
- cpdu.pdata = (uint8_t*)phNxpEse_memalloc(aid.size() * sizeof(uint8_t));
- memcpy(cpdu.pdata, aid.data(), cpdu.lc);
- cpdu.le = 256;
-
- rpdu.len = 0x02;
- rpdu.pdata = (uint8_t*)phNxpEse_memalloc(cpdu.le * sizeof(uint8_t));
-
- status = phNxpEse_SetEndPoint_Cntxt(1);
- status = phNxpEse_7816_Transceive(&cpdu, &rpdu);
-
- SecureElementStatus sestatus;
- memset(&sestatus, 0x00, sizeof(sestatus));
-
- if (status != ESESTATUS_SUCCESS) {
- /* Transceive failed */
- if (rpdu.len > 0 && (rpdu.sw1 == 0x64 && rpdu.sw2 == 0xFF)) {
- sestatus = SecureElementStatus::IOERROR;
- } else {
- sestatus = SecureElementStatus::FAILED;
- }
- } else {
- /*Status word to be passed as part of response
- So include additional length*/
- uint16_t responseLen = rpdu.len + 2;
- result.resize(responseLen);
- memcpy(&result[0], rpdu.pdata, rpdu.len);
- result[responseLen - 1] = rpdu.sw2;
- result[responseLen - 2] = rpdu.sw1;
-
- /*Status is success*/
- if ((rpdu.sw1 == 0x90) && (rpdu.sw2 == 0x00)) {
- /*Set basic channel reference if it is not set */
- if (!mOpenedChannels[0]) {
- mOpenedChannels[0] = true;
- mOpenedchannelCount++;
- }
-
- sestatus = SecureElementStatus::SUCCESS;
- }
- /*AID provided doesn't match any applet on the secure element*/
- else if (rpdu.sw1 == 0x6A && rpdu.sw2 == 0x82) {
- sestatus = SecureElementStatus::NO_SUCH_ELEMENT_ERROR;
- }
- /*Operation provided by the P2 parameter is not permitted by the applet.*/
- else if (rpdu.sw1 == 0x6A && rpdu.sw2 == 0x86) {
- sestatus = SecureElementStatus::UNSUPPORTED_OPERATION;
- } else {
- sestatus = SecureElementStatus::FAILED;
- }
- }
- status = phNxpEse_ResetEndPoint_Cntxt(1);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- if (sestatus != SecureElementStatus::SUCCESS) {
- SecureElementStatus closeChannelStatus =
- internalCloseChannel(DEFAULT_BASIC_CHANNEL);
- if (closeChannelStatus != SecureElementStatus::SUCCESS) {
- LOG(ERROR) << "%s: closeChannel Failed" << __func__;
- }
- }
- _hidl_cb(result, sestatus);
- phNxpEse_free(cpdu.pdata);
- phNxpEse_free(rpdu.pdata);
- return Void();
-}
-
-Return<::android::hardware::secure_element::V1_0::SecureElementStatus>
-VirtualISO::internalCloseChannel(uint8_t channelNumber) {
- ESESTATUS status = ESESTATUS_SUCCESS;
- SecureElementStatus sestatus = SecureElementStatus::FAILED;
- phNxpEse_7816_cpdu_t cpdu;
- phNxpEse_7816_rpdu_t rpdu;
-
- LOG(ERROR) << "internalCloseChannel Enter";
- LOG(INFO) << StringPrintf("mMaxChannelCount = %d, Closing Channel = %d",
- mMaxChannelCount, channelNumber);
- if ((int8_t)channelNumber < DEFAULT_BASIC_CHANNEL ||
- channelNumber >= mMaxChannelCount) {
- LOG(ERROR) << StringPrintf("invalid channel!!! %d", channelNumber);
- } else if (channelNumber > DEFAULT_BASIC_CHANNEL) {
- phNxpEse_memset(&cpdu, 0x00, sizeof(phNxpEse_7816_cpdu_t));
- phNxpEse_memset(&rpdu, 0x00, sizeof(phNxpEse_7816_rpdu_t));
- cpdu.cla = channelNumber; /* Class of instruction */
- cpdu.ins = 0x70; /* Instruction code */
- cpdu.p1 = 0x80; /* Instruction parameter 1 */
- cpdu.p2 = channelNumber; /* Instruction parameter 2 */
- cpdu.lc = 0x00;
- cpdu.le = 0x9000;
- status = phNxpEse_SetEndPoint_Cntxt(1);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- status = phNxpEse_7816_Transceive(&cpdu, &rpdu);
-
- if (status == ESESTATUS_SUCCESS) {
- if ((rpdu.sw1 == 0x90) && (rpdu.sw2 == 0x00)) {
- sestatus = SecureElementStatus::SUCCESS;
- }
- }
- status = phNxpEse_ResetEndPoint_Cntxt(1);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- if (mOpenedChannels[channelNumber]) {
- mOpenedChannels[channelNumber] = false;
- mOpenedchannelCount--;
- }
- }
- /*If there are no channels remaining close secureElement*/
- if (mOpenedchannelCount == 0) {
- sestatus = seHalDeInit();
- } else {
- sestatus = SecureElementStatus::SUCCESS;
- }
- return sestatus;
-}
-
-Return<::android::hardware::secure_element::V1_0::SecureElementStatus>
-VirtualISO::closeChannel(uint8_t channelNumber) {
- ESESTATUS status = ESESTATUS_SUCCESS;
- SecureElementStatus sestatus = SecureElementStatus::FAILED;
- phNxpEse_7816_cpdu_t cpdu;
- phNxpEse_7816_rpdu_t rpdu;
-
- LOG(INFO) << "Acquired the lock in VISO closeChannel";
- if ((int8_t)channelNumber < DEFAULT_BASIC_CHANNEL ||
- channelNumber >= mMaxChannelCount) {
- LOG(ERROR) << StringPrintf("invalid channel!!! %d", channelNumber);
- } else if (channelNumber > DEFAULT_BASIC_CHANNEL) {
- phNxpEse_memset(&cpdu, 0x00, sizeof(phNxpEse_7816_cpdu_t));
- phNxpEse_memset(&rpdu, 0x00, sizeof(phNxpEse_7816_rpdu_t));
- cpdu.cla = channelNumber; /* Class of instruction */
- cpdu.ins = 0x70; /* Instruction code */
- cpdu.p1 = 0x80; /* Instruction parameter 1 */
- cpdu.p2 = channelNumber; /* Instruction parameter 2 */
- cpdu.lc = 0x00;
- cpdu.le = 0x9000;
- status = phNxpEse_SetEndPoint_Cntxt(1);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- status = phNxpEse_7816_Transceive(&cpdu, &rpdu);
-
- if (status == ESESTATUS_SUCCESS) {
- if ((rpdu.sw1 == 0x90) && (rpdu.sw2 == 0x00)) {
- sestatus = SecureElementStatus::SUCCESS;
- }
- }
- status = phNxpEse_ResetEndPoint_Cntxt(1);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- }
- if (mOpenedChannels[channelNumber]) {
- mOpenedChannels[channelNumber] = false;
- mOpenedchannelCount--;
- }
- }
-
- /*If there are no channels remaining close secureElement*/
- if (mOpenedchannelCount == 0) {
- sestatus = seHalDeInit();
- } else {
- sestatus = SecureElementStatus::SUCCESS;
- }
- return sestatus;
-}
-ESESTATUS VirtualISO::seHalInit() {
- ESESTATUS status = ESESTATUS_SUCCESS;
- ESESTATUS deInitStatus = ESESTATUS_SUCCESS;
- phNxpEse_initParams initParams;
- memset(&initParams, 0x00, sizeof(phNxpEse_initParams));
- initParams.initMode = ESE_MODE_NORMAL;
- initParams.mediaType = ESE_PROTOCOL_MEDIA_SPI_APDU_GATE;
-
- status = phNxpEse_open(initParams);
- if (ESESTATUS_SUCCESS == status || ESESTATUS_BUSY == status) {
- if (ESESTATUS_SUCCESS == phNxpEse_SetEndPoint_Cntxt(1) &&
- ESESTATUS_SUCCESS == phNxpEse_init(initParams)) {
- if (ESESTATUS_SUCCESS == phNxpEse_ResetEndPoint_Cntxt(1)) {
- mIsEseInitialized = true;
- LOG(INFO) << "VISO init complete!!!";
- return ESESTATUS_SUCCESS;
- }
- deInitStatus = phNxpEse_deInit();
- }
- phNxpEse_close(deInitStatus);
- mIsEseInitialized = false;
- }
- return status;
-}
-
-Return<::android::hardware::secure_element::V1_0::SecureElementStatus>
-VirtualISO::seHalDeInit() {
- ESESTATUS status = ESESTATUS_SUCCESS;
- ESESTATUS deInitStatus = ESESTATUS_SUCCESS;
- bool mIsDeInitDone = true;
- SecureElementStatus sestatus = SecureElementStatus::FAILED;
- status = phNxpEse_SetEndPoint_Cntxt(1);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- mIsDeInitDone = false;
- }
- deInitStatus = phNxpEse_deInit();
- if (ESESTATUS_SUCCESS != deInitStatus) mIsDeInitDone = false;
- status = phNxpEse_ResetEndPoint_Cntxt(1);
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "phNxpEse_SetEndPoint_Cntxt failed!!!";
- mIsDeInitDone = false;
- }
- status = phNxpEse_close(deInitStatus);
- if (status == ESESTATUS_SUCCESS && mIsDeInitDone) {
- sestatus = SecureElementStatus::SUCCESS;
- ;
- } else {
- LOG(ERROR) << "seHalDeInit: Failed";
- }
- // Clear all the flags as SPI driver is closed.
- mIsEseInitialized = false;
- for (uint8_t xx = 0; xx < mMaxChannelCount; xx++) {
- mOpenedChannels[xx] = false;
- }
- mOpenedchannelCount = 0;
- return sestatus;
-}
-Return<::android::hardware::secure_element::V1_0::SecureElementStatus>
-VirtualISO::reset() {
- ESESTATUS status = ESESTATUS_SUCCESS;
- SecureElementStatus sestatus = SecureElementStatus::FAILED;
- LOG(ERROR) << "%s: Enter" << __func__;
- if (!mIsEseInitialized) {
- ESESTATUS status = seHalInit();
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "%s: seHalInit Failed!!!" << __func__;
- }
- }
- if (status == ESESTATUS_SUCCESS) {
- mCallbackV1_1->onStateChange_1_1(false, "reset the SE");
- status = phNxpEse_reset();
- if (status != ESESTATUS_SUCCESS) {
- LOG(ERROR) << "%s: SecureElement reset failed!!" << __func__;
- } else {
- sestatus = SecureElementStatus::SUCCESS;
- if (mOpenedChannels.size() == 0x00) {
- mMaxChannelCount =
- (GET_CHIP_OS_VERSION() >= OS_VERSION_6_2) ? 0x0C : 0x04;
- mOpenedChannels.resize(mMaxChannelCount, false);
- }
- for (uint8_t xx = 0; xx < mMaxChannelCount; xx++) {
- mOpenedChannels[xx] = false;
- }
- mOpenedchannelCount = 0;
- mCallbackV1_1->onStateChange_1_1(true, "SE initialized");
- }
- }
- LOG(ERROR) << "%s: Exit" << __func__;
- return sestatus;
-}
-
-} // namespace implementation
-} // namespace V1_0
-} // namespace virtual_iso
-} // namespace nxp
-} // namespace vendor
diff --git a/snxxx/1.2/VirtualISO.h b/snxxx/1.2/VirtualISO.h
deleted file mode 100755
index b664fa0..0000000
--- a/snxxx/1.2/VirtualISO.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2018-2020 NXP
- *
- * 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.
- *
- ******************************************************************************/
-#ifndef VENDOR_NXP_VIRTUAL_ISO_V1_0_SECUREELEMENT_H
-#define VENDOR_NXP_VIRTUAL_ISO_V1_0_SECUREELEMENT_H
-
-#include <android-base/stringprintf.h>
-#include <android/hardware/secure_element/1.0/types.h>
-#include <android/hardware/secure_element/1.2/ISecureElement.h>
-#include <hardware/hardware.h>
-#include <hidl/MQDescriptor.h>
-#include <hidl/Status.h>
-#include "phNxpEse_Api.h"
-
-namespace vendor {
-namespace nxp {
-namespace virtual_iso {
-namespace V1_0 {
-namespace implementation {
-
-using ::android::sp;
-using ::android::wp;
-using android::base::StringPrintf;
-using ::android::hardware::hidl_array;
-using ::android::hardware::hidl_death_recipient;
-using ::android::hardware::hidl_memory;
-using ::android::hardware::hidl_string;
-using ::android::hardware::hidl_vec;
-using ::android::hardware::Return;
-using ::android::hardware::Void;
-using ::android::hardware::secure_element::V1_0::LogicalChannelResponse;
-using ::android::hardware::secure_element::V1_0::SecureElementStatus;
-using ::android::hardware::secure_element::V1_2::ISecureElement;
-using ::android::hidl::base::V1_0::IBase;
-
-#ifndef DEFAULT_BASIC_CHANNEL
-#define DEFAULT_BASIC_CHANNEL 0x00
-#endif
-
-struct VirtualISO : public ISecureElement, public hidl_death_recipient {
- VirtualISO();
- Return<void> init(
- const sp<
- ::android::hardware::secure_element::V1_0::ISecureElementHalCallback>&
- clientCallback) override;
- Return<void> init_1_1(
- const sp<
- ::android::hardware::secure_element::V1_1::ISecureElementHalCallback>&
- clientCallback) override;
- Return<void> getAtr(getAtr_cb _hidl_cb) override;
- Return<bool> isCardPresent() override;
- Return<void> transmit(const hidl_vec<uint8_t>& data,
- transmit_cb _hidl_cb) override;
- Return<void> openLogicalChannel(const hidl_vec<uint8_t>& aid, uint8_t p2,
- openLogicalChannel_cb _hidl_cb) override;
- Return<void> openBasicChannel(const hidl_vec<uint8_t>& aid, uint8_t p2,
- openBasicChannel_cb _hidl_cb) override;
- Return<SecureElementStatus> closeChannel(uint8_t channelNumber) override;
- Return<::android::hardware::secure_element::V1_0::SecureElementStatus>
- reset();
- virtual void serviceDied(uint64_t /*cookie*/, const wp<IBase>& /*who*/) {
- // TODO: Implement graceful closure, to close ongoing tx-rx and deinit
- // T=1 stack
- // close(0);
- }
-
- private:
- uint8_t mMaxChannelCount;
- uint8_t mOpenedchannelCount = 0;
- bool mIsEseInitialized = false;
- static std::vector<bool> mOpenedChannels;
- static sp<
- ::android::hardware::secure_element::V1_0::ISecureElementHalCallback>
- mCallbackV1_0;
- static sp<
- ::android::hardware::secure_element::V1_1::ISecureElementHalCallback>
- mCallbackV1_1;
- Return<SecureElementStatus> seHalDeInit();
- ESESTATUS seHalInit();
- Return<SecureElementStatus> internalCloseChannel(uint8_t channelNumber);
-};
-
-} // namespace implementation
-} // namespace V1_0
-} // namespace virtual_iso
-} // namespace nxp
-} // namespace vendor
-
-#endif // VENDOR_NXP_VIRTUAL_ISO_V1_0_SECUREELEMENT_H
diff --git a/snxxx/1.2/android.hardware.secure_element_snxxx@1.2-service.rc b/snxxx/1.2/android.hardware.secure_element_snxxx@1.2-service.rc
deleted file mode 100755
index 3625cce..0000000
--- a/snxxx/1.2/android.hardware.secure_element_snxxx@1.2-service.rc
+++ /dev/null
@@ -1,4 +0,0 @@
-service vendor.secure_element_hal_service /vendor/bin/hw/android.hardware.secure_element_snxxx@1.2-service
- class hal
- user secure_element
- group secure_element
diff --git a/snxxx/Android.bp b/snxxx/Android.bp
deleted file mode 100755
index c7cd477..0000000
--- a/snxxx/Android.bp
+++ /dev/null
@@ -1,64 +0,0 @@
-
-cc_binary {
- relative_install_path: "hw",
- name: "android.hardware.secure_element_snxxx@1.2-service",
- init_rc: ["1.2/android.hardware.secure_element_snxxx@1.2-service.rc"],
- proprietary: true,
- defaults: ["hidl_defaults"],
- srcs: [
- "1.2/NxpEseService.cpp",
- "1.2/SecureElement.cpp",
- "1.2/VirtualISO.cpp",
- "extns/impl/NxpEse.cpp",
- "1.2/OsuHal/src/OsuHalExtn.cpp",
- ],
-
- shared_libs: [
- "android.hardware.secure_element@1.0",
- "android.hardware.secure_element@1.1",
- "android.hardware.secure_element@1.2",
- "ese_spi_nxp_snxxx",
- "libbase",
- "libcutils",
- "libdl",
- "libhardware",
- "libhidlbase",
- "liblog",
- "libutils",
- "libchrome",
- "vendor.nxp.nxpese@1.0",
- "vendor.nxp.nxpnfc@2.0",
- "android.hardware.nfc@1.0",
- "android.hardware.nfc@1.1",
- ],
-
- local_include_dirs: [
- "libese-spi/common/include",
- "libese-spi/p73/common",
- "libese-spi/p73/inc",
- "libese-spi/p73/lib",
- "libese-spi/p73/pal",
- "libese-spi/p73/pal/spi",
- "libese-spi/p73/utils",
- "libese-spi/p73/spm",
- "libese-spi/src/include",
- "1.2/OsuHal/inc",
- "extns/impl",
- ],
-
- cflags: [
- "-DANDROID",
- "-DJCOP_VER_3_1=1",
- "-DJCOP_VER_3_2=2",
- "-DJCOP_VER_3_3=3",
- "-DJCOP_VER_4_0=4",
- "-DJCOP_VER_5_x=5",
- "-DBUILDCFG=1",
- "-DNXP_EXTNS=TRUE",
- "-DNFC_NXP_ESE_VER=JCOP_VER_5_x",
- "-Wall",
- "-Werror",
- "-fexceptions",
- ],
-
-}
diff --git a/snxxx/ese-clients/inc/eSEClient.h b/snxxx/ese-clients/inc/eSEClient.h
deleted file mode 100644
index 425cada..0000000
--- a/snxxx/ese-clients/inc/eSEClient.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*******************************************************************************
- *
- * Copyright 2018-2020 NXP
- *
- * 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.
- *
- ******************************************************************************/
-
-#include <android/hardware/secure_element/1.0/ISecureElementHalCallback.h>
-#include "../../../secure_element_extns/inc/eSEClientIntf.h"
-#include "phNxpEse_Api.h"
-
-#ifndef ESE_UPDATE_2_H_
-#define ESE_UPDATE_2_H_
-
-extern ese_update_state_t ese_update;
-using ::android::hardware::secure_element::V1_0::ISecureElementHalCallback;
-
-void checkEseClientUpdate();
-
-SESTATUS perform_eSEClientUpdate();
-
-void eSEClientUpdate_SE_Thread();
-
-void seteSEClientState(uint8_t state);
-typedef enum {
- ESE = 0,
- EUICC = 1,
-} SEDomainID;
-
-#endif /* ESE_UPDATE_2_H_ */
diff --git a/snxxx/ese-clients/src/eSEClient.cpp b/snxxx/ese-clients/src/eSEClient.cpp
deleted file mode 100644
index f87e80c..0000000
--- a/snxxx/ese-clients/src/eSEClient.cpp
+++ /dev/null
@@ -1,484 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2018-2020 NXP
- *
- * 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.
- *
- ******************************************************************************/
-
-#include "eSEClient.h"
-#include <IChannel.h>
-#include <JcDnld.h>
-#include <LsClient.h>
-#include <dirent.h>
-#include <ese_config.h>
-#include <log/log.h>
-#include <pthread.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <vendor/nxp/nxpnfc/2.0/INxpNfc.h>
-#include "NfcAdaptation.h"
-#include "NxpEse.h"
-#include "hal_nxpese.h"
-#include "phNxpEse_Apdu_Api.h"
-#include "phNxpEse_Spm.h"
-
-using android::sp;
-using android::hardware::hidl_vec;
-using android::hardware::Void;
-using vendor::nxp::nxpese::V1_0::implementation::NxpEse;
-using vendor::nxp::nxpnfc::V2_0::INxpNfc;
-sp<INxpNfc> mHalNxpNfc = nullptr;
-
-void seteSEClientState(uint8_t state);
-
-IChannel_t Ch;
-se_extns_entry se_intf;
-void* eSEClientUpdate_ThreadHandler(void* data);
-void* eSEClientUpdate_Thread(void* data);
-void* eSEUpdate_SE_SeqHandler(void* data);
-void eSEClientUpdate_Thread();
-SESTATUS ESE_ChannelInit(IChannel* ch);
-SESTATUS handleJcopOsDownload();
-void* LSUpdate_Thread(void* data);
-uint8_t performLSUpdate();
-SESTATUS initializeEse(phNxpEse_initMode mode, SEDomainID Id);
-ese_update_state_t ese_update = ESE_UPDATE_COMPLETED;
-SESTATUS eSEUpdate_SeqHandler();
-int16_t SE_Open() { return SESTATUS_SUCCESS; }
-
-void SE_Reset() { phNxpEse_coldReset(); }
-
-bool SE_Transmit(uint8_t* xmitBuffer, int32_t xmitBufferSize,
- uint8_t* recvBuffer, int32_t recvBufferMaxSize,
- int32_t& recvBufferActualSize, int32_t timeoutMillisec) {
- phNxpEse_data cmdData;
- phNxpEse_data rspData;
-
- cmdData.len = xmitBufferSize;
- cmdData.p_data = xmitBuffer;
-
- recvBufferMaxSize++;
- timeoutMillisec++;
- if (phNxpEse_Transceive(&cmdData, &rspData) != ESESTATUS_SUCCESS) {
- ALOGE("%s: Ese Transceive failed", __FUNCTION__);
- }
- recvBufferActualSize = rspData.len;
-
- if (rspData.p_data != NULL && rspData.len) {
- memcpy(&recvBuffer[0], rspData.p_data, rspData.len);
- }
-
- ALOGE("%s: size = 0x%x ", __FUNCTION__, recvBufferActualSize);
- return true;
-}
-
-void SE_JcopDownLoadReset() { phNxpEse_resetJcopUpdate(); }
-
-bool SE_Close(int16_t mHandle) {
- if (mHandle != 0)
- return true;
- else
- return false;
-}
-uint8_t SE_getInterfaceInfo() { return INTF_SE; }
-
-/***************************************************************************
-**
-** Function: checkEseClientUpdate
-**
-** Description: Check the initial condition
- and interafce for eSE Client update for LS and JCOP download
-**
-** Returns: SUCCESS of ok
-**
-*******************************************************************************/
-void checkEseClientUpdate() {
- ALOGD("%s enter: ", __func__);
- checkeSEClientRequired(ESE_INTF_SPI);
- se_intf.isJcopUpdateRequired = getJcopUpdateRequired();
- se_intf.isLSUpdateRequired = getLsUpdateRequired();
- se_intf.sJcopUpdateIntferface = getJcopUpdateIntf();
- se_intf.sLsUpdateIntferface = getLsUpdateIntf();
- if ((se_intf.isJcopUpdateRequired && se_intf.sJcopUpdateIntferface) ||
- (se_intf.isLSUpdateRequired && se_intf.sLsUpdateIntferface))
- seteSEClientState(ESE_UPDATE_STARTED);
-}
-
-/***************************************************************************
-**
-** Function: perform_eSEClientUpdate
-**
-** Description: Perform LS and JCOP download during hal service init
-**
-** Returns: SUCCESS / SESTATUS_FAILED
-**
-*******************************************************************************/
-SESTATUS perform_eSEClientUpdate() {
- ALOGD("%s enter: ", __func__);
-
- eSEClientUpdate_Thread();
- return SESTATUS_SUCCESS;
-}
-
-SESTATUS ESE_ChannelInit(IChannel* ch) {
- ch->open = SE_Open;
- ch->close = SE_Close;
- ch->transceive = SE_Transmit;
- ch->transceiveRaw = SE_Transmit;
- ch->doeSE_Reset = SE_Reset;
- ch->doeSE_JcopDownLoadReset = SE_JcopDownLoadReset;
- ch->getInterfaceInfo = SE_getInterfaceInfo;
- return SESTATUS_SUCCESS;
-}
-
-/*******************************************************************************
-**
-** Function: eSEClientUpdate_Thread
-**
-** Description: Perform eSE update
-**
-** Returns: SUCCESS of ok
-**
-*******************************************************************************/
-void eSEClientUpdate_Thread() {
- SESTATUS status = SESTATUS_FAILED;
- pthread_t thread;
- pthread_attr_t attr;
- pthread_attr_init(&attr);
- pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
- if (pthread_create(&thread, &attr, &eSEClientUpdate_ThreadHandler, NULL) !=
- 0) {
- ALOGD("Thread creation failed");
- status = SESTATUS_FAILED;
- } else {
- status = SESTATUS_SUCCESS;
- ALOGD("Thread creation success");
- }
- pthread_attr_destroy(&attr);
-}
-/*******************************************************************************
-**
-** Function: eSEClientUpdate_Thread
-**
-** Description: Perform eSE update
-**
-** Returns: SUCCESS of ok
-**
-*******************************************************************************/
-void eSEClientUpdate_SE_Thread() {
- SESTATUS status = SESTATUS_FAILED;
- pthread_t thread;
- pthread_attr_t attr;
- pthread_attr_init(&attr);
- pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
- if (pthread_create(&thread, &attr, &eSEUpdate_SE_SeqHandler, NULL) != 0) {
- ALOGD("Thread creation failed");
- status = SESTATUS_FAILED;
- } else {
- status = SESTATUS_SUCCESS;
- ALOGD("Thread creation success");
- }
- pthread_attr_destroy(&attr);
-}
-/*******************************************************************************
-**
-** Function: eSEClientUpdate_ThreadHandler
-**
-** Description: Perform JCOP Download
-**
-** Returns: SUCCESS of ok
-**
-*******************************************************************************/
-void* eSEUpdate_SE_SeqHandler(void* data) {
- (void)data;
- ALOGD("%s Enter\n", __func__);
- eSEUpdate_SeqHandler();
- ALOGD("%s Exit eSEUpdate_SE_SeqHandler\n", __func__);
- return NULL;
-}
-/*******************************************************************************
-**
-** Function: eSEClientUpdate_ThreadHandler
-**
-** Description: Perform JCOP Download
-**
-** Returns: SUCCESS of ok
-**
-*******************************************************************************/
-void* eSEClientUpdate_ThreadHandler(void* data) {
- (void)data;
- int cnt = 0;
-
- ALOGD("%s Enter\n", __func__);
- while (((mHalNxpNfc == nullptr) && (cnt < 3))) {
- mHalNxpNfc = INxpNfc::tryGetService();
- if (mHalNxpNfc == nullptr) ALOGD(": Failed to retrieve the NXP NFC HAL!");
- if (mHalNxpNfc != nullptr) {
- ALOGD("INxpNfc::getService() returned %p (%s)", mHalNxpNfc.get(),
- (mHalNxpNfc->isRemote() ? "remote" : "local"));
- }
- usleep(100 * 1000);
- cnt++;
- }
-
- if (mHalNxpNfc != nullptr) {
- if (!se_intf.isJcopUpdateRequired && mHalNxpNfc->isJcopUpdateRequired()) {
- se_intf.isJcopUpdateRequired = true;
- ALOGD(" se_intf.isJcopUpdateRequired = %d", se_intf.isJcopUpdateRequired);
- }
- if (!se_intf.isLSUpdateRequired && mHalNxpNfc->isLsUpdateRequired()) {
- se_intf.isLSUpdateRequired = true;
- ALOGD("se_intf.isLSUpdateRequired = %d", se_intf.isLSUpdateRequired);
- }
- }
-
- if (se_intf.isJcopUpdateRequired) {
- if (se_intf.sJcopUpdateIntferface == ESE_INTF_NFC) {
- seteSEClientState(ESE_JCOP_UPDATE_REQUIRED);
- return NULL;
- } else if (se_intf.sJcopUpdateIntferface == ESE_INTF_SPI) {
- seteSEClientState(ESE_JCOP_UPDATE_REQUIRED);
- }
- }
-
- if ((ESE_JCOP_UPDATE_REQUIRED != ese_update) &&
- (se_intf.isLSUpdateRequired)) {
- if (se_intf.sLsUpdateIntferface == ESE_INTF_NFC) {
- seteSEClientState(ESE_LS_UPDATE_REQUIRED);
- return NULL;
- } else if (se_intf.sLsUpdateIntferface == ESE_INTF_SPI) {
- seteSEClientState(ESE_LS_UPDATE_REQUIRED);
- }
- }
-
- if ((ese_update == ESE_JCOP_UPDATE_REQUIRED) ||
- (ese_update == ESE_LS_UPDATE_REQUIRED))
- eSEUpdate_SeqHandler();
-
- ALOGD("%s Exit eSEClientUpdate_Thread\n", __func__);
- return NULL;
-}
-
-/*******************************************************************************
-**
-** Function: handleJcopOsDownload
-**
-** Description: Perform JCOP update
-**
-** Returns: SUCCESS of ok
-**
-*******************************************************************************/
-SESTATUS handleJcopOsDownload() {
- SESTATUS status = SESTATUS_FAILED;
- uint8_t retstat;
- status = initializeEse(ESE_MODE_OSU, ESE);
- if (status == SESTATUS_SUCCESS) {
- retstat = JCDNLD_Init(&Ch);
- if (retstat != STATUS_SUCCESS) {
- ALOGE("%s: JCDND initialization failed", __FUNCTION__);
- if (phNxpEse_ResetEndPoint_Cntxt(0) != ESESTATUS_SUCCESS) {
- ALOGE("%s: Reset SE EndPoint failed", __FUNCTION__);
- }
- phNxpEse_close(ESESTATUS_SUCCESS);
- return status;
- } else {
- retstat = JCDNLD_StartDownload();
- if (retstat != SESTATUS_SUCCESS) {
- ALOGE("%s: JCDNLD_StartDownload failed", __FUNCTION__);
- }
- }
- JCDNLD_DeInit();
- if (phNxpEse_ResetEndPoint_Cntxt(0) != ESESTATUS_SUCCESS) {
- ALOGE("%s: Reset SE EndPoint failed", __FUNCTION__);
- }
- phNxpEse_close(ESESTATUS_SUCCESS);
- }
- status = SESTATUS_SUCCESS;
- return status;
-}
-
-/*******************************************************************************
-**
-** Function: performLSUpdate
-**
-** Description: Perform LS update
-**
-** Returns: SUCCESS of ok
-**
-*******************************************************************************/
-uint8_t performLSUpdate() {
- const char* SEterminal = "eSEx";
- bool ret = false;
- char terminalID[5];
- uint8_t status = SESTATUS_FAILED;
- bool isSEPresent = false;
- bool isVISOPresent = false;
- ret = geteSETerminalId(terminalID);
- ALOGI("performLSUpdate Terminal val = %s", terminalID);
- if ((ret) && (strncmp(SEterminal, terminalID, 3) == 0)) {
- isSEPresent = true;
- }
- ret = geteUICCTerminalId(terminalID);
- if ((ret) && (strncmp(SEterminal, terminalID, 3) == 0)) {
- isVISOPresent = true;
- }
- seteSEClientState(ESE_UPDATE_STARTED);
- if (isSEPresent) {
- ALOGE("%s:On eSE domain ", __FUNCTION__);
- status = initializeEse(ESE_MODE_NORMAL, ESE);
- ALOGE("%s:On eSE domain ", __FUNCTION__);
- if (status == SESTATUS_SUCCESS) {
- status = performLSDownload(&Ch);
- if (phNxpEse_ResetEndPoint_Cntxt(ESE) != ESESTATUS_SUCCESS) {
- ALOGE("%s: Reset SE EndPoint failed", __FUNCTION__);
- }
- }
- phNxpEse_close(ESESTATUS_SUCCESS);
- }
- if (isVISOPresent) {
- ALOGE("%s:On eUICC domain ", __FUNCTION__);
- status = initializeEse(ESE_MODE_NORMAL, EUICC);
- if (status == SESTATUS_SUCCESS) {
- status = performLSDownload(&Ch);
- if (phNxpEse_ResetEndPoint_Cntxt(EUICC) != ESESTATUS_SUCCESS) {
- ALOGE("%s: Reset SE EndPoint failed", __FUNCTION__);
- }
- }
- phNxpEse_close(ESESTATUS_SUCCESS);
- }
- return status;
-}
-
-/*******************************************************************************
-**
-** Function: initializeEse
-**
-** Description: Open & Initialize libese
-**
-** Returns: SUCCESS of ok
-**
-*******************************************************************************/
-SESTATUS initializeEse(phNxpEse_initMode mode, SEDomainID Id) {
- uint8_t retstat;
- SESTATUS status = SESTATUS_FAILED;
- phNxpEse_initParams initParams;
- memset(&initParams, 0x00, sizeof(phNxpEse_initParams));
-
- initParams.initMode = mode;
- ALOGE("%s: Mode = %d", __FUNCTION__, mode);
- retstat = phNxpEse_open(initParams);
- if (retstat != ESESTATUS_SUCCESS) {
- return status;
- }
- retstat = phNxpEse_SetEndPoint_Cntxt(Id);
- if (retstat != ESESTATUS_SUCCESS) {
- ALOGE("%s: Set SE EndPoint failed", __FUNCTION__);
- }
- retstat = phNxpEse_init(initParams);
- if (retstat != ESESTATUS_SUCCESS) {
- if (phNxpEse_ResetEndPoint_Cntxt(Id) != ESESTATUS_SUCCESS) {
- ALOGE("%s: Reset SE EndPoint failed", __FUNCTION__);
- }
- phNxpEse_close(ESESTATUS_SUCCESS);
- return status;
- }
- ESE_ChannelInit(&Ch);
- status = SESTATUS_SUCCESS;
- return status;
-}
-
-/*******************************************************************************
-**
-** Function: seteSEClientState
-**
-** Description: Function to set the eSEUpdate state
-**
-** Returns: SUCCESS of ok
-**
-*******************************************************************************/
-void seteSEClientState(uint8_t state) {
- ALOGE("%s: State = %d", __FUNCTION__, state);
- ese_update = (ese_update_state_t)state;
-}
-
-/*******************************************************************************
-**
-** Function: sendeSEUpdateState
-**
-** Description: Notify NFC HAL LS / JCOP download state
-**
-** Returns: SUCCESS of ok
-**
-*******************************************************************************/
-void sendeSEUpdateState(uint8_t state) {
- ALOGE("%s: State = %d", __FUNCTION__, state);
- phNxpEse_SPM_SetEseClientUpdateState(state);
-}
-
-/*******************************************************************************
-**
-** Function: eSEUpdate_SeqHandler
-**
-** Description: ESE client update handler
-**
-** Returns: SUCCESS of ok
-**
-*******************************************************************************/
-SESTATUS eSEUpdate_SeqHandler() {
- switch (ese_update) {
- case ESE_UPDATE_STARTED:
- break;
- case ESE_JCOP_UPDATE_REQUIRED:
- ALOGE("%s: ESE_JCOP_UPDATE_REQUIRED", __FUNCTION__);
- if (se_intf.isJcopUpdateRequired) {
- if (se_intf.sJcopUpdateIntferface == ESE_INTF_SPI) {
- handleJcopOsDownload();
- sendeSEUpdateState(ESE_JCOP_UPDATE_COMPLETED);
- setJcopUpdateRequired(false);
- } else if (se_intf.sJcopUpdateIntferface == ESE_INTF_NFC) {
- return SESTATUS_SUCCESS;
- }
- }
- [[fallthrough]];
- case ESE_JCOP_UPDATE_COMPLETED:
- ALOGE("%s: ESE_JCOP_UPDATE_COMPLETED", __FUNCTION__);
- [[fallthrough]];
- case ESE_LS_UPDATE_REQUIRED:
- if (se_intf.isLSUpdateRequired) {
- if (se_intf.sLsUpdateIntferface == ESE_INTF_SPI) {
- performLSUpdate();
- sendeSEUpdateState(ESE_LS_UPDATE_COMPLETED);
- setLsUpdateRequired(false);
- } else if (se_intf.sLsUpdateIntferface == ESE_INTF_NFC) {
- seteSEClientState(ESE_LS_UPDATE_REQUIRED);
- return SESTATUS_SUCCESS;
- }
- }
- ALOGE("%s: ESE_LS_UPDATE_REQUIRED", __FUNCTION__);
- [[fallthrough]];
- case ESE_LS_UPDATE_COMPLETED:
- ALOGE("%s: ESE_LS_UPDATE_COMPLETED", __FUNCTION__);
- [[fallthrough]];
- case ESE_UPDATE_COMPLETED:
- seteSEClientState(ESE_UPDATE_COMPLETED);
- sendeSEUpdateState(ESE_UPDATE_COMPLETED);
- NxpEse::initSEService();
- NxpEse::initVIrtualISOService();
- ALOGE("%s: ESE_UPDATE_COMPLETED", __FUNCTION__);
- break;
- }
- return SESTATUS_SUCCESS;
-}
diff --git a/snxxx/extns/impl/NxpEse.cpp b/snxxx/extns/impl/NxpEse.cpp
deleted file mode 100755
index c72d162..0000000
--- a/snxxx/extns/impl/NxpEse.cpp
+++ /dev/null
@@ -1,224 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 2018-2021 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.
- *
- ******************************************************************************/
-#include "NxpEse.h"
-#include <android-base/logging.h>
-#include <android-base/stringprintf.h>
-#include "phNxpEse_Api.h"
-#ifdef NXP_BOOTTIME_UPDATE
-#include "eSEClient.h"
-#endif
-
-namespace vendor {
-namespace nxp {
-namespace nxpese {
-namespace V1_0 {
-namespace implementation {
-using android::base::StringPrintf;
-// using android::hardware::secure_element::V1_0::implementation::SecureElement;
-static android::sp<ISecureElementHalCallback> seCallback;
-static android::sp<
- ::android::hardware::secure_element::V1_1::ISecureElementHalCallback>
- seCallback_1_1;
-static android::sp<ISecureElementHalCallback> virtualISOCallback;
-static android::sp<
- ::android::hardware::secure_element::V1_1::ISecureElementHalCallback>
- virtualISOCallback_1_1;
-bool isSeHalV1_1 = false;
-// Methods from ::vendor::nxp::nxpese::V1_0::INxpEse follow.
-Return<void> NxpEse::setSeCallBack(
- const android::sp<ISecureElementHalCallback>& clientCallback) {
- seCallback = clientCallback;
- return Void();
-}
-
-Return<void> NxpEse::setSeCallBack_1_1(
- const sp<
- ::android::hardware::secure_element::V1_1::ISecureElementHalCallback>&
- clientCallback) {
- seCallback_1_1 = clientCallback;
- isSeHalV1_1 = true;
- return Void();
-}
-
-Return<void> NxpEse::setVirtualISOCallBack(
- const android::sp<ISecureElementHalCallback>& clientCallback) {
- virtualISOCallback = clientCallback;
- return Void();
-}
-
-Return<void> NxpEse::setVirtualISOCallBack_1_1(
- const android::sp<
- ::android::hardware::secure_element::V1_1::ISecureElementHalCallback>&
- clientCallback) {
- virtualISOCallback_1_1 = clientCallback;
- isSeHalV1_1 = true;
- return Void();
-}
-void NxpEse::initSEService() {
- ESESTATUS status = ESESTATUS_SUCCESS;
- ESESTATUS deInitStatus = ESESTATUS_SUCCESS;
- phNxpEse_initParams initParams;
- memset(&initParams, 0x00, sizeof(phNxpEse_initParams));
- initParams.initMode = ESE_MODE_NORMAL;
- initParams.mediaType = ESE_PROTOCOL_MEDIA_SPI_APDU_GATE;
-
- if (!seCallback && !isSeHalV1_1) return;
-
- if (!seCallback_1_1 && isSeHalV1_1) return;
-
- status = phNxpEse_open(initParams);
- if (status != ESESTATUS_SUCCESS) {
- goto exit;
- }
-
- status = phNxpEse_SetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- goto exit1;
- }
- status = phNxpEse_init(initParams);
- if (status != ESESTATUS_SUCCESS) {
- goto exit1;
- }
- status = phNxpEse_ResetEndPoint_Cntxt(0);
- if (status != ESESTATUS_SUCCESS) {
- goto exit2;
- }
-
- LOG(INFO) << "ESE SPI init complete !!!";
-exit2:
- deInitStatus = phNxpEse_deInit();
-exit1:
- status = phNxpEse_close(deInitStatus);
-exit:
- if (status == ESESTATUS_SUCCESS) {
- if (isSeHalV1_1)
- seCallback_1_1->onStateChange_1_1(true, "NXP SE HAL init ok");
- else
- seCallback->onStateChange(true);
- } else {
- LOG(ERROR) << "eSE-Hal Init failed";
- if (isSeHalV1_1)
- seCallback_1_1->onStateChange_1_1(false, "NXP SE HAL init not ok");
- else
- seCallback->onStateChange(false);
- }
-}
-
-void NxpEse::initVIrtualISOService() {
- ESESTATUS status = ESESTATUS_SUCCESS;
- phNxpEse_initParams initParams;
- ESESTATUS deInitStatus = ESESTATUS_SUCCESS;
- memset(&initParams, 0x00, sizeof(phNxpEse_initParams));
- initParams.initMode = ESE_MODE_NORMAL;
- initParams.mediaType = ESE_PROTOCOL_MEDIA_SPI_APDU_GATE;
-
- if (!virtualISOCallback && !isSeHalV1_1) return;
-
- if (!virtualISOCallback_1_1 && isSeHalV1_1) return;
-
- status = phNxpEse_SetEndPoint_Cntxt(1);
- if (status != ESESTATUS_SUCCESS) {
- goto exit1;
- }
- status = phNxpEse_init(initParams);
- if (status != ESESTATUS_SUCCESS) {
- goto exit1;
- }
- status = phNxpEse_ResetEndPoint_Cntxt(1);
- if (status != ESESTATUS_SUCCESS) {
- goto exit2;
- }
-
- LOG(INFO) << "ESE SPI init complete !!!";
-exit2:
- deInitStatus = phNxpEse_deInit();
-exit1:
- status = phNxpEse_close(deInitStatus);
-
- if (status == ESESTATUS_SUCCESS) {
- if (isSeHalV1_1)
- virtualISOCallback_1_1->onStateChange_1_1(true, "NXP SE HAL init ok");
- else
- virtualISOCallback->onStateChange(true);
- } else {
- LOG(ERROR) << "eSE-Hal Init failed";
- if (isSeHalV1_1)
- virtualISOCallback_1_1->onStateChange_1_1(false,
- "NXP SE HAL init not ok");
- else
- virtualISOCallback->onStateChange(false);
- }
-}
-#ifdef NXP_BOOTTIME_UPDATE
-Return<void> NxpEse::ioctlHandler(uint64_t ioctlType,
- ese_nxp_IoctlInOutData_t& inpOutData) {
- switch (ioctlType) {
- case HAL_ESE_IOCTL_NFC_JCOP_DWNLD: {
- // nfc_nci_IoctlInOutData_t* inpOutData =
- // (nfc_nci_IoctlInOutData_t*)inpOutData;
- int update_state = inpOutData.inp.data.nxpCmd.p_cmd[0];
- if (update_state == ESE_JCOP_UPDATE_COMPLETED ||
- update_state == ESE_LS_UPDATE_COMPLETED) {
- seteSEClientState(update_state);
- eSEClientUpdate_SE_Thread();
- }
- } break;
- }
- return Void();
-}
-#endif
-
-Return<void> NxpEse::ioctl(uint64_t ioctlType,
- const hidl_vec<uint8_t>& inOutData,
- ioctl_cb _hidl_cb) {
- ese_nxp_IoctlInOutData_t inpOutData;
- ese_nxp_IoctlInOutData_t* pInOutData =
- (ese_nxp_IoctlInOutData_t*)&inOutData[0];
-
- /*data from proxy->stub is copied to local data which can be updated by
- * underlying HAL implementation since it's an inout argument*/
- memcpy(&inpOutData, pInOutData, sizeof(ese_nxp_IoctlInOutData_t));
- ESESTATUS status = phNxpEse_spiIoctl(ioctlType, &inpOutData);
-#ifdef NXP_BOOTTIME_UPDATE
- ioctlHandler(ioctlType, inpOutData);
-#endif
- /*copy data and additional fields indicating status of ioctl operation
- * and context of the caller. Then invoke the corresponding proxy callback*/
- inpOutData.out.ioctlType = ioctlType;
- inpOutData.out.result = status;
-#ifdef NXP_BOOTTIME_UPDATE
- if (ioctlType == HAL_ESE_IOCTL_GET_ESE_UPDATE_STATE) {
- inpOutData.out.data.status =
- (getJcopUpdateRequired() | (getLsUpdateRequired() << 8));
- }
-#endif
- hidl_vec<uint8_t> outputData;
- outputData.setToExternal((uint8_t*)&inpOutData.out,
- sizeof(ese_nxp_ExtnOutputData_t));
- LOG(ERROR) << "GET ESE update state2 = " << inpOutData.out.data.status;
- _hidl_cb(outputData);
- return Void();
-}
-
-// Methods from ::android::hidl::base::V1_0::IBase follow.
-
-} // namespace implementation
-} // namespace V1_0
-} // namespace nxpese
-} // namespace nxp
-} // namespace vendor
diff --git a/snxxx/extns/impl/NxpEse.h b/snxxx/extns/impl/NxpEse.h
deleted file mode 100755
index 8c4ec5f..0000000
--- a/snxxx/extns/impl/NxpEse.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 2018-2019 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.
- *
- ******************************************************************************/
-#ifndef VENDOR_NXP_NXPNFC_V1_0_NXPNFC_H
-#define VENDOR_NXP_NXPNFC_V1_0_NXPNFC_H
-
-#include <android/hardware/secure_element/1.0/ISecureElementHalCallback.h>
-#include <android/hardware/secure_element/1.1/ISecureElement.h>
-#include <android/hardware/secure_element/1.1/ISecureElementHalCallback.h>
-#include <hardware/hardware.h>
-#include <hidl/MQDescriptor.h>
-#include <hidl/Status.h>
-#include <vendor/nxp/nxpese/1.0/INxpEse.h>
-#include "hal_nxpese.h"
-namespace vendor {
-namespace nxp {
-namespace nxpese {
-namespace V1_0 {
-namespace implementation {
-
-using ::android::sp;
-using ::android::hardware::hidl_array;
-using ::android::hardware::hidl_memory;
-using ::android::hardware::hidl_string;
-using ::android::hardware::hidl_vec;
-using ::android::hardware::Return;
-using ::android::hardware::Void;
-using ::android::hardware::secure_element::V1_0::ISecureElementHalCallback;
-using ::android::hidl::base::V1_0::DebugInfo;
-using ::android::hidl::base::V1_0::IBase;
-using ::vendor::nxp::nxpese::V1_0::INxpEse;
-struct NxpEse : public INxpEse {
- Return<void> ioctl(uint64_t ioctlType, const hidl_vec<uint8_t>& inOutData,
- ioctl_cb _hidl_cb) override;
- static Return<void> setSeCallBack(
- const android::sp<ISecureElementHalCallback>& clientCallback);
- static Return<void> setSeCallBack_1_1(
- const android::sp<
- ::android::hardware::secure_element::V1_1::ISecureElementHalCallback>&
- clientCallback);
- static Return<void> setVirtualISOCallBack(
- const android::sp<ISecureElementHalCallback>& clientCallback);
- static Return<void> setVirtualISOCallBack_1_1(
- const android::sp<
- ::android::hardware::secure_element::V1_1::ISecureElementHalCallback>&
- clientCallback);
- static void initSEService();
- static void initVIrtualISOService();
-
- private:
- Return<void> ioctlHandler(uint64_t ioctlType,
- ese_nxp_IoctlInOutData_t& inpOutData);
-};
-
-} // namespace implementation
-} // namespace V1_0
-} // namespace nxpese
-} // namespace nxp
-} // namespace vendor
-
-#endif // VENDOR_NXP_NXPNFC_V1_0_NXPNFC_H
diff --git a/snxxx/extns/impl/hal_nxpese.h b/snxxx/extns/impl/hal_nxpese.h
deleted file mode 100755
index 7dcf0f4..0000000
--- a/snxxx/extns/impl/hal_nxpese.h
+++ /dev/null
@@ -1,169 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 2018-2020 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.
- *
- ******************************************************************************/
-#ifndef ANDROID_HARDWARE_HAL_NXPESE_V1_0_H
-#define ANDROID_HARDWARE_HAL_NXPESE_V1_0_H
-
-#define ESE_NXPNFC_HARDWARE_MODULE_ID "ese_nxp.pn54x"
-
-#define MAX_IOCTL_TRANSCEIVE_CMD_LEN 256
-#define MAX_IOCTL_TRANSCEIVE_RESP_LEN 256
-#define MAX_ATR_INFO_LEN 128
-#define HAL_NFC_IOCTL_FIRST_EVT 0xA0
-enum {
- HAL_ESE_IOCTL_P61_IDLE_MODE = 0,
- HAL_ESE_IOCTL_P61_WIRED_MODE,
- HAL_ESE_IOCTL_P61_PWR_MODE,
- HAL_ESE_IOCTL_P61_DISABLE_MODE,
- HAL_ESE_IOCTL_P61_ENABLE_MODE,
- HAL_ESE_IOCTL_SET_BOOT_MODE,
- HAL_ESE_IOCTL_GET_CONFIG_INFO,
- HAL_ESE_IOCTL_CHECK_FLASH_REQ,
- HAL_ESE_IOCTL_FW_DWNLD,
- HAL_ESE_IOCTL_FW_MW_VER_CHECK,
- HAL_ESE_IOCTL_DISABLE_HAL_LOG,
- HAL_ESE_IOCTL_NXP_TRANSCEIVE,
- HAL_ESE_IOCTL_P61_GET_ACCESS,
- HAL_ESE_IOCTL_P61_REL_ACCESS,
- HAL_ESE_IOCTL_ESE_CHIP_RST,
- HAL_ESE_IOCTL_REL_SVDD_WAIT,
- HAL_ESE_IOCTL_SET_JCP_DWNLD_ENABLE,
- HAL_ESE_IOCTL_SET_JCP_DWNLD_DISABLE,
- HAL_ESE_IOCTL_SET_ESE_SERVICE_PID,
- HAL_ESE_IOCTL_REL_DWP_WAIT,
- HAL_ESE_IOCTL_GET_FEATURE_LIST,
- HAL_ESE_IOCTL_RF_STATUS_UPDATE,
- HAL_ESE_IOCTL_NFC_JCOP_DWNLD,
-#if (NXP_EXTNS == TRUE)
- HAL_ESE_IOCTL_GET_ESE_UPDATE_STATE,
-#endif
-};
-
-/*
- * Data structures provided below are used of Hal Ioctl calls
- */
-/*
- * ese_nxp_ExtnCmd_t shall contain data for commands used for transceive command
- * in ioctl
- */
-typedef struct {
- uint16_t cmd_len;
- uint8_t p_cmd[MAX_IOCTL_TRANSCEIVE_CMD_LEN];
-} ese_nxp_ExtnCmd_t;
-
-/*
- * ese_nxp_ExtnRsp_t shall contain response for command sent in transceive
- * command
- */
-typedef struct {
- uint16_t rsp_len;
- uint8_t p_rsp[MAX_IOCTL_TRANSCEIVE_RESP_LEN];
-} ese_nxp_ExtnRsp_t;
-/*
- * InputData_t :ioctl has multiple subcommands
- * Each command has corresponding input data which needs to be populated in this
- */
-typedef union {
- uint16_t bootMode;
- uint8_t halType;
- ese_nxp_ExtnCmd_t nxpCmd;
- uint32_t timeoutMilliSec;
- long eseServicePid;
-} eseInputData_t;
-/*
- * ese_nxp_ExtnInputData_t :Apart from InputData_t, there are context data
- * which is required during callback from stub to proxy.
- * To avoid additional copy of data while propagating from libese to Adaptation
- * and Esestub to nxphal, common structure is used. As a sideeffect, context
- * data is exposed to libese (Not encapsulated).
- */
-typedef struct {
- /*context to be used/updated only by users of proxy & stub of Ese.hal
- * i.e, EseAdaptation & hardware/interface/Ese.
- */
- eseInputData_t data;
- uint8_t data_source;
- long level;
-} ese_nxp_ExtnInputData_t;
-
-/*
- * outputData_t :ioctl has multiple commands/responses
- * This contains the output types for each ioctl.
- */
-typedef union {
- uint32_t status;
- ese_nxp_ExtnRsp_t nxpRsp;
- uint8_t nxpNciAtrInfo[MAX_ATR_INFO_LEN];
- uint32_t p61CurrentState;
- uint16_t fwUpdateInf;
- uint16_t fwDwnldStatus;
- uint16_t fwMwVerStatus;
- uint8_t chipType;
-} eseOutputData_t;
-
-typedef union {
- uint8_t nfc_jcop_download_state;
-} eseIoctlData_t;
-extern eseIoctlData_t eseioctldata;
-
-/*
- * ese_nxp_ExtnOutputData_t :Apart from outputData_t, there are other
- * information which is required during callback from stub to proxy. For ex
- * (context, result of the operation , type of ioctl which was completed). To
- * avoid additional copy of data while propagating from libese to Adaptation and
- * Esestub to nxphal, common structure is used. As a sideeffect, these data is
- * exposed(Not encapsulated).
- */
-typedef struct {
- /*ioctlType, result & context to be used/updated only by users of
- * proxy & stub of Ese.hal.
- * i.e, EseAdaptation & hardware/interface/Ese
- * These fields shall not be used by libese or halimplementation*/
- uint64_t ioctlType;
- uint32_t result;
- eseOutputData_t data;
-} ese_nxp_ExtnOutputData_t;
-
-/*
- * ese_nxp_IoctlInOutData_t :data structure for input & output
- * to be sent for ioctl command. input is populated by client/proxy side
- * output is provided from server/stub to client/proxy
- */
-typedef struct {
- ese_nxp_ExtnInputData_t inp;
- ese_nxp_ExtnOutputData_t out;
-} ese_nxp_IoctlInOutData_t;
-
-/*
- * nxpese_nxp_device_t :data structure for nxp's extended ese_nxp_device
- * Extra features added are
- * -ioctl(manage sync between and DWP & SPI)
- * -check request for fw download
- */
-typedef struct nxpese_nxp_device {
- // ese_nxp_device_t nxp_device;
- /*
- * (*ioctl)() For P61 power management synchronization
- * between ESE Wired and SPI.
- */
- int (*ioctl)(const struct nxpese_nxp_device* p_dev, long arg, void* p_data);
- /*
- * (*check_fw_dwnld_flag)() Is called to get FW downlaod request.
- */
-} nxpese_nxp_device_t;
-
-#endif // ANDROID_HARDWARE_HAL_NXPESE_V1_0_H
diff --git a/snxxx/libese-spi/Android.bp b/snxxx/libese-spi/Android.bp
deleted file mode 100755
index e7c00ba..0000000
--- a/snxxx/libese-spi/Android.bp
+++ /dev/null
@@ -1,76 +0,0 @@
-cc_library_shared {
-
- name: "ese_spi_nxp_snxxx",
- defaults: ["hidl_defaults"],
- proprietary: true,
-
- srcs: [
- "p73/lib/phNxpEseDataMgr.cpp",
- "p73/lib/phNxpEseProto7816_3.cpp",
- "p73/lib/phNxpEse_Apdu_Api.cpp",
- "p73/lib/phNxpEse_Api.cpp",
- "p73/pal/phNxpEsePal.cpp",
- "p73/pal/EseTransportFactory.cpp",
- "p73/pal/spi/EseSpiTransport.cpp",
- "p73/spm/phNxpEse_Spm.cpp",
- "p73/utils/ese_config.cpp",
- "p73/utils/config.cpp",
- "p73/utils/ringbuffer.cpp",
- "src/adaptation/NfcAdaptation.cpp",
- "src/adaptation/CondVar.cpp",
- "src/adaptation/Mutex.cpp",
- ],
-
- local_include_dirs: [
- "common/include",
- "p73/common",
- "p73/inc",
- "p73/lib",
- "p73/pal",
- "p73/pal/spi",
- "p73/utils",
- "src/include",
- ],
- include_dirs: [
- "hardware/nxp/nfc/snxxx/extns/impl/nxpnfc/2.0",
- "hardware/nxp/secure_element/snxxx/extns/impl",
-],
-
- cflags: [
- "-DANDROID",
- "-DJCOP_VER_3_1=1",
- "-DJCOP_VER_3_2=2",
- "-DJCOP_VER_3_3=3",
- "-DJCOP_VER_4_0=4",
- "-DJCOP_VER_5_x=5",
- "-DBUILDCFG=1",
- "-DNXP_EXTNS=TRUE",
- "-DNFC_NXP_ESE_VER=JCOP_VER_5_x",
- "-Wall",
- "-Werror",
- ],
-
- shared_libs: [
- "android.hardware.nfc@1.0",
- "android.hardware.nfc@1.1",
- "android.hardware.secure_element@1.0",
- "libcutils",
- "libhardware",
- "libhidlbase",
- "libutils",
- "liblog",
- "libbase",
- "libchrome",
- "vendor.nxp.nxpese@1.0",
- "vendor.nxp.nxpnfc@2.0",
- ],
-
- product_variables: {
- debuggable: {
- cflags: [
- "-DDCHECK_ALWAYS_ON"
- ],
- },
- },
-
-}
diff --git a/snxxx/libese-spi/common/include/phNxpEseFeatures.h b/snxxx/libese-spi/common/include/phNxpEseFeatures.h
deleted file mode 100644
index f6fef6c..0000000
--- a/snxxx/libese-spi/common/include/phNxpEseFeatures.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2018-2020 NXP
- *
- * 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.
- *
- ******************************************************************************/
-
-/*
- * NXP ESE features macros definitions
- */
-
-#ifndef NXP_ESE_FEATURES_H
-#define NXP_ESE_FEATURES_H
-
-#define ESE_DEBUG_UTILS_INCLUDED true
-
-#define NXP_POWER_SCHEME_SUPPORT true
-#define NXP_ESE_END_OF_SESSION true
-
-#define NXP_ESE_WTX_RES_DELAY true
-#define NXP_ESE_P73_ISO_RST true
-
-typedef enum OS_VERSION {
- OS_VERSION_DEFAULT = 0,
- OS_VERSION_4_0 = 1,
- OS_VERSION_5_1 = 2,
- OS_VERSION_5_2 = 3,
- OS_VERSION_5_2_2 = 4,
- OS_VERSION_6_2 = 5,
- INVALID_OS_VERSION = 0xFF,
-} phNxpEse_OsVersion_t;
-
-extern phNxpEse_OsVersion_t phNxpEse_getOsVersion();
-extern bool ese_debug_enabled;
-#define GET_CHIP_OS_VERSION() phNxpEse_getOsVersion()
-
-#endif /* end of #ifndef NXP_ESE_FEATURES_H */
diff --git a/snxxx/libese-spi/p73/common/phEseStatus.h b/snxxx/libese-spi/p73/common/phEseStatus.h
deleted file mode 100644
index 80db0b5..0000000
--- a/snxxx/libese-spi/p73/common/phEseStatus.h
+++ /dev/null
@@ -1,222 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2018 - 2019 NXP
- *
- * 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.
- *
- ******************************************************************************/
-/**
- * \addtogroup ISO7816-3_protocol_lib_common
- *
- * @{ */
-
-#ifndef PHESESTATUS_H
-#define PHESESTATUS_H
-
-/*! Internally required by PHESESTVAL. */
-#define PHESESTSHL8 (8U)
-
-/*! Required by PHESESTVAL. */
-#define PHESESTBLOWER ((ESESTATUS)(0x00FFU))
-
-/*!
- * ESE Status Composition Macro
- *
- * This is the macro which must be used to compose status values.
- *
- * phEseCompID Component ID, as defined in phEseCompId.h .
- * phEseStatus Status values, as defined in phEseStatus.h .
- *
- * The macro is not required for the ESESTATUS_SUCCESS value.
- * This is the only return value to be used directly.
- * For all other values it shall be used in assignment and conditional
- *statements, e.g.:
- * ESESTATUS status = PHESESTVAL(phEseCompID, phEseStatus); ...
- * if (status == PHESESTVAL(phEseCompID, phEseStatus)) ...
- */
-#define PHESESTVAL(phEseCompID, phEseStatus) \
- (((phEseStatus) == (ESESTATUS_SUCCESS)) \
- ? (ESESTATUS_SUCCESS) \
- : ((((ESESTATUS)(phEseStatus)) & (PHESESTBLOWER)) | \
- (((uint16_t)(phEseCompID)) << (PHESESTSHL8))))
-
-/*!
- * PHESESTATUS
- * Get grp_retval from Status Code
- */
-#define PHESESTATUS(phEseStatus) ((phEseStatus)&0x00FFU)
-
-/**
- * \ingroup ISO7816-3_protocol_lib_common
- * \brief Ese Channel mode
- *
- */
-typedef enum {
- ESESTATUS_SUCCESS = (0x0000),
-
- ESESTATUS_FAILED = (0x0001),
-
- ESESTATUS_IOCTL_FAILED = -1,
-
- ESESTATUS_INVALID_BUFFER = (0x0002),
-
- ESESTATUS_BUFFER_TOO_SMALL = (0x0003),
-
- ESESTATUS_INVALID_CLA = (0x0004),
-
- ESESTATUS_INVALID_CPDU_TYPE = (0x0005),
-
- ESESTATUS_INVALID_LE_TYPE = (0x0007),
-
- ESESTATUS_INVALID_DEVICE = (0x0006),
-
- ESESTATUS_MORE_FRAME = (0x0008),
-
- ESESTATUS_LAST_FRAME = (0x0009),
-
- ESESTATUS_CRC_ERROR = (0x000A),
-
- ESESTATUS_SOF_ERROR = (0x000B),
-
- ESESTATUS_INSUFFICIENT_RESOURCES = (0x000C),
-
- ESESTATUS_PENDING = (0x000D),
-
- ESESTATUS_BOARD_COMMUNICATION_ERROR = (0x000F),
-
- ESESTATUS_INVALID_STATE = (0x0011),
-
- ESESTATUS_NOT_INITIALISED = (0x0031),
-
- ESESTATUS_ALREADY_INITIALISED = (0x0032),
-
- ESESTATUS_FEATURE_NOT_SUPPORTED = (0x0033),
-
- ESESTATUS_PARITY_ERROR = (0x0034),
-
- ESESTATUS_ALREADY_REGISTERED = (0x0035),
-
- ESESTATUS_CHAINED_FRAME = (0x0036),
-
- ESESTATUS_SINGLE_FRAME = (0x0037),
-
- ESESTATUS_DESELECTED = (0x0038),
-
- ESESTATUS_RELEASED = (0x0039),
-
- ESESTATUS_NOT_ALLOWED = (0x003A),
-
- ESESTATUS_OTHER_ERROR = (0x003C),
-
- ESESTATUS_DRIVER_BUSY = (0x006D),
-
- ESESTATUS_DWNLD_BUSY = (0x006E),
-
- ESESTATUS_BUSY = (0x006F),
-
- ESESTATUS_INVALID_REMOTE_DEVICE = (0x001D),
-
- ESESTATUS_READ_FAILED = (0x0014),
-
- ESESTATUS_WRITE_FAILED = (0x0015),
-
- ESESTATUS_NO_NDEF_SUPPORT = (0x0016),
-
- ESESTATUS_RESET_SEQ_COUNTER_FRAME_RESEND = (0x001A),
-
- ESESTATUS_INVALID_RECEIVE_LENGTH = (0x001B),
-
- ESESTATUS_INVALID_FORMAT = (0x001C),
-
- ESESTATUS_INSUFFICIENT_STORAGE = (0x001F),
-
- ESESTATUS_FRAME_RESEND = (0x0023),
-
- ESESTATUS_WRITE_TIMEOUT = (0x0024),
-
- ESESTATUS_RESPONSE_TIMEOUT = (0x0025),
-
- ESESTATUS_FRAME_RESEND_R_FRAME = (0x0026),
-
- ESESTATUS_SEND_NEXT_FRAME = (0x0027),
-
- ESESTATUS_RECOVERY_STARTED = (0x0028),
-
- ESESTATUS_SEND_R_FRAME = (0x0029),
-
- ESESTATUS_FRAME_RESEND_RNAK = (0x0030),
-
- ESESTATUS_FRAME_SEND_R_FRAME = (0x003B),
-
- ESESTATUS_UNKNOWN_ERROR = (0x00FE),
-
- ESESTATUS_INVALID_PARAMETER = (0x00FF),
-
- ESESTATUS_CMD_ABORTED = (0x0002),
-
- ESESTATUS_NO_TARGET_FOUND = (0x000A),
-
- ESESTATUS_NO_DEVICE_CONNECTED = (0x000B),
-
- ESESTATUS_RESYNCH_REQ = (0x000E),
-
- ESESTATUS_RESYNCH_RES = (0x0010),
-
- ESESTATUS_IFS_REQ = (0x001E),
-
- ESESTATUS_IFS_RES = (0x0017),
-
- ESESTATUS_ABORT_REQ = (0x00F0),
-
- ESESTATUS_ABORT_RES = (0x00F2),
-
- ESESTATUS_WTX_REQ = (0x00F5),
-
- ESESTATUS_WTX_RES = (0x00F6),
-
- ESESTATUS_RESET_REQ = (0x00F7),
-
- ESESTATUS_RESET_RES = (0x00F8),
-
- ESESTATUS_END_APDU_REQ = (0x00F9),
-
- ESESTATUS_END_APDU_RES = (0x00FA),
-
- ESESTATUS_SHUTDOWN = (0x0091),
-
- ESESTATUS_TARGET_LOST = (0x0092),
-
- ESESTATUS_REJECTED = (0x0093),
-
- ESESTATUS_TARGET_NOT_CONNECTED = (0x0094),
-
- ESESTATUS_INVALID_HANDLE = (0x0095),
-
- ESESTATUS_ABORTED = (0x0096),
-
- ESESTATUS_COMMAND_NOT_SUPPORTED = (0x0097),
-
- ESESTATUS_NON_NDEF_COMPLIANT = (0x0098),
-
- ESESTATUS_NOT_ENOUGH_MEMORY = (0x001F),
-
- ESESTATUS_INCOMING_CONNECTION = (0x0045),
-
- ESESTATUS_CONNECTION_SUCCESS = (0x0046),
-
- ESESTATUS_CONNECTION_FAILED = (0x0047),
-
- ESESTATUS_TRANSCEIVE_FAILED = (0x0048),
-} ESESTATUS;
-#endif /* PHESESTATUS_H */
-/** @} */
diff --git a/snxxx/libese-spi/p73/inc/phNxpEse_Apdu_Api.h b/snxxx/libese-spi/p73/inc/phNxpEse_Apdu_Api.h
deleted file mode 100644
index 1f80f83..0000000
--- a/snxxx/libese-spi/p73/inc/phNxpEse_Apdu_Api.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2018-2019,2021 NXP
- *
- * 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.
- *
- ******************************************************************************/
-
-/**
- * \addtogroup ISO7816-4_application_protocol_implementation
- *
- * @{ */
-
-#ifndef _PHNXPESE_APDU_H
-#define _PHNXPESE_APDU_H
-#include <phEseStatus.h>
-
-/**
- * \brief 7816-4 APDU command Header Size
- *
- */
-
-#define MIN_HEADER_LEN 4
-
-/**
- * \ingroup ISO7816-4_application_protocol_implementation
- * \brief Command data unit structure params
- *
- */
-typedef struct phNxpEse_7816_cpdu {
- uint8_t cla; /*!< Class of instruction */
- uint8_t ins; /*!< Instruction code */
- uint8_t p1; /*!< Instruction parameter 1 */
- uint8_t p2; /*!< Instruction parameter 2 */
- uint16_t lc; /*!< No of data present in the data field of the command */
- uint8_t cpdu_type; /*!< 0 - short len, 1 = extended len, this field is valid
- only if le > 0*/
- uint8_t* pdata; /*!< application data*/
- uint8_t le_type; /*!< 0 - Le absent ,1 - one byte le,2 - two byte le or 3 - 3
- byte le*/
- uint32_t le; /*!< le value field */
-} phNxpEse_7816_cpdu_t;
-
-/**
- * \ingroup ISO7816-4_application_protocol_implementation
- * \brief Command data unit structure params
- *
- */
-typedef phNxpEse_7816_cpdu_t* pphNxpEse_7816_cpdu_t;
-
-/**
- * \ingroup ISO7816-4_application_protocol_implementation
- * \brief Response data unit structure params
- *
- */
-typedef struct phNxpEse_7816_rpdu {
- uint8_t sw1; /*!< Status byte most significant byte */
- uint8_t sw2; /*!< Status byte least significant byte */
- uint8_t* pdata; /*!< Buffer allocated by caller*/
- uint16_t len; /*!< Length of the buffer, updated by calling api */
-} phNxpEse_7816_rpdu_t;
-
-/**
- * \ingroup ISO7816-4_application_protocol_implementation
- * \brief Response data unit structure params
- *
- */
-typedef phNxpEse_7816_rpdu_t* pphNxpEse_7816_rpdu_t;
-
-/**
- * \ingroup ISO7816-4_application_protocol_implementation
- * \brief This function prepares C-APDU and sends to p61 and receives response
- *from the p61.
- * also it parses all required fields of the response PDU.
- *
- * \param[in] pCmd - CMD to p61
- * \param[out] pRsp - RSP from p61(all required memory
- *allocated by caller)
- *
- * \retval ESESTATUS_SUCCESS - On Success #pphNxpEse_7816_rpdu_t all fields are
- *filled correctly.
- * else proper error code.
- * \retval ESESTATUS_INVALID_PARAMETER - If any invalid buffer passed from
- *application \n
- * \retval ESESTATUS_INSUFFICIENT_RESOURCES - Any problem occurred during
- *allocating the memory \n
- * \retval ESESTATUS_INVALID_BUFFER - If any invalid buffer received \n
- * \retval ESESTATUS_FAILED - Any other error occurred. \n
- */
-
-ESESTATUS phNxpEse_7816_Transceive(pphNxpEse_7816_cpdu_t pCmd,
- pphNxpEse_7816_rpdu_t pRsp);
-
-#endif /* _PHNXPESE_APDU_H */
-/** @} */
diff --git a/snxxx/libese-spi/p73/inc/phNxpEse_Api.h b/snxxx/libese-spi/p73/inc/phNxpEse_Api.h
deleted file mode 100755
index fc9655d..0000000
--- a/snxxx/libese-spi/p73/inc/phNxpEse_Api.h
+++ /dev/null
@@ -1,459 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2018-2021 NXP
- *
- * 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.
- *
- ******************************************************************************/
-
-/**
- * \addtogroup spi_libese
- * \brief ESE Lib layer interface to application
- * @{ */
-
-#ifndef _PHNXPSPILIB_API_H_
-#define _PHNXPSPILIB_API_H_
-
-#include <phEseStatus.h>
-#include <phNxpEsePal.h>
-
-/**
- * \ingroup spi_libese
- * \brief Ese data buffer
- *
- */
-typedef struct phNxpEse_data {
- uint32_t len; /*!< length of the buffer */
- uint8_t* p_data; /*!< pointer to a buffer */
-} phNxpEse_data;
-
-/**
- * \ingroup spi_libese
- * \brief Ese Channel mode
- *
- */
-typedef enum {
- ESE_MODE_NORMAL = 0, /*!< All wired transaction other OSU */
- ESE_MODE_OSU /*!< Jcop Os update mode */
-} phNxpEse_initMode;
-
-/**
- * \ingroup spi_libese
- * \brief Ese logical interface i.e. MediaType
- *
- */
-typedef enum {
- ESE_PROTOCOL_MEDIA_SPI = 0x08, /*!< Media Type - SPI legacy */
- ESE_PROTOCOL_MEDIA_SPI_APDU_GATE = 0xD0 /*!Media Type - APDU Gate */
-} phNxpEse_mediaType;
-
-typedef enum {
- WTX_ONGOING = 1,
- WTX_END = 2,
-} phNxpEse_wtxState;
-
-typedef enum phNxpEseProto7816_OsType {
- UNKNOWN_MODE = 0,
- JCOP_MODE = 0x1,
- OSU_MODE = 0x2,
-} phNxpEseProto7816_OsType_t;
-
-#define MODE_JCOP 0x01
-#define MODE_OSU 0x02
-#define RESET_APP_WTX_COUNT 0
-
-typedef void(NotifyWtxReq)(phNxpEse_wtxState);
-/**
- * \ingroup spi_libese
- * \brief Ese library init parameters to be set while calling phNxpEse_init
- *
- */
-typedef struct phNxpEse_initParams {
- phNxpEse_initMode initMode; /*!< Ese communication mode */
- phNxpEse_mediaType mediaType; /*!< Logical channel for Ese communication */
- NotifyWtxReq* fPtr_WtxNtf; /*!< Wait extension callback notification*/
-} phNxpEse_initParams;
-
-/*!
- * \brief SEAccess kit MW Android version
- */
-#define NXP_ANDROID_VER (9U)
-
-/*!
- * \brief SEAccess kit MW Major version
- */
-#define ESELIB_MW_VERSION_MAJ (0x0U)
-
-/*!
- * \brief SEAccess kit MW Minor version
- */
-#define ESELIB_MW_VERSION_MIN (0x04)
-
-/*!
- * \brief eSE debugging log Level
- */
-extern bool ese_debug_enabled;
-
-/**
- * \ingroup spi_libese
- *
- * \brief This function is called by Jni/phNxpEse_open during the
- * initialization of the ESE. It initializes protocol stack instance
- * variables.
- *
- * \param[in] initParams - init parameters to be set while calling
- * phNxpEse_init
- *
- * \retval This function return ESESTATUS_SUCCESS (0) in case of success
- * In case of failure returns other failure value.
- *
- */
-ESESTATUS phNxpEse_init(phNxpEse_initParams initParams);
-
-/**
- * \ingroup spi_libese
- *
- * \brief Check if libese has opened
- *
- * \retval return false if it is close, otherwise true.
- *
- */
-bool phNxpEse_isOpen();
-
-/**
- * \ingroup spi_libese
- *
- * \brief This function is used to communicate from nfc-hal to ese-hal
- *
- * \param[in] ioctlType - ioctl cmd
- *\param[out] p_data - value read out
- *
- * \retval This function return ESESTATUS_SUCCESS (0) in case of success
- * In case of failure returns other failure value.
- *
- */
-ESESTATUS phNxpEse_spiIoctl(uint64_t ioctlType, void* p_data);
-/**
- * \ingroup spi_libese
- *
- * \brief This function is called by hal interface api before any
- * communication. It sets the end point variables
- *
- * \param[in] uEndPoint - select the end point type ( END_POINT_ESE = 0,
- * END_POINT_eUICC =1 ).
- *
- * \retval This function return ESESTATUS_SUCCESS (0) in case of success
- * In case of failure returns other failure value.
- *
- */
-ESESTATUS phNxpEse_SetEndPoint_Cntxt(uint8_t uEndPoint);
-
-/**
- * \ingroup spi_libese
- *
- * \brief This function is called by hal interface api before any
- * communication. It resets the end point variables
- *
- * \param[in] uEndPoint - select the end point type ( END_POINT_ESE = 0,
- * END_POINT_eUICC =1 ).
- *
- * \retval This function return ESESTATUS_SUCCESS (0) in case of success
- * In case of failure returns other failure value.
- *
- */
-ESESTATUS phNxpEse_ResetEndPoint_Cntxt(uint8_t uEndPoint);
-
-/**
- * \ingroup spi_libese
- * \brief This function is called by Jni during the
- * initialization of the ESE. It opens the physical connection
- * with ESE () and initializes the protocol stack
- *
- * \param[in] initParams - Initialize with init mode ( normal/osu) and media
- * type(SPI- legacy/ APDU type).
- *
- * \retval ESESTATUS_SUCCESS On Success ESESTATUS_SUCCESS else proper error code
- *
- */
-ESESTATUS phNxpEse_open(phNxpEse_initParams initParams);
-
-/**
- * \ingroup spi_libese
- * \brief This function is called by Jni during the
- * initialization of the ESE. It opens the physical connection
- * with ESE () and creates required client thread for
- * operation. This will get priority access to ESE for timeout period.
- *
- * \param[in] initParams - Initialize with init mode ( normal/osu) and media
- * type(SPI- legacy/ APDU type).
- *
- * \retval ESESTATUS_SUCCESS On Success ESESTATUS_SUCCESS else proper error code
- *
- */
-ESESTATUS phNxpEse_openPrioSession(phNxpEse_initParams initParams);
-
-/**
- * \ingroup spi_libese
- * \brief This function prepares the C-APDU, send to ESE and then receives the
- *response from ESE,
- * decode it and returns data.
- *
- * \param[in] pCmd: Command to ESE
- * \param[out] pRsp: Response from ESE (Returned data to be freed
- *after copying)
- *
- * \retval ESESTATUS_SUCCESS On Success ESESTATUS_SUCCESS else proper error code
- *
- */
-
-ESESTATUS phNxpEse_Transceive(phNxpEse_data* pCmd, phNxpEse_data* pRsp);
-
-/**
- * \ingroup spi_libese
- *
- * \brief This function is called by Jni/phNxpEse_close during the
- * de-initialization of the ESE. It de-initializes protocol stack
- *instance variables
- *
- * \retval This function return ESESTATUS_SUCCESS (0) in case of success
- * In case of failure returns other failure value.
- *
- */
-ESESTATUS phNxpEse_deInit(void);
-
-/**
- * \ingroup spi_libese
- * \brief This function close the ESE interface and free all resources.
- *
- *
- * \retval ESESTATUS_SUCCESS Always return ESESTATUS_SUCCESS (0).
- *
- */
-
-ESESTATUS phNxpEse_close(ESESTATUS deInitStatus = ESESTATUS_SUCCESS);
-
-/**
- * \ingroup spi_libese
- * \brief This function reset the ESE interface and free all
- *
- *
- * \retval ESESTATUS_SUCCESS Always return ESESTATUS_SUCCESS (0).
- *
- */
-ESESTATUS phNxpEse_reset(void);
-
-/**
- * \ingroup spi_libese
- * \brief This function reset the ESE
- *
- *
- * \retval ESESTATUS_SUCCESS Always return ESESTATUS_SUCCESS (0).
- *
- */
-ESESTATUS phNxpEse_resetJcopUpdate(void);
-
-/**
- * \ingroup spi_libese
- * \brief This function reset the P73 through ISO RST pin
- *
- *
- * \retval ESESTATUS_SUCCESS Always return ESESTATUS_SUCCESS (0).
- *
- */
-ESESTATUS phNxpEse_chipReset(void);
-
-/**
- * \ingroup spi_libese
- * \brief This function is used to set IFSC size
- *
- * \param[in] IFS_Size
- *
- * \retval ESESTATUS_SUCCESS Always return ESESTATUS_SUCCESS (0).
- *
- */
-ESESTATUS phNxpEse_setIfs(uint16_t IFS_Size);
-
-/**
- * \ingroup spi_libese
- * \brief This function is used to get the ATR data from ESE
- *
- * \param[out] pATR
- *
- * \retval ESESTATUS_SUCCESS Always return ESESTATUS_SUCCESS (0).
- *
- */
-ESESTATUS phNxpEse_getAtr(phNxpEse_data* pATR);
-
-/**
- * \ingroup spi_libese
- * \brief This function sends the S-frame to indicate END_OF_APDU
- *
- *
- * \retval ESESTATUS_SUCCESS Always return ESESTATUS_SUCCESS (0).
- *
- */
-ESESTATUS phNxpEse_EndOfApdu(void);
-
-/**
- * \ingroup spi_libese
- * \brief This function suspends execution of the calling thread for
- * (at least) usec microseconds
- *
- * \param[in] usec
- *
- * \retval ESESTATUS_SUCCESS Always return ESESTATUS_SUCCESS (0).
- *
- */
-ESESTATUS phNxpEse_Sleep(uint32_t usec);
-
-/**
- * \ingroup spi_libese
- * \brief This function updates destination buffer with val
- * data in len size
- *
- * \param[in] buff - Array to be updated
- * \param[in] val - value to be updated
- * \param[in] len - length of array to be updated
- *
- * \retval void
- *
- */
-void* phNxpEse_memset(void* buff, int val, size_t len);
-
-/**
- * \ingroup spi_libese
- * \brief This function copies source buffer to destination buffer
- * data in len size
- *
- * \param[in] dest - Destination array to be updated
- * \param[in] src - Source array to be updated
- * \param[in] len - length of array to be updated
- *
- * \retval void
- *
- */
-void* phNxpEse_memcpy(void* dest, const void* src, size_t len);
-
-/**
- * \ingroup spi_libese
- * \brief This function suspends allocate memory
- *
- * \param[in] size
- *
- * \retval allocated memory.
- *
- */
-void* phNxpEse_memalloc(uint32_t size);
-
-/**
- * \ingroup spi_libese
- * \brief This is utility function for runtime heap memory allocation
- *
- *\param[in] dataType - data type
- * \param[in] size - number of bytes to be allocated
- *
- * \retval void
- *
- */
-void* phNxpEse_calloc(size_t dataType, size_t size);
-
-/**
- * \ingroup spi_libese
- * \brief This is utility function for freeeing heap memory allocated
- *
- * \param[in] ptr - Address pointer to previous allocation
- *
- * \retval void
- *
- */
-void phNxpEse_free(void* ptr);
-
-/**
- * \ingroup spi_libese
- * \brief This function performs disable/enable power control
- *
- *
- * \retval ESESTATUS_SUCCESS Always return ESESTATUS_SUCCESS (0).
- *
- */
-ESESTATUS phNxpEse_DisablePwrCntrl(void);
-
-/**
- * \ingroup spi_libese
- * \brief This function is used to get the ESE timer status
- *
- * \param[out] timer_buffer
- *
- * \retval ESESTATUS_SUCCESS Always return ESESTATUS_SUCCESS (0).
- *
- */
-ESESTATUS phNxpEse_GetEseStatus(phNxpEse_data* timer_buffer);
-
-/**
- * \ingroup spi_libese
- * \brief This function power recycles the ESE
- * (using prop. FW command) by talking to NFC HAL
- *
- * Note:
- * After cold reset, phNxpEse_init need to be called to
- * reset the host AP T=1 stack parameters
- *
- *
- * \retval ESESTATUS_SUCCESS Always return ESESTATUS_SUCCESS (0).
- *
- */
-ESESTATUS phNxpEse_coldReset(void);
-
-/**
- * \ingroup spi_libese
- * \brief This function notifies SE hal service if it registers
- *
- * \param[out] state - WTX_ONGOIGN/WTX_END
- *
- * \retval void.
- *
- */
-void phNxpEse_NotifySEWtxRequest(phNxpEse_wtxState state);
-
-/**
- * \ingroup ISO7816-3_protocol_lib
- * \brief This function is used to get OS mode(JCOP/OSU)
- *
- * \retval OS mode(JCOP/OSU).
- *
- */
-phNxpEseProto7816_OsType_t phNxpEse_GetOsMode(void);
-
-/**
- * \ingroup spi_libese
- * \brief This function enable/disable resetprotection
- *
- * \param[in] flag - indicated enable or disable resetprotection.
- *
- * \retval ESESTATUS_SUCCESS Always return ESESTATUS_SUCCESS (0).
- *
- */
-ESESTATUS phNxpEse_doResetProtection(bool flag);
-
-/**
- * \ingroup spi_libese
- * \brief This function is used to set the wtx count limit
- *
- * \param[in] wtxCount - value to set for wtx count limit
- *
- * \retval void.
- *
- */
-void phNxpEse_setWtxCountLimit(unsigned long int wtxCount);
-/** @} */
-#endif /* _PHNXPSPILIB_API_H_ */
diff --git a/snxxx/libese-spi/p73/lib/phNxpEseDataMgr.cpp b/snxxx/libese-spi/p73/lib/phNxpEseDataMgr.cpp
deleted file mode 100755
index 1267c07..0000000
--- a/snxxx/libese-spi/p73/lib/phNxpEseDataMgr.cpp
+++ /dev/null
@@ -1,165 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2018-2019 NXP
- *
- * 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.
- *
- ******************************************************************************/
-#define LOG_TAG "NxpEseHal"
-#include <log/log.h>
-#include <phNxpEseDataMgr.h>
-#include <phNxpEsePal.h>
-
-static phNxpEse_sCoreRecvBuff_List_t *head = NULL, *current = NULL;
-static uint32_t total_len = 0;
-
-static ESESTATUS phNxpEse_DeletList(phNxpEse_sCoreRecvBuff_List_t* head);
-static ESESTATUS phNxpEse_GetDataFromList(uint32_t* data_len, uint8_t* pbuff);
-/******************************************************************************
- * Function phNxpEse_GetData
- *
- * Description This function update the len and provided buffer
- *
- * Returns On Success ESESTATUS_SUCCESS else proper error code
- *
- ******************************************************************************/
-ESESTATUS phNxpEse_GetData(uint32_t* data_len, uint8_t** pbuffer) {
- uint32_t total_data_len = 0;
- uint8_t* pbuff = NULL;
- ESESTATUS status = ESESTATUS_FAILED;
-
- if (total_len > 0) {
- pbuff = (uint8_t*)phNxpEse_memalloc(total_len);
- if (NULL != pbuff) {
- if (ESESTATUS_SUCCESS ==
- phNxpEse_GetDataFromList(&total_data_len, pbuff)) {
- if (total_data_len == total_len) {
- /***** Success Case *****/
- *pbuffer = pbuff;
- *data_len = total_data_len;
- phNxpEse_DeletList(head);
- head = NULL;
- current = NULL;
- total_len = 0;
- status = ESESTATUS_SUCCESS;
- } else {
- ALOGD_IF(ese_debug_enabled,
- "%s Mismatch of len total_data_len %d total_len %d",
- __FUNCTION__, total_data_len, total_len);
- phNxpEse_free(pbuff);
- }
- } else {
- ALOGE("%s phNxpEse_GetDataFromList failed", __FUNCTION__);
- phNxpEse_free(pbuff);
- }
- } else {
- ALOGE("%s Error in malloc ", __FUNCTION__);
- status = ESESTATUS_NOT_ENOUGH_MEMORY;
- }
- } else {
- ALOGD_IF(ese_debug_enabled, "%s total_len = %d", __FUNCTION__, total_len);
- }
-
- if (ESESTATUS_SUCCESS != status) {
- *pbuffer = NULL;
- *data_len = 0;
- }
- ALOGD_IF(ese_debug_enabled, "%s exit status = %d", __FUNCTION__, status);
- return status;
-}
-
-/******************************************************************************
- * Function phNxpEse_StoreDatainList
- *
- * Description This function stores the received data in linked list
- *
- * Returns On Success ESESTATUS_SUCCESS else proper error code
- *
- ******************************************************************************/
-ESESTATUS phNxpEse_StoreDatainList(uint32_t data_len, uint8_t* pbuff) {
- phNxpEse_sCoreRecvBuff_List_t* newNode = NULL;
-
- newNode = (phNxpEse_sCoreRecvBuff_List_t*)phNxpEse_memalloc(
- sizeof(phNxpEse_sCoreRecvBuff_List_t));
- if (newNode == NULL) {
- ALOGE("%s Error in malloc ", __FUNCTION__);
- return ESESTATUS_NOT_ENOUGH_MEMORY;
- }
- newNode->pNext = NULL;
- newNode->tData.wLen = data_len;
- phNxpEse_memcpy(newNode->tData.sbuffer, pbuff, data_len);
- total_len += data_len;
- if (head == NULL) {
- head = newNode;
- current = newNode;
- } else {
- current->pNext = newNode;
- current = newNode;
- }
- return ESESTATUS_SUCCESS;
-}
-
-/******************************************************************************
- * Function phNxpEse_GetDataFromList
- *
- * Description This function copies all linked list data in provided buffer
- *
- * Returns On Success ESESTATUS_SUCCESS else proper error code
- *
- ******************************************************************************/
-static ESESTATUS phNxpEse_GetDataFromList(uint32_t* data_len, uint8_t* pbuff) {
- phNxpEse_sCoreRecvBuff_List_t* new_node;
- uint32_t offset = 0;
- ALOGD_IF(ese_debug_enabled, "%s Enter ", __FUNCTION__);
- if (head == NULL || pbuff == NULL) {
- return ESESTATUS_FAILED;
- }
-
- new_node = head;
- while (new_node != NULL) {
- phNxpEse_memcpy((pbuff + offset), new_node->tData.sbuffer,
- new_node->tData.wLen);
- offset += new_node->tData.wLen;
- new_node = new_node->pNext;
- }
- *data_len = offset;
- ALOGD_IF(ese_debug_enabled, "%s Exit ", __FUNCTION__);
- return ESESTATUS_SUCCESS;
-}
-
-/******************************************************************************
- * Function phNxpEse_DeletList
- *
- * Description This function deletes all nodes from linked list
- *
- * Returns On Success ESESTATUS_SUCCESS else proper error code
- *
- ******************************************************************************/
-static ESESTATUS phNxpEse_DeletList(phNxpEse_sCoreRecvBuff_List_t* head) {
- ESESTATUS status = ESESTATUS_SUCCESS;
- phNxpEse_sCoreRecvBuff_List_t *current, *next;
- current = head;
-
- if (head == NULL) {
- return ESESTATUS_FAILED;
- }
-
- while (current != NULL) {
- next = current->pNext;
- phNxpEse_free(current);
- current = NULL;
- current = next;
- }
- head = NULL;
- return status;
-}
diff --git a/snxxx/libese-spi/p73/lib/phNxpEseDataMgr.h b/snxxx/libese-spi/p73/lib/phNxpEseDataMgr.h
deleted file mode 100644
index 77fea80..0000000
--- a/snxxx/libese-spi/p73/lib/phNxpEseDataMgr.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2018-2019 NXP
- *
- * 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.
- *
- ******************************************************************************/
-#ifndef _PHNXPESE_RECVMGR_H_
-#define _PHNXPESE_RECVMGR_H_
-#include <phNxpEse_Internal.h>
-
-/*!
- * \brief eSE Data buffer structure
- *
- *
- */
-typedef struct phNxpEse_DataPacket {
- uint8_t sbuffer[MAX_DATA_LEN]; /*!<buffer to be used to store the received
- packet */
- uint16_t wLen; /*!<hold the length of the buffer */
-} phNxpEse_DataPacket_t;
-
-/*!
- * \brief eSE data receive buffer linkedlist
- *
- *
- */
-typedef struct phNxpEse_sCoreRecvBuff_List {
- phNxpEse_DataPacket_t
- tData; /*!<buffer to be used to store the received payload */
- struct phNxpEse_sCoreRecvBuff_List*
- pNext; /*!<pointer to the next node present in lined list*/
-} phNxpEse_sCoreRecvBuff_List_t;
-
-ESESTATUS phNxpEse_GetData(uint32_t* data_len, uint8_t** pbuff);
-ESESTATUS phNxpEse_StoreDatainList(uint32_t data_len, uint8_t* pbuff);
-
-#endif /* PHNXPESE_RECVMGR_H */
diff --git a/snxxx/libese-spi/p73/lib/phNxpEseProto7816_3.cpp b/snxxx/libese-spi/p73/lib/phNxpEseProto7816_3.cpp
deleted file mode 100755
index bf1aad2..0000000
--- a/snxxx/libese-spi/p73/lib/phNxpEseProto7816_3.cpp
+++ /dev/null
@@ -1,2231 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2018-2021 NXP
- *
- * 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.
- *
- ******************************************************************************/
-#define LOG_TAG "NxpEseHal"
-#include <log/log.h>
-#include <phNxpEseProto7816_3.h>
-
-/**
- * \addtogroup ISO7816-3_protocol_lib
- *
- * @{ */
-
-/**
- * \ingroup ISO7816-3_protocol_lib
- * \brief This function is used to reset the 7816 protocol stack instance
- *
- *
- */
-static ESESTATUS phNxpEseProto7816_ResetProtoParams(void);
-
-/**
- * \ingroup ISO7816-3_protocol_lib
- * \brief This internal function is called send the data to ESE
- *\param[in] data_len - data len
- *\param[in] p_data -address to raw data
- *
- */
-static ESESTATUS phNxpEseProto7816_SendRawFrame(uint32_t data_len,
- uint8_t* p_data);
-
-/**
- * \ingroup ISO7816-3_protocol_lib
- * \brief This internal function is called read the data from the ESE
- *\param[in] data_len - data len
- *\param[in] pp_data -address to raw data
- *
- */
-static ESESTATUS phNxpEseProto7816_GetRawFrame(uint32_t* data_len,
- uint8_t** pp_data);
-
-/**
- * \ingroup ISO7816-3_protocol_lib
- * \brief This internal function is called compute the LRC
- *\param[in] p_buff - raw data
- *\param[in] offset -address to raw data
- *\param[in] length - length of data.
- *\retval LRC value.
- *
- */
-static uint8_t phNxpEseProto7816_ComputeLRC(unsigned char* p_buff,
- uint32_t offset, uint32_t length);
-
-/**
- * \ingroup ISO7816-3_protocol_lib
- * \brief This internal function is called compute and compare the
- * received LRC of the received data
- *\param[in] data_len - raw data
- *\param[in] p_data -address to raw data
- *
- */
-static ESESTATUS phNxpEseProto7816_CheckLRC(uint32_t data_len, uint8_t* p_data);
-
-/**
- * \ingroup ISO7816-3_protocol_lib
- * \brief This internal function is called to send S-frame with all
- * updated 7816-3 headers
- *\param[in] sFrameData -S frame APDU
- *
- */
-static ESESTATUS phNxpEseProto7816_SendSFrame(sFrameInfo_t sFrameData);
-
-/**
- * \ingroup ISO7816-3_protocol_lib
- * \brief This internal function is called to send I-frame with all
- * updated 7816-3 headers
- *\param[in] iFrameData -I frame APDU
- *
- */
-static ESESTATUS phNxpEseProto7816_SendIframe(iFrameInfo_t iFrameData);
-
-/**
- * \ingroup ISO7816-3_protocol_lib
- * \brief This internal function is called to send R-frame with all
- *updated 7816-3 headers
- *\param[in] rFrameType -R frame APDU
- *
- */
-static ESESTATUS phNxpEseProto7816_sendRframe(rFrameTypes_t rFrameType);
-
-/**
- * \ingroup ISO7816-3_protocol_lib
- * \brief This internal function is called to set the context for first
- *I-frame. Not applicable for the first I-frame of the transceive
- *
- */
-static ESESTATUS phNxpEseProto7816_SetFirstIframeContxt(void);
-
-/**
- * \ingroup ISO7816-3_protocol_lib
- * \brief This internal function is called to set the context for next
- *I-frame. Not applicable for the first I-frame of the transceive
- *
- */
-static ESESTATUS phNxpEseProto7816_SetNextIframeContxt(void);
-
-/**
- * \ingroup ISO7816-3_protocol_lib
- * \brief This internal function is called to push I-frame data to internal
- *structure. \param[in] p_data -raw data buffer \param[in] data_len -data
- *length
- *
- */
-static ESESTATUS phNxpEseProto7816_SaveIframeData(uint8_t* p_data,
- uint32_t data_len);
-
-/**
- * \ingroup ISO7816-3_protocol_lib
- * \brief This internal function is called to do reset the recovery
- *pareameters
- *
- */
-static ESESTATUS phNxpEseProto7816_ResetRecovery(void);
-
-/**
- * \ingroup ISO7816-3_protocol_lib
- * \brief This internal function is called when 7816-3 stack failed to
- *recover after PH_PROTO_7816_FRAME_RETRY_COUNT, and the interface has
- *to be recovered
- *
- */
-static ESESTATUS phNxpEseProto7816_RecoverySteps(void);
-
-/**
- * \ingroup ISO7816-3_protocol_lib
- * \brief This internal function is used to
- * 1. Identify the received frame
- * 2. If the received frame is I-frame with expected sequence
- number, store it or else send R-NACK
- 3. If the received frame is R-frame,
- 3.1 R-ACK with expected seq. number: Send the next
- chained I-frame
- 3.2 R-ACK with different sequence number: Send the R-Nack
- 3.3 R-NACK: Re-send the last frame
- 4. If the received frame is S-frame, send back the correct
- S-frame response.
- *\param[in] p_data -address of data.
- *\param[in] data_len -length of the frame
- *
- */
-static ESESTATUS phNxpEseProto7816_DecodeFrame(uint8_t* p_data,
- uint32_t data_len);
-
-/**
- * \ingroup ISO7816-3_protocol_lib
- * \brief This internal function is used to
- * 1. Check the LRC
- * 2. Initiate decoding of received frame of data.
- *
- */
-static ESESTATUS phNxpEseProto7816_ProcessResponse(void);
-
-/**
- * \ingroup ISO7816-3_protocol_lib
- * \brief This internal function is used to
- * 1. Send the raw data received from application after
- *computing LRC
- * 2. Receive the response data from ESE, decode, process
- *and
- * store the data.
- *
- */
-static ESESTATUS TransceiveProcess(void);
-
-/**
- * \ingroup ISO7816-3_protocol_lib
- * \brief This internal function is used to
- * 1. Send propreitary S-Frame command for resynch
- *T=1 sequence at client
- *
- */
-static ESESTATUS phNxpEseProto7816_RSync(void);
-
-/**
- * \ingroup ISO7816-3_protocol_lib
- * \brief This function is used to reset the 7816 protocol stack
- *
- */
-static ESESTATUS phNxpEseProto7816_ResetProtoParams(void);
-
-/**
- * \ingroup ISO7816-3_protocol_lib
- * \brief This function is used to send the spi hard reset command
- *
- */
-static ESESTATUS phNxpEseProto7816_HardReset(void);
-
-/**
- * \ingroup ISO7816-3_protocol_lib
- * \brief This internal function is to decode the secure timer.
- * value from the payload
- *\param[in] frameOffset -To get the L of TLV
- *\param[in] secureTimer -V of TLV: Retrieve each byte(4 byte) and push it
- *to get the secure timer value (unsigned long) \param[in] p_data -pointer to
- *data.
- *
- */
-static void phNxpEseProto7816_DecodeSecureTimer(uint8_t* frameOffset,
- unsigned int* secureTimer,
- uint8_t* p_data);
-
-/**
- * \ingroup ISO7816-3_protocol_lib
- * \brief This internal function is to decode S-frame payload.
- *\param[in] p_data -Raw Data IFS.
- *
- */
-static void phNxpEseProto7816_DecodeSFrameIFSData(uint8_t* p_data);
-
-/**
- * \ingroup ISO7816-3_protocol_lib
- * \brief This internal function is to decode S-frame (ATR) payload.
- *\param[in] p_data -ATR TLV.
- *
- */
-static void phNxpEseProto7816_DecodeSFrameATRData(uint8_t* p_data);
-
-/**
- * \ingroup ISO7816-3_protocol_lib
- * \brief This internal function is to decode S-frame (secure timer TLV)
- *payload. \param[in] p_data -raw data - secure timer TLV.
- *
- */
-static void phNxpEseProto7816_DecodeSFrameSecureTimerData(uint8_t* p_data);
-
-/**
- * \ingroup ISO7816-3_protocol_lib
- * \brief This internal function is to notify either WTX_ONGOING ot
- *WTX_END \param[in] state - Either WTX_ONGOING/WTX_END
- *
- */
-static void phNxpEseProto7816_CheckAndNotifyWtx(phNxpEse_wtxState state);
-
-/**
- * \ingroup ISO7816-3_protocol_lib
- * \brief This internal function to check Last sent frame is S-Frame
- * request and if received block is not S-Frame response
- * re-send Last S-frame request
- */
-static bool phNxpEseProto7816_ResendLastSFrameReq(void);
-/*!
- * \brief 7816_3 protocol stack parameter variable instance
- */
-static phNxpEseProto7816_t phNxpEseProto7816_3_Var;
-
-/*!
- * \brief 7816_3 protocol stack instance - pointer variable
- */
-static phNxpEseProto7816_t phNxpEseProto7816_ptr[MAX_END_POINTS];
-
-/******************************************************************************
- * Function phNxpEseProto7816_SendRawFrame
- *
- * Description This internal function is called send the data to ESE
- *
- * Returns On success return true or else false.
- *
- ******************************************************************************/
-static ESESTATUS phNxpEseProto7816_SendRawFrame(uint32_t data_len,
- uint8_t* p_data) {
- ESESTATUS status = ESESTATUS_FAILED;
- ALOGD_IF(ese_debug_enabled, "Enter %s ", __FUNCTION__);
- status = phNxpEse_WriteFrame(data_len, p_data);
- if (ESESTATUS_SUCCESS != status) {
- ALOGE("%s Error phNxpEse_WriteFrame\n", __FUNCTION__);
- } else {
- ALOGD_IF(ese_debug_enabled, "%s phNxpEse_WriteFrame Success \n",
- __FUNCTION__);
- }
- ALOGD_IF(ese_debug_enabled, "Exit %s ", __FUNCTION__);
- return status;
-}
-
-/******************************************************************************
- * Function phNxpEseProto7816_GetRawFrame
- *
- * Description This internal function is called read the data from the ESE
- *
- * Returns On success return true or else false.
- *
- ******************************************************************************/
-static ESESTATUS phNxpEseProto7816_GetRawFrame(uint32_t* data_len,
- uint8_t** pp_data) {
- ESESTATUS status = ESESTATUS_FAILED;
-
- status = phNxpEse_read(data_len, pp_data);
- if (ESESTATUS_SUCCESS != status) {
- ALOGE("%s phNxpEse_read failed , status : 0x%x", __FUNCTION__, status);
- }
- return status;
-}
-
-/******************************************************************************
- * Function phNxpEseProto7816_ComputeLRC
- *
- * Description This internal function is called compute the LRC
- *
- * Returns On success return true or else false.
- *
- ******************************************************************************/
-static uint8_t phNxpEseProto7816_ComputeLRC(unsigned char* p_buff,
- uint32_t offset, uint32_t length) {
- uint32_t LRC = 0, i = 0;
- ALOGD_IF(ese_debug_enabled, "Enter %s ", __FUNCTION__);
- for (i = offset; i < length; i++) {
- LRC = LRC ^ p_buff[i];
- }
- ALOGD_IF(ese_debug_enabled, "Exit %s ", __FUNCTION__);
- return (uint8_t)LRC;
-}
-
-/******************************************************************************
- * Function phNxpEseProto7816_CheckLRC
- *
- * Description This internal function is called compute and compare the
- * received LRC of the received data
- *
- * Returns On success return true or else false.
- *
- ******************************************************************************/
-static ESESTATUS phNxpEseProto7816_CheckLRC(uint32_t data_len,
- uint8_t* p_data) {
- ESESTATUS status = ESESTATUS_SUCCESS;
- uint8_t calc_crc = 0;
- uint8_t recv_crc = 0;
- ALOGD_IF(ese_debug_enabled, "Enter %s len %d", __FUNCTION__, data_len);
- if (data_len > 0) {
- recv_crc = p_data[data_len - 1];
-
- /* calculate the CRC after excluding CRC */
- calc_crc = phNxpEseProto7816_ComputeLRC(p_data, 1, (data_len - 1));
- ALOGD_IF(ese_debug_enabled, "Received LRC:0x%x Calculated LRC:0x%x",
- recv_crc, calc_crc);
- if (recv_crc != calc_crc) {
- status = ESESTATUS_FAILED;
- ALOGE("%s LRC failed", __FUNCTION__);
- }
- } else {
- status = ESESTATUS_FAILED;
- ALOGE("%s LRC failed length = 0", __FUNCTION__);
- }
- ALOGD_IF(ese_debug_enabled, "Exit %s ", __FUNCTION__);
- return status;
-}
-
-/******************************************************************************
- * Function phNxpEseProto7816_SendSFrame
- *
- * Description This internal function is called to send S-frame with all
- * updated 7816-3 headers
- *
- * Returns On success return true or else false.
- *
- ******************************************************************************/
-static ESESTATUS phNxpEseProto7816_SendSFrame(sFrameInfo_t sFrameData) {
- ESESTATUS status = ESESTATUS_FAILED;
- uint32_t frame_len = 0;
- uint8_t* p_framebuff = NULL;
- uint8_t pcb_byte = 0;
- uint8_t lenIFS = 0;
- ALOGD_IF(ese_debug_enabled, "Enter %s ", __FUNCTION__);
- sFrameInfo_t sframeData = sFrameData;
- /* This update is helpful in-case a R-NACK is transmitted from the MW */
- phNxpEseProto7816_3_Var.lastSentNonErrorframeType = SFRAME;
- switch (sframeData.sFrameType) {
- case RESYNCH_REQ:
- frame_len = (PH_PROTO_7816_HEADER_LEN + PH_PROTO_7816_CRC_LEN);
- p_framebuff = (uint8_t*)phNxpEse_memalloc(frame_len * sizeof(uint8_t));
- if (NULL == p_framebuff) {
- return ESESTATUS_FAILED;
- }
- p_framebuff[2] = 0;
- p_framebuff[3] = 0x00;
-
- pcb_byte |= PH_PROTO_7816_S_BLOCK_REQ; /* PCB */
- pcb_byte |= PH_PROTO_7816_S_RESYNCH;
- break;
- case IFS_REQ:
- frame_len = (PH_PROTO_7816_HEADER_LEN + PH_PROTO_7816_CRC_LEN);
- lenIFS = 0;
- if (IFSC_SIZE_SEND < phNxpEseProto7816_3_Var.currentIFSDSize) {
- frame_len += 2;
- lenIFS = 2;
- } else {
- frame_len += 1;
- lenIFS = 1;
- }
-
- p_framebuff = (uint8_t*)phNxpEse_memalloc(frame_len * sizeof(uint8_t));
- if (NULL == p_framebuff) {
- return ESESTATUS_FAILED;
- }
- p_framebuff[2] = lenIFS;
- if (2 == lenIFS) {
- p_framebuff[3] = (phNxpEseProto7816_3_Var.currentIFSDSize >> 8);
- p_framebuff[4] =
- (phNxpEseProto7816_3_Var.currentIFSDSize & EXTENDED_FRAME_MARKER);
- } else {
- p_framebuff[3] = phNxpEseProto7816_3_Var.currentIFSDSize;
- }
-
- pcb_byte |= PH_PROTO_7816_S_BLOCK_REQ; /* PCB */
- pcb_byte |= IFS_REQ;
- break;
- case INTF_RESET_REQ:
- frame_len = (PH_PROTO_7816_HEADER_LEN + PH_PROTO_7816_CRC_LEN);
- p_framebuff = (uint8_t*)phNxpEse_memalloc(frame_len * sizeof(uint8_t));
- if (NULL == p_framebuff) {
- return ESESTATUS_FAILED;
- }
- p_framebuff[2] = 0;
- p_framebuff[3] = 0x00;
-
- pcb_byte |= PH_PROTO_7816_S_BLOCK_REQ; /* PCB */
- pcb_byte |= PH_PROTO_7816_S_RESET;
- break;
- case PROP_END_APDU_REQ:
- frame_len =
- (PH_PROTO_7816_HEADER_LEN + PH_PROTO_7816_CRC_LEN + sframeData.len);
- p_framebuff = (uint8_t*)phNxpEse_memalloc(frame_len * sizeof(uint8_t));
- if (NULL == p_framebuff) {
- return ESESTATUS_FAILED;
- }
- p_framebuff[2] = sframeData.len;
- if (!sframeData.len)
- p_framebuff[3] = PH_PROTO_7816_VALUE_ZERO;
- else
- phNxpEse_memcpy(&(p_framebuff[3]), sframeData.p_data, sframeData.len);
- pcb_byte |= PH_PROTO_7816_S_BLOCK_REQ; /* PCB */
- pcb_byte |= PH_PROTO_7816_S_END_OF_APDU;
- break;
- case HARD_RESET_REQ:
- frame_len = (PH_PROTO_7816_HEADER_LEN + PH_PROTO_7816_CRC_LEN);
- p_framebuff = (uint8_t*)phNxpEse_memalloc(frame_len * sizeof(uint8_t));
- if (NULL == p_framebuff) {
- return ESESTATUS_FAILED;
- }
- p_framebuff[2] = 0;
- p_framebuff[3] = 0x00;
-
- pcb_byte |= PH_PROTO_7816_S_BLOCK_REQ; /* PCB */
- pcb_byte |= PH_PROTO_7816_S_HRD_RST_CMD;
- break;
- case WTX_RSP:
- frame_len = (PH_PROTO_7816_HEADER_LEN + 1 + PH_PROTO_7816_CRC_LEN);
- p_framebuff = (uint8_t*)phNxpEse_memalloc(frame_len * sizeof(uint8_t));
- if (NULL == p_framebuff) {
- return ESESTATUS_FAILED;
- }
- p_framebuff[2] = 0x01;
- p_framebuff[3] = 0x01;
-
- pcb_byte |= PH_PROTO_7816_S_BLOCK_RSP;
- pcb_byte |= PH_PROTO_7816_S_WTX;
- break;
- case ATR_REQ:
- frame_len = (PH_PROTO_7816_HEADER_LEN + PH_PROTO_7816_CRC_LEN);
- p_framebuff = (uint8_t*)phNxpEse_memalloc(frame_len * sizeof(uint8_t));
- if (NULL == p_framebuff) {
- return ESESTATUS_FAILED;
- }
- p_framebuff[2] = 0;
- p_framebuff[3] = 0x00;
-
- pcb_byte |= PH_PROTO_7816_S_BLOCK_REQ; /* PCB */
- pcb_byte |= ATR_REQ;
- break;
- default:
- ALOGE("Invalid S-block");
- break;
- }
- if (NULL != p_framebuff) {
- /* frame the packet */
- p_framebuff[0] = 0x00; /* NAD Byte */
- p_framebuff[1] = pcb_byte; /* PCB */
-
- p_framebuff[frame_len - 1] =
- phNxpEseProto7816_ComputeLRC(p_framebuff, 0, (frame_len - 1));
- ALOGD_IF(ese_debug_enabled, "S-Frame PCB: %x\n", p_framebuff[1]);
- status = phNxpEseProto7816_SendRawFrame(frame_len, p_framebuff);
- phNxpEse_free(p_framebuff);
- /*After S-Frame Tx 1 ms sleep before Rx*/
- if ((GET_CHIP_OS_VERSION() != OS_VERSION_4_0) &&
- (sframeData.sFrameType != PROP_END_APDU_REQ)) {
- phNxpEse_Sleep(1 * 1000);
- }
- } else {
- ALOGE("Invalid S-block or malloc for s-block failed");
- }
- ALOGD_IF(ese_debug_enabled, "Exit %s ", __FUNCTION__);
- return status;
-}
-
-/******************************************************************************
- * Function phNxpEseProto7816_sendRframe
- *
- * Description This internal function is called to send R-frame with all
- * updated 7816-3 headers
- *
- * Returns On success return true or else false.
- *
- ******************************************************************************/
-static ESESTATUS phNxpEseProto7816_sendRframe(rFrameTypes_t rFrameType) {
- ESESTATUS status = ESESTATUS_FAILED;
- uint8_t recv_ack[4] = {0x00, 0x80, 0x00, 0x00};
- if (RNACK == rFrameType) /* R-NACK */
- {
- recv_ack[1] = 0x82;
- } else /* R-ACK*/
- {
- /* This update is helpful in-case a R-NACK is transmitted from the MW */
- phNxpEseProto7816_3_Var.lastSentNonErrorframeType = RFRAME;
- }
- recv_ack[1] |=
- ((phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdIframeInfo.seqNo ^ 1)
- << 4);
- ALOGD_IF(ese_debug_enabled, "%s recv_ack[1]:0x%x", __FUNCTION__, recv_ack[1]);
- recv_ack[3] =
- phNxpEseProto7816_ComputeLRC(recv_ack, 0x00, (sizeof(recv_ack) - 1));
- status = phNxpEseProto7816_SendRawFrame(sizeof(recv_ack), recv_ack);
- return status;
-}
-
-/******************************************************************************
- * Function phNxpEseProto7816_SendIframe
- *
- * Description This internal function is called to send I-frame with all
- * updated 7816-3 headers
- *
- * Returns On success return true or else false.
- *
- ******************************************************************************/
-static ESESTATUS phNxpEseProto7816_SendIframe(iFrameInfo_t iFrameData) {
- ESESTATUS status = ESESTATUS_FAILED;
- uint32_t frame_len = 0;
- uint8_t* p_framebuff = NULL;
- uint8_t pcb_byte = 0;
- ALOGD_IF(ese_debug_enabled, "Enter %s ", __FUNCTION__);
- if (0 == iFrameData.sendDataLen) {
- ALOGE("I frame Len is 0, INVALID");
- return ESESTATUS_FAILED;
- }
- /* This update is helpful in-case a R-NACK is transmitted from the MW */
- phNxpEseProto7816_3_Var.lastSentNonErrorframeType = IFRAME;
- frame_len = (iFrameData.sendDataLen + PH_PROTO_7816_HEADER_LEN +
- PH_PROTO_7816_CRC_LEN + 2);
-
- p_framebuff = (uint8_t*)phNxpEse_memalloc(frame_len * sizeof(uint8_t));
- if (NULL == p_framebuff) {
- ALOGE("Heap allocation failed");
- return ESESTATUS_FAILED;
- }
-
- /* frame the packet */
- p_framebuff[0] = 0x00; /* NAD Byte */
-
- if (iFrameData.isChained) {
- /* make B6 (M) bit high */
- pcb_byte |= PH_PROTO_7816_CHAINING;
- }
-
- /* Update the send seq no */
- pcb_byte |=
- (phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.seqNo << 6);
-
- /* store the pcb byte */
- p_framebuff[1] = pcb_byte;
- if (iFrameData.sendDataLen >
- IFSC_SIZE_SEND) { /* Case for frame size > 254 bytes */
- p_framebuff[2] = EXTENDED_FRAME_MARKER;
- uint8_t mask = (iFrameData.sendDataLen) & EXTENDED_FRAME_MARKER;
- p_framebuff[4] = mask;
- mask = ((iFrameData.sendDataLen) >> 8) & EXTENDED_FRAME_MARKER;
- p_framebuff[3] = mask;
- /* store I frame */
- phNxpEse_memcpy(&(p_framebuff[5]),
- iFrameData.p_data + iFrameData.dataOffset,
- iFrameData.sendDataLen);
- } else { /* Case for frame size < 254 bytes */
- /* store I frame length */
- p_framebuff[2] = iFrameData.sendDataLen;
- frame_len = frame_len - 2;
- /* store I frame */
- phNxpEse_memcpy(&(p_framebuff[3]),
- iFrameData.p_data + iFrameData.dataOffset,
- iFrameData.sendDataLen);
- }
-
- p_framebuff[frame_len - 1] =
- phNxpEseProto7816_ComputeLRC(p_framebuff, 0, (frame_len - 1));
-
- status = phNxpEseProto7816_SendRawFrame(frame_len, p_framebuff);
-
- phNxpEse_free(p_framebuff);
- ALOGD_IF(ese_debug_enabled, "Exit %s ", __FUNCTION__);
- return status;
-}
-
-/******************************************************************************
- * Function phNxpEseProto7816_SetNextIframeContxt
- *
- * Description This internal function is called to set the context for next
- *I-frame.
- * Not applicable for the first I-frame of the transceive
- *
- * Returns On success return true or else false.
- *
- ******************************************************************************/
-static ESESTATUS phNxpEseProto7816_SetFirstIframeContxt(void) {
- ALOGD_IF(ese_debug_enabled, "Enter %s ", __FUNCTION__);
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.dataOffset = 0;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.FrameType = IFRAME;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.seqNo =
- phNxpEseProto7816_3_Var.phNxpEseLastTx_Cntx.IframeInfo.seqNo ^ 1;
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState = SEND_IFRAME;
- if (phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.totalDataLen >
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo
- .currentDataLenIFS) {
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.isChained = true;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.sendDataLen =
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo
- .currentDataLenIFS;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.totalDataLen =
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.totalDataLen -
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo
- .currentDataLenIFS;
- } else {
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.sendDataLen =
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.totalDataLen;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.isChained = false;
- }
- ALOGD_IF(ese_debug_enabled, "I-Frame Data Len: %d Seq. no:%d",
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.sendDataLen,
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.seqNo);
- ALOGD_IF(ese_debug_enabled, "Exit %s ", __FUNCTION__);
- return ESESTATUS_SUCCESS;
-}
-
-/******************************************************************************
- * Function phNxpEseProto7816_SetNextIframeContxt
- *
- * Description This internal function is called to set the context for next
- *I-frame.
- * Not applicable for the first I-frame of the transceive
- *
- * Returns On success return true or else false.
- *
- ******************************************************************************/
-static ESESTATUS phNxpEseProto7816_SetNextIframeContxt(void) {
- ALOGD_IF(ese_debug_enabled, "Enter %s ", __FUNCTION__);
- /* Expecting to reach here only after first of chained I-frame is sent and
- * before the last chained is sent */
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.FrameType = IFRAME;
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState = SEND_IFRAME;
-
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.seqNo =
- phNxpEseProto7816_3_Var.phNxpEseLastTx_Cntx.IframeInfo.seqNo ^ 1;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.dataOffset =
- phNxpEseProto7816_3_Var.phNxpEseLastTx_Cntx.IframeInfo.dataOffset +
- phNxpEseProto7816_3_Var.phNxpEseLastTx_Cntx.IframeInfo.currentDataLenIFS;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.p_data =
- phNxpEseProto7816_3_Var.phNxpEseLastTx_Cntx.IframeInfo.p_data;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.currentDataLenIFS =
- phNxpEseProto7816_3_Var.phNxpEseLastTx_Cntx.IframeInfo.currentDataLenIFS;
-
- // if chained
- if (phNxpEseProto7816_3_Var.phNxpEseLastTx_Cntx.IframeInfo.totalDataLen >
- phNxpEseProto7816_3_Var.phNxpEseLastTx_Cntx.IframeInfo
- .currentDataLenIFS) {
- ALOGD_IF(ese_debug_enabled, "Process Chained Frame");
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.isChained = true;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.sendDataLen =
- phNxpEseProto7816_3_Var.phNxpEseLastTx_Cntx.IframeInfo
- .currentDataLenIFS;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.totalDataLen =
- phNxpEseProto7816_3_Var.phNxpEseLastTx_Cntx.IframeInfo.totalDataLen -
- phNxpEseProto7816_3_Var.phNxpEseLastTx_Cntx.IframeInfo
- .currentDataLenIFS;
- } else {
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.isChained = false;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.sendDataLen =
- phNxpEseProto7816_3_Var.phNxpEseLastTx_Cntx.IframeInfo.totalDataLen;
- }
- ALOGD_IF(ese_debug_enabled, "I-Frame Data Len: %d",
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.sendDataLen);
- ALOGD_IF(ese_debug_enabled, "Exit %s ", __FUNCTION__);
- return ESESTATUS_SUCCESS;
-}
-
-/******************************************************************************
- * Function phNxpEseProto7816_ResetRecovery
- *
- * Description This internal function is called to do reset the recovery
- *pareameters
- *
- * Returns On success return true or else false.
- *
- ******************************************************************************/
-static ESESTATUS phNxpEseProto7816_SaveIframeData(uint8_t* p_data,
- uint32_t data_len) {
- ESESTATUS status = ESESTATUS_FAILED;
- ALOGD_IF(ese_debug_enabled, "Enter %s ", __FUNCTION__);
- ALOGD_IF(ese_debug_enabled, "Data[0]=0x%x len=%d Data[%d]=0x%x", p_data[0],
- data_len, data_len - 1, p_data[data_len - 1]);
- if (ESESTATUS_SUCCESS != phNxpEse_StoreDatainList(data_len, p_data)) {
- ALOGE("%s - Error storing chained data in list", __FUNCTION__);
- } else {
- status = ESESTATUS_SUCCESS;
- }
- ALOGD_IF(ese_debug_enabled, "Exit %s ", __FUNCTION__);
- return status;
-}
-
-/******************************************************************************
- * Function phNxpEseProto7816_ResetRecovery
- *
- * Description This internal function is called to do reset the recovery
- *pareameters
- *
- * Returns On success return true or else false.
- *
- ******************************************************************************/
-static ESESTATUS phNxpEseProto7816_ResetRecovery(void) {
- phNxpEseProto7816_3_Var.recoveryCounter = 0;
- return ESESTATUS_SUCCESS;
-}
-
-/******************************************************************************
- * Function phNxpEseProto7816_RecoverySteps
- *
- * Description This internal function is called when 7816-3 stack failed to
- *recover
- * after PH_PROTO_7816_FRAME_RETRY_COUNT, and the interface has
- *to be
- * recovered
- * Returns On success return true or else false.
- *
- ******************************************************************************/
-static ESESTATUS phNxpEseProto7816_RecoverySteps(void) {
- if (phNxpEseProto7816_3_Var.recoveryCounter <= GET_FRAME_RETRY_COUNT()) {
- phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdSframeInfo.sFrameType =
- INTF_RESET_REQ;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.FrameType = SFRAME;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.SframeInfo.sFrameType =
- INTF_RESET_REQ;
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState =
- SEND_S_INTF_RST;
- } else { /* If recovery fails */
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState = IDLE_STATE;
- ALOGE("%s Recovery failed", __FUNCTION__);
- }
- return ESESTATUS_SUCCESS;
-}
-
-/******************************************************************************
- * Function phNxpEseProto7816_DecodeSecureTimer
- *
- * Description This internal function is to decode the secure timer.
- * value from the payload
- * Returns void
- *
- ******************************************************************************/
-static void phNxpEseProto7816_DecodeSecureTimer(uint8_t* frameOffset,
- unsigned int* secureTimer,
- uint8_t* p_data) {
- uint8_t byteCounter = 0;
- uint8_t dataLength = p_data[++(*frameOffset)]; /* To get the L of TLV */
- if (dataLength > 0) {
- /* V of TLV: Retrieve each byte(4 byte) and push it to get the secure timer
- * value (unsigned long) */
- for (byteCounter = 1; byteCounter <= dataLength; byteCounter++) {
- (*frameOffset)++;
- *secureTimer = (*secureTimer) << 8;
- *secureTimer |= p_data[(*frameOffset)];
- }
- } else {
- (*frameOffset)++; /* Goto the end of current marker if length is zero */
- }
- return;
-}
-
-/******************************************************************************
- * Function phNxpEseProto7816_DecodeSFrameIFSData
- *
- * Description This internal function is to decode S-frame payload.
- * Returns void
- *
- ******************************************************************************/
-static void phNxpEseProto7816_DecodeSFrameIFSData(uint8_t* p_data) {
- uint16_t ifsd_data = 0;
- if (p_data[2] == 1) {
- ifsd_data = p_data[3];
- } else if (p_data[2] == 2) {
- ifsd_data = p_data[3];
- ifsd_data <<= 8;
- ifsd_data |= p_data[4];
- }
- if (ifsd_data == phNxpEseProto7816_3_Var.currentIFSDSize) {
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.currentDataLenIFS =
- phNxpEseProto7816_3_Var.currentIFSDSize;
- ALOGD_IF(ese_debug_enabled, "%s IFS adjustment: Max DataLen=%d \n",
- __FUNCTION__,
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo
- .currentDataLenIFS);
- } else {
- ALOGE("%s ERROR IFS adjustment: Max DataLen=%d \n", __FUNCTION__,
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo
- .currentDataLenIFS);
- }
-}
-
-/******************************************************************************
- * Function phNxpEseProto7816_DecodeSFrameATRData
- *
- * Description This internal function is to decode S-frame payload.
- * Returns void
- *
- ******************************************************************************/
-static void phNxpEseProto7816_DecodeSFrameATRData(uint8_t* p_data) {
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.maxDataLenIFSC = 0;
- /* Default IFSC size */
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.defaultDataLenIFSC =
- p_data[16];
- // phNxpEse_memcpy(phNxpEseProto7816_3_Var.pAtrData, &p_data[3], p_data[2]);
- /* Max IFSC size */
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.maxDataLenIFSC =
- (p_data[18] << 8);
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.maxDataLenIFSC |=
- (p_data[19]);
- if (!p_data[2])
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.maxDataLenIFSC =
- IFSC_SIZE_SEND;
-
- phNxpEse_memcpy(&phNxpEseProto7816_3_Var.atrInfo.len,
- &p_data[PH_PROPTO_7816_FRAME_LENGTH_OFFSET],
- sizeof(phNxpEseProto7816_ATR_Info_t));
-
- ALOGD_IF(
- ese_debug_enabled,
- "%s Max DataLen=%d Current DataLen=%d Default DataLen=%d \n",
- __FUNCTION__,
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.maxDataLenIFSC,
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.currentDataLenIFS,
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo
- .defaultDataLenIFSC);
- ALOGD_IF(ese_debug_enabled, "ATR Data Follows");
- ALOGD_IF(ese_debug_enabled, "======================");
- ALOGD_IF(ese_debug_enabled, "ATR Length = %d",
- phNxpEseProto7816_3_Var.atrInfo.len);
- ALOGD_IF(ese_debug_enabled, "Vendor ID = 0x%.2x%.2x%.2x%.2x%.2x",
- phNxpEseProto7816_3_Var.atrInfo.vendorID[0],
- phNxpEseProto7816_3_Var.atrInfo.vendorID[1],
- phNxpEseProto7816_3_Var.atrInfo.vendorID[2],
- phNxpEseProto7816_3_Var.atrInfo.vendorID[3],
- phNxpEseProto7816_3_Var.atrInfo.vendorID[4]);
- ALOGD_IF(ese_debug_enabled, "DLL-IC = supports T%d",
- phNxpEseProto7816_3_Var.atrInfo.dll_IC);
- ALOGD_IF(ese_debug_enabled, "BGT = %d ms",
- (phNxpEseProto7816_3_Var.atrInfo.bgt[0] << 8) |
- (phNxpEseProto7816_3_Var.atrInfo.bgt[1]));
- ALOGD_IF(ese_debug_enabled, "BWT = %d ms",
- phNxpEseProto7816_3_Var.atrInfo.bwt[0] << 8 |
- phNxpEseProto7816_3_Var.atrInfo.bwt[1]);
- ALOGD_IF(ese_debug_enabled, "Max supported frequency = %d Hz",
- phNxpEseProto7816_3_Var.atrInfo.maxFreq[0] << 8 |
- phNxpEseProto7816_3_Var.atrInfo.maxFreq[1]);
- ALOGD_IF(ese_debug_enabled, "Checksum LRC(0)/CRC(1) supports = 0x%x",
- phNxpEseProto7816_3_Var.atrInfo.checksum);
- ALOGD_IF(ese_debug_enabled, "DefaultIFSC = %d bytes",
- phNxpEseProto7816_3_Var.atrInfo.defaultIFSC);
- ALOGD_IF(ese_debug_enabled, "Max IFSC = %d bytes",
- phNxpEseProto7816_3_Var.atrInfo.maxIFSC[0] << 8 |
- phNxpEseProto7816_3_Var.atrInfo.maxIFSC[1]);
- ALOGD_IF(ese_debug_enabled, "Capabilities = 0x%x",
- phNxpEseProto7816_3_Var.atrInfo.capabilities[0] << 8 |
- phNxpEseProto7816_3_Var.atrInfo.capabilities[1]);
-
- if (phNxpEseProto7816_3_Var.atrInfo.vendorID[4] >= PH_SE_OS_VERSION_11) {
- phNxpEse_memcpy(&phNxpEseProto7816_3_Var.extndAtrInfo.channelNo,
- &p_data[PH_PROPTO_7816_FRAME_LENGTH_OFFSET] +
- sizeof(phNxpEseProto7816_ATR_Info_t),
- sizeof(phNxpEseProto7816_ATR_Info2_t));
- ALOGD_IF(ese_debug_enabled, "Channel Number = 0x%x",
- phNxpEseProto7816_3_Var.extndAtrInfo.channelNo);
- ALOGD_IF(
- ese_debug_enabled, "OS Type = %s",
- (phNxpEseProto7816_3_Var.extndAtrInfo.osType == 0x01 ? "JCOP Mode"
- : "OSU Mode"));
- }
- if (phNxpEseProto7816_3_Var.atrInfo.vendorID[PH_PROTO_ATR_RSP_VENDOR_ID_LEN -
- 1] >= PH_SE_OS_VERSION_20) {
- phNxpEse_setOsVersion(OS_VERSION_6_2);
- } else if (phNxpEseProto7816_3_Var.atrInfo
- .vendorID[PH_PROTO_ATR_RSP_VENDOR_ID_LEN - 1] >=
- PH_SE_OS_VERSION_11) {
- phNxpEse_setOsVersion(OS_VERSION_5_2_2);
- } else if (phNxpEseProto7816_3_Var.atrInfo
- .vendorID[PH_PROTO_ATR_RSP_VENDOR_ID_LEN - 1] ==
- PH_SE_OS_VERSION_10) {
- phNxpEse_setOsVersion(OS_VERSION_5_2);
- } else if (phNxpEseProto7816_3_Var.atrInfo
- .vendorID[PH_PROTO_ATR_RSP_VENDOR_ID_LEN - 1] ==
- PH_PROTO_7816_VALUE_ZERO) {
- phNxpEse_setOsVersion(OS_VERSION_5_1);
- }
-
- ALOGD_IF(ese_debug_enabled, "======================");
-}
-
-/******************************************************************************
- * Function phNxpEseProto7816_DecodeSFrameData
- *
- * Description This internal function is to decode S-frame payload.
- * Returns void
- *
- ******************************************************************************/
-static void phNxpEseProto7816_DecodeSFrameSecureTimerData(uint8_t* p_data) {
- uint8_t maxSframeLen = 0, dataType = 0, frameOffset = 0;
- frameOffset = PH_PROPTO_7816_FRAME_LENGTH_OFFSET;
- maxSframeLen =
- p_data[frameOffset] +
- frameOffset; /* to be in sync with offset which starts from index 0 */
-
- /* Secure Timer specific parser */
- while (maxSframeLen > frameOffset) {
- frameOffset += 1; /* To get the Type (TLV) */
- dataType = p_data[frameOffset];
- ALOGD_IF(ese_debug_enabled, "%s frameoffset=%d value=0x%x\n", __FUNCTION__,
- frameOffset, p_data[frameOffset]);
- switch (dataType) /* Type (TLV) */
- {
- case PH_PROPTO_7816_SFRAME_TIMER1:
- phNxpEseProto7816_DecodeSecureTimer(
- &frameOffset,
- &phNxpEseProto7816_3_Var.secureTimerParams.secureTimer1, p_data);
- break;
- case PH_PROPTO_7816_SFRAME_TIMER2:
- phNxpEseProto7816_DecodeSecureTimer(
- &frameOffset,
- &phNxpEseProto7816_3_Var.secureTimerParams.secureTimer2, p_data);
- break;
- case PH_PROPTO_7816_SFRAME_TIMER3:
- phNxpEseProto7816_DecodeSecureTimer(
- &frameOffset,
- &phNxpEseProto7816_3_Var.secureTimerParams.secureTimer3, p_data);
- break;
- default:
- frameOffset +=
- p_data[frameOffset + 1]; /* Goto the end of current marker */
- break;
- }
- }
- ALOGD_IF(ese_debug_enabled, "secure timer t1 = 0x%x t2 = 0x%x t3 = 0x%x",
- phNxpEseProto7816_3_Var.secureTimerParams.secureTimer1,
- phNxpEseProto7816_3_Var.secureTimerParams.secureTimer2,
- phNxpEseProto7816_3_Var.secureTimerParams.secureTimer3);
- return;
-}
-
-/******************************************************************************
- * Function phNxpEseProto7816_DecodeFrame
- *
- * Description This internal function is used to
- * 1. Identify the received frame
- * 2. If the received frame is I-frame with expected sequence
- number, store it or else send R-NACK
- 3. If the received frame is R-frame,
- 3.1 R-ACK with expected seq. number: Send the next
- chained I-frame
- 3.2 R-ACK with different sequence number: Sebd the R-Nack
- 3.3 R-NACK: Re-send the last frame
- 4. If the received frame is S-frame, send back the correct
- S-frame response.
- * Returns On success return true or else false.
- *
- ******************************************************************************/
-static ESESTATUS phNxpEseProto7816_DecodeFrame(uint8_t* p_data,
- uint32_t data_len) {
- ESESTATUS status = ESESTATUS_SUCCESS;
- uint8_t pcb;
- phNxpEseProto7816_PCB_bits_t pcb_bits;
- ALOGD_IF(ese_debug_enabled, "Enter %s ", __FUNCTION__);
- ALOGD_IF(ese_debug_enabled, "Retry Counter = %d\n",
- phNxpEseProto7816_3_Var.recoveryCounter);
- pcb = p_data[PH_PROPTO_7816_PCB_OFFSET];
- // memset(&phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.rcvPcbBits, 0x00,
- // sizeof(struct PCB_BITS));
- phNxpEse_memset(&pcb_bits, 0x00, sizeof(phNxpEseProto7816_PCB_bits_t));
- phNxpEse_memcpy(&pcb_bits, &pcb, sizeof(uint8_t));
-
- if (0x00 == pcb_bits.msb) /* I-FRAME decoded should come here */
- {
- if (!phNxpEseProto7816_ResendLastSFrameReq()) {
- ALOGD_IF(ese_debug_enabled, "%s I-Frame Received", __FUNCTION__);
- phNxpEseProto7816_CheckAndNotifyWtx(WTX_END);
- phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdFrameType = IFRAME;
- if (phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdIframeInfo.seqNo !=
- pcb_bits.bit7) // != pcb_bits->bit7)
- {
- ALOGD_IF(ese_debug_enabled, "%s I-Frame lastRcvdIframeInfo.seqNo:0x%x",
- __FUNCTION__, pcb_bits.bit7);
- phNxpEseProto7816_ResetRecovery();
- phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdIframeInfo.seqNo = 0x00;
- phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdIframeInfo.seqNo |=
- pcb_bits.bit7;
-
- if (pcb_bits.bit6) {
- phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdIframeInfo.isChained =
- true;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.FrameType = RFRAME;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.RframeInfo.errCode =
- NO_ERROR;
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState =
- SEND_R_ACK;
- if (EXTENDED_FRAME_MARKER == p_data[2] &&
- (data_len > 6)) /* Checking for extended frame prologue */
- {
- status = phNxpEseProto7816_SaveIframeData(&p_data[5], data_len - 6);
- } else if (data_len > 4) {
- status = phNxpEseProto7816_SaveIframeData(&p_data[3], data_len - 4);
- } else {
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState =
- SEND_R_NACK;
- ALOGD_IF(ese_debug_enabled, "%s Invalid IframeData", __FUNCTION__);
- }
- } else {
- phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdIframeInfo.isChained =
- false;
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState =
- IDLE_STATE;
- if (EXTENDED_FRAME_MARKER == p_data[2] &&
- (data_len > 6)) /* Checking for extended frame prologue */
- {
- status = phNxpEseProto7816_SaveIframeData(&p_data[5], data_len - 6);
- } else if (data_len > 4) {
- status = phNxpEseProto7816_SaveIframeData(&p_data[3], data_len - 4);
- } else {
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.FrameType = RFRAME;
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState =
- SEND_R_NACK;
- ALOGD_IF(ese_debug_enabled, "%s Invalid IframeData", __FUNCTION__);
- }
- }
- } else {
- phNxpEse_Sleep(GET_DELAY_ERROR_RECOVERY());
- if (phNxpEseProto7816_3_Var.recoveryCounter < GET_FRAME_RETRY_COUNT()) {
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.FrameType = RFRAME;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.RframeInfo.errCode =
- OTHER_ERROR;
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState =
- SEND_R_NACK;
- phNxpEseProto7816_3_Var.recoveryCounter++;
- } else {
- phNxpEseProto7816_RecoverySteps();
- phNxpEseProto7816_3_Var.recoveryCounter++;
- }
- }
- }
- } else if ((0x01 == pcb_bits.msb) &&
- (0x00 == pcb_bits.bit7)) /* R-FRAME decoded should come here */
- {
- ALOGD_IF(ese_debug_enabled, "%s R-Frame Received", __FUNCTION__);
- phNxpEseProto7816_CheckAndNotifyWtx(WTX_END);
- phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdFrameType = RFRAME;
- phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdRframeInfo.seqNo =
- 0; // = 0;
- phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdRframeInfo.seqNo |=
- pcb_bits.bit5;
-
- if ((pcb_bits.lsb == 0x00) && (pcb_bits.bit2 == 0x00)) {
- if (!phNxpEseProto7816_ResendLastSFrameReq()) {
- phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdRframeInfo.errCode =
- NO_ERROR;
- phNxpEseProto7816_ResetRecovery();
- if (phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdRframeInfo.seqNo !=
- phNxpEseProto7816_3_Var.phNxpEseLastTx_Cntx.IframeInfo.seqNo) {
- status = phNxpEseProto7816_SetNextIframeContxt();
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState =
- SEND_IFRAME;
- } else {
- // error handling.
- }
- }
- } /* Error handling 1 : Parity error */
- else if (((pcb_bits.lsb == 0x01) && (pcb_bits.bit2 == 0x00)) ||
- /* Error handling 2: Other indicated error */
- ((pcb_bits.lsb == 0x00) && (pcb_bits.bit2 == 0x01)) ||
- /* Error handling 3 : Frame Missing error */
- ((pcb_bits.lsb == 0x01) && (pcb_bits.bit2 == 0x01))) {
- phNxpEse_Sleep(GET_DELAY_ERROR_RECOVERY());
- if ((pcb_bits.lsb == 0x00) && (pcb_bits.bit2 == 0x01)) {
- phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdRframeInfo.errCode =
- OTHER_ERROR;
- } else if ((pcb_bits.lsb == 0x01) && (pcb_bits.bit2 == 0x00)) {
- phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdRframeInfo.errCode =
- PARITY_ERROR;
- } else {
- phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdRframeInfo.errCode =
- SOF_MISSED_ERROR;
- }
- if (phNxpEseProto7816_3_Var.recoveryCounter < GET_FRAME_RETRY_COUNT()) {
- if (phNxpEseProto7816_3_Var.phNxpEseLastTx_Cntx.FrameType == IFRAME) {
- /*Only for R-NACK other issue re sync*/
- if ((pcb_bits.lsb == 0x00) && (pcb_bits.bit2 == 0x01)) {
- if (phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdRframeInfo
- .seqNo != phNxpEseProto7816_3_Var.phNxpEseLastTx_Cntx
- .IframeInfo.seqNo &&
- phNxpEseProto7816_3_Var.phNxpEseLastTx_Cntx.IframeInfo
- .isChained == false) {
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState =
- SEND_S_RSYNC;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.FrameType = SFRAME;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.SframeInfo
- .sFrameType = RESYNCH_REQ;
- } else {
- /*If R-NACK with sequence no matching then also reissue frame*/
- phNxpEse_memcpy(&phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx,
- &phNxpEseProto7816_3_Var.phNxpEseLastTx_Cntx,
- sizeof(phNxpEseProto7816_NextTx_Info_t));
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState =
- SEND_IFRAME;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.FrameType = IFRAME;
- }
- } else {
- phNxpEse_memcpy(&phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx,
- &phNxpEseProto7816_3_Var.phNxpEseLastTx_Cntx,
- sizeof(phNxpEseProto7816_NextTx_Info_t));
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState =
- SEND_IFRAME;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.FrameType = IFRAME;
- }
- } else if (phNxpEseProto7816_3_Var.phNxpEseLastTx_Cntx.FrameType ==
- RFRAME) {
- /* Usecase to reach the below case:
- I-frame sent first, followed by R-NACK and we receive a R-NACK with
- last sent I-frame sequence number*/
- if ((phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdRframeInfo
- .seqNo ==
- phNxpEseProto7816_3_Var.phNxpEseLastTx_Cntx.IframeInfo.seqNo) &&
- (phNxpEseProto7816_3_Var.lastSentNonErrorframeType == IFRAME)) {
- phNxpEse_memcpy(&phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx,
- &phNxpEseProto7816_3_Var.phNxpEseLastTx_Cntx,
- sizeof(phNxpEseProto7816_NextTx_Info_t));
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState =
- SEND_IFRAME;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.FrameType = IFRAME;
- }
- /* Usecase to reach the below case:
- R-frame sent first, followed by R-NACK and we receive a R-NACK with
- next expected I-frame sequence number*/
- else if ((phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdRframeInfo
- .seqNo != phNxpEseProto7816_3_Var.phNxpEseLastTx_Cntx
- .IframeInfo.seqNo) &&
- (phNxpEseProto7816_3_Var.lastSentNonErrorframeType ==
- RFRAME)) {
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.FrameType = RFRAME;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.RframeInfo.errCode =
- NO_ERROR;
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState =
- SEND_R_ACK;
- }
- /* Usecase to reach the below case:
- I-frame sent first, followed by R-NACK and we receive a R-NACK with
- next expected I-frame sequence number + all the other unexpected
- scenarios */
- else {
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.FrameType = RFRAME;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.RframeInfo.errCode =
- OTHER_ERROR;
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState =
- SEND_R_NACK;
- }
- } else if (phNxpEseProto7816_3_Var.phNxpEseLastTx_Cntx.FrameType ==
- SFRAME) {
- /* Copy the last S frame sent */
- phNxpEse_memcpy(&phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx,
- &phNxpEseProto7816_3_Var.phNxpEseLastTx_Cntx,
- sizeof(phNxpEseProto7816_NextTx_Info_t));
- }
- phNxpEseProto7816_3_Var.recoveryCounter++;
- } else {
- phNxpEseProto7816_RecoverySteps();
- phNxpEseProto7816_3_Var.recoveryCounter++;
- }
- // resend previously send I frame
- } else /* Error handling 4 */
- {
- phNxpEse_Sleep(GET_DELAY_ERROR_RECOVERY());
- if (phNxpEseProto7816_3_Var.recoveryCounter < GET_FRAME_RETRY_COUNT()) {
- phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdRframeInfo.errCode =
- UNDEFINED_ERROR;
- phNxpEseProto7816_3_Var.recoveryCounter++;
- } else {
- phNxpEseProto7816_RecoverySteps();
- phNxpEseProto7816_3_Var.recoveryCounter++;
- }
- }
- } else if ((0x01 == pcb_bits.msb) &&
- (0x01 == pcb_bits.bit7)) /* S-FRAME decoded should come here */
- {
- ALOGD_IF(ese_debug_enabled, "%s S-Frame Received", __FUNCTION__);
- int32_t frameType = (int32_t)(pcb & 0x3F); /*discard upper 2 bits */
- phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdFrameType = SFRAME;
- if (frameType != WTX_REQ) {
- phNxpEseProto7816_CheckAndNotifyWtx(WTX_END);
- }
- phNxpEseProto7816_ResetRecovery();
- switch (frameType) {
- case RESYNCH_REQ:
- phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdSframeInfo.sFrameType =
- RESYNCH_REQ;
- break;
- case RESYNCH_RSP:
- if (phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdRframeInfo
- .errCode == OTHER_ERROR) {
- phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdSframeInfo
- .sFrameType = RESYNCH_RSP;
- phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdRframeInfo.errCode =
- NO_ERROR;
- phNxpEse_memcpy(&phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx,
- &phNxpEseProto7816_3_Var.phNxpEseLastTx_Cntx,
- sizeof(phNxpEseProto7816_NextTx_Info_t));
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState =
- SEND_IFRAME;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.FrameType = IFRAME;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.seqNo =
- PH_PROTO_7816_VALUE_ZERO;
- /* Initialized the I-Frame sequence number as boot time,
- as R-SYNCH has reset the Jcop seq number */
- phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdIframeInfo.seqNo =
- PH_PROTO_7816_VALUE_ONE;
- } else {
- phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdSframeInfo
- .sFrameType = RESYNCH_RSP;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.FrameType = UNKNOWN;
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState =
- IDLE_STATE;
- }
- break;
- case IFS_REQ:
- phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdSframeInfo.sFrameType =
- IFS_REQ;
- break;
- case IFS_RES:
- phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdSframeInfo.sFrameType =
- IFS_RES;
- if (p_data[PH_PROPTO_7816_FRAME_LENGTH_OFFSET] > 0)
- phNxpEseProto7816_DecodeSFrameIFSData(p_data);
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.FrameType = UNKNOWN;
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState =
- IDLE_STATE;
- break;
- case ABORT_REQ:
- phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdSframeInfo.sFrameType =
- ABORT_REQ;
- break;
- case ABORT_RES:
- phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdSframeInfo.sFrameType =
- ABORT_RES;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.FrameType = UNKNOWN;
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState =
- IDLE_STATE;
- break;
- case WTX_REQ:
- phNxpEseProto7816_3_Var.wtx_counter++;
- ALOGD_IF(ese_debug_enabled, "%s Wtx_counter value - %lu", __FUNCTION__,
- phNxpEseProto7816_3_Var.wtx_counter);
- ALOGD_IF(ese_debug_enabled, "%s Wtx_counter wtx_counter_limit - %lu",
- __FUNCTION__, phNxpEseProto7816_3_Var.wtx_counter_limit);
- /* Previous sent frame is some S-frame but not WTX response S-frame */
- if (GET_CHIP_OS_VERSION() == OS_VERSION_4_0 &&
- phNxpEseProto7816_3_Var.phNxpEseLastTx_Cntx.SframeInfo.sFrameType !=
- WTX_RSP &&
- phNxpEseProto7816_3_Var.phNxpEseLastTx_Cntx.FrameType == SFRAME) {
- /* Goto recovery if it
- keep coming here for more than recovery counter max. value */
- if (phNxpEseProto7816_3_Var.recoveryCounter <
- GET_FRAME_RETRY_COUNT()) { /* Re-transmitting the previous
- sent S-frame */
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx =
- phNxpEseProto7816_3_Var.phNxpEseLastTx_Cntx;
- phNxpEseProto7816_3_Var.recoveryCounter++;
- } else {
- phNxpEseProto7816_RecoverySteps();
- phNxpEseProto7816_3_Var.recoveryCounter++;
- }
- } else {
- /* Checking for WTX counter with max. allowed WTX count */
- if (phNxpEseProto7816_3_Var.wtx_counter ==
- phNxpEseProto7816_3_Var.wtx_counter_limit) {
- phNxpEseProto7816_CheckAndNotifyWtx(WTX_END);
- if (GET_CHIP_OS_VERSION() != OS_VERSION_4_0) {
- ALOGD_IF(ese_debug_enabled,
- "%s Power cycle to eSE max "
- "WTX received",
- __FUNCTION__);
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState =
- IDLE_STATE;
- status = ESESTATUS_TRANSCEIVE_FAILED;
- } else {
- phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdSframeInfo
- .sFrameType = INTF_RESET_REQ;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.FrameType = SFRAME;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.SframeInfo
- .sFrameType = INTF_RESET_REQ;
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState =
- SEND_S_INTF_RST;
- ALOGD_IF(ese_debug_enabled,
- "%s Interface Reset to eSE wtx"
- " count reached!!!",
- __FUNCTION__);
- }
- } else {
- phNxpEse_Sleep(GET_DELAY_ERROR_RECOVERY());
- phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdSframeInfo
- .sFrameType = WTX_REQ;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.FrameType = SFRAME;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.SframeInfo.sFrameType =
- WTX_RSP;
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState =
- SEND_S_WTX_RSP;
- }
- }
- break;
- case WTX_RSP:
- phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdSframeInfo.sFrameType =
- WTX_RSP;
- break;
- case INTF_RESET_REQ:
- phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdSframeInfo.sFrameType =
- INTF_RESET_REQ;
- break;
- case INTF_RESET_RSP:
- phNxpEseProto7816_ResetProtoParams();
- phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdSframeInfo.sFrameType =
- INTF_RESET_RSP;
- if (p_data[PH_PROPTO_7816_FRAME_LENGTH_OFFSET] > 0) {
- phNxpEseProto7816_DecodeSFrameATRData(p_data);
- } else {
- phNxpEse_setOsVersion(OS_VERSION_4_0);
- }
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.FrameType = UNKNOWN;
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState =
- IDLE_STATE;
- break;
- case PROP_END_APDU_REQ:
- phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdSframeInfo.sFrameType =
- PROP_END_APDU_REQ;
- break;
- case PROP_END_APDU_RSP:
- phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdSframeInfo.sFrameType =
- PROP_END_APDU_RSP;
- if (p_data[PH_PROPTO_7816_FRAME_LENGTH_OFFSET] > 0)
- phNxpEseProto7816_DecodeSFrameSecureTimerData(p_data);
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.FrameType = UNKNOWN;
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState =
- IDLE_STATE;
- break;
- case HARD_RESET_REQ:
- phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdSframeInfo.sFrameType =
- HARD_RESET_REQ;
- break;
- case HARD_RESET_RSP:
- // This is 4ms delay and delay of 1ms in also there in line 1401 before
- // next Tx
- phNxpEse_Sleep(HARD_RESET_RES_DELAY);
- phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdSframeInfo.sFrameType =
- HARD_RESET_RSP;
- if (p_data[PH_PROPTO_7816_FRAME_LENGTH_OFFSET] > 0) {
- /*Response status either success/fail*/
- if (!p_data[PH_PROPTO_7816_FRAME_LENGTH_OFFSET + 1])
- status = ESESTATUS_FAILED;
- else
- status = ESESTATUS_SUCCESS;
- }
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.FrameType = UNKNOWN;
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState =
- IDLE_STATE;
- break;
- case ATR_RSP:
- phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdSframeInfo.sFrameType =
- ATR_RSP;
- if (p_data[PH_PROPTO_7816_FRAME_LENGTH_OFFSET] > 0) {
- phNxpEseProto7816_DecodeSFrameATRData(p_data);
- phNxpEse_StoreDatainList(
- p_data[PH_PROPTO_7816_FRAME_LENGTH_OFFSET],
- &p_data[PH_PROPTO_7816_FRAME_LENGTH_OFFSET + 1]);
- } else {
- phNxpEse_setOsVersion(OS_VERSION_4_0);
- }
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.FrameType = UNKNOWN;
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState =
- IDLE_STATE;
- break;
- default:
- ALOGE("%s Wrong S-Frame Received", __FUNCTION__);
- break;
- }
- /*After S-Frame Rx 1 msec delay before next Tx*/
- if ((GET_CHIP_OS_VERSION() != OS_VERSION_4_0) &&
- (frameType != PROP_END_APDU_RSP)) {
- phNxpEse_Sleep(1000);
- }
- } else {
- ALOGD_IF(ese_debug_enabled, "%s Wrong-Frame Received", __FUNCTION__);
- }
- ALOGD_IF(ese_debug_enabled, "Exit %s ", __FUNCTION__);
- return status;
-}
-
-/******************************************************************************
- * Function phNxpEseProto7816_ProcessResponse
- *
- * Description This internal function is used to
- * 1. Check the LRC
- * 2. Initiate decoding of received frame of data.
- * Returns On success return true or else false.
- *
- ******************************************************************************/
-static ESESTATUS phNxpEseProto7816_ProcessResponse(void) {
- uint32_t data_len = 0;
- uint8_t* p_data = NULL;
- ESESTATUS status = ESESTATUS_FAILED;
- ALOGD_IF(ese_debug_enabled, "Enter %s ", __FUNCTION__);
- status = phNxpEseProto7816_GetRawFrame(&data_len, &p_data);
- ALOGD_IF(ese_debug_enabled, "%s p_data ----> %p len ----> 0x%x", __FUNCTION__,
- p_data, data_len);
- if (ESESTATUS_SUCCESS == status) {
- /* Resetting the timeout counter */
- phNxpEseProto7816_3_Var.timeoutCounter = PH_PROTO_7816_VALUE_ZERO;
- /* LRC check followed */
- status = phNxpEseProto7816_CheckLRC(data_len, p_data);
- if (status == ESESTATUS_SUCCESS) {
- /* Resetting the RNACK retry counter */
- phNxpEseProto7816_3_Var.rnack_retry_counter = PH_PROTO_7816_VALUE_ZERO;
- status = phNxpEseProto7816_DecodeFrame(p_data, data_len);
- } else {
- ALOGE("%s LRC Check failed", __FUNCTION__);
- if (phNxpEseProto7816_3_Var.rnack_retry_counter <
- phNxpEseProto7816_3_Var.rnack_retry_limit) {
- /*If Last sent Non-error frame is S-Frame*/
- if (!phNxpEseProto7816_ResendLastSFrameReq()) {
- phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdFrameType = INVALID;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.FrameType = RFRAME;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.RframeInfo.errCode =
- PARITY_ERROR;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.RframeInfo.seqNo =
- (!phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdIframeInfo
- .seqNo)
- << 4;
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState =
- SEND_R_NACK;
- if (GET_CHIP_OS_VERSION() != OS_VERSION_4_0) {
- phNxpEse_Sleep(GET_DELAY_ERROR_RECOVERY());
- }
- }
- phNxpEseProto7816_3_Var.rnack_retry_counter++;
- } else {
- phNxpEseProto7816_3_Var.rnack_retry_counter = PH_PROTO_7816_VALUE_ZERO;
- /* Re-transmission failed completely, Going to exit */
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState =
- IDLE_STATE;
- phNxpEseProto7816_3_Var.timeoutCounter = PH_PROTO_7816_VALUE_ZERO;
- }
- }
- } else {
- ALOGD_IF(ese_debug_enabled, "%s phNxpEseProto7816_GetRawFrame failed",
- __FUNCTION__);
- if ((SFRAME == phNxpEseProto7816_3_Var.phNxpEseLastTx_Cntx.FrameType) &&
- ((WTX_RSP ==
- phNxpEseProto7816_3_Var.phNxpEseLastTx_Cntx.SframeInfo.sFrameType) ||
- (RESYNCH_RSP ==
- phNxpEseProto7816_3_Var.phNxpEseLastTx_Cntx.SframeInfo.sFrameType))) {
- if (phNxpEseProto7816_3_Var.rnack_retry_counter <
- phNxpEseProto7816_3_Var.rnack_retry_limit) {
- phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdFrameType = INVALID;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.FrameType = RFRAME;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.RframeInfo.errCode =
- OTHER_ERROR;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.RframeInfo.seqNo =
- (!phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdIframeInfo.seqNo)
- << 4;
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState =
- SEND_R_NACK;
- phNxpEseProto7816_3_Var.rnack_retry_counter++;
- } else {
- phNxpEseProto7816_3_Var.rnack_retry_counter = PH_PROTO_7816_VALUE_ZERO;
- /* Re-transmission failed completely, Going to exit */
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState =
- IDLE_STATE;
- phNxpEseProto7816_3_Var.timeoutCounter = PH_PROTO_7816_VALUE_ZERO;
- }
- } else {
- phNxpEse_Sleep(GET_DELAY_ERROR_RECOVERY());
- /* re transmit the frame */
- if (phNxpEseProto7816_3_Var.timeoutCounter <
- PH_PROTO_7816_TIMEOUT_RETRY_COUNT) {
- phNxpEseProto7816_3_Var.timeoutCounter++;
- ALOGD_IF(ese_debug_enabled, "%s re-transmitting the previous frame",
- __FUNCTION__);
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx =
- phNxpEseProto7816_3_Var.phNxpEseLastTx_Cntx;
- } else {
- /* Re-transmission failed completely, Going to exit */
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState =
- IDLE_STATE;
- if (GET_CHIP_OS_VERSION() != OS_VERSION_4_0) {
- status = ESESTATUS_FAILED;
- }
- phNxpEseProto7816_3_Var.timeoutCounter = PH_PROTO_7816_VALUE_ZERO;
- ALOGD_IF(ese_debug_enabled, "%s calling phNxpEse_StoreDatainList",
- __FUNCTION__);
- phNxpEse_StoreDatainList(data_len, p_data);
- }
- }
- }
- ALOGD_IF(ese_debug_enabled, "Exit %s Status 0x%x", __FUNCTION__, status);
- return status;
-}
-
-/******************************************************************************
- * Function TransceiveProcess
- *
- * Description This internal function is used to
- * 1. Send the raw data received from application after
- *computing LRC
- * 2. Receive the response data from ESE, decode, process
- *and
- * store the data.
- * Returns On success return true or else false.
- *
- ******************************************************************************/
-static ESESTATUS TransceiveProcess(void) {
- ESESTATUS status = ESESTATUS_FAILED;
- sFrameInfo_t sFrameInfo;
- memset(&sFrameInfo, 0, sizeof(sFrameInfo_t));
-
- ALOGD_IF(ese_debug_enabled, "Enter %s ", __FUNCTION__);
- while (phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState !=
- IDLE_STATE) {
- ALOGD_IF(ese_debug_enabled, "%s nextTransceiveState %x", __FUNCTION__,
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState);
- switch (phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState) {
- case SEND_IFRAME:
- status = phNxpEseProto7816_SendIframe(
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo);
- break;
- case SEND_R_ACK:
- status = phNxpEseProto7816_sendRframe(RACK);
- break;
- case SEND_R_NACK:
- status = phNxpEseProto7816_sendRframe(RNACK);
- if (GET_CHIP_OS_VERSION() != OS_VERSION_4_0) {
- phNxpEse_Sleep(GET_DELAY_ERROR_RECOVERY());
- }
- break;
- case SEND_S_RSYNC:
- sFrameInfo.sFrameType = RESYNCH_REQ;
- status = phNxpEseProto7816_SendSFrame(sFrameInfo);
- break;
- case SEND_S_INTF_RST:
- sFrameInfo.sFrameType = INTF_RESET_REQ;
- status = phNxpEseProto7816_SendSFrame(sFrameInfo);
- break;
- case SEND_S_IFS_ADJ:
- sFrameInfo.sFrameType = IFS_REQ;
- status = phNxpEseProto7816_SendSFrame(sFrameInfo);
- break;
- case SEND_S_EOS:
- sFrameInfo.sFrameType = PROP_END_APDU_REQ;
- sFrameInfo.len =
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.SframeInfo.len;
- sFrameInfo.p_data =
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.SframeInfo.p_data;
- status = phNxpEseProto7816_SendSFrame(sFrameInfo);
- break;
- case SEND_S_WTX_RSP:
- sFrameInfo.sFrameType = WTX_RSP;
- status = phNxpEseProto7816_SendSFrame(sFrameInfo);
- phNxpEseProto7816_CheckAndNotifyWtx(WTX_ONGOING);
- break;
- case SEND_S_HRD_RST:
- sFrameInfo.sFrameType = HARD_RESET_REQ;
- status = phNxpEseProto7816_SendSFrame(sFrameInfo);
- break;
- case SEND_S_ATR_REQ:
- sFrameInfo.sFrameType = ATR_REQ;
- status = phNxpEseProto7816_SendSFrame(sFrameInfo);
- break;
- default:
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState =
- IDLE_STATE;
- break;
- }
- if (ESESTATUS_SUCCESS == status) {
- phNxpEse_memcpy(&phNxpEseProto7816_3_Var.phNxpEseLastTx_Cntx,
- &phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx,
- sizeof(phNxpEseProto7816_NextTx_Info_t));
- status = phNxpEseProto7816_ProcessResponse();
- } else {
- ALOGE("%s Transceive send failed, going to recovery!", __FUNCTION__);
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState =
- IDLE_STATE;
- }
- };
- /*Timeout condition when previously WTX_ONGOING is notified
- *WTX_END shall be notified from here */
- phNxpEseProto7816_CheckAndNotifyWtx(WTX_END);
- ALOGD_IF(ese_debug_enabled, "Exit %s Status 0x%x", __FUNCTION__, status);
- return status;
-}
-
-/******************************************************************************
- * Function phNxpEseProto7816_CheckAndNotifyWtx
- *
- * Description This function is used to
- * 1. Check any WTX received previously
- *computing LRC
- * 2. Check WTX_counter limit is reached wtx_ntf limit
- *and
- * 3. Notify if wtx counter is greater than wtx_ntf
- *
- * Returns None.
- *
- ******************************************************************************/
-static void phNxpEseProto7816_CheckAndNotifyWtx(phNxpEse_wtxState state) {
- if (phNxpEseProto7816_3_Var.wtx_counter) {
- if (state == WTX_END) {
- if (phNxpEseProto7816_3_Var.wtx_counter >=
- phNxpEseProto7816_3_Var.wtx_ntf_limit) {
- phNxpEse_NotifySEWtxRequest(WTX_END);
- }
- phNxpEseProto7816_3_Var.wtx_counter = 0;
- } else if (state == WTX_ONGOING) {
- if (phNxpEseProto7816_3_Var.wtx_counter ==
- phNxpEseProto7816_3_Var.wtx_ntf_limit) {
- phNxpEse_NotifySEWtxRequest(WTX_ONGOING);
- }
- }
- }
-}
-
-/******************************************************************************
- * Function phNxpEseProto7816_Transceive
- *
- * Description This function is used to
- * 1. Send the raw data received from application after
- *computing LRC
- * 2. Receive the response data from ESE, decode, process
- *and
- * store the data.
- * 3. Get the final complete data and sent back to application
- *
- * Returns On success return true or else false.
- *
- ******************************************************************************/
-ESESTATUS phNxpEseProto7816_Transceive(phNxpEse_data* pCmd,
- phNxpEse_data* pRsp) {
- ESESTATUS status = ESESTATUS_FAILED;
- ESESTATUS wStatus = ESESTATUS_FAILED;
- phNxpEse_data pRes;
- ALOGD_IF(ese_debug_enabled, "Enter %s ", __FUNCTION__);
- if ((NULL == pCmd) || (NULL == pRsp) ||
- (phNxpEseProto7816_3_Var.phNxpEseProto7816_CurrentState !=
- PH_NXP_ESE_PROTO_7816_IDLE))
- return status;
- phNxpEse_memset(&pRes, 0x00, sizeof(phNxpEse_data));
- /* Updating the transceive information to the protocol stack */
- phNxpEseProto7816_3_Var.phNxpEseProto7816_CurrentState =
- PH_NXP_ESE_PROTO_7816_TRANSCEIVE;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.p_data = pCmd->p_data;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.totalDataLen =
- pCmd->len;
- ALOGD_IF(ese_debug_enabled, "Transceive data ptr 0x%p len:%d", pCmd->p_data,
- pCmd->len);
- status = phNxpEseProto7816_SetFirstIframeContxt();
- status = TransceiveProcess();
- if (ESESTATUS_FAILED == status || ESESTATUS_TRANSCEIVE_FAILED == status) {
- /* ESE hard reset to be done */
- ALOGE("Transceive failed, hard reset to proceed");
- wStatus = phNxpEse_GetData(&pRes.len, &pRes.p_data);
- if (ESESTATUS_SUCCESS == wStatus) {
- ALOGD_IF(ese_debug_enabled,
- "%s Data successfully received at 7816, packaging to "
- "send upper layers: DataLen = %d",
- __FUNCTION__, pRes.len);
- }
- } else {
- // fetch the data info and report to upper layer.
- wStatus = phNxpEse_GetData(&pRes.len, &pRes.p_data);
- if (ESESTATUS_SUCCESS == wStatus) {
- ALOGD_IF(ese_debug_enabled,
- "%s Data successfully received at 7816, packaging to "
- "send upper layers: DataLen = %d",
- __FUNCTION__, pRes.len);
- } else
- status = ESESTATUS_FAILED;
- }
-
- /* Copy the data to be read by the upper layer via transceive api */
- pRsp->len = pRes.len;
- pRsp->p_data = pRes.p_data;
-
- phNxpEseProto7816_3_Var.phNxpEseProto7816_CurrentState =
- PH_NXP_ESE_PROTO_7816_IDLE;
- phNxpEseProto7816_3_Var.reset_type = RESET_TYPE_NONE;
- ALOGD_IF(ese_debug_enabled, "Exit %s Status 0x%x", __FUNCTION__, status);
- return status;
-}
-
-/******************************************************************************
- * Function phNxpEseProto7816_RSync
- *
- * Description This function is used to send the RSync command
- *
- * Returns On success return true or else false.
- *
- ******************************************************************************/
-static ESESTATUS phNxpEseProto7816_RSync(void) {
- ESESTATUS status = ESESTATUS_FAILED;
- phNxpEseProto7816_3_Var.phNxpEseProto7816_CurrentState =
- PH_NXP_ESE_PROTO_7816_TRANSCEIVE;
- /* send the end of session s-frame */
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.FrameType = SFRAME;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.SframeInfo.sFrameType =
- RESYNCH_REQ;
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState = SEND_S_RSYNC;
- status = TransceiveProcess();
- phNxpEseProto7816_3_Var.phNxpEseProto7816_CurrentState =
- PH_NXP_ESE_PROTO_7816_IDLE;
- return status;
-}
-
-/******************************************************************************
- * Function phNxpEseProto7816_HardReset
- *
- * Description This function is used to send the spi hard reset command
- *
- * Returns On success return TRUE or else FALSE.
- *
- ******************************************************************************/
-static ESESTATUS phNxpEseProto7816_HardReset(void) {
- ESESTATUS status = ESESTATUS_FAILED;
-
- phNxpEseProto7816_3_Var.phNxpEseProto7816_CurrentState =
- PH_NXP_ESE_PROTO_7816_TRANSCEIVE;
- /* send the hard reset s-frame command*/
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.FrameType = SFRAME;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.SframeInfo.sFrameType =
- HARD_RESET_REQ;
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState =
- SEND_S_HRD_RST;
- status = TransceiveProcess();
- phNxpEseProto7816_3_Var.phNxpEseProto7816_CurrentState =
- PH_NXP_ESE_PROTO_7816_IDLE;
- return status;
-}
-
-/******************************************************************************
- * Function phNxpEseProto7816_ResetProtoParams
- *
- * Description This function is used to reset the 7816 protocol stack
- *instance
- *
- * Returns On success return true or else false.
- *
- ******************************************************************************/
-static ESESTATUS phNxpEseProto7816_ResetProtoParams(void) {
- unsigned long int tmpWTXCountlimit = PH_PROTO_7816_VALUE_ZERO;
- unsigned long int tmpRNACKCountlimit = PH_PROTO_7816_VALUE_ZERO;
- unsigned long int tmpWtxNtfCountlimit = PH_PROTO_7816_VALUE_ZERO;
- tmpWTXCountlimit = phNxpEseProto7816_3_Var.wtx_counter_limit;
- tmpRNACKCountlimit = phNxpEseProto7816_3_Var.rnack_retry_limit;
- tmpWtxNtfCountlimit = phNxpEseProto7816_3_Var.wtx_ntf_limit;
- phNxpEse_memset(&phNxpEseProto7816_3_Var, PH_PROTO_7816_VALUE_ZERO,
- sizeof(phNxpEseProto7816_t));
- phNxpEseProto7816_3_Var.wtx_counter_limit = tmpWTXCountlimit;
- phNxpEseProto7816_3_Var.rnack_retry_limit = tmpRNACKCountlimit;
- phNxpEseProto7816_3_Var.wtx_ntf_limit = tmpWtxNtfCountlimit;
- phNxpEseProto7816_3_Var.phNxpEseProto7816_CurrentState =
- PH_NXP_ESE_PROTO_7816_IDLE;
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState = IDLE_STATE;
- phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdFrameType = INVALID;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.FrameType = INVALID;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.maxDataLenIFSC =
- IFSC_SIZE_SEND;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.defaultDataLenIFSC =
- IFSC_SIZE_SEND;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.currentDataLenIFS =
- IFSC_SIZE_SEND;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.p_data = NULL;
- phNxpEseProto7816_3_Var.phNxpEseLastTx_Cntx.FrameType = INVALID;
- phNxpEseProto7816_3_Var.phNxpEseLastTx_Cntx.IframeInfo.maxDataLenIFSC =
- IFSC_SIZE_SEND;
- phNxpEseProto7816_3_Var.phNxpEseLastTx_Cntx.IframeInfo.defaultDataLenIFSC =
- IFSC_SIZE_SEND;
- phNxpEseProto7816_3_Var.phNxpEseLastTx_Cntx.IframeInfo.currentDataLenIFS =
- IFSC_SIZE_SEND;
- phNxpEseProto7816_3_Var.phNxpEseLastTx_Cntx.IframeInfo.p_data = NULL;
- /* Initialized with sequence number of the last I-frame sent */
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.seqNo =
- PH_PROTO_7816_VALUE_ONE;
- /* Initialized with sequence number of the last I-frame received */
- phNxpEseProto7816_3_Var.phNxpEseRx_Cntx.lastRcvdIframeInfo.seqNo =
- PH_PROTO_7816_VALUE_ONE;
- /* Initialized with sequence number of the last I-frame received */
- phNxpEseProto7816_3_Var.phNxpEseLastTx_Cntx.IframeInfo.seqNo =
- PH_PROTO_7816_VALUE_ONE;
- phNxpEseProto7816_3_Var.recoveryCounter = PH_PROTO_7816_VALUE_ZERO;
- phNxpEseProto7816_3_Var.timeoutCounter = PH_PROTO_7816_VALUE_ZERO;
- phNxpEseProto7816_3_Var.wtx_counter = PH_PROTO_7816_VALUE_ZERO;
- /* This update is helpful in-case a R-NACK is transmitted from the MW */
- phNxpEseProto7816_3_Var.lastSentNonErrorframeType = UNKNOWN;
- phNxpEseProto7816_3_Var.rnack_retry_counter = PH_PROTO_7816_VALUE_ZERO;
- return ESESTATUS_SUCCESS;
-}
-
-/******************************************************************************
- * Function phNxpEseProto7816_Reset
- *
- * Description This function is used to reset the 7816 protocol stack
- *instance
- *
- * Returns On success return true or else false.
- *
- ******************************************************************************/
-ESESTATUS phNxpEseProto7816_Reset(void) {
- ESESTATUS status = ESESTATUS_FAILED;
- /* Resetting host protocol instance */
- phNxpEseProto7816_ResetProtoParams();
- if (GET_CHIP_OS_VERSION() != OS_VERSION_4_0) {
- status = phNxpEseProto7816_HardReset();
- if (status == ESESTATUS_SUCCESS) {
- /* Updating the ATR information(IFS,..) to 7816 stack */
- phNxpEse_data atrRsp;
- phNxpEseProto7816_getAtr(&atrRsp);
- phNxpEse_free(atrRsp.p_data);
- }
- } else {
- /* Resynchronising ESE protocol instance */
- status = phNxpEseProto7816_RSync();
- }
- return status;
-}
-
-/******************************************************************************
- * Function phNxpEseProto7816_Open
- *
- * Description This function is used to open the 7816 protocol stack
- *instance
- *
- * Returns On success return true or else false.
- *
- ******************************************************************************/
-ESESTATUS phNxpEseProto7816_Open(phNxpEseProto7816InitParam_t initParam) {
- ESESTATUS status = ESESTATUS_FAILED;
- status = phNxpEseProto7816_ResetProtoParams();
- ALOGD_IF(ese_debug_enabled, "%s: First open completed, Congratulations",
- __FUNCTION__);
- /* Update WTX max. limit */
- phNxpEseProto7816_3_Var.wtx_counter_limit = initParam.wtx_counter_limit;
- phNxpEseProto7816_3_Var.rnack_retry_limit = initParam.rnack_retry_limit;
- phNxpEseProto7816_3_Var.wtx_ntf_limit = initParam.wtx_ntf_limit;
- if (initParam.interfaceReset) /* Do interface reset */
- {
- status = phNxpEseProto7816_IntfReset(initParam.pSecureTimerParams);
- if (ESESTATUS_SUCCESS == status) {
- phNxpEse_memcpy(initParam.pSecureTimerParams,
- &phNxpEseProto7816_3_Var.secureTimerParams,
- sizeof(phNxpEseProto7816SecureTimer_t));
- }
- } else /* Initialisation condition to achieve usecases like JCOP download */
- {
- if (GET_CHIP_OS_VERSION() != OS_VERSION_4_0) {
- status = phNxpEseProto7816_HardReset();
- /* Updating the ATR information (Eg: IFS,..) to 7816 stack */
- if (status == ESESTATUS_SUCCESS) {
- phNxpEse_data atrRsp;
- phNxpEseProto7816_getAtr(&atrRsp);
- phNxpEse_free(atrRsp.p_data);
- }
- } else {
- status = phNxpEseProto7816_RSync();
- }
- }
- return status;
-}
-
-/******************************************************************************
- * Function phNxpEseProto7816_Close
- *
- * Description This function is used to close the 7816 protocol stack
- *instance
- *
- * Returns On success return true or else false.
- *
- ******************************************************************************/
-ESESTATUS phNxpEseProto7816_Close(
- phNxpEseProto7816SecureTimer_t* pSecureTimerParams) {
- ESESTATUS status = ESESTATUS_FAILED;
- if (phNxpEseProto7816_3_Var.phNxpEseProto7816_CurrentState !=
- PH_NXP_ESE_PROTO_7816_IDLE)
- return status;
- phNxpEseProto7816_3_Var.phNxpEseProto7816_CurrentState =
- PH_NXP_ESE_PROTO_7816_DEINIT;
- phNxpEseProto7816_3_Var.recoveryCounter = 0;
- phNxpEseProto7816_3_Var.wtx_counter = 0;
- /* send the end of session s-frame */
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.FrameType = SFRAME;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.SframeInfo.sFrameType =
- PROP_END_APDU_REQ;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.SframeInfo.len =
- PH_PROTO_7816_VALUE_ZERO;
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState = SEND_S_EOS;
- status = TransceiveProcess();
- if (ESESTATUS_SUCCESS != status) {
- /* reset all the structures */
- ALOGE("%s TransceiveProcess failed ", __FUNCTION__);
- if (status == ESESTATUS_TRANSCEIVE_FAILED &&
- phNxpEseProto7816_3_Var.atrInfo.len > PH_PROTO_7816_VALUE_ZERO) {
- if (phNxpEseProto7816_3_Var.atrInfo
- .vendorID[PH_PROTO_ATR_RSP_VENDOR_ID_LEN - 1] <
- PH_SE_OS_VERSION_10) {
- ALOGD_IF(ese_debug_enabled, "%s shall trigger recovery", __FUNCTION__);
- status = ESESTATUS_RESPONSE_TIMEOUT;
- }
- }
- }
- phNxpEse_memcpy(pSecureTimerParams,
- &phNxpEseProto7816_3_Var.secureTimerParams,
- sizeof(phNxpEseProto7816SecureTimer_t));
- phNxpEseProto7816_3_Var.phNxpEseProto7816_CurrentState =
- PH_NXP_ESE_PROTO_7816_IDLE;
- return status;
-}
-
-/******************************************************************************
- * Function phNxpEseProto7816_CloseAllSessions
- *
- * Description This function is used to close the 7816 protocol stack
- *instance
- *
- * Returns On success return true or else false.
- *
- ******************************************************************************/
-ESESTATUS phNxpEseProto7816_CloseAllSessions(void) {
- ESESTATUS status = ESESTATUS_FAILED;
-
- /*Note:- Below OS version check using ATR shall
- * be removed while integrating with TEE/REE as ATR
- * information is not available in REE case*/
-
- if (phNxpEseProto7816_3_Var.atrInfo.vendorID[PH_PROTO_ATR_RSP_VENDOR_ID_LEN -
- 1] >= PH_SE_OS_VERSION_10) {
- uint8_t* buffer = (uint8_t*)phNxpEse_memalloc(sizeof(uint8_t));
- if (buffer != NULL) {
- buffer[PH_PROTO_7816_VALUE_ZERO] = PH_PROTO_CLOSE_ALL_SESSION_INF;
- /* send the end of session s-frame */
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.FrameType = SFRAME;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.SframeInfo.sFrameType =
- PROP_END_APDU_REQ;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.SframeInfo.p_data = buffer;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.SframeInfo.len =
- PH_PROTO_CLOSE_ALL_SESSION_LEN;
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState =
- SEND_S_EOS;
- status = TransceiveProcess();
- if (ESESTATUS_FAILED == status) {
- /* reset all the structures */
- ALOGD_IF(ese_debug_enabled, "%s EndOfSession failed ", __FUNCTION__);
- }
- phNxpEse_free(buffer);
- phNxpEseProto7816_3_Var.phNxpEseProto7816_CurrentState =
- PH_NXP_ESE_PROTO_7816_IDLE;
- }
- } else {
- ALOGD_IF(ese_debug_enabled, "%s Function not supported ", __FUNCTION__);
- status = ESESTATUS_SUCCESS;
- }
- return status;
-}
-
-/******************************************************************************
- * Function phNxpEseProto7816_IntfReset
- *
- * Description This function is used to reset just the current interface
- *
- * Returns On success return true or else false.
- *
- ******************************************************************************/
-ESESTATUS phNxpEseProto7816_IntfReset(
- phNxpEseProto7816SecureTimer_t* pSecureTimerParam) {
- ESESTATUS status = ESESTATUS_FAILED;
- ALOGD_IF(ese_debug_enabled, "Enter %s ", __FUNCTION__);
- phNxpEseProto7816_3_Var.phNxpEseProto7816_CurrentState =
- PH_NXP_ESE_PROTO_7816_TRANSCEIVE;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.FrameType = SFRAME;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.SframeInfo.sFrameType =
- INTF_RESET_REQ;
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState =
- SEND_S_INTF_RST;
- status = TransceiveProcess();
- if (ESESTATUS_FAILED == status) {
- /* reset all the structures */
- ALOGE("%s TransceiveProcess failed ", __FUNCTION__);
- }
- phNxpEse_memcpy(pSecureTimerParam, &phNxpEseProto7816_3_Var.secureTimerParams,
- sizeof(phNxpEseProto7816SecureTimer_t));
- phNxpEseProto7816_3_Var.phNxpEseProto7816_CurrentState =
- PH_NXP_ESE_PROTO_7816_IDLE;
- ALOGD_IF(ese_debug_enabled, "Exit %s ", __FUNCTION__);
- return status;
-}
-
-/******************************************************************************
- * Function phNxpEseProto7816_SetIfs
- *
- * Description This function is used to set IFSD value to card
- *
- * Returns On success return true or else false.
- *
- ******************************************************************************/
-ESESTATUS phNxpEseProto7816_SetIfs(uint16_t IFS_Size) {
- // phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.maxDataLenIFSC =
- // IFSC_Size;
- ESESTATUS status = ESESTATUS_FAILED;
- ALOGD_IF(ese_debug_enabled, "Enter %s ", __FUNCTION__);
- /* IFSD > IFSC not allowed, card will reject by R-NACK so not sending */
- if (IFS_Size >
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.maxDataLenIFSC) {
- phNxpEseProto7816_3_Var.currentIFSDSize =
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.maxDataLenIFSC;
- /* IFSD is greater than IFSC , set max IFSC as IFSD*/
- ALOGD_IF(ese_debug_enabled,
- "%s : IFSD greater than IFSC , set max IFSC as IFSD ",
- __FUNCTION__);
- } else {
- phNxpEseProto7816_3_Var.currentIFSDSize = IFS_Size;
- }
- phNxpEseProto7816_3_Var.phNxpEseProto7816_CurrentState =
- PH_NXP_ESE_PROTO_7816_TRANSCEIVE;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.FrameType = SFRAME;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.SframeInfo.sFrameType = IFS_REQ;
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState =
- SEND_S_IFS_ADJ;
- status = TransceiveProcess();
- if (ESESTATUS_FAILED == status) {
- /* reset all the structures */
- ALOGE("%s TransceiveProcess failed ", __FUNCTION__);
- }
- phNxpEseProto7816_3_Var.phNxpEseProto7816_CurrentState =
- PH_NXP_ESE_PROTO_7816_IDLE;
- ALOGD_IF(ese_debug_enabled, "Exit %s ", __FUNCTION__);
- return status;
-}
-
-/******************************************************************************
- * Function phNxpEseProto7816_GetIfs
- *
- * Description This function is used to get current IFS adjusted value wrt
- *card
- *
- * Returns On success return true or else false.
- *
- ******************************************************************************/
-uint16_t phNxpEseProto7816_GetIfs(void) {
- ALOGD_IF(
- ese_debug_enabled, "Enter %s current IFSC = %d", __FUNCTION__,
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo.currentDataLenIFS);
- return phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.IframeInfo
- .currentDataLenIFS;
-}
-
-/******************************************************************************
- * Function phNxpEseProto7816_GetOsMode
- *
- * Description This function is used to get current OS Mode
- *
- * Returns 0x01 : JCOP_MODE
- * 0x02 : OSU_MODE
- *
- ******************************************************************************/
-phNxpEseProto7816_OsType_t phNxpEseProto7816_GetOsMode(void) {
- phNxpEseProto7816_OsType_t mode = UNKNOWN_MODE;
- if (GET_CHIP_OS_VERSION() >= OS_VERSION_5_2_2) {
- if (phNxpEseProto7816_3_Var.extndAtrInfo.osType == MODE_JCOP) {
- ALOGD_IF(ese_debug_enabled, "Enter %s OS Mode = %s", __FUNCTION__,
- "JCOP Mode");
- mode = JCOP_MODE;
- } else if (phNxpEseProto7816_3_Var.extndAtrInfo.osType == MODE_OSU) {
- ALOGD_IF(ese_debug_enabled, "Enter %s OS Mode = %s", __FUNCTION__,
- "OSU Mode");
- mode = OSU_MODE;
- } else {
- ALOGD_IF(ese_debug_enabled, "Enter %s OS Mode = %s", __FUNCTION__,
- "UNKNOWN Mode");
- mode = UNKNOWN_MODE;
- }
- } else {
- ALOGE("%s function not supported", __FUNCTION__);
- }
- return mode;
-}
-
-/******************************************************************************
- * Function phNxpEseProto7816_getAtr
- *
- * Description This function is used to get the ATR data from ESE
- *
- * Returns On success return true or else false
- *
- ******************************************************************************/
-ESESTATUS phNxpEseProto7816_getAtr(phNxpEse_data* pATRRsp) {
- ESESTATUS status = ESESTATUS_FAILED;
-
- ALOGD_IF(ese_debug_enabled, "Enter %s ", __FUNCTION__);
- phNxpEseProto7816_3_Var.phNxpEseProto7816_CurrentState =
- PH_NXP_ESE_PROTO_7816_TRANSCEIVE;
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.FrameType = SFRAME;
-
- phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx.SframeInfo.sFrameType = ATR_REQ;
- phNxpEseProto7816_3_Var.phNxpEseProto7816_nextTransceiveState =
- SEND_S_ATR_REQ;
- status = TransceiveProcess();
- if (ESESTATUS_FAILED == status) {
- /* reset all the structures */
- ALOGD_IF(ese_debug_enabled, "%s TransceiveProcess failed ", __FUNCTION__);
- }
-
- status = phNxpEse_GetData(&(pATRRsp->len), &(pATRRsp->p_data));
- if (ESESTATUS_SUCCESS == status) {
- ALOGD_IF(ese_debug_enabled,
- "%s Data successfully received at 7816, packaging to "
- "send upper layers: DataLen = %d",
- __FUNCTION__, pATRRsp->len);
- } else
- status = ESESTATUS_FAILED;
- phNxpEseProto7816_3_Var.phNxpEseProto7816_CurrentState =
- PH_NXP_ESE_PROTO_7816_IDLE;
- ALOGD_IF(ese_debug_enabled, "Exit %s ", __FUNCTION__);
- return status;
-}
-
-/******************************************************************************
- * Function phNxpEseProto7816_SetEndPoint
- *
- * Description This function is used to set end point protocol context
- *
- * Returns Always return TRUE (1).
- *
- ******************************************************************************/
-ESESTATUS phNxpEseProto7816_SetEndPoint(uint8_t uEndPoint) {
- ESESTATUS status = ESESTATUS_FAILED;
- if (uEndPoint == END_POINT_ESE || uEndPoint == END_POINT_EUICC) {
- phNxpEseProto7816_3_Var = phNxpEseProto7816_ptr[uEndPoint];
- status = ESESTATUS_SUCCESS;
- } else {
- /*Do nothing return fail*/
- }
- return status;
-}
-
-/******************************************************************************
- * Function phNxpEseProto7816_ResetEndPoint
- *
- * Description This function is used to set end point protocol context
- *
- * Returns Always return TRUE (1).
- *
- ******************************************************************************/
-ESESTATUS phNxpEseProto7816_ResetEndPoint(uint8_t uEndPoint) {
- ESESTATUS status = ESESTATUS_FAILED;
- if (uEndPoint == END_POINT_ESE || uEndPoint == END_POINT_EUICC) {
- phNxpEseProto7816_ptr[uEndPoint] = phNxpEseProto7816_3_Var;
- status = ESESTATUS_SUCCESS;
- } else {
- /*Do nothing return fail*/
- }
- return status;
-}
-
-/******************************************************************************
- * Function phNxpEseProto7816_ResendLastSFrameReq
- *
- * Description This function is used to Resend S-Frame on receiving
- * non S-Frame response
- *
- * Returns If last sent Frame is S-Frame
- * return TRUE(S-Frame) otherwise FALSE(Non-S-Frame).
- *
- ******************************************************************************/
-static bool phNxpEseProto7816_ResendLastSFrameReq(void) {
- bool isLastSFrameReq = false;
- if (phNxpEseProto7816_3_Var.lastSentNonErrorframeType == SFRAME &&
- WTX_RSP !=
- phNxpEseProto7816_3_Var.phNxpEseLastTx_Cntx.SframeInfo.sFrameType) {
- ALOGD_IF(ese_debug_enabled,
- "%s Unexpected Frame, re-transmitting the previous S-frame",
- __FUNCTION__);
- phNxpEse_memcpy(&phNxpEseProto7816_3_Var.phNxpEseNextTx_Cntx,
- &phNxpEseProto7816_3_Var.phNxpEseLastTx_Cntx,
- sizeof(phNxpEseProto7816_NextTx_Info_t));
- isLastSFrameReq = true;
- }
- return isLastSFrameReq;
-}
-
-/** @} */
diff --git a/snxxx/libese-spi/p73/lib/phNxpEseProto7816_3.h b/snxxx/libese-spi/p73/lib/phNxpEseProto7816_3.h
deleted file mode 100755
index 8a22daa..0000000
--- a/snxxx/libese-spi/p73/lib/phNxpEseProto7816_3.h
+++ /dev/null
@@ -1,623 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2018-2021 NXP
- *
- * 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.
- *
- ******************************************************************************/
-#ifndef _PHNXPESEPROTO7816_3_H_
-#define _PHNXPESEPROTO7816_3_H_
-#include <ese_config.h>
-#include <phNxpEseDataMgr.h>
-#include <phNxpEseFeatures.h>
-#include <phNxpEse_Internal.h>
-
-/**
- * \addtogroup ISO7816-3_protocol_lib
- * \brief 7816-3 PROTOCOL STACK
- * @{ */
-
-/********************* Definitions and structures *****************************/
-
-/*!
- * \brief S-Frame types used in 7816-3 protocol stack
- */
-typedef enum sFrameTypes {
- RESYNCH_REQ = 0x00, /*!< Re-synchronisation request between host and ESE */
- RESYNCH_RSP = 0x20, /*!< Re-synchronisation response between host and ESE */
- IFS_REQ = 0x01, /*!< IFSC size request */
- IFS_RES = 0x21, /*!< IFSC size response */
- ABORT_REQ = 0x02, /*!< Abort request */
- ABORT_RES = 0x22, /*!< Abort response */
- WTX_REQ = 0x03, /*!< WTX request */
- WTX_RSP = 0x23, /*!< WTX response */
- INTF_RESET_REQ = 0x04, /*!< Interface reset request */
- INTF_RESET_RSP = 0x24, /*!< Interface reset response */
- PROP_END_APDU_REQ = 0x05, /*!< Proprietary Enf of APDU request */
- PROP_END_APDU_RSP = 0x25, /*!< Proprietary Enf of APDU response */
- HARD_RESET_REQ = 0x06, /*!< Chip reset request */
- HARD_RESET_RSP = 0x26, /*!< Chip reset request */
- ATR_REQ = 0x07, /*!< ATR request */
- ATR_RSP = 0x27, /*!< ATR response */
- INVALID_REQ_RES /*!< Invalid request */
-} sFrameTypes_t;
-
-/*!
- * \brief R-Frame types used in 7816-3 protocol stack
- */
-typedef enum rFrameTypes {
- RACK = 0x01, /*!< R-frame Acknowledgement frame indicator */
- RNACK = 0x02 /*!< R-frame Negative-Acknowledgement frame indicator */
-} rFrameTypes_t;
-
-/*!
- * \brief R-Frame error types used 7816-3 protocol stack
- */
-typedef enum rFrameErrorTypes {
- NO_ERROR, /*!< R-frame received with success */
- PARITY_ERROR, /*!< R-frame received with parity error */
- OTHER_ERROR, /*!< R-frame received with Other error */
- SOF_MISSED_ERROR, /*!< R-frame received with frame missing error */
- UNDEFINED_ERROR /*!< R-frame received with some undefined error */
-} rFrameErrorTypes_t;
-
-/*!
- * \brief Frame types used in 7816-3 protocol stack
- */
-typedef enum phNxpEseProto7816_FrameTypes {
- IFRAME, /*!< Frame type: I-frame */
- SFRAME, /*!< Frame type: S-frame */
- RFRAME, /*!< Frame type: R-frame */
- INVALID, /*!< Frame type: Invalid */
- UNKNOWN /*!< Frame type: Unknown */
-} phNxpEseProto7816_FrameTypes_t;
-
-/*!
- * \brief 7816-3 protocol stack states
- */
-typedef enum phNxpEseProto7816_State {
- PH_NXP_ESE_PROTO_7816_IDLE, /*!< 7816-3 protocol state: IDLE */
- PH_NXP_ESE_PROTO_7816_TRANSCEIVE, /*!< 7816-3 protocol state: TRANSCEIVE going
- on */
- PH_NXP_ESE_PROTO_7816_DEINIT /*!< 7816-3 protocol state: DeInit going on */
-} phNxpEseProto7816_State_t;
-
-/*!
- * \brief 7816-3 protocol transceive states
- */
-typedef enum phNxpEseProto7816_TransceiveStates {
- IDLE_STATE, /*!< 7816-3 protocol transceive state: IDLE */
- SEND_IFRAME, /*!< 7816-3 protocol transceive state: I-frame to be sent */
- SEND_R_NACK, /*!< 7816-3 protocol transceive state: R-NACK frame to be sent */
- SEND_R_ACK, /*!< 7816-3 protocol transceive state: R-ACK frame to be sent */
- SEND_S_RSYNC, /*!< 7816-3 protocol transceive state: S-frame
- re-synchronisation command to be sent */
- SEND_S_INTF_RST, /*!< 7816-3 protocol transceive state: S-frame interface
- reset command to be sent */
- SEND_S_EOS, /*!< 7816-3 protocol transceive state: S-frame end of session
- command to be sent */
- SEND_S_HRD_RST, /*!< 7816-3 protocol transceive state: S-frame
- chip/hard reset command to be sent */
- SEND_S_WTX_REQ, /*!< 7816-3 protocol transceive state: S-frame WTX command to
- be sent */
- SEND_S_WTX_RSP, /*!< 7816-3 protocol transceive state: S-frame WTX response to
- be sent */
- SEND_S_IFS_ADJ, /*!< 7816-3 protocol transceive state: S-frame IFS adjustment
- */
- SEND_S_ATR_REQ, /*!< 7816-3 protocol transceive state: S-frame ATR request */
-} phNxpEseProto7816_TransceiveStates_t;
-
-/*!
- * \brief I-frame information structure for ISO 7816-3
- *
- * This structure holds the information of I-frame used for sending
- * and receiving the frame packet.
- *
- */
-typedef struct iFrameInfo {
- bool isChained; /*!< I-frame: Indicates if more frames to follow in the same
- data packet or not */
- uint8_t* p_data; /*!< I-frame: Actual data (Information field (INF)) */
-
- uint8_t seqNo; /*!< I-frame: Sequence number of the I-frame */
-
- uint32_t maxDataLenIFSC; /*!< I-frame: Maximum data length to be allowed in a
- single I-frame */
- uint32_t defaultDataLenIFSC; /*!< I-frame: Maximum data length to be allowed
- in a single I-frame */
- uint32_t currentDataLenIFS; /*!< I-frame: Current data length agreed
- between PCD and Card to be allowed in a
- single I-frame */
-
- uint32_t dataOffset; /*!< I-frame: Offset to the actual data(INF) for the
- current frame of the packet */
- uint32_t totalDataLen; /*!< I-frame: Total data left in the packet, used to
- set the chained flag/calculating offset */
- uint32_t sendDataLen; /*!< I-frame: the length of the I-frame actual data */
-} iFrameInfo_t;
-
-/*!
- * \brief S-frame information structure for ISO 7816-3
- *
- * This structure holds the information of S-frame used for sending
- * and receiving the frame packet.
- *
- */
-typedef struct sFrameInfo {
- sFrameTypes_t sFrameType; /*!< S-frame: Type of S-frame cmd/rsp */
- uint8_t* p_data; /*!< S-frame: Actual data (Information field (INF)) */
- uint8_t len; /*!< S-frame: the length of the I-frame actual data */
-} sFrameInfo_t;
-
-/*!
- * \brief R-frame information structure for ISO 7816-3
- *
- * This structure holds the information of R-frame used for sending
- * and receiving the frame packet.
- *
- */
-typedef struct rFrameInfo {
- uint8_t seqNo; /*!< R-frame: Sequence number of the expected I-frame */
- rFrameErrorTypes_t errCode; /*!< R-frame: Error type */
-} rFrameInfo_t;
-
-/*!
- * \brief ATRInfo: ISO7816 ATR Information bytes
- *
- * This structure holds ATR information bytes
- *
- */
-typedef struct phNxpEseProto7816_ATR_Info {
- uint8_t len; /*!< ATR: ATR length in bytes */
- uint8_t vendorID[5]; /*!< ATR: VendorID according to ISO7816-5 */
- uint8_t dll_IC; /*!< ATR: Data Link Layer - Interface Character */
- uint8_t bgt[2]; /*!< ATR: Minimum guard time in milliseconds for
- T=1 blocks sent in opposite directions */
- uint8_t
- bwt[2]; /*!< ATR: Maximum allowed command processing
- time in milliseconds before card has sent either
- command response or S(WTX) requesting processing time extension */
- uint8_t maxFreq[2]; /*!< ATR: Max supported clock frequency in kHz */
- uint8_t checksum; /*!< ATR: Checksum (0 = LRC / 1 = CRC) */
- uint8_t defaultIFSC; /*!< ATR: Default IFS size */
- uint8_t numChannels; /*!< ATR: Number of logical connections supported */
- uint8_t maxIFSC[2]; /*!< ATR: Maximum size of IFS supported */
- uint8_t capabilities[2]; /*!< ATR: Bitmap to indicate various features
- supported by SE Bit-1: SE Data Available Line
- supported. Bit-2: SE Data available polarity. 1 - Data
- available GPIO will be pulled HIGH when SE response is
- ready Bit 3: SE chip reset S-blk command supported
- Bit-4: Extended frame length feature supported Bit-5:
- Support for more than one logical channel Bit 6 to 16:
- Reserved for future use
- */
-} phNxpEseProto7816_ATR_Info_t;
-
-typedef struct phNxpEseProto7816_ATR_Info2 {
- uint8_t channelNo; /*!< ATR: Current ongoing channel no */
- uint8_t osType; /*!< ATR: Indicates OS Type
- JCOP_OS = 0x01
- UPDATER_OS = 0x02 */
-} phNxpEseProto7816_ATR_Info2_t;
-
-/*!
- * \brief Next/Last Tx information structure holding transceive data
- *
- * This structure holds the information of the next/last sent
- * I-frame/R-frame/S-frame depending on the frame type
- *
- */
-typedef struct phNxpEseProto7816_NextTx_Info {
- iFrameInfo_t
- IframeInfo; /*!< Information of the I-frame to be send next or the last
- sent I-frame depending on the frame type */
- rFrameInfo_t
- RframeInfo; /*!< Information of the R-frame to be send next or the last
- sent R-frame depending on the frame type */
- sFrameInfo_t
- SframeInfo; /*!< Information of the S-frame to be send next or the last
- sent S-frame depending on the frame type */
- phNxpEseProto7816_FrameTypes_t
- FrameType; /*!< Frame (I/R/S frames) type to be sent next */
-} phNxpEseProto7816_NextTx_Info_t;
-
-/*!
- * \brief Last sent Tx ransceive data
- *
- * This structure holds the information of the last sent
- * I-frame/R-frame/S-frame
- *
- */
-typedef phNxpEseProto7816_NextTx_Info_t phNxpEseProto7816_LastTx_Info_t;
-
-/*!
- * \brief Last Rx information structure holding transceive data
- *
- * This structure holds the information of the next/last sent
- * I-frame/R-frame/S-frame
- *
- */
-typedef struct phNxpEseRx_Cntx {
- iFrameInfo_t lastRcvdIframeInfo; /*!< I-frame: Last received frame */
- rFrameInfo_t lastRcvdRframeInfo; /*!< R-frame: Last received frame */
- sFrameInfo_t lastRcvdSframeInfo; /*!< S-frame: Last received frame */
- phNxpEseProto7816_FrameTypes_t
- lastRcvdFrameType; /*!< Last received frame type */
-} phNxpEseRx_Cntx_t;
-
-/*!
- * \brief Proprietery: Secure timer value updates
- *
- * This structure holds the secure timer value
- *
- */
-typedef struct phNxpEseProto7816SecureTimer {
- unsigned int secureTimer1;
- unsigned int secureTimer2;
- unsigned int secureTimer3;
-} phNxpEseProto7816SecureTimer_t;
-
-/*!
- * \brief structure to hold the interface reset parameters
- * secure timer(only for PN8xT products) and atr info.
- *
- */
-typedef struct phNxpEseProto7816_IntfResetParams {
- phNxpEseProto7816SecureTimer_t* pSecureTimerParam;
- phNxpEse_data* pAtrData;
-} phNxpEseProto7816_IntfResetParams_t;
-/*!
- * \brief 7816-3 protocol stack context structure
- *
- * This structure holds the complete information of the
- * 7816-3 protocol stack context
- *
- */
-typedef struct phNxpEseProto7816 {
- phNxpEseProto7816_LastTx_Info_t
- phNxpEseLastTx_Cntx; /*!< Last transmitted frame information */
- phNxpEseProto7816_NextTx_Info_t
- phNxpEseNextTx_Cntx; /*!< Next frame to be transmitted */
- phNxpEseRx_Cntx_t phNxpEseRx_Cntx; /*!< Last received frame information */
- phNxpEseProto7816_TransceiveStates_t
- phNxpEseProto7816_nextTransceiveState; /*!< Next Transceive state. It
- determines the next
- action to be done from host */
- phNxpEseProto7816_State_t
- phNxpEseProto7816_CurrentState; /*!< Current protocol stack state */
- uint8_t recoveryCounter; /*!< Keeps track of number of error recovery done.
- Stack exits after it reaches max. count */
- unsigned long int wtx_counter_limit; /*!< Max. WTX counter limit */
- unsigned long int wtx_counter; /*!< WTX count tracker */
- uint8_t timeoutCounter; /*!< Keeps track of number of timeout happened. Stack
- exits after it reaches max. count */
- phNxpEseProto7816_FrameTypes_t
- lastSentNonErrorframeType; /*!< Copy of the last sent non-error frame
- type: R-ACK, S-frame, I-frame */
- unsigned long int rnack_retry_limit;
- unsigned long int rnack_retry_counter;
- unsigned long int
- wtx_ntf_limit; /*!< Wtx count interval to notify service registered*/
- phNxpEseProto7816SecureTimer_t secureTimerParams;
- unsigned long int reset_type;
- uint32_t currentIFSDSize;
- phNxpEseProto7816_ATR_Info_t atrInfo;
- phNxpEseProto7816_ATR_Info2_t extndAtrInfo;
-} phNxpEseProto7816_t;
-
-/*!
- * \brief 7816-3 protocol stack init params
- *
- * This structure holds the parameters to be passed to open 7816-3 protocl stack
- *instance
- *
- */
-typedef struct phNxpEseProto7816InitParam {
- unsigned long int wtx_counter_limit; /*!< WTX count limit */
- bool interfaceReset; /*!< INTF reset required or not>*/
- unsigned long int rnack_retry_limit;
- phNxpEseProto7816SecureTimer_t*
- pSecureTimerParams; /*!< Secure timer value updated here >*/
- unsigned long int
- wtx_ntf_limit; /*!< Wtx count interval to notify service registered*/
-} phNxpEseProto7816InitParam_t;
-
-/*!
- * \brief 7816-3 protocol PCB bit level structure
- *
- * This structure holds the bit level information of PCB byte
- * as per 7816-3 protocol
- *
- */
-typedef struct phNxpEseProto7816_PCB_bits {
- uint8_t lsb : 1; /*!< PCB: lsb */
- uint8_t bit2 : 1; /*!< PCB: bit2 */
- uint8_t bit3 : 1; /*!< PCB: bit3 */
- uint8_t bit4 : 1; /*!< PCB: bit4 */
- uint8_t bit5 : 1; /*!< PCB: bit5 */
- uint8_t bit6 : 1; /*!< PCB: bit6 */
- uint8_t bit7 : 1; /*!< PCB: bit7 */
- uint8_t msb : 1; /*!< PCB: msb */
-} phNxpEseProto7816_PCB_bits_t;
-
-/*!
- * \brief Max. size of the frame that can be sent
- */
-#define IFSC_SIZE_SEND 254
-/*!
- * \brief Delay to be used before sending the next frame, after error reported
- * by ESE
- */
-#define DELAY_ERROR_RECOVERY_1_MS 1000
-
-#define GET_DELAY_ERROR_RECOVERY() \
- ((GET_CHIP_OS_VERSION() != OS_VERSION_4_0) \
- ? (10 * DELAY_ERROR_RECOVERY_1_MS) \
- : (3.5 * DELAY_ERROR_RECOVERY_1_MS))
-/*!
- * \brief 7816-3 protocol frame
- * header length
- */
-#define PH_PROTO_7816_HEADER_LEN 0x03
-/*!
- * \brief 7816-3 protocol ext.frame header length
- */
-#define PH_PROTO_7816_EXT_HEADER_LEN 0x05
-/*!
- * \brief 7816-3 protocol frame CRC length
- */
-#define PH_PROTO_7816_CRC_LEN 0x01
-/*!
- * \brief 7816-3 Chaining flag bit for masking
- */
-#define PH_PROTO_7816_CHAINING 0x20
-/*!
- * \brief 7816-3 PCB byte offset
- */
-#define PH_PROPTO_7816_PCB_OFFSET 0x01
-/*!
- * \brief 7816-3 frame length offset
- */
-#define PH_PROPTO_7816_FRAME_LENGTH_OFFSET 0x02
-/*!
- * \brief 7816-3 S-frame timer 1
- */
-#define PH_PROPTO_7816_SFRAME_TIMER1 0xF1
-/*!
- * \brief 7816-3 S-frame timer 2
- */
-#define PH_PROPTO_7816_SFRAME_TIMER2 0xF2
-/*!
- * \brief 7816-3 S-frame timer 3
- */
-#define PH_PROPTO_7816_SFRAME_TIMER3 0xF3
-
-/*!
- * \brief 7816-3 S-block request command mask
- */
-#define PH_PROTO_7816_S_BLOCK_REQ 0xC0
-/*!
- * \brief 7816-3 S-block response mask
- */
-#define PH_PROTO_7816_S_BLOCK_RSP 0xE0
-/*!
- * \brief 7816-3 S-block reset command mask
- */
-#define PH_PROTO_7816_S_RESET 0x04
-/*!
- * \brief 7816-3 S-block End of APDU cmd mask
- */
-#define PH_PROTO_7816_S_END_OF_APDU 0x05
-/*!
- * \brief 7816-3 S-block WTX mask
- */
-#define PH_PROTO_7816_S_WTX 0x03
-/*!
- * \brief 7816-3 S-block re-sync mask
- */
-#define PH_PROTO_7816_S_RESYNCH 0x00
-/*!
- * \brief 7816-3 S-block hard reset cmd mask
- */
-#define PH_PROTO_7816_S_HRD_RST_CMD 0x06
-/*!
- * \brief 7816-3 protocol max. error retry counter
- */
-#define PH_PROTO_7816_FRAME_RETRY 01
-/*!
- * \brief 7816-3 protocol max. error retry counter based on OS version
- */
-#define GET_FRAME_RETRY_COUNT() \
- ((GET_CHIP_OS_VERSION() != OS_VERSION_4_0) \
- ? (3 * PH_PROTO_7816_FRAME_RETRY) \
- : (10 * PH_PROTO_7816_FRAME_RETRY))
-
-/*!
- * \brief 7816-3 protocol max. WTX default count
- */
-#define PH_PROTO_WTX_DEFAULT_COUNT 500
-/*!
- * \brief 7816-3 protocol max. timeout retry count
- */
-#define PH_PROTO_7816_TIMEOUT_RETRY_COUNT 1
-/*!
- * \brief 7816-3 to represent magic number zero
- */
-#define PH_PROTO_7816_VALUE_ZERO 0x00
-/*!
- * \brief 7816-3 to represent magic number one
- */
-#define PH_PROTO_7816_VALUE_ONE 0x01
-/*!
- * \brief 7816-3 for max retry for CRC error
- */
-#define MAX_RNACK_RETRY_LIMIT 0x02
-/*!
- * \brief APIs exposed from the 7816-3 protocol layer
- */
-#define RESET_TYPE_NONE 0x00
-/*!
- * \brief APIs exposed from the 7816-3 protocol layer
- */
-#define EXTENDED_FRAME_MARKER 0xFF
-/*!
- * \brief APIs exposed from the 7816-3 protocol layer
- */
-#define PH_PROTO_CLOSE_ALL_SESSION_INF 0x01
-/*!
- * \brief APIs exposed from the 7816-3 protocol layer
- */
-#define PH_PROTO_CLOSE_ALL_SESSION_LEN 0x01
-/*!
- * \brief APIs exposed from the 7816-3 protocol layer
- */
-#define PH_PROTO_ATR_RSP_VENDOR_ID_LEN 0x05
-/*!
- * \brief APIs exposed from the 7816-3 protocol layer
- */
-#define PH_SE_OS_VERSION_10 0x10
-/*!
- * \brief APIs exposed from the 7816-3 protocol layer
- */
-#define PH_SE_OS_VERSION_11 0x11
-/*!
- * \brief OS version on SE for SN220
- */
-#define PH_SE_OS_VERSION_20 0x20
-/*!
- * \brief Default wait extension notification interval
- */
-#define PH_DEFAULT_WTX_NTF_LIMIT 0x03
-/*!
- * \delay for hard reset response
- */
-#define HARD_RESET_RES_DELAY 4000
-
-/**
- * \ingroup ISO7816-3_protocol_lib
- * \brief This function is used to reset just the current interface
- *
- * \param[in] secureTimerParams - secure timer instance
- *
- */
-ESESTATUS phNxpEseProto7816_IntfReset(
- phNxpEseProto7816SecureTimer_t* secureTimerParams);
-
-/**
- * \ingroup ISO7816-3_protocol_lib
- * \brief This function is used to close the 7816 protocol stack instance
- *
- * \param[in] secureTimerParams - secure timer instance
- *
- */
-ESESTATUS phNxpEseProto7816_Close(
- phNxpEseProto7816SecureTimer_t* secureTimerParams);
-
-/**
- * \ingroup ISO7816-3_protocol_lib
- * \brief This function is used to open the 7816 protocol stack instance
- *
- * \param[in] initParam: Initialization params
- *
- */
-ESESTATUS phNxpEseProto7816_Open(phNxpEseProto7816InitParam_t initParam);
-
-/**
- * \ingroup ISO7816-3_protocol_lib
- * \brief This function is used to
- * 1. Send the raw data received from application after
- *computing LRC
- * 2. Receive the response data from ESE, decode, process
- *and
- * store the data.
- * 3. Get the final complete data and sent back to application
- *
- * \param[in] pCmd: Command to ESE
- * \param[out] pRsp: Response from ESE
- *
- *
- */
-ESESTATUS phNxpEseProto7816_Transceive(phNxpEse_data* pCmd,
- phNxpEse_data* pRsp);
-
-/**
- * \ingroup ISO7816-3_protocol_lib
- * \brief This function is used to reset the 7816 protocol stack instance
- *
- *
- *
- */
-ESESTATUS phNxpEseProto7816_Reset(void);
-
-/**
- * \ingroup ISO7816-3_protocol_lib
- * \brief This function is used to set the max T=1 data send size
- *
- * \param[in] IFS_Size: Max. size of the I-frame
- *
- */
-ESESTATUS phNxpEseProto7816_SetIfs(uint16_t IFS_Size);
-/**
- * \ingroup ISO7816-3_protocol_lib
- * \brief This function is used to set the endpoint
- *
- * \param[in] uEndPoint: END_POINT_ESE = 0 (eSE services), END_POINT_EUICC
- * =1(UICC services)
- *
- */
-ESESTATUS phNxpEseProto7816_SetEndPoint(uint8_t uEndPoint);
-/**
- * \ingroup ISO7816-3_protocol_lib
- * \brief This function is used to reset the endpoint
- *
- * \param[in] uEndPoint: END_POINT_ESE = 0 (eSE services), END_POINT_EUICC
- * =1(UICC services)
- *
- */
-ESESTATUS phNxpEseProto7816_ResetEndPoint(uint8_t uEndPoint);
-/**
- * \ingroup ISO7816-3_protocol_lib
- * \brief This function is used to get ATR bytes for the application
- *
- * \param[out] pATRRsp: Response ATR bytes from ESE
- *
- */
-ESESTATUS phNxpEseProto7816_getAtr(phNxpEse_data* pATRRsp);
-
-/**
- * \ingroup ISO7816-3_protocol_lib
- * \brief This function is used to get the max T=1 data send size
- *
- * \retval Current IFS adjusted value wrt card.
- *
- */
-uint16_t phNxpEseProto7816_GetIfs(void);
-
-/**
- * \ingroup ISO7816-3_protocol_lib
- * \brief This function is used to get OS mode(JCOP/OSU)
- *
- * \retval OS mode(JCOP/OSU).
- *
- */
-phNxpEseProto7816_OsType_t phNxpEseProto7816_GetOsMode(void);
-/**
- * \ingroup ISO7816-3_protocol_lib
- * \brief This function is used to check eSE is alive/responding
- *
- *
- *
- */
-ESESTATUS phNxpEseProto7816_CloseAllSessions(void);
-/** @} */
-#endif /* _PHNXPESEPROTO7816_3_H_ */
diff --git a/snxxx/libese-spi/p73/lib/phNxpEse_Apdu_Api.cpp b/snxxx/libese-spi/p73/lib/phNxpEse_Apdu_Api.cpp
deleted file mode 100755
index 9a01370..0000000
--- a/snxxx/libese-spi/p73/lib/phNxpEse_Apdu_Api.cpp
+++ /dev/null
@@ -1,270 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2018-2019,2021 NXP
- *
- * 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.
- *
- ******************************************************************************/
-/**
- * \addtogroup ISO7816-4_application_protocol_implementation
- *
- * @{ */
-#define LOG_TAG "NxpEseHal"
-#include <log/log.h>
-#include <phNxpEse_Apdu_Api.h>
-#include <phNxpEse_Api.h>
-
-static ESESTATUS phNxpEse_7816_FrameCmd(pphNxpEse_7816_cpdu_t pCmd,
- uint8_t** pcmd_data, uint32_t* cmd_len);
-
-/******************************************************************************
- * Function phNxpEse_7816_Transceive
- *
- * Description This function prepares C-APDU and sends to p61 and receives
- * response from the p61. also it parses all required fields of
- * the response PDU.
- *
- * Returns On Success ESESTATUS_SUCCESS else proper error code
- *
- ******************************************************************************/
-ESESTATUS phNxpEse_7816_Transceive(pphNxpEse_7816_cpdu_t pCmd,
- pphNxpEse_7816_rpdu_t pRsp) {
- ESESTATUS status = ESESTATUS_FAILED;
- ALOGD_IF(ese_debug_enabled, " %s Enter \n", __FUNCTION__);
-
- uint32_t cmd_len = 0;
- uint8_t* pCmd_data = NULL;
- phNxpEse_data pCmdTrans;
- phNxpEse_data pRspTrans;
- phNxpEse_memset(&pCmdTrans, 0x00, sizeof(phNxpEse_data));
- phNxpEse_memset(&pRspTrans, 0x00, sizeof(phNxpEse_data));
-
- if (NULL == pCmd || NULL == pRsp) {
- ALOGE(" %s Invalid prameter \n", __FUNCTION__);
- status = ESESTATUS_INVALID_PARAMETER;
- } else if (pCmd->cpdu_type > 1) {
- ALOGE(" %s Invalid cpdu type \n", __FUNCTION__);
- status = ESESTATUS_INVALID_CPDU_TYPE;
- } else if (0 < pCmd->le_type && NULL == pRsp->pdata) {
- /* if response is requested, but no valid res buffer
- * provided by application */
- ALOGE(" %s Invalid response buffer \n", __FUNCTION__);
- status = ESESTATUS_INVALID_BUFFER;
- } else {
- status = phNxpEse_7816_FrameCmd(pCmd, &pCmd_data, &cmd_len);
- if (ESESTATUS_SUCCESS == status) {
- pCmdTrans.len = cmd_len;
- pCmdTrans.p_data = pCmd_data;
- status = phNxpEse_Transceive(&pCmdTrans, &pRspTrans);
- if (ESESTATUS_SUCCESS != status) {
- ALOGE(" %s phNxpEse_Transceive Failed \n", __FUNCTION__);
- if ((pRspTrans.len > 0) && (pRspTrans.p_data != NULL)) {
- pRsp->sw2 = *(pRspTrans.p_data + (pRspTrans.len - 1));
- pRspTrans.len--;
- pRsp->sw1 = *(pRspTrans.p_data + (pRspTrans.len - 1));
- pRspTrans.len--;
- pRsp->len = pRspTrans.len;
- }
- } else {
- if ((pRspTrans.len > 0) && (pRspTrans.p_data != NULL)) {
- pRsp->sw2 = *(pRspTrans.p_data + (pRspTrans.len - 1));
- pRspTrans.len--;
- pRsp->sw1 = *(pRspTrans.p_data + (pRspTrans.len - 1));
- pRspTrans.len--;
- pRsp->len = pRspTrans.len;
- ALOGD_IF(ese_debug_enabled, "pRsp->len %d", pRsp->len);
- if (pRspTrans.len > 0 && NULL != pRsp->pdata) {
- phNxpEse_memcpy(pRsp->pdata, pRspTrans.p_data, pRspTrans.len);
- status = ESESTATUS_SUCCESS;
- } else if (pRspTrans.len == 0) {
- status = ESESTATUS_SUCCESS;
- } else {
- /* if application response buffer is null and data is present */
- ALOGE("Invalid Res buffer");
- status = ESESTATUS_FAILED;
- }
- ALOGD_IF(ese_debug_enabled, "Freeing memory pRspTrans.p_data ");
- phNxpEse_free(pRspTrans.p_data);
- pRspTrans.p_data = NULL;
- pRspTrans.len = 0;
- } else {
- ALOGE("pRspTrans.len error = %d", pRspTrans.len);
- status = ESESTATUS_FAILED;
- }
- }
- if (pCmd_data != NULL) {
- ALOGD_IF(ese_debug_enabled, "Freeing memory pCmd_data");
- phNxpEse_free(pCmd_data);
- }
- }
- }
- ALOGD_IF(ese_debug_enabled, " %s Exit status 0x%x \n", __FUNCTION__, status);
- return status;
-}
-
-/**
- * \ingroup ISO7816-4_application_protocol_implementation
- * \brief Frames ISO7816-4 command.
- * pCmd: 7816 command structure.
- * pcmd_data: command buffer pointer.
- *
- * \param[in] pCmd- Structure pointer passed from
- *application
- * \param[in] **pcmd_data - Hold the allocated memory buffer for
- *command.
- * \param[in] *cmd_len - Hold the buffer length, update by this
- *function
- *
- * \retval ESESTATUS_SUCCESS on Success else proper error code
- *
- */
-
-static ESESTATUS phNxpEse_7816_FrameCmd(pphNxpEse_7816_cpdu_t pCmd,
- uint8_t** pcmd_data,
- uint32_t* cmd_len) {
- uint32_t cmd_total_len = MIN_HEADER_LEN; /* header is always 4 bytes */
- uint8_t* pbuff = NULL;
- uint32_t index = 0;
- uint8_t lc_len = 0;
- uint8_t le_len = 0;
-
- ALOGD_IF(ese_debug_enabled, "%s pCmd->lc = %d, pCmd->le_type = %d",
- __FUNCTION__, pCmd->lc, pCmd->le_type);
- /* calculate the total buffer length */
- if (pCmd->lc > 0) {
- if (pCmd->cpdu_type == 0) {
- cmd_total_len += 1; /* 1 byte LC */
- lc_len = 1;
- } else {
- cmd_total_len += 3; /* 3 byte LC */
- lc_len = 3;
- }
-
- cmd_total_len += pCmd->lc; /* add data length */
- if (pCmd->pdata == NULL) {
- ALOGE("%s Invalide data buffer from application ", __FUNCTION__);
- return ESESTATUS_INVALID_BUFFER;
- }
- } else {
- lc_len = 0;
- ALOGD_IF(ese_debug_enabled, "%s lc (data) field is not present %d",
- __FUNCTION__, pCmd->lc);
- }
-
- if (pCmd->le_type > 0) {
- if (pCmd->le_type == 1) {
- cmd_total_len += 1; /* 1 byte LE */
- le_len = 1;
- } else if ((pCmd->le_type == 2 || pCmd->le_type == 3)) {
- /* extended le */
- if ((pCmd->le_type == 3) && (lc_len == 0)) {
- /* if data field not present, than only LE would be three bytes */
- cmd_total_len += 3; /* 3 byte LE */
- le_len = 3;
- } else if ((pCmd->le_type == 2) && (lc_len != 0)) {
- /* if data field present, LE would be two bytes */
- cmd_total_len += 2; /* 2 byte LE */
- le_len = 2;
- } else {
- ALOGE("%s wrong LE type %d", __FUNCTION__, pCmd->le_type);
- cmd_total_len += pCmd->le_type;
- le_len = pCmd->le_type;
- }
- } else {
- ALOGE("%s wrong cpdu_type value %d", __FUNCTION__, pCmd->cpdu_type);
- return ESESTATUS_INVALID_CPDU_TYPE;
- }
- } else {
- le_len = 0;
- ALOGD_IF(ese_debug_enabled, "%s le field is not present", __FUNCTION__);
- }
- ALOGD_IF(ese_debug_enabled, "%s cmd_total_len = %d, le_len = %d, lc_len = %d",
- __FUNCTION__, cmd_total_len, le_len, lc_len);
-
- pbuff = (uint8_t*)phNxpEse_calloc(cmd_total_len, sizeof(uint8_t));
- if (pbuff == NULL) {
- ALOGE("%s Error allocating memory", __FUNCTION__);
- return ESESTATUS_INSUFFICIENT_RESOURCES;
- }
- *cmd_len = cmd_total_len;
- *pcmd_data = pbuff;
- index = 0;
-
- *(pbuff + index) = pCmd->cla;
- index++;
-
- *(pbuff + index) = pCmd->ins;
- index++;
-
- *(pbuff + index) = pCmd->p1;
- index++;
-
- *(pbuff + index) = pCmd->p2;
- index++;
-
- /* lc_len can be 0, 1 or 3 bytes */
- if (lc_len > 0) {
- if (lc_len == 1) {
- *(pbuff + index) = pCmd->lc;
- index++;
- } else {
- /* extended cmd buffer*/
- *(pbuff + index) = 0x00; /* three byte lc */
- index++;
- *(pbuff + index) = ((pCmd->lc & 0xFF00) >> 8);
- index++;
- *(pbuff + index) = (pCmd->lc & 0x00FF);
- index++;
- }
- /* copy the lc bytes data */
- phNxpEse_memcpy((pbuff + index), pCmd->pdata, pCmd->lc);
- index += pCmd->lc;
- }
- /* le_len can be 0, 1, 2 or 3 bytes */
- if (le_len > 0) {
- if (le_len == 1) {
- if (pCmd->le == 256) {
- /* if le is 256 assign max value*/
- *(pbuff + index) = 0x00;
- } else {
- *(pbuff + index) = (uint8_t)pCmd->le;
- }
- index++;
- } else {
- if (pCmd->le == 65536) {
- if (le_len == 3) {
- /* assign max value */
- *(pbuff + index) = 0x00; /* three byte le */
- index++;
- }
- *(pbuff + index) = 0x00;
- index++;
- *(pbuff + index) = 0x00;
- index++;
- } else {
- if (le_len == 3) {
- *(pbuff + index) = 0x00; /* three byte le */
- index++;
- }
- *(pbuff + index) = ((pCmd->le & 0x0000FF00) >> 8);
- index++;
- *(pbuff + index) = (pCmd->le & 0x000000FF);
- index++;
- }
- }
- }
- ALOGD_IF(ese_debug_enabled, "Exit %s cmd_total_len = %d, index = %d",
- __FUNCTION__, index, cmd_total_len);
- return ESESTATUS_SUCCESS;
-}
-/** @} */
diff --git a/snxxx/libese-spi/p73/lib/phNxpEse_Api.cpp b/snxxx/libese-spi/p73/lib/phNxpEse_Api.cpp
deleted file mode 100755
index a5b63d7..0000000
--- a/snxxx/libese-spi/p73/lib/phNxpEse_Api.cpp
+++ /dev/null
@@ -1,1950 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2018-2021 NXP
- *
- * 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.
- *
- ******************************************************************************/
-#define LOG_TAG "NxpEseHal"
-#include <log/log.h>
-
-#include <EseTransport.h>
-#include <cutils/properties.h>
-#include <ese_config.h>
-#include <phNxpEseFeatures.h>
-#include <phNxpEsePal.h>
-#include <phNxpEseProto7816_3.h>
-#include <phNxpEse_Internal.h>
-
-#define RECEIVE_PACKET_SOF 0xA5
-#define CHAINED_PACKET_WITHSEQN 0x60
-#define CHAINED_PACKET_WITHOUTSEQN 0x20
-#define PH_PAL_ESE_PRINT_PACKET_TX(data, len) \
- ({ phPalEse_print_packet("SEND", data, len); })
-#define PH_PAL_ESE_PRINT_PACKET_RX(data, len) \
- ({ phPalEse_print_packet("RECV", data, len); })
-/* 32K(0x8000) Datasize + 10(0xA) Byte Max Header Size + 1 byte negative
- * testcase support */
-#define MAX_SUPPORTED_DATA_SIZE 0x800B
-static int phNxpEse_readPacket(void* pDevHandle, uint8_t* pBuffer,
- int nNbBytesToRead);
-static int phNxpEse_readPacket_legacy(void* pDevHandle, uint8_t* pBuffer,
- int nNbBytesToRead);
-
-static ESESTATUS phNxpEse_checkJcopDwnldState(void);
-static ESESTATUS phNxpEse_setJcopDwnldState(phNxpEse_JcopDwnldState state);
-static ESESTATUS phNxpEse_checkFWDwnldStatus(void);
-static void phNxpEse_GetMaxTimer(unsigned long* pMaxTimer);
-static unsigned char* phNxpEse_GgetTimerTlvBuffer(unsigned char* timer_buffer,
- unsigned int value);
-static __inline bool phNxpEse_isColdResetRequired(phNxpEse_initMode mode,
- ESESTATUS status);
-static int poll_sof_chained_delay = 0;
-static phNxpEse_OsVersion_t sOsVersion = INVALID_OS_VERSION;
-/* To Overwrite the value of wtx_counter_limit from config file*/
-static unsigned long int app_wtx_cnt = RESET_APP_WTX_COUNT;
-
-/*********************** Global Variables *************************************/
-
-/* ESE Context structure */
-phNxpEse_Context_t nxpese_ctxt;
-bool ese_debug_enabled = false;
-
-/******************************************************************************
- * Function phNxpEse_SetEndPoint_Cntxt
- *
- * Description This function is called set the SE endpoint
- *
- * Returns None
- *
- ******************************************************************************/
-
-ESESTATUS phNxpEse_SetEndPoint_Cntxt(uint8_t uEndPoint) {
- ESESTATUS status = ESESTATUS_FAILED;
- if (GET_CHIP_OS_VERSION() != OS_VERSION_4_0) {
- status = phNxpEseProto7816_SetEndPoint(uEndPoint);
- if (status == ESESTATUS_SUCCESS) {
- nxpese_ctxt.nadInfo.nadRx = nadInfoRx_ptr[uEndPoint];
- nxpese_ctxt.nadInfo.nadTx = nadInfoTx_ptr[uEndPoint];
- nxpese_ctxt.endPointInfo = uEndPoint;
- }
- ALOGD_IF(ese_debug_enabled, "%s: Enpoint=%d", __FUNCTION__, uEndPoint);
- } else {
- ALOGE("%s- Function not supported", __FUNCTION__);
- }
- return status;
-}
-
-/******************************************************************************
- * Function phNxpEse_ResetEndPoint_Cntxt
- *
- * Description This function is called to reset the SE endpoint
- *
- * Returns None
- *
- ******************************************************************************/
-ESESTATUS phNxpEse_ResetEndPoint_Cntxt(uint8_t uEndPoint) {
- ESESTATUS status = ESESTATUS_FAILED;
- if (GET_CHIP_OS_VERSION() != OS_VERSION_4_0) {
- status = phNxpEseProto7816_ResetEndPoint(uEndPoint);
- } else {
- ALOGE("%s- Function not supported", __FUNCTION__);
- }
- return status;
-}
-/******************************************************************************
- * Function phNxpLog_InitializeLogLevel
- *
- * Description This function is called during phNxpEse_init to initialize
- * debug log level.
- *
- * Returns None
- *
- ******************************************************************************/
-
-void phNxpLog_InitializeLogLevel() {
- ese_debug_enabled =
- (EseConfig::getUnsigned(NAME_SE_DEBUG_ENABLED, 0) != 0) ? true : false;
-
- char valueStr[PROPERTY_VALUE_MAX] = {0};
- int len = property_get("vendor.ese.debug_enabled", valueStr, "");
- if (len > 0) {
- // let Android property override .conf variable
- unsigned debug_enabled = 0;
- sscanf(valueStr, "%u", &debug_enabled);
- ese_debug_enabled = (debug_enabled == 0) ? false : true;
- }
-
- ALOGD_IF(ese_debug_enabled, "%s: level=%u", __func__, ese_debug_enabled);
-}
-
-/******************************************************************************
- * Function phNxpEse_init
- *
- * Description This function is called by Jni/phNxpEse_open during the
- * initialization of the ESE. It initializes protocol stack
- *instance variable
- *
- * Returns This function return ESESTATUS_SUCCESS (0) in case of
- *success In case of failure returns other failure value.
- *
- ******************************************************************************/
-ESESTATUS phNxpEse_init(phNxpEse_initParams initParams) {
- ESESTATUS wConfigStatus = ESESTATUS_FAILED;
- unsigned long int num, ifsd_value = 0;
- unsigned long maxTimer = 0;
- uint8_t retry = 0;
- phNxpEseProto7816InitParam_t protoInitParam;
- phNxpEse_memset(&protoInitParam, 0x00, sizeof(phNxpEseProto7816InitParam_t));
- /* STATUS_OPEN */
- nxpese_ctxt.EseLibStatus = ESE_STATUS_OPEN;
-
- if (app_wtx_cnt > RESET_APP_WTX_COUNT) {
- protoInitParam.wtx_counter_limit = app_wtx_cnt;
- ALOGD_IF(ese_debug_enabled, "Wtx_counter limit from app setting - %lu",
- protoInitParam.wtx_counter_limit);
- } else {
- protoInitParam.wtx_counter_limit = EseConfig::getUnsigned(
- NAME_NXP_WTX_COUNT_VALUE, PH_PROTO_WTX_DEFAULT_COUNT);
- ALOGD_IF(ese_debug_enabled, "Wtx_counter read from config file - %lu",
- protoInitParam.wtx_counter_limit);
- }
- if (EseConfig::hasKey(NAME_RNACK_RETRY_DELAY)) {
- num = EseConfig::getUnsigned(NAME_RNACK_RETRY_DELAY);
- nxpese_ctxt.invalidFrame_Rnack_Delay = num;
- ALOGD_IF(ese_debug_enabled, "Rnack retry_delay read from config file - %lu",
- num);
- } else {
- nxpese_ctxt.invalidFrame_Rnack_Delay = 7000;
- }
- if (EseConfig::hasKey(NAME_NXP_MAX_RNACK_RETRY)) {
- protoInitParam.rnack_retry_limit =
- EseConfig::getUnsigned(NAME_NXP_MAX_RNACK_RETRY);
- } else {
- protoInitParam.rnack_retry_limit = MAX_RNACK_RETRY_LIMIT;
- }
- if (ESE_MODE_NORMAL ==
- initParams.initMode) /* TZ/Normal wired mode should come here*/
- {
- if (EseConfig::hasKey(NAME_NXP_SPI_INTF_RST_ENABLE)) {
- protoInitParam.interfaceReset =
- (EseConfig::getUnsigned(NAME_NXP_SPI_INTF_RST_ENABLE) == 1) ? true
- : false;
- } else {
- protoInitParam.interfaceReset = true;
- }
- } else /* OSU mode, no interface reset is required */
- {
- if (phNxpEse_doResetProtection(true)) {
- ALOGE("%s Reset Potection failed. returning...", __FUNCTION__);
- return ESESTATUS_FAILED;
- }
- protoInitParam.interfaceReset = false;
- }
- if (EseConfig::hasKey(NAME_NXP_WTX_NTF_COUNT)) {
- num = EseConfig::getUnsigned(NAME_NXP_WTX_NTF_COUNT);
- protoInitParam.wtx_ntf_limit = num;
- ALOGD_IF(ese_debug_enabled, "Wtx_ntf limit from config file - %lu",
- protoInitParam.wtx_ntf_limit);
- } else {
- protoInitParam.wtx_ntf_limit = PH_DEFAULT_WTX_NTF_LIMIT;
- }
- nxpese_ctxt.fPtr_WtxNtf = initParams.fPtr_WtxNtf;
- /* Sharing lib context for fetching secure timer values */
- protoInitParam.pSecureTimerParams =
- (phNxpEseProto7816SecureTimer_t*)&nxpese_ctxt.secureTimerParams;
-
- ALOGD_IF(ese_debug_enabled,
- "%s secureTimer1 0x%x secureTimer2 0x%x secureTimer3 0x%x",
- __FUNCTION__, nxpese_ctxt.secureTimerParams.secureTimer1,
- nxpese_ctxt.secureTimerParams.secureTimer2,
- nxpese_ctxt.secureTimerParams.secureTimer3);
-
- phNxpEse_GetMaxTimer(&maxTimer);
-#ifdef SPM_INTEGRATED
- if (GET_CHIP_OS_VERSION() == OS_VERSION_4_0) {
- wConfigStatus = phNxpEse_SPM_DisablePwrControl(maxTimer);
- if (wConfigStatus != ESESTATUS_SUCCESS) {
- ALOGE("%s phNxpEse_SPM_DisablePwrControl: failed", __FUNCTION__);
- }
- }
-#endif
- do {
- /* T=1 Protocol layer open */
- wConfigStatus = phNxpEseProto7816_Open(protoInitParam);
- if (phNxpEse_isColdResetRequired(initParams.initMode, wConfigStatus))
- phNxpEse_SPM_ConfigPwr(SPM_RECOVERY_RESET);
- } while (phNxpEse_isColdResetRequired(initParams.initMode, wConfigStatus) &&
- retry++ < 1);
- if (GET_CHIP_OS_VERSION() != OS_VERSION_4_0) {
- if (ESESTATUS_TRANSCEIVE_FAILED == wConfigStatus ||
- ESESTATUS_FAILED == wConfigStatus) {
- nxpese_ctxt.EseLibStatus = ESE_STATUS_RECOVERY;
- }
- }
-
- if (ESESTATUS_SUCCESS == wConfigStatus) {
- ALOGD_IF(ese_debug_enabled, "phNxpEseProto7816_Open completed >>>>>");
- /* Retrieving the IFS-D value configured in the config file and applying to
- * Card */
- if ((nxpese_ctxt.endPointInfo == END_POINT_ESE) &&
- (EseConfig::hasKey(NAME_NXP_ESE_IFSD_VALUE))) {
- ifsd_value = EseConfig::getUnsigned(NAME_NXP_ESE_IFSD_VALUE);
- if ((0xFFFF > ifsd_value) && (ifsd_value > 0)) {
- ALOGD_IF(ese_debug_enabled,
- "phNxpEseProto7816_SetIFS IFS adjustment requested with %ld",
- ifsd_value);
- phNxpEse_setIfs(ifsd_value);
- } else {
- ALOGD_IF(ese_debug_enabled,
- "phNxpEseProto7816_SetIFS IFS adjustment argument invalid");
- }
- } else if ((nxpese_ctxt.endPointInfo == END_POINT_EUICC) &&
- (EseConfig::hasKey(NAME_NXP_EUICC_IFSD_VALUE))) {
- ifsd_value = EseConfig::getUnsigned(NAME_NXP_EUICC_IFSD_VALUE);
- if ((0xFFFF > ifsd_value) && (ifsd_value > 0)) {
- ALOGD_IF(ese_debug_enabled,
- "phNxpEseProto7816_SetIFS IFS adjustment requested with %ld",
- ifsd_value);
- phNxpEse_setIfs(ifsd_value);
- } else {
- ALOGD_IF(ese_debug_enabled,
- "phNxpEseProto7816_SetIFS IFS adjustment argument invalid");
- }
- }
- } else {
- ALOGE("phNxpEseProto7816_Open failed with status = %x", wConfigStatus);
- }
-
- return wConfigStatus;
-}
-
-/******************************************************************************
- * Function phNxpEse_open
- *
- * Description This function is called by Jni during the
- * initialization of the ESE. It opens the physical connection
- * with ESE and creates required NAME_NXP_MAX_RNACK_RETRYclient
- * thread for operation.
- * Returns This function return ESESTATUS_SUCCESS (0) in case of
- * success. In case of failure returns other failure values.
- ******************************************************************************/
-ESESTATUS phNxpEse_open(phNxpEse_initParams initParams) {
- phPalEse_Config_t tPalConfig;
- ESESTATUS wConfigStatus = ESESTATUS_SUCCESS;
- unsigned long int num = 0, tpm_enable = 0;
- char ese_dev_node[64];
- std::string ese_node;
-#ifdef SPM_INTEGRATED
- ESESTATUS wSpmStatus = ESESTATUS_SUCCESS;
- spm_state_t current_spm_state = SPM_STATE_INVALID;
-#endif
- /* initialize trace level */
- phNxpLog_InitializeLogLevel();
-
- ALOGD_IF(ese_debug_enabled, "phNxpEse_open Enter");
- /*When spi channel is already opened return status as FAILED*/
- if (nxpese_ctxt.EseLibStatus != ESE_STATUS_CLOSE) {
- ALOGD_IF(ese_debug_enabled, "already opened\n");
- return ESESTATUS_BUSY;
- }
-
- phNxpEse_memset(&nxpese_ctxt, 0x00, sizeof(nxpese_ctxt));
- phNxpEse_memset(&tPalConfig, 0x00, sizeof(tPalConfig));
-
- ALOGD_IF(ese_debug_enabled, "MW SEAccessKit Version");
- ALOGD_IF(ese_debug_enabled, "Android Version:0x%x", NXP_ANDROID_VER);
- ALOGD_IF(ese_debug_enabled, "Major Version:0x%x", ESELIB_MW_VERSION_MAJ);
- ALOGD_IF(ese_debug_enabled, "Minor Version:0x%x", ESELIB_MW_VERSION_MIN);
-
- if (EseConfig::hasKey(NAME_NXP_OS_VERSION)) {
- num = EseConfig::getUnsigned(NAME_NXP_OS_VERSION);
- ALOGD_IF(ese_debug_enabled, "Chip type read from config file - %lu", num);
- sOsVersion = (num == 1) ? OS_VERSION_4_0
- : ((num == 2) ? OS_VERSION_5_1 : OS_VERSION_5_2);
- } else {
- sOsVersion = OS_VERSION_5_2;
- ALOGD_IF(ese_debug_enabled,
- "Chip type not defined in config file osVersion- %d", sOsVersion);
- }
- if (EseConfig::hasKey(NAME_NXP_TP_MEASUREMENT)) {
- tpm_enable = EseConfig::getUnsigned(NAME_NXP_TP_MEASUREMENT);
- ALOGD_IF(
- ese_debug_enabled,
- "SPI Throughput measurement enable/disable read from config file - %lu",
- tpm_enable);
- } else {
- ALOGD_IF(ese_debug_enabled,
- "SPI Throughput not defined in config file - %lu", tpm_enable);
- }
-#if (NXP_POWER_SCHEME_SUPPORT == true)
- if (EseConfig::hasKey(NAME_NXP_POWER_SCHEME)) {
- num = EseConfig::getUnsigned(NAME_NXP_POWER_SCHEME);
- nxpese_ctxt.pwr_scheme = num;
- ALOGD_IF(ese_debug_enabled, "Power scheme read from config file - %lu",
- num);
- } else {
- nxpese_ctxt.pwr_scheme = PN67T_POWER_SCHEME;
- ALOGD_IF(ese_debug_enabled, "Power scheme not defined in config file - %lu",
- num);
- }
-#else
- nxpese_ctxt.pwr_scheme = PN67T_POWER_SCHEME;
- tpm_enable = 0x00;
-#endif
-
- if (EseConfig::hasKey(NAME_NXP_NAD_POLL_RETRY_TIME)) {
- num = EseConfig::getUnsigned(NAME_NXP_NAD_POLL_RETRY_TIME);
- nxpese_ctxt.nadPollingRetryTime = num;
- } else {
- nxpese_ctxt.nadPollingRetryTime = 5;
- }
-
- ALOGD_IF(ese_debug_enabled, "Nad poll retry time in us - %lu us",
- nxpese_ctxt.nadPollingRetryTime * GET_WAKE_UP_DELAY() *
- NAD_POLLING_SCALER);
-
- /*Read device node path*/
- ese_node = EseConfig::getString(NAME_NXP_ESE_DEV_NODE, "/dev/pn81a");
- strlcpy(ese_dev_node, ese_node.c_str(), sizeof(ese_dev_node));
- tPalConfig.pDevName = (int8_t*)ese_dev_node;
-
- /* Initialize PAL layer */
- wConfigStatus = phPalEse_open_and_configure(&tPalConfig);
- if (wConfigStatus != ESESTATUS_SUCCESS) {
- ALOGE("phPalEse_Init Failed");
- if (GET_CHIP_OS_VERSION() != OS_VERSION_4_0) {
- if (ESESTATUS_DRIVER_BUSY == wConfigStatus)
- ALOGE("Ese Driver is Busy!!!");
- }
- goto clean_and_return;
- }
- /* Copying device handle to ESE Lib context*/
- nxpese_ctxt.pDevHandle = tPalConfig.pDevHandle;
- if (ESE_PROTOCOL_MEDIA_SPI == initParams.mediaType) {
- ALOGD_IF(ese_debug_enabled,
- "Inform eSE about the starting of trusted Mode");
- wConfigStatus =
- phPalEse_ioctl(phPalEse_e_SetSecureMode, tPalConfig.pDevHandle, 0x01);
- if (ESESTATUS_SUCCESS != wConfigStatus) goto clean_and_return_2;
- }
-#ifdef SPM_INTEGRATED
- /* Get the Access of ESE*/
- wSpmStatus = phNxpEse_SPM_Init(nxpese_ctxt.pDevHandle);
- if (wSpmStatus != ESESTATUS_SUCCESS) {
- ALOGE("phNxpEse_SPM_Init Failed");
- wConfigStatus = ESESTATUS_FAILED;
- goto clean_and_return_2;
- }
- wSpmStatus = phNxpEse_SPM_SetPwrScheme(nxpese_ctxt.pwr_scheme);
- if (wSpmStatus != ESESTATUS_SUCCESS) {
- ALOGE(" %s : phNxpEse_SPM_SetPwrScheme Failed", __FUNCTION__);
- wConfigStatus = ESESTATUS_FAILED;
- goto clean_and_return_1;
- }
- if (GET_CHIP_OS_VERSION() == OS_VERSION_4_0) {
- wConfigStatus = phNxpEse_checkFWDwnldStatus();
- if (wConfigStatus != ESESTATUS_SUCCESS) {
- ALOGE("Failed to open SPI due to VEN pin used by FW download \n");
- wConfigStatus = ESESTATUS_FAILED;
- goto clean_and_return_1;
- }
- }
- wSpmStatus = phNxpEse_SPM_GetState(¤t_spm_state);
- if (wSpmStatus != ESESTATUS_SUCCESS) {
- ALOGE(" %s : phNxpEse_SPM_GetPwrState Failed", __FUNCTION__);
- wConfigStatus = ESESTATUS_FAILED;
- goto clean_and_return_1;
- } else {
- if (((current_spm_state & SPM_STATE_SPI) |
- (current_spm_state & SPM_STATE_SPI_PRIO)) &&
- !(current_spm_state & SPM_STATE_SPI_FAILED)) {
- ALOGE(" %s : SPI is already opened...second instance not allowed",
- __FUNCTION__);
- wConfigStatus = ESESTATUS_FAILED;
- goto clean_and_return_1;
- }
- }
- if (current_spm_state & SPM_STATE_JCOP_DWNLD) {
- ALOGE(" %s : Denying to open JCOP Download in progress", __FUNCTION__);
- wConfigStatus = ESESTATUS_FAILED;
- goto clean_and_return_1;
- }
- phNxpEse_memcpy(&nxpese_ctxt.initParams, &initParams,
- sizeof(phNxpEse_initParams));
- if (GET_CHIP_OS_VERSION() == OS_VERSION_4_0) {
- /* Updating ESE power state based on the init mode */
- if (ESE_MODE_OSU == nxpese_ctxt.initParams.initMode) {
- ALOGD_IF(ese_debug_enabled, "%s Init mode ---->OSU", __FUNCTION__);
- wConfigStatus = phNxpEse_checkJcopDwnldState();
- if (wConfigStatus != ESESTATUS_SUCCESS) {
- ALOGE("phNxpEse_checkJcopDwnldState failed");
- goto clean_and_return_1;
- }
- }
- }
- wSpmStatus = phNxpEse_SPM_ConfigPwr(SPM_POWER_ENABLE);
- if (wSpmStatus != ESESTATUS_SUCCESS) {
- ALOGE("phNxpEse_SPM_ConfigPwr: enabling power Failed");
- if (wSpmStatus == ESESTATUS_BUSY) {
- wConfigStatus = ESESTATUS_BUSY;
- } else if (wSpmStatus == ESESTATUS_DWNLD_BUSY) {
- wConfigStatus = ESESTATUS_DWNLD_BUSY;
- } else {
- wConfigStatus = ESESTATUS_FAILED;
- }
- goto clean_and_return;
- } else {
- ALOGD_IF(ese_debug_enabled, "nxpese_ctxt.spm_power_state true");
- nxpese_ctxt.spm_power_state = true;
- }
-#endif
- if (GET_CHIP_OS_VERSION() == OS_VERSION_4_0) {
- if (tpm_enable) {
- wConfigStatus = phPalEse_ioctl(phPalEse_e_EnableThroughputMeasurement,
- nxpese_ctxt.pDevHandle, 0);
- if (wConfigStatus != ESESTATUS_SUCCESS) {
- ALOGE("phPalEse_IoCtl Failed");
- goto clean_and_return;
- }
- }
- }
- ALOGD_IF(ese_debug_enabled, "wConfigStatus %x", wConfigStatus);
- return wConfigStatus;
-
-clean_and_return:
-#ifdef SPM_INTEGRATED
- wSpmStatus = phNxpEse_SPM_ConfigPwr(SPM_POWER_DISABLE);
- if (wSpmStatus != ESESTATUS_SUCCESS) {
- ALOGE("phNxpEse_SPM_ConfigPwr: disabling power Failed");
- }
-clean_and_return_1:
- phNxpEse_SPM_DeInit();
-clean_and_return_2:
-#endif
- if (NULL != nxpese_ctxt.pDevHandle) {
- phPalEse_close(nxpese_ctxt.pDevHandle);
- phNxpEse_memset(&nxpese_ctxt, 0x00, sizeof(nxpese_ctxt));
- }
- nxpese_ctxt.EseLibStatus = ESE_STATUS_CLOSE;
- nxpese_ctxt.spm_power_state = false;
- return ESESTATUS_FAILED;
-}
-
-/******************************************************************************
- * \ingroup spi_libese
- *
- * \brief Check if libese has opened
- *
- * \retval return false if it is close, otherwise true.
- **
- ******************************************************************************/
-bool phNxpEse_isOpen() { return nxpese_ctxt.EseLibStatus != ESE_STATUS_CLOSE; }
-
-/******************************************************************************
- * Function phNxpEse_openPrioSession
- *
- * Description This function is called by Jni during the
- * initialization of the ESE. It opens the physical connection
- * with ESE () and creates required client thread for
- * operation. This will get priority access to ESE for timeout
- duration.
-
- * Returns This function return ESESTATUS_SUCCESS (0) in case of
- success
- * In case of failure returns other failure value.
- *
- ******************************************************************************/
-ESESTATUS phNxpEse_openPrioSession(phNxpEse_initParams initParams) {
- phPalEse_Config_t tPalConfig;
- ESESTATUS wConfigStatus = ESESTATUS_SUCCESS;
- unsigned long int num = 0, tpm_enable = 0;
-
- /* initialize trace level */
- phNxpLog_InitializeLogLevel();
- ALOGD_IF(ese_debug_enabled, "phNxpEse_openPrioSession Enter");
-#ifdef SPM_INTEGRATED
- ESESTATUS wSpmStatus = ESESTATUS_SUCCESS;
- spm_state_t current_spm_state = SPM_STATE_INVALID;
-#endif
- phNxpEse_memset(&nxpese_ctxt, 0x00, sizeof(nxpese_ctxt));
- phNxpEse_memset(&tPalConfig, 0x00, sizeof(tPalConfig));
-
- ALOGD_IF(ese_debug_enabled, "MW SEAccessKit Version");
- ALOGD_IF(ese_debug_enabled, "Android Version:0x%x", NXP_ANDROID_VER);
- ALOGD_IF(ese_debug_enabled, "Major Version:0x%x", ESELIB_MW_VERSION_MAJ);
- ALOGD_IF(ese_debug_enabled, "Minor Version:0x%x", ESELIB_MW_VERSION_MIN);
-
-#if (NXP_POWER_SCHEME_SUPPORT == true)
- if (EseConfig::hasKey(NAME_NXP_POWER_SCHEME)) {
- num = EseConfig::getUnsigned(NAME_NXP_POWER_SCHEME);
- nxpese_ctxt.pwr_scheme = num;
- ALOGD_IF(ese_debug_enabled, "Power scheme read from config file - %lu",
- num);
- } else
-#endif
- {
- nxpese_ctxt.pwr_scheme = PN67T_POWER_SCHEME;
- ALOGD_IF(ese_debug_enabled, "Power scheme not defined in config file - %lu",
- num);
- }
- if (EseConfig::hasKey(NAME_NXP_TP_MEASUREMENT)) {
- tpm_enable = EseConfig::getUnsigned(NAME_NXP_TP_MEASUREMENT);
- ALOGD_IF(
- ese_debug_enabled,
- "SPI Throughput measurement enable/disable read from config file - %lu",
- tpm_enable);
- } else {
- ALOGD_IF(ese_debug_enabled,
- "SPI Throughput not defined in config file - %lu", num);
- }
-
- tPalConfig.pDevName = (int8_t*)"/dev/p73";
-
- /* Initialize PAL layer */
- wConfigStatus = phPalEse_open_and_configure(&tPalConfig);
- if (wConfigStatus != ESESTATUS_SUCCESS) {
- ALOGE("phPalEse_Init Failed");
- goto clean_and_return;
- }
- /* Copying device handle to hal context*/
- nxpese_ctxt.pDevHandle = tPalConfig.pDevHandle;
-
-#ifdef SPM_INTEGRATED
- /* Get the Access of ESE*/
- wSpmStatus = phNxpEse_SPM_Init(nxpese_ctxt.pDevHandle);
- if (wSpmStatus != ESESTATUS_SUCCESS) {
- ALOGE("phNxpEse_SPM_Init Failed");
- wConfigStatus = ESESTATUS_FAILED;
- goto clean_and_return_2;
- }
- wSpmStatus = phNxpEse_SPM_SetPwrScheme(nxpese_ctxt.pwr_scheme);
- if (wSpmStatus != ESESTATUS_SUCCESS) {
- ALOGE(" %s : phNxpEse_SPM_SetPwrScheme Failed", __FUNCTION__);
- wConfigStatus = ESESTATUS_FAILED;
- goto clean_and_return_1;
- }
- wSpmStatus = phNxpEse_SPM_GetState(¤t_spm_state);
- if (wSpmStatus != ESESTATUS_SUCCESS) {
- ALOGE(" %s : phNxpEse_SPM_GetPwrState Failed", __FUNCTION__);
- wConfigStatus = ESESTATUS_FAILED;
- goto clean_and_return_1;
- } else {
- if ((current_spm_state & SPM_STATE_SPI) |
- (current_spm_state & SPM_STATE_SPI_PRIO)) {
- ALOGE(" %s : SPI is already opened...second instance not allowed",
- __FUNCTION__);
- wConfigStatus = ESESTATUS_FAILED;
- goto clean_and_return_1;
- }
- if (current_spm_state & SPM_STATE_JCOP_DWNLD) {
- ALOGE(" %s : Denying to open JCOP Download in progress", __FUNCTION__);
- wConfigStatus = ESESTATUS_FAILED;
- goto clean_and_return_1;
- }
- if (GET_CHIP_OS_VERSION() == OS_VERSION_4_0) {
- wConfigStatus = phNxpEse_checkFWDwnldStatus();
- if (wConfigStatus != ESESTATUS_SUCCESS) {
- ALOGD_IF(ese_debug_enabled,
- "Failed to open SPI due to VEN pin used by FW download \n");
- wConfigStatus = ESESTATUS_FAILED;
- goto clean_and_return_1;
- }
- }
- }
- phNxpEse_memcpy(&nxpese_ctxt.initParams, &initParams.initMode,
- sizeof(phNxpEse_initParams));
- if (GET_CHIP_OS_VERSION() == OS_VERSION_4_0) {
- /* Updating ESE power state based on the init mode */
- if (ESE_MODE_OSU == nxpese_ctxt.initParams.initMode) {
- wConfigStatus = phNxpEse_checkJcopDwnldState();
- if (wConfigStatus != ESESTATUS_SUCCESS) {
- ALOGE("phNxpEse_checkJcopDwnldState failed");
- goto clean_and_return_1;
- }
- }
- }
- wSpmStatus = phNxpEse_SPM_ConfigPwr(SPM_POWER_PRIO_ENABLE);
- if (wSpmStatus != ESESTATUS_SUCCESS) {
- ALOGE("phNxpEse_SPM_ConfigPwr: enabling power for spi prio Failed");
- if (wSpmStatus == ESESTATUS_BUSY) {
- wConfigStatus = ESESTATUS_BUSY;
- } else if (wSpmStatus == ESESTATUS_DWNLD_BUSY) {
- wConfigStatus = ESESTATUS_DWNLD_BUSY;
- } else {
- wConfigStatus = ESESTATUS_FAILED;
- }
- goto clean_and_return;
- } else {
- ALOGE("nxpese_ctxt.spm_power_state true");
- nxpese_ctxt.spm_power_state = true;
- }
-#endif
-
-#ifndef SPM_INTEGRATED
- wConfigStatus =
- phPalEse_ioctl(phPalEse_e_ResetDevice, nxpese_ctxt.pDevHandle, 2);
- if (wConfigStatus != ESESTATUS_SUCCESS) {
- ALOGE("phPalEse_IoCtl Failed");
- goto clean_and_return;
- }
-#endif
- wConfigStatus =
- phPalEse_ioctl(phPalEse_e_EnableLog, nxpese_ctxt.pDevHandle, 0);
- if (wConfigStatus != ESESTATUS_SUCCESS) {
- ALOGE("phPalEse_IoCtl Failed");
- goto clean_and_return;
- }
- wConfigStatus =
- phPalEse_ioctl(phPalEse_e_EnablePollMode, nxpese_ctxt.pDevHandle, 1);
- if (wConfigStatus != ESESTATUS_SUCCESS) {
- ALOGE("phPalEse_IoCtl Failed");
- goto clean_and_return;
- }
- ALOGD_IF(ese_debug_enabled, "wConfigStatus %x", wConfigStatus);
- if (GET_CHIP_OS_VERSION() == OS_VERSION_4_0) {
- if (tpm_enable) {
- wConfigStatus = phPalEse_ioctl(phPalEse_e_EnableThroughputMeasurement,
- nxpese_ctxt.pDevHandle, 0);
- if (wConfigStatus != ESESTATUS_SUCCESS) {
- ALOGE("phPalEse_IoCtl Failed");
- goto clean_and_return;
- }
- }
- }
- return wConfigStatus;
-
-clean_and_return:
-#ifdef SPM_INTEGRATED
- wSpmStatus = phNxpEse_SPM_ConfigPwr(SPM_POWER_DISABLE);
- if (wSpmStatus != ESESTATUS_SUCCESS) {
- ALOGE("phNxpEse_SPM_ConfigPwr: disabling power Failed");
- }
-clean_and_return_1:
- phNxpEse_SPM_DeInit();
-clean_and_return_2:
-#endif
- if (NULL != nxpese_ctxt.pDevHandle) {
- phPalEse_close(nxpese_ctxt.pDevHandle);
- phNxpEse_memset(&nxpese_ctxt, 0x00, sizeof(nxpese_ctxt));
- }
- nxpese_ctxt.EseLibStatus = ESE_STATUS_CLOSE;
- nxpese_ctxt.spm_power_state = false;
- return ESESTATUS_FAILED;
-}
-
-/******************************************************************************
- * Function phNxpEse_setJcopDwnldState
- *
- * Description This function is used to check whether JCOP OS
- * download can be started or not.
- *
- * Returns returns ESESTATUS_SUCCESS or ESESTATUS_FAILED
- *
- ******************************************************************************/
-static ESESTATUS phNxpEse_setJcopDwnldState(phNxpEse_JcopDwnldState state) {
- ESESTATUS wConfigStatus = ESESTATUS_FAILED;
- ALOGD_IF(ese_debug_enabled, "phNxpEse_setJcopDwnldState Enter");
-
- if (GET_CHIP_OS_VERSION() == OS_VERSION_4_0) {
- wConfigStatus = phNxpEse_SPM_SetJcopDwnldState(state);
- } else {
- ALOGE("%s function not supported", __FUNCTION__);
- }
- return wConfigStatus;
-}
-
-/******************************************************************************
- * Function phNxpEse_checkJcopDwnldState
- *
- * Description This function is used to check whether JCOP OS
- * download can be started or not.
- *
- * Returns returns ESESTATUS_SUCCESS or ESESTATUS_BUSY
- *
- ******************************************************************************/
-static ESESTATUS phNxpEse_checkJcopDwnldState(void) {
- ALOGD_IF(ese_debug_enabled, "phNxpEse_checkJcopDwnld Enter");
- ESESTATUS wSpmStatus = ESESTATUS_SUCCESS;
- spm_state_t current_spm_state = SPM_STATE_INVALID;
- uint8_t ese_dwnld_retry = 0x00;
- ESESTATUS status = ESESTATUS_FAILED;
-
- wSpmStatus = phNxpEse_SPM_GetState(¤t_spm_state);
- if (wSpmStatus == ESESTATUS_SUCCESS) {
- /* Check current_spm_state and update config/Spm status*/
- if ((current_spm_state & SPM_STATE_JCOP_DWNLD) ||
- (current_spm_state & SPM_STATE_WIRED))
- return ESESTATUS_BUSY;
-
- status = phNxpEse_setJcopDwnldState(JCP_DWNLD_INIT);
- if (status == ESESTATUS_SUCCESS) {
- while (ese_dwnld_retry < ESE_JCOP_OS_DWNLD_RETRY_CNT) {
- ALOGD_IF(ese_debug_enabled, "ESE_JCOP_OS_DWNLD_RETRY_CNT retry count");
- wSpmStatus = phNxpEse_SPM_GetState(¤t_spm_state);
- if (wSpmStatus == ESESTATUS_SUCCESS) {
- if ((current_spm_state & SPM_STATE_JCOP_DWNLD)) {
- status = ESESTATUS_SUCCESS;
- break;
- }
- } else {
- status = ESESTATUS_FAILED;
- break;
- }
- phNxpEse_Sleep(
- 200000); /*sleep for 200 ms checking for jcop dwnld status*/
- ese_dwnld_retry++;
- }
- }
- }
-
- ALOGD_IF(ese_debug_enabled, "phNxpEse_checkJcopDwnldState status %x", status);
- return status;
-}
-
-/******************************************************************************
- * Function phNxpEse_Transceive
- *
- * Description This function update the len and provided buffer
- *
- * Returns On Success ESESTATUS_SUCCESS else proper error code
- *
- ******************************************************************************/
-ESESTATUS phNxpEse_Transceive(phNxpEse_data* pCmd, phNxpEse_data* pRsp) {
- ESESTATUS status = ESESTATUS_FAILED;
-
- if ((NULL == pCmd) || (NULL == pRsp)) return ESESTATUS_INVALID_PARAMETER;
-
- if ((pCmd->len == 0) || pCmd->p_data == NULL) {
- ALOGE(" phNxpEse_Transceive - Invalid Parameter no data\n");
- return ESESTATUS_INVALID_PARAMETER;
- } else if (pCmd->len > MAX_SUPPORTED_DATA_SIZE) {
- ALOGE(" phNxpEse_Transceive - Invalid data size \n");
- return ESESTATUS_INVALID_RECEIVE_LENGTH;
- } else if ((ESE_STATUS_CLOSE == nxpese_ctxt.EseLibStatus)) {
- ALOGE(" %s ESE Not Initialized \n", __FUNCTION__);
- return ESESTATUS_NOT_INITIALISED;
- } else if ((ESE_STATUS_BUSY == nxpese_ctxt.EseLibStatus)) {
- ALOGE(" %s ESE - BUSY \n", __FUNCTION__);
- return ESESTATUS_BUSY;
- } else if ((ESE_STATUS_RECOVERY == nxpese_ctxt.EseLibStatus)) {
- ALOGE(" %s ESE - RECOVERY \n", __FUNCTION__);
- return ESESTATUS_RECOVERY_STARTED;
- } else {
- nxpese_ctxt.EseLibStatus = ESE_STATUS_BUSY;
- status = phNxpEseProto7816_Transceive((phNxpEse_data*)pCmd,
- (phNxpEse_data*)pRsp);
- if (ESESTATUS_SUCCESS != status) {
- ALOGE(" %s phNxpEseProto7816_Transceive- Failed \n", __FUNCTION__);
- if (ESESTATUS_TRANSCEIVE_FAILED == status) {
- /*MAX WTX reached*/
- nxpese_ctxt.EseLibStatus = ESE_STATUS_RECOVERY;
- } else {
- /*Timeout/ No response*/
- nxpese_ctxt.EseLibStatus = ESE_STATUS_IDLE;
- }
- } else {
- nxpese_ctxt.EseLibStatus = ESE_STATUS_IDLE;
- }
- nxpese_ctxt.rnack_sent = false;
-
- ALOGD_IF(ese_debug_enabled, " %s Exit status 0x%x \n", __FUNCTION__,
- status);
- return status;
- }
-}
-/******************************************************************************
- * Function phNxpEse_coldReset
- *
- * Description This function power cycles the ESE
- * (cold reset by prop. FW command) interface by
- * talking to NFC HAL
- *
- * Note:
- * After cold reset, phNxpEse_init need to be called to
- * reset the host AP T=1 stack parameters
- *
- * Returns It returns ESESTATUS_SUCCESS (0) if the operation is
- *successful else
- * ESESTATUS_FAILED(1)
- ******************************************************************************/
-ESESTATUS phNxpEse_coldReset(void) {
- ESESTATUS wSpmStatus = ESESTATUS_SUCCESS;
- ALOGD_IF(ese_debug_enabled, " %s Enter \n", __FUNCTION__);
- if (GET_CHIP_OS_VERSION() != OS_VERSION_4_0) {
- wSpmStatus = phNxpEse_SPM_ConfigPwr(SPM_RECOVERY_RESET);
- } else {
- wSpmStatus = ESESTATUS_FAILED;
- ALOGE(" %s Function not supported \n", __FUNCTION__);
- }
- ALOGD_IF(ese_debug_enabled, " %s Exit status 0x%x \n", __FUNCTION__,
- wSpmStatus);
- return wSpmStatus;
-}
-
-/******************************************************************************
- * Function phNxpEse_reset
- *
- * Description This function reset the ESE interface and free all
- *
- * Returns It returns ESESTATUS_SUCCESS (0) if the operation is
- *successful else
- * ESESTATUS_FAILED(1)
- ******************************************************************************/
-ESESTATUS phNxpEse_reset(void) {
- ESESTATUS status = ESESTATUS_FAILED;
- unsigned long maxTimer = 0;
-#ifdef SPM_INTEGRATED
- ESESTATUS wSpmStatus = ESESTATUS_SUCCESS;
-#endif
-
- /* TBD : Call the ioctl to reset the ESE */
- ALOGD_IF(ese_debug_enabled, " %s Enter \n", __FUNCTION__);
- /* Do an interface reset, don't wait to see if JCOP went through a full power
- * cycle or not */
- status = phNxpEseProto7816_IntfReset(
- (phNxpEseProto7816SecureTimer_t*)&nxpese_ctxt.secureTimerParams);
- if (status) {
- ALOGE("%s Ese status Failed", __FUNCTION__);
- }
-
- ALOGD_IF(ese_debug_enabled,
- "%s secureTimer1 0x%x secureTimer2 0x%x secureTimer3 0x%x",
- __FUNCTION__, nxpese_ctxt.secureTimerParams.secureTimer1,
- nxpese_ctxt.secureTimerParams.secureTimer2,
- nxpese_ctxt.secureTimerParams.secureTimer3);
- phNxpEse_GetMaxTimer(&maxTimer);
-#ifdef SPM_INTEGRATED
- if (GET_CHIP_OS_VERSION() == OS_VERSION_4_0) {
- status = phNxpEse_SPM_DisablePwrControl(maxTimer);
- if (status != ESESTATUS_SUCCESS) {
- ALOGE("%s phNxpEse_SPM_DisablePwrControl: failed", __FUNCTION__);
- }
- }
- if ((nxpese_ctxt.pwr_scheme == PN67T_POWER_SCHEME) ||
- (nxpese_ctxt.pwr_scheme == PN80T_LEGACY_SCHEME)) {
- wSpmStatus = phNxpEse_SPM_ConfigPwr(SPM_POWER_RESET);
- if (wSpmStatus != ESESTATUS_SUCCESS) {
- ALOGE("phNxpEse_SPM_ConfigPwr: reset Failed");
- }
- }
-#else
- /* if arg ==2 (hard reset)
- * if arg ==1 (soft reset)
- */
- status = phPalEse_ioctl(phPalEse_e_ResetDevice, nxpese_ctxt.pDevHandle, 2);
- if (status != ESESTATUS_SUCCESS) {
- ALOGE("phNxpEse_reset Failed");
- }
-#endif
- ALOGD_IF(ese_debug_enabled, " %s Exit \n", __FUNCTION__);
- return status;
-}
-
-/******************************************************************************
- * Function phNxpEse_resetJcopUpdate
- *
- * Description This function reset the ESE interface during JCOP Update
- *
- * Returns It returns ESESTATUS_SUCCESS (0) if the operation is
- *successful else
- * ESESTATUS_FAILED(1)
- ******************************************************************************/
-ESESTATUS phNxpEse_resetJcopUpdate(void) {
- ESESTATUS status = ESESTATUS_SUCCESS;
- uint8_t retry = 0;
-#ifdef SPM_INTEGRATED
- unsigned long int num = 0;
-#endif
-
- /* TBD : Call the ioctl to reset the */
- ALOGD_IF(ese_debug_enabled, " %s Enter \n", __FUNCTION__);
-
- /* Reset interface after every reset irrespective of
- whether JCOP did a full power cycle or not. */
- do {
- status = phNxpEseProto7816_Reset();
- if (status != ESESTATUS_SUCCESS) phNxpEse_SPM_ConfigPwr(SPM_RECOVERY_RESET);
- } while (status != ESESTATUS_SUCCESS && retry++ < 1);
-
- /* Retrieving the IFS-D value configured in the config file and applying to
- * Card */
- if (EseConfig::hasKey(NAME_NXP_ESE_IFSD_VALUE)) {
- unsigned long int ifsd_value = 0;
- ifsd_value = EseConfig::getUnsigned(NAME_NXP_ESE_IFSD_VALUE);
- if ((0xFFFF > ifsd_value) && (ifsd_value > 0)) {
- ALOGD_IF(ese_debug_enabled,
- "phNxpEseProto7816_SetIFS IFS adjustment requested with %ld",
- ifsd_value);
- phNxpEse_setIfs(ifsd_value);
- } else {
- ALOGD_IF(ese_debug_enabled,
- "phNxpEseProto7816_SetIFS IFS adjustment argument invalid");
- }
- }
-#ifdef SPM_INTEGRATED
-#if (NXP_POWER_SCHEME_SUPPORT == true)
- if (EseConfig::hasKey(NAME_NXP_POWER_SCHEME)) {
- num = EseConfig::getUnsigned(NAME_NXP_POWER_SCHEME);
- if ((num == 1) || (num == 2)) {
- ALOGD_IF(ese_debug_enabled, " %s Call Config Pwr Reset \n", __FUNCTION__);
- status = phNxpEse_SPM_ConfigPwr(SPM_POWER_RESET);
- if (status != ESESTATUS_SUCCESS) {
- ALOGE("phNxpEse_resetJcopUpdate: reset Failed");
- status = ESESTATUS_FAILED;
- }
- } else if (num == 3) {
- ALOGD_IF(ese_debug_enabled, " %s Call eSE Chip Reset \n", __FUNCTION__);
- status = phNxpEse_chipReset();
- if (status != ESESTATUS_SUCCESS) {
- ALOGE("phNxpEse_resetJcopUpdate: chip reset Failed");
- status = ESESTATUS_FAILED;
- }
- } else {
- ALOGD_IF(ese_debug_enabled, " %s Invalid Power scheme \n", __FUNCTION__);
- }
- }
-#else
- {
- status = phNxpEse_SPM_ConfigPwr(SPM_POWER_RESET);
- if (status != ESESTATUS_SUCCESS) {
- ALOGE("phNxpEse_SPM_ConfigPwr: reset Failed");
- status = ESESTATUS_FAILED;
- }
- }
-#endif
-#else
- /* if arg ==2 (hard reset)
- * if arg ==1 (soft reset)
- */
- status = phPalEse_ioctl(phPalEse_e_ResetDevice, nxpese_ctxt.pDevHandle, 2);
- if (status != ESESTATUS_SUCCESS) {
- ALOGE("phNxpEse_resetJcopUpdate Failed");
- }
-#endif
-
- ALOGD_IF(ese_debug_enabled, " %s Exit \n", __FUNCTION__);
- return status;
-}
-/******************************************************************************
- * Function phNxpEse_EndOfApdu
- *
- * Description This function is used to send S-frame to indicate
- *END_OF_APDU
- *
- * Returns It returns ESESTATUS_SUCCESS (0) if the operation is
- *successful else
- * ESESTATUS_FAILED(1)
- *
- ******************************************************************************/
-ESESTATUS phNxpEse_EndOfApdu(void) {
- ESESTATUS status = ESESTATUS_SUCCESS;
-#if (NXP_ESE_END_OF_SESSION == true)
- status = phNxpEseProto7816_Close(
- (phNxpEseProto7816SecureTimer_t*)&nxpese_ctxt.secureTimerParams);
-#endif
- return status;
-}
-
-/******************************************************************************
- * Function phNxpEse_chipReset
- *
- * Description This function is used to reset the ESE.
- *
- * Returns Always return ESESTATUS_SUCCESS (0).
- *
- ******************************************************************************/
-ESESTATUS phNxpEse_chipReset(void) {
- ESESTATUS status = ESESTATUS_FAILED;
- ESESTATUS bStatus = ESESTATUS_FAILED;
- if (nxpese_ctxt.pwr_scheme == PN80T_EXT_PMU_SCHEME) {
- bStatus = phNxpEseProto7816_Reset();
- if (!bStatus) {
- ALOGE("Inside phNxpEse_chipReset, phNxpEseProto7816_Reset Failed");
- }
- status = phPalEse_ioctl(phPalEse_e_ChipRst, nxpese_ctxt.pDevHandle, 6);
- if (status != ESESTATUS_SUCCESS) {
- ALOGE("phNxpEse_chipReset Failed");
- }
- } else {
- ALOGD_IF(ese_debug_enabled,
- "phNxpEse_chipReset is not supported in legacy power scheme");
- }
- return status;
-}
-
-/******************************************************************************
- * Function phNxpEse_GetOsMode
- *
- * Description This function is used to get OS mode(JCOP/OSU)
- *
- * Returns 0x01 : JCOP_MODE
- * 0x02 : OSU_MODE
- *
- ******************************************************************************/
-phNxpEseProto7816_OsType_t phNxpEse_GetOsMode(void) {
- return phNxpEseProto7816_GetOsMode();
-}
-
-/******************************************************************************
- * Function phNxpEse_isColdResetRequired
- *
- * Description This function determines whether hard reset recovery is
- * required or not on protocol recovery failure.
- * Returns TRUE(required)/FALSE(not required).
- *
- ******************************************************************************/
-static __inline bool phNxpEse_isColdResetRequired(phNxpEse_initMode mode,
- ESESTATUS status) {
- return (mode == ESE_MODE_OSU && status != ESESTATUS_SUCCESS);
-}
-
-/******************************************************************************
- * Function phNxpEse_doResetProtection
- *
- * Description This function enables/disables reset protection
- *
- * Returns SUCCESS(0)/FAIL(-1).
- *
- ******************************************************************************/
-ESESTATUS phNxpEse_doResetProtection(bool flag) {
- ESESTATUS wSpmStatus = ESESTATUS_SUCCESS;
- ALOGD_IF(ese_debug_enabled, " %s Enter \n", __FUNCTION__);
- if (GET_CHIP_OS_VERSION() != OS_VERSION_4_0) {
- wSpmStatus = phPalEse_ioctl(phPalEse_e_ResetProtection,
- nxpese_ctxt.pDevHandle, flag);
- } else {
- wSpmStatus = ESESTATUS_FAILED;
- ALOGE(" %s Function not supported \n", __FUNCTION__);
- }
- ALOGD_IF(ese_debug_enabled, " %s Exit status 0x%x \n", __FUNCTION__,
- wSpmStatus);
- return wSpmStatus;
-}
-
-/******************************************************************************
- * Function phNxpEse_deInit
- *
- * Description This function de-initializes all the ESE protocol params
- *
- * Returns Always return ESESTATUS_SUCCESS (0).
- *
- ******************************************************************************/
-ESESTATUS phNxpEse_deInit(void) {
- ESESTATUS status = ESESTATUS_SUCCESS;
- unsigned long maxTimer = 0;
- unsigned long num = 0;
- if (GET_CHIP_OS_VERSION() != OS_VERSION_4_0 &&
- (ESE_STATUS_RECOVERY == nxpese_ctxt.EseLibStatus) &&
- ESE_PROTOCOL_MEDIA_SPI != nxpese_ctxt.initParams.mediaType) {
- return status;
- }
- if (nxpese_ctxt.initParams.initMode == ESE_MODE_OSU) {
- phNxpEse_doResetProtection(false);
- }
- /*TODO : to be removed after JCOP fix*/
- if (EseConfig::hasKey(NAME_NXP_VISO_DPD_ENABLED)) {
- num = EseConfig::getUnsigned(NAME_NXP_VISO_DPD_ENABLED);
- }
- if (num == 0 && nxpese_ctxt.nadInfo.nadRx == EUICC_NAD_RX) {
- // do nothing
- } else {
- status = phNxpEseProto7816_Close(
- (phNxpEseProto7816SecureTimer_t*)&nxpese_ctxt.secureTimerParams);
- if (status == ESESTATUS_SUCCESS) {
- ALOGD_IF(ese_debug_enabled,
- "%s secureTimer1 0x%x secureTimer2 0x%x secureTimer3 0x%x",
- __FUNCTION__, nxpese_ctxt.secureTimerParams.secureTimer1,
- nxpese_ctxt.secureTimerParams.secureTimer2,
- nxpese_ctxt.secureTimerParams.secureTimer3);
- phNxpEse_GetMaxTimer(&maxTimer);
-#ifdef SPM_INTEGRATED
- if (GET_CHIP_OS_VERSION() == OS_VERSION_4_0) {
- status = phNxpEse_SPM_DisablePwrControl(maxTimer);
- if (status != ESESTATUS_SUCCESS) {
- ALOGE("%s phNxpEseP61_DisablePwrCntrl: failed", __FUNCTION__);
- }
- } else {
- ALOGD_IF(ese_debug_enabled, "Interface reset for DPD");
- status = phNxpEseProto7816_IntfReset(
- (phNxpEseProto7816SecureTimer_t*)&nxpese_ctxt.secureTimerParams);
- if (status != ESESTATUS_SUCCESS) {
- ALOGE("%s IntfReset Failed ", __FUNCTION__);
- }
- }
-#endif
- }
- }
- return status;
-}
-
-/******************************************************************************
- * Function phNxpEse_close
- *
- * Description This function close the ESE interface and free all
- * resources.
- *
- * Returns Always return ESESTATUS_SUCCESS (0).
- *
- ******************************************************************************/
-ESESTATUS phNxpEse_close(ESESTATUS deInitStatus) {
- ESESTATUS status = ESESTATUS_SUCCESS;
- ALOGD_IF(ese_debug_enabled, "phNxpEse_close Enter");
- if ((ESE_STATUS_CLOSE == nxpese_ctxt.EseLibStatus)) {
- ALOGE(" %s ESE Not Initialized \n", __FUNCTION__);
- return ESESTATUS_NOT_INITIALISED;
- }
-
-#ifdef SPM_INTEGRATED
- ESESTATUS wSpmStatus = ESESTATUS_SUCCESS;
-#endif
-
-#ifdef SPM_INTEGRATED
- /* Release the Access of */
- wSpmStatus = phNxpEse_SPM_ConfigPwr(SPM_POWER_DISABLE);
- if (wSpmStatus != ESESTATUS_SUCCESS) {
- ALOGE("phNxpEse_SPM_ConfigPwr: disabling power Failed");
- } else {
- nxpese_ctxt.spm_power_state = false;
- }
-
- if (GET_CHIP_OS_VERSION() == OS_VERSION_4_0) {
- if (ESE_MODE_OSU == nxpese_ctxt.initParams.initMode) {
- status = phNxpEse_setJcopDwnldState(JCP_SPI_DWNLD_COMPLETE);
- if (status != ESESTATUS_SUCCESS) {
- ALOGE("%s: phNxpEse_setJcopDwnldState failed", __FUNCTION__);
- }
- }
- } else {
- if (NULL != nxpese_ctxt.pDevHandle) {
- if (ESE_PROTOCOL_MEDIA_SPI == nxpese_ctxt.initParams.mediaType) {
- ALOGD_IF(ese_debug_enabled, "Inform eSE that trusted Mode is over");
- status = phPalEse_ioctl(phPalEse_e_SetSecureMode,
- nxpese_ctxt.pDevHandle, 0x00);
- if (status != ESESTATUS_SUCCESS) {
- ALOGE("%s: phPalEse_e_SetSecureMode failed", __FUNCTION__);
- }
- if (ESESTATUS_SUCCESS != phNxpEseProto7816_CloseAllSessions()) {
- ALOGD_IF(ese_debug_enabled, "eSE not responding perform hard reset");
- phNxpEse_SPM_ConfigPwr(SPM_RECOVERY_RESET);
- }
- } else {
- if (nxpese_ctxt.EseLibStatus == ESE_STATUS_RECOVERY ||
- (deInitStatus == ESESTATUS_RESPONSE_TIMEOUT) ||
- ESESTATUS_SUCCESS != phNxpEseProto7816_CloseAllSessions()) {
- ALOGD_IF(ese_debug_enabled, "eSE not responding perform hard reset");
- phNxpEse_SPM_ConfigPwr(SPM_RECOVERY_RESET);
- }
- }
- ALOGD_IF(ese_debug_enabled, "Interface reset for DPD");
- status = phNxpEseProto7816_IntfReset(
- (phNxpEseProto7816SecureTimer_t*)&nxpese_ctxt.secureTimerParams);
- if (status == ESESTATUS_TRANSCEIVE_FAILED || status == ESESTATUS_FAILED) {
- ALOGE("%s IntfReset Failed, perform hard reset", __FUNCTION__);
- // max wtx or no response of interface reset after protocol recovery
- phNxpEse_SPM_ConfigPwr(SPM_RECOVERY_RESET);
- }
- }
- }
-
- wSpmStatus = phNxpEse_SPM_DeInit();
- if (wSpmStatus != ESESTATUS_SUCCESS) {
- ALOGE("phNxpEse_SPM_DeInit Failed");
- }
-#endif
- if (NULL != nxpese_ctxt.pDevHandle) {
- phPalEse_close(nxpese_ctxt.pDevHandle);
- phNxpEse_memset(&nxpese_ctxt, 0x00, sizeof(nxpese_ctxt));
- ALOGD_IF(ese_debug_enabled,
- "phNxpEse_close - ESE Context deinit completed");
- }
- /* Return success always */
- return status;
-}
-
-/******************************************************************************
- * Function phNxpEse_read
- *
- * Description This function write the data to ESE through physical
- * interface (e.g. I2C) using the driver interface.
- * Before sending the data to ESE, phNxpEse_write_ext
- * is called to check if there is any extension processing
- * is required for the SPI packet being sent out.
- *
- * Returns It returns ESESTATUS_SUCCESS (0) if read successful else
- * ESESTATUS_FAILED(1)
- *
- ******************************************************************************/
-ESESTATUS phNxpEse_read(uint32_t* data_len, uint8_t** pp_data) {
- ESESTATUS status = ESESTATUS_SUCCESS;
- int ret = -1;
-
- ALOGD_IF(ese_debug_enabled, "%s Enter ..", __FUNCTION__);
-
- ret = phNxpEse_readPacket(nxpese_ctxt.pDevHandle, nxpese_ctxt.p_read_buff,
- MAX_DATA_LEN);
- if (ret < 0) {
- ALOGE("PAL Read status error status = %x", status);
- *data_len = 2;
- *pp_data = nxpese_ctxt.p_read_buff;
- status = ESESTATUS_FAILED;
- } else {
- PH_PAL_ESE_PRINT_PACKET_RX(nxpese_ctxt.p_read_buff, (uint16_t)ret);
- *data_len = ret;
- *pp_data = nxpese_ctxt.p_read_buff;
- status = ESESTATUS_SUCCESS;
- }
-
- ALOGD_IF(ese_debug_enabled, "%s Exit", __FUNCTION__);
- return status;
-}
-
-/******************************************************************************
- * Function phNxpEse_readPacket
- *
- * Description This function Reads requested number of bytes from
- * pn547 device into given buffer.
- *
- * Returns nNbBytesToRead- number of successfully read bytes
- * -1 - read operation failure
- *
- ******************************************************************************/
-static int phNxpEse_readPacket(void* pDevHandle, uint8_t* pBuffer,
- int nNbBytesToRead) {
- bool flushData = false;
- int ret = -1;
- int sof_counter = 0; /* one read may take 1 ms*/
- int total_count = 0, numBytesToRead = 0, headerIndex = 0;
-
- ALOGD_IF(ese_debug_enabled, "%s Enter", __FUNCTION__);
- if (GET_CHIP_OS_VERSION() != OS_VERSION_4_0) {
- int max_sof_counter = 0;
- /*Max retry to get SOF in case of chaining*/
- if (poll_sof_chained_delay == 1) {
- /*Wait Max for 1.3 sec before retry/recvoery*/
- /*(max_sof_counter(1300) * 10 us) = 1.3 sec */
- max_sof_counter = ESE_POLL_TIMEOUT * 10;
- }
- /*Max retry to get SOF in case of Non-chaining*/
- else {
- /*wait based on config option */
- /*(nadPollingRetryTime * WAKE_UP_DELAY_SN1xx * NAD_POLLING_SCALER_SN1xx)*/
- max_sof_counter = ((ESE_POLL_TIMEOUT * 1000) /
- (nxpese_ctxt.nadPollingRetryTime *
- GET_WAKE_UP_DELAY() * NAD_POLLING_SCALER));
- }
- if (nxpese_ctxt.rnack_sent) {
- phPalEse_sleep(nxpese_ctxt.invalidFrame_Rnack_Delay);
- }
- ALOGD_IF(ese_debug_enabled,
- "read() max_sof_counter: "
- "%X ESE_POLL_TIMEOUT %2X",
- max_sof_counter, ESE_POLL_TIMEOUT);
- do {
- ret = -1;
- ret = phPalEse_read(pDevHandle, pBuffer, 2);
- if (ret < 0) {
- /*Polling for read on spi, hence Debug log*/
- ALOGD_IF(ese_debug_enabled, "_spi_read() [HDR]errno : %x ret : %X",
- errno, ret);
- } else {
- if ((pBuffer[0] == nxpese_ctxt.nadInfo.nadRx) ||
- (pBuffer[0] == RECEIVE_PACKET_SOF)) {
- /* Read the HEADR of one byte*/
- ALOGD_IF(ese_debug_enabled, "%s Read HDR SOF + PCB", __FUNCTION__);
- numBytesToRead = 1; /*Read only INF LEN*/
- headerIndex = 1;
- break;
- } else if (((pBuffer[0] == 0x00) || (pBuffer[0] == 0xFF)) &&
- ((pBuffer[1] == nxpese_ctxt.nadInfo.nadRx) ||
- (pBuffer[1] == RECEIVE_PACKET_SOF))) {
- /* Read the HEADR of Two bytes*/
- ALOGD_IF(ese_debug_enabled, "%s Read HDR only SOF", __FUNCTION__);
- pBuffer[0] = pBuffer[1];
- numBytesToRead = 2; /*Read PCB + INF LEN*/
- headerIndex = 0;
- break;
- } else if (((pBuffer[0] == 0x00) && (pBuffer[1] == 0x00)) ||
- ((pBuffer[0] == 0xFF) && (pBuffer[1] == 0xFF))) {
- // LOG(ERROR) << StringPrintf("_spi_read() Buf[0]: %X Buf[1]: %X",
- // pBuffer[0], pBuffer[1]);
- } else if (ret >= 0) { /* Corruption happened during the receipt from
- Card, go flush out the data */
- ALOGE("_spi_read() Corruption Buf[0]: %X Buf[1]: %X ..len=%d",
- pBuffer[0], pBuffer[1], ret);
- break;
- }
- }
- /*If it is Chained packet wait for 100 usec*/
- if (poll_sof_chained_delay == 1) {
- ALOGD_IF(ese_debug_enabled, "%s Chained Pkt, delay read %dus",
- __FUNCTION__, GET_WAKE_UP_DELAY() * CHAINED_PKT_SCALER);
- phPalEse_sleep(GET_WAKE_UP_DELAY() * CHAINED_PKT_SCALER);
- } else {
- /*DLOG_IF(INFO, ese_debug_enabled)
- << StringPrintf("%s Normal Pkt, delay read %dus", __FUNCTION__,
- WAKE_UP_DELAY_SN1xx * NAD_POLLING_SCALER_SN1xx);*/
- phPalEse_sleep(nxpese_ctxt.nadPollingRetryTime * GET_WAKE_UP_DELAY() *
- NAD_POLLING_SCALER);
- }
- sof_counter++;
- } while (sof_counter < max_sof_counter);
-
- /*SOF Read timeout happened, go for frame retransmission*/
- if (sof_counter == max_sof_counter) {
- ret = -1;
- }
- if (ret < 0) {
- /*In case of IO Error*/
- ret = -2;
- pBuffer[0] = 0x64;
- pBuffer[1] = 0xFF;
- } else if ((pBuffer[0] == nxpese_ctxt.nadInfo.nadRx) ||
- (pBuffer[0] == RECEIVE_PACKET_SOF)) {
- ALOGD_IF(ese_debug_enabled, "%s SOF FOUND", __FUNCTION__);
- /* Read the HEADR of one/Two bytes based on how two bytes read A5 PCB or
- * 00 A5*/
- ret =
- phPalEse_read(pDevHandle, &pBuffer[1 + headerIndex], numBytesToRead);
- if (ret < 0) {
- ALOGE("_spi_read() [HDR]errno : %x ret : %X", errno, ret);
- flushData = true;
- } else {
- if ((pBuffer[1] == CHAINED_PACKET_WITHOUTSEQN) ||
- (pBuffer[1] == CHAINED_PACKET_WITHSEQN)) {
- poll_sof_chained_delay = 1;
- ALOGD_IF(ese_debug_enabled, "poll_sof_chained_delay value is %d ",
- poll_sof_chained_delay);
- } else {
- poll_sof_chained_delay = 0;
- ALOGD_IF(ese_debug_enabled, "poll_sof_chained_delay value is %d ",
- poll_sof_chained_delay);
- }
- total_count = 3;
- uint8_t pcb;
- phNxpEseProto7816_PCB_bits_t pcb_bits;
- pcb = pBuffer[PH_PROPTO_7816_PCB_OFFSET];
-
- phNxpEse_memset(&pcb_bits, 0x00, sizeof(phNxpEseProto7816_PCB_bits_t));
- phNxpEse_memcpy(&pcb_bits, &pcb, sizeof(uint8_t));
-
- /*For I-Frame Only*/
- if (0 == pcb_bits.msb) {
- if (pBuffer[2] != EXTENDED_FRAME_MARKER) {
- nNbBytesToRead = pBuffer[2];
- headerIndex = 3;
- } else {
- ret = phPalEse_read(pDevHandle, &pBuffer[3], 2);
- if (ret < 0) {
- ALOGE("_spi_read() [HDR]errno : %x ret : %X", errno, ret);
- flushData = true;
- } else {
- nNbBytesToRead = (pBuffer[3] << 8);
- nNbBytesToRead = nNbBytesToRead | pBuffer[4];
- /*If I-Frame received with invalid length respond with RNACK*/
- if ((nNbBytesToRead == 0) || (nNbBytesToRead > MAX_DATA_LEN) ||
- (nNbBytesToRead > phNxpEseProto7816_GetIfs())) {
- ALOGD_IF(ese_debug_enabled, "I-Frame with invalid len == %d",
- nNbBytesToRead);
- flushData = true;
- } else {
- ALOGE("_spi_read() [HDR]EXTENDED_FRAME_MARKER, ret=%d", ret);
- total_count += 2;
- headerIndex = 5;
- }
- }
- }
- } else {
- /*For Non-IFrame*/
- nNbBytesToRead = (int)pBuffer[2];
- headerIndex = 3;
- }
- if (!flushData) {
- /* Read the Complete data + one byte CRC*/
- ret = phPalEse_read(pDevHandle, &pBuffer[headerIndex],
- (nNbBytesToRead + 1));
- if (ret < 0) {
- ALOGE("_spi_read() [HDR]errno : %x ret : %X", errno, ret);
- ret = -1;
- } else {
- ret = (total_count + (nNbBytesToRead + 1));
- }
- nxpese_ctxt.rnack_sent = false;
- }
- }
- } else {
- flushData = true;
- }
- if (flushData) {
- /* Received corrupted frame:
- Flushing out data in the Rx buffer so that Card can switch the mode */
- uint16_t ifsd_size = phNxpEseProto7816_GetIfs();
- uint32_t total_frame_size = 0;
- ALOGE("_spi_read() corrupted, IFSD size=%d flushing it out!!", ifsd_size);
- /* If a non-zero byte is received while polling for NAD byte and the byte
- is not a valid NAD byte (0xA5 or 0xB4): 1) Read & discard (without
- de-asserting SPI CS line) : a. Max IFSD size + 5 (remaining four
- prologue + one LRC bytes) bytes from eSE if max IFS size is greater
- than 254 bytes OR b. Max IFSD size + 3 (remaining two prologue + one
- LRC bytes) bytes from eSE if max IFS size is less than 255 bytes.
- 2) Send R-NACK to request eSE to re-transmit the frame*/
- if (ifsd_size > IFSC_SIZE_SEND) {
- total_frame_size = ifsd_size + 4;
- } else {
- total_frame_size = ifsd_size + 2;
- }
- nxpese_ctxt.rnack_sent = true;
- phPalEse_sleep(nxpese_ctxt.invalidFrame_Rnack_Delay);
- ret = phPalEse_read(pDevHandle, &pBuffer[2], total_frame_size);
- if (ret < 0) {
- ALOGE("_spi_read() [HDR]errno : %x ret : %X", errno, ret);
- } else { /* LRC fail expected for this frame to send R-NACK*/
- ALOGD_IF(
- ese_debug_enabled,
- "_spi_read() SUCCESS ret : %X LRC fail excpected for this frame",
- ret);
- PH_PAL_ESE_PRINT_PACKET_RX(pBuffer, ret);
- }
- pBuffer[0] = 0x90;
- pBuffer[1] = RECEIVE_PACKET_SOF;
- ret = 0x02;
- phPalEse_sleep(nxpese_ctxt.invalidFrame_Rnack_Delay);
- }
- } else {
- ret = phNxpEse_readPacket_legacy(pDevHandle, pBuffer, nNbBytesToRead);
- }
- ALOGD_IF(ese_debug_enabled, "%s Exit ret = %d", __FUNCTION__, ret);
- return ret;
-}
-
-/******************************************************************************
- * Function phNxpEse_readPacket_legacy
- *
- * Description This function Reads requested number of bytes from
- * pn547 device into given buffer.
- *
- * Returns nNbBytesToRead- number of successfully read bytes
- * -1 - read operation failure
- *
- ******************************************************************************/
-static int phNxpEse_readPacket_legacy(void* pDevHandle, uint8_t* pBuffer,
- int nNbBytesToRead) {
- int ret = -1;
- int sof_counter = 0; /* one read may take 1 ms*/
- int total_count = 0, numBytesToRead = 0, headerIndex = 0;
- do {
- sof_counter++;
- ret = -1;
- ret = phPalEse_read(pDevHandle, pBuffer, 2);
- if (ret < 0) {
- /*Polling for read on spi, hence Debug log*/
- ALOGD_IF(ese_debug_enabled, "_spi_read() [HDR]errno : %x ret : %X", errno,
- ret);
- }
- if (pBuffer[0] == RECEIVE_PACKET_SOF) {
- /* Read the HEADR of one byte*/
- ALOGD_IF(ese_debug_enabled, "%s Read HDR", __FUNCTION__);
- numBytesToRead = 1;
- headerIndex = 1;
- break;
- } else if (pBuffer[1] == RECEIVE_PACKET_SOF) {
- /* Read the HEADR of Two bytes*/
- ALOGD_IF(ese_debug_enabled, "%s Read HDR", __FUNCTION__);
- pBuffer[0] = RECEIVE_PACKET_SOF;
- numBytesToRead = 2;
- headerIndex = 0;
- break;
- }
- /*If it is Chained packet wait for 100 usec*/
- if (poll_sof_chained_delay == 1) {
- ALOGD_IF(ese_debug_enabled, "%s Chained Pkt, delay read %dus",
- __FUNCTION__, GET_WAKE_UP_DELAY() * CHAINED_PKT_SCALER);
- phPalEse_sleep(GET_WAKE_UP_DELAY() * CHAINED_PKT_SCALER);
- } else {
- ALOGD_IF(ese_debug_enabled, "%s Normal Pkt, delay read %dus",
- __FUNCTION__, GET_WAKE_UP_DELAY() * NAD_POLLING_SCALER);
- phPalEse_sleep(GET_WAKE_UP_DELAY() * NAD_POLLING_SCALER);
- }
- } while (sof_counter < ESE_NAD_POLLING_MAX);
- if (pBuffer[0] == RECEIVE_PACKET_SOF) {
- ALOGD_IF(ese_debug_enabled, "%s SOF FOUND", __FUNCTION__);
- /* Read the HEADR of one/Two bytes based on how two bytes read A5 PCB or
- * 00 A5*/
- ret = phPalEse_read(pDevHandle, &pBuffer[1 + headerIndex], numBytesToRead);
- if (ret < 0) {
- ALOGE("_spi_read() [HDR]errno : %x ret : %X", errno, ret);
- }
- if ((pBuffer[1] == CHAINED_PACKET_WITHOUTSEQN) ||
- (pBuffer[1] == CHAINED_PACKET_WITHSEQN)) {
- poll_sof_chained_delay = 1;
- ALOGD_IF(ese_debug_enabled, "poll_sof_chained_delay value is %d ",
- poll_sof_chained_delay);
- } else {
- poll_sof_chained_delay = 0;
- ALOGD_IF(ese_debug_enabled, "poll_sof_chained_delay value is %d ",
- poll_sof_chained_delay);
- }
- total_count = 3;
- nNbBytesToRead = (int)pBuffer[2];
- /* Read the Complete data + one byte CRC*/
- ret = phPalEse_read(pDevHandle, &pBuffer[3], (nNbBytesToRead + 1));
- if (ret < 0) {
- ALOGE("_spi_read() [HDR]errno : %x ret : %X", errno, ret);
- ret = -1;
- } else {
- ret = (total_count + (nNbBytesToRead + 1));
- }
- } else if (ret < 0) {
- /*In case of IO Error*/
- ret = -2;
- pBuffer[0] = 0x64;
- pBuffer[1] = 0xFF;
- } else {
- ret = -1;
- }
- return ret;
-}
-
-/******************************************************************************
- * Function phNxpEse_WriteFrame
- *
- * Description This is the actual function which is being called by
- * phNxpEse_write. This function writes the data to ESE.
- * It waits till write callback provide the result of write
- * process.
- *
- * Returns It returns ESESTATUS_SUCCESS (0) if write successful else
- * ESESTATUS_FAILED(1)
- *
- ******************************************************************************/
-ESESTATUS phNxpEse_WriteFrame(uint32_t data_len, uint8_t* p_data) {
- ESESTATUS status = ESESTATUS_INVALID_PARAMETER;
- int32_t dwNoBytesWrRd = 0;
- ALOGD_IF(ese_debug_enabled, "Enter %s ", __FUNCTION__);
- if (GET_CHIP_OS_VERSION() != OS_VERSION_4_0) {
- /* TODO where to set the nad id */
- p_data[0] = nxpese_ctxt.nadInfo.nadTx;
- } else {
- p_data[0] = ESE_NAD_TX;
- }
- /* Create local copy of cmd_data */
- phNxpEse_memcpy(nxpese_ctxt.p_cmd_data, p_data, data_len);
- nxpese_ctxt.cmd_len = data_len;
-
- dwNoBytesWrRd = phPalEse_write(nxpese_ctxt.pDevHandle, nxpese_ctxt.p_cmd_data,
- nxpese_ctxt.cmd_len);
- if (-1 == dwNoBytesWrRd) {
- ALOGE(" - Error in SPI Write.....%d\n", errno);
- status = ESESTATUS_FAILED;
- } else {
- status = ESESTATUS_SUCCESS;
- PH_PAL_ESE_PRINT_PACKET_TX(nxpese_ctxt.p_cmd_data, nxpese_ctxt.cmd_len);
- }
- ALOGD_IF(ese_debug_enabled, "Exit %s status %x\n", __FUNCTION__, status);
- return status;
-}
-
-/******************************************************************************
- * Function phNxpEse_getAtr
- *
- * Description This function retrieves ATR bytes from 7816-3 layer
- *Update.
- *
- * Returns It returns ESESTATUS_SUCCESS (0) if write successful else
- * ESESTATUS_FAILED(1
- *
- ******************************************************************************/
-ESESTATUS phNxpEse_getAtr(phNxpEse_data* pATR) {
- ESESTATUS status = ESESTATUS_FAILED;
- if (GET_CHIP_OS_VERSION() != OS_VERSION_4_0) {
- status = phNxpEseProto7816_getAtr(pATR);
- } else {
- ALOGE(" %s - Function not supported\n", __FUNCTION__);
- }
- return status;
-}
-
-/******************************************************************************
- * Function phNxpEse_setIfs
- *
- * Description This function sets the IFS size to 240/254 support JCOP OS
- *Update.
- *
- * Returns Always return ESESTATUS_SUCCESS (0).
- *
- ******************************************************************************/
-ESESTATUS phNxpEse_setIfs(uint16_t IFS_Size) {
- phNxpEseProto7816_SetIfs(IFS_Size);
- return ESESTATUS_SUCCESS;
-}
-
-/******************************************************************************
- * Function phNxpEse_Sleep
- *
- * Description This function suspends execution of the calling thread for
- * (at least) usec microseconds
- *
- * Returns Always return ESESTATUS_SUCCESS (0).
- *
- ******************************************************************************/
-ESESTATUS phNxpEse_Sleep(uint32_t usec) {
- phPalEse_sleep(usec);
- return ESESTATUS_SUCCESS;
-}
-
-/******************************************************************************
- * Function phNxpEse_memset
- *
- * Description This function updates destination buffer with val
- * data in len size
- *
- * Returns Always return ESESTATUS_SUCCESS (0).
- *
- ******************************************************************************/
-void* phNxpEse_memset(void* buff, int val, size_t len) {
- return phPalEse_memset(buff, val, len);
-}
-
-/******************************************************************************
- * Function phNxpEse_memcpy
- *
- * Description This function copies source buffer to destination buffer
- * data in len size
- *
- * Returns Return pointer to allocated memory location.
- *
- ******************************************************************************/
-void* phNxpEse_memcpy(void* dest, const void* src, size_t len) {
- return phPalEse_memcpy(dest, src, len);
-}
-
-/******************************************************************************
- * Function phNxpEse_Memalloc
- *
- * Description This function allocation memory
- *
- * Returns Return pointer to allocated memory or NULL.
- *
- ******************************************************************************/
-void* phNxpEse_memalloc(uint32_t size) {
- return phPalEse_memalloc(size);
- ;
-}
-
-/******************************************************************************
- * Function phNxpEse_calloc
- *
- * Description This is utility function for runtime heap memory allocation
- *
- * Returns Return pointer to allocated memory or NULL.
- *
- ******************************************************************************/
-void* phNxpEse_calloc(size_t datatype, size_t size) {
- return phPalEse_calloc(datatype, size);
-}
-
-/******************************************************************************
- * Function phNxpEse_free
- *
- * Description This function de-allocation memory
- *
- * Returns void.
- *
- ******************************************************************************/
-void phNxpEse_free(void* ptr) { return phPalEse_free(ptr); }
-
-/******************************************************************************
- * Function phNxpEse_GetMaxTimer
- *
- * Description This function finds out the max. timer value returned from
- *JCOP
- *
- * Returns void.
- *
- ******************************************************************************/
-static void phNxpEse_GetMaxTimer(unsigned long* pMaxTimer) {
- /* Finding the max. of the timer value */
- *pMaxTimer = nxpese_ctxt.secureTimerParams.secureTimer1;
- if (*pMaxTimer < nxpese_ctxt.secureTimerParams.secureTimer2)
- *pMaxTimer = nxpese_ctxt.secureTimerParams.secureTimer2;
- *pMaxTimer = (*pMaxTimer < nxpese_ctxt.secureTimerParams.secureTimer3)
- ? (nxpese_ctxt.secureTimerParams.secureTimer3)
- : *pMaxTimer;
-
- /* Converting timer to millisecond from sec */
- *pMaxTimer = SECOND_TO_MILLISECOND(*pMaxTimer);
- /* Add extra 5% to the timer */
- *pMaxTimer +=
- CONVERT_TO_PERCENTAGE(*pMaxTimer, ADDITIONAL_SECURE_TIME_PERCENTAGE);
- ALOGD_IF(ese_debug_enabled, "%s Max timer value = %lu", __FUNCTION__,
- *pMaxTimer);
- return;
-}
-
-/******************************************************************************
- * Function phNxpEseP61_DisablePwrCntrl
- *
- * Description This function disables eSE GPIO power off/on control
- * when enabled
- *
- * Returns SUCCESS/FAIL.
- *
- ******************************************************************************/
-ESESTATUS phNxpEse_DisablePwrCntrl(void) {
- ESESTATUS status = ESESTATUS_SUCCESS;
- unsigned long maxTimer = 0;
- ALOGE("%s Enter", __FUNCTION__);
- phNxpEse_GetMaxTimer(&maxTimer);
- if (GET_CHIP_OS_VERSION() == OS_VERSION_4_0) {
- status = phNxpEse_SPM_DisablePwrControl(maxTimer);
- if (status != ESESTATUS_SUCCESS) {
- ALOGE("%s phNxpEseP61_DisablePwrCntrl: failed", __FUNCTION__);
- }
- } else {
- ALOGE("%s phNxpEseP61_DisablePwrCntrl: not supported", __FUNCTION__);
- status = ESESTATUS_FAILED;
- }
- return status;
-}
-
-/******************************************************************************
- * Function phNxpEse_getOsVersion
- *
- * Description This function returns OS version from config file &
- * runtime from ATR response
- *
- * Returns SUCCESS/FAIL.
- *
- ******************************************************************************/
-phNxpEse_OsVersion_t phNxpEse_getOsVersion() { return sOsVersion; }
-
-/******************************************************************************
- * Function phNxpEse_setOsVersion
- *
- * Description This function sets chip type based on ATR response
- *
- * Returns None.
- *
- ******************************************************************************/
-void phNxpEse_setOsVersion(phNxpEse_OsVersion_t chipType) {
- sOsVersion = chipType;
-}
-
-/******************************************************************************
- * Function phNxpEse_checkFWDwnldStatus
- *
- * Description This function is used to check whether FW download
- * is completed or not.
- *
- * Returns returns ESESTATUS_SUCCESS or ESESTATUS_BUSY
- *
- ******************************************************************************/
-static ESESTATUS phNxpEse_checkFWDwnldStatus(void) {
- ALOGD_IF(ese_debug_enabled, "phNxpEse_checkFWDwnldStatus Enter");
- ESESTATUS wSpmStatus = ESESTATUS_SUCCESS;
- spm_state_t current_spm_state = SPM_STATE_INVALID;
- uint8_t ese_dwnld_retry = 0x00;
- ESESTATUS status = ESESTATUS_FAILED;
-
- wSpmStatus = phNxpEse_SPM_GetState(¤t_spm_state);
- if (wSpmStatus == ESESTATUS_SUCCESS) {
- /* Check current_spm_state and update config/Spm status*/
- while (ese_dwnld_retry < ESE_FW_DWNLD_RETRY_CNT) {
- ALOGD_IF(ese_debug_enabled, "ESE_FW_DWNLD_RETRY_CNT retry count");
- wSpmStatus = phNxpEse_SPM_GetState(¤t_spm_state);
- if (wSpmStatus == ESESTATUS_SUCCESS) {
- if ((current_spm_state & SPM_STATE_DWNLD)) {
- status = ESESTATUS_FAILED;
- } else {
- ALOGE("Exit polling no FW Download ..");
- status = ESESTATUS_SUCCESS;
- break;
- }
- } else {
- status = ESESTATUS_FAILED;
- break;
- }
- phNxpEse_Sleep(500000); /*sleep for 500 ms checking for fw dwnld status*/
- ese_dwnld_retry++;
- }
- }
-
- ALOGD_IF(ese_debug_enabled, "phNxpEse_checkFWDwnldStatus status %x", status);
- return status;
-}
-
-/******************************************************************************
- * Function phNxpEse_GetEseStatus(unsigned char *timer_buffer)
- *
- * Description This function returns the all three timer
- * Timeout buffer length should be minimum 18 bytes. Response will be in below
- format:
- * <0xF1><Len><Timer Value><0xF2><Len><Timer Value><0xF3><Len><Timer Value>
- *
- * Returns SUCCESS/FAIL.
- * ESESTATUS_SUCCESS if 0xF1 or 0xF2 tag timeout >= 0 & 0xF3 == 0
- * ESESTATUS_BUSY if 0xF3 tag timeout > 0
- * ESESTATUS_FAILED if any other error
-
- ******************************************************************************/
-ESESTATUS phNxpEse_GetEseStatus(phNxpEse_data* timer_buffer) {
- ESESTATUS status = ESESTATUS_FAILED;
-
- phNxpEse_SecureTimer_t secureTimerParams;
- uint8_t* temp_timer_buffer = NULL;
- ALOGD_IF(ese_debug_enabled, "%s Enter", __FUNCTION__);
- if (GET_CHIP_OS_VERSION() != OS_VERSION_4_0) {
- ALOGE("%s function not supported", __FUNCTION__);
- return status;
- }
- if (timer_buffer != NULL) {
- timer_buffer->len =
- (sizeof(secureTimerParams.secureTimer1) +
- sizeof(secureTimerParams.secureTimer2) +
- sizeof(secureTimerParams.secureTimer3)) +
- PH_PROPTO_7816_FRAME_LENGTH_OFFSET * PH_PROPTO_7816_FRAME_LENGTH_OFFSET;
- temp_timer_buffer = (uint8_t*)phNxpEse_memalloc(timer_buffer->len);
- timer_buffer->p_data = temp_timer_buffer;
-
- phNxpEse_memcpy(&secureTimerParams, &nxpese_ctxt.secureTimerParams,
- sizeof(phNxpEse_SecureTimer_t));
-
- ALOGD_IF(
- ese_debug_enabled,
- "%s secureTimer1 0x%x secureTimer2 0x%x secureTimer3 0x%x len = %d",
- __FUNCTION__, secureTimerParams.secureTimer1,
- secureTimerParams.secureTimer2, secureTimerParams.secureTimer3,
- timer_buffer->len);
-
- *temp_timer_buffer++ = PH_PROPTO_7816_SFRAME_TIMER1;
- *temp_timer_buffer++ = sizeof(secureTimerParams.secureTimer1);
- temp_timer_buffer = phNxpEse_GgetTimerTlvBuffer(
- temp_timer_buffer, secureTimerParams.secureTimer1);
- if (temp_timer_buffer != NULL) {
- *temp_timer_buffer++ = PH_PROPTO_7816_SFRAME_TIMER2;
- *temp_timer_buffer++ = sizeof(secureTimerParams.secureTimer2);
- temp_timer_buffer = phNxpEse_GgetTimerTlvBuffer(
- temp_timer_buffer, secureTimerParams.secureTimer2);
- if (temp_timer_buffer != NULL) {
- *temp_timer_buffer++ = PH_PROPTO_7816_SFRAME_TIMER3;
- *temp_timer_buffer++ = sizeof(secureTimerParams.secureTimer3);
- temp_timer_buffer = phNxpEse_GgetTimerTlvBuffer(
- temp_timer_buffer, secureTimerParams.secureTimer3);
- if (temp_timer_buffer != NULL) {
- if (secureTimerParams.secureTimer3 > 0) {
- status = ESESTATUS_BUSY;
- } else {
- status = ESESTATUS_SUCCESS;
- }
- }
- }
- }
- } else {
- ALOGE("%s Invalid timer buffer ", __FUNCTION__);
- }
-
- ALOGD_IF(ese_debug_enabled, "%s Exit status = 0x%x", __FUNCTION__, status);
- return status;
-}
-
-static unsigned char* phNxpEse_GgetTimerTlvBuffer(uint8_t* timer_buffer,
- unsigned int value) {
- short int count = 0, shift = 3;
- unsigned int mask = 0x000000FF;
- if (GET_CHIP_OS_VERSION() != OS_VERSION_4_0) {
- ALOGE("%s function not supported", __FUNCTION__);
- } else {
- ALOGD_IF(ese_debug_enabled, "value = %x \n", value);
- for (count = 0; count < 4; count++) {
- if (timer_buffer != NULL) {
- *timer_buffer = (value >> (shift * 8) & mask);
- ALOGD_IF(ese_debug_enabled, "*timer_buffer=0x%x shift=0x%x",
- *timer_buffer, shift);
- timer_buffer++;
- shift--;
- } else {
- break;
- }
- }
- }
- return timer_buffer;
-}
-
-/******************************************************************************
- * Function phNxpEse_NotifySEWtxRequest
- *
- * Description This function notifies SE hal service if it registers
- * about WTX ongoing & end status
- *
- * Returns None
- *
- ******************************************************************************/
-void phNxpEse_NotifySEWtxRequest(phNxpEse_wtxState state) {
- if (nxpese_ctxt.fPtr_WtxNtf) {
- (nxpese_ctxt.fPtr_WtxNtf)(state);
- } else {
- ALOGE("%s function not supported", __FUNCTION__);
- }
-}
-
-/******************************************************************************
- * Function phNxpEse_setWtxCountLimit
- *
- * Description This function sets the counter limit for wtx
- *
- * Returns None
- *
- ******************************************************************************/
-void phNxpEse_setWtxCountLimit(unsigned long int wtxCount) {
- app_wtx_cnt = wtxCount;
-}
diff --git a/snxxx/libese-spi/p73/lib/phNxpEse_Internal.h b/snxxx/libese-spi/p73/lib/phNxpEse_Internal.h
deleted file mode 100644
index 83e5667..0000000
--- a/snxxx/libese-spi/p73/lib/phNxpEse_Internal.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2018-2019 NXP
- *
- * 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.
- *
- ******************************************************************************/
-#ifndef _PHNXPSPILIB_H_
-#define _PHNXPSPILIB_H_
-
-#include <phNxpEse_Api.h>
-
-/* Macro to enable SPM Module */
-#define SPM_INTEGRATED
-//#undef SPM_INTEGRATED
-#ifdef SPM_INTEGRATED
-#include "../spm/phNxpEse_Spm.h"
-#endif
-
-/********************* Definitions and structures *****************************/
-
-typedef enum {
- ESE_STATUS_CLOSE = 0x00,
- ESE_STATUS_BUSY,
- ESE_STATUS_RECOVERY,
- ESE_STATUS_IDLE,
- ESE_STATUS_OPEN,
-} phNxpEse_LibStatus;
-
-typedef enum {
- PN67T_POWER_SCHEME = 0x01,
- PN80T_LEGACY_SCHEME,
- PN80T_EXT_PMU_SCHEME,
-} phNxpEse_PowerScheme;
-
-typedef enum {
- END_POINT_ESE = 0, /*!< eSE services */
- END_POINT_EUICC, /*!< UICC services*/
- MAX_END_POINTS
-} phNxpEse_EndPoint;
-
-/* Macros definition */
-#define MAX_DATA_LEN 780
-#define SECOND_TO_MILLISECOND(X) X * 1000
-#define CONVERT_TO_PERCENTAGE(X, Y) X* Y / 100
-#define ADDITIONAL_SECURE_TIME_PERCENTAGE 5
-#define ESE_JCOP_OS_DWNLD_RETRY_CNT \
- 10 /* Maximum retry count for ESE JCOP OS Dwonload*/
-#define ESE_FW_DWNLD_RETRY_CNT 10 /* Maximum retry count for FW Dwonload*/
-
-/*!
- * \brief Secure timer values F1, F2, F3
- *
- *
- */
-typedef struct phNxpEse_SecureTimer {
- unsigned int secureTimer1; /*!< Secure timer 1 value */
- unsigned int secureTimer2; /*!< Secure timer 2 value */
- unsigned int secureTimer3; /*!< Secure timer 3 value */
-} phNxpEse_SecureTimer_t;
-
-typedef enum nadInfoTx {
- ESE_NAD_TX = 0x5A, /*!< R-frame Acknowledgement frame indicator */
- EUICC_NAD_TX = 0x4B /*!< R-frame Negative-Acknowledgement frame indicator */
-} nadInfoTx_t;
-
-/*!
- * \brief R-Frame types used in 7816-3 protocol stack
- */
-typedef enum nadInfoRx {
- ESE_NAD_RX = 0xA5, /*!< R-frame Acknowledgement frame indicator */
- EUICC_NAD_RX = 0xB4 /*!< R-frame Negative-Acknowledgement frame indicator */
-} nadInfoRx_t;
-
-/*!
- * \brief Node address Info structure
- *
- *
- */
-typedef struct phNxpEseNadInfo {
- nadInfoTx_t nadTx; /*!< nod address for tx */
- nadInfoRx_t nadRx; /*!< nod address for rx */
-} phNxpEseNadInfo_t;
-
-/* JCOP download states */
-typedef enum jcop_dwnld_state {
- JCP_DWNLD_IDLE = SPM_STATE_JCOP_DWNLD, /* jcop dwnld is not ongoing*/
- JCP_DWNLD_INIT = 0x8010, /* jcop dwonload init state*/
- JCP_DWNLD_START = 0x8020, /* download started */
- JCP_SPI_DWNLD_COMPLETE = 0x8040, /* jcop download complete in spi interface*/
- JCP_DWP_DWNLD_COMPLETE = 0x8080, /* jcop download complete */
-} phNxpEse_JcopDwnldState;
-
-/*!
- * \brief SPI Control structure
- *
- *
- */
-typedef struct phNxpEse_Context {
- void* pDevHandle; /*!<device handle */
- long nadPollingRetryTime; /*!<polling retry for nod address */
- long invalidFrame_Rnack_Delay; /*!<delay before retrying when rnack is
- received */
- phNxpEse_LibStatus EseLibStatus; /*!<Indicate if Ese Lib is open or closed */
- phNxpEse_initParams initParams; /*!<init params */
- phNxpEse_SecureTimer_t secureTimerParams; /*!<secure timer params */
- phNxpEseNadInfo_t nadInfo; /*!<nad info */
- uint8_t p_read_buff[MAX_DATA_LEN]; /*!<read buffer */
- uint8_t p_cmd_data[MAX_DATA_LEN]; /*!<cmd buffer */
- uint16_t cmd_len; /*!<cmd buffer length */
- uint8_t pwr_scheme; /*!<eSE power scheme */
- uint8_t endPointInfo; /*!<info end point*/
- bool rnack_sent; /*!<rnack send info */
- bool spm_power_state; /*!<spm_power_state */
- NotifyWtxReq* fPtr_WtxNtf; /*!< Wait extension callback notification*/
-} phNxpEse_Context_t;
-
-/* Timeout value to wait for response from
- Note: Timeout value updated from 1000 to 2000 to fix the JCOP delay (WTX)*/
-#define HAL_EXTNS_WRITE_RSP_TIMEOUT (2000)
-
-#define SPILIB_CMD_CODE_LEN_BYTE_OFFSET (2U)
-#define SPILIB_CMD_CODE_BYTE_LEN (3U)
-
-static nadInfoTx_t nadInfoTx_ptr[MAX_END_POINTS] = {ESE_NAD_TX, EUICC_NAD_TX};
-
-static nadInfoRx_t nadInfoRx_ptr[MAX_END_POINTS] = {ESE_NAD_RX, EUICC_NAD_RX};
-ESESTATUS phNxpEse_WriteFrame(uint32_t data_len, uint8_t* p_data);
-ESESTATUS phNxpEse_read(uint32_t* data_len, uint8_t** pp_data);
-void phNxpEse_setOsVersion(phNxpEse_OsVersion_t chipType);
-
-#endif /* _PHNXPSPILIB_H_ */
diff --git a/snxxx/libese-spi/p73/pal/EseTransport.h b/snxxx/libese-spi/p73/pal/EseTransport.h
deleted file mode 100644
index 2929374..0000000
--- a/snxxx/libese-spi/p73/pal/EseTransport.h
+++ /dev/null
@@ -1,139 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2020-2021 NXP
- *
- * 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
-
-/* Basic type definitions */
-#include <phNxpEsePal.h>
-
-/*!
- * \brief Start of frame marker
- */
-#define SEND_PACKET_SOF 0x5A
-/*!
- * \brief ESE Poll timeout (max 2 seconds)
- */
-#define ESE_POLL_TIMEOUT (2 * 1000)
-/*!
- * \brief ESE Max Poll retry count
- */
-
-#define ESE_NAD_POLLING_MAX (2000)
-
-/*!
- * \brief ESE wakeup delay in case of write error retry
- */
-
-#define WAKE_UP_DELAY_USECS 100
-
-#define GET_WAKE_UP_DELAY() \
- ((GET_CHIP_OS_VERSION() != OS_VERSION_4_0) ? (WAKE_UP_DELAY_USECS) \
- : (10 * WAKE_UP_DELAY_USECS))
-
-/*!
- * \brief ESE wakeup delay in case of write error retry
- */
-
-#define NAD_POLLING_SCALER 1
-
-/*!
- * \brief ESE wakeup delay in case of write error retry
- */
-#define CHAINED_PKT_SCALER 1
-/*!
- * \brief Magic type specific to the ESE device driver
- */
-#define P61_MAGIC 0xEA
-
-/*!
- * \brief IOCTL number to set ESE PWR
- */
-#define P61_SET_PWR _IOW(P61_MAGIC, 0x01, long)
-/*!
- * \brief IOCTL number to set debug state
- */
-#define P61_SET_DBG _IOW(P61_MAGIC, 0x02, long)
-/*!
- * \brief IOCTL number to enable poll mode
- */
-#define P61_SET_POLL _IOW(P61_MAGIC, 0x03, long)
-/*!
- * \brief SPI Request NFCC to enable p61 power, only in param
- * Only for SPI
- * level 1 = Enable power
- * level 0 = Disable power
- */
-#define P61_SET_SPM_PWR _IOW(P61_MAGIC, 0x04, long)
-
-/*!
- * \brief SPI or DWP can call this ioctl to get the current
- * power state of P61
- *
- */
-#define P61_GET_SPM_STATUS _IOR(P61_MAGIC, 0x05, long)
-/*!
- * \brief IOCTL to add throughput measurement source code in device driver
- *
- */
-#define P61_SET_THROUGHPUT _IOW(P61_MAGIC, 0x06, long)
-/*!
- * \brief IOCTL to get the ESE access
- *
- */
-#define P61_GET_ESE_ACCESS _IOW(P61_MAGIC, 0x07, long)
-/*!
- * \brief IOCTL to set the power scheme
- *
- */
-#define P61_SET_POWER_SCHEME _IOW(P61_MAGIC, 0x08, long)
-/*!
- * \brief This function is used to set the ESE jcop
- * download state.
- */
-#define P61_SET_DWNLD_STATUS _IOW(P61_MAGIC, 0x09, long)
-
-/*!
- * \brief This function is used to set disable ESE GPIO
- * state On&Off
- */
-#define P61_INHIBIT_PWR_CNTRL _IOW(P61_MAGIC, 0x0A, long)
-/*!
- * \brief IOCTL to set the GPIO for the eSE to distinguish
- * the logical interface
- */
-#define ESE_SET_TRUSTED_ACCESS _IOW(P61_MAGIC, 0x0B, long)
-
-/*!
- * \brief IOCTL to perform the eSE COLD_RESET via NFC driver.
- */
-#define ESE_PERFORM_COLD_RESET _IOW(P61_MAGIC, 0x0C, long)
-/*!
- * \brief IOCTL to enable/disable GPIO/COLD reset protection.
- */
-#define PERFORM_RESET_PROTECTION _IOW(P61_MAGIC, 0x0D, long)
-
-class EseTransport {
- public:
- virtual void Close(void* pDevHandle) = 0;
- virtual ESESTATUS OpenAndConfigure(pphPalEse_Config_t pConfig) = 0;
- virtual int Read(void* pDevHandle, uint8_t* pBuffer, int nNbBytesToRead) = 0;
- virtual int Write(void* pDevHandle, uint8_t* pBuffer,
- int nNbBytesToWrite) = 0;
- virtual ESESTATUS Ioctl(phPalEse_ControlCode_t eControlCode, void* pDevHandle,
- long level) = 0;
- virtual ~EseTransport(){};
-};
diff --git a/snxxx/libese-spi/p73/pal/EseTransportFactory.cpp b/snxxx/libese-spi/p73/pal/EseTransportFactory.cpp
deleted file mode 100644
index d76d987..0000000
--- a/snxxx/libese-spi/p73/pal/EseTransportFactory.cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2020 NXP
- *
- * 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.
- *
- ******************************************************************************/
-
-#include <EseSpiTransport.h>
-#include <EseTransportFactory.h>
-
-EseTransportFactory::EseTransportFactory() {}
-
-EseTransportFactory& EseTransportFactory::getInstance() {
- static EseTransportFactory mTransprtFactoryInstance;
- return mTransprtFactoryInstance;
-}
-
-spTransport EseTransportFactory::getTransport(transportIntf transportType) {
- spTransport mspTransportInterface;
- switch (transportType) {
- case SPI:
- case UNKNOWN:
- mspTransportInterface = std::make_shared<EseSpiTransport>();
- break;
- default:
- mspTransportInterface = std::make_shared<EseSpiTransport>();
- break;
- }
- return mspTransportInterface;
-}
diff --git a/snxxx/libese-spi/p73/pal/EseTransportFactory.h b/snxxx/libese-spi/p73/pal/EseTransportFactory.h
deleted file mode 100644
index 0a9a876..0000000
--- a/snxxx/libese-spi/p73/pal/EseTransportFactory.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2020 NXP
- *
- * 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 <EseTransport.h>
-#include <memory>
-
-#define transportFactory (EseTransportFactory::getInstance())
-typedef std::shared_ptr<EseTransport> spTransport;
-enum transportIntf { SPI, UNKNOWN };
-
-extern spTransport gpTransportObj;
-class EseTransportFactory {
- /*****************************************************************************
- **
- ** Function EseTransportFactory
- **
- ** Description Constructor for transportFactory. This will be private to
- ** support singleton
- **
- ** Parameters none
- **
- ** Returns none
- ****************************************************************************/
- EseTransportFactory();
-
- public:
- /*****************************************************************************
- **
- ** Function getInstance
- **
- ** Description returns the static instance of TransportFactory
- **
- ** Parameters none
- **
- ** Returns TransportFactory instance
- ****************************************************************************/
- static EseTransportFactory& getInstance();
-
- /*****************************************************************************
- **
- ** Function getTransport
- **
- ** Description selects and returns transport channel based on the input
- ** parameter
- **
- ** Parameters Required transport Type
- **
- ** Returns Selected transport channel
- ****************************************************************************/
- spTransport getTransport(transportIntf transportType);
-};
diff --git a/snxxx/libese-spi/p73/pal/phNxpEsePal.cpp b/snxxx/libese-spi/p73/pal/phNxpEsePal.cpp
deleted file mode 100755
index 7e23305..0000000
--- a/snxxx/libese-spi/p73/pal/phNxpEsePal.cpp
+++ /dev/null
@@ -1,314 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2018-2020 NXP
- *
- * 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.
- *
- ******************************************************************************/
-
-/*
- * DAL spi port implementation for linux
- *
- * Project: Trusted ESE Linux
- *
- */
-#define LOG_TAG "NxpEseHal"
-#include <log/log.h>
-
-#include <errno.h>
-#include <fcntl.h>
-#include <stdlib.h>
-#include <sys/ioctl.h>
-#include <unistd.h>
-
-#include <EseTransportFactory.h>
-#include <ese_config.h>
-#include <phEseStatus.h>
-#include <string.h>
-
-/*!
- * \brief Normal mode header length
- */
-#define NORMAL_MODE_HEADER_LEN 3
-/*!
- * \brief Normal mode header offset
- */
-#define NORMAL_MODE_LEN_OFFSET 2
-/*!
- * \brief Start of frame marker
- */
-#define SEND_PACKET_SOF 0x5A
-/*!
- * \brief To enable SPI interface for ESE communication
- */
-#define SPI_ENABLED 1
-
-spTransport gpTransportObj;
-
-/*******************************************************************************
-**
-** Function phPalEse_close
-**
-** Description Closes PN547 device
-**
-** Parameters pDevHandle - device handle
-**
-** Returns None
-**
-*******************************************************************************/
-void phPalEse_close(void* pDevHandle) {
- if (NULL != pDevHandle) {
- gpTransportObj->Close(pDevHandle);
- }
- gpTransportObj = NULL;
- return;
-}
-
-/*******************************************************************************
-**
-** Function phPalEse_open_and_configure
-**
-** Description Open and configure ESE device
-**
-** Parameters pConfig - hardware information
-**
-** Returns ESE status:
-** ESESTATUS_SUCCESS - open_and_configure operation
-*success
-** ESESTATUS_INVALID_DEVICE - device open operation failure
-**
-*******************************************************************************/
-ESESTATUS phPalEse_open_and_configure(pphPalEse_Config_t pConfig) {
- ESESTATUS status = ESESTATUS_FAILED;
- if (ESESTATUS_SUCCESS != phPalEse_ConfigTransport()) return ESESTATUS_FAILED;
- status = gpTransportObj->OpenAndConfigure(pConfig);
- return status;
-}
-
-/*******************************************************************************
-**
-** Function phPalEse_ConfigTransport
-**
-** Description Configure Transport channel based on transport type provided
-** in config file
-**
-** Returns ESESTATUS_SUCCESS If transport channel is configured
-** ESESTATUS_FAILED If transport channel configuration failed
-**
-*******************************************************************************/
-ESESTATUS phPalEse_ConfigTransport() {
- unsigned long transportType = UNKNOWN;
-
- transportType = EseConfig::getUnsigned(NAME_NXP_TRANSPORT, UNKNOWN);
- ALOGD("phPalEse_ConfigTransport transport type %ld", transportType);
- gpTransportObj = transportFactory.getTransport((transportIntf)transportType);
- if (gpTransportObj == nullptr) {
- return ESESTATUS_FAILED;
- }
- return ESESTATUS_SUCCESS;
-}
-
-/*******************************************************************************
-**
-** Function phPalEse_read
-**
-** Description Reads requested number of bytes from pn547 device into given
-*buffer
-**
-** Parameters pDevHandle - valid device handle
-** pBuffer - buffer for read data
-** nNbBytesToRead - number of bytes requested to be read
-**
-** Returns numRead - number of successfully read bytes
-** -1 - read operation failure
-**
-*******************************************************************************/
-int phPalEse_read(void* pDevHandle, uint8_t* pBuffer, int nNbBytesToRead) {
- int ret = -1;
- ret = gpTransportObj->Read(pDevHandle, pBuffer, nNbBytesToRead);
- return ret;
-}
-
-/*******************************************************************************
-**
-** Function phPalEse_write
-**
-** Description Writes requested number of bytes from given buffer into
-*pn547 device
-**
-** Parameters pDevHandle - valid device handle
-** pBuffer - buffer for read data
-** nNbBytesToWrite - number of bytes requested to be written
-**
-** Returns numWrote - number of successfully written bytes
-** -1 - write operation failure
-**
-*******************************************************************************/
-int phPalEse_write(void* pDevHandle, uint8_t* pBuffer, int nNbBytesToWrite) {
- int numWrote = 0;
-
- if (NULL == pDevHandle) {
- return -1;
- }
- numWrote = gpTransportObj->Write(pDevHandle, pBuffer, nNbBytesToWrite);
- return numWrote;
-}
-
-/*******************************************************************************
-**
-** Function phPalEse_ioctl
-**
-** Description Exposed ioctl by p61 spi driver
-**
-** Parameters pDevHandle - valid device handle
-** level - reset level
-**
-** Returns 0 - ioctl operation success
-** -1 - ioctl operation failure
-**
-*******************************************************************************/
-ESESTATUS phPalEse_ioctl(phPalEse_ControlCode_t eControlCode, void* pDevHandle,
- long level) {
- ESESTATUS ret = ESESTATUS_FAILED;
- ALOGD_IF(ese_debug_enabled, "phPalEse_spi_ioctl(), ioctl %x , level %lx",
- eControlCode, level);
- if (GET_CHIP_OS_VERSION() == OS_VERSION_4_0) {
- if (NULL == pDevHandle) {
- return ESESTATUS_IOCTL_FAILED;
- }
- }
- if (pDevHandle == NULL) {
- phPalEse_ConfigTransport();
- }
- ret = gpTransportObj->Ioctl(eControlCode, pDevHandle, level);
- if (pDevHandle == NULL) {
- phPalEse_close(pDevHandle);
- }
-
- return ret;
-}
-
-/*******************************************************************************
-**
-** Function phPalEse_print_packet
-**
-** Description Print packet
-**
-** Returns None
-**
-*******************************************************************************/
-void phPalEse_print_packet(const char* pString, const uint8_t* p_data,
- uint16_t len) {
- uint32_t i;
- char print_buffer[len * 3 + 1];
-
- memset(print_buffer, 0, sizeof(print_buffer));
- for (i = 0; i < len; i++) {
- snprintf(&print_buffer[i * 2], 3, "%02X", p_data[i]);
- }
- if (0 == memcmp(pString, "SEND", 0x04)) {
- ALOGD_IF(ese_debug_enabled, "NxpEseDataX len = %3d > %s", len,
- print_buffer);
- } else if (0 == memcmp(pString, "RECV", 0x04)) {
- ALOGD_IF(ese_debug_enabled, "NxpEseDataR len = %3d > %s", len,
- print_buffer);
- }
-
- return;
-}
-
-/*******************************************************************************
-**
-** Function phPalEse_sleep
-**
-** Description This function suspends execution of the calling thread for
-** (at least) usec microseconds
-**
-** Returns None
-**
-*******************************************************************************/
-void phPalEse_sleep(long usec) {
- usleep(usec);
- return;
-}
-
-/*******************************************************************************
-**
-** Function phPalEse_memset
-**
-** Description
-**
-** Returns None
-**
-*******************************************************************************/
-
-void* phPalEse_memset(void* buff, int val, size_t len) {
- return memset(buff, val, len);
-}
-
-/*******************************************************************************
-**
-** Function phPalEse_memcpy
-**
-** Description
-**
-** Returns None
-**
-*******************************************************************************/
-
-void* phPalEse_memcpy(void* dest, const void* src, size_t len) {
- return memcpy(dest, src, len);
-}
-
-/*******************************************************************************
-**
-** Function phPalEse_memalloc
-**
-** Description
-**
-** Returns None
-**
-*******************************************************************************/
-
-void* phPalEse_memalloc(uint32_t size) { return malloc(size); }
-
-/*******************************************************************************
-**
-** Function phPalEse_calloc
-**
-** Description
-**
-** Returns None
-**
-*******************************************************************************/
-
-void* phPalEse_calloc(size_t datatype, size_t size) {
- return calloc(datatype, size);
-}
-
-/*******************************************************************************
-**
-** Function phPalEse_free
-**
-** Description
-**
-** Returns None
-**
-*******************************************************************************/
-void phPalEse_free(void* ptr) {
- if (ptr != NULL) {
- free(ptr);
- ptr = NULL;
- }
- return;
-}
diff --git a/snxxx/libese-spi/p73/pal/phNxpEsePal.h b/snxxx/libese-spi/p73/pal/phNxpEsePal.h
deleted file mode 100644
index d6d06cf..0000000
--- a/snxxx/libese-spi/p73/pal/phNxpEsePal.h
+++ /dev/null
@@ -1,247 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2018-2021 NXP
- *
- * 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.
- *
- ******************************************************************************/
-
-/**
- * \addtogroup eSe_PAL
- * \brief PAL implementation
- * @{ */
-
-#ifndef _PHNXPESE_PAL_H
-#define _PHNXPESE_PAL_H
-
-/* Basic type definitions */
-#include <errno.h>
-#include <phEseStatus.h>
-#include <phNxpEseFeatures.h>
-#include <stdint.h>
-/*!
- * \brief Value indicates to reset device
- */
-#define PH_PALESE_RESETDEVICE (0x00008001)
-
-/*!
- * \ingroup eSe_PAL
- *
- * \brief Enum definition contains supported ioctl control codes.
- *
- * phPalEse_IoCtl
- */
-typedef enum {
- phPalEse_e_Invalid = 0, /*!< Invalid control code */
- phPalEse_e_ResetDevice = PH_PALESE_RESETDEVICE, /*!< Reset the device */
- phPalEse_e_EnableLog, /*!< Enable the spi driver logs */
- phPalEse_e_EnablePollMode, /*!< Enable the polling for SPI */
- phPalEse_e_GetEseAccess, /*!< get the bus access in specified timeout */
- phPalEse_e_ChipRst, /*!< eSE Chip reset using ISO RST pin*/
- phPalEse_e_EnableThroughputMeasurement, /*!< Enable throughput measurement */
- phPalEse_e_SetPowerScheme, /*!< Set power scheme */
- phPalEse_e_GetSPMStatus, /*!< Get SPM(power mgt) status */
- phPalEse_e_DisablePwrCntrl,
- phPalEse_e_SetJcopDwnldState, /*!< Set Jcop Download state */
- phPalEse_e_SetClientUpdateState, /*!< Set Jcop Download state */
- phPalEse_e_SetSecureMode, /*!< Set the Trusted SE Mode */
- phPalEse_e_ResetProtection,
-} phPalEse_ControlCode_t; /*!< Control code for IOCTL call */
-
-/*!
- * \ingroup eSe_PAL
- *
- * \brief PAL Configuration exposed to upper layer.
- */
-typedef struct phPalEse_Config {
- int8_t* pDevName;
- /*!< Port name connected to ESE
- *
- * Platform specific canonical device name to which ESE is connected.
- *
- * e.g. On Linux based systems this would be /dev/p73
- */
-
- uint32_t dwBaudRate;
- /*!< Communication speed between DH and ESE
- *
- * This is the baudrate of the bus for communication between DH and ESE
- */
-
- void* pDevHandle;
- /*!< Device handle output */
-} phPalEse_Config_t, *pphPalEse_Config_t; /* pointer to phPalEse_Config_t */
-
-/* Function declarations */
-/**
- * \ingroup eSe_PAL
- * \brief This function is used to close the ESE device
- *
- * \retval None
- *
- */
-void phPalEse_close(void* pDevHandle);
-
-/**
- * \ingroup eSe_PAL
- * \brief Open and configure ESE device
- *
- * \param[in] pConfig: Config to open the device
- *
- * \retval ESESTATUS On Success ESESTATUS_SUCCESS else proper error code
- *
- */
-ESESTATUS phPalEse_open_and_configure(pphPalEse_Config_t pConfig);
-
-/**
- * \ingroup eSe_PAL
- * \brief ConfigTransport to get SPI terminal
- *
- * \retval ESESTATUS On Success ESESTATUS_SUCCESS else proper error code
- *
- */
-ESESTATUS phPalEse_ConfigTransport();
-
-/**
- * \ingroup eSe_PAL
- * \brief Reads requested number of bytes from ESE into given buffer
- *
- * \param[in] pDevHandle - valid device handle
- **\param[in] pBuffer - buffer for read data
- **\param[in] nNbBytesToRead - number of bytes requested to be read
- *
- * \retval numRead - number of successfully read bytes.
- * \retval -1 - read operation failure
- *
- */
-int phPalEse_read(void* pDevHandle, uint8_t* pBuffer, int nNbBytesToRead);
-
-/**
- * \ingroup eSe_PAL
- * \brief Writes requested number of bytes from given buffer into pn547 device
- *
- * \param[in] pDevHandle - valid device handle
- * \param[in] pBuffer - buffer to write
- * \param[in] nNbBytesToWrite - number of bytes to write
- *
- * \retval numWrote - number of successfully written bytes
- * \retval -1 - write operation failure
- *
- */
-int phPalEse_write(void* pDevHandle, uint8_t* pBuffer, int nNbBytesToWrite);
-
-/**
- * \ingroup eSe_PAL
- * \brief Exposed ioctl by ESE driver
- *
- * \param[in] eControlCode - phPalEse_ControlCode_t for the respective
- *configs
- * \param[in] pDevHandle - valid device handle
- * \param[in] level - reset level
- *
- * \retval 0 - ioctl operation success
- * \retval -1 - ioctl operation failure
- *
- */
-ESESTATUS phPalEse_ioctl(phPalEse_ControlCode_t eControlCode, void* pDevHandle,
- long level);
-
-/**
- * \ingroup eSe_PAL
- * \brief Print packet data
- *
- * \param[in] pString - String to be printed
- * \param[in] p_data - data to be printed
- * \param[in] len - Length of data to be printed
- *
- * \retval void
- *
- */
-void phPalEse_print_packet(const char* pString, const uint8_t* p_data,
- uint16_t len);
-
-/**
- * \ingroup eSe_PAL
- * \brief This function suspends execution of the calling thread for
- * (at least) usec microseconds
- *
- * \param[in] usec - number of micro seconds to sleep
- *
- * \retval void
- *
- */
-void phPalEse_sleep(long usec);
-
-/**
- * \ingroup eSe_PAL
- * \brief This function updates destination buffer with val
- * data in len size
- *
- * \param[in] buff - Array to be updated
- * \param[in] val - value to be updated
- * \param[in] len - length of array to be updated
- *
- * \retval void
- *
- */
-void* phPalEse_memset(void* buff, int val, size_t len);
-
-/**
- * \ingroup eSe_PAL
- * \brief This function copies source buffer to destination buffer
- * data in len size
- *
- * \param[in] dest - Destination array to be updated
- * \param[in] src - Source array to be updated
- * \param[in] len - length of array to be updated
- *
- * \retval void
- *
- */
-void* phPalEse_memcpy(void* dest, const void* src, size_t len);
-
-/**
- * \ingroup eSe_PAL
- * \brief This is utility function for runtime heap memory allocation
- *
- * \param[in] size - number of bytes to be allocated
- *
- * \retval void
- *
- */
-void* phPalEse_memalloc(uint32_t size);
-
-/**
- * \ingroup eSe_PAL
- * \brief This is utility function for runtime heap memory allocation
- *
- * \param[in] dataType - type of data
- * \param[in] size - number of bytes to be allocated
- * \retval void
- *
- */
-void* phPalEse_calloc(size_t dataType, size_t size);
-
-/**
- * \ingroup eSe_PAL
- * \brief This is utility function for freeeing heap memory allocated
- *
- * \param[in] ptr - Address pointer to previous allocation
- *
- * \retval void
- *
- */
-void phPalEse_free(void* ptr);
-
-/** @} */
-#endif /* _PHNXPESE_PAL_H */
diff --git a/snxxx/libese-spi/p73/pal/spi/EseSpiTransport.cpp b/snxxx/libese-spi/p73/pal/spi/EseSpiTransport.cpp
deleted file mode 100644
index 859298e..0000000
--- a/snxxx/libese-spi/p73/pal/spi/EseSpiTransport.cpp
+++ /dev/null
@@ -1,503 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2018-2020 NXP
- *
- * 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.
- *
- ******************************************************************************/
-
-/*
- * DAL spi port implementation for linux
- *
- * Project: Trusted ESE Linux
- *
- */
-
-#include "EseSpiTransport.h"
-
-#define LOG_TAG "NxpEseHal"
-#include <log/log.h>
-
-#include <errno.h>
-#include <fcntl.h>
-#include <stdlib.h>
-#include <sys/ioctl.h>
-#include <unistd.h>
-
-#include <ese_config.h>
-#include <hardware/nfc.h>
-#include <phEseStatus.h>
-#include <phNxpEsePal.h>
-#include <string.h>
-#include "NfcAdaptation.h"
-#include "hal_nxpese.h"
-#include "phNxpEse_Api.h"
-
-#define MAX_RETRY_CNT 10
-#define HAL_NFC_SPI_DWP_SYNC 21
-
-extern int omapi_status;
-
-static int rf_status;
-#if (NFC_NXP_ESE_VER == JCOP_VER_5_x)
-eseIoctlData_t eseioctldata;
-#endif
-// Default max retry count for SPI CLT write blocked in secs
-static unsigned long int gsMaxSpiWriteRetryCnt = 10;
-#if (NFC_NXP_ESE_VER == JCOP_VER_4_0)
-static ESESTATUS phNxpEse_spiIoctl_legacy(uint64_t ioctlType, void* p_data);
-#endif
-
-/*******************************************************************************
-**
-** Function phPalEse_spi_close
-**
-** Description Closes PN547 device
-**
-** Parameters pDevHandle - device handle
-**
-** Returns None
-**
-*******************************************************************************/
-void EseSpiTransport::Close(void* pDevHandle) {
- if (NULL != pDevHandle) {
- close((intptr_t)pDevHandle);
- }
- return;
-}
-
-/*******************************************************************************
-**
-** Function phNxpEse_spiIoctl
-**
-** Description Perform cross HAL IOCTL functionality
-**
-** Parameters ioctlType, input data
-**
-** Returns SUCCESS/FAIL
-**
-*******************************************************************************/
-ESESTATUS phNxpEse_spiIoctl(uint64_t ioctlType, void* p_data) {
- ESESTATUS status = ESESTATUS_SUCCESS;
- if (!p_data) {
- ALOGE("halimpl phNxpEse_spiIoctl p_data is null ioctltyp: %ld",
- (long)ioctlType);
- return ESESTATUS_FAILED;
- }
-#if (NFC_NXP_ESE_VER == JCOP_VER_5_x)
- ese_nxp_IoctlInOutData_t* inpOutData = (ese_nxp_IoctlInOutData_t*)p_data;
- switch (ioctlType) {
- case HAL_ESE_IOCTL_RF_STATUS_UPDATE:
- rf_status = inpOutData->inp.data.nxpCmd.p_cmd[0];
- if (rf_status == 1) {
- ALOGD_IF(
- ese_debug_enabled,
- "******************RF IS ON*************************************");
- } else {
- ALOGD_IF(
- ese_debug_enabled,
- "******************RF IS OFF*************************************");
- }
- break;
- case HAL_ESE_IOCTL_NFC_JCOP_DWNLD:
-
- eseioctldata.nfc_jcop_download_state =
- inpOutData->inp.data.nxpCmd.p_cmd[0];
- if (eseioctldata.nfc_jcop_download_state == 1) {
- ALOGD_IF(ese_debug_enabled,
- "******************JCOP Download "
- "started*************************************");
- } else {
- ALOGD_IF(ese_debug_enabled,
- "******************JCOP Download "
- "stopped*************************************");
- }
- break;
- default:
- ALOGD_IF(ese_debug_enabled, "Invalid IOCTL type");
- break;
- }
-#endif
-#if (NFC_NXP_ESE_VER == JCOP_VER_4_0)
- status = phNxpEse_spiIoctl_legacy(ioctlType, p_data);
-#endif
- return status;
-}
-#if (NFC_NXP_ESE_VER == JCOP_VER_4_0)
-/*******************************************************************************
-**
-** Function phNxpEse_spiIoctl_legacy
-**
-** Description Perform cross HAL IOCTL functionality
-**
-** Parameters ioctlType, input data
-**
-** Returns SUCCESS/FAIL
-**
-*******************************************************************************/
-static ESESTATUS phNxpEse_spiIoctl_legacy(uint64_t ioctlType, void* p_data) {
- ese_nxp_IoctlInOutData_t* inpOutData = (ese_nxp_IoctlInOutData_t*)p_data;
- switch (ioctlType) {
- case HAL_ESE_IOCTL_RF_STATUS_UPDATE:
-
- rf_status = inpOutData->inp.data.nxpCmd.p_cmd[0];
- if (rf_status == 1) {
- ALOGD_IF(
- ese_debug_enabled,
- "******************RF IS ON*************************************");
- } else {
- ALOGD_IF(
- ese_debug_enabled,
- "******************RF IS OFF*************************************");
- }
- break;
- default:
- ALOGD_IF(ese_debug_enabled, "Invalid IOCTL type");
- break;
- }
- return ESESTATUS_SUCCESS;
-}
-#endif
-
-/*******************************************************************************
-**
-** Function OpenAndConfigure
-**
-** Description Open and configure pn547 device
-**
-** Parameters pConfig - hardware information
-** pLinkHandle - device handle
-**
-** Returns ESE status:
-** ESESTATUS_SUCCESS - open_and_configure operation
-*success
-** ESESTATUS_INVALID_DEVICE - device open operation failure
-**
-*******************************************************************************/
-ESESTATUS EseSpiTransport::OpenAndConfigure(pphPalEse_Config_t pConfig) {
- int nHandle;
- int retryCnt = 0;
- ALOGD("NxpEse EseSpiTransport::OpenAndConfigure 1");
- if (EseConfig::hasKey(NAME_NXP_SOF_WRITE)) {
- mConfigSofWrite = EseConfig::getUnsigned(NAME_NXP_SOF_WRITE);
- ALOGD_IF(ese_debug_enabled, "NXP_SOF_WRITE value from config file = %ld",
- mConfigSofWrite);
- }
- if (EseConfig::hasKey(NAME_NXP_SPI_WRITE_TIMEOUT)) {
- mConfigSpiWriteTimeout = EseConfig::getUnsigned(NAME_NXP_SPI_WRITE_TIMEOUT);
- ALOGD_IF(ese_debug_enabled,
- "NXP_SPI_WRITE_TIMEOUT value from config file = %ld",
- mConfigSpiWriteTimeout);
- }
- /* Read eSE cold reset interface from ese config file */
- if (EseConfig::hasKey(NAME_NXP_P61_COLD_RESET_INTERFACE)) {
- mConfigColdResetIntf =
- EseConfig::getUnsigned(NAME_NXP_P61_COLD_RESET_INTERFACE);
- ALOGD_IF(ese_debug_enabled,
- "mConfigColdResetIntf value from config file = %ld",
- mConfigColdResetIntf);
- } else {
- mConfigColdResetIntf = 0x01; /* Default interface is NFC HAL */
- ALOGD_IF(ese_debug_enabled, "mConfigColdResetIntf: Default value ");
- }
- ALOGD_IF(ese_debug_enabled, "Opening port=%s\n", pConfig->pDevName);
-/* open port */
-retry:
- nHandle = open((char const*)pConfig->pDevName, O_RDWR);
- if (nHandle < 0) {
- ALOGE("%s : failed errno = 0x%x, retval %x", __FUNCTION__, errno, nHandle);
-
- if ((errno == -EBUSY) || (errno == EBUSY)) {
- if (GET_CHIP_OS_VERSION() != OS_VERSION_4_0) {
- phPalEse_sleep(100 * 1000); // 100ms delay
- return ESESTATUS_DRIVER_BUSY;
- } else {
- retryCnt++;
- ALOGE("Retry open eSE driver, retry cnt : %d", retryCnt);
- if (retryCnt < MAX_RETRY_CNT) {
- phPalEse_sleep(1000000);
- goto retry;
- }
- }
- }
- ALOGE("_spi_open() Failed: retval %x", nHandle);
- pConfig->pDevHandle = NULL;
- return ESESTATUS_INVALID_DEVICE;
- }
- ALOGD_IF(ese_debug_enabled, "eSE driver opened :: fd = [%d]", nHandle);
- pConfig->pDevHandle = (void*)((intptr_t)nHandle);
- return ESESTATUS_SUCCESS;
-}
-
-/*******************************************************************************
-**
-** Function Read
-**
-** Description Reads requested number of bytes from pn547 device into given
-*buffer
-**
-** Parameters pDevHandle - valid device handle
-** pBuffer - buffer for read data
-** nNbBytesToRead - number of bytes requested to be read
-**
-** Returns numRead - number of successfully read bytes
-** -1 - read operation failure
-**
-*******************************************************************************/
-int EseSpiTransport::Read(void* pDevHandle, uint8_t* pBuffer,
- int nNbBytesToRead) {
- int ret = -1;
- ret = read((intptr_t)pDevHandle, (void*)pBuffer, (nNbBytesToRead));
- return ret;
-}
-
-/*******************************************************************************
-**
-** Function Write
-**
-** Description Writes requested number of bytes from given buffer into
-*pn547 device
-**
-** Parameters pDevHandle - valid device handle
-** pBuffer - buffer for read data
-** nNbBytesToWrite - number of bytes requested to be written
-**
-** Returns numWrote - number of successfully written bytes
-** -1 - write operation failure
-**
-*******************************************************************************/
-int EseSpiTransport::Write(void* pDevHandle, uint8_t* pBuffer,
- int nNbBytesToWrite) {
- int ret = -1;
- int numWrote = 0;
- unsigned long int retryCount = 0;
- if (NULL == pDevHandle) {
- ALOGE("phPalEse_spi_write: received pDevHandle=NULL");
- return -1;
- }
- if (GET_CHIP_OS_VERSION() == OS_VERSION_4_0) {
- if (mConfigSofWrite == 1) {
- /* Appending SOF for SPI write */
- pBuffer[0] = SEND_PACKET_SOF;
- } else {
- /* Do Nothing */
- }
- }
- ALOGE("NXP_SPI_WRITE_TIMEOUT value is... : %ld secs", mConfigSpiWriteTimeout);
- if (mConfigSpiWriteTimeout > 0) {
- gsMaxSpiWriteRetryCnt = mConfigSpiWriteTimeout;
- ALOGE(" spi_write_timeout Wait time ... : %ld", gsMaxSpiWriteRetryCnt);
- } else {
- /* Do Nothing */
- }
-
- while (numWrote < nNbBytesToWrite) {
- // usleep(5000);
- if (rf_status == 0) {
- ret = write((intptr_t)pDevHandle, pBuffer + numWrote,
- nNbBytesToWrite - numWrote);
- } else {
- ret = -1;
- }
- if (ret > 0) {
- numWrote += ret;
- } else if (ret == 0) {
- ALOGE("_spi_write() EOF");
- return -1;
- } else {
- ALOGE("_spi_write() errno : %x", errno);
- ALOGD_IF(ese_debug_enabled, "rf_status value is %d", rf_status);
- if ((errno == EINTR || errno == EAGAIN || rf_status == 1) &&
- (retryCount < gsMaxSpiWriteRetryCnt)) {
- /*Configure retry count or timeout here,now its configured for 2*10
- * secs*/
- if (retryCount > gsMaxSpiWriteRetryCnt) {
- ret = -1;
- break;
- }
-
- retryCount++;
- /* 5ms delay to give ESE wake up delay */
- phPalEse_sleep(1000 * (GET_WAKE_UP_DELAY()));
- ALOGE("_spi_write() failed. Going to retry, counter:%ld !", retryCount);
- continue;
- }
- return -1;
- }
- }
- return numWrote;
-}
-
-/*******************************************************************************
-**
-** Function Ioctl
-**
-** Description Exposed ioctl by p61 spi driver
-**
-** Parameters pDevHandle - valid device handle
-** level - reset level
-**
-** Returns 0 - ioctl operation success
-** -1 - ioctl operation failure
-**
-*******************************************************************************/
-ESESTATUS EseSpiTransport::Ioctl(phPalEse_ControlCode_t eControlCode,
- void* pDevHandle, long level) {
- ESESTATUS ret = ESESTATUS_IOCTL_FAILED;
- int retioctl = 0x00;
-#if (NFC_NXP_ESE_VER == JCOP_VER_5_x)
- ese_nxp_IoctlInOutData_t inpOutData;
- inpOutData.inp.level = level;
- NfcAdaptation& pNfcAdapt = NfcAdaptation::GetInstance();
-#endif
- ALOGD_IF(ese_debug_enabled, "phPalEse_spi_ioctl(), ioctl %x , level %lx",
- eControlCode, level);
- if (NULL == pDevHandle) {
- if (GET_CHIP_OS_VERSION() == OS_VERSION_4_0) {
- return ESESTATUS_IOCTL_FAILED;
- }
- }
- switch (eControlCode) {
- case phPalEse_e_ResetDevice:
- if (GET_CHIP_OS_VERSION() != OS_VERSION_4_0) {
- ret = ESESTATUS_SUCCESS;
- } else {
- ret = (ESESTATUS)ioctl((intptr_t)pDevHandle, P61_SET_PWR, level);
- }
- break;
-
- case phPalEse_e_EnableLog:
- if (GET_CHIP_OS_VERSION() != OS_VERSION_4_0) {
- ret = ESESTATUS_SUCCESS;
- } else {
- ret = (ESESTATUS)ioctl((intptr_t)pDevHandle, P61_SET_DBG, level);
- }
- break;
-
- case phPalEse_e_EnablePollMode:
- if (GET_CHIP_OS_VERSION() != OS_VERSION_4_0) {
- ret = ESESTATUS_SUCCESS;
- } else {
- ret = (ESESTATUS)ioctl((intptr_t)pDevHandle, P61_SET_POLL, level);
- }
- break;
- case phPalEse_e_SetSecureMode:
- ret =
- (ESESTATUS)ioctl((intptr_t)pDevHandle, ESE_SET_TRUSTED_ACCESS, level);
- if (0x00 <= ret) {
- ret = ESESTATUS_SUCCESS;
- }
- break;
- case phPalEse_e_ChipRst:
- if (GET_CHIP_OS_VERSION() != OS_VERSION_4_0) {
- if (level == 5) { // SPI driver communication part
- if (!mConfigColdResetIntf) { /* Call the driver IOCTL */
- retioctl =
- ioctl((intptr_t)pDevHandle, ESE_PERFORM_COLD_RESET, level);
- if (0x00 <= retioctl) {
- ret = ESESTATUS_SUCCESS;
- }
- } else {
-#if (NFC_NXP_ESE_VER == JCOP_VER_5_x)
- // Nfc Driver communication part
- ret = pNfcAdapt.resetEse(level);
-#else
- ret = ESESTATUS_SUCCESS;
-#endif
- }
- } else {
- ret = ESESTATUS_SUCCESS;
- }
- } else {
- ret = (ESESTATUS)ioctl((intptr_t)pDevHandle, P61_SET_SPM_PWR, level);
- }
- break;
- case phPalEse_e_ResetProtection:
- if (GET_CHIP_OS_VERSION() != OS_VERSION_4_0) {
- retioctl = ioctl((intptr_t)pDevHandle, PERFORM_RESET_PROTECTION, level);
- if (0x00 <= retioctl) {
- ret = ESESTATUS_SUCCESS;
- } else {
- ALOGE("phPalEse_e_ResetProtection ioctl failed status :%x !",
- retioctl);
- }
- }
- break;
- case phPalEse_e_EnableThroughputMeasurement:
- if (GET_CHIP_OS_VERSION() != OS_VERSION_4_0) {
- ret = ESESTATUS_SUCCESS;
- } else {
- ret = (ESESTATUS)ioctl((intptr_t)pDevHandle, P61_SET_THROUGHPUT, level);
- }
- break;
-
- case phPalEse_e_SetPowerScheme:
- if (GET_CHIP_OS_VERSION() != OS_VERSION_4_0) {
- ret = ESESTATUS_SUCCESS;
- } else {
- ret =
- (ESESTATUS)ioctl((intptr_t)pDevHandle, P61_SET_POWER_SCHEME, level);
- }
- break;
-
- case phPalEse_e_GetSPMStatus:
- if (GET_CHIP_OS_VERSION() != OS_VERSION_4_0) {
- ret = ESESTATUS_SUCCESS;
- } else {
- ret = (ESESTATUS)ioctl((intptr_t)pDevHandle, P61_GET_SPM_STATUS, level);
- }
- break;
-
- case phPalEse_e_GetEseAccess:
- if (GET_CHIP_OS_VERSION() != OS_VERSION_4_0) {
- ret = ESESTATUS_SUCCESS;
- } else {
- ret = (ESESTATUS)ioctl((intptr_t)pDevHandle, P61_GET_ESE_ACCESS, level);
- }
- break;
- case phPalEse_e_SetJcopDwnldState:
- if (GET_CHIP_OS_VERSION() != OS_VERSION_4_0) {
- ret = ESESTATUS_SUCCESS;
- } else {
- ret =
- (ESESTATUS)ioctl((intptr_t)pDevHandle, P61_SET_DWNLD_STATUS, level);
- }
- break;
-#if (NFC_NXP_ESE_VER == JCOP_VER_5_x)
- case phPalEse_e_SetClientUpdateState: {
- pNfcAdapt.Initialize();
- ALOGD_IF(ese_debug_enabled,
- "phPalEse_spi_ioctl state = phPalEse_e_SetJcopDwnldState");
- ese_nxp_IoctlInOutData_t inpOutData;
- memset(&inpOutData, 0x00, sizeof(ese_nxp_IoctlInOutData_t));
- inpOutData.inp.data.nxpCmd.cmd_len = 1;
- inpOutData.inp.data_source = 1;
- uint8_t data = (uint8_t)level;
- memcpy(inpOutData.inp.data.nxpCmd.p_cmd, &data, sizeof(data));
- ALOGD_IF(ese_debug_enabled, "Before phPalEse_e_SetClientUpdateState");
-
- ret = pNfcAdapt.setEseUpdateState(&inpOutData);
- ALOGD_IF(ese_debug_enabled, "After phPalEse_e_SetClientUpdateState");
- } break;
-#endif
- case phPalEse_e_DisablePwrCntrl:
- ret = ESESTATUS_SUCCESS;
- break;
- default:
- ret = ESESTATUS_IOCTL_FAILED;
- break;
- }
- ALOGD_IF(ese_debug_enabled, "Exit phPalEse_spi_ioctl : ret = %d errno = %d",
- ret, errno);
- return (ESESTATUS)ret;
-}
diff --git a/snxxx/libese-spi/p73/pal/spi/EseSpiTransport.h b/snxxx/libese-spi/p73/pal/spi/EseSpiTransport.h
deleted file mode 100644
index 2d252c2..0000000
--- a/snxxx/libese-spi/p73/pal/spi/EseSpiTransport.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2020 NXP
- *
- * 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 "EseTransport.h"
-
-class EseSpiTransport : public EseTransport {
- public:
- void Close(void* pDevHandle);
- ESESTATUS OpenAndConfigure(pphPalEse_Config_t pConfig);
- int Read(void* pDevHandle, uint8_t* pBuffer, int nNbBytesToRead);
- int Write(void* pDevHandle, uint8_t* pBuffer, int nNbBytesToWrite);
- ESESTATUS Ioctl(phPalEse_ControlCode_t eControlCode, void* pDevHandle,
- long level);
-
- private:
- unsigned long int mConfigSofWrite, mConfigSpiWriteTimeout,
- mConfigColdResetIntf;
-};
\ No newline at end of file
diff --git a/snxxx/libese-spi/p73/spm/phNxpEse_Spm.cpp b/snxxx/libese-spi/p73/spm/phNxpEse_Spm.cpp
deleted file mode 100755
index 836c24b..0000000
--- a/snxxx/libese-spi/p73/spm/phNxpEse_Spm.cpp
+++ /dev/null
@@ -1,476 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2018-2019 NXP
- *
- * 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.
- *
- ******************************************************************************/
-#define LOG_TAG "NxpEseHal"
-#include <log/log.h>
-
-#include <errno.h>
-#include <fcntl.h>
-#include <phNxpEsePal.h>
-#include <phNxpEse_Internal.h>
-#include <sys/ioctl.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <unistd.h>
-#include "phNxpEseFeatures.h"
-#include "phNxpEse_Spm.h"
-
-/*********************** Global Variables *************************************/
-
-static void* pEseDeviceHandle = NULL;
-#define MAX_ESE_ACCESS_TIME_OUT_MS 2000 /*2 seconds*/
-
-/**
- * \addtogroup SPI_Power_Management
- *
- * @{ */
-/******************************************************************************
-\section Introduction Introduction
-
- * This module provide power request to Pn54x nfc-i2c driver, it cheks if
- * wired access is already granted. It should have access to pn54x drive.
- * Below are the apis provided by the SPM module.
- ******************************************************************************/
-/******************************************************************************
- * Function phNxpEse_SPM_Init
- *
- * Description This function opens the nfc i2c driver to manage power
- * and synchronization for ese secure element.
- *
- * Returns On Success ESESTATUS_SUCCESS else proper error code
- *
- ******************************************************************************/
-ESESTATUS phNxpEse_SPM_Init(void* pDevHandle) {
- ESESTATUS status = ESESTATUS_SUCCESS;
- pEseDeviceHandle = pDevHandle;
- if (NULL == pEseDeviceHandle) {
- ALOGE("%s : failed, device handle is null", __FUNCTION__);
- status = ESESTATUS_FAILED;
- }
- ALOGD_IF(ese_debug_enabled, "%s : exit status = %d", __FUNCTION__, status);
-
- return status;
-}
-
-/******************************************************************************
- * Function phNxpEse_SPM_DeInit
- *
- * Description This function closes the nfc i2c driver node.
- *
- * Returns Always returns ESESTATUS_SUCCESS
- *
- ******************************************************************************/
-ESESTATUS phNxpEse_SPM_DeInit(void) {
- pEseDeviceHandle = NULL;
- return ESESTATUS_SUCCESS;
-}
-
-/******************************************************************************
- * Function phNxpEse_SPM_ConfigPwr
- *
- * Description This function request to the nfc i2c driver
- * to enable/disable power to ese. This api should be called
- *before
- * sending any apdu to ese/once apdu exchange is done.
- *
- * Returns On Success ESESTATUS_SUCCESS else proper error code
- *
- ******************************************************************************/
-ESESTATUS phNxpEse_SPM_ConfigPwr(spm_power_t arg) {
- int32_t ret = -1;
- ESESTATUS wSpmStatus = ESESTATUS_SUCCESS;
- spm_state_t current_spm_state = SPM_STATE_INVALID;
- if (GET_CHIP_OS_VERSION() > OS_VERSION_4_0) {
- /*None of the IOCTLs valid except SPM_RECOVERY_RESET*/
- if (arg != SPM_RECOVERY_RESET) {
- return ESESTATUS_SUCCESS;
- }
- }
- ret = phPalEse_ioctl(phPalEse_e_ChipRst, pEseDeviceHandle, arg);
- switch (arg) {
- case SPM_POWER_DISABLE: {
- if (ret < 0) {
- ALOGE("%s : failed errno = 0x%x", __FUNCTION__, errno);
- wSpmStatus = ESESTATUS_FAILED;
- } else {
- if (phNxpEse_SPM_RelAccess() != ESESTATUS_SUCCESS) {
- ALOGE(" %s phNxpEse_SPM_RelAccess : failed \n", __FUNCTION__);
- }
- }
- } break;
- case SPM_POWER_ENABLE: {
- if (ret < 0) {
- ALOGE("%s : failed errno = 0x%x", __FUNCTION__, errno);
- if (errno == -EBUSY) {
- wSpmStatus = phNxpEse_SPM_GetState(¤t_spm_state);
- if (wSpmStatus != ESESTATUS_SUCCESS) {
- ALOGE(" %s : phNxpEse_SPM_GetPwrState Failed", __FUNCTION__);
- if (phNxpEse_SPM_RelAccess() != ESESTATUS_SUCCESS) {
- ALOGE(" %s phNxpEse_SPM_RelAccess : failed \n", __FUNCTION__);
- }
- return wSpmStatus;
- } else {
- if (current_spm_state & SPM_STATE_DWNLD) {
- wSpmStatus = ESESTATUS_DWNLD_BUSY;
- } else {
- wSpmStatus = ESESTATUS_BUSY;
- }
- }
- } else {
- wSpmStatus = ESESTATUS_FAILED;
- }
- if (wSpmStatus != ESESTATUS_SUCCESS) {
- if (phNxpEse_SPM_RelAccess() != ESESTATUS_SUCCESS) {
- ALOGE(" %s phNxpEse_SPM_RelAccess : failed \n", __FUNCTION__);
- }
- }
- }
- } break;
- case SPM_POWER_RESET: {
- if (ret < 0) {
- ALOGE("%s : failed errno = 0x%x", __FUNCTION__, errno);
- if (errno == -EBUSY) {
- wSpmStatus = phNxpEse_SPM_GetState(¤t_spm_state);
- if (wSpmStatus != ESESTATUS_SUCCESS) {
- ALOGE(" %s : phNxpEse_SPM_GetPwrState Failed", __FUNCTION__);
- return wSpmStatus;
- } else {
- if (current_spm_state & SPM_STATE_DWNLD) {
- wSpmStatus = ESESTATUS_DWNLD_BUSY;
- } else {
- wSpmStatus = ESESTATUS_BUSY;
- }
- }
- } else {
- wSpmStatus = ESESTATUS_FAILED;
- }
- }
- } break;
- case SPM_POWER_PRIO_ENABLE: {
- if (ret < 0) {
- ALOGE("%s : failed errno = 0x%x", __FUNCTION__, errno);
- if (errno == -EBUSY) {
- wSpmStatus = phNxpEse_SPM_GetState(¤t_spm_state);
- if (wSpmStatus != ESESTATUS_SUCCESS) {
- ALOGE(" %s : phNxpEse_SPM_GetPwrState Failed", __FUNCTION__);
- return wSpmStatus;
- } else {
- if (current_spm_state & SPM_STATE_DWNLD) {
- wSpmStatus = ESESTATUS_DWNLD_BUSY;
- } else {
- wSpmStatus = ESESTATUS_BUSY;
- }
- }
-
- } else {
- wSpmStatus = ESESTATUS_FAILED;
- }
- }
- } break;
- case SPM_POWER_PRIO_DISABLE: {
- if (ret < 0) {
- ALOGE("%s : failed errno = 0x%x", __FUNCTION__, errno);
- wSpmStatus = ESESTATUS_FAILED;
- }
- } break;
- case SPM_RECOVERY_RESET: {
- } break;
- }
- return wSpmStatus;
-}
-
-/******************************************************************************
- * Function phNxpEse_SPM_EnablePwr
- *
- * Description This function request to the nfc i2c driver
- * to enable power to ese. This api should be called before
- * sending any apdu to ese.
- *
- * Returns On Success ESESTATUS_SUCCESS else proper error code
- *
- ******************************************************************************/
-ESESTATUS phNxpEse_SPM_EnablePwr(void) {
- int32_t ret = -1;
- ESESTATUS wSpmStatus = ESESTATUS_SUCCESS;
- spm_state_t current_spm_state = SPM_STATE_INVALID;
- ALOGD_IF(ese_debug_enabled, "%s : phNxpEse_SPM_EnablePwr is set to = 0x%d",
- __FUNCTION__, 0);
- ret = phPalEse_ioctl(phPalEse_e_ChipRst, pEseDeviceHandle, 0);
- if (ret < 0) {
- ALOGE("%s : failed errno = 0x%x", __FUNCTION__, errno);
- if (errno == -EBUSY) {
- wSpmStatus = phNxpEse_SPM_GetState(¤t_spm_state);
- if (wSpmStatus != ESESTATUS_SUCCESS) {
- ALOGE(" %s : phNxpEse_SPM_GetPwrState Failed", __FUNCTION__);
- return wSpmStatus;
- } else {
- if (current_spm_state == SPM_STATE_DWNLD) {
- wSpmStatus = ESESTATUS_DWNLD_BUSY;
- } else {
- wSpmStatus = ESESTATUS_BUSY;
- }
- }
-
- } else {
- wSpmStatus = ESESTATUS_FAILED;
- }
- }
-
- return wSpmStatus;
-}
-
-/******************************************************************************
- * Function phNxpEse_SPM_DisablePwr
- *
- * Description This function request to the nfc i2c driver
- * to disable power to ese. This api should be called
- * once apdu exchange is done.
- *
- * Returns On Success ESESTATUS_SUCCESS else proper error code
- *
- ******************************************************************************/
-ESESTATUS phNxpEse_SPM_DisablePwr(void) {
- int32_t ret = -1;
- ESESTATUS status = ESESTATUS_SUCCESS;
- ALOGD_IF(ese_debug_enabled, "%s : phNxpEse_SPM_DisablePwr is set to = 0x%d",
- __FUNCTION__, 1);
- ret = phPalEse_ioctl(phPalEse_e_ChipRst, pEseDeviceHandle, 1);
- if (ret < 0) {
- ALOGE("%s : failed errno = 0x%x", __FUNCTION__, errno);
- status = ESESTATUS_FAILED;
- }
-
- return status;
-}
-/******************************************************************************
- * Function phNxpEse_SPM_SetPwrScheme
- *
- * Description This function request to the nfc i2c driver
- * to set the chip type and power scheme.
- *
- * Returns On Success ESESTATUS_SUCCESS else proper error code
- *
- ******************************************************************************/
-ESESTATUS phNxpEse_SPM_SetPwrScheme(long arg) {
- int32_t ret = -1;
- ESESTATUS status = ESESTATUS_SUCCESS;
-
- ALOGD_IF(ese_debug_enabled, "%s : Power scheme is set to = 0x%ld",
- __FUNCTION__, arg);
- ret = phPalEse_ioctl(phPalEse_e_SetPowerScheme, pEseDeviceHandle, arg);
- if (ret < 0) {
- ALOGE("%s : failed errno = 0x%x", __FUNCTION__, errno);
- status = ESESTATUS_FAILED;
- }
-
- return status;
-}
-
-/******************************************************************************
- * Function phNxpEseP61_SPM_EnableDisablePwrCntrl
- *
- * Description This function request to the nfc i2c driver
- * to set the chip type and power scheme.
- *
- * Returns On Success ESESTATUS_SUCCESS else proper error code
- *
- ******************************************************************************/
-ESESTATUS phNxpEse_SPM_DisablePwrControl(unsigned long arg) {
- int32_t ret = -1;
- ESESTATUS status = ESESTATUS_SUCCESS;
-
- ALOGD_IF(ese_debug_enabled, "%s : Inhibit power control is set to = 0x%ld",
- __FUNCTION__, arg);
- ret = phPalEse_ioctl(phPalEse_e_DisablePwrCntrl, pEseDeviceHandle, arg);
- if (ret < 0) {
- ALOGE("%s : failed errno = 0x%x", __FUNCTION__, errno);
- status = ESESTATUS_FAILED;
- }
-
- return status;
-}
-
-/******************************************************************************
- * Function phNxpEse_SPM_GetState
- *
- * Description This function gets the current power state of ESE
- *
- * Returns On Success ESESTATUS_SUCCESS else proper error code
- *
- ******************************************************************************/
-ESESTATUS phNxpEse_SPM_GetState(spm_state_t* current_state) {
- int32_t ret = -1;
- ESESTATUS status = ESESTATUS_SUCCESS;
- spm_state_t ese_current_state = SPM_STATE_INVALID;
-
- if (current_state == NULL) {
- ALOGE("%s : failed Invalid argument", __FUNCTION__);
- return ESESTATUS_FAILED;
- }
- ret = phPalEse_ioctl(phPalEse_e_GetSPMStatus, pEseDeviceHandle,
- (unsigned long)&ese_current_state);
- if (ret < 0) {
- ALOGE("%s : failed errno = 0x%x", __FUNCTION__, errno);
- status = ESESTATUS_FAILED;
- } else {
- *current_state = ese_current_state; /* Current ESE state */
- }
-
- return status;
-}
-
-/******************************************************************************
- * Function phNxpEse_SPM_SetJcopDwnldState
- *
- * Description This function is used to set the JCOP OS download state
- *
- * Returns On Success ESESTATUS_SUCCESS else proper error code
- *
- ******************************************************************************/
-ESESTATUS phNxpEse_SPM_SetJcopDwnldState(long arg) {
- int ret = -1;
- ESESTATUS status = ESESTATUS_SUCCESS;
-
- ALOGD_IF(ese_debug_enabled, "%s :phNxpEse_SPM_SetJcopDwnldState = 0x%ld",
- __FUNCTION__, arg);
- ret = phPalEse_ioctl(phPalEse_e_SetJcopDwnldState, pEseDeviceHandle, arg);
- if (ret < 0) {
- ALOGE("%s : failed errno = 0x%x", __FUNCTION__, errno);
- status = ESESTATUS_FAILED;
- }
-
- return status;
-}
-
-/******************************************************************************
- * Function phNxpEse_SPM_SetEseClientUpdateState
- *
- * Description This function is used to set the ese Update state
- *
- * Returns On Success ESESTATUS_SUCCESS else proper error code
- *
- ******************************************************************************/
-ESESTATUS phNxpEse_SPM_SetEseClientUpdateState(long arg) {
- int ret = -1;
- ESESTATUS status = ESESTATUS_SUCCESS;
-
- ALOGD_IF(ese_debug_enabled,
- "%s :phNxpEse_SPM_SetEseClientUpdateState = 0x%ld", __FUNCTION__,
- arg);
- ret = phPalEse_ioctl(phPalEse_e_SetClientUpdateState, pEseDeviceHandle, arg);
- if (ret < 0) {
- ALOGE("%s : failed errno = 0x%x", __FUNCTION__, errno);
- status = ESESTATUS_FAILED;
- }
-
- return status;
-}
-
-/******************************************************************************
- * Function phNxpEse_SPM_ResetPwr
- *
- * Description This function request to the nfc i2c driver
- * to reset ese.
- *
- * Returns On Success ESESTATUS_SUCCESS else proper error code
- *
- ******************************************************************************/
-ESESTATUS phNxpEse_SPM_ResetPwr(void) {
- int32_t ret = -1;
- ESESTATUS wSpmStatus = ESESTATUS_SUCCESS;
- spm_state_t current_spm_state = SPM_STATE_INVALID;
-
- /* reset the ese */
- ret = phPalEse_ioctl(phPalEse_e_ChipRst, pEseDeviceHandle, 2);
- if (ret < 0) {
- ALOGE("%s : failed errno = 0x%x", __FUNCTION__, errno);
- if (errno == -EBUSY || errno == EBUSY) {
- wSpmStatus = phNxpEse_SPM_GetState(¤t_spm_state);
- if (wSpmStatus != ESESTATUS_SUCCESS) {
- ALOGE(" %s : phNxpEse_SPM_GetPwrState Failed", __FUNCTION__);
- return wSpmStatus;
- } else {
- if (current_spm_state == SPM_STATE_DWNLD) {
- wSpmStatus = ESESTATUS_DWNLD_BUSY;
- } else {
- wSpmStatus = ESESTATUS_BUSY;
- }
- }
-
- } else {
- wSpmStatus = ESESTATUS_FAILED;
- }
- }
-
- return wSpmStatus;
-}
-
-/*******************************************************************************
-**
-** Function phTmlEse_get_ese_access
-**
-** Description
-**
-** Parameters timeout - timeout to wait for ese access
-**
-** Returns success or failure
-**
-*******************************************************************************/
-ESESTATUS phNxpEse_SPM_GetAccess(long timeout) {
- ESESTATUS status = ESESTATUS_SUCCESS;
- ALOGD_IF(ese_debug_enabled, "phTmlEse_get_ese_access(), timeout %ld",
- timeout);
-#if ((NFC_NXP_ESE_VER == JCOP_VER_3_1) || (NFC_NXP_ESE_VER == JCOP_VER_3_2))
- int ret = -1;
-
- ret = phPalEse_ioctl(phPalEse_e_GetEseAccess, pEseDeviceHandle, timeout);
- if (ret < 0) {
- if (ret == -EBUSY)
- status = ESESTATUS_BUSY;
- else
- status = ESESTATUS_FAILED;
- }
- ALOGD_IF(ese_debug_enabled, "phTmlEse_get_ese_access(), exit %d", status);
-#endif
- return status;
-}
-/*******************************************************************************
-**
-** Function phNxpEse_SPM_RelAccess
-**
-** Description
-**
-** Parameters timeout - Releases the ese access
-**
-** Returns success or failure
-**
-*******************************************************************************/
-ESESTATUS phNxpEse_SPM_RelAccess(void) {
- ESESTATUS status = ESESTATUS_SUCCESS;
-#if ((NFC_NXP_ESE_VER == JCOP_VER_3_1) || (NFC_NXP_ESE_VER == JCOP_VER_3_2))
- int ret = -1;
- ALOGD_IF(ese_debug_enabled, "phNxpEse_SPM_RelAccess(): enter");
-
- ret = phPalEse_ioctl(phPalEse_e_ChipRst, pEseDeviceHandle, 5);
- if (ret < 0) {
- status = ESESTATUS_FAILED;
- }
- ALOGD_IF(ese_debug_enabled, "phNxpEse_SPM_RelAccess(): exit %d", status);
-#endif
- return status;
-}
-/** @} */
diff --git a/snxxx/libese-spi/p73/spm/phNxpEse_Spm.h b/snxxx/libese-spi/p73/spm/phNxpEse_Spm.h
deleted file mode 100644
index a65d991..0000000
--- a/snxxx/libese-spi/p73/spm/phNxpEse_Spm.h
+++ /dev/null
@@ -1,195 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2018-2019 NXP
- *
- * 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.
- *
- ******************************************************************************/
-
-/**
- * \addtogroup SPI_Power_Management
- *
- * @{ */
-
-#ifndef _PHNXPESE_SPM_H
-#define _PHNXPESE_SPM_H
-
-#include <phEseStatus.h>
-#include <phNxpEseFeatures.h>
-/*! SPI Power Manager (SPM) possible error codes */
-typedef enum spm_power {
- SPM_POWER_DISABLE = 0,
- SPM_POWER_ENABLE, /*!< SPM power disable */
- SPM_POWER_RESET, /*!< SPM Reset pwer */
- SPM_POWER_PRIO_ENABLE, /*!< SPM prio mode enable */
- SPM_POWER_PRIO_DISABLE, /*!< SPM prio mode disable */
- SPM_RECOVERY_RESET
-} spm_power_t;
-
-/*! SPI Power Manager (SPM) possible states */
-typedef enum spm_state {
- SPM_STATE_INVALID = 0x0000, /*!< Nfc i2c driver misbehaving */
- SPM_STATE_IDLE = 0x0100, /*!< ESE is free to use */
- SPM_STATE_WIRED = 0x0200, /*!< p61 is being accessed by DWP (NFCC)*/
- SPM_STATE_SPI = 0x0400, /*!< ESE is being accessed by SPI */
- SPM_STATE_DWNLD = 0x0800, /*!< NFCC fw download is in progress */
- SPM_STATE_SPI_PRIO = 0x1000, /*!< Start of p61 access by SPI on priority*/
- SPM_STATE_SPI_PRIO_END = 0x2000, /*!< End of p61 access by SPI on priority*/
- SPM_STATE_SPI_FAILED = 0x0010, /*SPI open/close failed*/
- SPM_STATE_JCOP_DWNLD = 0x8000 /*!< P73 state JCOP Download*/
-} spm_state_t;
-
-/**
- * \ingroup SPI_Power_Management
- * \brief This function opens the nfc i2c driver to manage power
- * and synchronization for ese secure element.
- *
- * \param[in] pDevHandle - Device handle to open.
- *
- * \retval -On Success ESESTATUS_SUCCESS else proper error code
- */
-ESESTATUS phNxpEse_SPM_Init(void* pDevHandle);
-
-/**
- * \ingroup SPI_Power_Management
- * \brief TThis function closes the nfc i2c driver node.
- *
- *
- * \retval -On Success ESESTATUS_SUCCESS else proper error code
- */
-ESESTATUS phNxpEse_SPM_DeInit(void);
-
-/**
- * \ingroup SPI_Power_Management
- * \brief This function request to the nfc i2c driver
- * to enable/disable power to ese. This api should be called
- *before sending any apdu to ese/once apdu exchange is done.
- *
- * \param[in] arg -input can be of type spm_power_t.
- *
- * \retval -On Success ESESTATUS_SUCCESS else proper error code
- */
-ESESTATUS phNxpEse_SPM_ConfigPwr(spm_power_t arg);
-
-/**
- * \ingroup SPI_Power_Management
- * \brief This function request to the nfc i2c driver
- * to enable power to ese. This api should be called before
- * sending any apdu to ese.
- *
- *
- * \retval -On Success ESESTATUS_SUCCESS else proper error code
- */
-ESESTATUS phNxpEse_SPM_EnablePwr(void);
-
-/**
- * \ingroup SPI_Power_Management
- * \brief This function request to the nfc i2c driver
- * to disable power to ese. This api should be called
- * once apdu exchange is done.
- *
- *
- * \retval -On Success ESESTATUS_SUCCESS else proper error code
- */
-ESESTATUS phNxpEse_SPM_DisablePwr(void);
-
-/**
- * \ingroup SPI_Power_Management
- * \brief This function gets the current power state of ESE
- * \param[in] current_state -input is of type spm_state_t.
- *
- * \retval -On Success ESESTATUS_SUCCESS else proper error code
- */
-ESESTATUS phNxpEse_SPM_GetState(spm_state_t* current_state);
-
-/**
- * \ingroup SPI_Power_Management
- * \brief This function request to the nfc i2c driver
- * to reset ese.
- *
- * \retval -On Success ESESTATUS_SUCCESS else proper error code
- */
-ESESTATUS phNxpEse_SPM_ResetPwr(void);
-
-/**
- * \ingroup SPI_Power_Management
- * \brief This function request to get access to eSE
- *
- * \param[in] timeout - timeout to wait for ese access.
- *
- * \retval -On Success ESESTATUS_SUCCESS else proper error code
- */
-ESESTATUS phNxpEse_SPM_GetAccess(long timeout);
-
-/**
- * \ingroup SPI_Power_Management
- * \brief This function set the SPM power state
- *
- * \param[in] arg - state value.
- *
- * \retval -On Success ESESTATUS_SUCCESS else proper error code
- */
-ESESTATUS phNxpEse_SPM_SetState(long arg);
-
-/**
- * \ingroup SPI_Power_Management
- * \brief phNxpEse_SPM_RelAccess
- *
- *
- * \retval -On Success ESESTATUS_SUCCESS else proper error code
- */
-ESESTATUS phNxpEse_SPM_RelAccess(void);
-
-/**
- * \ingroup SPI_Power_Management
- * \brief This function request to the nfc i2c driver
- * to set the chip type and power scheme.
- *
- * \param[in] arg - set power scheme from config.
- *
- * \retval -On Success ESESTATUS_SUCCESS else proper error code
- */
-ESESTATUS phNxpEse_SPM_SetPwrScheme(long arg);
-
-/**
- * \ingroup SPI_Power_Management
- * \brief This function request to the nfc i2c driver
- * to set the chip type and power scheme.
- *
- * \param[in] arg - arg.
- *
- * \retval -On Success ESESTATUS_SUCCESS else proper error code
- */
-ESESTATUS phNxpEse_SPM_DisablePwrControl(unsigned long arg);
-/**
- * \ingroup SPI_Power_Management
- * \brief This function is used to set the ese Update state.
- *
- * \param[in] arg - eSE update status started/completed.
- *
- * \retval -On Success ESESTATUS_SUCCESS else proper error code
- */
-ESESTATUS phNxpEse_SPM_SetEseClientUpdateState(long arg);
-
-/**
- * \ingroup SPI_Power_Management
- * \brief This function is used to set the ese Update state.
- *
- * \param[in] arg - JCOP update status started/completed..
- *
- * \retval -On Success ESESTATUS_SUCCESS else proper error code
- */
-ESESTATUS phNxpEse_SPM_SetJcopDwnldState(long arg);
-
-#endif /* _PHNXPESE_SPM_H */
-/** @} */
diff --git a/snxxx/libese-spi/p73/utils/config.cpp b/snxxx/libese-spi/p73/utils/config.cpp
deleted file mode 100644
index a470af8..0000000
--- a/snxxx/libese-spi/p73/utils/config.cpp
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Copyright 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.
- */
-/******************************************************************************
- *
- * The original Work has been changed by NXP Semiconductors.
- *
- * Copyright (C) 2019 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.
- *
- ******************************************************************************/
-#include "config.h"
-
-#include <android-base/file.h>
-#include <android-base/logging.h>
-#include <android-base/parseint.h>
-#include <android-base/strings.h>
-
-using namespace ::std;
-using namespace ::android::base;
-
-namespace {
-
-bool parseBytesString(std::string in, std::vector<uint8_t>& out) {
- vector<string> values = Split(in, ":");
- if (values.size() == 0) return false;
- for (const string& value : values) {
- if (value.length() != 2) return false;
- uint8_t tmp = 0;
- string hexified = "0x";
- hexified.append(value);
- if (!ParseUint(hexified.c_str(), &tmp)) return false;
- out.push_back(tmp);
- }
- return true;
-}
-
-} // namespace
-
-ConfigValue::ConfigValue() {
- value_unsigned_ = 0;
- type_ = UNSIGNED;
-}
-
-ConfigValue::Type ConfigValue::getType() const { return type_; }
-
-std::string ConfigValue::getString() const {
- CHECK(type_ == STRING);
- return value_string_;
-};
-
-unsigned ConfigValue::getUnsigned() const {
- CHECK(type_ == UNSIGNED);
- return value_unsigned_;
-};
-
-std::vector<uint8_t> ConfigValue::getBytes() const {
- CHECK(type_ == BYTES);
- return value_bytes_;
-};
-
-bool ConfigValue::parseFromString(std::string in) {
- if (in.length() > 1 && in[0] == '"' && in[in.length() - 1] == '"') {
- CHECK(in.length() > 2); // Don't allow empty strings
- type_ = STRING;
- value_string_ = in.substr(1, in.length() - 2);
- return true;
- }
-
- if (in.length() > 1 && in[0] == '{' && in[in.length() - 1] == '}') {
- CHECK(in.length() >= 4); // Needs at least one byte
- type_ = BYTES;
- return parseBytesString(in.substr(1, in.length() - 2), value_bytes_);
- }
-
- unsigned tmp = 0;
- if (ParseUint(in.c_str(), &tmp)) {
- type_ = UNSIGNED;
- value_unsigned_ = tmp;
- return true;
- }
-
- return false;
-}
-
-void ConfigFile::parseFromFile(const std::string& file_name) {
- string config;
- bool config_read = ReadFileToString(file_name, &config);
- CHECK(config_read);
- LOG(INFO) << "ConfigFile - Parsing file '" << file_name << "'";
- parseFromString(config);
-}
-
-void ConfigFile::parseFromString(const std::string& config) {
- stringstream ss(config);
- string line;
- while (getline(ss, line)) {
- line = Trim(line);
- if (line.empty()) continue;
- if (line.at(0) == '#') continue;
- if (line.at(0) == 0) continue;
-
- auto search = line.find('=');
- CHECK(search != string::npos);
-
- string key(Trim(line.substr(0, search)));
- string value_string(Trim(line.substr(search + 1, string::npos)));
-
- ConfigValue value;
- bool value_parsed = value.parseFromString(value_string);
- CHECK(value_parsed);
- CHECK(!hasKey(key));
- values_.emplace(key, value);
-
- LOG(INFO) << "ConfigFile - [" << key << "] = " << value_string;
- }
-}
-
-bool ConfigFile::hasKey(const std::string& key) {
- return values_.count(key) != 0;
-}
-
-ConfigValue& ConfigFile::getValue(const std::string& key) {
- CHECK(values_.find(key) != values_.end());
- auto search = values_.find(key);
- return search->second;
-}
-
-std::string ConfigFile::getString(const std::string& key) {
- return getValue(key).getString();
-}
-
-unsigned ConfigFile::getUnsigned(const std::string& key) {
- return getValue(key).getUnsigned();
-}
-
-std::vector<uint8_t> ConfigFile::getBytes(const std::string& key) {
- return getValue(key).getBytes();
-}
-
-void ConfigFile::clear() { values_.clear(); }
diff --git a/snxxx/libese-spi/p73/utils/config.h b/snxxx/libese-spi/p73/utils/config.h
deleted file mode 100644
index 115c7fa..0000000
--- a/snxxx/libese-spi/p73/utils/config.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright 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.
- */
-/******************************************************************************
- *
- * The original Work has been changed by NXP Semiconductors.
- *
- * Copyright (C) 2019 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.
- *
- ******************************************************************************/
-#pragma once
-
-#include <map>
-#include <string>
-#include <vector>
-
-class ConfigValue {
- public:
- enum Type { UNSIGNED, STRING, BYTES };
-
- ConfigValue();
- Type getType() const;
- std::string getString() const;
- unsigned getUnsigned() const;
- std::vector<uint8_t> getBytes() const;
-
- bool parseFromString(std::string in);
-
- private:
- Type type_;
- std::string value_string_;
- unsigned value_unsigned_;
- std::vector<uint8_t> value_bytes_;
-};
-
-class ConfigFile {
- public:
- void parseFromFile(const std::string& file_name);
- void parseFromString(const std::string& config);
-
- bool hasKey(const std::string& key);
- std::string getString(const std::string& key);
- unsigned getUnsigned(const std::string& key);
- std::vector<uint8_t> getBytes(const std::string& key);
-
- void clear();
-
- private:
- ConfigValue& getValue(const std::string& key);
-
- std::map<std::string, ConfigValue> values_;
-};
diff --git a/snxxx/libese-spi/p73/utils/ese_config.cpp b/snxxx/libese-spi/p73/utils/ese_config.cpp
deleted file mode 100644
index 4a6b2cc..0000000
--- a/snxxx/libese-spi/p73/utils/ese_config.cpp
+++ /dev/null
@@ -1,87 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2018 NXP
- *
- * 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.
- *
- ******************************************************************************/
-
-#include "ese_config.h"
-
-#include <android-base/file.h>
-#include <android-base/logging.h>
-#include <android-base/parseint.h>
-#include <android-base/strings.h>
-
-#include <config.h>
-
-using namespace ::std;
-using namespace ::android::base;
-
-namespace {
-
-std::string findConfigPath() {
- const vector<string> search_path = {"/odm/etc/", "/vendor/etc/", "/etc/"};
- const string file_name = "libese-nxp.conf";
-
- for (string path : search_path) {
- path.append(file_name);
- struct stat file_stat;
- if (stat(path.c_str(), &file_stat) != 0) continue;
- if (S_ISREG(file_stat.st_mode)) return path;
- }
- return "";
-}
-
-} // namespace
-
-EseConfig::EseConfig() {
- string config_path = findConfigPath();
- CHECK(config_path != "");
- config_.parseFromFile(config_path);
-}
-
-EseConfig& EseConfig::getInstance() {
- static EseConfig theInstance;
- return theInstance;
-}
-
-bool EseConfig::hasKey(const std::string& key) {
- return getInstance().config_.hasKey(key);
-}
-
-std::string EseConfig::getString(const std::string& key) {
- return getInstance().config_.getString(key);
-}
-
-std::string EseConfig::getString(const std::string& key,
- std::string default_value) {
- if (hasKey(key)) return getString(key);
- return default_value;
-}
-
-unsigned EseConfig::getUnsigned(const std::string& key) {
- return getInstance().config_.getUnsigned(key);
-}
-
-unsigned EseConfig::getUnsigned(const std::string& key,
- unsigned default_value) {
- if (hasKey(key)) return getUnsigned(key);
- return default_value;
-}
-
-std::vector<uint8_t> EseConfig::getBytes(const std::string& key) {
- return getInstance().config_.getBytes(key);
-}
-
-void EseConfig::clear() { getInstance().config_.clear(); }
diff --git a/snxxx/libese-spi/p73/utils/ese_config.h b/snxxx/libese-spi/p73/utils/ese_config.h
deleted file mode 100755
index bba26c8..0000000
--- a/snxxx/libese-spi/p73/utils/ese_config.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2018-2020 NXP
- *
- * 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 <string>
-#include <vector>
-
-#include <config.h>
-
-#ifndef __CONFIG_H
-#define __CONFIG_H
-
-#define NAME_SE_DEBUG_ENABLED "SE_DEBUG_ENABLED"
-#define NAME_NXP_JCOPDL_AT_BOOT_ENABLE "NXP_JCOPDL_AT_BOOT_ENABLE"
-#define NAME_NXP_WTX_COUNT_VALUE "NXP_WTX_COUNT_VALUE"
-#define NAME_NXP_MAX_RSP_TIMEOUT "NXP_MAX_RSP_TIMEOUT"
-#define NAME_NXP_POWER_SCHEME "NXP_POWER_SCHEME"
-#define NAME_NXP_SOF_WRITE "NXP_SOF_WRITE"
-#define NAME_NXP_TP_MEASUREMENT "NXP_TP_MEASUREMENT"
-#define NAME_NXP_SPI_INTF_RST_ENABLE "NXP_SPI_INTF_RST_ENABLE"
-#define NAME_NXP_MAX_RNACK_RETRY "NXP_MAX_RNACK_RETRY"
-#define NAME_NXP_SPI_WRITE_TIMEOUT "NXP_SPI_WRITE_TIMEOUT"
-#define NAME_NXP_ESE_DEV_NODE "NXP_ESE_DEV_NODE"
-#define NAME_NXP_VISO_DPD_ENABLED "NXP_VISO_DPD_ENABLED"
-#define NAME_NXP_NAD_POLL_RETRY_TIME "NXP_NAD_POLL_RETRY_TIME"
-#define NAME_RNACK_RETRY_DELAY "RNACK_RETRY_DELAY"
-#define NAME_NXP_P61_JCOP_DEFAULT_INTERFACE "NXP_P61_JCOP_DEFAULT_INTERFACE"
-#define NAME_NXP_ESE_IFSD_VALUE "NXP_ESE_IFSD_VALUE"
-#define NAME_NXP_EUICC_IFSD_VALUE "NXP_EUICC_IFSD_VALUE"
-#define NAME_NXP_P61_COLD_RESET_INTERFACE "NXP_P61_COLD_RESET_INTERFACE"
-#define NAME_NXP_OS_VERSION "NXP_OS_VERSION"
-#define NAME_NXP_WTX_NTF_COUNT "NXP_WTX_NTF_COUNT"
-#define NAME_NXP_OSU_MAX_WTX_COUNT "NXP_OSU_MAX_WTX_COUNT"
-#define NAME_NXP_TRANSPORT "NXP_TRANSPORT"
-#endif
-
-class EseConfig {
- public:
- static bool hasKey(const std::string& key);
- static std::string getString(const std::string& key);
- static std::string getString(const std::string& key,
- std::string default_value);
- static unsigned getUnsigned(const std::string& key);
- static unsigned getUnsigned(const std::string& key, unsigned default_value);
- static std::vector<uint8_t> getBytes(const std::string& key);
- static void clear();
-
- private:
- static EseConfig& getInstance();
- EseConfig();
-
- ConfigFile config_;
-};
diff --git a/snxxx/libese-spi/p73/utils/ringbuffer.cpp b/snxxx/libese-spi/p73/utils/ringbuffer.cpp
deleted file mode 100644
index d7798fd..0000000
--- a/snxxx/libese-spi/p73/utils/ringbuffer.cpp
+++ /dev/null
@@ -1,116 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 2017 Google Inc.
- *
- * 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.
- *
- ******************************************************************************/
-
-#include <assert.h>
-#include <stdlib.h>
-
-#include "ringbuffer.h"
-
-struct ringbuffer_t {
- size_t total;
- size_t available;
- uint8_t* base;
- uint8_t* head;
- uint8_t* tail;
-};
-
-ringbuffer_t* ringbuffer_init(const size_t size) {
- ringbuffer_t* p = static_cast<ringbuffer_t*>(calloc(1, sizeof(ringbuffer_t)));
-
- if (p == NULL) return p;
-
- p->base = static_cast<uint8_t*>(calloc(size, sizeof(uint8_t)));
- p->head = p->tail = p->base;
- p->total = p->available = size;
-
- return p;
-}
-
-void ringbuffer_free(ringbuffer_t* rb) {
- if (rb != NULL) free(rb->base);
- free(rb);
-}
-
-size_t ringbuffer_available(const ringbuffer_t* rb) {
- assert(rb);
- return rb->available;
-}
-
-size_t ringbuffer_size(const ringbuffer_t* rb) {
- assert(rb);
- return rb->total - rb->available;
-}
-
-size_t ringbuffer_insert(ringbuffer_t* rb, const uint8_t* p, size_t length) {
- assert(rb);
- assert(p);
-
- if (length > ringbuffer_available(rb)) length = ringbuffer_available(rb);
-
- for (size_t i = 0; i != length; ++i) {
- *rb->tail++ = *p++;
- if (rb->tail >= (rb->base + rb->total)) rb->tail = rb->base;
- }
-
- rb->available -= length;
- return length;
-}
-
-size_t ringbuffer_delete(ringbuffer_t* rb, size_t length) {
- assert(rb);
-
- if (length > ringbuffer_size(rb)) length = ringbuffer_size(rb);
-
- rb->head += length;
- if (rb->head >= (rb->base + rb->total)) rb->head -= rb->total;
-
- rb->available += length;
- return length;
-}
-
-size_t ringbuffer_peek(const ringbuffer_t* rb, off_t offset, uint8_t* p,
- size_t length) {
- assert(rb);
- assert(p);
- assert(offset >= 0);
- assert((size_t)offset <= ringbuffer_size(rb));
-
- uint8_t* b = ((rb->head - rb->base + offset) % rb->total) + rb->base;
- const size_t bytes_to_copy = (offset + length > ringbuffer_size(rb))
- ? ringbuffer_size(rb) - offset
- : length;
-
- for (size_t copied = 0; copied < bytes_to_copy; ++copied) {
- *p++ = *b++;
- if (b >= (rb->base + rb->total)) b = rb->base;
- }
-
- return bytes_to_copy;
-}
-
-size_t ringbuffer_pop(ringbuffer_t* rb, uint8_t* p, size_t length) {
- assert(rb);
- assert(p);
-
- const size_t copied = ringbuffer_peek(rb, 0, p, length);
- rb->head += copied;
- if (rb->head >= (rb->base + rb->total)) rb->head -= rb->total;
-
- rb->available += copied;
- return copied;
-}
diff --git a/snxxx/libese-spi/p73/utils/ringbuffer.h b/snxxx/libese-spi/p73/utils/ringbuffer.h
deleted file mode 100644
index d2c310a..0000000
--- a/snxxx/libese-spi/p73/utils/ringbuffer.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 2017 Google Inc.
- *
- * 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 <stdint.h>
-
-typedef struct ringbuffer_t ringbuffer_t;
-
-// NOTE:
-// None of the functions below are thread safe when it comes to accessing the
-// *rb pointer. It is *NOT* possible to insert and pop/delete at the same time.
-// Callers must protect the *rb pointer separately.
-
-// Create a ringbuffer with the specified size
-// Returns NULL if memory allocation failed. Resulting pointer must be freed
-// using |ringbuffer_free|.
-ringbuffer_t* ringbuffer_init(const size_t size);
-
-// Frees the ringbuffer structure and buffer
-// Save to call with NULL.
-void ringbuffer_free(ringbuffer_t* rb);
-
-// Returns remaining buffer size
-size_t ringbuffer_available(const ringbuffer_t* rb);
-
-// Returns size of data in buffer
-size_t ringbuffer_size(const ringbuffer_t* rb);
-
-// Attempts to insert up to |length| bytes of data at |p| into the buffer
-// Return actual number of bytes added. Can be less than |length| if buffer
-// is full.
-size_t ringbuffer_insert(ringbuffer_t* rb, const uint8_t* p, size_t length);
-
-// Peek |length| number of bytes from the ringbuffer, starting at |offset|,
-// into the buffer |p|. Return the actual number of bytes peeked. Can be less
-// than |length| if there is less than |length| data available. |offset| must
-// be non-negative.
-size_t ringbuffer_peek(const ringbuffer_t* rb, off_t offset, uint8_t* p,
- size_t length);
-
-// Does the same as |ringbuffer_peek|, but also advances the ring buffer head
-size_t ringbuffer_pop(ringbuffer_t* rb, uint8_t* p, size_t length);
-
-// Deletes |length| bytes from the ringbuffer starting from the head
-// Return actual number of bytes deleted.
-size_t ringbuffer_delete(ringbuffer_t* rb, size_t length);
diff --git a/snxxx/libese-spi/src/adaptation/CondVar.cpp b/snxxx/libese-spi/src/adaptation/CondVar.cpp
deleted file mode 100755
index ad69973..0000000
--- a/snxxx/libese-spi/src/adaptation/CondVar.cpp
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright (C) 2012 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.
- */
-
-/*
- * Encapsulate a condition variable for thread synchronization.
- */
-
-#include "CondVar.h"
-
-#include <errno.h>
-#include <string.h>
-
-#include <android-base/stringprintf.h>
-#include <base/logging.h>
-
-using android::base::StringPrintf;
-
-/*******************************************************************************
-**
-** Function: CondVar
-**
-** Description: Initialize member variables.
-**
-** Returns: None.
-**
-*******************************************************************************/
-CondVar::CondVar() {
- pthread_condattr_t attr;
- pthread_condattr_init(&attr);
- pthread_condattr_setclock(&attr, CLOCK_MONOTONIC);
- memset(&mCondition, 0, sizeof(mCondition));
- int const res = pthread_cond_init(&mCondition, &attr);
- if (res) {
- LOG(ERROR) << StringPrintf("CondVar::CondVar: fail init; error=0x%X", res);
- }
-}
-
-/*******************************************************************************
-**
-** Function: ~CondVar
-**
-** Description: Cleanup all resources.
-**
-** Returns: None.
-**
-*******************************************************************************/
-CondVar::~CondVar() {
- int const res = pthread_cond_destroy(&mCondition);
- if (res) {
- LOG(ERROR) << StringPrintf("CondVar::~CondVar: fail destroy; error=0x%X",
- res);
- }
-}
-
-/*******************************************************************************
-**
-** Function: wait
-**
-** Description: Block the caller and wait for a condition.
-**
-** Returns: None.
-**
-*******************************************************************************/
-void CondVar::wait(Mutex& mutex) {
- int const res = pthread_cond_wait(&mCondition, mutex.nativeHandle());
- if (res) {
- LOG(ERROR) << StringPrintf("CondVar::wait: fail wait; error=0x%X", res);
- }
-}
-
-/*******************************************************************************
-**
-** Function: wait
-**
-** Description: Block the caller and wait for a condition.
-** millisec: Timeout in milliseconds.
-**
-** Returns: True if wait is successful; false if timeout occurs.
-**
-*******************************************************************************/
-bool CondVar::wait(Mutex& mutex, long millisec) {
- bool retVal = false;
- struct timespec absoluteTime;
-
- if (clock_gettime(CLOCK_MONOTONIC, &absoluteTime) == -1) {
- LOG(ERROR) << StringPrintf("CondVar::wait: fail get time; errno=0x%X",
- errno);
- } else {
- absoluteTime.tv_sec += millisec / 1000;
- long ns = absoluteTime.tv_nsec + ((millisec % 1000) * 1000000);
- if (ns > 1000000000) {
- absoluteTime.tv_sec++;
- absoluteTime.tv_nsec = ns - 1000000000;
- } else
- absoluteTime.tv_nsec = ns;
- }
-
- int waitResult =
- pthread_cond_timedwait(&mCondition, mutex.nativeHandle(), &absoluteTime);
- if ((waitResult != 0) && (waitResult != ETIMEDOUT))
- LOG(ERROR) << StringPrintf("CondVar::wait: fail timed wait; error=0x%X",
- waitResult);
- retVal = (waitResult == 0); // waited successfully
- return retVal;
-}
-
-/*******************************************************************************
-**
-** Function: notifyOne
-**
-** Description: Unblock the waiting thread.
-**
-** Returns: None.
-**
-*******************************************************************************/
-void CondVar::notifyOne() {
- int const res = pthread_cond_signal(&mCondition);
- if (res) {
- LOG(ERROR) << StringPrintf("CondVar::notifyOne: fail signal; error=0x%X",
- res);
- }
-}
diff --git a/snxxx/libese-spi/src/adaptation/Mutex.cpp b/snxxx/libese-spi/src/adaptation/Mutex.cpp
deleted file mode 100755
index ef4d5e5..0000000
--- a/snxxx/libese-spi/src/adaptation/Mutex.cpp
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright (C) 2012 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.
- */
-
-/*
- * Encapsulate a mutex for thread synchronization.
- */
-
-#include "Mutex.h"
-
-#include <errno.h>
-#include <string.h>
-
-#include <android-base/stringprintf.h>
-#include <base/logging.h>
-
-using android::base::StringPrintf;
-
-/*******************************************************************************
-**
-** Function: Mutex
-**
-** Description: Initialize member variables.
-**
-** Returns: None.
-**
-*******************************************************************************/
-Mutex::Mutex() {
- memset(&mMutex, 0, sizeof(mMutex));
- int res = pthread_mutex_init(&mMutex, NULL);
- if (res != 0) {
- LOG(ERROR) << StringPrintf("Mutex::Mutex: fail init; error=0x%X", res);
- }
-}
-
-/*******************************************************************************
-**
-** Function: ~Mutex
-**
-** Description: Cleanup all resources.
-**
-** Returns: None.
-**
-*******************************************************************************/
-Mutex::~Mutex() {
- int res = pthread_mutex_destroy(&mMutex);
- if (res != 0) {
- LOG(ERROR) << StringPrintf("Mutex::~Mutex: fail destroy; error=0x%X", res);
- }
-}
-
-/*******************************************************************************
-**
-** Function: lock
-**
-** Description: Block the thread and try lock the mutex.
-**
-** Returns: None.
-**
-*******************************************************************************/
-void Mutex::lock() {
- int res = pthread_mutex_lock(&mMutex);
- if (res != 0) {
- LOG(ERROR) << StringPrintf("Mutex::lock: fail lock; error=0x%X", res);
- }
-}
-
-/*******************************************************************************
-**
-** Function: unlock
-**
-** Description: Unlock a mutex to unblock a thread.
-**
-** Returns: None.
-**
-*******************************************************************************/
-void Mutex::unlock() {
- int res = pthread_mutex_unlock(&mMutex);
- if (res != 0) {
- LOG(ERROR) << StringPrintf("Mutex::unlock: fail unlock; error=0x%X", res);
- }
-}
-
-/*******************************************************************************
-**
-** Function: tryLock
-**
-** Description: Try to lock the mutex.
-**
-** Returns: True if the mutex is locked.
-**
-*******************************************************************************/
-bool Mutex::tryLock() {
- int res = pthread_mutex_trylock(&mMutex);
- if ((res != 0) && (res != EBUSY)) {
- LOG(ERROR) << StringPrintf("Mutex::tryLock: error=0x%X", res);
- }
- return res == 0;
-}
-
-/*******************************************************************************
-**
-** Function: nativeHandle
-**
-** Description: Get the handle of the mutex.
-**
-** Returns: Handle of the mutex.
-**
-*******************************************************************************/
-pthread_mutex_t* Mutex::nativeHandle() { return &mMutex; }
diff --git a/snxxx/libese-spi/src/adaptation/NfcAdaptation.cpp b/snxxx/libese-spi/src/adaptation/NfcAdaptation.cpp
deleted file mode 100644
index d746a0c..0000000
--- a/snxxx/libese-spi/src/adaptation/NfcAdaptation.cpp
+++ /dev/null
@@ -1,258 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2018-2020 NXP
- *
- * 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.
- *
- ******************************************************************************/
-#define LOG_TAG "NxpEseHal-NfcAdaptation"
-#include "NfcAdaptation.h"
-#include <android/hardware/nfc/1.0/types.h>
-#include <hwbinder/ProcessState.h>
-#include <log/log.h>
-#include <pthread.h>
-
-#undef LOG_TAG
-#define LOG_TAG "SpiAdaptation"
-
-using android::OK;
-using android::sp;
-using android::status_t;
-
-using android::hardware::hidl_vec;
-using android::hardware::ProcessState;
-using android::hardware::Return;
-using android::hardware::Void;
-using vendor::nxp::nxpnfc::V2_0::INxpNfc;
-
-sp<INxpNfc> NfcAdaptation::mHalNxpNfc = nullptr;
-ThreadMutex NfcAdaptation::sIoctlLock;
-NfcAdaptation* NfcAdaptation::mpInstance = NULL;
-ThreadMutex NfcAdaptation::sLock;
-
-int omapi_status;
-
-void NfcAdaptation::Initialize() {
- const char* func = "NfcAdaptation::Initialize";
- ALOGD_IF(ese_debug_enabled, "%s", func);
- if (mHalNxpNfc != nullptr) return;
- mHalNxpNfc = INxpNfc::tryGetService();
- if (mHalNxpNfc != nullptr) {
- ALOGE("%s: INxpNfc::getService() returned %p (%s)", func, mHalNxpNfc.get(),
- (mHalNxpNfc->isRemote() ? "remote" : "local"));
- }
- ALOGD_IF(ese_debug_enabled, "%s: exit", func);
-}
-/*******************************************************************************
-**
-** Function: NfcAdaptation::GetInstance()
-**
-** Description: access class singleton
-**
-** Returns: pointer to the singleton object
-**
-*******************************************************************************/
-NfcAdaptation& NfcAdaptation::GetInstance() {
- AutoThreadMutex a(sLock);
-
- if (!mpInstance) mpInstance = new NfcAdaptation;
- return *mpInstance;
-}
-/*******************************************************************************
-**
-** Function: ThreadMutex::ThreadMutex()
-**
-** Description: class constructor
-**
-** Returns: none
-**
-*******************************************************************************/
-ThreadMutex::ThreadMutex() {
- pthread_mutexattr_t mutexAttr;
-
- pthread_mutexattr_init(&mutexAttr);
- pthread_mutex_init(&mMutex, &mutexAttr);
- pthread_mutexattr_destroy(&mutexAttr);
-}
-/*******************************************************************************
-**
-** Function: ThreadMutex::~ThreadMutex()
-**
-** Description: class destructor
-**
-** Returns: none
-**
-*******************************************************************************/
-ThreadMutex::~ThreadMutex() { pthread_mutex_destroy(&mMutex); }
-
-/*******************************************************************************
-**
-** Function: AutoThreadMutex::AutoThreadMutex()
-**
-** Description: class constructor, automatically lock the mutex
-**
-** Returns: none
-**
-*******************************************************************************/
-AutoThreadMutex::AutoThreadMutex(ThreadMutex& m) : mm(m) { mm.lock(); }
-
-/*******************************************************************************
-**
-** Function: AutoThreadMutex::~AutoThreadMutex()
-**
-** Description: class destructor, automatically unlock the mutex
-**
-** Returns: none
-**
-*******************************************************************************/
-AutoThreadMutex::~AutoThreadMutex() { mm.unlock(); }
-
-/*******************************************************************************
-**
-** Function: ThreadMutex::lock()
-**
-** Description: lock kthe mutex
-**
-** Returns: none
-**
-*******************************************************************************/
-void ThreadMutex::lock() { pthread_mutex_lock(&mMutex); }
-
-/*******************************************************************************
-**
-** Function: ThreadMutex::unblock()
-**
-** Description: unlock the mutex
-**
-** Returns: none
-**
-*******************************************************************************/
-void ThreadMutex::unlock() { pthread_mutex_unlock(&mMutex); }
-
-/*******************************************************************************
-**
-** Function: NfcAdaptation::NfcAdaptation()
-**
-** Description: class constructor
-**
-** Returns: none
-**
-*******************************************************************************/
-NfcAdaptation::NfcAdaptation() { mCurrentIoctlData = NULL; }
-
-/*******************************************************************************
-**
-** Function: NfcAdaptation::~NfcAdaptation()
-**
-** Description: class destructor
-**
-** Returns: none
-**
-*******************************************************************************/
-NfcAdaptation::~NfcAdaptation() { mpInstance = NULL; }
-
-/*******************************************************************************
-**
-** Function: NfcAdaptation::resetEse
-**
-** Description: This function a wrapper function which triggers Ese reset
-**
-**
-**
-** Returns: -1 or 0.
-**
-*******************************************************************************/
-ESESTATUS NfcAdaptation::resetEse(uint64_t level) {
- const char* func = "NfcAdaptation::resetEse";
- ESESTATUS result = ESESTATUS_FAILED;
- bool ret = 0;
-
- ALOGD_IF(ese_debug_enabled, "%s : Enter", func);
-
- if (mHalNxpNfc != nullptr) {
- ret = mHalNxpNfc->resetEse(level);
- if (ret) {
- ALOGE("NfcAdaptation::resetEse mHalNxpNfc completed");
- result = ESESTATUS_SUCCESS;
- } else {
- ALOGE("NfcAdaptation::resetEse mHalNxpNfc failed");
- }
- }
-
- return result;
-}
-
-/*******************************************************************************
-**
-** Function: NfcAdaptation::setEseUpdateState
-**
-** Description: This is a wrapper functions notifies upper layer about
-** the jcob download comple
-** tion.
-** Returns: -1 or 0.
-**
-*******************************************************************************/
-ESESTATUS NfcAdaptation::setEseUpdateState(void* p_data) {
- const char* func = "NfcAdaptation::setEseUpdateState";
- ::android::hardware::nfc::V1_0::NfcData data;
- ESESTATUS result = ESESTATUS_FAILED;
- bool ret = 0;
-
- ALOGD_IF(ese_debug_enabled, "%s : Enter", func);
-
- ese_nxp_IoctlInOutData_t* pInpOutData = (ese_nxp_IoctlInOutData_t*)p_data;
- data.setToExternal((uint8_t*)pInpOutData, sizeof(ese_nxp_IoctlInOutData_t));
-
- if (mHalNxpNfc != nullptr) {
- ret = mHalNxpNfc->setEseUpdateState(
- (::vendor::nxp::nxpnfc::V2_0::NxpNfcHalEseState)
- pInpOutData->inp.data.nxpCmd.p_cmd[0]);
- if (ret) {
- ALOGE("NfcAdaptation::setEseUpdateState completed");
- result = ESESTATUS_SUCCESS;
- } else {
- ALOGE("NfcAdaptation::setEseUpdateState failed");
- }
- }
-
- return result;
-}
-
-/*******************************************************************************
-**
-** Function: ThreadCondVar::ThreadCondVar()
-**
-** Description: class constructor
-**
-** Returns: none
-**
-*******************************************************************************/
-ThreadCondVar::ThreadCondVar() {
- pthread_condattr_t CondAttr;
-
- pthread_condattr_init(&CondAttr);
- pthread_cond_init(&mCondVar, &CondAttr);
-
- pthread_condattr_destroy(&CondAttr);
-}
-
-/*******************************************************************************
-**
-** Function: ThreadCondVar::~ThreadCondVar()
-**
-** Description: class destructor
-**
-** Returns: none
-**
-*******************************************************************************/
-ThreadCondVar::~ThreadCondVar() { pthread_cond_destroy(&mCondVar); }
diff --git a/snxxx/libese-spi/src/include/CondVar.h b/snxxx/libese-spi/src/include/CondVar.h
deleted file mode 100644
index a2be51f..0000000
--- a/snxxx/libese-spi/src/include/CondVar.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (C) 2012 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.
- */
-
-/*
- * Encapsulate a condition variable for thread synchronization.
- */
-
-#pragma once
-#include <pthread.h>
-#include "Mutex.h"
-
-class CondVar {
- public:
- /*******************************************************************************
- **
- ** Function: CondVar
- **
- ** Description: Initialize member variables.
- **
- ** Returns: None.
- **
- *******************************************************************************/
- CondVar();
-
- /*******************************************************************************
- **
- ** Function: ~CondVar
- **
- ** Description: Cleanup all resources.
- **
- ** Returns: None.
- **
- *******************************************************************************/
- ~CondVar();
-
- /*******************************************************************************
- **
- ** Function: wait
- **
- ** Description: Block the caller and wait for a condition.
- **
- ** Returns: None.
- **
- *******************************************************************************/
- void wait(Mutex& mutex);
-
- /*******************************************************************************
- **
- ** Function: wait
- **
- ** Description: Block the caller and wait for a condition.
- ** millisec: Timeout in milliseconds.
- **
- ** Returns: True if wait is successful; false if timeout occurs.
- **
- *******************************************************************************/
- bool wait(Mutex& mutex, long millisec);
-
- /*******************************************************************************
- **
- ** Function: notifyOne
- **
- ** Description: Unblock the waiting thread.
- **
- ** Returns: None.
- **
- *******************************************************************************/
- void notifyOne();
-
- private:
- pthread_cond_t mCondition;
-};
diff --git a/snxxx/libese-spi/src/include/Mutex.h b/snxxx/libese-spi/src/include/Mutex.h
deleted file mode 100644
index bcabf31..0000000
--- a/snxxx/libese-spi/src/include/Mutex.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (C) 2012 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.
- */
-
-/*
- * Encapsulate a mutex for thread synchronization.
- */
-
-#pragma once
-#include <pthread.h>
-
-class Mutex {
- public:
- /*******************************************************************************
- **
- ** Function: Mutex
- **
- ** Description: Initialize member variables.
- **
- ** Returns: None.
- **
- *******************************************************************************/
- Mutex();
-
- /*******************************************************************************
- **
- ** Function: ~Mutex
- **
- ** Description: Cleanup all resources.
- **
- ** Returns: None.
- **
- *******************************************************************************/
- ~Mutex();
-
- /*******************************************************************************
- **
- ** Function: lock
- **
- ** Description: Block the thread and try lock the mutex.
- **
- ** Returns: None.
- **
- *******************************************************************************/
- void lock();
-
- /*******************************************************************************
- **
- ** Function: unlock
- **
- ** Description: Unlock a mutex to unblock a thread.
- **
- ** Returns: None.
- **
- *******************************************************************************/
- void unlock();
-
- /*******************************************************************************
- **
- ** Function: tryLock
- **
- ** Description: Try to lock the mutex.
- **
- ** Returns: True if the mutex is locked.
- **
- *******************************************************************************/
- bool tryLock();
-
- /*******************************************************************************
- **
- ** Function: nativeHandle
- **
- ** Description: Get the handle of the mutex.
- **
- ** Returns: Handle of the mutex.
- **
- *******************************************************************************/
- pthread_mutex_t* nativeHandle();
-
- class Autolock {
- public:
- inline Autolock(Mutex& mutex) : mLock(mutex) { mLock.lock(); }
- inline Autolock(Mutex* mutex) : mLock(*mutex) { mLock.lock(); }
- inline ~Autolock() { mLock.unlock(); }
-
- private:
- Mutex& mLock;
- };
-
- private:
- pthread_mutex_t mMutex;
-};
-
-typedef Mutex::Autolock AutoMutex;
diff --git a/snxxx/libese-spi/src/include/NfcAdaptation.h b/snxxx/libese-spi/src/include/NfcAdaptation.h
deleted file mode 100644
index 18720f6..0000000
--- a/snxxx/libese-spi/src/include/NfcAdaptation.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/******************************************************************************
- *
- * Copyright 2020 NXP
- *
- * 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 <pthread.h>
-
-#include <android/hardware/nfc/1.0/types.h>
-#include <phEseStatus.h>
-#include <phNxpEseFeatures.h>
-#include <utils/RefBase.h>
-#include <vendor/nxp/nxpnfc/2.0/INxpNfc.h>
-#include "hal_nxpese.h"
-using vendor::nxp::nxpnfc::V2_0::INxpNfc;
-
-class ThreadMutex {
- public:
- ThreadMutex();
- virtual ~ThreadMutex();
- void lock();
- void unlock();
- operator pthread_mutex_t*() { return &mMutex; }
-
- private:
- pthread_mutex_t mMutex;
-};
-
-class ThreadCondVar : public ThreadMutex {
- public:
- ThreadCondVar();
- virtual ~ThreadCondVar();
- void signal();
- void wait();
- operator pthread_cond_t*() { return &mCondVar; }
- operator pthread_mutex_t*() {
- return ThreadMutex::operator pthread_mutex_t*();
- }
-
- private:
- pthread_cond_t mCondVar;
-};
-
-class AutoThreadMutex {
- public:
- AutoThreadMutex(ThreadMutex& m);
- virtual ~AutoThreadMutex();
- operator ThreadMutex&() { return mm; }
- operator pthread_mutex_t*() { return (pthread_mutex_t*)mm; }
-
- private:
- ThreadMutex& mm;
-};
-
-class NfcAdaptation {
- public:
- virtual ~NfcAdaptation();
- void Initialize();
- static NfcAdaptation& GetInstance();
- static ESESTATUS resetEse(uint64_t level);
- static ESESTATUS setEseUpdateState(void* p_data);
- ese_nxp_IoctlInOutData_t* mCurrentIoctlData;
-
- private:
- NfcAdaptation();
- static NfcAdaptation* mpInstance;
- static ThreadMutex sLock;
- static ThreadMutex sIoctlLock;
- ThreadCondVar mCondVar;
- static ThreadCondVar mHalIoctlEvent;
- static android::sp<INxpNfc> mHalNxpNfc;
-};
diff --git a/snxxx/libese-spi/src/include/SyncEvent.h b/snxxx/libese-spi/src/include/SyncEvent.h
deleted file mode 100644
index 96851ef..0000000
--- a/snxxx/libese-spi/src/include/SyncEvent.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Copyright (C) 2012 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.
- */
-
-/*
- * Synchronize two or more threads using a condition variable and a mutex.
- */
-#pragma once
-#include "CondVar.h"
-#include "Mutex.h"
-
-class SyncEvent {
- public:
- /*******************************************************************************
- **
- ** Function: ~SyncEvent
- **
- ** Description: Cleanup all resources.
- **
- ** Returns: None.
- **
- *******************************************************************************/
- ~SyncEvent() {}
-
- /*******************************************************************************
- **
- ** Function: start
- **
- ** Description: Start a synchronization operation.
- **
- ** Returns: None.
- **
- *******************************************************************************/
- void start() { mMutex.lock(); }
-
- /*******************************************************************************
- **
- ** Function: wait
- **
- ** Description: Block the thread and wait for the event to occur.
- **
- ** Returns: None.
- **
- *******************************************************************************/
- void wait() { mCondVar.wait(mMutex); }
-
- /*******************************************************************************
- **
- ** Function: wait
- **
- ** Description: Block the thread and wait for the event to occur.
- ** millisec: Timeout in milliseconds.
- **
- ** Returns: True if wait is successful; false if timeout occurs.
- **
- *******************************************************************************/
- bool wait(long millisec) {
- bool retVal = mCondVar.wait(mMutex, millisec);
- return retVal;
- }
-
- /*******************************************************************************
- **
- ** Function: notifyOne
- **
- ** Description: Notify a blocked thread that the event has occurred.
- ** Unblocks it.
- **
- ** Returns: None.
- **
- *******************************************************************************/
- void notifyOne() { mCondVar.notifyOne(); }
-
- /*******************************************************************************
- **
- ** Function: end
- **
- ** Description: End a synchronization operation.
- **
- ** Returns: None.
- **
- *******************************************************************************/
- void end() { mMutex.unlock(); }
-
- private:
- CondVar mCondVar;
- Mutex mMutex;
-};
-
-/*****************************************************************************/
-/*****************************************************************************/
-
-/*****************************************************************************
-**
-** Name: SyncEventGuard
-**
-** Description: Automatically start and end a synchronization event.
-**
-*****************************************************************************/
-class SyncEventGuard {
- public:
- /*******************************************************************************
- **
- ** Function: SyncEventGuard
- **
- ** Description: Start a synchronization operation.
- **
- ** Returns: None.
- **
- *******************************************************************************/
- SyncEventGuard(SyncEvent& event) : mEvent(event) {
- event.start(); // automatically start operation
- };
-
- /*******************************************************************************
- **
- ** Function: ~SyncEventGuard
- **
- ** Description: End a synchronization operation.
- **
- ** Returns: None.
- **
- *******************************************************************************/
- ~SyncEventGuard() {
- mEvent.end(); // automatically end operation
- };
-
- private:
- SyncEvent& mEvent;
-};