2 * HAL (Hardware Abstract Layer) NFC API
4 * Copyright (c) 2021 Samsung Electronics Co., Ltd.
6 * Licensed under the Apache License, Version 2.0 (the License);
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
24 #include <hal/hal-common.h>
26 #include "hal-nfc-interface.h"
31 #define EXPORT __attribute__ ((visibility("default")))
34 #define ARRAY_SIZE(name) (sizeof(name)/sizeof(name[0]))
36 static hal_backend_nfc_funcs *g_nfc_funcs = NULL;
39 int hal_nfc_get_backend(void)
46 ret = hal_common_get_backend(HAL_MODULE_NFC, (void **)&g_nfc_funcs);
48 _E("Failed to get backend\n");
56 int hal_nfc_put_backend(void)
63 ret = hal_common_put_backend(HAL_MODULE_NFC, (void *)g_nfc_funcs);
65 _E("Failed to put backend\n");
74 bool hal_nfc_start(int *result)
78 return g_nfc_funcs->start(result);
82 bool hal_nfc_stop(void)
86 return g_nfc_funcs->stop();
90 bool hal_nfc_register_listener(target_detection_listener_cb target_detection_listener, se_transaction_listener_cb se_transaction_listener, llcp_event_listener_cb llcp_event_listener, hce_apdu_listener_cb hce_apdu_listener, net_nfc_error_e * result)
94 return g_nfc_funcs->register_listener(target_detection_listener, se_transaction_listener, llcp_event_listener, hce_apdu_listener, result);
98 bool hal_nfc_unregister_listener(void)
102 return g_nfc_funcs->unregister_listener();
106 bool hal_nfc_get_firmware_version(data_s ** data, net_nfc_error_e * result)
110 return g_nfc_funcs->get_firmware_version(data, result);
114 bool hal_nfc_support_nfc(net_nfc_error_e * result)
118 return g_nfc_funcs->support_nfc(result);
122 bool hal_nfc_check_firmware_version(net_nfc_error_e * result)
126 return g_nfc_funcs->check_firmware_version(result);
130 bool hal_nfc_update_firmware(net_nfc_error_e * result)
134 return g_nfc_funcs->update_firmware(result);
138 bool hal_nfc_get_stack_information(net_nfc_stack_information_s * stack_info, net_nfc_error_e * result)
142 return g_nfc_funcs->get_stack_information(stack_info, result);
146 bool hal_nfc_configure_discovery(net_nfc_discovery_mode_e mode, net_nfc_event_filter_e config, net_nfc_error_e * result)
150 return g_nfc_funcs->configure_discovery(mode, config, result);
154 bool hal_nfc_check_target_presence(net_nfc_target_handle_s * handle, net_nfc_error_e * result)
158 return g_nfc_funcs->check_target_presence(handle, result);
162 bool hal_nfc_connect(net_nfc_target_handle_s * handle, net_nfc_error_e * result)
166 return g_nfc_funcs->connect(handle, result);
170 bool hal_nfc_disconnect(net_nfc_target_handle_s * handle, net_nfc_error_e * result)
174 return g_nfc_funcs->disconnect(handle, result);
178 bool hal_nfc_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)
182 return g_nfc_funcs->check_ndef(handle, ndef_card_state, max_data_size, real_data_size, result);
186 bool hal_nfc_read_ndef(net_nfc_target_handle_s * handle, data_s ** data, net_nfc_error_e * result)
190 return g_nfc_funcs->read_ndef(handle, data, result);
194 bool hal_nfc_write_ndef(net_nfc_target_handle_s * handle, data_s * data, net_nfc_error_e * result)
198 return g_nfc_funcs->write_ndef(handle, data, result);
202 bool hal_nfc_make_read_only_ndef(net_nfc_target_handle_s * handle, net_nfc_error_e * result)
206 return g_nfc_funcs->make_read_only_ndef(handle, result);
210 bool hal_nfc_format_ndef(net_nfc_target_handle_s * handle, data_s * secure_key, net_nfc_error_e * result)
214 return g_nfc_funcs->format_ndef(handle, secure_key, result);
218 bool hal_nfc_transceive(net_nfc_target_handle_s * handle, net_nfc_transceive_info_s * info, data_s ** data, net_nfc_error_e * result)
222 return g_nfc_funcs->transceive(handle, info, data, result);
226 bool hal_nfc_exception_handler(void)
230 return g_nfc_funcs->exception_handler();
234 bool hal_nfc_is_ready(net_nfc_error_e * result)
238 return g_nfc_funcs->is_ready(result);
244 bool hal_nfc_llcp_config(net_nfc_llcp_config_info_s * config, net_nfc_error_e * result)
248 return g_nfc_funcs->llcp_config(config, result);
252 bool hal_nfc_llcp_check_llcp(net_nfc_target_handle_s * handle, net_nfc_error_e * result)
256 return g_nfc_funcs->llcp_check_llcp(handle, result);
260 bool hal_nfc_llcp_activate_llcp(net_nfc_target_handle_s * handle, net_nfc_error_e * result)
264 return g_nfc_funcs->llcp_activate_llcp(handle, result);
268 bool hal_nfc_llcp_create_socket(net_nfc_llcp_socket_t * socket, net_nfc_socket_type_e socketType, uint16_t miu, uint8_t rw, net_nfc_error_e * result, void *user_param)
272 return g_nfc_funcs->llcp_create_socket(socket, socketType, miu, rw, result, user_param);
276 bool hal_nfc_llcp_bind(net_nfc_llcp_socket_t socket, uint8_t service_access_point, net_nfc_error_e * result)
280 return g_nfc_funcs->llcp_bind(socket, service_access_point, result);
284 bool hal_nfc_llcp_listen(net_nfc_target_handle_s * handle, uint8_t * service_access_name, net_nfc_llcp_socket_t socket, net_nfc_error_e * result, void *user_param)
288 return g_nfc_funcs->llcp_listen(handle, service_access_name, socket, result, user_param);
292 bool hal_nfc_llcp_accept(net_nfc_llcp_socket_t socket, net_nfc_error_e * result, void *user_param)
296 return g_nfc_funcs->llcp_accept(socket, result, user_param);
300 bool hal_nfc_llcp_connect_by_url(net_nfc_target_handle_s * handle, net_nfc_llcp_socket_t socket, uint8_t * service_access_name, net_nfc_error_e * result, void *user_param)
304 return g_nfc_funcs->llcp_connect_by_url(handle, socket, service_access_name, result, user_param);
308 bool hal_nfc_llcp_connect(net_nfc_target_handle_s * handle, net_nfc_llcp_socket_t socket, uint8_t service_access_point, net_nfc_error_e * result, void *user_param)
312 return g_nfc_funcs->llcp_connect(handle, socket, service_access_point, result, user_param);
316 bool hal_nfc_llcp_disconnect(net_nfc_target_handle_s * handle, net_nfc_llcp_socket_t socket, net_nfc_error_e * result, void *user_param)
320 return g_nfc_funcs->llcp_disconnect(handle, socket, result, user_param);
324 bool hal_nfc_llcp_socket_close(net_nfc_llcp_socket_t socket, net_nfc_error_e * result)
328 return g_nfc_funcs->llcp_socket_close(socket, result);
332 bool hal_nfc_llcp_recv(net_nfc_target_handle_s * handle, net_nfc_llcp_socket_t socket, data_s * data, net_nfc_error_e * result, void *user_param)
336 return g_nfc_funcs->llcp_recv(handle, socket, data, result, user_param);
340 bool hal_nfc_llcp_send(net_nfc_target_handle_s * handle, net_nfc_llcp_socket_t socket, data_s * data, net_nfc_error_e * result, void *user_param)
344 return g_nfc_funcs->llcp_send(handle, socket, data, result, user_param);
348 bool hal_nfc_llcp_recv_from(net_nfc_target_handle_s * handle, net_nfc_llcp_socket_t socket, data_s * data, net_nfc_error_e * result, void *user_param)
352 return g_nfc_funcs->llcp_recv_from(handle, socket, data, result, user_param);
356 bool hal_nfc_llcp_send_to(net_nfc_target_handle_s * handle, net_nfc_llcp_socket_t socket, data_s * data, uint8_t service_access_point, net_nfc_error_e * result, void *user_param)
360 return g_nfc_funcs->llcp_send_to(handle, socket, data, service_access_point, result, user_param);
364 bool hal_nfc_llcp_reject(net_nfc_target_handle_s * handle, net_nfc_llcp_socket_t socket, net_nfc_error_e * result)
368 return g_nfc_funcs->llcp_reject(handle, socket, result);
372 bool hal_nfc_llcp_get_remote_config(net_nfc_target_handle_s * handle, net_nfc_llcp_config_info_s * config, net_nfc_error_e * result)
376 return g_nfc_funcs->llcp_get_remote_config(handle, config, result);
380 bool hal_nfc_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)
384 return g_nfc_funcs->llcp_get_remote_socket_info(handle, socket, option, result);
387 /* secure element api */
390 bool hal_nfc_secure_element_open(net_nfc_secure_element_type_e element_type, net_nfc_target_handle_s ** handle, net_nfc_error_e * result)
394 return g_nfc_funcs->secure_element_open(element_type, handle, result);
398 bool hal_nfc_secure_element_get_atr(net_nfc_target_handle_s * handle, data_s ** atr, net_nfc_error_e * result)
402 return g_nfc_funcs->secure_element_get_atr(handle, atr, result);
406 bool hal_nfc_secure_element_send_apdu(net_nfc_target_handle_s * handle, data_s * command, data_s ** response, net_nfc_error_e * result)
410 return g_nfc_funcs->secure_element_send_apdu(handle, command, response, result);
414 bool hal_nfc_secure_element_close(net_nfc_target_handle_s * handle, net_nfc_error_e * result)
418 return g_nfc_funcs->secure_element_close(handle, result);
422 bool hal_nfc_get_secure_element_list(net_nfc_secure_element_info_s * list, int *count, net_nfc_error_e * result)
426 return g_nfc_funcs->get_secure_element_list(list, count, result);
430 bool hal_nfc_set_secure_element_mode(net_nfc_secure_element_type_e element_type, net_nfc_secure_element_mode_e mode, net_nfc_error_e * result)
434 return g_nfc_funcs->set_secure_element_mode(element_type, mode, result);
440 bool hal_nfc_sim_test(net_nfc_error_e * result)
444 return g_nfc_funcs->sim_test(result);
448 bool hal_nfc_prbs_test(net_nfc_error_e * result, uint32_t tech, uint32_t rate)
452 return g_nfc_funcs->prbs_test(result, tech, rate);
456 bool hal_nfc_test_mode_on(net_nfc_error_e * result)
460 return g_nfc_funcs->test_mode_on(result);
464 bool hal_nfc_test_mode_off(net_nfc_error_e * result)
468 return g_nfc_funcs->test_mode_off(result);
472 bool hal_nfc_eedata_register_set(net_nfc_error_e * result, uint32_t mode, uint32_t reg_id, data_s * data)
476 return g_nfc_funcs->eedata_register_set(result, mode, reg_id, data);
480 bool hal_nfc_ese_test(net_nfc_error_e * result)
484 return g_nfc_funcs->ese_test(result);
488 bool hal_nfc_test_set_se_tech_type(net_nfc_error_e * result, net_nfc_se_type_e type, uint32_t tech)
492 return g_nfc_funcs->test_set_se_tech_type(result, type, tech);
498 bool hal_nfc_hce_response_apdu(net_nfc_target_handle_s * handle, data_s * response, net_nfc_error_e * result)
502 return g_nfc_funcs->hce_response_apdu(handle, response, result);
506 bool hal_nfc_secure_element_route_aid(data_s * aid, net_nfc_se_type_e se_type, int power, net_nfc_error_e * result)
510 return g_nfc_funcs->secure_element_route_aid(aid, se_type, power, result);
514 bool hal_nfc_secure_element_unroute_aid(data_s * aid, net_nfc_error_e * result)
518 return g_nfc_funcs->secure_element_unroute_aid(aid, result);
522 bool hal_nfc_secure_element_commit_routing(net_nfc_error_e * result)
526 return g_nfc_funcs->secure_element_commit_routing(result);
530 bool hal_nfc_secure_element_set_default_route(net_nfc_se_type_e switch_on, net_nfc_se_type_e switch_off, net_nfc_se_type_e battery_off, net_nfc_error_e * result)
534 return g_nfc_funcs->secure_element_set_default_route(switch_on, switch_off, battery_off, result);
538 bool hal_nfc_secure_element_clear_aid_table(net_nfc_error_e * result)
542 return g_nfc_funcs->secure_element_clear_aid_table(result);
546 bool hal_nfc_secure_element_get_aid_table_size(int *AIDTableSize, net_nfc_error_e * result)
550 return g_nfc_funcs->secure_element_get_aid_table_size(AIDTableSize, result);
554 bool hal_nfc_secure_element_set_route_entry(net_nfc_se_entry_type_e type, net_nfc_se_tech_protocol_type_e value, net_nfc_se_type_e route, int power, net_nfc_error_e * result)
558 return g_nfc_funcs->secure_element_set_route_entry(type, value, route, power, result);
562 bool hal_nfc_secure_element_clear_routing_entry(net_nfc_se_entry_type_e type, net_nfc_error_e * result)
566 return g_nfc_funcs->secure_element_clear_routing_entry(type, result);
570 bool hal_nfc_secure_element_set_listen_tech_mask(net_nfc_se_tech_protocol_type_e screen_state, net_nfc_error_e * result)
574 return g_nfc_funcs->secure_element_set_listen_tech_mask(screen_state, result);
578 bool hal_nfc_set_screen_state(net_nfc_screen_state_type_e screen_state, net_nfc_error_e * result)
582 return g_nfc_funcs->set_screen_state(screen_state, result);