]> gitweb.hhaalo.de Git - sane-kds-s2000w-net.git/commitdiff
scann with canceled finish
authorBastian Dehn <hhaalo@arcor.de>
Tue, 6 Feb 2024 20:07:30 +0000 (21:07 +0100)
committerBastian Dehn <hhaalo@arcor.de>
Tue, 6 Feb 2024 20:07:30 +0000 (21:07 +0100)
src/kds_s2000w_handler.c
src/kds_s2000w_handler.h
src/kds_s2000w_net.c

index f9e08948f9504d820ac3c024232a4e9a5f3d28e9..3ee5d747fbcf1dec25c0dfecfda325aadaf18b34 100644 (file)
@@ -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;
index 5323c1c0579f0d3d45c9f7ecd039b60326f29682..c369f92ce66f5bdfe6dd37f131163c48b84b2745 100644 (file)
@@ -24,6 +24,7 @@ typedef struct {
        int lines;
        int depth;
        int valid;
+       int scanned_all_complete;
 } metadata;
 
 current_state* kds_s2000w_handler_open();
index 6bd0177c2bd5b689ae52ed1eb109a0702c8fe9da..b08a555e7396aad9776accc772b090bd889fed62 100644 (file)
@@ -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++;