2 // Tizen Web Device API
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://www.apache.org/licenses/LICENSE-2.0
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
18 #include <dpl/scoped_ptr.h>
19 #include <Commons/Exception.h>
20 #include <JSTizenException.h>
22 #include "NFCDefaultAdapter.h"
23 #include "NFCAdapter.h"
31 NFCAdapter::NFCAdapter() {
32 LoggerD("NFCAdapter");
33 if (!NFCDefaultAdapterSingleton::Instance().isSupported())
34 ThrowMsg(UnsupportedException, "Not Support");
36 m_NFCTagEmitterPtr.Reset();
37 m_NFCTargetEmitterPtr.Reset();
39 m_EventNFCChangedSetPoweredPtr.Reset();
42 NFCAdapter::~NFCAdapter() {
46 m_EventNFCChangedSetPoweredPtr.Reset();
49 int NFCAdapter::setTagListener(const EventNFCChangedEmitterPtr& emitter, const TagFilterPtr& filter) {
50 LoggerD(" NFCAdapter::setTagListener Entered");
51 if (m_NFCTagEmitterPtr.Get() != NULL)
52 ThrowMsg(PlatformException, "It has already set Tag Listener");
54 m_NFCTagEmitterPtr = emitter;
57 return NFCDefaultAdapterSingleton::Instance().setTagListener(this);
60 int NFCAdapter::setPeerListener(const EventNFCChangedEmitterPtr& emitter) {
61 LoggerD(" NFCAdapter::setPeerListener Entered");
63 if (m_NFCTargetEmitterPtr.Get() != NULL)
64 ThrowMsg(PlatformException, "It has already set Peer Listener");
66 m_NFCTargetEmitterPtr = emitter;
67 return NFCDefaultAdapterSingleton::Instance().setPeerListener(this);
69 void NFCAdapter::unsetTagListener() {
70 LoggerD(" NFCAdapter::unsetTagListener Entered");
71 m_NFCTagEmitterPtr.Reset();
73 NFCDefaultAdapterSingleton::Instance().unsetTagListener(this);
76 void NFCAdapter::unsetPeerListener() {
77 LoggerD(" NFCAdapter::unsetPeerListener Entered");
78 m_NFCTargetEmitterPtr.Reset();
79 NFCDefaultAdapterSingleton::Instance().unsetPeerListener(this);
82 void NFCAdapter::NFCTagHasDetected(void *props)
84 if (m_NFCTagEmitterPtr.Get() != NULL) {
85 if ((props != NULL) && (m_tagFilter->getFilterSize() > 0)) {
86 nfc_tag_type_e tagType;
88 if (nfc_tag_get_type((nfc_tag_h)props, &tagType) == NFC_ERROR_NONE) {
89 LoggerD("NFCAdapter::NFCTagHasDetected Tag real type : " << tagType);
91 for (cnt = 0; cnt < m_tagFilter->getFilterSize(); cnt++) {
93 if (util.convertTonfcTagType(static_cast<unsigned short>(tagType)) == m_tagFilter->getFilterValue(cnt))
96 if (cnt == m_tagFilter->getFilterSize()) {
97 LoggerD("Filter doesn't have this tag type ");
101 LoggerD("It can't get real nfc tag type");
103 for (cnt = 0; cnt < m_tagFilter->getFilterSize(); cnt++) {
104 if (NFC_TAGTYPE_GENERIC_PICC == m_tagFilter->getFilterValue(cnt))
108 if (cnt == m_tagFilter->getFilterSize()) {
109 LoggerD("Filter doesn't have this tag type ");
115 EventNFCChangedPtr event(new EventNFCChanged());
117 event->setNFCStatus(NFC_DETATCHED);
119 event->setNFCStatus(NFC_ATTATCHED);
121 event->setNFCProperties(props);
122 event->setNFCType(NFC_TAG_TYPE);
123 LoggerD("emit event with nfc tag info");
124 m_NFCTagEmitterPtr->emit(event);
128 void NFCAdapter::NFCTargetHasDetected(void *props)
130 if (m_NFCTargetEmitterPtr.Get() != NULL) {
131 EventNFCChangedPtr event(new EventNFCChanged());
133 event->setNFCStatus(NFC_DETATCHED);
135 event->setNFCStatus(NFC_ATTATCHED);
136 event->setNFCProperties(props);
137 event->setNFCType(NFC_TARGET_TYPE);
138 LoggerD("emit event with nfc target info");
139 m_NFCTargetEmitterPtr->emit(event);
143 void *NFCAdapter::getCachedMessage() {
144 return NFCDefaultAdapterSingleton::Instance().getCachedMessage();
147 bool NFCAdapter::getPowerState() {
148 return NFCDefaultAdapterSingleton::Instance().getPowerState();
151 void NFCAdapter::setPowered(const EventNFCChangedSetPoweredPtr& event) {
153 EventRequestReceiver<EventNFCChangedSetPowered>::PostRequest(event);
156 void NFCAdapter::OnRequestReceived(const EventNFCChangedSetPoweredPtr& event) {
157 if (getPowerState() == event->getState()) {
158 event->setResult(true);
161 if (m_EventNFCChangedSetPoweredPtr.Get() !=NULL) {
162 event->setResult(false);
163 event->setError(DeviceAPI::Common::JSTizenException::SERVICE_NOT_AVAILABLE);
164 event->setErrorMessage("Progressing Identical Operation");
168 event->switchToManualAnswer();
169 m_EventNFCChangedSetPoweredPtr = event;
171 NFCDefaultAdapterSingleton::Instance().setPowered(event->getState(), this);
173 } Catch(PlatformException) {
174 LoggerE("Exception: " << _rethrown_exception.GetMessage());
175 event->setResult(false);
176 event->setError(DeviceAPI::Common::JSTizenException::SERVICE_NOT_AVAILABLE);
177 event->setErrorMessage("Progressing Identical Operation");
178 EventRequestReceiver<EventNFCChangedSetPowered>::ManualAnswer(event);
179 } Catch(WrtDeviceApis::Commons::Exception) {
180 LoggerE("Exception: " << _rethrown_exception.GetMessage());
181 setPoweredManualAnswer(NFC_ERROR_OPERATION_FAILED);
185 void NFCAdapter::setPoweredManualAnswer(int error) {
186 if (m_EventNFCChangedSetPoweredPtr.Get() != NULL) {
187 EventNFCChangedSetPoweredPtr event = m_EventNFCChangedSetPoweredPtr;
188 m_EventNFCChangedSetPoweredPtr.Reset();
190 if (error == NFC_ERROR_NONE) {
191 event->setResult(true);
194 event->setResult(false);
195 event->setError(util.getNFCErrorString(error));
196 event->setErrorMessage(util.getNFCErrorMessage(error));
198 EventRequestReceiver<EventNFCChangedSetPowered>::ManualAnswer(event);