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;
}
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);