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.
18 #include "net_nfc_client_ndef.h"
20 #include "net_nfc_test_tag.h"
21 #include "net_nfc_test_ndef.h"
22 #include "net_nfc_test_util.h"
23 #include "net_nfc_ndef_message.h"
24 #include "net_nfc_target_info.h"
25 #include "net_nfc_ndef_record.h"
26 #include "net_nfc_test_util.h"
28 static gchar *ndef_str = NULL;
29 static gint ndef_count = 0;
31 static void run_next_callback(gpointer user_data)
37 callback = (GCallback)(user_data);
43 static void set_string(const gchar *str)
50 sscanf(str, "Count: %d", &count);
53 ndef_str = g_strdup(str);
60 tmp = g_strdup_printf("Count: %d", count);
61 if (strncmp(pos, tmp, strlen(tmp)) == 0)
66 ndef_str = g_strdup(pos + strlen(tmp));
75 static void print_record_well_known_type(ndef_record_s *record)
81 net_nfc_encode_type_e enc;
83 net_nfc_create_uri_string_from_uri_record(record, &uri);
86 g_print("URI: %s\n", uri);
90 net_nfc_create_text_string_from_text_record(record, &text);
93 g_print("Text:\n%s\n", text);
99 net_nfc_get_languange_code_string_from_text_record(record, &lang);
102 g_print("Language: %s\n", lang);
106 net_nfc_get_encoding_type_from_text_record(record, &enc);
109 case NET_NFC_ENCODE_UTF_8:
110 g_print("Encoding: UTF-8\n");
112 case NET_NFC_ENCODE_UTF_16:
113 g_print("Encoding: UTF-16\n");
116 g_print("Encoding: Unknown\n");
120 static void print_record(ndef_record_s *record)
135 net_nfc_record_tnf_e tnf;
139 data_s *payload = NULL;
141 net_nfc_get_record_flags(record, &flag);
142 net_nfc_get_record_tnf(record, &tnf);
144 g_print("MB: %d ME: %d CF: %d SR: %d IL: %d TNF: %s\n",
145 net_nfc_get_record_mb(flag),
146 net_nfc_get_record_me(flag),
147 net_nfc_get_record_cf(flag),
148 net_nfc_get_record_sr(flag),
149 net_nfc_get_record_il(flag),
152 if (net_nfc_get_record_type(record, &type) == NET_NFC_OK)
154 str = g_strndup((gchar *)net_nfc_get_data_buffer(type),
155 net_nfc_get_data_length(type));
156 g_print("Type : %s\n", str);
160 net_nfc_get_record_id(record, &id);
162 str = g_strndup((gchar *)net_nfc_get_data_buffer(id),
163 net_nfc_get_data_length(id));
164 g_print("ID : %s\n", str);
167 if (net_nfc_get_record_payload(record, &payload) == NET_NFC_OK)
169 print_received_data(payload);
174 case NET_NFC_RECORD_EMPTY:
176 case NET_NFC_RECORD_WELL_KNOWN_TYPE:
177 print_record_well_known_type(record);
179 case NET_NFC_RECORD_MIME_TYPE:
181 case NET_NFC_RECORD_URI:
183 case NET_NFC_RECORD_EXTERNAL_RTD:
185 case NET_NFC_RECORD_UNKNOWN:
187 case NET_NFC_RECORD_UNCHAGNED:
190 g_print("TNF: unknown error\n");
195 static void print_ndef_message(ndef_message_s *message)
202 g_print("Empty ndef message\n");
206 if (net_nfc_get_ndef_message_record_count(message,
207 &count) != NET_NFC_OK)
209 g_print("can not get count of record\n");
213 for (i = 0; i < count; i++)
215 ndef_record_s *record = NULL;
217 g_print("Record count : %d\n", i+1);
219 if (net_nfc_get_record_by_index(message, i, &record) != NET_NFC_OK)
221 g_print("can not get record from index %d\n", i);
225 print_record(record);
231 static net_nfc_target_handle_s* ndef_get_handle(void)
233 net_nfc_target_info_s *info;
234 net_nfc_target_handle_s *handle;
236 bool is_ndef = false;
238 info = net_nfc_test_tag_get_target_info();
241 g_print("net_nfc_target_info_s *is NULL\n");
245 net_nfc_get_tag_ndef_support(info, &is_ndef);
247 if (is_ndef == false)
249 g_print("Tag does not support NDEF\n");
253 net_nfc_get_tag_handle(info, &handle);
258 static ndef_message_s *create_ndef_message_text(const gchar *str,
260 net_nfc_encode_type_e encode)
262 ndef_record_s *record = NULL;
263 ndef_message_s *message = NULL;
265 if (net_nfc_create_ndef_message(&message) != NET_NFC_OK)
267 g_printerr("Can not create ndef message\n");
271 if (net_nfc_create_text_type_record(&record,
274 encode) != NET_NFC_OK)
276 g_printerr("Can not create text record(%s, %d): %s\n",
279 net_nfc_free_ndef_message(message);
283 if (net_nfc_append_record_to_ndef_message(message,
284 record) != NET_NFC_OK)
286 g_printerr("Can not append record to message\n");
287 net_nfc_free_ndef_message(message);
293 static gchar *get_write_string(void)
299 if (ndef_str == NULL)
300 str = g_strdup_printf("Count: %d", ndef_count);
302 str = g_strdup_printf("Count: %d %s", ndef_count, ndef_str);
307 static void ndef_read_cb(net_nfc_error_e result, ndef_message_s *message,
310 g_print("Read NDEF Completed %d\n", result);
312 print_ndef_message(message);
314 run_next_callback(user_data);
317 static void ndef_write_cb(net_nfc_error_e result, void *user_data)
319 g_print("Write NDEF Completed %d\n", result);
321 run_next_callback(user_data);
325 static void ndef_make_read_only_cb(net_nfc_error_e result, void *user_data)
327 g_print("Make Read only Completed %d\n", result);
329 run_next_callback(user_data);
332 static void ndef_format_cb(net_nfc_error_e result, void *user_data)
335 g_print("NDEF Format Completed: %d\n", result);
337 run_next_callback(user_data);
342 void net_nfc_test_ndef_read(gpointer data, gpointer user_data)
344 net_nfc_target_handle_s *handle;
346 handle = ndef_get_handle();
349 g_printerr("Handle is NULL\n");
351 run_next_callback(user_data);
356 g_print("Handle is %#x\n", GPOINTER_TO_UINT(handle));
358 net_nfc_client_ndef_read(handle, ndef_read_cb, user_data);
361 void net_nfc_test_ndef_write(gpointer data, gpointer user_data)
363 net_nfc_target_handle_s *handle;
364 ndef_message_s *message;
368 handle = ndef_get_handle();
371 g_printerr("Handle is NULL\n");
373 run_next_callback(user_data);
377 g_print("Handle is %#x\n", GPOINTER_TO_UINT(handle));
379 str = get_write_string();
382 g_printerr("Can not get write string\n");
384 run_next_callback(user_data);
388 message = create_ndef_message_text(str, "en-US", NET_NFC_ENCODE_UTF_8);
394 g_printerr("message is NULL\n");
396 run_next_callback(user_data);
400 net_nfc_client_ndef_write(handle, message, ndef_write_cb, user_data);
404 void net_nfc_test_ndef_make_read_only(gpointer data, gpointer user_data)
406 net_nfc_target_handle_s *handle;
408 handle = ndef_get_handle();
411 g_printerr("Handle is NULL\n");
413 run_next_callback(user_data);
417 g_print("Handle is %#x\n", GPOINTER_TO_UINT(handle));
419 net_nfc_client_ndef_make_read_only(handle,
420 ndef_make_read_only_cb,
424 void net_nfc_test_ndef_format(gpointer data, gpointer user_data)
426 net_nfc_target_handle_s *handle;
428 guint8 format_data[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
430 handle = ndef_get_handle();
433 g_printerr("Handle is NULL\n");
435 run_next_callback(user_data);
439 net_nfc_create_data(&key, format_data, 6);
441 net_nfc_client_ndef_format(handle, key, ndef_format_cb, user_data);
443 net_nfc_free_data(key);
448 void net_nfc_test_ndef_read_sync(gpointer data, gpointer user_data)
450 net_nfc_target_handle_s *handle;
451 ndef_message_s *message = NULL;
452 net_nfc_error_e result;
454 handle = ndef_get_handle();
457 g_printerr("Handle is NULL\n");
459 run_next_callback(user_data);
463 g_print("Handle is %#x\n", GPOINTER_TO_UINT(handle));
465 result = net_nfc_client_ndef_read_sync(handle,
468 g_print("Read Ndef: %d\n", result);
470 print_ndef_message(message);
472 net_nfc_free_ndef_message(message);
474 run_next_callback(user_data);
477 void net_nfc_test_ndef_write_sync(gpointer data, gpointer user_data)
481 net_nfc_target_handle_s *handle;
482 ndef_message_s *message;
483 net_nfc_error_e result;
485 handle = ndef_get_handle();
488 g_printerr("Handle is NULL\n");
490 run_next_callback(user_data);
494 g_print("Handle is %#x\n", GPOINTER_TO_UINT(handle));
496 str = get_write_string();
499 g_printerr("Can not get write string\n");
501 run_next_callback(user_data);
505 message = create_ndef_message_text(str, "en-US", NET_NFC_ENCODE_UTF_8);
511 g_printerr("message is NULL\n");
513 run_next_callback(user_data);
518 result = net_nfc_client_ndef_write_sync(handle, message);
520 g_print("Write Ndef: %d\n", result);
522 run_next_callback(user_data);
525 void net_nfc_test_ndef_make_read_only_sync(gpointer data, gpointer user_data)
527 net_nfc_target_handle_s *handle;
528 net_nfc_error_e result;
530 handle = ndef_get_handle();
533 g_printerr("Handle is NULL\n");
535 run_next_callback(user_data);
540 g_print("Handle is %#x\n", GPOINTER_TO_UINT(handle));
542 result = net_nfc_client_ndef_make_read_only_sync(handle);
544 g_print("Make Read Only: %d\n", result);
546 run_next_callback(user_data);
549 void net_nfc_test_ndef_format_sync(gpointer data, gpointer user_data)
551 net_nfc_target_handle_s *handle;
552 net_nfc_error_e result;
554 guint8 format_data[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
556 handle = ndef_get_handle();
559 g_printerr("Handle is NULL\n");
561 run_next_callback(user_data);
566 net_nfc_create_data(&key, format_data, 6);
568 result = net_nfc_client_ndef_format_sync(handle, key);
570 net_nfc_free_data(key);
572 g_print("NDEF Format %d\n", result);
574 run_next_callback(user_data);