diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/phLibNfc.h | 5 | ||||
-rw-r--r-- | src/phLibNfc_SE.c | 64 |
2 files changed, 67 insertions, 2 deletions
diff --git a/src/phLibNfc.h b/src/phLibNfc.h index c2cb6dd..9e4aff1 100644 --- a/src/phLibNfc.h +++ b/src/phLibNfc.h @@ -129,7 +129,10 @@ typedef enum This can be applied to UICC as well as SmartMX*/ phLibNfc_SE_ActModeVirtual=0x02, /**< Enables Virtual Mode communication. This can be applied to UICC as well as SmartMX*/ - phLibNfc_SE_ActModeOff =0x03 /**< Inactivate SE.This means,put SE in in-active state */ + phLibNfc_SE_ActModeOff =0x03, /**< Inactivate SE.This means,put SE in in-active state + This can be applied to UICC as well as SmartMX*/ + phLibNfc_SE_ActModeVirtualVolatile = 0x04 /**< Enabled virtual mode communication for SE through an event + This can be applied to UICC as well as SmartMX*/ }phLibNfc_eSE_ActivationMode; diff --git a/src/phLibNfc_SE.c b/src/phLibNfc_SE.c index 3c271f3..968c239 100644 --- a/src/phLibNfc_SE.c +++ b/src/phLibNfc_SE.c @@ -473,7 +473,6 @@ NFCSTATUS phLibNfc_SE_SetMode ( phLibNfc_Handle hSE_Handle, switch(eActivation_mode) { case phLibNfc_SE_ActModeVirtual: - case phLibNfc_SE_ActModeDefault: { if(hSE_Handle == sSecuredElementInfo[LIBNFC_SE_UICC_INDEX].hSecureElement) { @@ -507,6 +506,69 @@ NFCSTATUS phLibNfc_SE_SetMode ( phLibNfc_Handle hSE_Handle, } } break; + case phLibNfc_SE_ActModeVirtualVolatile: + { + if(hSE_Handle == sSecuredElementInfo[LIBNFC_SE_SMARTMX_INDEX].hSecureElement) + { + eEmulationType = NFC_SMARTMX_EMULATION; + /*Enable the SMX -External reader can see it*/ + pLibContext->sCardEmulCfg.config.smartMxCfg.enableEmulation = TRUE; + pLibContext->sSeContext.eActivatedMode = phLibNfc_SE_ActModeVirtualVolatile; + + Status = phHal4Nfc_Switch_SMX_Mode( + pLibContext->psHwReference, + eSmartMx_Virtual, + phLibNfc_SE_SetMode_cb, + pLibContext + ); + } + else if(hSE_Handle == sSecuredElementInfo[LIBNFC_SE_UICC_INDEX].hSecureElement) + { + eEmulationType = NFC_UICC_EMULATION; + /*Enable the UICC -External reader can see it*/ + pLibContext->sCardEmulCfg.config.uiccEmuCfg.enableUicc = TRUE; + pLibContext->sSeContext.eActivatedMode = phLibNfc_SE_ActModeVirtualVolatile; + + Status = phHal4Nfc_Switch_Swp_Mode( + pLibContext->psHwReference, + eSWP_Switch_On, + phLibNfc_SE_SetMode_cb, + pLibContext + ); + } + else + { + Status = NFCSTATUS_INVALID_HANDLE; + } + } + break; + case phLibNfc_SE_ActModeDefault: + { + if(hSE_Handle == sSecuredElementInfo[LIBNFC_SE_SMARTMX_INDEX].hSecureElement) + { + Status = phHal4Nfc_Switch_SMX_Mode( + pLibContext->psHwReference, + eSmartMx_Default, + phLibNfc_SE_SetMode_cb, + pLibContext + ); + } + else if(hSE_Handle == sSecuredElementInfo[LIBNFC_SE_UICC_INDEX].hSecureElement) + { + Status = phHal4Nfc_Switch_Swp_Mode( + pLibContext->psHwReference, + eSWP_Switch_Default, + phLibNfc_SE_SetMode_cb, + pLibContext + ); + } + else + { + Status = NFCSTATUS_INVALID_HANDLE; + } + } + break; + case phLibNfc_SE_ActModeWired: { if(hSE_Handle == sSecuredElementInfo[LIBNFC_SE_SMARTMX_INDEX].hSecureElement) |