From: Lukasz Bardeli Date: Tue, 23 Dec 2014 10:43:44 +0000 (+0100) Subject: [NFC] getCachedMessage implementation X-Git-Tag: submit/tizen_tv/20150603.064601~1^2~683 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=268b58cc4d4a9cb8aa54b61c72093ae395cdf1c3;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git [NFC] getCachedMessage implementation [Verification] Code compiles without errors Change-Id: I9047dd9ecaf828cbcd6bec4985697a4290d5f553 Signed-off-by: Lukasz Bardeli --- diff --git a/src/nfc/nfc_adapter.cc b/src/nfc/nfc_adapter.cc index e2c59019..8cbe3c99 100644 --- a/src/nfc/nfc_adapter.cc +++ b/src/nfc/nfc_adapter.cc @@ -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(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 diff --git a/src/nfc/nfc_adapter.h b/src/nfc/nfc_adapter.h index 5796f85a..e56b4154 100644 --- a/src/nfc/nfc_adapter.h +++ b/src/nfc/nfc_adapter.h @@ -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(); diff --git a/src/nfc/nfc_api.js b/src/nfc/nfc_api.js index b18aba83..de2fd62f 100644 --- a/src/nfc/nfc_api.js +++ b/src/nfc/nfc_api.js @@ -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() { diff --git a/src/nfc/nfc_instance.cc b/src/nfc/nfc_instance.cc index 2fb67892..a1854234 100644 --- a/src/nfc/nfc_instance.cc +++ b/src/nfc/nfc_instance.cc @@ -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(); + NFCAdapter::GetInstance()->GetCachedMessage(result_obj); + ReportSuccess(result, out); + } + catch(const common::PlatformException& ex) { + ReportError(ex, out); + } } void NFCInstance::SetExclusiveModeForTransaction(