2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
22 #include <Commons/Exception.h>
24 #include "NFCTagMifareClassic.h"
33 using namespace Api::NFC;
34 using namespace WrtDeviceApis;
38 * Callback method called by platform as interval time.
39 * @param event_type Platform magnetic evet type
40 * @param event Platform sensor event data
41 * @param this_ User data pointer.
43 static void MifareClassicAuthenticateWithKeyACallback(nfc_error_e result , void * data) {
44 LogDebug("Callback MifareClassicAuthenticateWithKeyACallback. result : " << result);
46 ((NFCTagMifareClassic *)data)->authenticateWithKeyAManualAnswer((int) result);
48 LogDebug("Error! MifareClassicAuthenticateWithKeyACallback is Null.");
52 static void MifareClassicAuthenticateWithKeyBCallback(nfc_error_e result , void * data) {
53 LogDebug("Callback MifareClassicAuthenticateWithKeyBCallback. result : " << result);
55 ((NFCTagMifareClassic *)data)->authenticateWithKeyBManualAnswer((int)result);
57 LogDebug("Error! MifareClassicAuthenticateWithKeyBCallback is Null.");
61 static void MifareClassicReadBlockCallback(nfc_error_e result , unsigned char * buffer, int buffer_size, void * data) {
62 LogDebug("Callback MifareClassicReadBlockCallback. result : " << result);
66 ((NFCTagMifareClassic *)data)->readBlockManualAnswer((int)result, Util.toVector(buffer, buffer_size));
68 LogDebug("Error! MifareClassicReadBlockCallback is Null.");
72 static void MifareClassicWriteBlockCallback(nfc_error_e result , void * data) {
73 LogDebug("Callback MifareClassicAuthenticateWithKeyACallback. result : " << result);
75 ((NFCTagMifareClassic *)data)->writeBlockManualAnswer((int)result);
77 LogDebug("Error! MifareClassicAuthenticateWithKeyACallback is Null.");
81 static void MifareClassicIncrementBlockValueCallback(nfc_error_e result , void * data) {
82 LogDebug("Callback MifareClassicIncrementBlockValueCallback. result : " << result);
84 ((NFCTagMifareClassic *)data)->incrementBlockValueManualAnswer((int)result);
86 LogDebug("Error! MifareClassicIncrementBlockValueCallback is Null.");
90 static void MifareClassicDecrementBlockValueCallback(nfc_error_e result , void * data) {
91 LogDebug("Callback MifareClassicDecrementBlockValueCallback. result : " << result);
93 ((NFCTagMifareClassic *)data)->decrementBlockValueManualAnswer((int)result );
95 LogDebug("Error! MifareClassicDecrementBlockValueCallback is Null.");
99 static void MifareClassicTransferManualAnswerCallback(nfc_error_e result , void * data) {
100 LogDebug("Callback MifareClassicTransferManualAnswerCallback. result : " << result);
102 ((NFCTagMifareClassic *)data)->transferManualAnswer((int)result );
104 LogDebug("Error! MifareClassicTransferManualAnswerCallback is Null.");
108 static void MifareClassicRestoreManualAnswerCallback(nfc_error_e result , void * data) {
109 LogDebug("Callback MifareClassicRestoreCallback. result : " << result);
111 ((NFCTagMifareClassic *)data)->restoreManualAnswer((int)result );
113 LogDebug("Error! MifareClassicRestoreCallback is Null.");
118 NFCTagMifareClassic::NFCTagMifareClassic(void *tagHandle)
122 if (tagHandle == NULL)
123 ThrowMsg(Commons::PlatformException, "Tag Handler is Null Pointer.");
125 handle = (nfc_tag_h)tagHandle;
128 NFCTagMifareClassic::~NFCTagMifareClassic()
134 void NFCTagMifareClassic::authenticateWithKeyA(const EventTagMifareClassicAuthenticateWithKeyAPtr& event) {
136 EventRequestReceiver<EventTagMifareClassicAuthenticateWithKeyA>::PostRequest(event);
139 void NFCTagMifareClassic::authenticateWithKeyB(const EventTagMifareClassicAuthenticateWithKeyBPtr& event) {
141 EventRequestReceiver<EventTagMifareClassicAuthenticateWithKeyB>::PostRequest(event);
144 void NFCTagMifareClassic::readBlock(const EventTagMifareClassicReadBlockPtr& event) {
146 EventRequestReceiver<EventTagMifareClassicReadBlock>::PostRequest(event);
149 void NFCTagMifareClassic::writeBlock(const EventTagMifareClassicWriteBlockPtr& event) {
151 EventRequestReceiver<EventTagMifareClassicWriteBlock>::PostRequest(event);
154 void NFCTagMifareClassic::incrementBlockValue(const EventTagMifareClassicIncrementBlockValuePtr& event) {
156 EventRequestReceiver<EventTagMifareClassicIncrementBlockValue>::PostRequest(event);
159 void NFCTagMifareClassic::decrementBlockValue(const EventTagMifareClassicDecrementBlockValuePtr& event) {
161 EventRequestReceiver<EventTagMifareClassicDecrementBlockValue>::PostRequest(event);
163 void NFCTagMifareClassic::transfer(const EventTagMifareClassicTransferPtr& event) {
165 EventRequestReceiver<EventTagMifareClassicTransfer>::PostRequest(event);
168 void NFCTagMifareClassic::restore(const EventTagMifareClassicRestorePtr& event) {
170 EventRequestReceiver<EventTagMifareClassicRestore>::PostRequest(event);
173 void NFCTagMifareClassic::authenticateWithKeyAManualAnswer(int result )
176 if ((nfc_error_e)result == NFC_ERROR_NONE) {
177 m_EventTagMifareClassicAuthenticateWithKeyAPtr->setResult(TRUE);
179 m_EventTagMifareClassicAuthenticateWithKeyAPtr->setResult(FALSE);
181 EventRequestReceiver<EventTagMifareClassicAuthenticateWithKeyA>::ManualAnswer(m_EventTagMifareClassicAuthenticateWithKeyAPtr);
184 void NFCTagMifareClassic::authenticateWithKeyBManualAnswer(int result )
187 if ((nfc_error_e)result == NFC_ERROR_NONE) {
188 m_EventTagMifareClassicAuthenticateWithKeyBPtr->setResult(TRUE);
190 m_EventTagMifareClassicAuthenticateWithKeyBPtr->setResult(FALSE);
192 EventRequestReceiver<EventTagMifareClassicAuthenticateWithKeyB>::ManualAnswer(m_EventTagMifareClassicAuthenticateWithKeyBPtr);
195 void NFCTagMifareClassic::readBlockManualAnswer(int result , std::vector<unsigned char> data )
198 if ((nfc_error_e)result == NFC_ERROR_NONE) {
199 m_EventTagMifareClassicReadBlockPtr->setResult(TRUE);
200 m_EventTagMifareClassicReadBlockPtr->setBlockData(data);
202 m_EventTagMifareClassicReadBlockPtr->setResult(FALSE);
204 EventRequestReceiver<EventTagMifareClassicReadBlock>::ManualAnswer(m_EventTagMifareClassicReadBlockPtr);
207 void NFCTagMifareClassic::writeBlockManualAnswer(int result )
210 if ((nfc_error_e)result == NFC_ERROR_NONE) {
211 m_EventTagMifareClassicWriteBlockPtr->setResult(TRUE);
213 m_EventTagMifareClassicWriteBlockPtr->setResult(FALSE);
215 EventRequestReceiver<EventTagMifareClassicWriteBlock>::ManualAnswer(m_EventTagMifareClassicWriteBlockPtr);
218 void NFCTagMifareClassic::incrementBlockValueManualAnswer(int result )
221 if ((nfc_error_e)result == NFC_ERROR_NONE) {
222 m_EventTagMifareClassicIncrementBlockValuePtr->setResult(TRUE);
224 m_EventTagMifareClassicIncrementBlockValuePtr->setResult(FALSE);
226 EventRequestReceiver<EventTagMifareClassicIncrementBlockValue>::ManualAnswer(m_EventTagMifareClassicIncrementBlockValuePtr);
229 void NFCTagMifareClassic::decrementBlockValueManualAnswer(int result )
232 if ((nfc_error_e)result == NFC_ERROR_NONE) {
233 m_EventTagMifareClassicDecrementBlockValuePtr->setResult(TRUE);
235 m_EventTagMifareClassicDecrementBlockValuePtr->setResult(FALSE);
237 EventRequestReceiver<EventTagMifareClassicDecrementBlockValue>::ManualAnswer(m_EventTagMifareClassicDecrementBlockValuePtr);
240 void NFCTagMifareClassic::transferManualAnswer(int result )
243 if ((nfc_error_e)result == NFC_ERROR_NONE) {
244 m_EventTagMifareClassicTransferPtr->setResult(TRUE);
246 m_EventTagMifareClassicTransferPtr->setResult(FALSE);
248 EventRequestReceiver<EventTagMifareClassicTransfer>::ManualAnswer(m_EventTagMifareClassicTransferPtr);
251 void NFCTagMifareClassic::restoreManualAnswer(int result )
254 if ((nfc_error_e)result == NFC_ERROR_NONE) {
255 m_EventTagMifareClassicRestorePtr->setResult(TRUE);
257 m_EventTagMifareClassicRestorePtr->setResult(FALSE);
259 EventRequestReceiver<EventTagMifareClassicRestore>::ManualAnswer(m_EventTagMifareClassicRestorePtr);
262 void NFCTagMifareClassic::OnRequestReceived(const EventTagMifareClassicAuthenticateWithKeyAPtr& event) {
264 event->switchToManualAnswer();
266 m_EventTagMifareClassicAuthenticateWithKeyAPtr = event;
269 if( nfc_mifare_authenticate_with_keyA(handle, event->getSectorIndex(), Util.toCharPtr(event->getKey()), MifareClassicAuthenticateWithKeyACallback, this) != NFC_ERROR_NONE )
271 ThrowMsg(Commons::UnknownException, "call back set error");
274 catch (const Commons::Exception& ex) {
275 LogError("Exception: " << ex.GetMessage());
276 event->setResult(false);
278 EventRequestReceiver<EventTagMifareClassicAuthenticateWithKeyA>::ManualAnswer(event);
283 void NFCTagMifareClassic::OnRequestReceived(const EventTagMifareClassicAuthenticateWithKeyBPtr& event) {
285 event->switchToManualAnswer();
287 m_EventTagMifareClassicAuthenticateWithKeyBPtr = event;
289 if( nfc_mifare_authenticate_with_keyB(handle, event->getSectorIndex(), Util.toCharPtr(event->getKey()), MifareClassicAuthenticateWithKeyBCallback, this) != NFC_ERROR_NONE )
291 ThrowMsg(Commons::UnknownException, "call back set error");
294 catch (const Commons::Exception& ex) {
295 LogError("Exception: " << ex.GetMessage());
296 event->setResult(false);
298 EventRequestReceiver<EventTagMifareClassicAuthenticateWithKeyB>::ManualAnswer(event);
303 void NFCTagMifareClassic::OnRequestReceived(const EventTagMifareClassicReadBlockPtr& event) {
305 event->switchToManualAnswer();
307 m_EventTagMifareClassicReadBlockPtr = event;
309 if( nfc_mifare_read_block(handle, event->getIndex(), MifareClassicReadBlockCallback, this) != NFC_ERROR_NONE )
311 ThrowMsg(Commons::UnknownException, "call back set error");
314 catch (const Commons::Exception& ex) {
315 LogError("Exception: " << ex.GetMessage());
316 event->setResult(false);
318 EventRequestReceiver<EventTagMifareClassicReadBlock>::ManualAnswer(event);
323 void NFCTagMifareClassic::OnRequestReceived(const EventTagMifareClassicWriteBlockPtr& event) {
325 event->switchToManualAnswer();
327 m_EventTagMifareClassicWriteBlockPtr = event;
330 std::vector<unsigned char> data = event->getBlockData();
331 if( nfc_mifare_write_block(handle, event->getIndex(), Util.toCharPtr(data), data.size(), MifareClassicWriteBlockCallback, this) != NFC_ERROR_NONE )
333 ThrowMsg(Commons::UnknownException, "call back set error");
336 catch (const Commons::Exception& ex) {
337 LogError("Exception: " << ex.GetMessage());
338 event->setResult(false);
340 EventRequestReceiver<EventTagMifareClassicWriteBlock>::ManualAnswer(event);
345 void NFCTagMifareClassic::OnRequestReceived(const EventTagMifareClassicIncrementBlockValuePtr& event) {
347 event->switchToManualAnswer();
349 m_EventTagMifareClassicIncrementBlockValuePtr = event;
351 if( nfc_mifare_increment(handle, event->getIndex(), event->getValue(), MifareClassicIncrementBlockValueCallback, this) != NFC_ERROR_NONE )
353 ThrowMsg(Commons::UnknownException, "call back set error");
356 catch (const Commons::Exception& ex) {
357 LogError("Exception: " << ex.GetMessage());
358 event->setResult(false);
360 EventRequestReceiver<EventTagMifareClassicIncrementBlockValue>::ManualAnswer(event);
365 void NFCTagMifareClassic::OnRequestReceived(const EventTagMifareClassicDecrementBlockValuePtr& event) {
367 event->switchToManualAnswer();
369 m_EventTagMifareClassicDecrementBlockValuePtr = event;
372 if( nfc_mifare_decrement(handle, event->getIndex(), event->getValue(), MifareClassicDecrementBlockValueCallback, this) != NFC_ERROR_NONE )
374 ThrowMsg(Commons::UnknownException, "call back set error");
377 catch (const Commons::Exception& ex) {
378 LogError("Exception: " << ex.GetMessage());
379 event->setResult(false);
381 EventRequestReceiver<EventTagMifareClassicDecrementBlockValue>::ManualAnswer(event);
386 void NFCTagMifareClassic::OnRequestReceived(const EventTagMifareClassicTransferPtr& event) {
388 event->switchToManualAnswer();
390 m_EventTagMifareClassicTransferPtr = event;
392 if( nfc_mifare_transfer(handle, event->getIndex(), MifareClassicTransferManualAnswerCallback, this) != NFC_ERROR_NONE )
394 ThrowMsg(Commons::UnknownException, "call back set error");
397 catch (const Commons::Exception& ex) {
398 LogError("Exception: " << ex.GetMessage());
399 event->setResult(false);
401 EventRequestReceiver<EventTagMifareClassicTransfer>::ManualAnswer(event);
406 void NFCTagMifareClassic::OnRequestReceived(const EventTagMifareClassicRestorePtr& event) {
408 event->switchToManualAnswer();
410 m_EventTagMifareClassicRestorePtr = event;
412 if( nfc_mifare_restore(handle, event->getIndex(), MifareClassicRestoreManualAnswerCallback, this) != NFC_ERROR_NONE )
414 ThrowMsg(Commons::UnknownException, "call back set error");
417 catch (const Commons::Exception& ex) {
418 LogError("Exception: " << ex.GetMessage());
419 event->setResult(false);
421 EventRequestReceiver<EventTagMifareClassicRestore>::ManualAnswer(event);