From 8c68f6d3fdc44d19115729e1dabd2fa4d81351b4 Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Wed, 28 Feb 2024 21:56:53 +0100 Subject: [PATCH] add reset handler --- src/kds_s2000w_handler.c | 29 +++++++++++++++++++++++++++++ src/kds_s2000w_handler.h | 1 + src/kds_s2000w_net.c | 5 ++--- 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/src/kds_s2000w_handler.c b/src/kds_s2000w_handler.c index 8b53e27..003a0ec 100644 --- a/src/kds_s2000w_handler.c +++ b/src/kds_s2000w_handler.c @@ -209,6 +209,35 @@ void free_handler(handler* h) h = NULL; } +void reset_handler(handler* h) +{ + free(h->current_metadata->image); + h->current_metadata->image = NULL; + + h->sessionid = 0; + h->state = NOTCONNECTED; + h->current_scan_status->current_image_number = 1; + h->current_scan_status->available_images = 0; + h->current_scan_status->downloaded_images = 0; + h->current_scan_status->complete_scanned = 0; + h->current_metadata->format = 1; + h->current_metadata->channels = 3; + h->current_metadata->is_last = 1; + h->current_metadata->size = 0; + h->current_metadata->bytes_per_line = 0; + h->current_metadata->pixels_per_line = 0; + h->current_metadata->lines = 0; + h->current_metadata->depth = 8; + h->current_metadata->valid = 0; + h->current_metadata->scanned_all_complete = 0; + h->current_metadata->image = NULL; + h->read_info->scan_started = 0; + h->read_info->cancel = 0; + h->read_info->read_size = 0; + h->read_info->readed_bytes_per_line = 0; + h->read_info->readed_lines = 0; +} + void kds_s2000w_handler_open(const char* devicename, void** handle) { debug_printf(ALL, "kds_s2000w_handler_open"); diff --git a/src/kds_s2000w_handler.h b/src/kds_s2000w_handler.h index ea01fe8..67de78c 100644 --- a/src/kds_s2000w_handler.h +++ b/src/kds_s2000w_handler.h @@ -50,6 +50,7 @@ typedef struct { handler* init_handler(); void free_handler(handler* h); +void reset_handler(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 40a7097..5ae74ec 100644 --- a/src/kds_s2000w_net.c +++ b/src/kds_s2000w_net.c @@ -184,10 +184,9 @@ SANE_Status _sane_kds_s2000w_net_read(SANE_Handle handle, SANE_Byte* data, handler* h = (handler*) handle; // cancel if (h->read_info->cancel) { - h->read_info->cancel = 0; - h->read_info->scan_started = 0; - *length = 0; + reset_handler(h); kds_s2000w_handler_stop_scan(h); + *length = 0; return SANE_STATUS_CANCELLED; } -- 2.39.5