]> gitweb.hhaalo.de Git - sane-kds-s2000w-net.git/commitdiff
add scan size eof mechanism
authorBastian Dehn <hhaalo@arcor.de>
Sat, 3 Feb 2024 18:56:00 +0000 (19:56 +0100)
committerBastian Dehn <hhaalo@arcor.de>
Sat, 3 Feb 2024 18:56:00 +0000 (19:56 +0100)
src/kds_s2000w_net.c

index ed27c4e60a2c1f82d696a02c9c80fcb9510a09ef..df6b7a8034788bc57cc1cb8f2f9a2b970ed3c393 100644 (file)
@@ -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;
 }