From: Bastian Dehn Date: Sat, 3 Feb 2024 18:56:00 +0000 (+0100) Subject: add scan size eof mechanism X-Git-Tag: v1.0.0^2~355 X-Git-Url: https://gitweb.hhaalo.de/?a=commitdiff_plain;h=b081fcd1a753846290baab734cd825f7aa732107;p=sane-kds-s2000w-net.git add scan size eof mechanism --- diff --git a/src/kds_s2000w_net.c b/src/kds_s2000w_net.c index ed27c4e..df6b7a8 100644 --- a/src/kds_s2000w_net.c +++ b/src/kds_s2000w_net.c @@ -9,6 +9,9 @@ SANE_Option_Descriptor* option_descriptors = NULL; SANE_Device* device_info = NULL; int cancel = 0; +metadata current_metadata; +int read_size = 0; +int scan_started = 0; SANE_Status _sane_kds_s2000w_net_init(SANE_Int* version_code, SANE_Auth_Callback authorize) { @@ -169,25 +172,28 @@ SANE_Status _sane_kds_s2000w_net_control_option(SANE_Handle handle, SANE_Status _sane_kds_s2000w_net_get_parameters(SANE_Handle handle, SANE_Parameters* params) { - metadata mdata; + if (!scan_started) { + return SANE_STATUS_GOOD; + } + for (int i = 0; i < 10; i++) { - mdata = kds_s2000w_handler_get_parameters(1); - printf("valid %i\n", mdata.valid); - if (mdata.valid) + current_metadata = kds_s2000w_handler_get_parameters(1); + printf("valid %i\n", current_metadata.valid); + if (current_metadata.valid) break; sleep(1); } - if (!mdata.valid) + if (!current_metadata.valid) return SANE_STATUS_UNSUPPORTED; - params->format = mdata.format; - params->last_frame = mdata.is_last; - params->bytes_per_line = mdata.bytes_per_line; - params->pixels_per_line = mdata.pixels_per_line; - params->lines = mdata.lines; - params->depth = mdata.depth; + params->format = current_metadata.format; + 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->depth = current_metadata.depth; return SANE_STATUS_GOOD; } @@ -195,6 +201,7 @@ SANE_Status _sane_kds_s2000w_net_get_parameters(SANE_Handle handle, SANE_Status _sane_kds_s2000w_net_start(SANE_Handle handle) { cancel = 0; + scan_started = 1; kds_s2000w_handler_start_scan(); return SANE_STATUS_GOOD; } @@ -202,6 +209,11 @@ SANE_Status _sane_kds_s2000w_net_start(SANE_Handle handle) SANE_Status _sane_kds_s2000w_net_read(SANE_Handle handle, SANE_Byte* data, SANE_Int max_length, SANE_Int* length) { + if (read_size >= current_metadata.size) { + read_size = 0; + return SANE_STATUS_EOF; + } + int length_count = 0; while(length_count < max_length) { if (cancel) { @@ -216,6 +228,7 @@ SANE_Status _sane_kds_s2000w_net_read(SANE_Handle handle, SANE_Byte* data, } *length = length_count; + read_size += length_count; sleep(1); return SANE_STATUS_GOOD; }