]> gitweb.hhaalo.de Git - sane-kds-s2000w-net.git/commitdiff
read per lines
authorBastian Dehn <hhaalo@arcor.de>
Fri, 9 Feb 2024 17:18:07 +0000 (18:18 +0100)
committerBastian Dehn <hhaalo@arcor.de>
Fri, 9 Feb 2024 17:18:07 +0000 (18:18 +0100)
src/kds_s2000w_net.c

index 0a95758b2e76b29ec60d6f8723835b272c78f2a1..c2ed4023dff0aa521d95a8ecfdda6bac54e6a93e 100644 (file)
@@ -217,16 +217,20 @@ SANE_Status _sane_kds_s2000w_net_start(SANE_Handle handle)
        return SANE_STATUS_GOOD;
 }
 
+int readed_bytes_per_line = 0;
+int readed_lines = 0;
+
 SANE_Status _sane_kds_s2000w_net_read(SANE_Handle handle, SANE_Byte* data,
        SANE_Int max_length, SANE_Int* length)
 {
        printf("is all scanned: %i\n", current_metadata.scanned_all_complete);
        char* image_data = (char*) current_metadata.image;
 
-       if (read_size >= current_metadata.size) {
+       if (readed_lines >= current_metadata.lines ) {
                printf("Image is loaded\n");
                read_size = 0;
                *length = 0;
+               readed_lines = 0;
                return SANE_STATUS_EOF;
        }
 
@@ -241,16 +245,25 @@ SANE_Status _sane_kds_s2000w_net_read(SANE_Handle handle, SANE_Byte* data,
                return SANE_STATUS_CANCELLED;
        }
 
-       if (read_size <= current_metadata.size - max_length) {
-               *length = max_length;
-               memcpy(data, current_metadata.image + read_size, *length);
+
+       int maxlen = 0;
+       if (current_metadata.bytes_per_line < max_length) {
+               maxlen = current_metadata.bytes_per_line - readed_bytes_per_line;
        } else {
-               *length = current_metadata.size - read_size;
-               memcpy(data, current_metadata.image + read_size, *length);
+               maxlen = max_length - readed_bytes_per_line;
        }
 
+       *length = maxlen;
+       memcpy(data, current_metadata.image + read_size, *length);
+
+       readed_bytes_per_line += *length;
        read_size += *length;
 
+       if (readed_bytes_per_line >= current_metadata.bytes_per_line) {
+               readed_bytes_per_line = 0;
+               readed_lines++;
+       }
+
        printf("length: %i\n", *length);
        printf("read size: %i\n", read_size);