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)
{
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;
}
SANE_Status _sane_kds_s2000w_net_start(SANE_Handle handle)
{
cancel = 0;
+ scan_started = 1;
kds_s2000w_handler_start_scan();
return SANE_STATUS_GOOD;
}
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) {
}
*length = length_count;
+ read_size += length_count;
sleep(1);
return SANE_STATUS_GOOD;
}