#include "nfc-binding.h" #if USE_LIBNFC == 1 #include "libnfc_reader.h" #endif struct afb_event on_nfc_read_event; /// @brief Binding's initialization. /// @return Exit code, zero on success, non-zero otherwise. int init() { on_nfc_read_event = afb_daemon_make_event("on-nfc-read"); if (!afb_event_is_valid(on_nfc_read_event)) { AFB_ERROR("Failed to create a valid event!"); return 1; } #if USE_LIBNFC == 1 if (libnfc_init()) { AFB_ERROR("Failed start libnfc reader!"); return 2; } #endif return 0; } /// @brief Get a list of devices. /// @param[in] req The query. void verb_subscribe(struct afb_req req) { if (afb_req_subscribe(req, on_nfc_read_event)) afb_req_fail(req, NULL, "Subscription failure!"); else afb_req_success(req, NULL, "Subscription success!"); } /// @brief Get a list of devices. /// @param[in] req The query. void verb_unsubscribe(struct afb_req req) { if (afb_req_unsubscribe(req, on_nfc_read_event)) afb_req_fail(req, NULL, "Unsubscription failure!"); else afb_req_success(req, NULL, "Unsubscription success!"); } /// @brief Get a list of devices. /// @param[in] req The query. void verb_list_devices(struct afb_req req) { struct json_object* result; result = json_object_new_array(); #if USE_LIBNFC == 1 if (libnfc_list_devices(result)) { afb_req_fail(req, "Failed to get devices list from libnfc!", NULL); return; } #endif afb_req_success(req, result, NULL); } /// @brief Get a list of devices capabilities. /// @param[in] req The query. void verb_list_devices_capabilities(struct afb_req req) { struct json_object* result; struct json_object* arg; arg = afb_req_json(req); result = json_object_new_array(); #if USE_LIBNFC == 1 if (libnfc_list_devices_capabilities(result, arg)) { afb_req_fail(req, "Failed to get devices list from libnfc!", NULL); return; } #endif afb_req_success(req, result, NULL); } /// @brief Start polling. /// @param[in] req The query. void verb_start_polling(struct afb_req req) { struct json_object* result; struct json_object* arg; arg = afb_req_json(req); result = json_object_new_array(); #if USE_LIBNFC == 1 if (libnfc_start_polling(result, arg)) { afb_req_fail(req, "Failed to get devices list from libnfc!", NULL); return; } #endif afb_req_success(req, result, NULL); } void verb_stop_polling(struct afb_req req) { afb_req_fail(req, "Not implemented yet!", NULL); }