diff options
Diffstat (limited to 'src/nfc-binding.c')
-rw-r--r-- | src/nfc-binding.c | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/src/nfc-binding.c b/src/nfc-binding.c new file mode 100644 index 0000000..3d96cbb --- /dev/null +++ b/src/nfc-binding.c @@ -0,0 +1,113 @@ +#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); +} |