[NFC] NFCAdapter::activeSecureElement impl.
authorMarcin Kaminski <marcin.ka@samsung.com>
Wed, 17 Dec 2014 18:51:05 +0000 (19:51 +0100)
committerMarcin Kaminski <marcin.ka@samsung.com>
Thu, 18 Dec 2014 06:34:22 +0000 (07:34 +0100)
Added support for activeSecureElement attribute in NFCAdapter.
Some logs added in cardEmulationMode attribute handling.

Change-Id: I3209ac80b0f4a04d7480df6b8d15debaf85f3649
Signed-off-by: Marcin Kaminski <marcin.ka@samsung.com>
src/nfc/nfc_adapter.cc
src/nfc/nfc_adapter.h
src/nfc/nfc_api.js
src/nfc/nfc_instance.cc
src/nfc/nfc_instance.h

index 31c5111a18057e79ad4e8d182b201d27c0553c8f..4a8c65b8c65188878d091a3263709332506483b6 100644 (file)
@@ -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
index 11e9dbf69955322d1c7bb264f86e765fa166ddba..a0474e143def0bd26ee956ee197f355139947786 100644 (file)
@@ -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;
index 37f8c64a676fb5ed88a12307359e5b4facf711a6..fc39e9778d22ee295d44f25bd3b9b75594357011 100644 (file)
@@ -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
         }
     });
 };
index b78a96c9c946c8e42de9f911f1b5a8ced8ddb066..9152e5cb19d1a6f59e767f19babafc9d3eacb38e 100644 (file)
@@ -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<std::string>();
+    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) {
 
index 5c56074221284b99544f5013e5371fb4cbcf59de..a91607e50c48a8f22c713712d7446c5ea87d961d 100644 (file)
@@ -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);