2 * Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #include <glib-object.h>
19 #include "net_nfc_target_info.h"
20 #include "net_nfc_data.h"
21 #include "net_nfc_client_se.h"
22 #include "net_nfc_test_se.h"
23 #include "net_nfc_typedef.h"
24 #include "net_nfc_typedef_internal.h"
25 #include "net_nfc_test_util.h"
28 static void run_next_callback(gpointer user_data);
30 static void send_apdu_cb(net_nfc_error_e result, data_s *data, void *user_data);
32 static void set_secure_element_cb(net_nfc_error_e result, void *user_data);
34 static void open_secure_element_cb(net_nfc_error_e result,
35 net_nfc_target_handle_s *handle, void *user_data);
37 static void close_secure_element_cb(net_nfc_error_e result, void *user_data);
39 static void get_atr_secure_element_cb(net_nfc_error_e result, data_s *data,
42 static void se_set_event_cb(net_nfc_message_e event, void *user_data);
44 static void se_ese_detection_cb(net_nfc_target_handle_s *handle, int dev_type,
45 data_s *data, void *user_data);
47 static void se_set_transaction_cb(net_nfc_se_type_e se_type, data_s *aid, data_s *param, void *user_data);
49 /*This handle would be intialized by open secure element callback function*/
50 static net_nfc_target_handle_s *global_handle = NULL;
52 static void run_next_callback(gpointer user_data)
58 callback = (GCallback)(user_data);
63 static void send_apdu_cb(net_nfc_error_e result, data_s *data, void *user_data)
65 g_print(" Send apdu data completed \n");
66 print_received_data(data);
67 run_next_callback(user_data);
70 static void set_secure_element_cb(net_nfc_error_e result, void* user_data)
72 g_print("Set Secure Element completed : %d\n", result);
73 run_next_callback(user_data);
76 static void open_secure_element_cb(net_nfc_error_e result,
77 net_nfc_target_handle_s *handle, void* user_data)
79 g_print("Open secure element completed\n");
80 // assigning received handle
81 global_handle = handle;
82 g_print("Handle is %#x\n", GPOINTER_TO_UINT(handle));
83 run_next_callback(user_data);
86 static void close_secure_element_cb(net_nfc_error_e result, void* user_data)
88 g_print("close secure element completed %d\n", result);
89 run_next_callback(user_data);
92 static void get_atr_secure_element_cb(net_nfc_error_e result, data_s *data,
95 g_print("get atr completed\n");
96 print_received_data(data);
97 run_next_callback(user_data);
100 static void se_set_event_cb(net_nfc_message_e event, void *user_data)
102 g_print("Event callback set successfully\n");
103 g_print(" Event received %d", event);
104 run_next_callback(user_data);
107 static void se_ese_detection_cb(net_nfc_target_handle_s *handle, int dev_type,
108 data_s *data, void *user_data)
110 g_print("Set ese detection callback successfully\n");
111 g_print("Handle is %#x\n", GPOINTER_TO_UINT(handle));
112 g_print(" dev type %d\n", dev_type);
113 print_received_data(data);
116 static void se_set_transaction_cb(net_nfc_se_type_e se_type, data_s *aid, data_s *param, void *user_data)
118 g_print("Set transaction callback successfully\n");
119 g_print("*****displaying Aid data****\n");
120 print_received_data(aid);
121 g_print("*****displaying param data ****\n");
122 print_received_data(param);
123 run_next_callback(user_data);
126 void net_nfc_test_se_send_apdu(gpointer data, gpointer user_data)
128 net_nfc_error_e result = NET_NFC_OK;
129 data_s *apdu_data = NULL;
130 uint8_t apdu_cmd[4] = {0x00, 0xA4, 0x00, 0x0C};
132 net_nfc_create_data(&apdu_data, apdu_cmd, 4);
134 result = net_nfc_client_se_send_apdu(global_handle, apdu_data, send_apdu_cb, user_data);
135 g_print("net_nfc_client_se_send_apdu() : %d\n", result);
138 void net_nfc_test_se_send_apdu_sync(gpointer data, gpointer user_data)
140 net_nfc_error_e result = NET_NFC_OK;
141 data_s *apdu_data = NULL;
142 uint8_t apdu_cmd[4] = {0x00, 0xA4, 0x00, 0x0C};
143 data_s *response = NULL;
145 net_nfc_create_data(&apdu_data, apdu_cmd, 4);
146 result = net_nfc_client_se_send_apdu_sync(global_handle, apdu_data, &response);
148 g_print(" Send apdu data sync completed %d\n", result);
149 print_received_data(response);
150 run_next_callback(user_data);
153 void net_nfc_test_se_set_secure_element_type(gpointer data, gpointer user_data)
155 net_nfc_error_e result = NET_NFC_OK;
156 net_nfc_se_type_e se_type = NET_NFC_SE_TYPE_UICC;
158 result = net_nfc_client_se_set_secure_element_type(
160 set_secure_element_cb,
162 g_print("net_nfc_client_se_set_secure_element_type() : %d\n", result);
165 void net_nfc_test_se_set_secure_element_type_sync(gpointer data,
168 net_nfc_error_e result = NET_NFC_OK;
169 net_nfc_se_type_e se_type = NET_NFC_SE_TYPE_UICC;
171 result = net_nfc_client_se_set_secure_element_type_sync(se_type);
172 g_print(" Set Secure element type completed %d\n", result);
173 run_next_callback(user_data);
176 void net_nfc_test_se_open_internal_secure_element(gpointer data,
179 net_nfc_error_e result = NET_NFC_OK;
180 net_nfc_se_type_e se_type = NET_NFC_SE_TYPE_UICC;
182 result = net_nfc_client_se_open_internal_secure_element(
184 open_secure_element_cb,
186 g_print("net_nfc_client_se_open_internal_secure_element() : %d\n", result);
189 void net_nfc_test_se_open_internal_secure_element_sync(gpointer data,
192 net_nfc_error_e result = NET_NFC_OK;
193 net_nfc_se_type_e se_type = NET_NFC_SE_TYPE_UICC;
195 result = net_nfc_client_se_open_internal_secure_element_sync(
199 g_print("Handle is %#x\n", GPOINTER_TO_UINT(global_handle));
200 g_print("open secure element completed %d\n", result);
201 run_next_callback(user_data);
204 void net_nfc_test_se_close_internal_secure_element(gpointer data,
207 net_nfc_error_e result = NET_NFC_OK;
209 result = net_nfc_client_se_close_internal_secure_element(
211 close_secure_element_cb,
213 g_print("net_nfc_client_se_close_internal_secure_element() : %d\n", result);
216 void net_nfc_test_se_close_internal_secure_element_sync(gpointer data,
219 net_nfc_error_e result = NET_NFC_OK;
221 result = net_nfc_client_se_close_internal_secure_element_sync(global_handle);
222 g_print("close secure element completed %d\n", result);
223 run_next_callback(user_data);
226 void net_nfc_test_se_get_atr(gpointer data, gpointer user_data)
228 net_nfc_error_e result = NET_NFC_OK;
230 result = net_nfc_client_se_get_atr(
232 get_atr_secure_element_cb,
234 g_print("net_nfc_client_se_get_atr() : %d\n", result);
237 void net_nfc_test_se_get_atr_sync(gpointer data, gpointer user_data)
239 net_nfc_error_e result = NET_NFC_OK;
240 data_s *attr_data = NULL;
242 result = net_nfc_client_se_get_atr_sync(global_handle, &attr_data);
244 g_print("Get atr data sync completed %d\n", result);
245 print_received_data(attr_data);
246 run_next_callback(user_data);
249 void net_nfc_test_se_set_event_cb(gpointer data, gpointer user_data)
251 net_nfc_client_se_set_event_cb(se_set_event_cb, user_data);
254 void net_nfc_test_se_unset_event_cb(gpointer data, gpointer user_data)
256 net_nfc_client_se_unset_event_cb();
257 g_print(" Event unset callback successfully\n");
260 void net_nfc_test_se_set_ese_detection_cb(gpointer data, gpointer user_data)
262 net_nfc_client_se_set_ese_detection_cb(se_ese_detection_cb, user_data);
265 void net_nfc_test_se_unset_ese_detection_cb(gpointer data, gpointer user_data)
267 net_nfc_client_se_unset_ese_detection_cb();
268 g_print("Detection unset callback successfuly\n");
271 void net_nfc_test_se_set_transaction_event_cb(gpointer data, gpointer user_data)
273 net_nfc_client_se_set_transaction_event_cb(NET_NFC_SE_TYPE_UICC, se_set_transaction_cb,
277 void net_nfc_test_se_unset_transaction_event_cb(gpointer data,
280 net_nfc_client_se_unset_transaction_event_cb(NET_NFC_SE_TYPE_UICC);
281 g_print("Transaction unset callback successfully\n");