Update onStateChange notification flow am: 91bfb8cdd5 am: dd1611c7f4 am: 16f19c4a68
Original change: https://android-review.googlesource.com/c/platform/hardware/st/secure_element2/+/1677790
Change-Id: I72c33f32b958c2331413be347b9054839325e975
diff --git a/secure_element/1.0/GtoService.cpp b/secure_element/1.0/GtoService.cpp
index 897a004..a003c92 100644
--- a/secure_element/1.0/GtoService.cpp
+++ b/secure_element/1.0/GtoService.cpp
@@ -26,7 +26,7 @@
using android::status_t;
int main() {
- ALOGD("Thales Secure Element HAL for eSE1 Service 1.4.0 is starting. libse-gto v1.13");
+ ALOGD("Thales Secure Element HAL for eSE1 Service 1.5.0 is starting. libse-gto v1.13");
sp<ISecureElement> se_service = new SecureElement("eSE1");
configureRpcThreadpool(1, true);
status_t status = se_service->registerAsService("eSE1");
diff --git a/secure_element/1.0/GtoService_ese2.cpp b/secure_element/1.0/GtoService_ese2.cpp
index 2fc55cb..4ababbd 100644
--- a/secure_element/1.0/GtoService_ese2.cpp
+++ b/secure_element/1.0/GtoService_ese2.cpp
@@ -26,7 +26,7 @@
using android::status_t;
int main() {
- ALOGD("Thales Secure Element HAL for eSE2 Service 1.4.0 is starting. libse-gto v1.13");
+ ALOGD("Thales Secure Element HAL for eSE2 Service 1.5.0 is starting. libse-gto v1.13");
sp<ISecureElement> se_service = new SecureElement("eSE2");
configureRpcThreadpool(1, true);
status_t status = se_service->registerAsService("eSE2");
diff --git a/secure_element/1.0/SecureElement.cpp b/secure_element/1.0/SecureElement.cpp
index 471c6b6..0f02092 100644
--- a/secure_element/1.0/SecureElement.cpp
+++ b/secure_element/1.0/SecureElement.cpp
@@ -82,11 +82,16 @@
sp<V1_0::ISecureElementHalCallback> SecureElement::internalClientCallback = nullptr;
int SecureElement::initializeSE() {
- //struct settings *settings;
int n;
ALOGD("SecureElement:%s start", __func__);
+ if (checkSeUp) {
+ ALOGD("SecureElement:%s Already initialized", __func__);
+ ALOGD("SecureElement:%s end", __func__);
+ return EXIT_SUCCESS;
+ }
+
if (se_gto_new(&ctx) < 0) {
ALOGE("SecureElement:%s se_gto_new FATAL:%s", __func__,strerror(errno));
@@ -103,14 +108,12 @@
}
if (resetSE() < 0) {
+ se_gto_close(ctx);
+ ctx = NULL;
return EXIT_FAILURE;
}
checkSeUp = true;
- turnOffSE = false;
-
- internalClientCallback->onStateChange(true);
- turnOffSE = true;
ALOGD("SecureElement:%s end", __func__);
return EXIT_SUCCESS;
@@ -121,7 +124,7 @@
ALOGD("SecureElement:%s start", __func__);
if (clientCallback == nullptr) {
- ALOGD("SecureElement:%s clientCallback == nullptr", __func__);
+ ALOGE("SecureElement:%s clientCallback == nullptr", __func__);
return Void();
} else {
internalClientCallback = clientCallback;
@@ -133,11 +136,11 @@
if (initializeSE() != EXIT_SUCCESS) {
ALOGE("SecureElement:%s initializeSE Failed", __func__);
clientCallback->onStateChange(false);
+ } else {
+ ALOGD("SecureElement:%s initializeSE Success", __func__);
+ clientCallback->onStateChange(true);
}
- if (deinitializeSE() != SecureElementStatus::SUCCESS) {
- ALOGE("SecureElement:%s deinitializeSE Failed", __func__);
- }
ALOGD("SecureElement:%s end", __func__);
return Void();
@@ -204,6 +207,7 @@
if (!checkSeUp) {
if (initializeSE() != EXIT_SUCCESS) {
ALOGE("SecureElement:%s: Failed to re-initialise the eSE HAL", __func__);
+ internalClientCallback->onStateChange(false);
_hidl_cb(resApduBuff, SecureElementStatus::IOERROR);
return Void();
}
@@ -355,6 +359,7 @@
if (!checkSeUp) {
if (initializeSE() != EXIT_SUCCESS) {
ALOGE("SecureElement:%s: Failed to re-initialise the eSE HAL", __func__);
+ internalClientCallback->onStateChange(false);
_hidl_cb(result, SecureElementStatus::IOERROR);
return Void();
}
@@ -617,13 +622,14 @@
}
void SecureElement::serviceDied(uint64_t, const wp<IBase>&) {
- ALOGE("SecureElement:%s SecureElement serviceDied", __func__);
+ ALOGD("SecureElement:%s SecureElement serviceDied", __func__);
SecureElementStatus mSecureElementStatus = deinitializeSE();
if (mSecureElementStatus != SecureElementStatus::SUCCESS) {
ALOGE("SecureElement:%s deinitializeSE Failed", __func__);
}
if (internalClientCallback != nullptr) {
internalClientCallback->unlinkToDeath(this);
+ internalClientCallback = nullptr;
}
}
@@ -633,9 +639,10 @@
ALOGD("SecureElement:%s start", __func__);
- if(turnOffSE){
+ if(checkSeUp){
if (se_gto_close(ctx) < 0) {
mSecureElementStatus = SecureElementStatus::FAILED;
+ internalClientCallback->onStateChange(false);
} else {
ctx = NULL;
mSecureElementStatus = SecureElementStatus::SUCCESS;
@@ -643,7 +650,6 @@
nbrOpenChannel = 0;
}
checkSeUp = false;
- turnOffSE = false;
}else{
ALOGD("SecureElement:%s No need to deinitialize SE", __func__);
mSecureElementStatus = SecureElementStatus::SUCCESS;
diff --git a/secure_element/1.0/SecureElement.h b/secure_element/1.0/SecureElement.h
index 69e308e..79720df 100644
--- a/secure_element/1.0/SecureElement.h
+++ b/secure_element/1.0/SecureElement.h
@@ -49,7 +49,6 @@
uint8_t nbrOpenChannel = 0;
bool isBasicChannelOpen = false;
bool checkSeUp = false;
- bool turnOffSE = true;
uint8_t atr[32];
uint8_t atr_size;
char config_filename[100];
diff --git a/secure_element/1.1/GtoService.cpp b/secure_element/1.1/GtoService.cpp
index a1157b7..5aeca90 100644
--- a/secure_element/1.1/GtoService.cpp
+++ b/secure_element/1.1/GtoService.cpp
@@ -27,7 +27,7 @@
int main() {
ALOGD("android::hardware::secure_element::V1_1 is starting.");
- ALOGD("Thales Secure Element HAL for eSE2 Service 1.4.0 is starting. libse-gto v1.13");
+ ALOGD("Thales Secure Element HAL for eSE2 Service 1.5.0 is starting. libse-gto v1.13");
sp<ISecureElement> se_service = new SecureElement("eSE1");
configureRpcThreadpool(1, true);
status_t status = se_service->registerAsService("eSE1");
diff --git a/secure_element/1.1/GtoService_ese2.cpp b/secure_element/1.1/GtoService_ese2.cpp
index 6f0efdf..2ff983e 100644
--- a/secure_element/1.1/GtoService_ese2.cpp
+++ b/secure_element/1.1/GtoService_ese2.cpp
@@ -27,7 +27,7 @@
int main() {
ALOGD("android::hardware::secure_element::V1_1 is starting.");
- ALOGD("Thales Secure Element HAL for eSE2 Service 1.4.0 is starting. libse-gto v1.13");
+ ALOGD("Thales Secure Element HAL for eSE2 Service 1.5.0 is starting. libse-gto v1.13");
sp<ISecureElement> se_service = new SecureElement("eSE2");
configureRpcThreadpool(1, true);
status_t status = se_service->registerAsService("eSE2");
diff --git a/secure_element/1.1/SecureElement.cpp b/secure_element/1.1/SecureElement.cpp
index 6ad56ba..8e5bceb 100644
--- a/secure_element/1.1/SecureElement.cpp
+++ b/secure_element/1.1/SecureElement.cpp
@@ -83,11 +83,16 @@
sp<V1_1::ISecureElementHalCallback> SecureElement::internalClientCallback_v1_1 = nullptr;
int SecureElement::initializeSE() {
- //struct settings *settings;
int n;
ALOGD("SecureElement:%s start", __func__);
+ if (checkSeUp) {
+ ALOGD("SecureElement:%s Already initialized", __func__);
+ ALOGD("SecureElement:%s end", __func__);
+ return EXIT_SUCCESS;
+ }
+
if (se_gto_new(&ctx) < 0) {
ALOGE("SecureElement:%s se_gto_new FATAL:%s", __func__,strerror(errno));
@@ -104,17 +109,12 @@
}
if (resetSE() < 0) {
+ se_gto_close(ctx);
+ ctx = NULL;
return EXIT_FAILURE;
}
checkSeUp = true;
- turnOffSE = false;
-
-
- if(internalClientCallback_v1_1 != nullptr) internalClientCallback_v1_1->onStateChange_1_1(true, "SE Initialized");
- else internalClientCallback->onStateChange(true);
-
- turnOffSE = true;
ALOGD("SecureElement:%s end", __func__);
return EXIT_SUCCESS;
@@ -124,7 +124,7 @@
ALOGD("SecureElement:%s start", __func__);
if (clientCallback == nullptr) {
- ALOGD("SecureElement:%s clientCallback == nullptr", __func__);
+ ALOGE("SecureElement:%s clientCallback == nullptr", __func__);
return Void();
} else {
internalClientCallback = clientCallback;
@@ -137,11 +137,11 @@
if (initializeSE() != EXIT_SUCCESS) {
ALOGE("SecureElement:%s initializeSE Failed", __func__);
clientCallback->onStateChange(false);
+ } else {
+ ALOGD("SecureElement:%s initializeSE Success", __func__);
+ clientCallback->onStateChange(true);
}
- if (deinitializeSE() != SecureElementStatus::SUCCESS) {
- ALOGE("SecureElement:%s deinitializeSE Failed", __func__);
- }
ALOGD("SecureElement:%s end", __func__);
return Void();
@@ -151,7 +151,7 @@
ALOGD("SecureElement:%s start", __func__);
if (clientCallback == nullptr) {
- ALOGD("SecureElement:%s clientCallback == nullptr", __func__);
+ ALOGE("SecureElement:%s clientCallback == nullptr", __func__);
return Void();
} else {
internalClientCallback = nullptr;
@@ -163,12 +163,12 @@
if (initializeSE() != EXIT_SUCCESS) {
ALOGE("SecureElement:%s initializeSE Failed", __func__);
- clientCallback->onStateChange_1_1(false, "initializeSE Failed");
+ clientCallback->onStateChange_1_1(false, "SE Initialized failed");
+ } else {
+ ALOGD("SecureElement:%s initializeSE Success", __func__);
+ clientCallback->onStateChange_1_1(true, "SE Initialized");
}
- if (deinitializeSE() != SecureElementStatus::SUCCESS) {
- ALOGE("SecureElement:%s deinitializeSE Failed", __func__);
- }
ALOGD("SecureElement:%s end", __func__);
return Void();
@@ -235,6 +235,12 @@
if (!checkSeUp) {
if (initializeSE() != EXIT_SUCCESS) {
ALOGE("SecureElement:%s: Failed to re-initialise the eSE HAL", __func__);
+ if(internalClientCallback_v1_1 != nullptr) {
+ internalClientCallback_v1_1->onStateChange_1_1(false, "SE Initialized failed");
+ }
+ else {
+ internalClientCallback->onStateChange(false);
+ }
_hidl_cb(resApduBuff, SecureElementStatus::IOERROR);
return Void();
}
@@ -386,6 +392,12 @@
if (!checkSeUp) {
if (initializeSE() != EXIT_SUCCESS) {
ALOGE("SecureElement:%s: Failed to re-initialise the eSE HAL", __func__);
+ if(internalClientCallback_v1_1 != nullptr) {
+ internalClientCallback_v1_1->onStateChange_1_1(false, "SE Initialized failed");
+ }
+ else {
+ internalClientCallback->onStateChange(false);
+ }
_hidl_cb(result, SecureElementStatus::IOERROR);
return Void();
}
@@ -648,7 +660,7 @@
}
void SecureElement::serviceDied(uint64_t, const wp<IBase>&) {
- ALOGE("SecureElement:%s SecureElement serviceDied", __func__);
+ ALOGD("SecureElement:%s SecureElement serviceDied", __func__);
SecureElementStatus mSecureElementStatus = deinitializeSE();
if (mSecureElementStatus != SecureElementStatus::SUCCESS) {
ALOGE("SecureElement:%s deinitializeSE Failed", __func__);
@@ -669,9 +681,14 @@
ALOGD("SecureElement:%s start", __func__);
- if(turnOffSE){
+ if(checkSeUp){
if (se_gto_close(ctx) < 0) {
mSecureElementStatus = SecureElementStatus::FAILED;
+ if (internalClientCallback_v1_1 != nullptr) {
+ internalClientCallback_v1_1->onStateChange_1_1(false, "SE Initialized failed");
+ } else {
+ internalClientCallback->onStateChange(false);
+ }
} else {
ctx = NULL;
mSecureElementStatus = SecureElementStatus::SUCCESS;
@@ -679,8 +696,6 @@
nbrOpenChannel = 0;
}
checkSeUp = false;
- turnOffSE = false;
-
}else{
ALOGD("SecureElement:%s No need to deinitialize SE", __func__);
mSecureElementStatus = SecureElementStatus::SUCCESS;
diff --git a/secure_element/1.1/SecureElement.h b/secure_element/1.1/SecureElement.h
index 2cf4380..52f9a23 100644
--- a/secure_element/1.1/SecureElement.h
+++ b/secure_element/1.1/SecureElement.h
@@ -52,7 +52,6 @@
uint8_t nbrOpenChannel = 0;
bool isBasicChannelOpen = false;
bool checkSeUp = false;
- bool turnOffSE = true;
uint8_t atr[32];
uint8_t atr_size;
char config_filename[100];
diff --git a/secure_element/1.2/GtoService.cpp b/secure_element/1.2/GtoService.cpp
index 69cc3f4..54d9732 100644
--- a/secure_element/1.2/GtoService.cpp
+++ b/secure_element/1.2/GtoService.cpp
@@ -27,7 +27,7 @@
int main() {
ALOGD("android::hardware::secure_element::V1_2 is starting.");
- ALOGD("Thales Secure Element HAL for eSE1 Service 1.4.0 is starting. libse-gto v1.13");
+ ALOGD("Thales Secure Element HAL for eSE1 Service 1.5.0 is starting. libse-gto v1.13");
sp<ISecureElement> se_service = new SecureElement("eSE1");
configureRpcThreadpool(1, true);
status_t status = se_service->registerAsService("eSE1");
diff --git a/secure_element/1.2/GtoService_ese2.cpp b/secure_element/1.2/GtoService_ese2.cpp
index d718d8a..1a8eb84 100644
--- a/secure_element/1.2/GtoService_ese2.cpp
+++ b/secure_element/1.2/GtoService_ese2.cpp
@@ -27,7 +27,7 @@
int main() {
ALOGD("android::hardware::secure_element::V1_2 is starting.");
- ALOGD("Thales Secure Element HAL for eSE2 Service 1.4.0 is starting. libse-gto v1.13");
+ ALOGD("Thales Secure Element HAL for eSE2 Service 1.5.0 is starting. libse-gto v1.13");
sp<ISecureElement> se_service = new SecureElement("eSE2");
configureRpcThreadpool(1, true);
status_t status = se_service->registerAsService("eSE2");
diff --git a/secure_element/1.2/SecureElement.cpp b/secure_element/1.2/SecureElement.cpp
index 77972cb..8cda099 100644
--- a/secure_element/1.2/SecureElement.cpp
+++ b/secure_element/1.2/SecureElement.cpp
@@ -88,11 +88,16 @@
sp<V1_1::ISecureElementHalCallback> SecureElement::internalClientCallback_v1_1 = nullptr;
int SecureElement::initializeSE() {
- //struct settings *settings;
int n;
ALOGD("SecureElement:%s start", __func__);
+ if (checkSeUp) {
+ ALOGD("SecureElement:%s Already initialized", __func__);
+ ALOGD("SecureElement:%s end", __func__);
+ return EXIT_SUCCESS;
+ }
+
if (se_gto_new(&ctx) < 0) {
ALOGE("SecureElement:%s se_gto_new FATAL:%s", __func__,strerror(errno));
@@ -109,17 +114,12 @@
}
if (resetSE() < 0) {
+ se_gto_close(ctx);
+ ctx = NULL;
return EXIT_FAILURE;
}
checkSeUp = true;
- turnOffSE = false;
-
-
- if(internalClientCallback_v1_1 != nullptr) internalClientCallback_v1_1->onStateChange_1_1(true, "SE Initialized");
- else internalClientCallback->onStateChange(true);
-
- turnOffSE = true;
ALOGD("SecureElement:%s end", __func__);
return EXIT_SUCCESS;
@@ -129,7 +129,7 @@
ALOGD("SecureElement:%s start", __func__);
if (clientCallback == nullptr) {
- ALOGD("SecureElement:%s clientCallback == nullptr", __func__);
+ ALOGE("SecureElement:%s clientCallback == nullptr", __func__);
return Void();
} else {
internalClientCallback = clientCallback;
@@ -142,11 +142,11 @@
if (initializeSE() != EXIT_SUCCESS) {
ALOGE("SecureElement:%s initializeSE Failed", __func__);
clientCallback->onStateChange(false);
+ } else {
+ ALOGD("SecureElement:%s initializeSE Success", __func__);
+ clientCallback->onStateChange(true);
}
- if (deinitializeSE() != SecureElementStatus::SUCCESS) {
- ALOGE("SecureElement:%s deinitializeSE Failed", __func__);
- }
ALOGD("SecureElement:%s end", __func__);
return Void();
@@ -156,7 +156,7 @@
ALOGD("SecureElement:%s start", __func__);
if (clientCallback == nullptr) {
- ALOGD("SecureElement:%s clientCallback == nullptr", __func__);
+ ALOGE("SecureElement:%s clientCallback == nullptr", __func__);
return Void();
} else {
internalClientCallback = nullptr;
@@ -168,12 +168,12 @@
if (initializeSE() != EXIT_SUCCESS) {
ALOGE("SecureElement:%s initializeSE Failed", __func__);
- clientCallback->onStateChange_1_1(false, "initializeSE Failed");
+ clientCallback->onStateChange_1_1(false, "SE Initialized failed");
+ } else {
+ ALOGD("SecureElement:%s initializeSE Success", __func__);
+ clientCallback->onStateChange_1_1(true, "SE Initialized");
}
- if (deinitializeSE() != SecureElementStatus::SUCCESS) {
- ALOGE("SecureElement:%s deinitializeSE Failed", __func__);
- }
ALOGD("SecureElement:%s end", __func__);
return Void();
@@ -240,6 +240,12 @@
if (!checkSeUp) {
if (initializeSE() != EXIT_SUCCESS) {
ALOGE("SecureElement:%s: Failed to re-initialise the eSE HAL", __func__);
+ if(internalClientCallback_v1_1 != nullptr) {
+ internalClientCallback_v1_1->onStateChange_1_1(false, "SE Initialized failed");
+ }
+ else {
+ internalClientCallback->onStateChange(false);
+ }
_hidl_cb(resApduBuff, SecureElementStatus::IOERROR);
return Void();
}
@@ -391,6 +397,12 @@
if (!checkSeUp) {
if (initializeSE() != EXIT_SUCCESS) {
ALOGE("SecureElement:%s: Failed to re-initialise the eSE HAL", __func__);
+ if(internalClientCallback_v1_1 != nullptr) {
+ internalClientCallback_v1_1->onStateChange_1_1(false, "SE Initialized failed");
+ }
+ else {
+ internalClientCallback->onStateChange(false);
+ }
_hidl_cb(result, SecureElementStatus::IOERROR);
return Void();
}
@@ -653,7 +665,7 @@
}
void SecureElement::serviceDied(uint64_t, const wp<IBase>&) {
- ALOGE("SecureElement:%s SecureElement serviceDied", __func__);
+ ALOGD("SecureElement:%s SecureElement serviceDied", __func__);
SecureElementStatus mSecureElementStatus = deinitializeSE();
if (mSecureElementStatus != SecureElementStatus::SUCCESS) {
ALOGE("SecureElement:%s deinitializeSE Failed", __func__);
@@ -674,9 +686,14 @@
ALOGD("SecureElement:%s start", __func__);
- if(turnOffSE){
+ if(checkSeUp){
if (se_gto_close(ctx) < 0) {
mSecureElementStatus = SecureElementStatus::FAILED;
+ if (internalClientCallback_v1_1 != nullptr) {
+ internalClientCallback_v1_1->onStateChange_1_1(false, "SE Initialized failed");
+ } else {
+ internalClientCallback->onStateChange(false);
+ }
} else {
ctx = NULL;
mSecureElementStatus = SecureElementStatus::SUCCESS;
@@ -684,7 +701,6 @@
nbrOpenChannel = 0;
}
checkSeUp = false;
- turnOffSE = false;
}else{
ALOGD("SecureElement:%s No need to deinitialize SE", __func__);
mSecureElementStatus = SecureElementStatus::SUCCESS;
@@ -708,7 +724,7 @@
}
if (internalClientCallback_v1_1 != nullptr) {
- internalClientCallback_v1_1->onStateChange_1_1(false, "SE deinitialized");
+ internalClientCallback_v1_1->onStateChange_1_1(false, "reset the SE");
} else {
internalClientCallback->onStateChange(false);
}
@@ -725,10 +741,11 @@
ALOGD("SecureElement:%s STResetTool Success", __func__);
if (initializeSE() == EXIT_SUCCESS) {
status = SecureElementStatus::SUCCESS;
- }
- turnOffSE = true;
- if (deinitializeSE() != SecureElementStatus::SUCCESS) {
- ALOGE("SecureElement:%s deinitializeSE Failed", __func__);
+ if (internalClientCallback_v1_1 != nullptr) {
+ internalClientCallback_v1_1->onStateChange_1_1(true, "SE Initialized");
+ } else {
+ internalClientCallback->onStateChange(true);
+ }
}
} else {
ALOGE("SecureElement:%s STResetTool Failed!", __func__);
@@ -737,12 +754,13 @@
dlclose(stdll);
} else {
if (initializeSE() == EXIT_SUCCESS) {
+ if (internalClientCallback_v1_1 != nullptr) {
+ internalClientCallback_v1_1->onStateChange_1_1(true, "SE Initialized");
+ } else {
+ internalClientCallback->onStateChange(true);
+ }
status = SecureElementStatus::SUCCESS;
}
- turnOffSE = true;
- if (deinitializeSE() != SecureElementStatus::SUCCESS) {
- ALOGE("SecureElement:%s deinitializeSE Failed", __func__);
- }
}
ALOGD("SecureElement:%s end", __func__);
diff --git a/secure_element/1.2/SecureElement.h b/secure_element/1.2/SecureElement.h
index 1c2293b..0f3df48 100644
--- a/secure_element/1.2/SecureElement.h
+++ b/secure_element/1.2/SecureElement.h
@@ -53,7 +53,6 @@
uint8_t nbrOpenChannel = 0;
bool isBasicChannelOpen = false;
bool checkSeUp = false;
- bool turnOffSE = true;
uint8_t atr[32];
uint8_t atr_size;
char config_filename[100];