From e710cba58d094e1b1810cf8b3ea70dd58d61c4e7 Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Tue, 6 Feb 2024 21:07:30 +0100 Subject: [PATCH] scann with canceled finish --- src/kds_s2000w_handler.c | 8 ++++++++ src/kds_s2000w_handler.h | 1 + src/kds_s2000w_net.c | 19 +++++++++++++++---- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/kds_s2000w_handler.c b/src/kds_s2000w_handler.c index f9e0894..3ee5d74 100644 --- a/src/kds_s2000w_handler.c +++ b/src/kds_s2000w_handler.c @@ -195,6 +195,7 @@ current_state* kds_s2000w_handler_open() current_scan_status.available_images = 0; current_scan_status.downloaded_images = 0; current_scan_status.complete_scanned = 0; + current_scan_status.mdata.scanned_all_complete = 0; return state; } @@ -245,6 +246,13 @@ metadata kds_s2000w_handler_get_parameters() _get_current_scan_status(); } + if (current_scan_status.complete_scanned + && current_scan_status.downloaded_images == current_scan_status.available_images) { + current_scan_status.mdata.valid = 1; + current_scan_status.mdata.scanned_all_complete = 1; + return current_scan_status.mdata; + } + if (current_scan_status.downloaded_images >= current_scan_status.available_images) { current_scan_status.mdata.valid = 0; return current_scan_status.mdata; diff --git a/src/kds_s2000w_handler.h b/src/kds_s2000w_handler.h index 5323c1c..c369f92 100644 --- a/src/kds_s2000w_handler.h +++ b/src/kds_s2000w_handler.h @@ -24,6 +24,7 @@ typedef struct { int lines; int depth; int valid; + int scanned_all_complete; } metadata; current_state* kds_s2000w_handler_open(); diff --git a/src/kds_s2000w_net.c b/src/kds_s2000w_net.c index 6bd0177..b08a555 100644 --- a/src/kds_s2000w_net.c +++ b/src/kds_s2000w_net.c @@ -190,8 +190,9 @@ SANE_Status _sane_kds_s2000w_net_get_parameters(SANE_Handle handle, params->last_frame = current_metadata.is_last; params->bytes_per_line = current_metadata.bytes_per_line; params->pixels_per_line = current_metadata.pixels_per_line; - params->lines = current_metadata.lines; + params->lines = -1; params->depth = current_metadata.depth; + read_size = 0; return SANE_STATUS_GOOD; } @@ -216,11 +217,17 @@ void _sane_kds_s2000w_net_cancel(SANE_Handle handle) SANE_Status _sane_kds_s2000w_net_read(SANE_Handle handle, SANE_Byte* data, SANE_Int max_length, SANE_Int* length) { - printf("is last: %i\n", current_metadata.is_last); - if (read_size >= current_metadata.is_last) { + printf("is all scanned: %i\n", current_metadata.scanned_all_complete); + if (current_metadata.scanned_all_complete && !cancel) { read_size = 0; - return SANE_STATUS_EOF; _sane_kds_s2000w_net_cancel(NULL); + return SANE_STATUS_GOOD; + } + + if (read_size >= current_metadata.size) { + read_size = 0; + *length = 0; + return SANE_STATUS_EOF; } int length_count = 0; @@ -234,6 +241,10 @@ SANE_Status _sane_kds_s2000w_net_read(SANE_Handle handle, SANE_Byte* data, kds_s2000w_handler_open(); return SANE_STATUS_CANCELLED; } + + if (read_size >= current_metadata.size) + break; + data[length_count] = 0; length_count++; read_size++; -- 2.39.5