summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJinkun Jang <jinkun.jang@samsung.com>2013-03-16 01:13:35 +0900
committerJinkun Jang <jinkun.jang@samsung.com>2013-03-16 01:13:35 +0900
commit51b6def72a4d88d85bb45bdacee47d6afb04c06f (patch)
tree807bca4698e30cba1a8941afb2890bf67fe8de09
parentaf8ecf1fb35eb946701c15aff0fcd84efebed041 (diff)
downloadnfc-manager-neard-51b6def72a4d88d85bb45bdacee47d6afb04c06f.tar.gz
nfc-manager-neard-51b6def72a4d88d85bb45bdacee47d6afb04c06f.tar.bz2
nfc-manager-neard-51b6def72a4d88d85bb45bdacee47d6afb04c06f.zip
merge with master
-rw-r--r--nfc-manager.manifest13
-rw-r--r--packaging/nfc-manager.spec25
-rw-r--r--src/clientlib/CMakeLists.txt1
-rwxr-xr-xsrc/clientlib/include/net_nfc_apdu.h130
-rwxr-xr-xsrc/clientlib/include/net_nfc_client_dispatcher_private.h2
-rwxr-xr-xsrc/clientlib/include/net_nfc_client_ipc_private.h4
-rwxr-xr-xsrc/clientlib/include/net_nfc_internal_se.h168
-rwxr-xr-xsrc/clientlib/net_nfc_client_dispatcher.c84
-rwxr-xr-xsrc/clientlib/net_nfc_client_exchanger.c4
-rwxr-xr-xsrc/clientlib/net_nfc_client_internal_se.c199
-rwxr-xr-xsrc/clientlib/net_nfc_client_ipc.c31
-rwxr-xr-xsrc/clientlib/net_nfc_client_llcp.c24
-rwxr-xr-xsrc/clientlib/net_nfc_client_nfc.c12
-rwxr-xr-xsrc/clientlib/net_nfc_client_tag.c34
-rw-r--r--src/clientlib/net_nfc_client_test.c8
-rw-r--r--src/commonlib/include/net_nfc_oem_controller.h28
-rw-r--r--src/commonlib/include/net_nfc_typedef.h27
-rwxr-xr-xsrc/commonlib/include/net_nfc_typedef_private.h49
-rw-r--r--src/manager/CMakeLists.txt2
-rw-r--r--src/manager/include/net_nfc_controller_private.h17
-rwxr-xr-xsrc/manager/include/net_nfc_server_dispatcher_private.h33
-rwxr-xr-xsrc/manager/include/net_nfc_service_llcp_private.h80
-rw-r--r--src/manager/include/net_nfc_service_private.h37
-rwxr-xr-xsrc/manager/include/net_nfc_service_se_private.h7
-rwxr-xr-xsrc/manager/include/net_nfc_service_tag_private.h33
-rwxr-xr-xsrc/manager/include/net_nfc_service_test_private.h27
-rwxr-xr-xsrc/manager/net_nfc_controller.c64
-rw-r--r--src/manager/net_nfc_server_dispatcher.c874
-rwxr-xr-xsrc/manager/net_nfc_server_ipc.c2
-rw-r--r--src/manager/net_nfc_service.c335
-rwxr-xr-xsrc/manager/net_nfc_service_se.c446
-rwxr-xr-xsrc/manager/net_nfc_service_tag.c139
-rw-r--r--src/manager/net_nfc_service_test.c176
-rw-r--r--src/manager/net_nfc_util_access_control.c50
34 files changed, 1883 insertions, 1282 deletions
diff --git a/nfc-manager.manifest b/nfc-manager.manifest
index ca44b95..ac8bc49 100644
--- a/nfc-manager.manifest
+++ b/nfc-manager.manifest
@@ -1,13 +1,24 @@
<manifest>
<define>
<domain name="nfc-manager" />
+ <provide>
+ <label name="nfc-manager::tag" />
+ <label name="nfc-manager::p2p" />
+ <label name="nfc-manager::admin" />
+ <label name="nfc-manager::card_emul" />
+ </provide>
+ <request>
+ <smack request="sys-assert::core" type="rwxat" />
+ </request>
</define>
<assign>
<filesystem path="/usr/bin/nfc-manager-daemon" exec_label="nfc-manager" />
+ <filesystem path="/etc/init.d/libnfc-manager-0" label="_" exec_label="none" />
+ <filesystem path="/etc/rc.d/rc3.d/S81libnfc-manager-0" label="_" exec_label="none" />
+ <filesystem path="/etc/rc.d/rc5.d/S81libnfc-manager-0" label="_" exec_label="none" />
<filesystem path="/usr/bin/ndef-tool" exec_label="nfc-manager" />
<filesystem path="/usr/lib/libnfc.so.1" label="_" />
<filesystem path="/usr/lib/libnfc.so.1.0.0" label="_" />
- <filesystem path="/etc/init.d/libnfc-manager-0" label="_" exec_label="none"/>
</assign>
<request>
<domain name="nfc-manager" />
diff --git a/packaging/nfc-manager.spec b/packaging/nfc-manager.spec
index 18ad82b..57b6997 100644
--- a/packaging/nfc-manager.spec
+++ b/packaging/nfc-manager.spec
@@ -1,12 +1,13 @@
Name: nfc-manager
Summary: NFC framework manager
-Version: 0.0.33
-Release: 1
+Version: 0.0.37
+Release: 0
Group: libs
License: Flora Software License
Source0: %{name}-%{version}.tar.gz
Source1: libnfc-manager-0.init.in
Source2: nfc-manager.service
+Requires: sys-assert
BuildRequires: pkgconfig(aul)
BuildRequires: pkgconfig(glib-2.0)
BuildRequires: pkgconfig(gobject-2.0)
@@ -27,38 +28,48 @@ BuildRequires: pkgconfig(smartcard-service-common)
BuildRequires: pkgconfig(libssl)
BuildRequires: pkgconfig(pmapi)
BuildRequires: pkgconfig(pkgmgr)
+BuildRequires: pkgconfig(pkgmgr-info)
BuildRequires: cmake
BuildRequires: gettext-tools
Requires(post): /sbin/ldconfig
Requires(post): /usr/bin/vconftool
requires(postun): /sbin/ldconfig
+
+
%description
NFC library Manager.
+
%prep
%setup -q
+
%package devel
Summary: Download agent
Group: Development/Libraries
Requires: %{name} = %{version}-%{release}
+
%description devel
NFC library Manager (devel)
+
%package -n nfc-common-lib
Summary: NFC common library
Group: Development/Libraries
Requires: %{name} = %{version}-%{release}
+
%description -n nfc-common-lib
NFC Common library.
+
%package -n nfc-common-lib-devel
Summary: NFC common library (devel)
Group: libs
Requires: %{name} = %{version}-%{release}
+
%description -n nfc-common-lib-devel
NFC common library (devel)
@@ -71,6 +82,7 @@ LDFLAGS="$LDFLAGS" cmake .. -DCMAKE_INSTALL_PREFIX=%{_prefix}
make
+
%install
cd cmake_tmp
%make_install
@@ -85,6 +97,7 @@ mkdir -p %{buildroot}/usr/lib/systemd/system/multi-user.target.wants
cp -af %{SOURCE2} %{buildroot}/usr/lib/systemd/system/
ln -s ../nfc-manager.service %{buildroot}/usr/lib/systemd/system/multi-user.target.wants/nfc-manager.service
+
%post
/sbin/ldconfig
vconftool set -t bool db/nfc/feature 1 -u 5000 -f
@@ -93,7 +106,6 @@ vconftool set -t bool db/nfc/sbeam 0 -u 5000 -f
vconftool set -t int db/nfc/se_type 0 -u 5000 -f
vconftool set -t bool db/nfc/predefined_item_state 0 -u 5000 -f
vconftool set -t string db/nfc/predefined_item "None" -u 5000 -f
-
vconftool set -t bool memory/private/nfc-manager/popup_disabled 0 -u 5000 -f
ln -s /etc/init.d/libnfc-manager-0 /etc/rc.d/rc3.d/S81libnfc-manager-0 -f
@@ -103,12 +115,12 @@ mkdir -p /opt/etc/nfc_debug
chown :5000 /opt/etc/nfc_debug
chmod 775 /opt/etc/nfc_debug
-
systemctl daemon-reload
if [ $1 == 1 ]; then
systemctl restart nfc-manager.service
fi
+
%postun
/sbin/ldconfig
mkdir -p /etc/rc.d/rc3.d
@@ -121,10 +133,13 @@ if [ $1 == 0 ]; then
fi
systemctl daemon-reload
+
%post -n nfc-common-lib -p /sbin/ldconfig
+
%postun -n nfc-common-lib -p /sbin/ldconfig
+
%files
%manifest nfc-manager.manifest
%defattr(-,root,root,-)
@@ -138,6 +153,7 @@ systemctl daemon-reload
/usr/lib/systemd/system/nfc-manager.service
/usr/lib/systemd/system/multi-user.target.wants/nfc-manager.service
+
%files devel
%manifest nfc-manager-devel.manifest
%defattr(-,root,root,-)
@@ -154,6 +170,7 @@ systemctl daemon-reload
/usr/share/license/nfc-common-lib
/usr/share/nfc-manager-daemon/sounds/*
+
%files -n nfc-common-lib-devel
%manifest nfc-common-lib-devel.manifest
%defattr(-,root,root,-)
diff --git a/src/clientlib/CMakeLists.txt b/src/clientlib/CMakeLists.txt
index 94e0740..849507c 100644
--- a/src/clientlib/CMakeLists.txt
+++ b/src/clientlib/CMakeLists.txt
@@ -81,7 +81,6 @@ SET(CLIENT_HEADER
include/net_nfc_ndef_message_handover.h
include/net_nfc_sign_record.h
include/net_nfc_data.h
- include/net_nfc_apdu.h
include/net_nfc_exchanger.h
include/net_nfc_internal_se.h
include/net_nfc_test.h
diff --git a/src/clientlib/include/net_nfc_apdu.h b/src/clientlib/include/net_nfc_apdu.h
deleted file mode 100755
index 9ca81b7..0000000
--- a/src/clientlib/include/net_nfc_apdu.h
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright (c) 2012, 2013 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Flora License, Version 1.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
-
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-#ifndef __NET_NFC_APDU__
-#define __NET_NFC_APDU__
-
-#include "net_nfc_typedef.h"
-
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-
-typedef unsigned int apdu_slot_t;
-typedef unsigned int apdu_channel_t;
-typedef void (* net_nfc_apdu_response_cb ) (net_nfc_error_e result, apdu_channel_t channel, data_h data, void* user_data);
-
-/**
-@addtogroup NET_NFC_MANAGER_APDU
-@{
-
-*/
-
-/**
- initialize the apdu api. the callback function will be called when the data is arrived from simcard or SE
-
- @param[in] callback callback function
- @param[in] user_data context value that will be delivered to the callback function
-
- @return return the result of the calling the function
-*/
-net_nfc_error_e net_nfc_register_apdu_cb (net_nfc_apdu_response_cb callback, void * user_data);
-
-/**
-
- allows to select the slot. UICC or SE
-
- <ul>
- <li> slot# 0 : UICC <\li>
- <li> slot# 1 : Secure Element<\li>
- </ul>
-
- @param[in] slot slot for mms
-
- @return return the result of the calling the function
-*/
-net_nfc_error_e net_nfc_select_apdu_slot (apdu_slot_t slot);
-
-/**
- Answer to reset is the sequence of bytes output by a chip card after the card reader has electrically reset the card.
- The ATR tells the reader which communication capabilities the card has. The format of the ATR is defined in ISO/IEC 7816-3.[1]
- this function return ATR data if the simcard is available, or NULL will be returned
-
- @param[out] data ATR data will be returned if the simcard is available.
-
- @return return the result of the calling the function
-
-*/
-net_nfc_error_e net_nfc_get_apdu_answer_to_reset (data_h data);
-
-/**
- this opens a channel to communicate with application on the simcard.
- you may open the channel with
-
- @param[out] channel return the assined chennel
- @param[in] aid application id that mached in the simcard application
-
- @return return the result of the calling the function
-
-*/
-net_nfc_error_e net_nfc_open_apdu_channel (apdu_channel_t *channel , net_nfc_string_t aid);
-
-/**
- send the apud data to opened channel.
-
- @param[in] channel channel number that already opened
- @param[in] data data value that will be send
-
- @return return the result of the calling the function
-*/
-net_nfc_error_e net_nfc_send_apdu_command (apdu_channel_t channel, data_t data);
-
-/**
- closes opened channel
-
- @param[in] channel channel number
-
- @return return the result of the calling the function
-*/
-net_nfc_error_e net_nfc_close_apdu_channel (apdu_channel_t channel);
-
-/**
- disconnect all the channel and return to original state. it stops calling callback function
-
- @return return the result of the calling the function
-
- @exception NET_NFC_NOT_REGISTERED unset is requested but the callback was not registered before
-*/
-net_nfc_error_e net_nfc_unset_apdu_cb (void);
-
-
-/**
-@}
-*/
-
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif
-
-
diff --git a/src/clientlib/include/net_nfc_client_dispatcher_private.h b/src/clientlib/include/net_nfc_client_dispatcher_private.h
index 4583032..7addd1b 100755
--- a/src/clientlib/include/net_nfc_client_dispatcher_private.h
+++ b/src/clientlib/include/net_nfc_client_dispatcher_private.h
@@ -28,7 +28,7 @@ void net_nfc_client_call_dispatcher_in_ecore_main_loop(net_nfc_response_cb clien
#else
void net_nfc_client_call_dispatcher_in_current_context(net_nfc_response_cb client_cb, net_nfc_response_msg_t* msg);
#endif
-bool net_nfc_client_dispatch_sync_response(net_nfc_response_msg_t *msg);
+net_nfc_error_e net_nfc_client_dispatch_sync_response(net_nfc_response_msg_t *msg);
#endif
diff --git a/src/clientlib/include/net_nfc_client_ipc_private.h b/src/clientlib/include/net_nfc_client_ipc_private.h
index 5fef309..edc5a7e 100755
--- a/src/clientlib/include/net_nfc_client_ipc_private.h
+++ b/src/clientlib/include/net_nfc_client_ipc_private.h
@@ -25,8 +25,8 @@ net_nfc_error_e net_nfc_client_socket_initialize();
void net_nfc_client_socket_finalize();
bool net_nfc_client_is_connected();
-net_nfc_error_e net_nfc_client_send_reqeust(net_nfc_request_msg_t *msg, ...);
-net_nfc_error_e net_nfc_client_send_reqeust_sync(net_nfc_request_msg_t *msg, ...);
+net_nfc_error_e net_nfc_client_send_request(net_nfc_request_msg_t *msg, ...);
+net_nfc_error_e net_nfc_client_send_request_sync(net_nfc_request_msg_t *msg, ...);
void _net_nfc_client_set_cookies(const char * cookie, size_t size);
void _net_nfc_client_free_cookies(void);
diff --git a/src/clientlib/include/net_nfc_internal_se.h b/src/clientlib/include/net_nfc_internal_se.h
index 5acab58..c1fbf21 100755
--- a/src/clientlib/include/net_nfc_internal_se.h
+++ b/src/clientlib/include/net_nfc_internal_se.h
@@ -1,31 +1,29 @@
/*
- * Copyright (c) 2012, 2013 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Flora License, Version 1.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
-
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
+ * Copyright (c) 2012, 2013 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
#ifndef __NET_NFC_INTERNAL_SE_H__
#define __NET_NFC_INTERNAL_SE_H__
#include "net_nfc_typedef.h"
-
#ifdef __cplusplus
- extern "C" {
+extern "C"
+{
#endif
-
/**
@addtogroup NET_NFC_MANAGER_SECURE_ELEMENT
@@ -34,19 +32,22 @@
NFC Manager defines are defined in <net_nfc_typedef.h>
- @li @c #net_nfc_set_secure_element_type set secure element type
- @li @c #net_nfc_get_secure_element_type get current selected secure element
- @li @c #net_nfc_open_internal_secure_element open selected secure element
- @li @c #net_nfc_close_internal_secure_element close selected secure element
- @li @c #net_nfc_send_apdu send apdu
-
-
-
+ @li @c #net_nfc_set_secure_element_type set secure element type
+ @li @c #net_nfc_get_secure_element_type get current selected secure element
+ @li @c #net_nfc_open_internal_secure_element open selected secure element
+ @li @c #net_nfc_open_internal_secure_element_sync open selected secure element (synchronous)
+ @li @c #net_nfc_close_internal_secure_element close selected secure element
+ @li @c #net_nfc_close_internal_secure_element_sync close selected secure element (synchronous)
+ @li @c #net_nfc_send_apdu send apdu to opened secure element
+ @li @c #net_nfc_send_apdu_sync send apdu to opened secure element (synchronous)
+ @li @c #net_nfc_get_atr request atr of secure element
+ @li @c #net_nfc_get_atr_sync request atr of secure element (synchronous)
*/
/**
- set secure element type. secure element will be a UICC or ESE. only one secure element is selected in a time. external reader can communicate with
- secure element by emitting RF
+ set secure element type. secure element will be a UICC or ESE.
+ only one secure element is selected in a time.
+ external reader can communicate with secure element by emitting RF
\par Sync (or) Async: Sync
This is a Asynchronous API
@@ -57,15 +58,27 @@
@return return the result of the calling the function
@exception NET_NFC_INVALID_PARAM not supported se_type
-
*/
-
-net_nfc_error_e net_nfc_set_secure_element_type(net_nfc_se_type_e se_type, void* trans_param);
+net_nfc_error_e net_nfc_set_secure_element_type(net_nfc_se_type_e se_type, void *trans_param);
/**
get current select se type.
- \par Sync (or) Async: Sync
+ \par Sync (or) Async: Async
+ This is a Asynchronous API
+
+ @param[in] trans_param user data that will be delivered to callback
+
+ @return return the result of the calling the function
+*/
+net_nfc_error_e net_nfc_get_secure_element_type(void *trans_param);
+
+/**
+ open and initialize the type of secure element.
+ if the type of secure element is selected, then change mode as MODE OFF
+ to prevent to be detected by external reader
+
+ \par Sync (or) Async: Async
This is a Asynchronous API
@param[in] se_type secure element type
@@ -74,53 +87,96 @@ net_nfc_error_e net_nfc_set_secure_element_type(net_nfc_se_type_e se_type, void*
@return return the result of the calling the function
@exception NET_NFC_INVALID_PARAM not supported se_type
-
*/
-
-net_nfc_error_e net_nfc_get_secure_element_type(void* trans_param);
+net_nfc_error_e net_nfc_open_internal_secure_element(net_nfc_se_type_e se_type, void *trans_param);
/**
- open and intialize the type of secure element. if the type of secure element is selected, then change mode as MODE OFF to prevent to be detected by external reader
+ open and initialize the type of secure element.
+ if the type of secure element is selected, then change mode as MODE OFF
+ to prevent to be detected by external reader
\par Sync (or) Async: Sync
This is a Asynchronous API
@param[in] se_type secure element type
- @param[in] trans_param user data that will be delivered to callback
+ @param[out] handle the handle of opened secure element
@return return the result of the calling the function
@exception NET_NFC_INVALID_PARAM not supported se_type
-
*/
-
-net_nfc_error_e net_nfc_open_internal_secure_element(net_nfc_se_type_e se_type, void* trans_param);
+net_nfc_error_e net_nfc_open_internal_secure_element_sync(net_nfc_se_type_e se_type, net_nfc_target_handle_h *handle);
/**
- close opend secure element and change back to previous setting
+ close opened secure element and change back to previous setting
- \par Sync (or) Async: Sync
+ \par Sync (or) Async: Async
This is a Asynchronous API
- @param[in] handle the handle of opend secure element
+ @param[in] handle the handle of opened secure element
@param[in] trans_param user data that will be delivered to callback
@return return the result of the calling the function
- @exception NET_NFC_INVALID_PARAM not supported se_type
+ @exception NET_NFC_INVALID_PARAM invalid secure element handle
+*/
+net_nfc_error_e net_nfc_close_internal_secure_element(net_nfc_target_handle_h handle, void *trans_param);
+
+/**
+ close opened secure element and change back to previous setting
+
+ \par Sync (or) Async: Sync
+ This is a Asynchronous API
+
+ @param[in] handle the handle of opened secure element
+ @return return the result of the calling the function
+
+ @exception NET_NFC_INVALID_PARAM invalid secure element handle
*/
+net_nfc_error_e net_nfc_close_internal_secure_element_sync(net_nfc_target_handle_h handle);
+
+/**
+ send apdu to opened secure element
+
+ \par Sync (or) Async: Async
+ This is a Asynchronous API
+
+ @param[in] handle the handle of opened secure element
+ @param[in] apdu apdu command to send
+ @param[in] trans_param user data that will be delivered to callback
+
+ @return return the result of the calling the function
-net_nfc_error_e net_nfc_close_internal_secure_element(net_nfc_target_handle_h handle, void* trans_param);
+ @exception NET_NFC_INVALID_PARAM invalid secure element handle
+ @exception NET_NFC_NULL_PARAM data is null or empty
+*/
+net_nfc_error_e net_nfc_send_apdu(net_nfc_target_handle_h handle, data_h apdu, void *trans_param);
/**
- send apdu to opend secure element
+ send apdu to opened secure element
- \par Sync (or) Async: Sync
+ \par Sync (or) Async: Async
This is a Asynchronous API
- @param[in] handle the handle of opend secure element
+ @param[in] handle the handle of opened secure element
@param[in] apdu apdu command to send
+ @param[out] response result of apdu
+
+ @return return the result of the calling the function
+
+ @exception NET_NFC_INVALID_PARAM invalid secure element handle or parameter
+ @exception NET_NFC_NULL_PARAM data is null or empty
+*/
+net_nfc_error_e net_nfc_send_apdu_sync(net_nfc_target_handle_h handle, data_h apdu, data_h *response);
+
+/**
+ request atr of secure element
+
+ \par Sync (or) Async: Async
+ This is a Asynchronous API
+
+ @param[in] handle the handle of opened secure element
@param[in] trans_param user data that will be delivered to callback
@return return the result of the calling the function
@@ -128,9 +184,23 @@ net_nfc_error_e net_nfc_close_internal_secure_element(net_nfc_target_handle_h ha
@exception NET_NFC_INVALID_PARAM invalid
*/
+net_nfc_error_e net_nfc_get_atr(net_nfc_target_handle_h handle, void *trans_param);
+
+/**
+ request atr of secure element
-net_nfc_error_e net_nfc_send_apdu(net_nfc_target_handle_h handle, data_h apdu, void* trans_param);
+ \par Sync (or) Async: Sync
+ This is a Asynchronous API
+
+ @param[in] handle the handle of opened secure element
+ @param[out] atr Answer to reset of secure element
+
+ @return return the result of the calling the function
+
+ @exception NET_NFC_INVALID_PARAM invalid
+*/
+net_nfc_error_e net_nfc_get_atr_sync(net_nfc_target_handle_h handle, data_h *atr);
#ifdef __cplusplus
}
diff --git a/src/clientlib/net_nfc_client_dispatcher.c b/src/clientlib/net_nfc_client_dispatcher.c
index 4c259a8..e82e90d 100755
--- a/src/clientlib/net_nfc_client_dispatcher.c
+++ b/src/clientlib/net_nfc_client_dispatcher.c
@@ -233,6 +233,23 @@ static bool net_nfc_client_dispatch_response(client_dispatcher_param_t *param)
}
break;
+ case NET_NFC_MESSAGE_GET_ATR_SE :
+ {
+ data_s *atr = &(((net_nfc_response_get_atr_t *)msg->detail_message)->data);
+
+ if (atr->length > 0)
+ {
+ if (client_cb != NULL)
+ client_cb(msg->response_type, ((net_nfc_response_get_atr_t *)msg->detail_message)->result, atr, client_context->register_user_param, (void *)((net_nfc_response_get_atr_t *)(msg->detail_message))->user_param);
+ }
+ else
+ {
+ if (client_cb != NULL)
+ client_cb(msg->response_type, ((net_nfc_response_get_atr_t *)msg->detail_message)->result, NULL, client_context->register_user_param, (void *)((net_nfc_response_get_atr_t *)(msg->detail_message))->user_param);
+ }
+ }
+ break;
+
case NET_NFC_MESSAGE_NOTIFY :
{
if (client_cb != NULL)
@@ -247,7 +264,7 @@ static bool net_nfc_client_dispatch_response(client_dispatcher_param_t *param)
if (data->length > 0)
{
if (client_cb != NULL)
- client_cb(msg->response_type, ((net_nfc_response_transceive_t *)msg->detail_message)->result, data, client_context->register_user_param, ((net_nfc_response_transceive_t *)(msg->detail_message))->trans_param);
+ client_cb(msg->response_type, ((net_nfc_response_transceive_t *)msg->detail_message)->result, (void *)data, client_context->register_user_param, ((net_nfc_response_transceive_t *)(msg->detail_message))->trans_param);
}
else
{
@@ -856,13 +873,11 @@ static bool net_nfc_client_dispatch_response(client_dispatcher_param_t *param)
return false;
}
-bool net_nfc_client_dispatch_sync_response(net_nfc_response_msg_t *msg)
+net_nfc_error_e net_nfc_client_dispatch_sync_response(net_nfc_response_msg_t *msg)
{
+ net_nfc_error_e result = NET_NFC_OK;
// client_context_t *client_context = NULL;
- if (msg == NULL || msg->detail_message == NULL)
- return false;
-
DEBUG_CLIENT_MSG("synchronous callback, message = [%d]", msg->response_type);
// client_context = net_nfc_get_client_context();
@@ -879,12 +894,58 @@ bool net_nfc_client_dispatch_sync_response(net_nfc_response_msg_t *msg)
break;
case NET_NFC_MESSAGE_OPEN_INTERNAL_SE :
+ {
+ net_nfc_response_open_internal_se_t *response = (net_nfc_response_open_internal_se_t *)msg->detail_message;
+ net_nfc_target_handle_h *handle = (net_nfc_target_handle_h *)response->user_param;
+
+ /* return */
+ result = response->result;
+
+ if (handle != NULL) {
+ *handle = (net_nfc_target_handle_h)response->handle;
+ }
+ }
break;
case NET_NFC_MESSAGE_CLOSE_INTERNAL_SE :
+ {
+ net_nfc_response_close_internal_se_t *response = (net_nfc_response_close_internal_se_t *)msg->detail_message;
+
+ /* return */
+ result = response->result;
+ }
break;
case NET_NFC_MESSAGE_SEND_APDU_SE :
+ {
+ net_nfc_response_send_apdu_t *response = (net_nfc_response_send_apdu_t *)msg->detail_message;
+ data_h *data = (data_h *)response->user_param;
+
+ /* return */
+ result = response->result;
+
+ if (data != NULL && response->data.buffer != NULL &&
+ response->data.length > 0) {
+ net_nfc_create_data(data, response->data.buffer,
+ response->data.length);
+ }
+ }
+ break;
+
+ case NET_NFC_MESSAGE_GET_ATR_SE :
+ {
+ net_nfc_response_get_atr_t *response = (net_nfc_response_get_atr_t *)msg->detail_message;
+ data_h *data = (data_h *)response->user_param;
+
+ /* return */
+ result = response->result;
+
+ if (data != NULL && response->data.buffer != NULL &&
+ response->data.length > 0) {
+ net_nfc_create_data(data, response->data.buffer,
+ response->data.length);
+ }
+ }
break;
case NET_NFC_MESSAGE_NOTIFY :
@@ -901,6 +962,9 @@ bool net_nfc_client_dispatch_sync_response(net_nfc_response_msg_t *msg)
net_nfc_response_is_tag_connected_t *response = (net_nfc_response_is_tag_connected_t *)msg->detail_message;
net_nfc_response_is_tag_connected_t *context = (net_nfc_response_is_tag_connected_t *)response->trans_param;
+ /* return */
+ result = response->result;
+
if (context != NULL)
{
context->result = response->result;
@@ -938,6 +1002,9 @@ bool net_nfc_client_dispatch_sync_response(net_nfc_response_msg_t *msg)
net_nfc_response_get_current_tag_info_t *response = (net_nfc_response_get_current_tag_info_t *)msg->detail_message;
net_nfc_response_get_current_tag_info_t *context = (net_nfc_response_get_current_tag_info_t *)response->trans_param;
+ /* return */
+ result = response->result;
+
if (context != NULL)
{
context->result = response->result;
@@ -980,6 +1047,9 @@ bool net_nfc_client_dispatch_sync_response(net_nfc_response_msg_t *msg)
net_nfc_response_get_current_target_handle_t *response = (net_nfc_response_get_current_target_handle_t *)msg->detail_message;
net_nfc_response_get_current_target_handle_t *context = (net_nfc_response_get_current_target_handle_t *)response->trans_param;
+ /* return */
+ result = response->result;
+
if (context != NULL)
{
context->handle = response->handle;
@@ -1057,11 +1127,11 @@ bool net_nfc_client_dispatch_sync_response(net_nfc_response_msg_t *msg)
break;
}
- /* client callback must copy data to client area */
+ /* client callback must copy data to client area */
net_nfc_util_mem_free_detail_msg(NET_NFC_UTIL_MSG_TYPE_RESPONSE, msg->response_type, msg->detail_message);
_net_nfc_util_free_mem(msg);
- return false;
+ return result;
}
static net_nfc_error_e net_nfc_get_tag_info_list(data_s *values, int number_of_keys, net_nfc_tag_info_s **list)
diff --git a/src/clientlib/net_nfc_client_exchanger.c b/src/clientlib/net_nfc_client_exchanger.c
index 35dd38b..f1aecd3 100755
--- a/src/clientlib/net_nfc_client_exchanger.c
+++ b/src/clientlib/net_nfc_client_exchanger.c
@@ -135,7 +135,7 @@ NET_NFC_EXPORT_API net_nfc_error_e net_nfc_send_exchanger_data(net_nfc_exchanger
memcpy(&request->data.buffer, ex_data->binary_data.buffer, request->data.length);
- ret = net_nfc_client_send_reqeust((net_nfc_request_msg_t *)request, NULL);
+ ret = net_nfc_client_send_request((net_nfc_request_msg_t *)request, NULL);
_net_nfc_util_free_mem(request);
@@ -166,7 +166,7 @@ NET_NFC_EXPORT_API net_nfc_error_e net_nfc_exchanger_request_connection_handover
request->handle = (net_nfc_target_handle_s *)target_handle;
request->type = type;
- ret = net_nfc_client_send_reqeust((net_nfc_request_msg_t *)request, NULL);
+ ret = net_nfc_client_send_request((net_nfc_request_msg_t *)request, NULL);
_net_nfc_util_free_mem(request);
diff --git a/src/clientlib/net_nfc_client_internal_se.c b/src/clientlib/net_nfc_client_internal_se.c
index 839ee56..604daf6 100755
--- a/src/clientlib/net_nfc_client_internal_se.c
+++ b/src/clientlib/net_nfc_client_internal_se.c
@@ -1,35 +1,32 @@
/*
- * Copyright (c) 2012, 2013 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Flora License, Version 1.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
-
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-#include "net_nfc_tag.h"
-#include "net_nfc_typedef_private.h"
-#include "net_nfc_client_ipc_private.h"
-#include "net_nfc_debug_private.h"
-#include "net_nfc_util_private.h"
-#include "net_nfc_client_nfc_private.h"
+ * Copyright (c) 2012, 2013 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
#include <string.h>
#include <pthread.h>
+#include "net_nfc_typedef_private.h"
+#include "net_nfc_debug_private.h"
+#include "net_nfc_util_private.h"
+#include "net_nfc_client_ipc_private.h"
+
#ifndef NET_NFC_EXPORT_API
#define NET_NFC_EXPORT_API __attribute__((visibility("default")))
#endif
-NET_NFC_EXPORT_API net_nfc_error_e net_nfc_set_secure_element_type(net_nfc_se_type_e se_type, void* trans_param)
+NET_NFC_EXPORT_API net_nfc_error_e net_nfc_set_secure_element_type(net_nfc_se_type_e se_type, void *trans_param)
{
net_nfc_error_e ret;
net_nfc_request_set_se_t request = { 0, };
@@ -44,12 +41,12 @@ NET_NFC_EXPORT_API net_nfc_error_e net_nfc_set_secure_element_type(net_nfc_se_ty
request.se_type = se_type;
request.trans_param = trans_param;
- ret = net_nfc_client_send_reqeust((net_nfc_request_msg_t *)&request, NULL);
+ ret = net_nfc_client_send_request((net_nfc_request_msg_t *)&request, NULL);
return ret;
}
-NET_NFC_EXPORT_API net_nfc_error_e net_nfc_get_secure_element_type(void* trans_param)
+NET_NFC_EXPORT_API net_nfc_error_e net_nfc_get_secure_element_type(void *trans_param)
{
net_nfc_error_e ret;
net_nfc_request_get_se_t request = { 0, };
@@ -58,12 +55,12 @@ NET_NFC_EXPORT_API net_nfc_error_e net_nfc_get_secure_element_type(void* trans_p
request.request_type = NET_NFC_MESSAGE_GET_SE;
request.trans_param = trans_param;
- ret = net_nfc_client_send_reqeust((net_nfc_request_msg_t *)&request, NULL);
+ ret = net_nfc_client_send_request((net_nfc_request_msg_t *)&request, NULL);
return ret;
}
-NET_NFC_EXPORT_API net_nfc_error_e net_nfc_open_internal_secure_element(net_nfc_se_type_e se_type, void* trans_param)
+NET_NFC_EXPORT_API net_nfc_error_e net_nfc_open_internal_secure_element(net_nfc_se_type_e se_type, void *trans_param)
{
net_nfc_error_e ret;
net_nfc_request_open_internal_se_t request = { 0, };
@@ -78,11 +75,41 @@ NET_NFC_EXPORT_API net_nfc_error_e net_nfc_open_internal_secure_element(net_nfc_
request.se_type = se_type;
request.trans_param = trans_param;
- ret = net_nfc_client_send_reqeust((net_nfc_request_msg_t *)&request, NULL);
+ ret = net_nfc_client_send_request((net_nfc_request_msg_t *)&request, NULL);
return ret;
}
+NET_NFC_EXPORT_API net_nfc_error_e net_nfc_open_internal_secure_element_sync(net_nfc_se_type_e se_type, net_nfc_target_handle_h *handle)
+{
+ net_nfc_request_open_internal_se_t request = { 0, };
+ net_nfc_target_handle_h temp = NULL;
+ net_nfc_error_e result;
+
+ if (se_type < NET_NFC_SE_TYPE_NONE || se_type > NET_NFC_SE_TYPE_UICC) {
+ return NET_NFC_INVALID_PARAM;
+ }
+
+ request.length = sizeof(net_nfc_request_open_internal_se_t);
+ request.request_type = NET_NFC_MESSAGE_OPEN_INTERNAL_SE;
+ request.se_type = se_type;
+ request.user_param = (uint32_t)&temp;
+
+ result = net_nfc_client_send_request_sync((net_nfc_request_msg_t *)&request, NULL);
+ if (result == NET_NFC_OK) {
+ if (temp != NULL) {
+ *handle = temp;
+ } else {
+ DEBUG_ERR_MSG("NULL handle returned data returned");
+ result = NET_NFC_OPERATION_FAIL;
+ }
+ } else{
+ DEBUG_ERR_MSG("net_nfc_client_send_request_sync failed [%d]", result);
+ }
+
+ return result;
+}
+
NET_NFC_EXPORT_API net_nfc_error_e net_nfc_close_internal_secure_element(net_nfc_target_handle_h handle, void *trans_param)
{
net_nfc_error_e ret;
@@ -98,12 +125,30 @@ NET_NFC_EXPORT_API net_nfc_error_e net_nfc_close_internal_secure_element(net_nfc
request.handle = (net_nfc_target_handle_s *)handle;
request.trans_param = trans_param;
- ret = net_nfc_client_send_reqeust((net_nfc_request_msg_t *)&request, NULL);
+ ret = net_nfc_client_send_request((net_nfc_request_msg_t *)&request, NULL);
return ret;
}
-NET_NFC_EXPORT_API net_nfc_error_e net_nfc_send_apdu(net_nfc_target_handle_h handle, data_h apdu, void* trans_param)
+NET_NFC_EXPORT_API net_nfc_error_e net_nfc_close_internal_secure_element_sync(net_nfc_target_handle_h handle)
+{
+ net_nfc_error_e result;
+ net_nfc_request_close_internal_se_t request = { 0, };
+
+ if (handle == NULL) {
+ return NET_NFC_NULL_PARAMETER;
+ }
+
+ request.length = sizeof(net_nfc_request_close_internal_se_t);
+ request.request_type = NET_NFC_MESSAGE_CLOSE_INTERNAL_SE;
+ request.handle = (net_nfc_target_handle_s *)handle;
+
+ result = net_nfc_client_send_request_sync((net_nfc_request_msg_t *)&request, NULL);
+
+ return result;
+}
+
+NET_NFC_EXPORT_API net_nfc_error_e net_nfc_send_apdu(net_nfc_target_handle_h handle, data_h apdu, void *trans_param)
{
net_nfc_error_e ret;
net_nfc_request_send_apdu_t *request = NULL;
@@ -131,10 +176,102 @@ NET_NFC_EXPORT_API net_nfc_error_e net_nfc_send_apdu(net_nfc_target_handle_h han
request->data.length = apdu_data->length;
memcpy(&request->data.buffer, apdu_data->buffer, request->data.length);
- ret = net_nfc_client_send_reqeust((net_nfc_request_msg_t *)request, NULL);
+ ret = net_nfc_client_send_request((net_nfc_request_msg_t *)request, NULL);
+
+ _net_nfc_util_free_mem(request);
+
+ return ret;
+}
+
+NET_NFC_EXPORT_API net_nfc_error_e net_nfc_send_apdu_sync(net_nfc_target_handle_h handle, data_h apdu, data_h *response)
+{
+ net_nfc_request_send_apdu_t *request = NULL;
+ data_s *apdu_data = (data_s *)apdu;
+ net_nfc_error_e result;
+ uint32_t length;
+ data_h resp = NULL;
+
+ if (handle == NULL || apdu_data == NULL || apdu_data->buffer == NULL || apdu_data->length == 0)
+ {
+ return NET_NFC_NULL_PARAMETER;
+ }
+
+ length = sizeof(net_nfc_request_send_apdu_t) + apdu_data->length;
+
+ _net_nfc_util_alloc_mem(request, length);
+ if (request == NULL)
+ {
+ return NET_NFC_ALLOC_FAIL;
+ }
+
+ request->length = length;
+ request->request_type = NET_NFC_MESSAGE_SEND_APDU_SE;
+ request->handle = (net_nfc_target_handle_s *)handle;
+ request->user_param = (uint32_t)&resp;
+
+ request->data.length = apdu_data->length;
+ memcpy(&request->data.buffer, apdu_data->buffer, request->data.length);
+
+ result = net_nfc_client_send_request_sync((net_nfc_request_msg_t *)request, NULL);
+ if (result == NET_NFC_OK) {
+ if (resp != NULL) {
+ *response = resp;
+ } else {
+ DEBUG_ERR_MSG("NULL response returned");
+ result = NET_NFC_OPERATION_FAIL;
+ }
+ } else {
+ DEBUG_ERR_MSG("net_nfc_client_send_request_sync failed [%d]", result);
+ }
_net_nfc_util_free_mem(request);
+ return result;
+}
+
+NET_NFC_EXPORT_API net_nfc_error_e net_nfc_get_atr(net_nfc_target_handle_h handle, void *trans_param)
+{
+ net_nfc_error_e ret;
+ net_nfc_request_get_atr_t request = { 0, };
+
+ if (handle == NULL)
+ {
+ return NET_NFC_NULL_PARAMETER;
+ }
+
+ request.length = sizeof(net_nfc_request_get_atr_t);
+ request.request_type = NET_NFC_MESSAGE_GET_ATR_SE;
+ request.handle = (net_nfc_target_handle_s *)handle;
+ request.user_param = (uint32_t)trans_param;
+
+ ret = net_nfc_client_send_request((net_nfc_request_msg_t *)&request, NULL);
+
return ret;
}
+NET_NFC_EXPORT_API net_nfc_error_e net_nfc_get_atr_sync(net_nfc_target_handle_h handle, data_h *atr)
+{
+ net_nfc_request_get_atr_t request = { 0, };
+ data_h response = NULL;
+ net_nfc_error_e result;
+
+ if (handle == NULL) {
+ return NET_NFC_NULL_PARAMETER;
+ }
+
+ request.length = sizeof(net_nfc_request_get_atr_t);
+ request.request_type = NET_NFC_MESSAGE_GET_ATR_SE;
+ request.handle = (net_nfc_target_handle_s *)handle;
+ request.user_param = (uint32_t)&response;
+
+ result = net_nfc_client_send_request_sync((net_nfc_request_msg_t *)&request, NULL);
+ if (result == NET_NFC_OK) {
+ if (response != NULL) {
+ *atr = response;
+ } else {
+ result = NET_NFC_OPERATION_FAIL;
+ }
+ }
+
+ return result;
+}
diff --git a/src/clientlib/net_nfc_client_ipc.c b/src/clientlib/net_nfc_client_ipc.c
index e23fa1c..db7591d 100755
--- a/src/clientlib/net_nfc_client_ipc.c
+++ b/src/clientlib/net_nfc_client_ipc.c
@@ -44,6 +44,7 @@ static pthread_mutex_t g_client_ipc_mutex = PTHREAD_MUTEX_INITIALIZER;
static pthread_cond_t g_client_ipc_cond = PTHREAD_COND_INITIALIZER;
static pthread_mutex_t cb_lock = PTHREAD_MUTEX_INITIALIZER;
static net_nfc_response_cb client_cb = NULL;
+static net_nfc_error_e sync_result;
#ifdef G_MAIN_LOOP
static GIOChannel *g_client_channel = NULL;
@@ -90,10 +91,17 @@ static void net_nfc_client_prepare_sync_call(net_nfc_request_msg_t *msg)
static net_nfc_error_e net_nfc_client_wait_sync_call(int timeout)
{
net_nfc_error_e result = NET_NFC_OPERATION_FAIL;
+ struct timeval now;
+ struct timespec ts;
- if (pthread_cond_wait(&g_client_ipc_cond, &g_client_ipc_mutex) == 0)
+ gettimeofday(&now, NULL);
+ ts.tv_sec = now.tv_sec + timeout;
+ ts.tv_nsec = now.tv_usec * 1000;
+
+ if (pthread_cond_timedwait(&g_client_ipc_cond, &g_client_ipc_mutex,
+ &ts) == 0)
{
- result = NET_NFC_OK;
+ result = sync_result;
}
return result;
@@ -109,8 +117,10 @@ static void net_nfc_client_recv_sync_call()
net_nfc_client_ipc_lock();
}
-static void net_nfc_client_notify_sync_call()
+static void net_nfc_client_notify_sync_call(net_nfc_error_e result)
{
+ sync_result = result;
+
pthread_cond_signal(&g_client_ipc_cond);
net_nfc_client_ipc_unlock();
}
@@ -429,20 +439,22 @@ static void *net_nfc_client_ipc_thread(void *data)
msg = net_nfc_client_read_response_msg(&result);
pthread_mutex_lock(&cb_lock);
- if (msg != NULL)
+ if (msg != NULL && msg->detail_message != NULL)
{
/* TODO : need to remove */
net_nfc_response_msg_t *temp = (net_nfc_response_msg_t *)(msg->detail_message);
;
if (NET_NFC_FLAGS_IS_SYNC_CALL(temp->flags))
{
+ net_nfc_error_e result;
+
net_nfc_client_recv_sync_call();
/* call a callback in IPC thread */
- net_nfc_client_dispatch_sync_response(msg);
+ result = net_nfc_client_dispatch_sync_response(msg);
/* unset sync call flag */
- net_nfc_client_notify_sync_call();
+ net_nfc_client_notify_sync_call(result);
}
else
{
@@ -1645,7 +1657,7 @@ static net_nfc_error_e _send_request(net_nfc_request_msg_t *msg, va_list list)
}
}
-net_nfc_error_e net_nfc_client_send_reqeust(net_nfc_request_msg_t *msg, ...)
+net_nfc_error_e net_nfc_client_send_request(net_nfc_request_msg_t *msg, ...)
{
va_list list;
net_nfc_error_e result = NET_NFC_OK;
@@ -1663,7 +1675,7 @@ net_nfc_error_e net_nfc_client_send_reqeust(net_nfc_request_msg_t *msg, ...)
return result;
}
-net_nfc_error_e net_nfc_client_send_reqeust_sync(net_nfc_request_msg_t *msg, ...)
+net_nfc_error_e net_nfc_client_send_request_sync(net_nfc_request_msg_t *msg, ...)
{
va_list list;
net_nfc_error_e result = NET_NFC_OK;
@@ -1678,7 +1690,7 @@ net_nfc_error_e net_nfc_client_send_reqeust_sync(net_nfc_request_msg_t *msg, ...
if (result == NET_NFC_OK)
{
- result = net_nfc_client_wait_sync_call(0);
+ result = net_nfc_client_wait_sync_call(3);
}
net_nfc_client_post_sync_call();
@@ -1712,4 +1724,3 @@ net_nfc_error_e _net_nfc_client_unregister_cb(void)
return NET_NFC_OK;
}
-
diff --git a/src/clientlib/net_nfc_client_llcp.c b/src/clientlib/net_nfc_client_llcp.c
index d983af9..1c955a7 100755
--- a/src/clientlib/net_nfc_client_llcp.c
+++ b/src/clientlib/net_nfc_client_llcp.c
@@ -356,7 +356,7 @@ NET_NFC_EXPORT_API net_nfc_error_e net_nfc_listen_llcp(net_nfc_llcp_socket_t soc
request->service_name.length = srv_name_count;
memcpy(&request->service_name.buffer, psocket_data->service_name, request->service_name.length);
- ret = net_nfc_client_send_reqeust((net_nfc_request_msg_t *)request, NULL);
+ ret = net_nfc_client_send_request((net_nfc_request_msg_t *)request, NULL);
_net_nfc_util_free_mem(request);
@@ -388,7 +388,7 @@ NET_NFC_EXPORT_API net_nfc_error_e net_nfc_disconnect_llcp(net_nfc_llcp_socket_t
request.client_socket = psocket_data->client_socket;
request.trans_param = trans_param;
- ret = net_nfc_client_send_reqeust((net_nfc_request_msg_t *)&request, NULL);
+ ret = net_nfc_client_send_request((net_nfc_request_msg_t *)&request, NULL);
pthread_mutex_unlock(&llcp_lock);
@@ -425,7 +425,7 @@ NET_NFC_EXPORT_API net_nfc_error_e net_nfc_close_llcp_socket(net_nfc_llcp_socket
request.client_socket = psocket_data->client_socket;
request.trans_param = trans_param;
- ret = net_nfc_client_send_reqeust((net_nfc_request_msg_t *)&request, NULL);
+ ret = net_nfc_client_send_request((net_nfc_request_msg_t *)&request, NULL);
_remove_internal_socket(psocket_data);
@@ -477,7 +477,7 @@ NET_NFC_EXPORT_API net_nfc_error_e net_nfc_send_llcp(net_nfc_llcp_socket_t socke
request->data.length = data_private->length;
memcpy(&request->data.buffer, data_private->buffer, request->data.length);
- ret = net_nfc_client_send_reqeust((net_nfc_request_msg_t *)request, NULL);
+ ret = net_nfc_client_send_request((net_nfc_request_msg_t *)request, NULL);
_net_nfc_util_free_mem(request);
@@ -511,7 +511,7 @@ NET_NFC_EXPORT_API net_nfc_error_e net_nfc_receive_llcp(net_nfc_llcp_socket_t so
request.trans_param = trans_param;
request.req_length = req_length;
- ret = net_nfc_client_send_reqeust((net_nfc_request_msg_t *)&request, NULL);
+ ret = net_nfc_client_send_request((net_nfc_request_msg_t *)&request, NULL);
pthread_mutex_unlock(&llcp_lock);
@@ -561,7 +561,7 @@ NET_NFC_EXPORT_API net_nfc_error_e net_nfc_send_to_llcp(net_nfc_llcp_socket_t so
request->data.length = data_private->length;
memcpy(&request->data.buffer, data_private->buffer, request->data.length);
- ret = net_nfc_client_send_reqeust((net_nfc_request_msg_t *)request, NULL);
+ ret = net_nfc_client_send_request((net_nfc_request_msg_t *)request, NULL);
_net_nfc_util_free_mem(request);
@@ -595,7 +595,7 @@ NET_NFC_EXPORT_API net_nfc_error_e net_nfc_receive_from_llcp(net_nfc_llcp_socket
request.trans_param = trans_param;
request.req_length = req_length;
- ret = net_nfc_client_send_reqeust((net_nfc_request_msg_t *)&request, NULL);
+ ret = net_nfc_client_send_request((net_nfc_request_msg_t *)&request, NULL);
pthread_mutex_unlock(&llcp_lock);
@@ -629,7 +629,7 @@ NET_NFC_EXPORT_API net_nfc_error_e net_nfc_connect_llcp_with_sap(net_nfc_llcp_so
request.miu = psocket_data->miu;
request.rw = psocket_data->rw;
- ret = net_nfc_client_send_reqeust((net_nfc_request_msg_t *)&request, NULL);
+ ret = net_nfc_client_send_request((net_nfc_request_msg_t *)&request, NULL);
pthread_mutex_unlock(&llcp_lock);
@@ -678,7 +678,7 @@ NET_NFC_EXPORT_API net_nfc_error_e net_nfc_connect_llcp(net_nfc_llcp_socket_t so
request->service_name.length = svc_name_length;
memcpy(&request->service_name.buffer, service_name, request->service_name.length);
- ret = net_nfc_client_send_reqeust((net_nfc_request_msg_t *)request, NULL);
+ ret = net_nfc_client_send_request((net_nfc_request_msg_t *)request, NULL);
_net_nfc_util_free_mem(request);
@@ -749,7 +749,7 @@ NET_NFC_EXPORT_API net_nfc_error_e net_nfc_set_llcp_local_configure(net_nfc_llcp
request.trans_param = trans_param;
memcpy(&(request.config), config, sizeof(net_nfc_llcp_config_info_s));
- ret = net_nfc_client_send_reqeust((net_nfc_request_msg_t *)&request, NULL);
+ ret = net_nfc_client_send_request((net_nfc_request_msg_t *)&request, NULL);
return ret;
}
@@ -1052,7 +1052,7 @@ NET_NFC_EXPORT_API net_nfc_error_e net_nfc_get_current_target_handle(void *trans
request.request_type = NET_NFC_MESSAGE_GET_CURRENT_TARGET_HANDLE;
request.trans_param = trans_param;
- result = net_nfc_client_send_reqeust((net_nfc_request_msg_t *)&request, NULL);
+ result = net_nfc_client_send_request((net_nfc_request_msg_t *)&request, NULL);
return result;
}
@@ -1067,7 +1067,7 @@ NET_NFC_EXPORT_API net_nfc_error_e net_nfc_get_current_target_handle_sync(net_nf
request.request_type = NET_NFC_MESSAGE_GET_CURRENT_TARGET_HANDLE;
request.trans_param = (void *)&response;
- result = net_nfc_client_send_reqeust_sync((net_nfc_request_msg_t *)&request, NULL);
+ result = net_nfc_client_send_request_sync((net_nfc_request_msg_t *)&request, NULL);
if (result == NET_NFC_OK)
{
*handle = (net_nfc_target_handle_h)response.handle;
diff --git a/src/clientlib/net_nfc_client_nfc.c b/src/clientlib/net_nfc_client_nfc.c
index 125b0ce..26ef548 100755
--- a/src/clientlib/net_nfc_client_nfc.c
+++ b/src/clientlib/net_nfc_client_nfc.c
@@ -4,7 +4,7 @@
* Licensed under the Flora License, Version 1.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
-
+ *
* http://floralicense.org/license/
*
* Unless required by applicable law or agreed to in writing, software
@@ -308,7 +308,7 @@ NET_NFC_EXPORT_API net_nfc_error_e net_nfc_set_launch_popup_state(int enable)
request.request_type = NET_NFC_MESSAGE_SERVICE_SET_LAUNCH_STATE;
request.set_launch_popup = enable;
- ret = net_nfc_client_send_reqeust((net_nfc_request_msg_t *)&request, NULL);
+ ret = net_nfc_client_send_request((net_nfc_request_msg_t *)&request, NULL);
return ret;
}
@@ -415,7 +415,7 @@ NET_NFC_EXPORT_API net_nfc_error_e net_nfc_state_activate(void)
request.request_type = NET_NFC_MESSAGE_SERVICE_CHANGE_CLIENT_STATE;
request.client_state = NET_NFC_CLIENT_ACTIVE_STATE;
- ret = net_nfc_client_send_reqeust((net_nfc_request_msg_t *)&request, NULL);
+ ret = net_nfc_client_send_request((net_nfc_request_msg_t *)&request, NULL);
return ret;
}
@@ -429,7 +429,7 @@ NET_NFC_EXPORT_API net_nfc_error_e net_nfc_state_deactivate(void)
request.request_type = NET_NFC_MESSAGE_SERVICE_CHANGE_CLIENT_STATE;
request.client_state = NET_NFC_CLIENT_INACTIVE_STATE;
- ret = net_nfc_client_send_reqeust((net_nfc_request_msg_t *)&request, NULL);
+ ret = net_nfc_client_send_request((net_nfc_request_msg_t *)&request, NULL);
return ret;
}
@@ -461,7 +461,7 @@ net_nfc_error_e net_nfc_send_init(void *context)
req_msg.request_type = NET_NFC_MESSAGE_SERVICE_INIT;
req_msg.user_param = (uint32_t)context;
- ret = net_nfc_client_send_reqeust((net_nfc_request_msg_t *)&req_msg, NULL);
+ ret = net_nfc_client_send_request((net_nfc_request_msg_t *)&req_msg, NULL);
return ret;
}
@@ -475,7 +475,7 @@ net_nfc_error_e net_nfc_send_deinit(void *context)
req_msg.request_type = NET_NFC_MESSAGE_SERVICE_DEINIT;
req_msg.user_param = (uint32_t)context;
- ret = net_nfc_client_send_reqeust((net_nfc_request_msg_t *)&req_msg, NULL);
+ ret = net_nfc_client_send_request((net_nfc_request_msg_t *)&req_msg, NULL);
return ret;
}
diff --git a/src/clientlib/net_nfc_client_tag.c b/src/clientlib/net_nfc_client_tag.c
index 7a3e74b..f98540b 100755
--- a/src/clientlib/net_nfc_client_tag.c
+++ b/src/clientlib/net_nfc_client_tag.c
@@ -14,6 +14,9 @@
* limitations under the License.
*/
+#include <string.h>
+#include <pthread.h>
+
#include "net_nfc_tag.h"
#include "net_nfc_typedef_private.h"
#include "net_nfc_client_ipc_private.h"
@@ -22,9 +25,6 @@
#include "net_nfc_util_ndef_message.h"
#include "net_nfc_client_nfc_private.h"
-#include <string.h>
-#include <pthread.h>
-
#ifndef NET_NFC_EXPORT_API
#define NET_NFC_EXPORT_API __attribute__((visibility("default")))
#endif
@@ -64,7 +64,7 @@ NET_NFC_EXPORT_API net_nfc_error_e net_nfc_format_ndef(net_nfc_target_handle_h h
memcpy(&request->key.buffer, struct_key->buffer, request->key.length);
}
- ret = net_nfc_client_send_reqeust((net_nfc_request_msg_t *)request, NULL);
+ ret = net_nfc_client_send_request((net_nfc_request_msg_t *)request, NULL);
_net_nfc_util_free_mem(request);
@@ -214,7 +214,7 @@ NET_NFC_EXPORT_API net_nfc_error_e net_nfc_transceive(net_nfc_target_handle_h ha
request->trans_param = trans_param;
request->info.dev_type = (uint32_t)target_info->devType;
- ret = net_nfc_client_send_reqeust((net_nfc_request_msg_t *)request, NULL);
+ ret = net_nfc_client_send_request((net_nfc_request_msg_t *)request, NULL);
_net_nfc_util_free_mem(request);
@@ -243,7 +243,7 @@ NET_NFC_EXPORT_API net_nfc_error_e net_nfc_read_tag(net_nfc_target_handle_h hand
request.handle = (net_nfc_target_handle_s *)handle;
request.trans_param = trans_param;
- ret = net_nfc_client_send_reqeust((net_nfc_request_msg_t *)&request, NULL);
+ ret = net_nfc_client_send_request((net_nfc_request_msg_t *)&request, NULL);
return ret;
}
@@ -299,7 +299,7 @@ NET_NFC_EXPORT_API net_nfc_error_e net_nfc_write_ndef(net_nfc_target_handle_h ha
return result;
}
- result = net_nfc_client_send_reqeust((net_nfc_request_msg_t *)request, NULL);
+ result = net_nfc_client_send_request((net_nfc_request_msg_t *)request, NULL);
_net_nfc_util_free_mem(request);
@@ -315,7 +315,7 @@ NET_NFC_EXPORT_API net_nfc_error_e net_nfc_is_tag_connected(void *trans_param)
request.request_type = NET_NFC_MESSAGE_IS_TAG_CONNECTED;
request.trans_param = trans_param;
- result = net_nfc_client_send_reqeust((net_nfc_request_msg_t *)&request, NULL);
+ result = net_nfc_client_send_request((net_nfc_request_msg_t *)&request, NULL);
return result;
}
@@ -333,11 +333,10 @@ NET_NFC_EXPORT_API net_nfc_error_e net_nfc_is_tag_connected_sync(int *dev_type)
request.request_type = NET_NFC_MESSAGE_IS_TAG_CONNECTED;
request.trans_param = (void *)&context;
- result = net_nfc_client_send_reqeust_sync((net_nfc_request_msg_t *)&request, NULL);
+ result = net_nfc_client_send_request_sync((net_nfc_request_msg_t *)&request, NULL);
if (result == NET_NFC_OK)
{
*dev_type = context.devType;
- result = context.result;
}
return result;
@@ -365,7 +364,6 @@ NET_NFC_EXPORT_API net_nfc_error_e net_nfc_make_read_only_ndef_tag(net_nfc_targe
tmp_client_context = net_nfc_get_client_context();
if (tmp_client_context != NULL)
{
-
target_info = tmp_client_context->target_info;
if (target_info != NULL)
@@ -400,7 +398,7 @@ NET_NFC_EXPORT_API net_nfc_error_e net_nfc_make_read_only_ndef_tag(net_nfc_targe
request.handle = (net_nfc_target_handle_s *)handle;
request.trans_param = trans_param;
- result = net_nfc_client_send_reqeust((net_nfc_request_msg_t *)&request, NULL);
+ result = net_nfc_client_send_request((net_nfc_request_msg_t *)&request, NULL);
return result;
}
@@ -414,7 +412,7 @@ NET_NFC_EXPORT_API net_nfc_error_e net_nfc_get_current_tag_info(void *trans_para
request.request_type = NET_NFC_MESSAGE_GET_CURRENT_TAG_INFO;
request.trans_param = trans_param;
- result = net_nfc_client_send_reqeust((net_nfc_request_msg_t *)&request, NULL);
+ result = net_nfc_client_send_request((net_nfc_request_msg_t *)&request, NULL);
return result;
}
@@ -429,15 +427,11 @@ NET_NFC_EXPORT_API net_nfc_error_e net_nfc_get_current_tag_info_sync(net_nfc_tar
request.request_type = NET_NFC_MESSAGE_GET_CURRENT_TAG_INFO;
request.trans_param = (void *)&response;
- result = net_nfc_client_send_reqeust_sync((net_nfc_request_msg_t *)&request, NULL);
+ result = net_nfc_client_send_request_sync((net_nfc_request_msg_t *)&request, NULL);
if (result == NET_NFC_OK)
{
- result = response.result;
- if (response.result == NET_NFC_OK)
- {
- /* already allocated memory */
- *info = (net_nfc_target_info_h)response.trans_param;
- }
+ /* already allocated memory */
+ *info = (net_nfc_target_info_h)response.trans_param;
}
return result;
diff --git a/src/clientlib/net_nfc_client_test.c b/src/clientlib/net_nfc_client_test.c
index 1069c6b..0e95188 100644
--- a/src/clientlib/net_nfc_client_test.c
+++ b/src/clientlib/net_nfc_client_test.c
@@ -83,7 +83,7 @@ NET_NFC_EXPORT_API net_nfc_error_e net_nfc_sim_test(void)
request.length = sizeof(net_nfc_request_test_t);
request.request_type = NET_NFC_MESSAGE_SIM_TEST;
- ret = net_nfc_client_send_reqeust((net_nfc_request_msg_t *)&request, NULL);
+ ret = net_nfc_client_send_request((net_nfc_request_msg_t *)&request, NULL);
return ret;
}
@@ -98,7 +98,7 @@ NET_NFC_EXPORT_API net_nfc_error_e net_nfc_prbs_test(int tech, int rate)
request.rate = rate;
request.tech = tech;
- ret = net_nfc_client_send_reqeust((net_nfc_request_msg_t *)&request, NULL);
+ ret = net_nfc_client_send_request((net_nfc_request_msg_t *)&request, NULL);
return ret;
}
@@ -111,7 +111,7 @@ NET_NFC_EXPORT_API net_nfc_error_e net_nfc_get_firmware_version(void)
request.length = sizeof(net_nfc_request_msg_t);
request.request_type = NET_NFC_MESSAGE_GET_FIRMWARE_VERSION;
- ret = net_nfc_client_send_reqeust((net_nfc_request_msg_t *)&request, NULL);
+ ret = net_nfc_client_send_request((net_nfc_request_msg_t *)&request, NULL);
return ret;
}
@@ -140,7 +140,7 @@ NET_NFC_EXPORT_API net_nfc_error_e net_nfc_set_eedata_register(int mode, int reg
request->data.length = len;
memcpy(request->data.buffer, data, len);
- result = net_nfc_client_send_reqeust((net_nfc_request_msg_t *)request, NULL);
+ result = net_nfc_client_send_request((net_nfc_request_msg_t *)request, NULL);
_net_nfc_util_free_mem(request);
diff --git a/src/commonlib/include/net_nfc_oem_controller.h b/src/commonlib/include/net_nfc_oem_controller.h
index 243ff4e..18d2589 100644
--- a/src/commonlib/include/net_nfc_oem_controller.h
+++ b/src/commonlib/include/net_nfc_oem_controller.h
@@ -24,27 +24,27 @@ typedef bool (*net_nfc_oem_controller_init)(net_nfc_error_e *result);
typedef bool (*net_nfc_oem_controller_deinit)(void);
typedef bool (*net_nfc_oem_controller_register_listener)(target_detection_listener_cb target_detection_listener, se_transaction_listener_cb se_transaction_listener, llcp_event_listener_cb llcp_event_listener, net_nfc_error_e *result);
typedef bool (*net_nfc_oem_controller_unregister_listener)(void);
+typedef bool (*net_nfc_oem_controller_support_nfc)(net_nfc_error_e *result);
typedef bool (*net_nfc_oem_controller_get_firmware_version)(data_s **data, net_nfc_error_e *result);
typedef bool (*net_nfc_oem_controller_check_firmware_version)(net_nfc_error_e *result);
typedef bool (*net_nfc_oem_controller_update_firmware)(net_nfc_error_e *result);
typedef bool (*net_nfc_oem_controller_get_stack_information)(net_nfc_stack_information_s *stack_info, net_nfc_error_e *result);
typedef bool (*net_nfc_oem_controller_configure_discovery)(net_nfc_discovery_mode_e mode, net_nfc_event_filter_e config, net_nfc_error_e *result);
-typedef bool (*net_nfc_oem_controller_get_secure_element_list)(net_nfc_secure_element_info_s *list, int* count, net_nfc_error_e *result);
-typedef bool (*net_nfc_oem_controller_set_secure_element_mode)(net_nfc_secure_element_type_e element_type, net_nfc_secure_element_mode_e mode, net_nfc_error_e *result);
-typedef bool (*net_nfc_oem_controller_check_target_presence)(net_nfc_target_handle_s *handle, net_nfc_error_e *result);
+typedef bool (*net_nfc_oem_controller_exception_handler)(void);
+
+/* tag api */
typedef bool (*net_nfc_oem_controller_connect)(net_nfc_target_handle_s *handle, net_nfc_error_e *result);
typedef bool (*net_nfc_oem_controller_disconnect)(net_nfc_target_handle_s *handle, net_nfc_error_e *result);
+typedef bool (*net_nfc_oem_controller_check_target_presence)(net_nfc_target_handle_s *handle, net_nfc_error_e *result);
typedef bool (*net_nfc_oem_controller_check_ndef)(net_nfc_target_handle_s *handle, uint8_t *ndef_card_state, int *max_data_size, int *real_data_size, net_nfc_error_e *result);
typedef bool (*net_nfc_oem_controller_read_ndef)(net_nfc_target_handle_s *handle, data_s **data, net_nfc_error_e *result);
typedef bool (*net_nfc_oem_controller_write_ndef)(net_nfc_target_handle_s *handle, data_s *data, net_nfc_error_e *result);
typedef bool (*net_nfc_oem_controller_make_read_only_ndef)(net_nfc_target_handle_s *handle, net_nfc_error_e *result);
typedef bool (*net_nfc_oem_controller_format_ndef)(net_nfc_target_handle_s *handle, data_s *secure_key, net_nfc_error_e *result);
typedef bool (*net_nfc_oem_controller_transceive)(net_nfc_target_handle_s *handle, net_nfc_transceive_info_s *info, data_s **data, net_nfc_error_e *result);
-typedef bool (*net_nfc_oem_controller_exception_handler)(void);
typedef bool (*net_nfc_oem_controller_is_ready)(net_nfc_error_e *result);
-// LLCP API DEFINE
-
+/* llcp api */
typedef bool (*net_nfc_oem_controller_llcp_config)(net_nfc_llcp_config_info_s *config, net_nfc_error_e *result);
typedef bool (*net_nfc_oem_controller_llcp_check_llcp)(net_nfc_target_handle_s *handle, net_nfc_error_e *result);
typedef bool (*net_nfc_oem_controller_llcp_activate_llcp)(net_nfc_target_handle_s *handle, net_nfc_error_e *result);
@@ -64,13 +64,19 @@ typedef bool (*net_nfc_oem_controller_llcp_reject)(net_nfc_target_handle_s *hand
typedef bool (*net_nfc_oem_controller_llcp_get_remote_config)(net_nfc_target_handle_s *handle, net_nfc_llcp_config_info_s *config, net_nfc_error_e *result);
typedef bool (*net_nfc_oem_controller_llcp_get_remote_socket_info)(net_nfc_target_handle_s *handle, net_nfc_llcp_socket_t socket, net_nfc_llcp_socket_option_s *option, net_nfc_error_e *result);
+/* secure element api */
+typedef bool (*net_nfc_oem_controller_get_secure_element_list)(net_nfc_secure_element_info_s *list, int* count, net_nfc_error_e *result);
+typedef bool (*net_nfc_oem_controller_set_secure_element_mode)(net_nfc_secure_element_type_e element_type, net_nfc_secure_element_mode_e mode, net_nfc_error_e *result);
+typedef bool (*net_nfc_oem_controller_secure_element_open)(net_nfc_secure_element_type_e element_type, net_nfc_target_handle_s **handle, net_nfc_error_e *result);
+typedef bool (*net_nfc_oem_controller_secure_element_get_atr)(net_nfc_target_handle_s *handle, data_s **atr, net_nfc_error_e *result);
+typedef bool (*net_nfc_oem_controller_secure_element_send_apdu)(net_nfc_target_handle_s *handle, data_s *command, data_s **response, net_nfc_error_e *result);
+typedef bool (*net_nfc_oem_controller_secure_element_close)(net_nfc_target_handle_s *handle, net_nfc_error_e *result);
+
+/* test api */
typedef bool (*net_nfc_oem_controller_sim_test)(net_nfc_error_e *result);
typedef bool (*net_nfc_oem_controller_prbs_test)(net_nfc_error_e *result , int tech , int rate);
-
typedef bool (*net_nfc_oem_controller_test_mode_on)(net_nfc_error_e *result);
typedef bool (*net_nfc_oem_controller_test_mode_off)(net_nfc_error_e *result);
-
-typedef bool (*net_nfc_oem_controller_support_nfc)(net_nfc_error_e *result);
typedef bool (*net_nfc_oem_controller_eedata_register_set)(net_nfc_error_e *result , uint32_t mode , uint32_t reg_id , data_s *data);
typedef struct _net_nfc_oem_interface_s
@@ -125,6 +131,10 @@ typedef struct _net_nfc_oem_interface_s
net_nfc_oem_controller_support_nfc support_nfc;
net_nfc_oem_controller_eedata_register_set eedata_register_set;
+ net_nfc_oem_controller_secure_element_open secure_element_open;
+ net_nfc_oem_controller_secure_element_get_atr secure_element_get_atr;
+ net_nfc_oem_controller_secure_element_send_apdu secure_element_send_apdu;
+ net_nfc_oem_controller_secure_element_close secure_element_close;
} net_nfc_oem_interface_s;
#endif
diff --git a/src/commonlib/include/net_nfc_typedef.h b/src/commonlib/include/net_nfc_typedef.h
index ec4d7ba..bd723fa 100644
--- a/src/commonlib/include/net_nfc_typedef.h
+++ b/src/commonlib/include/net_nfc_typedef.h
@@ -206,6 +206,7 @@ typedef enum
NET_NFC_MESSAGE_OPEN_INTERNAL_SE,
NET_NFC_MESSAGE_CLOSE_INTERNAL_SE,
NET_NFC_MESSAGE_SEND_APDU_SE,
+ NET_NFC_MESSAGE_GET_ATR_SE,
NET_NFC_GET_SERVER_STATE,
NET_NFC_MESSAGE_SIM_TEST,
@@ -367,23 +368,23 @@ typedef enum
NET_NFC_NPP,
} llcp_app_protocol_e;
-typedef struct data_s *data_h;
+typedef struct _data_s *data_h;
-typedef struct ndef_record_s *ndef_record_h;
+typedef struct _ndef_record_s *ndef_record_h;
-typedef struct ndef_message_s *ndef_message_h;
+typedef struct _ndef_message_s *ndef_message_h;
-typedef struct net_nfc_target_info_s *net_nfc_target_info_h;
+typedef struct _net_nfc_target_info_s *net_nfc_target_info_h;
typedef uint32_t net_nfc_traceive_cmd;
-typedef struct net_nfc_llcp_config_info_s *net_nfc_llcp_config_info_h;
+typedef struct _net_nfc_llcp_config_info_s *net_nfc_llcp_config_info_h;
-typedef struct net_nfc_llcp_socket_option_s *net_nfc_llcp_socket_option_h;
+typedef struct _net_nfc_llcp_socket_option_s *net_nfc_llcp_socket_option_h;
-typedef struct net_nfc_target_handle_s *net_nfc_target_handle_h;
+typedef struct _net_nfc_target_handle_s *net_nfc_target_handle_h;
-typedef struct net_nfc_connection_handover_info_s *net_nfc_connection_handover_info_h;
+typedef struct _net_nfc_connection_handover_info_s *net_nfc_connection_handover_info_h;
typedef uint8_t sap_t;
@@ -413,7 +414,7 @@ typedef enum
NET_NFC_EXCHANGER_RAW,
} net_nfc_exchanger_data_type_e;
-typedef struct net_nfc_exchanger_data_s *net_nfc_exchanger_data_h;
+typedef struct _net_nfc_exchanger_data_s *net_nfc_exchanger_data_h;
typedef net_nfc_exchanger_data_h (*net_nfc_exchanger_cb)(net_nfc_exchanger_event_e event, void *user_param);
@@ -433,8 +434,8 @@ typedef enum
NET_NFC_CONN_HANDOVER_CARRIER_UNKNOWN_STATUS,
} net_nfc_conn_handover_carrier_state_e;
-typedef struct net_nfc_conn_handover_carrier_info_s *net_nfc_conn_handover_carrier_info_h;
-typedef struct net_nfc_conn_handover_info_s *net_nfc_conn_handover_info_h;
+typedef struct _net_nfc_conn_handover_carrier_info_s *net_nfc_conn_handover_carrier_info_h;
+typedef struct _net_nfc_conn_handover_info_s *net_nfc_conn_handover_info_h;
#define MIFARE_KEY_DEFAULT {(uint8_t)0xFF,(uint8_t)0xFF,(uint8_t)0xFF,(uint8_t)0xFF,(uint8_t)0xFF,(uint8_t)0xFF}
#define MIFARE_KEY_APPLICATION_DIRECTORY {(uint8_t)0xA0,(uint8_t)0xA1,(uint8_t)0xA2,(uint8_t)0xA3,(uint8_t)0xA4,(uint8_t)0xA5}
@@ -487,8 +488,8 @@ typedef enum
NET_NFC_BT_ATTRIBUTE_ADDRESS = 0xF0, /* Bluetooth device Address */
} net_nfc_handover_bt_attribute_e;
-typedef struct net_nfc_carrier_config_s *net_nfc_carrier_config_h;
-typedef struct net_nfc_carrier_property_s *net_nfc_property_group_h;
+typedef struct _net_nfc_carrier_config_s *net_nfc_carrier_config_h;
+typedef struct _net_nfc_carrier_property_s *net_nfc_property_group_h;
typedef enum
{
diff --git a/src/commonlib/include/net_nfc_typedef_private.h b/src/commonlib/include/net_nfc_typedef_private.h
index 1e5a4cf..a23a41c 100755
--- a/src/commonlib/include/net_nfc_typedef_private.h
+++ b/src/commonlib/include/net_nfc_typedef_private.h
@@ -1,29 +1,25 @@
/*
- * Copyright (C) 2010 NXP Semiconductors
- * Copyright (c) 2012, 2013 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
+ * Copyright (C) 2010 NXP Semiconductors
+ * Copyright (c) 2012, 2013 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
#ifndef __NET_NFC_INTERNAL_TYPEDEF_H__
#define __NET_NFC_INTERNAL_TYPEDEF_H__
#include "net_nfc_typedef.h"
-
typedef enum
{
NET_NFC_POLL_START = 0x01,
@@ -57,6 +53,7 @@ typedef struct _net_nfc_target_handle_s
{
uint32_t connection_id;
net_nfc_connection_type_e connection_type;
+ net_nfc_target_type_e target_type;
/*++npp++*/
llcp_app_protocol_e app_type;
/*--npp--*/
@@ -782,6 +779,13 @@ typedef struct _net_nfc_request_send_apdu_t
net_nfc_data_s data;
} net_nfc_request_send_apdu_t;
+typedef struct _net_nfc_request_get_atr_t
+{
+ NET_NFC_REQUEST_MSG_HEADER
+
+ net_nfc_target_handle_s *handle;
+} net_nfc_request_get_atr_t;
+
typedef struct _net_nfc_request_connection_handover_t
{
NET_NFC_REQUEST_MSG_HEADER
@@ -1104,6 +1108,13 @@ typedef struct _net_nfc_response_send_apdu_t
void *trans_param;
} net_nfc_response_send_apdu_t;
+typedef struct _net_nfc_response_get_atr_t
+{
+ NET_NFC_RESPONSE_MSG_HEADER
+
+ data_s data;
+} net_nfc_response_get_atr_t;
+
typedef struct _net_nfc_response_get_server_state_t
{
NET_NFC_RESPONSE_MSG_HEADER
diff --git a/src/manager/CMakeLists.txt b/src/manager/CMakeLists.txt
index 43baaf0..afd8db5 100644
--- a/src/manager/CMakeLists.txt
+++ b/src/manager/CMakeLists.txt
@@ -14,7 +14,7 @@ IF("${CMAKE_BUILD_TYPE}" STREQUAL "")
ENDIF("${CMAKE_BUILD_TYPE}" STREQUAL "")
INCLUDE(FindPkgConfig)
-pkg_check_modules(manager_pkges REQUIRED aul glib-2.0 gobject-2.0 security-server dbus-glib-1 vconf dlog tapi appsvc libcurl bluetooth-api heynoti smartcard-service smartcard-service-common libssl pmapi svi capi-media-wav-player pkgmgr)
+pkg_check_modules(manager_pkges REQUIRED aul glib-2.0 gobject-2.0 security-server dbus-glib-1 vconf dlog tapi appsvc libcurl bluetooth-api heynoti smartcard-service smartcard-service-common libssl pmapi svi capi-media-wav-player pkgmgr pkgmgr-info)
FOREACH(flag ${manager_pkges_CFLAGS})
SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
diff --git a/src/manager/include/net_nfc_controller_private.h b/src/manager/include/net_nfc_controller_private.h
index 37a9c81..ab3bf32 100644
--- a/src/manager/include/net_nfc_controller_private.h
+++ b/src/manager/include/net_nfc_controller_private.h
@@ -21,6 +21,7 @@
#include "net_nfc_typedef.h"
#include "net_nfc_typedef_private.h"
+/* common api */
void* net_nfc_controller_onload(void);
bool net_nfc_controller_unload(void* handle);
bool net_nfc_controller_init (net_nfc_error_e* result);
@@ -32,8 +33,6 @@ bool net_nfc_controller_check_firmware_version(net_nfc_error_e* result);
bool net_nfc_controller_update_firmware(net_nfc_error_e* result);
bool net_nfc_controller_get_stack_information(net_nfc_stack_information_s* stack_info, net_nfc_error_e* result);
bool net_nfc_controller_confiure_discovery (net_nfc_discovery_mode_e mode, net_nfc_event_filter_e config, net_nfc_error_e* result);
-bool net_nfc_controller_get_secure_element_list(net_nfc_secure_element_info_s* list, int* count, net_nfc_error_e* result);
-bool net_nfc_controller_set_secure_element_mode(net_nfc_secure_element_type_e element_type, net_nfc_secure_element_mode_e mode, net_nfc_error_e* result);
bool net_nfc_controller_check_target_presence(net_nfc_target_handle_s* handle, net_nfc_error_e* result);
bool net_nfc_controller_connect(net_nfc_target_handle_s* handle, net_nfc_error_e* result);
bool net_nfc_controller_disconnect(net_nfc_target_handle_s* handle, net_nfc_error_e* result);
@@ -46,8 +45,7 @@ bool net_nfc_controller_transceive (net_nfc_target_handle_s* handle, net_nfc_tra
bool net_nfc_controller_exception_handler(void);
bool net_nfc_controller_is_ready(net_nfc_error_e* result);
-// LLCP API DEFINE
-
+/* llcp api */
bool net_nfc_controller_llcp_config(net_nfc_llcp_config_info_s * config, net_nfc_error_e * result);
bool net_nfc_controller_llcp_check_llcp(net_nfc_target_handle_s* handle, net_nfc_error_e* result);
bool net_nfc_controller_llcp_activate_llcp(net_nfc_target_handle_s * handle, net_nfc_error_e* result);
@@ -67,10 +65,15 @@ bool net_nfc_controller_llcp_reject(net_nfc_target_handle_s* handle, net_nfc_llc
bool net_nfc_controller_llcp_get_remote_config (net_nfc_target_handle_s* handle, net_nfc_llcp_config_info_s *config, net_nfc_error_e* result);
bool net_nfc_controller_llcp_get_remote_socket_info (net_nfc_target_handle_s* handle, net_nfc_llcp_socket_t socket, net_nfc_llcp_socket_option_s * option, net_nfc_error_e* result);
+/* secure element api */
+bool net_nfc_controller_secure_element_open(net_nfc_secure_element_type_e element_type, net_nfc_target_handle_s **handle, net_nfc_error_e *result);
+bool net_nfc_controller_secure_element_get_atr(net_nfc_target_handle_s *handle, data_s **atr, net_nfc_error_e *result);
+bool net_nfc_controller_secure_element_send_apdu(net_nfc_target_handle_s *handle, data_s *command, data_s **response, net_nfc_error_e *result);
+bool net_nfc_controller_secure_element_close(net_nfc_target_handle_s *handle, net_nfc_error_e *result);
+bool net_nfc_controller_get_secure_element_list(net_nfc_secure_element_info_s* list, int* count, net_nfc_error_e* result);
+bool net_nfc_controller_set_secure_element_mode(net_nfc_secure_element_type_e element_type, net_nfc_secure_element_mode_e mode, net_nfc_error_e* result);
-
-// LLCP API DEFINE
-
+/* test api */
bool net_nfc_controller_sim_test(net_nfc_error_e* result);
bool net_nfc_controller_prbs_test(net_nfc_error_e* result , uint32_t tech , uint32_t rate);
diff --git a/src/manager/include/net_nfc_server_dispatcher_private.h b/src/manager/include/net_nfc_server_dispatcher_private.h
index 2194d3e..c190247 100755
--- a/src/manager/include/net_nfc_server_dispatcher_private.h
+++ b/src/manager/include/net_nfc_server_dispatcher_private.h
@@ -1,31 +1,28 @@
/*
- * Copyright (c) 2012, 2013 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Flora License, Version 1.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
-
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
+ * Copyright (c) 2012, 2013 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
#ifndef __NET_NFC_SERVER_DISPATCHER__
#define __NET_NFC_SERVER_DISPATCHER__
#include "net_nfc_typedef_private.h"
-void net_nfc_dispatcher_queue_push(net_nfc_request_msg_t* req_msg);
+void net_nfc_dispatcher_queue_push(net_nfc_request_msg_t *req_msg);
bool net_nfc_dispatcher_start_thread();
void net_nfc_dispatcher_cleanup_queue(void);
void net_nfc_dispatcher_put_cleaner(void);
-
#endif
-
diff --git a/src/manager/include/net_nfc_service_llcp_private.h b/src/manager/include/net_nfc_service_llcp_private.h
index 3125b32..b2615cc 100755
--- a/src/manager/include/net_nfc_service_llcp_private.h
+++ b/src/manager/include/net_nfc_service_llcp_private.h
@@ -1,19 +1,18 @@
/*
- * Copyright (c) 2012, 2013 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Flora License, Version 1.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
-
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
+ * Copyright (c) 2012, 2013 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
#ifndef NET_NFC_SERVICE_LLCP_PRIVATE_H
#define NET_NFC_SERVICE_LLCP_PRIVATE_H
@@ -24,36 +23,35 @@
/* Service Name should be followed naming rule. */
// service access name
-#define SDP_SAN "urn:nfc:sn:sdp"
-#define IP_SAN "urn:nfc:sn:ip"
-#define SNEP_SAN "urn:nfc:sn:snep"
-#define OBEX_SAN "urn:nfc:sn:obex"
+#define SDP_SAN "urn:nfc:sn:sdp"
+#define IP_SAN "urn:nfc:sn:ip"
+#define SNEP_SAN "urn:nfc:sn:snep"
+#define OBEX_SAN "urn:nfc:sn:obex"
#define CONN_HANDOVER_SAN "urn:nfc:sn:handover"
-#define NPP_SAN "com.android.npp"
-#define NPP_SAP 0x10
-
-#define SDP_SAP 1 /* service discovery protocol service access point */
-#define IP_SAP 2 /* Internet protocol service access point */
-#define OBEX_SAP 3 /* ojbect exchange service access point */
-#define SNEP_SAP 4 /* simple ndef exchange protocol service access point */
+#define NPP_SAN "com.android.npp"
+#define NPP_SAP 0x10
-#define CONN_HANDOVER_SAP 5 /* connection handover service access point */
+#define SDP_SAP 1 /* service discovery protocol service access point */
+#define IP_SAP 2 /* Internet protocol service access point */
+#define OBEX_SAP 3 /* ojbect exchange service access point */
+#define SNEP_SAP 4 /* simple ndef exchange protocol service access point */
-#define SNEP_MAJOR_VER 1
-#define SNEP_MINOR_VER 0
+#define CONN_HANDOVER_SAP 5 /* connection handover service access point */
+#define SNEP_MAJOR_VER 1
+#define SNEP_MINOR_VER 0
-#define NPP_MAJOR_VER 0
-#define NPP_MINOR_VER 1
+#define NPP_MAJOR_VER 0
+#define NPP_MINOR_VER 1
-#define NPP_NDEF_ENTRY 0x00000001
+#define NPP_NDEF_ENTRY 0x00000001
-#define NPP_ACTION_CODE 0x01
+#define NPP_ACTION_CODE 0x01
-#define SNEP_MAX_BUFFER 128 /* simple NDEF exchange protocol */
-#define CH_MAX_BUFFER 128 /* connection handover */
+#define SNEP_MAX_BUFFER 128 /* simple NDEF exchange protocol */
+#define CH_MAX_BUFFER 128 /* connection handover */
typedef enum{
NPP_REQ_CONTINUE = 0x00,
@@ -150,12 +148,12 @@ typedef struct _net_nfc_llcp_npp_t{
} __attribute__((packed))net_nfc_llcp_npp_t;
#define NET_NFC_COMMON_HANDOVER_CONTEXT unsigned int step;\
- net_nfc_llcp_state_t *llcp_state;\
- void *user_data;\
- net_nfc_error_e result;\
- net_nfc_conn_handover_carrier_type_e request_type;\
- void *data;\
- bool is_requester;
+ net_nfc_llcp_state_t *llcp_state;\
+ void *user_data;\
+ net_nfc_error_e result;\
+ net_nfc_conn_handover_carrier_type_e request_type;\
+ void *data;\
+ bool is_requester;
typedef struct _net_nfc_handover_context_t
{
diff --git a/src/manager/include/net_nfc_service_private.h b/src/manager/include/net_nfc_service_private.h
index 628e7ff..68ffc11 100644
--- a/src/manager/include/net_nfc_service_private.h
+++ b/src/manager/include/net_nfc_service_private.h
@@ -1,18 +1,18 @@
/*
- * Copyright (c) 2012, 2013 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Flora License, Version 1.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
-
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
+ * Copyright (c) 2012, 2013 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
#ifndef NET_NFC_SERVICE_PRIVATE_H
@@ -32,4 +32,13 @@ void net_nfc_service_llcp_event_cb(void* info, void* user_context);
void net_nfc_service_msg_processing(data_s* data);
+void net_nfc_service_is_tag_connected(net_nfc_request_msg_t *msg);
+void net_nfc_service_get_current_tag_info(net_nfc_request_msg_t *msg);
+void net_nfc_service_get_current_target_handle(net_nfc_request_msg_t *msg);
+void net_nfc_service_init(net_nfc_request_msg_t *msg);
+void net_nfc_service_deinit(net_nfc_request_msg_t *msg);
+
+void net_nfc_service_restart_polling(net_nfc_request_msg_t *msg);
+void net_nfc_service_get_server_state(net_nfc_request_msg_t *msg);
+
#endif
diff --git a/src/manager/include/net_nfc_service_se_private.h b/src/manager/include/net_nfc_service_se_private.h
index 3a39827..101e2fb 100755
--- a/src/manager/include/net_nfc_service_se_private.h
+++ b/src/manager/include/net_nfc_service_se_private.h
@@ -48,5 +48,12 @@ void net_nfc_service_tapi_deinit(void);
bool net_nfc_service_transfer_apdu(int client_fd, data_s *apdu, void *trans_param);
bool net_nfc_service_request_atr(int client_fd, void *trans_param);
bool net_nfc_service_se_transaction_receive(net_nfc_request_msg_t* msg);
+void net_nfc_service_se_send_apdu(net_nfc_request_msg_t *msg);
+void net_nfc_service_se_get_atr(net_nfc_request_msg_t *msg);
+void net_nfc_service_se_close_se(net_nfc_request_msg_t *msg);
+void net_nfc_service_se_open_se(net_nfc_request_msg_t *msg);
+void net_nfc_service_se_set_se(net_nfc_request_msg_t *msg);
+void net_nfc_service_se_get_se(net_nfc_request_msg_t *msg);
+void net_nfc_service_se_cleanup();
#endif
diff --git a/src/manager/include/net_nfc_service_tag_private.h b/src/manager/include/net_nfc_service_tag_private.h
index aa23369..ee14395 100755
--- a/src/manager/include/net_nfc_service_tag_private.h
+++ b/src/manager/include/net_nfc_service_tag_private.h
@@ -1,18 +1,18 @@
/*
- * Copyright (c) 2012, 2013 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Flora License, Version 1.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
-
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
+ * Copyright (c) 2012, 2013 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
#ifndef NET_NFC_SERVICE_TAG_PRIVATE_H
@@ -24,4 +24,9 @@ data_s* net_nfc_service_tag_process(net_nfc_target_handle_s* handle, int devType
void net_nfc_service_clean_tag_context(net_nfc_request_target_detected_t* stand_alone, net_nfc_error_e result);
void net_nfc_service_watch_dog(net_nfc_request_msg_t* req_msg);
+void net_nfc_service_tag_make_readonly(net_nfc_request_msg_t *msg);
+void net_nfc_service_tag_read_ndef(net_nfc_request_msg_t *msg);
+void net_nfc_service_tag_write_ndef(net_nfc_request_msg_t *msg);
+void net_nfc_service_tag_format_ndef(net_nfc_request_msg_t *msg);
+
#endif
diff --git a/src/manager/include/net_nfc_service_test_private.h b/src/manager/include/net_nfc_service_test_private.h
new file mode 100755
index 0000000..dd4532c
--- /dev/null
+++ b/src/manager/include/net_nfc_service_test_private.h
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2012, 2013 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef NET_NFC_SERVICE_TEST_PRIVATE_H
+#define NET_NFC_SERVICE_TEST_PRIVATE_H
+
+#include "net_nfc_typedef_private.h"
+
+void net_nfc_service_test_sim_test(net_nfc_request_msg_t *msg);
+void net_nfc_service_test_get_firmware_version(net_nfc_request_msg_t *msg);
+void net_nfc_service_test_prbs_test(net_nfc_request_msg_t *msg);
+void net_nfc_service_test_set_eedata(net_nfc_request_msg_t *msg);
+
+#endif
diff --git a/src/manager/net_nfc_controller.c b/src/manager/net_nfc_controller.c
index e314684..9c083e1 100755
--- a/src/manager/net_nfc_controller.c
+++ b/src/manager/net_nfc_controller.c
@@ -287,6 +287,70 @@ bool net_nfc_controller_set_secure_element_mode(net_nfc_secure_element_type_e el
}
}
+bool net_nfc_controller_secure_element_open(net_nfc_secure_element_type_e element_type, net_nfc_target_handle_s **handle, net_nfc_error_e *result)
+{
+ int ret_val = 0;
+
+ ret_val = pm_lock_state(LCD_NORMAL, GOTO_STATE_NOW, 0);
+
+ if (g_interface.secure_element_open != NULL)
+ {
+ return g_interface.secure_element_open(element_type, handle, result);
+ }
+ else
+ {
+ *result = NET_NFC_DEVICE_DOES_NOT_SUPPORT_NFC;
+ DEBUG_SERVER_MSG("interface is null");
+ return false;
+ }
+}
+
+bool net_nfc_controller_secure_element_get_atr(net_nfc_target_handle_s *handle, data_s **atr, net_nfc_error_e *result)
+{
+ if (g_interface.secure_element_get_atr != NULL)
+ {
+ return g_interface.secure_element_get_atr(handle, atr, result);
+ }
+ else
+ {
+ *result = NET_NFC_DEVICE_DOES_NOT_SUPPORT_NFC;
+ DEBUG_SERVER_MSG("interface is null");
+ return false;
+ }
+}
+
+bool net_nfc_controller_secure_element_send_apdu(net_nfc_target_handle_s *handle, data_s *command, data_s **response, net_nfc_error_e *result)
+{
+ if (g_interface.secure_element_send_apdu != NULL)
+ {
+ return g_interface.secure_element_send_apdu(handle, command, response, result);
+ }
+ else
+ {
+ *result = NET_NFC_DEVICE_DOES_NOT_SUPPORT_NFC;
+ DEBUG_SERVER_MSG("interface is null");
+ return false;
+ }
+}
+
+bool net_nfc_controller_secure_element_close(net_nfc_target_handle_s *handle, net_nfc_error_e *result)
+{
+ int ret_val = 0;
+
+ ret_val = pm_unlock_state(LCD_NORMAL, PM_RESET_TIMER);
+
+ if (g_interface.secure_element_close != NULL)
+ {
+ return g_interface.secure_element_close(handle, result);
+ }
+ else
+ {
+ *result = NET_NFC_DEVICE_DOES_NOT_SUPPORT_NFC;
+ DEBUG_SERVER_MSG("interface is null");
+ return false;
+ }
+}
+
bool net_nfc_controller_check_target_presence(net_nfc_target_handle_s* handle, net_nfc_error_e* result)
{
if (g_interface.check_presence != NULL)
diff --git a/src/manager/net_nfc_server_dispatcher.c b/src/manager/net_nfc_server_dispatcher.c
index cb3d0f0..79a9188 100644
--- a/src/manager/net_nfc_server_dispatcher.c
+++ b/src/manager/net_nfc_server_dispatcher.c
@@ -18,7 +18,6 @@
#include <string.h>
#include <unistd.h>
#include <pthread.h>
-#include <stdarg.h>
#include <glib.h>
#include "vconf.h"
@@ -35,8 +34,9 @@
#include "net_nfc_service_llcp_private.h"
#include "net_nfc_service_llcp_handover_private.h"
#include "net_nfc_service_tag_private.h"
-#include "net_nfc_manager_util_private.h"
#include "net_nfc_service_se_private.h"
+#include "net_nfc_service_test_private.h"
+#include "net_nfc_manager_util_private.h"
#include "net_nfc_util_access_control_private.h"
#include "net_nfc_server_context_private.h"
@@ -45,9 +45,6 @@ static pthread_cond_t g_dispatcher_queue_cond = PTHREAD_COND_INITIALIZER;
static pthread_mutex_t g_dispatcher_queue_lock = PTHREAD_MUTEX_INITIALIZER;
static pthread_t g_dispatcher_thread;
-static uint8_t g_se_prev_type = SECURE_ELEMENT_TYPE_INVALID;
-static uint8_t g_se_prev_mode = SECURE_ELEMENT_OFF_MODE;
-
static void *_net_nfc_dispatcher_thread_func(void *data);
static net_nfc_request_msg_t *_net_nfc_dispatcher_queue_pop();
@@ -76,7 +73,7 @@ void net_nfc_dispatcher_cleanup_queue(void)
while ((req_msg = _net_nfc_dispatcher_queue_pop()) != NULL)
{
- DEBUG_MSG("abandon request : %d", req_msg->request_type);
+ DEBUG_ERR_MSG("abandon request : %d", req_msg->request_type);
_net_nfc_util_free_mem(req_msg);
}
@@ -174,7 +171,7 @@ bool net_nfc_dispatcher_start_thread()
static void *_net_nfc_dispatcher_thread_func(void *data)
{
- net_nfc_request_msg_t *req_msg = NULL;
+ net_nfc_request_msg_t *req_msg;
DEBUG_SERVER_MSG("net_nfc_controller_thread is created ");
@@ -195,293 +192,43 @@ static void *_net_nfc_dispatcher_thread_func(void *data)
{
case NET_NFC_MESSAGE_SERVICE_CLEANER :
{
- DEBUG_SERVER_MSG("client is terminated abnormally");
-
- if (g_se_prev_type == SECURE_ELEMENT_TYPE_ESE)
- {
- net_nfc_error_e result = NET_NFC_OK;
- net_nfc_target_handle_s *ese_handle = net_nfc_service_se_get_current_ese_handle();
-
- if (ese_handle != NULL)
- {
- DEBUG_SERVER_MSG("ese_handle was not freed and disconnected");
-
- net_nfc_service_se_close_ese();
-#ifdef BROADCAST_MESSAGE
- net_nfc_server_set_server_state(NET_NFC_SERVER_IDLE);
-#endif
- }
-
- if ((g_se_prev_type != net_nfc_service_se_get_se_type()) || (g_se_prev_mode != net_nfc_service_se_get_se_mode()))
- {
- net_nfc_controller_set_secure_element_mode(g_se_prev_type, g_se_prev_mode, &result);
-
- net_nfc_service_se_set_se_type(g_se_prev_type);
- net_nfc_service_se_set_se_mode(g_se_prev_mode);
- }
- }
- else if (g_se_prev_type == SECURE_ELEMENT_TYPE_UICC)
- {
- net_nfc_service_tapi_deinit();
- }
- else
- {
- DEBUG_SERVER_MSG("SE type is not valid");
- }
+ net_nfc_service_se_cleanup();
}
break;
case NET_NFC_MESSAGE_SEND_APDU_SE :
{
- net_nfc_request_send_apdu_t *detail = (net_nfc_request_send_apdu_t *)req_msg;
-
- if (detail->handle == (net_nfc_target_handle_s *)UICC_TARGET_HANDLE)
- {
- data_s apdu_data = { NULL, 0 };
-
- if (net_nfc_util_duplicate_data(&apdu_data, &detail->data) == false)
- break;
-
- net_nfc_service_transfer_apdu(req_msg->client_fd, &apdu_data, detail->trans_param);
-
- net_nfc_util_free_data(&apdu_data);
- }
- else if (detail->handle == net_nfc_service_se_get_current_ese_handle())
- {
- data_s *data = NULL;
- net_nfc_error_e result = NET_NFC_OK;
- net_nfc_transceive_info_s info;
- bool success = true;
-
- info.dev_type = NET_NFC_ISO14443_A_PICC;
- if (net_nfc_util_duplicate_data(&info.trans_data, &detail->data) == false)
- {
- DEBUG_ERR_MSG("alloc failed");
- break;
- }
-
- if ((success = net_nfc_controller_transceive(detail->handle, &info, &data, &result)) == true)
- {
- if (data != NULL)
- {
- DEBUG_SERVER_MSG("trasceive data recieved [%d], Success = %d", data->length, success);
- }
- }
- else
- {
- DEBUG_SERVER_MSG("trasceive is failed = [%d]", result);
- }
- net_nfc_util_free_data(&info.trans_data);
-
- if (net_nfc_server_check_client_is_running(req_msg->client_fd))
- {
- net_nfc_response_send_apdu_t resp = { 0 };
-
- resp.length = sizeof(net_nfc_response_send_apdu_t);
- resp.flags = detail->flags;
- resp.trans_param = detail->trans_param;
- resp.result = result;
-
- if (success && data != NULL)
- {
- DEBUG_MSG("send response send apdu msg");
- resp.data.length = data->length;
- net_nfc_send_response_msg(req_msg->client_fd, req_msg->request_type, (void *)&resp, sizeof(net_nfc_response_send_apdu_t),
- data->buffer, data->length, NULL);
- }
- else
- {
- DEBUG_MSG("send response send apdu msg");
- net_nfc_send_response_msg(req_msg->client_fd, req_msg->request_type, (void *)&resp, sizeof(net_nfc_response_send_apdu_t), NULL);
- }
- }
- }
- else
- {
- DEBUG_SERVER_MSG("invalid se handle");
-
- if (net_nfc_server_check_client_is_running(req_msg->client_fd))
- {
- net_nfc_response_send_apdu_t resp = { 0 };
-
- resp.length = sizeof(net_nfc_response_send_apdu_t);
- resp.flags = detail->flags;
- resp.trans_param = detail->trans_param;
- resp.result = NET_NFC_INVALID_PARAM;
+ net_nfc_service_se_send_apdu(req_msg);
+ }
+ break;
- net_nfc_send_response_msg(req_msg->client_fd, req_msg->request_type, (void *)&resp, sizeof(net_nfc_response_send_apdu_t), NULL);
- }
- }
+ case NET_NFC_MESSAGE_GET_ATR_SE :
+ {
+ net_nfc_service_se_get_atr(req_msg);
}
break;
case NET_NFC_MESSAGE_CLOSE_INTERNAL_SE :
{
- net_nfc_request_close_internal_se_t *detail = (net_nfc_request_close_internal_se_t *)req_msg;
- net_nfc_error_e result = NET_NFC_OK;
-
- if (detail->handle == (net_nfc_target_handle_s *)UICC_TARGET_HANDLE)
- {
- /*deinit TAPI*/
- DEBUG_SERVER_MSG("UICC is current secure element");
- net_nfc_service_tapi_deinit();
-
- }
- else if (detail->handle == net_nfc_service_se_get_current_ese_handle())
- {
- result = net_nfc_service_se_close_ese();
-#ifdef BROADCAST_MESSAGE
- net_nfc_server_unset_server_state(NET_NFC_SE_CONNECTED);
-#endif
- }
- else
- {
- DEBUG_ERR_MSG("invalid se handle received handle = [0x%p] and current handle = [0x%p]", detail->handle, net_nfc_service_se_get_current_ese_handle());
- }
-
- if ((g_se_prev_type != net_nfc_service_se_get_se_type()) || (g_se_prev_mode != net_nfc_service_se_get_se_mode()))
- {
- /*return back se mode*/
- net_nfc_controller_set_secure_element_mode(g_se_prev_type, g_se_prev_mode, &result);
-
- net_nfc_service_se_set_se_type(g_se_prev_type);
- net_nfc_service_se_set_se_mode(g_se_prev_mode);
- }
-
- if (net_nfc_server_check_client_is_running(req_msg->client_fd))
- {
- net_nfc_response_close_internal_se_t resp = { 0 };
-
- resp.length = sizeof(net_nfc_response_close_internal_se_t);
- resp.flags = detail->flags;
- resp.trans_param = detail->trans_param;
- resp.result = result;
-
- net_nfc_send_response_msg(req_msg->client_fd, req_msg->request_type, (void *)&resp, sizeof(net_nfc_response_close_internal_se_t), NULL);
- }
+ net_nfc_service_se_close_se(req_msg);
}
break;
case NET_NFC_MESSAGE_OPEN_INTERNAL_SE :
{
- net_nfc_request_open_internal_se_t *detail = (net_nfc_request_open_internal_se_t *)req_msg;
- net_nfc_target_handle_s *handle = NULL;
- net_nfc_error_e result = NET_NFC_OK;
-
- g_se_prev_type = net_nfc_service_se_get_se_type();
- g_se_prev_mode = net_nfc_service_se_get_se_mode();
-
- if (detail->se_type == SECURE_ELEMENT_TYPE_UICC)
- {
- /*off ESE*/
- net_nfc_controller_set_secure_element_mode(SECURE_ELEMENT_TYPE_ESE, SECURE_ELEMENT_OFF_MODE, &result);
-
- /*Off UICC. UICC SHOULD not be detected by external reader when being communicated in internal process*/
- net_nfc_controller_set_secure_element_mode(SECURE_ELEMENT_TYPE_UICC, SECURE_ELEMENT_OFF_MODE, &result);
-
- net_nfc_service_se_set_se_type(SECURE_ELEMENT_TYPE_UICC);
- net_nfc_service_se_set_se_mode(SECURE_ELEMENT_OFF_MODE);
-
- /*Init tapi api and return back response*/
- if (net_nfc_service_tapi_init() != true)
- {
- net_nfc_service_tapi_deinit();
- result = NET_NFC_INVALID_STATE;
- handle = NULL;
- }
- else
- {
- result = NET_NFC_OK;
- handle = (net_nfc_target_handle_s *)UICC_TARGET_HANDLE;
- }
- }
- else if (detail->se_type == SECURE_ELEMENT_TYPE_ESE)
- {
- /*Connect NFC-WI to ESE*/
- net_nfc_controller_set_secure_element_mode(SECURE_ELEMENT_TYPE_ESE, SECURE_ELEMENT_WIRED_MODE, &result);
-
- /*off UICC*/
- net_nfc_controller_set_secure_element_mode(SECURE_ELEMENT_TYPE_UICC, SECURE_ELEMENT_OFF_MODE, &result);
-
- net_nfc_service_se_set_se_type(SECURE_ELEMENT_TYPE_ESE);
- net_nfc_service_se_set_se_mode(SECURE_ELEMENT_WIRED_MODE);
- net_nfc_service_se_get_se_setting()->open_request_trans_param = detail->trans_param;
-
- result = NET_NFC_OK;
- handle = (net_nfc_target_handle_s *)1;
- }
- else
- {
- result = NET_NFC_INVALID_STATE;
- handle = NULL;
- }
-
- if (net_nfc_server_check_client_is_running(req_msg->client_fd))
- {
- net_nfc_response_open_internal_se_t resp = { 0 };
-
- resp.length = sizeof(net_nfc_response_open_internal_se_t);
- resp.flags = detail->flags;
- resp.trans_param = detail->trans_param;
- resp.result = result;
- resp.se_type = detail->se_type;
- resp.handle = handle;
-
- net_nfc_send_response_msg(req_msg->client_fd, req_msg->request_type, (void *)&resp, sizeof(net_nfc_response_set_se_t), NULL);
- }
+ net_nfc_service_se_open_se(req_msg);
}
break;
case NET_NFC_MESSAGE_SET_SE :
{
- net_nfc_request_set_se_t *detail = (net_nfc_request_set_se_t *)req_msg;
- net_nfc_error_e result = NET_NFC_OK;
- bool isTypeChange = false;
-
- if (detail->se_type != net_nfc_service_se_get_se_type())
- {
- result = net_nfc_service_se_change_se(detail->se_type);
- isTypeChange = true;
- }
-
- if (net_nfc_server_check_client_is_running(req_msg->client_fd))
- {
- net_nfc_response_set_se_t resp = { 0 };
-
- resp.length = sizeof(net_nfc_response_set_se_t);
- resp.flags = detail->flags;
- resp.trans_param = detail->trans_param;
- resp.se_type = detail->se_type;
- resp.result = result;
-
- net_nfc_send_response_msg(req_msg->client_fd, req_msg->request_type, (void *)&resp, sizeof(net_nfc_response_set_se_t), NULL);
- }
-
- if (isTypeChange)
- {
- net_nfc_response_notify_t noti_se = { 0, };
-
- net_nfc_broadcast_response_msg(NET_NFC_MESSAGE_SE_TYPE_CHANGED, (void *)&noti_se, sizeof(net_nfc_response_notify_t), NULL);
- }
+ net_nfc_service_se_set_se(req_msg);
}
break;
case NET_NFC_MESSAGE_GET_SE :
{
- net_nfc_request_get_se_t *detail = (net_nfc_request_get_se_t *)req_msg;
-
- if (net_nfc_server_check_client_is_running(req_msg->client_fd))
- {
- net_nfc_response_get_se_t resp = { 0 };
-
- resp.length = sizeof(net_nfc_request_get_se_t);
- resp.flags = detail->flags;
- resp.trans_param = detail->trans_param;
- resp.result = NET_NFC_OK;
- resp.se_type = net_nfc_service_se_get_se_type();
-
- net_nfc_send_response_msg(req_msg->client_fd, req_msg->request_type, (void *)&resp, sizeof(net_nfc_response_get_se_t), NULL);
- }
+ net_nfc_service_se_get_se(req_msg);
}
break;
@@ -586,581 +333,85 @@ static void *_net_nfc_dispatcher_thread_func(void *data)
case NET_NFC_MESSAGE_MAKE_READ_ONLY_NDEF :
{
- net_nfc_request_make_read_only_ndef_t *detail = (net_nfc_request_make_read_only_ndef_t *)req_msg;
- net_nfc_error_e result = NET_NFC_OK;
-
- if (net_nfc_server_is_target_connected(detail->handle))
- {
- net_nfc_controller_make_read_only_ndef(detail->handle, &result);
- }
- else
- {
- result = NET_NFC_TARGET_IS_MOVED_AWAY;
- }
-
- if (net_nfc_server_check_client_is_running(req_msg->client_fd))
- {
- net_nfc_response_make_read_only_ndef_t resp = { 0, };
-
- resp.length = sizeof(net_nfc_response_make_read_only_ndef_t);
- resp.flags = detail->flags;
- resp.result = result;
- resp.trans_param = detail->trans_param;
-
- net_nfc_send_response_msg(req_msg->client_fd, req_msg->request_type, (void *)&resp, sizeof(net_nfc_response_write_ndef_t), NULL);
- }
+ net_nfc_service_tag_make_readonly(req_msg);
}
break;
case NET_NFC_MESSAGE_IS_TAG_CONNECTED :
{
- net_nfc_request_is_tag_connected_t *detail = (net_nfc_request_is_tag_connected_t *)req_msg;
- net_nfc_current_target_info_s* target_info = NULL;
-
- target_info = net_nfc_server_get_tag_info();
- if (net_nfc_server_check_client_is_running(req_msg->client_fd))
- {
- net_nfc_response_is_tag_connected_t resp = { 0, };
-
- resp.length = sizeof(net_nfc_response_is_tag_connected_t);
- resp.flags = detail->flags;
- resp.trans_param = detail->trans_param;
-
- if (target_info != NULL)
- {
- resp.result = NET_NFC_OK;
- resp.devType = target_info->devType;
- }
- else
- {
- resp.result = NET_NFC_NOT_CONNECTED;
- resp.devType = NET_NFC_UNKNOWN_TARGET;
- }
-
- net_nfc_send_response_msg(req_msg->client_fd, req_msg->request_type, (void *)&resp, sizeof(net_nfc_response_is_tag_connected_t), NULL);
- }
+ net_nfc_service_is_tag_connected(req_msg);
}
break;
case NET_NFC_MESSAGE_GET_CURRENT_TAG_INFO :
{
- net_nfc_response_get_current_tag_info_t resp = { 0, };
- net_nfc_request_get_current_tag_info_t *detail = (net_nfc_request_get_current_tag_info_t *)req_msg;
- net_nfc_current_target_info_s *target_info = NULL;
- net_nfc_error_e result = NET_NFC_OK;
-
- resp.length = sizeof(net_nfc_response_get_current_tag_info_t);
- resp.flags = detail->flags;
- resp.trans_param = detail->trans_param;
-
- target_info = net_nfc_server_get_tag_info();
-
- if (target_info != NULL)
- {
- bool success = true;
- data_s* recv_data = NULL;
-
- if (target_info->devType != NET_NFC_NFCIP1_TARGET && target_info->devType != NET_NFC_NFCIP1_INITIATOR)
- {
-#ifdef BROADCAST_MESSAGE
- net_nfc_server_set_server_state(NET_NFC_TAG_CONNECTED);
-#endif
- DEBUG_SERVER_MSG("tag is connected");
-
- uint8_t ndef_card_state = 0;
- int max_data_size = 0;
- int real_data_size = 0;
-
- if (net_nfc_controller_check_ndef(target_info->handle, &ndef_card_state, &max_data_size, &real_data_size, &result) == true)
- {
- resp.ndefCardState = ndef_card_state;
- resp.maxDataSize = max_data_size;
- resp.actualDataSize = real_data_size;
- resp.is_ndef_supported = 1;
- }
-
- resp.devType = target_info->devType;
- resp.handle = target_info->handle;
- resp.number_of_keys = target_info->number_of_keys;
-
- net_nfc_util_duplicate_data(&resp.target_info_values, &target_info->target_info_values);
-
- if (resp.is_ndef_supported)
- {
- if (net_nfc_controller_read_ndef(target_info->handle, &recv_data, &(resp.result)) == true)
- {
- DEBUG_SERVER_MSG("net_nfc_controller_read_ndef is success");
-
- resp.raw_data.length = recv_data->length;
-
- success = net_nfc_send_response_msg(req_msg->client_fd, req_msg->request_type, (void *)&resp, sizeof(net_nfc_response_get_current_tag_info_t),
- (void *)(resp.target_info_values.buffer), resp.target_info_values.length,
- (void *)(recv_data->buffer), recv_data->length, NULL);
- }
- else
- {
- DEBUG_SERVER_MSG("net_nfc_controller_read_ndef is fail");
-
- resp.raw_data.length = 0;
-
- success = net_nfc_send_response_msg(req_msg->client_fd, req_msg->request_type, (void *)&resp, sizeof(net_nfc_response_get_current_tag_info_t),
- (void *)(resp.target_info_values.buffer), resp.target_info_values.length, NULL);
- }
- }
- else
- {
- resp.raw_data.length = 0;
-
- success = net_nfc_send_response_msg(req_msg->client_fd, req_msg->request_type, (void *)&resp, sizeof(net_nfc_response_get_current_tag_info_t),
- (void *)(resp.target_info_values.buffer), resp.target_info_values.length, NULL);
- }
-
- net_nfc_util_free_data(&resp.target_info_values);
- }
- }
- else
- {
- resp.result = NET_NFC_NOT_CONNECTED;
- net_nfc_send_response_msg(req_msg->client_fd, req_msg->request_type, (void *)&resp, sizeof(net_nfc_response_get_current_tag_info_t), NULL);
- }
+ net_nfc_service_get_current_tag_info(req_msg);
}
break;
case NET_NFC_MESSAGE_GET_CURRENT_TARGET_HANDLE :
{
- net_nfc_request_get_current_target_handle_t *detail = (net_nfc_request_get_current_target_handle_t *)req_msg;
- net_nfc_current_target_info_s *target_info = NULL;
-
- target_info = net_nfc_server_get_tag_info();
- if (net_nfc_server_check_client_is_running(req_msg->client_fd))
- {
- net_nfc_response_get_current_target_handle_t resp = { 0, };
-
- resp.length = sizeof(net_nfc_response_get_current_target_handle_t);
- resp.flags = detail->flags;
- resp.trans_param = detail->trans_param;
-
- if (target_info != NULL)
- {
- resp.handle = target_info->handle;
- resp.devType = target_info->devType;
- resp.result = NET_NFC_OK;
- }
- else
- {
- resp.result = NET_NFC_NOT_CONNECTED;
- }
-
- net_nfc_send_response_msg(req_msg->client_fd, req_msg->request_type, (void *)&resp, sizeof(net_nfc_response_get_current_target_handle_t), NULL);
- }
+ net_nfc_service_get_current_target_handle(req_msg);
}
break;
case NET_NFC_GET_SERVER_STATE :
{
- if (net_nfc_server_check_client_is_running(req_msg->client_fd))
- {
- net_nfc_response_get_server_state_t resp = { 0, };
-
- resp.length = sizeof(net_nfc_response_get_server_state_t);
- resp.flags = req_msg->flags;
- resp.state = net_nfc_server_get_server_state();
- resp.result = NET_NFC_OK;
-
- net_nfc_send_response_msg(req_msg->client_fd, req_msg->request_type, (void *)&resp, sizeof(net_nfc_response_get_server_state_t), NULL);
- }
+ net_nfc_service_get_server_state(req_msg);
}
break;
case NET_NFC_MESSAGE_READ_NDEF :
{
- net_nfc_request_read_ndef_t *detail = (net_nfc_request_read_ndef_t*)req_msg;
- net_nfc_error_e result = NET_NFC_OK;
- data_s *data = NULL;
- bool success = false;
-
- if (net_nfc_server_is_target_connected(detail->handle))
- {
- success = net_nfc_controller_read_ndef(detail->handle, &data, &result);
- }
- else
- {
- result = NET_NFC_TARGET_IS_MOVED_AWAY;
- }
-
- if (net_nfc_server_check_client_is_running(req_msg->client_fd))
- {
- net_nfc_response_read_ndef_t resp = { 0, };
-
- resp.length = sizeof(net_nfc_response_read_ndef_t);
- resp.flags = detail->flags;
- resp.result = result;
- resp.trans_param = detail->trans_param;
-
- if (success)
- {
- resp.data.length = data->length;
- net_nfc_send_response_msg(req_msg->client_fd, req_msg->request_type, (void *)&resp, sizeof(net_nfc_response_read_ndef_t),
- data->buffer, data->length, NULL);
- }
- else
- {
- resp.data.length = 0;
- resp.data.buffer = NULL;
- net_nfc_send_response_msg(req_msg->client_fd, req_msg->request_type, (void *)&resp, sizeof(net_nfc_response_read_ndef_t), NULL);
- }
- }
-
- if (data != NULL)
- {
- net_nfc_util_free_data(data);
- _net_nfc_util_free_mem(data);
- }
+ net_nfc_service_tag_read_ndef(req_msg);
}
break;
case NET_NFC_MESSAGE_WRITE_NDEF :
{
- net_nfc_request_write_ndef_t *detail = (net_nfc_request_write_ndef_t *)req_msg;
- net_nfc_error_e result = NET_NFC_OK;
-
- if (net_nfc_server_is_target_connected(detail->handle))
- {
- data_s data = { NULL, 0 };
-
- if (net_nfc_util_duplicate_data(&data, &detail->data) == true)
- {
- net_nfc_controller_write_ndef(detail->handle, &data, &result);
-
- net_nfc_util_free_data(&data);
- }
- else
- {
- result = NET_NFC_ALLOC_FAIL;
- }
- }
- else
- {
- result = NET_NFC_TARGET_IS_MOVED_AWAY;
- }
-
- if (net_nfc_server_check_client_is_running(req_msg->client_fd))
- {
- net_nfc_response_write_ndef_t resp = { 0, };
-
- resp.length = sizeof(net_nfc_response_write_ndef_t);
- resp.flags = detail->flags;
- resp.result = result;
- resp.trans_param = detail->trans_param;
-
- net_nfc_send_response_msg(req_msg->client_fd, req_msg->request_type, (void *)&resp, sizeof(net_nfc_response_write_ndef_t), NULL);
- }
+ net_nfc_service_tag_write_ndef(req_msg);
}
break;
case NET_NFC_MESSAGE_FORMAT_NDEF :
{
- net_nfc_request_format_ndef_t *detail = (net_nfc_request_format_ndef_t *)req_msg;
- net_nfc_error_e result = NET_NFC_OK;
-
- if (net_nfc_server_is_target_connected(detail->handle))
- {
- data_s data = { NULL, 0 };
-
- if (net_nfc_util_duplicate_data(&data, &detail->key) == true)
- {
- net_nfc_controller_format_ndef(detail->handle, &data, &result);
- net_nfc_util_free_data(&data);
- }
- else
- {
- result = NET_NFC_ALLOC_FAIL;
- }
- }
- else
- {
- result = NET_NFC_TARGET_IS_MOVED_AWAY;
- }
-
- if (net_nfc_server_check_client_is_running(req_msg->client_fd))
- {
- net_nfc_response_format_ndef_t resp = { 0 };
-
- resp.length = sizeof(net_nfc_response_format_ndef_t);
- resp.flags = detail->flags;
- resp.result = result;
- resp.trans_param = detail->trans_param;
-
- net_nfc_send_response_msg(req_msg->client_fd, req_msg->request_type, (void *)&resp, sizeof(net_nfc_response_format_ndef_t), NULL);
- }
+ net_nfc_service_tag_format_ndef(req_msg);
}
break;
case NET_NFC_MESSAGE_SIM_TEST :
{
- net_nfc_request_test_t *detail = (net_nfc_request_test_t *)req_msg;
- net_nfc_error_e result = NET_NFC_OK;
-
- if (net_nfc_controller_sim_test(&result) == true)
- {
- DEBUG_SERVER_MSG("net_nfc_controller_sim_test Result [SUCCESS]");
- }
- else
- {
- DEBUG_SERVER_MSG("net_nfc_controller_sim_test Result [ERROR1]");
- }
-
- if (net_nfc_server_check_client_is_running(req_msg->client_fd))
- {
- net_nfc_response_test_t resp = { 0, };
-
- resp.length = sizeof(net_nfc_response_test_t);
- resp.flags = detail->flags;
- resp.result = result;
- resp.trans_param = detail->trans_param;
-
- DEBUG_SERVER_MSG("SEND RESPONSE!!");
- net_nfc_send_response_msg(req_msg->client_fd, req_msg->request_type, (void *)&resp, sizeof(net_nfc_response_test_t), NULL);
- }
+ net_nfc_service_test_sim_test(req_msg);
}
break;
case NET_NFC_MESSAGE_GET_FIRMWARE_VERSION :
{
- net_nfc_error_e result = NET_NFC_OK;
- data_s *data = NULL;
-
- if (net_nfc_controller_get_firmware_version(&data, &result) == true)
- {
- DEBUG_SERVER_MSG("net_nfc_controller_update_firmware Result [SUCCESS]");
-
- }
- else
- {
- DEBUG_ERR_MSG("net_nfc_controller_update_firmware Result [ERROR3]");
- }
-
- if (net_nfc_server_check_client_is_running(req_msg->client_fd))
- {
- net_nfc_response_firmware_version_t resp = { 0, };
-
- resp.length = sizeof(net_nfc_response_firmware_version_t);
- resp.flags = req_msg->flags;
- resp.result = result;
- resp.data.length = data->length;
-
- net_nfc_send_response_msg(req_msg->client_fd, req_msg->request_type, (void *)&resp, sizeof(net_nfc_response_firmware_version_t), (void *)data->buffer, resp.data.length, NULL);
- }
-
- net_nfc_util_free_data(data);
+ net_nfc_service_test_get_firmware_version(req_msg);
}
break;
case NET_NFC_MESSAGE_PRBS_TEST :
{
- net_nfc_request_test_t *detail = (net_nfc_request_test_t *)req_msg;
- net_nfc_error_e result = NET_NFC_OK;
- uint32_t local_tech = 0;
- uint32_t local_rate = 0;
-
- local_tech = detail->tech;
- local_rate = detail->rate;
-
- DEBUG_SERVER_MSG("NET_NFC_MESSAGE_PRBS_TEST local_tech [%d]\n", local_tech);
- DEBUG_SERVER_MSG("NET_NFC_MESSAGE_PRBS_TEST local_rate [%d]\n", local_rate);
-
- if (net_nfc_controller_prbs_test(&result, local_tech, local_rate) == true)
- {
- DEBUG_SERVER_MSG("net_nfc_controller_prbs_test Result [SUCCESS]");
- }
- else
- {
- DEBUG_ERR_MSG("net_nfc_controller_prbs_test Result [ERROR3]");
- }
-
- if (net_nfc_server_check_client_is_running(req_msg->client_fd))
- {
- net_nfc_response_test_t resp = { 0, };
-
- resp.length = sizeof(net_nfc_response_test_t);
- resp.flags = detail->flags;
- resp.result = result;
- resp.trans_param = detail->trans_param;
-
- DEBUG_SERVER_MSG("SEND RESPONSE!!");
- net_nfc_send_response_msg(req_msg->client_fd, req_msg->request_type, (void *)&resp, sizeof(net_nfc_response_test_t), NULL);
- }
+ net_nfc_service_test_prbs_test(req_msg);
}
break;
case NET_NFC_MESSAGE_SET_EEDATA :
{
- net_nfc_request_eedata_register_t *detail = (net_nfc_request_eedata_register_t *)req_msg;
- net_nfc_error_e result = NET_NFC_OK;
- uint32_t local_mode = 0;
- uint32_t local_reg_id = 0;
- data_s data = { NULL, 0 };
-
- local_mode = detail->mode;
- local_reg_id = detail->reg_id;
-
- DEBUG_SERVER_MSG("NET_NFC_MESSAGE_SET_EEDATA local_mode [%d]\n", local_mode);
- DEBUG_SERVER_MSG("NET_NFC_MESSAGE_SET_EEDATA local_reg_id [%d]\n", local_reg_id);
-
- if (net_nfc_util_duplicate_data(&data, &detail->data) == true)
- {
- if (net_nfc_controller_eedata_register_set(&result, local_mode, local_reg_id, &data) == true)
- {
- DEBUG_SERVER_MSG("net_nfc_controller_eedata_register_set Result [SUCCESS]");
- }
- else
- {
- DEBUG_ERR_MSG("net_nfc_controller_eedata_register_set Result [ERROR3]");
- }
- net_nfc_util_free_data(&data);
-
- if (net_nfc_server_check_client_is_running(req_msg->client_fd))
- {
- net_nfc_response_test_t resp = { 0, };
-
- resp.length = sizeof(net_nfc_response_test_t);
- resp.flags = detail->flags;
- resp.result = result;
- resp.trans_param = detail->trans_param;
-
- DEBUG_SERVER_MSG("SEND RESPONSE!!");
- net_nfc_send_response_msg(req_msg->client_fd, req_msg->request_type, (void *)&resp, sizeof(net_nfc_response_test_t), NULL);
- }
- }
+ net_nfc_service_test_set_eedata(req_msg);
}
break;
case NET_NFC_MESSAGE_SERVICE_DEINIT :
{
- net_nfc_error_e result;
-
- result = net_nfc_service_se_change_se(SECURE_ELEMENT_TYPE_INVALID);
-
- /* release access control instance */
- net_nfc_util_access_control_release();
-
- net_nfc_server_free_current_tag_info();
-
- if (net_nfc_controller_deinit() == TRUE)
- {
- DEBUG_SERVER_MSG("net_nfc_controller_deinit success [%d]", result);
-
- /*vconf off*/
- if (vconf_set_bool(VCONFKEY_NFC_STATE, FALSE) != 0)
- {
- DEBUG_ERR_MSG("vconf_set_bool failed");
- }
-
- net_nfc_response_test_t resp = { 0, };
-
- resp.length = sizeof(net_nfc_response_test_t);
- resp.flags = req_msg->flags;
- resp.result = NET_NFC_OK;
- resp.trans_param = (void *)req_msg->user_param;
-
- net_nfc_broadcast_response_msg(req_msg->request_type, (void *)&resp, sizeof(net_nfc_response_test_t), NULL);
- }
- else
- {
- DEBUG_SERVER_MSG("net_nfc_controller_deinit failed");
-
- if (net_nfc_server_check_client_is_running(req_msg->client_fd))
- {
- net_nfc_response_test_t resp = { 0, };
-
- resp.length = sizeof(net_nfc_response_test_t);
- resp.flags = req_msg->flags;
- resp.result = NET_NFC_UNKNOWN_ERROR;
- resp.trans_param = (void *)req_msg->user_param;
-
- net_nfc_send_response_msg(req_msg->client_fd, req_msg->request_type, (void *)&resp, sizeof(net_nfc_response_test_t), NULL);
- }
- }
+ net_nfc_service_deinit(req_msg);
}
break;
case NET_NFC_MESSAGE_SERVICE_INIT :
{
- net_nfc_error_e result;
-
- if (net_nfc_controller_init(&result) == true)
- {
- net_nfc_llcp_config_info_s config = { 128, 1, 100, 0 };
-
- if (net_nfc_controller_register_listener(net_nfc_service_target_detected_cb, net_nfc_service_se_transaction_cb, net_nfc_service_llcp_event_cb, &result) == true)
- {
- DEBUG_SERVER_MSG("net_nfc_controller_register_listener Success!!");
- }
- else
- {
- DEBUG_ERR_MSG("net_nfc_controller_register_listener failed [%d]", result);
- }
-
- if (net_nfc_controller_llcp_config(&config, &result) == true)
- {
- /*We need to check the stack that supports the llcp or not.*/
- DEBUG_SERVER_MSG("llcp is enabled");
- }
- else
- {
- DEBUG_ERR_MSG("net_nfc_controller_llcp_config failed [%d]", result);
- }
-
- result = net_nfc_service_se_change_se(SECURE_ELEMENT_TYPE_UICC);
-
- if (net_nfc_controller_confiure_discovery(NET_NFC_DISCOVERY_MODE_CONFIG, NET_NFC_ALL_ENABLE, &result) == true)
- {
- DEBUG_SERVER_MSG("now, nfc is ready");
- }
- else
- {
- DEBUG_ERR_MSG("net_nfc_controller_confiure_discovery failed [%d]", result);
- }
-
- /* initialize access control instance */
- net_nfc_util_access_control_initialize();
-
- /*Send the Init Success Response Msg*/
- {
- net_nfc_response_test_t resp = { 0, };
-
- DEBUG_SERVER_MSG("net_nfc_controller_init success [%d]", result);
-
- resp.length = sizeof(net_nfc_response_test_t);
- resp.flags = req_msg->flags;
- resp.result = NET_NFC_OK;
- resp.trans_param = (void *)req_msg->user_param;
-
- /*vconf on*/
- if (vconf_set_bool(VCONFKEY_NFC_STATE, TRUE) != 0)
- {
- DEBUG_ERR_MSG("vconf_set_bool failed");
- }
-
- net_nfc_broadcast_response_msg(req_msg->request_type, (void *)&resp, sizeof(net_nfc_response_test_t), NULL);
- }
- }
- else
- {
- DEBUG_ERR_MSG("net_nfc_controller_init failed [%d]", result);
-
- if (net_nfc_server_check_client_is_running(req_msg->client_fd))
- {
- net_nfc_response_test_t resp = { 0, };
-
- resp.length = sizeof(net_nfc_response_test_t);
- resp.flags = req_msg->flags;
- resp.result = result;
- resp.trans_param = (void *)req_msg->user_param;
-
- net_nfc_send_response_msg(req_msg->client_fd, req_msg->request_type, (void *)&resp, sizeof(net_nfc_response_test_t), NULL);
- }
- }
+ net_nfc_service_init(req_msg);
}
break;
@@ -1174,33 +425,7 @@ static void *_net_nfc_dispatcher_thread_func(void *data)
case NET_NFC_MESSAGE_SERVICE_RESTART_POLLING_LOOP :
{
- net_nfc_error_e result = NET_NFC_OK;
- int pm_state = 0;
- int set_config = 0;
- net_nfc_request_msg_t *discovery_req = (net_nfc_request_msg_t *)req_msg;
-
- pm_state = discovery_req->user_param;
-
- DEBUG_SERVER_MSG("NET_NFC_MESSAGE_SERVICE_RESTART_POLLING_LOOP PM State = [%d]", pm_state);
-
- if (pm_state == 1)
- {
- set_config = NET_NFC_ALL_ENABLE;
- }
- else if (pm_state == 3)
- {
- set_config = NET_NFC_ALL_DISABLE;
- }
- else
- {
- DEBUG_SERVER_MSG("Do not anything!!");
- }
-
- //if (net_nfc_controller_confiure_discovery(NET_NFC_DISCOVERY_MODE_RESUME, NET_NFC_ALL_ENABLE, &result) == true)
- if (net_nfc_controller_confiure_discovery(NET_NFC_DISCOVERY_MODE_CONFIG, set_config, &result) == true)
- {
- DEBUG_SERVER_MSG("now, nfc polling loop is running again");
- }
+ net_nfc_service_restart_polling(req_msg);
}
break;
@@ -1278,44 +503,7 @@ static void *_net_nfc_dispatcher_thread_func(void *data)
case NET_NFC_MESSAGE_SERVICE_SE :
{
- net_nfc_request_set_se_t *detail = (net_nfc_request_set_se_t *)req_msg;
- net_nfc_error_e result = NET_NFC_OK;
- int mode;
-
- mode = (int)detail->se_type;
-
- if (mode == NET_NFC_SE_CMD_UICC_ON)
- {
- /*turn on UICC*/
- net_nfc_controller_set_secure_element_mode(SECURE_ELEMENT_TYPE_UICC, SECURE_ELEMENT_VIRTUAL_MODE, &result);
-
- /*turn off ESE*/
- net_nfc_controller_set_secure_element_mode(SECURE_ELEMENT_TYPE_ESE, SECURE_ELEMENT_OFF_MODE, &result);
- }
- else if (mode == NET_NFC_SE_CMD_ESE_ON)
- {
- /*turn off UICC*/
- net_nfc_controller_set_secure_element_mode(SECURE_ELEMENT_TYPE_UICC, SECURE_ELEMENT_OFF_MODE, &result);
-
- /*turn on ESE*/
- net_nfc_controller_set_secure_element_mode(SECURE_ELEMENT_TYPE_ESE, SECURE_ELEMENT_VIRTUAL_MODE, &result);
- }
- else if (mode == NET_NFC_SE_CMD_ALL_OFF)
- {
- /*turn off both*/
- net_nfc_controller_set_secure_element_mode(SECURE_ELEMENT_TYPE_UICC, SECURE_ELEMENT_OFF_MODE, &result);
-
- /*turn on ESE*/
- net_nfc_controller_set_secure_element_mode(SECURE_ELEMENT_TYPE_ESE, SECURE_ELEMENT_OFF_MODE, &result);
- }
- else
- {
- /*turn off both*/
- net_nfc_controller_set_secure_element_mode(SECURE_ELEMENT_TYPE_UICC, SECURE_ELEMENT_VIRTUAL_MODE, &result);
-
- /*turn on ESE*/
- net_nfc_controller_set_secure_element_mode(SECURE_ELEMENT_TYPE_ESE, SECURE_ELEMENT_VIRTUAL_MODE, &result);
- }
+ net_nfc_service_se_set_se(req_msg);
}
break;
diff --git a/src/manager/net_nfc_server_ipc.c b/src/manager/net_nfc_server_ipc.c
index fb8a607..a25f8fa 100755
--- a/src/manager/net_nfc_server_ipc.c
+++ b/src/manager/net_nfc_server_ipc.c
@@ -30,7 +30,7 @@
#include "vconf.h"
#ifdef SECURITY_SERVER
-#include <security-server.h>
+#include "security-server.h"
#endif
#include "net_nfc_typedef_private.h"
diff --git a/src/manager/net_nfc_service.c b/src/manager/net_nfc_service.c
index b06b502..7e16578 100644
--- a/src/manager/net_nfc_service.c
+++ b/src/manager/net_nfc_service.c
@@ -17,6 +17,8 @@
#include <pthread.h>
#include <malloc.h>
+#include "vconf.h"
+
#include "net_nfc_controller_private.h"
#include "net_nfc_util_private.h"
#include "net_nfc_typedef.h"
@@ -32,6 +34,7 @@
#include "net_nfc_util_ndef_message.h"
#include "net_nfc_util_ndef_record.h"
#include "net_nfc_util_access_control_private.h"
+#include "net_nfc_server_context_private.h"
/* static variable */
@@ -180,7 +183,7 @@ static bool _is_isp_dep_ndef_formatable(net_nfc_target_handle_s *handle, int dev
}
else
{
- DEBUG_ERR_MSG("net_nfc_controller_transceive is failed, [%d]", result);
+ DEBUG_ERR_MSG("net_nfc_controller_transceive is failed, [%d]", error);
}
return result;
@@ -518,3 +521,333 @@ static void _net_nfc_service_show_exception_msg(char* msg)
bundle_free(kb);
}
+
+void net_nfc_service_is_tag_connected(net_nfc_request_msg_t *msg)
+{
+ net_nfc_request_is_tag_connected_t *detail = (net_nfc_request_is_tag_connected_t *)msg;
+ net_nfc_current_target_info_s *target_info;
+
+ target_info = net_nfc_server_get_tag_info();
+ if (net_nfc_server_check_client_is_running(msg->client_fd))
+ {
+ net_nfc_response_is_tag_connected_t resp = { 0, };
+
+ resp.length = sizeof(net_nfc_response_is_tag_connected_t);
+ resp.flags = detail->flags;
+ resp.trans_param = detail->trans_param;
+
+ if (target_info != NULL)
+ {
+ resp.result = NET_NFC_OK;
+ resp.devType = target_info->devType;
+ }
+ else
+ {
+ resp.result = NET_NFC_NOT_CONNECTED;
+ resp.devType = NET_NFC_UNKNOWN_TARGET;
+ }
+
+ net_nfc_send_response_msg(msg->client_fd, msg->request_type,
+ (void *)&resp, sizeof(net_nfc_response_is_tag_connected_t), NULL);
+ }
+}
+
+void net_nfc_service_get_current_tag_info(net_nfc_request_msg_t *msg)
+{
+ net_nfc_response_get_current_tag_info_t resp = { 0, };
+ net_nfc_request_get_current_tag_info_t *detail = (net_nfc_request_get_current_tag_info_t *)msg;
+ net_nfc_current_target_info_s *target_info = NULL;
+ net_nfc_error_e result = NET_NFC_OK;
+
+ resp.length = sizeof(net_nfc_response_get_current_tag_info_t);
+ resp.flags = detail->flags;
+ resp.trans_param = detail->trans_param;
+
+ target_info = net_nfc_server_get_tag_info();
+ if (target_info != NULL)
+ {
+ bool success = true;
+ data_s *recv_data = NULL;
+
+ if (target_info->devType != NET_NFC_NFCIP1_TARGET && target_info->devType != NET_NFC_NFCIP1_INITIATOR)
+ {
+#ifdef BROADCAST_MESSAGE
+ net_nfc_server_set_server_state(NET_NFC_TAG_CONNECTED);
+#endif
+ DEBUG_SERVER_MSG("tag is connected");
+
+ uint8_t ndef_card_state = 0;
+ int max_data_size = 0;
+ int real_data_size = 0;
+
+ if (net_nfc_controller_check_ndef(target_info->handle,
+ &ndef_card_state, &max_data_size, &real_data_size, &result) == true)
+ {
+ resp.ndefCardState = ndef_card_state;
+ resp.maxDataSize = max_data_size;
+ resp.actualDataSize = real_data_size;
+ resp.is_ndef_supported = 1;
+ }
+
+ resp.devType = target_info->devType;
+ resp.handle = target_info->handle;
+ resp.number_of_keys = target_info->number_of_keys;
+
+ net_nfc_util_duplicate_data(&resp.target_info_values, &target_info->target_info_values);
+
+ if (resp.is_ndef_supported)
+ {
+ if (net_nfc_controller_read_ndef(target_info->handle, &recv_data, &(resp.result)) == true)
+ {
+ DEBUG_SERVER_MSG("net_nfc_controller_read_ndef is success");
+
+ resp.raw_data.length = recv_data->length;
+
+ success = net_nfc_send_response_msg(msg->client_fd, msg->request_type, (void *)&resp, sizeof(net_nfc_response_get_current_tag_info_t),
+ (void *)(resp.target_info_values.buffer), resp.target_info_values.length,
+ (void *)(recv_data->buffer), recv_data->length, NULL);
+ }
+ else
+ {
+ DEBUG_SERVER_MSG("net_nfc_controller_read_ndef is fail");
+
+ resp.raw_data.length = 0;
+
+ success = net_nfc_send_response_msg(msg->client_fd, msg->request_type, (void *)&resp, sizeof(net_nfc_response_get_current_tag_info_t),
+ (void *)(resp.target_info_values.buffer), resp.target_info_values.length, NULL);
+ }
+ }
+ else
+ {
+ resp.raw_data.length = 0;
+
+ success = net_nfc_send_response_msg(msg->client_fd, msg->request_type, (void *)&resp, sizeof(net_nfc_response_get_current_tag_info_t),
+ (void *)(resp.target_info_values.buffer), resp.target_info_values.length, NULL);
+ }
+
+ net_nfc_util_free_data(&resp.target_info_values);
+ }
+ else
+ {
+ /* LLCP */
+ resp.result = NET_NFC_NOT_CONNECTED;
+ net_nfc_send_response_msg(msg->client_fd, msg->request_type,
+ (void *)&resp, sizeof(net_nfc_response_get_current_tag_info_t), NULL);
+ }
+ }
+ else
+ {
+ resp.result = NET_NFC_NOT_CONNECTED;
+ net_nfc_send_response_msg(msg->client_fd, msg->request_type,
+ (void *)&resp, sizeof(net_nfc_response_get_current_tag_info_t), NULL);
+ }
+}
+
+void net_nfc_service_get_current_target_handle(net_nfc_request_msg_t *msg)
+{
+ net_nfc_request_get_current_target_handle_t *detail = (net_nfc_request_get_current_target_handle_t *)msg;
+ net_nfc_current_target_info_s *target_info = NULL;
+
+ target_info = net_nfc_server_get_tag_info();
+ if (net_nfc_server_check_client_is_running(msg->client_fd))
+ {
+ net_nfc_response_get_current_target_handle_t resp = { 0, };
+
+ resp.length = sizeof(net_nfc_response_get_current_target_handle_t);
+ resp.flags = detail->flags;
+ resp.trans_param = detail->trans_param;
+
+ if (target_info != NULL)
+ {
+ resp.handle = target_info->handle;
+ resp.devType = target_info->devType;
+ resp.result = NET_NFC_OK;
+ }
+ else
+ {
+ resp.result = NET_NFC_NOT_CONNECTED;
+ }
+
+ net_nfc_send_response_msg(msg->client_fd, msg->request_type,
+ (void *)&resp, sizeof(net_nfc_response_get_current_target_handle_t), NULL);
+ }
+}
+
+void net_nfc_service_deinit(net_nfc_request_msg_t *msg)
+{
+ net_nfc_error_e result;
+
+ result = net_nfc_service_se_change_se(SECURE_ELEMENT_TYPE_INVALID);
+
+ /* release access control instance */
+ net_nfc_util_access_control_release();
+
+ net_nfc_server_free_current_tag_info();
+
+ if (net_nfc_controller_deinit() == TRUE)
+ {
+ DEBUG_SERVER_MSG("net_nfc_controller_deinit success [%d]", result);
+
+ /*vconf off*/
+ if (vconf_set_bool(VCONFKEY_NFC_STATE, FALSE) != 0)
+ {
+ DEBUG_ERR_MSG("vconf_set_bool failed");
+ }
+
+ net_nfc_response_test_t resp = { 0, };
+
+ resp.length = sizeof(net_nfc_response_test_t);
+ resp.flags = msg->flags;
+ resp.result = NET_NFC_OK;
+ resp.trans_param = (void *)msg->user_param;
+
+ net_nfc_broadcast_response_msg(msg->request_type, (void *)&resp,
+ sizeof(net_nfc_response_test_t), NULL);
+ }
+ else
+ {
+ DEBUG_SERVER_MSG("net_nfc_controller_deinit failed");
+
+ if (net_nfc_server_check_client_is_running(msg->client_fd))
+ {
+ net_nfc_response_test_t resp = { 0, };
+
+ resp.length = sizeof(net_nfc_response_test_t);
+ resp.flags = msg->flags;
+ resp.result = NET_NFC_UNKNOWN_ERROR;
+ resp.trans_param = (void *)msg->user_param;
+
+ net_nfc_send_response_msg(msg->client_fd, msg->request_type,
+ (void *)&resp, sizeof(net_nfc_response_test_t), NULL);
+ }
+ }
+}
+
+void net_nfc_service_init(net_nfc_request_msg_t *msg)
+{
+ net_nfc_error_e result;
+
+ if (net_nfc_controller_init(&result) == true)
+ {
+ net_nfc_llcp_config_info_s config = { 128, 1, 100, 0 };
+
+ if (net_nfc_controller_register_listener(net_nfc_service_target_detected_cb,
+ net_nfc_service_se_transaction_cb, net_nfc_service_llcp_event_cb, &result) == true)
+ {
+ DEBUG_SERVER_MSG("net_nfc_controller_register_listener Success!!");
+ }
+ else
+ {
+ DEBUG_ERR_MSG("net_nfc_controller_register_listener failed [%d]", result);
+ }
+
+ if (net_nfc_controller_llcp_config(&config, &result) == true)
+ {
+ /*We need to check the stack that supports the llcp or not.*/
+ DEBUG_SERVER_MSG("llcp is enabled");
+ }
+ else
+ {
+ DEBUG_ERR_MSG("net_nfc_controller_llcp_config failed [%d]", result);
+ }
+
+ result = net_nfc_service_se_change_se(SECURE_ELEMENT_TYPE_UICC);
+
+ if (net_nfc_controller_confiure_discovery(NET_NFC_DISCOVERY_MODE_CONFIG,
+ NET_NFC_ALL_ENABLE, &result) == true)
+ {
+ DEBUG_SERVER_MSG("now, nfc is ready");
+ }
+ else
+ {
+ DEBUG_ERR_MSG("net_nfc_controller_confiure_discovery failed [%d]", result);
+ }
+
+ /* initialize access control instance */
+ net_nfc_util_access_control_initialize();
+
+ /*Send the Init Success Response Msg*/
+ {
+ net_nfc_response_test_t resp = { 0, };
+
+ DEBUG_SERVER_MSG("net_nfc_controller_init success [%d]", result);
+
+ resp.length = sizeof(net_nfc_response_test_t);
+ resp.flags = msg->flags;
+ resp.result = NET_NFC_OK;
+ resp.trans_param = (void *)msg->user_param;
+
+ /*vconf on*/
+ if (vconf_set_bool(VCONFKEY_NFC_STATE, TRUE) != 0)
+ {
+ DEBUG_ERR_MSG("vconf_set_bool failed");
+ }
+
+ net_nfc_broadcast_response_msg(msg->request_type,
+ (void *)&resp, sizeof(net_nfc_response_test_t), NULL);
+ }
+ }
+ else
+ {
+ DEBUG_ERR_MSG("net_nfc_controller_init failed [%d]", result);
+
+ if (net_nfc_server_check_client_is_running(msg->client_fd))
+ {
+ net_nfc_response_test_t resp = { 0, };
+
+ resp.length = sizeof(net_nfc_response_test_t);
+ resp.flags = msg->flags;
+ resp.result = result;
+ resp.trans_param = (void *)msg->user_param;
+
+ net_nfc_send_response_msg(msg->client_fd, msg->request_type,
+ (void *)&resp, sizeof(net_nfc_response_test_t), NULL);
+ }
+ }
+}
+
+void net_nfc_service_restart_polling(net_nfc_request_msg_t *msg)
+{
+ net_nfc_request_msg_t *discovery_req = (net_nfc_request_msg_t *)msg;
+ net_nfc_error_e result = NET_NFC_OK;
+ int pm_state = 0;
+ int set_config = 0;
+
+ pm_state = discovery_req->user_param;
+
+ DEBUG_SERVER_MSG("NET_NFC_MESSAGE_SERVICE_RESTART_POLLING_LOOP PM State = [%d]", pm_state);
+
+ if (pm_state == 1)
+ {
+ set_config = NET_NFC_ALL_ENABLE;
+ }
+ else if (pm_state == 3)
+ {
+ set_config = NET_NFC_ALL_DISABLE;
+ }
+ else
+ {
+ DEBUG_SERVER_MSG("Do not anything!!");
+ }
+
+ if (net_nfc_controller_confiure_discovery(NET_NFC_DISCOVERY_MODE_CONFIG, set_config, &result) == true)
+ {
+ DEBUG_SERVER_MSG("now, nfc polling loop is running again");
+ }
+}
+
+void net_nfc_service_get_server_state(net_nfc_request_msg_t *msg)
+{
+ if (net_nfc_server_check_client_is_running(msg->client_fd))
+ {
+ net_nfc_response_get_server_state_t resp = { 0, };
+
+ resp.length = sizeof(net_nfc_response_get_server_state_t);
+ resp.flags = msg->flags;
+ resp.state = net_nfc_server_get_server_state();
+ resp.result = NET_NFC_OK;
+
+ net_nfc_send_response_msg(msg->client_fd, msg->request_type,
+ (void *)&resp, sizeof(net_nfc_response_get_server_state_t), NULL);
+ }
+}
diff --git a/src/manager/net_nfc_service_se.c b/src/manager/net_nfc_service_se.c
index a7b3aa5..2a70b0e 100755
--- a/src/manager/net_nfc_service_se.c
+++ b/src/manager/net_nfc_service_se.c
@@ -31,8 +31,14 @@
#include "net_nfc_server_ipc_private.h"
#include "net_nfc_server_dispatcher_private.h"
#include "net_nfc_service_se_private.h"
+#include "net_nfc_server_context_private.h"
/* define */
+
+/* static variable */
+static uint8_t g_se_prev_type = SECURE_ELEMENT_TYPE_INVALID;
+static uint8_t g_se_prev_mode = SECURE_ELEMENT_OFF_MODE;
+
/* For ESE*/
static net_nfc_se_setting_t g_se_setting;
@@ -198,7 +204,8 @@ void net_nfc_service_se_detected(net_nfc_request_msg_t *msg)
DEBUG_SERVER_MSG("trans param = [%p]", resp.trans_param);
- net_nfc_send_response_msg(detail_msg->client_fd, NET_NFC_MESSAGE_OPEN_INTERNAL_SE, &resp, sizeof(net_nfc_response_open_internal_se_t), NULL);
+ net_nfc_send_response_msg(detail_msg->client_fd, NET_NFC_MESSAGE_OPEN_INTERNAL_SE,
+ &resp, sizeof(net_nfc_response_open_internal_se_t), NULL);
g_se_setting.open_request_trans_param = NULL;
}
@@ -209,7 +216,7 @@ net_nfc_error_e net_nfc_service_se_close_ese()
if (g_se_setting.current_ese_handle != NULL)
{
- if (net_nfc_controller_disconnect(g_se_setting.current_ese_handle, &result) == false)
+ if (net_nfc_controller_secure_element_close(g_se_setting.current_ese_handle, &result) == false)
{
net_nfc_controller_exception_handler();
}
@@ -381,12 +388,14 @@ void _uicc_transmit_apdu_cb(TapiHandle *handle, int result, void *data, void *us
resp.data.length = apdu->apdu_resp_len;
DEBUG_MSG("send response send apdu msg");
- net_nfc_send_response_msg(param->client_fd, NET_NFC_MESSAGE_SEND_APDU_SE, (void *)&resp, sizeof(net_nfc_response_send_apdu_t), apdu->apdu_resp, apdu->apdu_resp_len, NULL);
+ net_nfc_send_response_msg(param->client_fd, NET_NFC_MESSAGE_SEND_APDU_SE,
+ (void *)&resp, sizeof(net_nfc_response_send_apdu_t), apdu->apdu_resp, apdu->apdu_resp_len, NULL);
}
else
{
DEBUG_MSG("send response send apdu msg");
- net_nfc_send_response_msg(param->client_fd, NET_NFC_MESSAGE_SEND_APDU_SE, (void *)&resp, sizeof(net_nfc_response_send_apdu_t), NULL);
+ net_nfc_send_response_msg(param->client_fd, NET_NFC_MESSAGE_SEND_APDU_SE,
+ (void *)&resp, sizeof(net_nfc_response_send_apdu_t), NULL);
}
_net_nfc_util_free_mem(param);
@@ -435,10 +444,437 @@ bool net_nfc_service_se_transaction_receive(net_nfc_request_msg_t* msg)
{
DEBUG_SERVER_MSG("launch se app");
- net_nfc_app_util_launch_se_transaction_app(se_event->aid.buffer, se_event->aid.length, se_event->param.buffer, se_event->param.length);
+ net_nfc_app_util_launch_se_transaction_app(se_event->aid.buffer,
+ se_event->aid.length, se_event->param.buffer, se_event->param.length);
DEBUG_SERVER_MSG("launch se app end");
}
return res;
}
+
+void net_nfc_service_se_send_apdu(net_nfc_request_msg_t *msg)
+{
+ net_nfc_request_send_apdu_t *detail = (net_nfc_request_send_apdu_t *)msg;
+
+ if (detail->handle == (net_nfc_target_handle_s *)UICC_TARGET_HANDLE)
+ {
+ data_s apdu_data = { NULL, 0 };
+
+ if (net_nfc_util_duplicate_data(&apdu_data, &detail->data) == false)
+ return;
+
+ net_nfc_service_transfer_apdu(msg->client_fd, &apdu_data, detail->trans_param);
+
+ net_nfc_util_free_data(&apdu_data);
+ }
+ else if (detail->handle == net_nfc_service_se_get_current_ese_handle())
+ {
+ bool success;
+ data_s command;
+ data_s *response = NULL;
+ net_nfc_error_e result = NET_NFC_UNKNOWN_ERROR;
+
+ if (net_nfc_util_duplicate_data(&command, &detail->data) == false)
+ {
+ DEBUG_ERR_MSG("alloc failed");
+ return;
+ }
+
+ if ((success = net_nfc_controller_secure_element_send_apdu(detail->handle, &command, &response, &result)) == true)
+ {
+ if (response != NULL)
+ {
+ DEBUG_SERVER_MSG("transceive data received, len [%d]", response->length);
+ }
+ }
+ else
+ {
+ DEBUG_ERR_MSG("transceive failed = [%d]", result);
+ }
+ net_nfc_util_free_data(&command);
+
+ if (net_nfc_server_check_client_is_running(msg->client_fd))
+ {
+ net_nfc_response_send_apdu_t resp = { 0, };
+
+ DEBUG_SERVER_MSG("send response send_apdu");
+
+ resp.length = sizeof(net_nfc_response_send_apdu_t);
+ resp.flags = detail->flags;
+ resp.user_param = detail->user_param;
+ resp.trans_param = detail->trans_param;
+ resp.result = result;
+
+ if (response != NULL)
+ {
+ resp.data.length = response->length;
+ net_nfc_send_response_msg(msg->client_fd, msg->request_type,
+ (void *)&resp, sizeof(net_nfc_response_send_apdu_t),
+ response->buffer, response->length, NULL);
+ }
+ else
+ {
+ net_nfc_send_response_msg(msg->client_fd, msg->request_type,
+ (void *)&resp, sizeof(net_nfc_response_send_apdu_t), NULL);
+ }
+ }
+ }
+ else
+ {
+ DEBUG_SERVER_MSG("invalid se handle");
+
+ if (net_nfc_server_check_client_is_running(msg->client_fd))
+ {
+ net_nfc_response_send_apdu_t resp = { 0 };
+
+ resp.length = sizeof(net_nfc_response_send_apdu_t);
+ resp.flags = detail->flags;
+ resp.trans_param = detail->trans_param;
+ resp.result = NET_NFC_INVALID_PARAM;
+
+ net_nfc_send_response_msg(msg->client_fd, msg->request_type,
+ (void *)&resp, sizeof(net_nfc_response_send_apdu_t), NULL);
+ }
+ }
+}
+
+void net_nfc_service_se_get_atr(net_nfc_request_msg_t *msg)
+{
+ net_nfc_request_get_atr_t *detail = (net_nfc_request_get_atr_t *)msg;
+
+ if (detail->handle == (net_nfc_target_handle_s *)UICC_TARGET_HANDLE)
+ {
+ net_nfc_service_request_atr(msg->client_fd, (void *)detail->user_param);
+ }
+ else if (detail->handle == net_nfc_service_se_get_current_ese_handle())
+ {
+ data_s *data = NULL;
+ net_nfc_error_e result = NET_NFC_UNKNOWN_ERROR;
+
+ /* TODO : get atr */
+#if 0
+ net_nfc_transceive_info_s info;
+
+ info.dev_type = NET_NFC_ISO14443_A_PICC;
+ if (net_nfc_controller_transceive(detail->handle, &info, &data, &result) == true)
+ {
+ if (data != NULL)
+ {
+ DEBUG_SERVER_MSG("transceive data received [%d]", data->length);
+ }
+ }
+ else
+ {
+ DEBUG_SERVER_MSG("transceive is failed = [%d]", result);
+ }
+#endif
+ if (net_nfc_server_check_client_is_running(msg->client_fd))
+ {
+ net_nfc_response_get_atr_t resp = { 0, };
+
+ resp.length = sizeof(net_nfc_response_get_atr_t);
+ resp.flags = detail->flags;
+ resp.user_param = detail->user_param;
+ resp.result = result;
+
+ if (data != NULL)
+ {
+ DEBUG_SERVER_MSG("send response send apdu msg");
+ resp.data.length = data->length;
+ net_nfc_send_response_msg(msg->client_fd, msg->request_type,
+ (void *)&resp, sizeof(net_nfc_response_get_atr_t),
+ data->buffer, data->length, NULL);
+ }
+ else
+ {
+ DEBUG_SERVER_MSG("send response send apdu msg");
+ net_nfc_send_response_msg(msg->client_fd, msg->request_type,
+ (void *)&resp, sizeof(net_nfc_response_get_atr_t), NULL);
+ }
+ }
+ }
+ else
+ {
+ DEBUG_SERVER_MSG("invalid se handle");
+
+ if (net_nfc_server_check_client_is_running(msg->client_fd))
+ {
+ net_nfc_response_get_atr_t resp = { 0 };
+
+ resp.length = sizeof(net_nfc_response_get_atr_t);
+ resp.flags = detail->flags;
+ resp.user_param = detail->user_param;
+ resp.result = NET_NFC_INVALID_PARAM;
+
+ net_nfc_send_response_msg(msg->client_fd, msg->request_type,
+ (void *)&resp, sizeof(net_nfc_response_get_atr_t), NULL);
+ }
+ }
+}
+
+void net_nfc_service_se_close_se(net_nfc_request_msg_t *msg)
+{
+ net_nfc_request_close_internal_se_t *detail = (net_nfc_request_close_internal_se_t *)msg;
+ net_nfc_error_e result = NET_NFC_OK;
+
+ if (detail->handle == (net_nfc_target_handle_s *)UICC_TARGET_HANDLE)
+ {
+ /*deinit TAPI*/
+ DEBUG_SERVER_MSG("UICC is current secure element");
+ net_nfc_service_tapi_deinit();
+
+ }
+ else if (detail->handle == net_nfc_service_se_get_current_ese_handle())
+ {
+ result = net_nfc_service_se_close_ese();
+#ifdef BROADCAST_MESSAGE
+ net_nfc_server_unset_server_state(NET_NFC_SE_CONNECTED);
+#endif
+ }
+ else
+ {
+ DEBUG_ERR_MSG("invalid se handle received handle = [0x%p] and current handle = [0x%p]",
+ detail->handle, net_nfc_service_se_get_current_ese_handle());
+ }
+
+ if ((g_se_prev_type != net_nfc_service_se_get_se_type()) || (g_se_prev_mode != net_nfc_service_se_get_se_mode()))
+ {
+ /*return back se mode*/
+ net_nfc_controller_set_secure_element_mode(g_se_prev_type, g_se_prev_mode, &result);
+
+ net_nfc_service_se_set_se_type(g_se_prev_type);
+ net_nfc_service_se_set_se_mode(g_se_prev_mode);
+ }
+
+ if (net_nfc_server_check_client_is_running(msg->client_fd))
+ {
+ net_nfc_response_close_internal_se_t resp = { 0 };
+
+ resp.length = sizeof(net_nfc_response_close_internal_se_t);
+ resp.flags = detail->flags;
+ resp.trans_param = detail->trans_param;
+ resp.result = result;
+
+ net_nfc_send_response_msg(msg->client_fd, msg->request_type,
+ (void *)&resp, sizeof(net_nfc_response_close_internal_se_t), NULL);
+ }
+
+}
+
+void net_nfc_service_se_open_se(net_nfc_request_msg_t *msg)
+{
+ net_nfc_request_open_internal_se_t *detail = (net_nfc_request_open_internal_se_t *)msg;
+ net_nfc_target_handle_s *handle = NULL;
+ net_nfc_error_e result = NET_NFC_OK;
+
+ g_se_prev_type = net_nfc_service_se_get_se_type();
+ g_se_prev_mode = net_nfc_service_se_get_se_mode();
+
+ if (detail->se_type == SECURE_ELEMENT_TYPE_UICC)
+ {
+ /*off ESE*/
+ net_nfc_controller_set_secure_element_mode(SECURE_ELEMENT_TYPE_ESE, SECURE_ELEMENT_OFF_MODE, &result);
+
+ /*Off UICC. UICC SHOULD not be detected by external reader when being communicated in internal process*/
+ net_nfc_controller_set_secure_element_mode(SECURE_ELEMENT_TYPE_UICC, SECURE_ELEMENT_OFF_MODE, &result);
+
+ net_nfc_service_se_set_se_type(SECURE_ELEMENT_TYPE_UICC);
+ net_nfc_service_se_set_se_mode(SECURE_ELEMENT_OFF_MODE);
+
+ /*Init tapi api and return back response*/
+ if (net_nfc_service_tapi_init() != true)
+ {
+ net_nfc_service_tapi_deinit();
+ result = NET_NFC_INVALID_STATE;
+ handle = NULL;
+ }
+ else
+ {
+ result = NET_NFC_OK;
+ handle = (net_nfc_target_handle_s *)UICC_TARGET_HANDLE;
+ }
+ }
+ else if (detail->se_type == SECURE_ELEMENT_TYPE_ESE)
+ {
+ /*off UICC*/
+ net_nfc_controller_set_secure_element_mode(SECURE_ELEMENT_TYPE_UICC, SECURE_ELEMENT_OFF_MODE, &result);
+
+ if (net_nfc_controller_secure_element_open(SECURE_ELEMENT_TYPE_ESE, &handle, &result) == true)
+ {
+ net_nfc_service_se_set_se_type(SECURE_ELEMENT_TYPE_ESE);
+ net_nfc_service_se_set_se_mode(SECURE_ELEMENT_WIRED_MODE);
+
+ net_nfc_service_se_get_se_setting()->open_request_trans_param = detail->trans_param;
+ net_nfc_service_se_set_current_ese_handle(handle);
+
+ DEBUG_ERR_MSG("handle [%p]", handle);
+ }
+ else
+ {
+ DEBUG_ERR_MSG("net_nfc_controller_secure_element_open failed [%d]", result);
+ }
+ }
+ else
+ {
+ result = NET_NFC_INVALID_STATE;
+ handle = NULL;
+ }
+
+ if (net_nfc_server_check_client_is_running(msg->client_fd))
+ {
+ net_nfc_response_open_internal_se_t resp = { 0 };
+
+ resp.length = sizeof(net_nfc_response_open_internal_se_t);
+ resp.flags = detail->flags;
+ resp.user_param = detail->user_param;
+ resp.trans_param = detail->trans_param;
+ resp.result = result;
+ resp.se_type = detail->se_type;
+ resp.handle = handle;
+
+ net_nfc_send_response_msg(msg->client_fd, msg->request_type,
+ (void *)&resp, sizeof(net_nfc_response_open_internal_se_t), NULL);
+ }
+}
+
+void net_nfc_service_se_set_se(net_nfc_request_msg_t *msg)
+{
+#if 1
+ net_nfc_request_set_se_t *detail = (net_nfc_request_set_se_t *)msg;
+ net_nfc_error_e result = NET_NFC_OK;
+ bool isTypeChange = false;
+
+ if (detail->se_type != net_nfc_service_se_get_se_type())
+ {
+ result = net_nfc_service_se_change_se(detail->se_type);
+ isTypeChange = true;
+ }
+
+ if (net_nfc_server_check_client_is_running(msg->client_fd))
+ {
+ net_nfc_response_set_se_t resp = { 0 };
+
+ resp.length = sizeof(net_nfc_response_set_se_t);
+ resp.flags = detail->flags;
+ resp.trans_param = detail->trans_param;
+ resp.se_type = detail->se_type;
+ resp.result = result;
+
+ net_nfc_send_response_msg(msg->client_fd, msg->request_type,
+ (void *)&resp, sizeof(net_nfc_response_set_se_t), NULL);
+ }
+
+ if (isTypeChange)
+ {
+ net_nfc_response_notify_t noti_se = { 0, };
+
+ net_nfc_broadcast_response_msg(NET_NFC_MESSAGE_SE_TYPE_CHANGED,
+ (void *)&noti_se, sizeof(net_nfc_response_notify_t), NULL);
+ }
+
+#else
+ net_nfc_request_set_se_t *detail = (net_nfc_request_set_se_t *)msg;
+ net_nfc_error_e result = NET_NFC_OK;
+ int mode;
+
+ mode = (int)detail->se_type;
+
+ if (mode == NET_NFC_SE_CMD_UICC_ON)
+ {
+ /*turn on UICC*/
+ net_nfc_controller_set_secure_element_mode(SECURE_ELEMENT_TYPE_UICC,
+ SECURE_ELEMENT_VIRTUAL_MODE, &result);
+
+ /*turn off ESE*/
+ net_nfc_controller_set_secure_element_mode(SECURE_ELEMENT_TYPE_ESE,
+ SECURE_ELEMENT_OFF_MODE, &result);
+ }
+ else if (mode == NET_NFC_SE_CMD_ESE_ON)
+ {
+ /*turn off UICC*/
+ net_nfc_controller_set_secure_element_mode(SECURE_ELEMENT_TYPE_UICC,
+ SECURE_ELEMENT_OFF_MODE, &result);
+
+ /*turn on ESE*/
+ net_nfc_controller_set_secure_element_mode(SECURE_ELEMENT_TYPE_ESE,
+ SECURE_ELEMENT_VIRTUAL_MODE, &result);
+ }
+ else if (mode == NET_NFC_SE_CMD_ALL_OFF)
+ {
+ /*turn off both*/
+ net_nfc_controller_set_secure_element_mode(SECURE_ELEMENT_TYPE_UICC,
+ SECURE_ELEMENT_OFF_MODE, &result);
+
+ /*turn on ESE*/
+ net_nfc_controller_set_secure_element_mode(SECURE_ELEMENT_TYPE_ESE,
+ SECURE_ELEMENT_OFF_MODE, &result);
+ }
+ else
+ {
+ /*turn off both*/
+ net_nfc_controller_set_secure_element_mode(SECURE_ELEMENT_TYPE_UICC,
+ SECURE_ELEMENT_VIRTUAL_MODE, &result);
+
+ /*turn on ESE*/
+ net_nfc_controller_set_secure_element_mode(SECURE_ELEMENT_TYPE_ESE,
+ SECURE_ELEMENT_VIRTUAL_MODE, &result);
+ }
+#endif
+}
+
+void net_nfc_service_se_get_se(net_nfc_request_msg_t *msg)
+{
+ net_nfc_request_get_se_t *detail = (net_nfc_request_get_se_t *)msg;
+
+ if (net_nfc_server_check_client_is_running(msg->client_fd))
+ {
+ net_nfc_response_get_se_t resp = { 0 };
+
+ resp.length = sizeof(net_nfc_request_get_se_t);
+ resp.flags = detail->flags;
+ resp.trans_param = detail->trans_param;
+ resp.result = NET_NFC_OK;
+ resp.se_type = net_nfc_service_se_get_se_type();
+
+ net_nfc_send_response_msg(msg->client_fd, msg->request_type,
+ (void *)&resp, sizeof(net_nfc_response_get_se_t), NULL);
+ }
+}
+
+void net_nfc_service_se_cleanup()
+{
+ DEBUG_SERVER_MSG("client is terminated abnormally");
+
+ if (g_se_prev_type == SECURE_ELEMENT_TYPE_ESE)
+ {
+ net_nfc_error_e result = NET_NFC_OK;
+ net_nfc_target_handle_s *ese_handle = net_nfc_service_se_get_current_ese_handle();
+
+ if (ese_handle != NULL)
+ {
+ DEBUG_SERVER_MSG("ese_handle was not freed and disconnected");
+
+ net_nfc_service_se_close_ese();
+#ifdef BROADCAST_MESSAGE
+ net_nfc_server_set_server_state(NET_NFC_SERVER_IDLE);
+#endif
+ }
+
+ if ((g_se_prev_type != net_nfc_service_se_get_se_type()) || (g_se_prev_mode != net_nfc_service_se_get_se_mode()))
+ {
+ net_nfc_controller_set_secure_element_mode(g_se_prev_type, g_se_prev_mode, &result);
+
+ net_nfc_service_se_set_se_type(g_se_prev_type);
+ net_nfc_service_se_set_se_mode(g_se_prev_mode);
+ }
+ }
+ else if (g_se_prev_type == SECURE_ELEMENT_TYPE_UICC)
+ {
+ net_nfc_service_tapi_deinit();
+ }
+ else
+ {
+ DEBUG_SERVER_MSG("SE type is not valid");
+ }
+}
diff --git a/src/manager/net_nfc_service_tag.c b/src/manager/net_nfc_service_tag.c
index 890d59d..7a71355 100755
--- a/src/manager/net_nfc_service_tag.c
+++ b/src/manager/net_nfc_service_tag.c
@@ -27,6 +27,7 @@
#include "net_nfc_server_ipc_private.h"
#include "net_nfc_server_dispatcher_private.h"
#include "net_nfc_manager_util_private.h"
+#include "net_nfc_server_context_private.h"
/* define */
@@ -177,3 +178,141 @@ data_s* net_nfc_service_tag_process(net_nfc_target_handle_s* handle, int devType
}
#endif
+
+void net_nfc_service_tag_make_readonly(net_nfc_request_msg_t *msg)
+{
+ net_nfc_request_make_read_only_ndef_t *detail = (net_nfc_request_make_read_only_ndef_t *)msg;
+ net_nfc_error_e result = NET_NFC_OK;
+
+ if (net_nfc_server_is_target_connected(detail->handle))
+ {
+ net_nfc_controller_make_read_only_ndef(detail->handle, &result);
+ }
+ else
+ {
+ result = NET_NFC_TARGET_IS_MOVED_AWAY;
+ }
+
+ if (net_nfc_server_check_client_is_running(msg->client_fd))
+ {
+ net_nfc_response_make_read_only_ndef_t resp = { 0, };
+
+ resp.length = sizeof(net_nfc_response_make_read_only_ndef_t);
+ resp.flags = detail->flags;
+ resp.result = result;
+ resp.trans_param = detail->trans_param;
+
+ net_nfc_send_response_msg(msg->client_fd, msg->request_type,
+ (void *)&resp, sizeof(net_nfc_response_write_ndef_t), NULL);
+ }
+}
+
+void net_nfc_service_tag_read_ndef(net_nfc_request_msg_t *msg)
+{
+ net_nfc_request_read_ndef_t *detail = (net_nfc_request_read_ndef_t *)msg;
+ net_nfc_error_e result = NET_NFC_TARGET_IS_MOVED_AWAY;
+ data_s *data = NULL;
+
+ if (net_nfc_server_is_target_connected(detail->handle))
+ {
+ net_nfc_controller_read_ndef(detail->handle, &data, &result);
+ }
+
+ if (net_nfc_server_check_client_is_running(msg->client_fd))
+ {
+ net_nfc_response_read_ndef_t resp = { 0, };
+
+ resp.length = sizeof(net_nfc_response_read_ndef_t);
+ resp.flags = detail->flags;
+ resp.result = result;
+ resp.trans_param = detail->trans_param;
+
+ if (data != NULL)
+ {
+ resp.data.length = data->length;
+ net_nfc_send_response_msg(msg->client_fd, msg->request_type,
+ (void *)&resp, sizeof(net_nfc_response_read_ndef_t),
+ data->buffer, data->length, NULL);
+ }
+ else
+ {
+ net_nfc_send_response_msg(msg->client_fd, msg->request_type,
+ (void *)&resp, sizeof(net_nfc_response_read_ndef_t), NULL);
+ }
+ }
+
+ if (data != NULL)
+ {
+ net_nfc_util_free_data(data);
+ _net_nfc_util_free_mem(data);
+ }
+}
+
+void net_nfc_service_tag_write_ndef(net_nfc_request_msg_t *msg)
+{
+ net_nfc_request_write_ndef_t *detail = (net_nfc_request_write_ndef_t *)msg;
+ net_nfc_error_e result = NET_NFC_TARGET_IS_MOVED_AWAY;
+
+ if (net_nfc_server_is_target_connected(detail->handle))
+ {
+ data_s data = { NULL, 0 };
+
+ if (net_nfc_util_duplicate_data(&data, &detail->data) == true)
+ {
+ net_nfc_controller_write_ndef(detail->handle, &data, &result);
+
+ net_nfc_util_free_data(&data);
+ }
+ else
+ {
+ result = NET_NFC_ALLOC_FAIL;
+ }
+ }
+
+ if (net_nfc_server_check_client_is_running(msg->client_fd))
+ {
+ net_nfc_response_write_ndef_t resp = { 0, };
+
+ resp.length = sizeof(net_nfc_response_write_ndef_t);
+ resp.flags = detail->flags;
+ resp.result = result;
+ resp.trans_param = detail->trans_param;
+
+ net_nfc_send_response_msg(msg->client_fd, msg->request_type,
+ (void *)&resp, sizeof(net_nfc_response_write_ndef_t), NULL);
+ }
+}
+
+void net_nfc_service_tag_format_ndef(net_nfc_request_msg_t *msg)
+{
+ net_nfc_request_format_ndef_t *detail = (net_nfc_request_format_ndef_t *)msg;
+ net_nfc_error_e result = NET_NFC_TARGET_IS_MOVED_AWAY;
+
+ if (net_nfc_server_is_target_connected(detail->handle))
+ {
+ data_s data = { NULL, 0 };
+
+ if (net_nfc_util_duplicate_data(&data, &detail->key) == true)
+ {
+ net_nfc_controller_format_ndef(detail->handle, &data, &result);
+ net_nfc_util_free_data(&data);
+ }
+ else
+ {
+ result = NET_NFC_ALLOC_FAIL;
+ }
+ }
+
+ if (net_nfc_server_check_client_is_running(msg->client_fd))
+ {
+ net_nfc_response_format_ndef_t resp = { 0 };
+
+ resp.length = sizeof(net_nfc_response_format_ndef_t);
+ resp.flags = detail->flags;
+ resp.result = result;
+ resp.trans_param = detail->trans_param;
+
+ net_nfc_send_response_msg(msg->client_fd, msg->request_type,
+ (void *)&resp, sizeof(net_nfc_response_format_ndef_t), NULL);
+ }
+}
diff --git a/src/manager/net_nfc_service_test.c b/src/manager/net_nfc_service_test.c
new file mode 100644
index 0000000..84d1e1b
--- /dev/null
+++ b/src/manager/net_nfc_service_test.c
@@ -0,0 +1,176 @@
+/*
+ * Copyright (c) 2012, 2013 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "net_nfc_typedef.h"
+#include "net_nfc_debug_private.h"
+#include "net_nfc_util_private.h"
+#include "net_nfc_server_ipc_private.h"
+#include "net_nfc_controller_private.h"
+#include "net_nfc_service_test_private.h"
+#include "net_nfc_server_context_private.h"
+
+void net_nfc_service_test_sim_test(net_nfc_request_msg_t *msg)
+{
+ net_nfc_request_test_t *detail = (net_nfc_request_test_t *)msg;
+ net_nfc_error_e result = NET_NFC_OK;
+
+ if (net_nfc_controller_sim_test(&result) == true)
+ {
+ DEBUG_SERVER_MSG("net_nfc_controller_sim_test Result [SUCCESS]");
+ }
+ else
+ {
+ DEBUG_SERVER_MSG("net_nfc_controller_sim_test Result [ERROR1]");
+ }
+
+ if (net_nfc_server_check_client_is_running(msg->client_fd))
+ {
+ net_nfc_response_test_t resp = { 0, };
+
+ resp.length = sizeof(net_nfc_response_test_t);
+ resp.flags = detail->flags;
+ resp.result = result;
+ resp.trans_param = detail->trans_param;
+
+ DEBUG_SERVER_MSG("SEND RESPONSE!!");
+ net_nfc_send_response_msg(msg->client_fd, msg->request_type,
+ (void *)&resp, sizeof(net_nfc_response_test_t), NULL);
+ }
+}
+
+void net_nfc_service_test_get_firmware_version(net_nfc_request_msg_t *msg)
+{
+ net_nfc_error_e result = NET_NFC_OK;
+ data_s *data = NULL;
+
+ if (net_nfc_controller_get_firmware_version(&data, &result) == true)
+ {
+ DEBUG_SERVER_MSG("net_nfc_controller_update_firmware Result [SUCCESS]");
+
+ }
+ else
+ {
+ DEBUG_ERR_MSG("net_nfc_controller_update_firmware Result [ERROR3]");
+ }
+
+ if (net_nfc_server_check_client_is_running(msg->client_fd))
+ {
+ net_nfc_response_firmware_version_t resp = { 0, };
+
+ resp.length = sizeof(net_nfc_response_firmware_version_t);
+ resp.flags = msg->flags;
+ resp.result = result;
+ resp.data.length = data->length;
+
+ if (data != NULL)
+ {
+ net_nfc_send_response_msg(msg->client_fd, msg->request_type,
+ (void *)&resp, sizeof(net_nfc_response_firmware_version_t),
+ (void *)data->buffer, resp.data.length, NULL);
+ }
+ else
+ {
+ net_nfc_send_response_msg(msg->client_fd, msg->request_type,
+ (void *)&resp, sizeof(net_nfc_response_firmware_version_t), NULL);
+ }
+ }
+
+ if (data != NULL)
+ {
+ net_nfc_util_free_data(data);
+ _net_nfc_util_free_mem(data);
+ }
+}
+
+void net_nfc_service_test_prbs_test(net_nfc_request_msg_t *msg)
+{
+ net_nfc_request_test_t *detail = (net_nfc_request_test_t *)msg;
+ net_nfc_error_e result = NET_NFC_OK;
+ uint32_t local_tech = 0;
+ uint32_t local_rate = 0;
+
+ local_tech = detail->tech;
+ local_rate = detail->rate;
+
+ DEBUG_SERVER_MSG("local_tech [%d]\n", local_tech);
+ DEBUG_SERVER_MSG("local_rate [%d]\n", local_rate);
+
+ if (net_nfc_controller_prbs_test(&result, local_tech, local_rate) == true)
+ {
+ DEBUG_SERVER_MSG("net_nfc_controller_prbs_test Result [SUCCESS]");
+ }
+ else
+ {
+ DEBUG_ERR_MSG("net_nfc_controller_prbs_test Result [ERROR3]");
+ }
+
+ if (net_nfc_server_check_client_is_running(msg->client_fd))
+ {
+ net_nfc_response_test_t resp = { 0, };
+
+ resp.length = sizeof(net_nfc_response_test_t);
+ resp.flags = detail->flags;
+ resp.result = result;
+ resp.trans_param = detail->trans_param;
+
+ DEBUG_SERVER_MSG("SEND RESPONSE!!");
+ net_nfc_send_response_msg(msg->client_fd, msg->request_type,
+ (void *)&resp, sizeof(net_nfc_response_test_t), NULL);
+ }
+}
+
+void net_nfc_service_test_set_eedata(net_nfc_request_msg_t *msg)
+{
+ net_nfc_request_eedata_register_t *detail = (net_nfc_request_eedata_register_t *)msg;
+ net_nfc_error_e result = NET_NFC_OK;
+ uint32_t local_mode = 0;
+ uint32_t local_reg_id = 0;
+ data_s data = { NULL, 0 };
+
+ local_mode = detail->mode;
+ local_reg_id = detail->reg_id;
+
+ DEBUG_SERVER_MSG("local_mode [%d]\n", local_mode);
+ DEBUG_SERVER_MSG("local_reg_id [%d]\n", local_reg_id);
+
+ if (net_nfc_util_duplicate_data(&data, &detail->data) == true)
+ {
+ if (net_nfc_controller_eedata_register_set(&result, local_mode,
+ local_reg_id, &data) == true)
+ {
+ DEBUG_SERVER_MSG("net_nfc_controller_eedata_register_set Result [SUCCESS]");
+ }
+ else
+ {
+ DEBUG_ERR_MSG("net_nfc_controller_eedata_register_set Result [ERROR3]");
+ }
+ net_nfc_util_free_data(&data);
+
+ if (net_nfc_server_check_client_is_running(msg->client_fd))
+ {
+ net_nfc_response_test_t resp = { 0, };
+
+ resp.length = sizeof(net_nfc_response_test_t);
+ resp.flags = detail->flags;
+ resp.result = result;
+ resp.trans_param = detail->trans_param;
+
+ DEBUG_SERVER_MSG("SEND RESPONSE!!");
+ net_nfc_send_response_msg(msg->client_fd, msg->request_type,
+ (void *)&resp, sizeof(net_nfc_response_test_t), NULL);
+ }
+ }
+}
diff --git a/src/manager/net_nfc_util_access_control.c b/src/manager/net_nfc_util_access_control.c
index 6f9ad73..9f07add 100644
--- a/src/manager/net_nfc_util_access_control.c
+++ b/src/manager/net_nfc_util_access_control.c
@@ -1,18 +1,18 @@
/*
- * Copyright (c) 2012, 2013 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Flora License, Version 1.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
-
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
+ * Copyright (c) 2012, 2013 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
#include <stdio.h>
@@ -24,6 +24,7 @@
#include <sys/time.h>
#include "package-manager.h"
+#include "pkgmgr-info.h"
#include "SEService.h"
#include "Reader.h"
#include "Session.h"
@@ -118,7 +119,7 @@ static gp_se_acl_h _get_acl(reader_h reader)
unsigned char aid[] = { 0xA0, 0x00, 0x00, 0x00, 0x63, 0x50, 0x4B, 0x43, 0x53, 0x2D, 0x31, 0x35 };
channel_h channel = NULL;
- channel = session_open_basic_channel_sync(session, aid, sizeof(aid));
+ channel = session_open_logical_channel_sync(session, aid, sizeof(aid));
if (channel != NULL)
{
result = gp_se_acl_create_instance(channel);
@@ -213,8 +214,25 @@ bool net_nfc_util_access_control_is_authorized_package(const char *pkg_name, uin
net_nfc_util_access_control_initialize();
{
pkgmgr_certinfo_h cert_info = NULL;
+ pkgmgrinfo_appinfo_h handle;
+ char *pkgid = NULL;
+
+ if(pkgmgrinfo_appinfo_get_appinfo(pkg_name, &handle) != PMINFO_R_OK)
+ {
+ DEBUG_ERR_MSG("pkgmgrinfo_appinfo_get_appinfo fail");
+ return result;
+ }
+
+ if(pkgmgrinfo_appinfo_get_pkgid(handle, &pkgid) != PMINFO_R_OK)
+ {
+ pkgmgrinfo_appinfo_destroy_appinfo(handle);
+ DEBUG_ERR_MSG("pkgmgrinfo_appinfo_get_pkgid fail");
+ return result;
+ }
+ cert_info = _get_cert_info(pkgid);
+
+ pkgmgrinfo_appinfo_destroy_appinfo(handle);
- cert_info = _get_cert_info(pkg_name);
if (cert_info != NULL)
{
int i;