From b8c25ae2beb7ab2237ee7378baf38a25680dde1f Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Fri, 1 Mar 2024 17:49:32 +0100 Subject: [PATCH] add recreate session when empty paper --- src/kds_s2000w_debug.h | 2 +- src/kds_s2000w_handler.c | 25 +++++++++++++++++++++++-- src/kds_s2000w_handler.h | 1 + src/kds_s2000w_net.c | 6 +++++- 4 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/kds_s2000w_debug.h b/src/kds_s2000w_debug.h index 03b00a6..f535ead 100644 --- a/src/kds_s2000w_debug.h +++ b/src/kds_s2000w_debug.h @@ -9,7 +9,7 @@ #define DEBUG 5 #define ALL 6 -#define LOGLEVEL DEBUG +#define LOGLEVEL INFO void debug_printf(int level, const char* message); void debug_printf_int(int level, const char* message, int value); diff --git a/src/kds_s2000w_handler.c b/src/kds_s2000w_handler.c index ea40b28..a618689 100644 --- a/src/kds_s2000w_handler.c +++ b/src/kds_s2000w_handler.c @@ -231,6 +231,28 @@ void reset_handler(handler* h) h->read_info->readed_lines = 0; } +void kds_s2000w_handler_recreate_session(handler* h) +{ + kds_s2000w_client_close_session(h->sessionid); + response* resp = kds_s2000w_client_response_init(); + kds_s2000w_client_open_session("hhaalo", resp); + + if (resp->code == 200) { + json_object* resp_config = json_tokener_parse(resp->data); + json_object* value_object = NULL; + json_object_object_get_ex(resp_config, "SessionId", &value_object); + h->sessionid = json_object_get_int64(value_object); + h->state = OPENED; + value_object = NULL; + json_object_put(resp_config); + resp_config = NULL; + debug_printf_long(INFO, "SessionId", h->sessionid); + } + + kds_s2000w_client_response_free(resp); + resp = NULL; +} + void kds_s2000w_handler_open(const char* devicename, void** handle) { debug_printf(ALL, "kds_s2000w_handler_open"); @@ -275,6 +297,7 @@ void kds_s2000w_handler_open(const char* devicename, void** handle) json_object_object_get_ex(resp_config, "SessionId", &value_object); h->sessionid = json_object_get_int64(value_object); h->state = OPENED; + debug_printf_long(INFO, "SessionId", h->sessionid); value_object = NULL; } @@ -282,8 +305,6 @@ void kds_s2000w_handler_open(const char* devicename, void** handle) resp_config = NULL; kds_s2000w_client_response_free(resp); resp = NULL; - - return; } void kds_s2000w_handler_close(handler* h) diff --git a/src/kds_s2000w_handler.h b/src/kds_s2000w_handler.h index 67de78c..fd50111 100644 --- a/src/kds_s2000w_handler.h +++ b/src/kds_s2000w_handler.h @@ -51,6 +51,7 @@ typedef struct { handler* init_handler(); void free_handler(handler* h); void reset_handler(handler* h); +void kds_s2000w_handler_recreate_session(handler* h); void kds_s2000w_handler_open(const char* devicename, void** handle); void kds_s2000w_handler_close(handler* h); void kds_s2000w_handler_get_option(handler* handle, int option, void* value, int* info); diff --git a/src/kds_s2000w_net.c b/src/kds_s2000w_net.c index 477c442..ab86c85 100644 --- a/src/kds_s2000w_net.c +++ b/src/kds_s2000w_net.c @@ -82,7 +82,6 @@ SANE_Status _sane_kds_s2000w_net_open(SANE_String_Const devicename, if (h->state == NOTCONNECTED) return SANE_STATUS_IO_ERROR; - debug_printf_long(INFO, "SessionId", h->sessionid); return SANE_STATUS_GOOD; } @@ -185,6 +184,11 @@ SANE_Status _sane_kds_s2000w_net_start(SANE_Handle handle) break; } + if (h->current_metadata->valid == 0) { + kds_s2000w_handler_recreate_session(h); + return SANE_STATUS_NO_DOCS; + } + if (h->current_scan_status->complete_scanned) kds_s2000w_handler_stop_scan(h); -- 2.39.5