From 3f2627f86f57b143ff120789a9c54455264332cb Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Sat, 30 Mar 2024 19:54:29 +0100 Subject: [PATCH] add heartbeat one second --- src/CMakeLists.txt | 6 ++++-- src/kds_s2000w_handler.c | 10 +++++++--- src/kds_s2000w_handler.h | 1 + src/kds_s2000w_heartbeat.c | 18 ++++++++++++++++++ src/kds_s2000w_heartbeat.h | 6 ++++++ src/kds_s2000w_net.c | 1 - 6 files changed, 36 insertions(+), 6 deletions(-) create mode 100644 src/kds_s2000w_heartbeat.c create mode 100644 src/kds_s2000w_heartbeat.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 88965bb..d7929e5 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -38,7 +38,8 @@ ADD_LIBRARY("sane-kds_s2000w_net" "kds_s2000w_client.c" "kds_s2000w_image_converter.c" "kds_s2000w_debug.c" - "kds_s2000w_config.c") + "kds_s2000w_config.c" + "kds_s2000w_heartbeat.c") SET_TARGET_PROPERTIES("sane-kds_s2000w_net" PROPERTIES VERSION 1) TARGET_INCLUDE_DIRECTORIES("sane-kds_s2000w_net" PRIVATE "${CMAKE_CURRENT_BINARY_DIR}") TARGET_LINK_LIBRARIES("sane-kds_s2000w_net" @@ -46,7 +47,8 @@ TARGET_LINK_LIBRARIES("sane-kds_s2000w_net" ${CONFUSE} ${CURL_LIBRARY} ${ImageMagick_LIBRARIES} - json-c) + json-c + pthread) INSTALL(TARGETS "sane-kds_s2000w_net" DESTINATION ${CMAKE_LIBRARY_PATH}/sane) diff --git a/src/kds_s2000w_handler.c b/src/kds_s2000w_handler.c index a54c234..7e5a6bf 100644 --- a/src/kds_s2000w_handler.c +++ b/src/kds_s2000w_handler.c @@ -1,12 +1,12 @@ #include #include -#include #include #include "kds_s2000w_handler.h" #include "kds_s2000w_handler_opts.h" #include "kds_s2000w_client.h" #include "kds_s2000w_image_converter.h" #include "kds_s2000w_debug.h" +#include "kds_s2000w_heartbeat.h" void _get_current_metadata(handler* h) { @@ -93,7 +93,6 @@ void _get_current_metadata(handler* h) metadata = NULL; kds_s2000w_client_response_free(resp); resp = NULL; - sleep(1); } void _delete_current_image(handler* h) @@ -177,6 +176,7 @@ handler* init_handler() h->sessionid = 0; h->state = NOTCONNECTED; + h->wait = 0; h->current_scan_status->current_image_number = 1; h->current_scan_status->available_images = 0; h->current_scan_status->downloaded_images = 0; @@ -206,6 +206,7 @@ handler* init_handler() void free_handler(handler* h) { debug_printf(ALL, "free handler"); + while(h->wait); json_object_put(h->current_scanner_config); h->current_scanner_config = NULL; free(h->current_scan_status); @@ -233,6 +234,7 @@ void reset_handler(handler* h) h->jpg_image->data = NULL; h->state = NOTCONNECTED; + h->wait = 0; h->current_scan_status->current_image_number = 1; h->current_scan_status->available_images = 0; h->current_scan_status->downloaded_images = 0; @@ -318,7 +320,6 @@ void kds_s2000w_handler_open(const char* devicename, void** handle) if (resp->code == 408) { kds_s2000w_client_response_free(resp); resp = NULL; - sleep(1); resp = kds_s2000w_client_response_init(); result = kds_s2000w_client_open_session(resp); if (resp->error_size > 0) @@ -395,6 +396,9 @@ void kds_s2000w_handler_stop_scan(handler* h) void kds_s2000w_handler_get_parameters(handler* h) { debug_printf(ALL, "kds_s2000w_handler_get_parameters"); + while(h->wait); + wait_a_second(&h->wait); + if (h->current_scan_status->complete_scanned && h->current_scan_status->available_images <= 0) { h->current_metadata->valid = 1; diff --git a/src/kds_s2000w_handler.h b/src/kds_s2000w_handler.h index aba0ca5..d855e25 100644 --- a/src/kds_s2000w_handler.h +++ b/src/kds_s2000w_handler.h @@ -48,6 +48,7 @@ typedef struct { typedef struct { long sessionid; int state; + int wait; json_object* current_scanner_config; scanstatus* current_scan_status; metadata* current_metadata; diff --git a/src/kds_s2000w_heartbeat.c b/src/kds_s2000w_heartbeat.c new file mode 100644 index 0000000..62921bf --- /dev/null +++ b/src/kds_s2000w_heartbeat.c @@ -0,0 +1,18 @@ +#include +#include +#include "kds_s2000w_heartbeat.h" + +void* _wait_thread(void* wait) +{ + int* wait_bool = (int*) wait; + sleep(1); + *wait_bool = 0; + return NULL; +} + +void wait_a_second(int* wait) +{ + *wait = 1; + pthread_t pwait; + pthread_create(&pwait, NULL, _wait_thread, wait); +} \ No newline at end of file diff --git a/src/kds_s2000w_heartbeat.h b/src/kds_s2000w_heartbeat.h new file mode 100644 index 0000000..82c7406 --- /dev/null +++ b/src/kds_s2000w_heartbeat.h @@ -0,0 +1,6 @@ +#ifndef KDS_S2000W_HEARTBEAT_H +#define KDS_S2000W_HEARTBEAT_H + +void wait_a_second(int* wait); + +#endif \ No newline at end of file diff --git a/src/kds_s2000w_net.c b/src/kds_s2000w_net.c index 1cc71cb..473d669 100644 --- a/src/kds_s2000w_net.c +++ b/src/kds_s2000w_net.c @@ -171,7 +171,6 @@ SANE_Status _sane_kds_s2000w_net_start(SANE_Handle handle) } for (int i = 0; i < 200; i++) { - usleep(500000); kds_s2000w_handler_get_parameters(h); if (h->current_metadata->valid) break; -- 2.39.5