[NFC] getCachedMessage implementation
authorLukasz Bardeli <l.bardeli@samsung.com>
Tue, 23 Dec 2014 10:43:44 +0000 (11:43 +0100)
committerLukasz Bardeli <l.bardeli@samsung.com>
Wed, 7 Jan 2015 09:58:44 +0000 (10:58 +0100)
[Verification] Code compiles without errors

Change-Id: I9047dd9ecaf828cbcd6bec4985697a4290d5f553
Signed-off-by: Lukasz Bardeli <l.bardeli@samsung.com>
src/nfc/nfc_adapter.cc
src/nfc/nfc_adapter.h
src/nfc/nfc_api.js
src/nfc/nfc_instance.cc

index e2c5901..8cbe3c9 100644 (file)
@@ -593,7 +593,7 @@ static void targetReceivedCallback(nfc_p2p_target_h target, nfc_ndef_message_h m
     obj.insert(make_pair("listenerId", "ReceiveNDEFListener"));
     obj.insert(make_pair("id", static_cast<double>(NFCAdapter::GetInstance()->GetPeerId())));
 
-    //TODO call function which create NDEFMessage object (from nfc_message_utils)
+    NFCMessageUtils::ReportNdefMessageFromData(raw_data, size, obj);
 
     NFCInstance::getInstance().PostMessage(event.serialize().c_str());
     free(raw_data);
@@ -870,7 +870,7 @@ static void tagReadNDEFCb(nfc_error_e result , nfc_ndef_message_h message , void
         free(raw_data);
 
         // create exception and post error message (call error callback)
-        UnknownException ex("Failed to retrieve NDEF message data");
+        auto ex = UnknownException("Failed to retrieve NDEF message data");
         picojson::value event = createEventError(callbackId, ex);
         NFCInstance::getInstance().PostMessage(event.serialize().c_str());
         return;
@@ -1086,5 +1086,41 @@ void NFCAdapter::TagTransceive(int tag_id, const picojson::value& args) {
 
 }
 
+void NFCAdapter::GetCachedMessage(picojson::object& out) {
+
+    nfc_ndef_message_h message_handle = NULL;
+    int result = nfc_manager_get_cached_message(&message_handle);
+    if (NFC_ERROR_INVALID_NDEF_MESSAGE == result ||
+            NFC_ERROR_NO_NDEF_MESSAGE == result) {
+        if (NULL != message_handle) {
+            int err = nfc_ndef_message_destroy(message_handle);
+            if (NFC_ERROR_NONE != err) {
+                LOGE("Failed to free cached message: %d", err);
+            }
+        }
+
+        return;
+    }
+    if (NFC_ERROR_NONE != result) {
+        LOGE("Failed to get cached message: %d", result);
+        NFCUtil::throwNFCException(result, "Failed to get cached message");
+    }
+    unsigned char *raw_data = NULL;
+    unsigned int size;
+    if (NFC_ERROR_NONE != nfc_ndef_message_get_rawdata(message_handle,
+            &raw_data, &size)) {
+        LOGE("Unknown error while getting message.");
+        free(raw_data);
+        return;
+    }
+    NFCMessageUtils::ReportNdefMessageFromData(raw_data, size, out);
+    result = nfc_ndef_message_destroy(message_handle);
+    if (NFC_ERROR_NONE != result) {
+        LOGE("Failed to destroy message: %d", result);
+    }
+    free(raw_data);
+}
+
+
 }// nfc
 }// extension
index 5796f85..e56b415 100644 (file)
@@ -45,6 +45,8 @@ public:
     void RemoveTransactionEventListener(const picojson::value& args);
     void AddActiveSecureElementChangeListener();
     void RemoveActiveSecureElementChangeListener();
+    void GetCachedMessage(picojson::object& out);
+
     void SetPeerHandle(nfc_p2p_target_h handle);
     nfc_p2p_target_h GetPeerHandle();
     int GetPeerId();
index b18aba8..de2fd62 100644 (file)
@@ -502,7 +502,17 @@ NFCAdapter.prototype.removeActiveSecureElementChangeListener = function() {
 };
 
 NFCAdapter.prototype.getCachedMessage = function() {
+    var result = native_.callSync('NFCAdapter_getCachedMessage');
 
+    if (native_.isFailure(result)) {
+        throw new tizen.WebAPIException(0, result.error.message, result.error.name);
+    }
+
+    if (!result.records) {
+        return new tizen.NDEFMessage();
+    }
+
+    return new tizen.NDEFMessage(result.records);
 };
 
 NFCAdapter.prototype.setExclusiveModeForTransaction = function() {
index 2fb6789..a185423 100644 (file)
@@ -312,7 +312,17 @@ void NFCInstance::RemoveActiveSecureElementChangeListener(
 
 void NFCInstance::GetCachedMessage(
         const picojson::value& args, picojson::object& out) {
+    LoggerD("Entered");
+    try {
+        picojson::value result = picojson::value(picojson::object());
+        picojson::object& result_obj = result.get<picojson::object>();
 
+        NFCAdapter::GetInstance()->GetCachedMessage(result_obj);
+        ReportSuccess(result, out);
+    }
+    catch(const common::PlatformException& ex) {
+        ReportError(ex, out);
+    }
 }
 
 void NFCInstance::SetExclusiveModeForTransaction(