From: Marcin Kaminski Date: Wed, 17 Dec 2014 18:51:05 +0000 (+0100) Subject: [NFC] NFCAdapter::activeSecureElement impl. X-Git-Tag: submit/tizen_tv/20150603.064601~1^2~773^2~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=99bf9067ed24effe858a7fd0100f0b4c140f1e33;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git [NFC] NFCAdapter::activeSecureElement impl. Added support for activeSecureElement attribute in NFCAdapter. Some logs added in cardEmulationMode attribute handling. Change-Id: I3209ac80b0f4a04d7480df6b8d15debaf85f3649 Signed-off-by: Marcin Kaminski --- diff --git a/src/nfc/nfc_adapter.cc b/src/nfc/nfc_adapter.cc index 31c5111a..4a8c65b8 100644 --- a/src/nfc/nfc_adapter.cc +++ b/src/nfc/nfc_adapter.cc @@ -207,8 +207,10 @@ void NFCAdapter::SetCardEmulationMode(std::string mode) { LoggerD("Entered"); - nfc_se_card_emulation_mode_type_e newmode = + nfc_se_card_emulation_mode_type_e new_mode = NFCUtil::toCardEmulationMode(mode); + LoggerD("Card emulation mode value: %x", (int)new_mode); + std::string current_mode = GetCardEmulationMode(); if (mode.compare(current_mode) == 0) { @@ -218,7 +220,7 @@ void NFCAdapter::SetCardEmulationMode(std::string mode) { } int ret = NFC_ERROR_NONE; - switch (newmode) { + switch (new_mode) { case NFC_SE_CARD_EMULATION_MODE_OFF: ret = nfc_se_disable_card_emulation(); break; @@ -238,6 +240,41 @@ void NFCAdapter::SetCardEmulationMode(std::string mode) { } } +std::string NFCAdapter::GetActiveSecureElement() { + + LoggerD("Entered"); + + nfc_se_type_e type; + int ret = nfc_manager_get_se_type(&type); + if (NFC_ERROR_NONE != ret) { + LoggerE("Failed to get active secure element type: %d", ret); + NFCUtil::throwNFCException(ret, "Unable to get active secure element type"); + } + + return NFCUtil::toStringSecureElementType(type); +} + +void NFCAdapter::SetActiveSecureElement(std::string element) { + + LoggerD("Entered"); + + // if given value is not correct secure element type then + // there's no sense to get current value for comparison + nfc_se_type_e new_type = NFCUtil::toSecureElementType(element); + LoggerD("Secure element type value: %x", (int)new_type); + + std::string current_type = GetActiveSecureElement(); + if (element == current_type) { + LoggerD("Active secure element type already set to: %s", element.c_str()); + return; + } + + int ret = nfc_manager_set_se_type(new_type); + if (NFC_ERROR_NONE != ret) { + LoggerE("Failed to set active secure element type: %d", ret); + NFCUtil::throwNFCException(ret, "Unable to set active secure element type"); + } +} }// nfc }// extension diff --git a/src/nfc/nfc_adapter.h b/src/nfc/nfc_adapter.h index 11e9dbf6..a0474e14 100644 --- a/src/nfc/nfc_adapter.h +++ b/src/nfc/nfc_adapter.h @@ -24,10 +24,12 @@ public: bool GetPowered(); void SetPowered(const picojson::value& args); -// cardEmulationModer getter and setter +// cardEmulationMode getter and setter std::string GetCardEmulationMode(); void SetCardEmulationMode(std::string mode); - +// activeSecureElement getter and setter + std::string GetActiveSecureElement(); + void SetActiveSecureElement(std::string element); static NFCAdapter* GetInstance(); NFCInstance *xwalk_instance; diff --git a/src/nfc/nfc_api.js b/src/nfc/nfc_api.js index 37f8c64a..fc39e977 100644 --- a/src/nfc/nfc_api.js +++ b/src/nfc/nfc_api.js @@ -109,7 +109,6 @@ function NFCAdapter() { } function cardEmulationModeSetter(cem) { - // "NFCAdapter_cardEmulationModeSetter" var args = validator_.validateArgs(arguments, [ {name: 'emulationMode', type: types_.STRING} @@ -126,6 +125,34 @@ function NFCAdapter() { return; } + function activeSecureElementGetter() { + + var result = native_.callSync('NFCAdapter_activeSecureElementGetter'); + + if (native_.isFailure(result)) { + throw new tizen.WebAPIException(0, result.error.message, result.error.name); + } + + return native_.getResultObject(result); + } + + function activeSecureElementSetter(ase) { + + var args = validator_.validateArgs(arguments, [ + {name: 'secureElement', type: types_.STRING} + ]); + + var result = native_.callSync( + 'NFCAdapter_activeSecureElementSetter', + { 'secureElement': args.secureElement} + ); + + if(native_.isFailure(result)) { + throw new tizen.WebAPIException(0, result.error.message, result.error.name); + } + return; + } + Object.defineProperties(this, { powered: {enumerable: true, set : function(){}, @@ -136,8 +163,8 @@ function NFCAdapter() { get : cardEmulationModeGetter }, activeSecureElement: {enumerable: true, - set : function(){}, - get : function(){} + set : activeSecureElementSetter, + get : activeSecureElementGetter } }); }; diff --git a/src/nfc/nfc_instance.cc b/src/nfc/nfc_instance.cc index b78a96c9..9152e5cb 100644 --- a/src/nfc/nfc_instance.cc +++ b/src/nfc/nfc_instance.cc @@ -33,6 +33,8 @@ NFCInstance::NFCInstance() { REGISTER_SYNC("NFCAdapter_getPowered", GetPowered); REGISTER_SYNC("NFCAdapter_cardEmulationModeSetter", CardEmulationModeSetter); REGISTER_SYNC("NFCAdapter_cardEmulationModeGetter", CardEmulationModeGetter); + REGISTER_SYNC("NFCAdapter_activeSecureElementSetter", ActiveSecureElementSetter); + REGISTER_SYNC("NFCAdapter_activeSecureElementGetter", ActiveSecureElementGetter); REGISTER_SYNC("NFCAdapter_setPeerListener", SetPeerListener); REGISTER_SYNC("NFCAdapter_setTagListener", SetTagListener); REGISTER_SYNC("NFCAdapter_setPeerListener", SetPeerListener); @@ -159,6 +161,32 @@ void NFCInstance::CardEmulationModeGetter( ReportSuccess(picojson::value(mode), out); } +void NFCInstance::ActiveSecureElementSetter( + const picojson::value& args, picojson::object& out) { + + std::string ase = args.get("secureElement").get(); + try { + NFCAdapter::GetInstance()->SetActiveSecureElement(ase); + } + catch(const common::PlatformException& ex) { + ReportError(ex, out); + } + ReportSuccess(out); +} + +void NFCInstance::ActiveSecureElementGetter( + const picojson::value& args, picojson::object& out) { + + std::string ase; + try { + ase = NFCAdapter::GetInstance()->GetActiveSecureElement(); + } + catch(const common::PlatformException& ex) { + ReportError(ex, out); + } + ReportSuccess(picojson::value(ase), out); +} + void NFCInstance::SetTagListener( const picojson::value& args, picojson::object& out) { diff --git a/src/nfc/nfc_instance.h b/src/nfc/nfc_instance.h index 5c560742..a91607e5 100644 --- a/src/nfc/nfc_instance.h +++ b/src/nfc/nfc_instance.h @@ -30,6 +30,8 @@ private: void GetPowered(const picojson::value& args, picojson::object& out); void CardEmulationModeSetter(const picojson::value& args, picojson::object& out); void CardEmulationModeGetter(const picojson::value& args, picojson::object& out); + void ActiveSecureElementSetter(const picojson::value& args, picojson::object& out); + void ActiveSecureElementGetter(const picojson::value& args, picojson::object& out); void SetTagListener(const picojson::value& args, picojson::object& out); void SetPeerListener(const picojson::value& args, picojson::object& out); void UnsetTagListener(const picojson::value& args, picojson::object& out);