handler* h = malloc(sizeof(handler));
h->current_scanner_config = NULL;
h->current_scan_status = malloc(sizeof(scanstatus));
- h->current_metadata = malloc(sizeof(metadata));
h->read_info = malloc(sizeof(readinfo));
h->image = malloc(sizeof(imagedata));
h->current_scan_status->downloaded_images = 0;
h->current_scan_status->complete_scanned = 0;
h->current_scan_status->feeder = 1;
- h->current_metadata->format = 1;
- h->current_metadata->bytes_per_line = 0;
- h->current_metadata->pixels_per_line = 0;
- h->current_metadata->lines = 0;
- h->current_metadata->depth = 8;
h->read_info->scan_started = 0;
h->read_info->cancel = 0;
h->read_info->read_size = 0;
h->current_scanner_config = NULL;
free(h->current_scan_status);
h->current_scan_status = NULL;
- free(h->current_metadata);
- h->current_metadata = NULL;
free(h->read_info);
h->read_info = NULL;
free(h->image->data);
h->current_scan_status->available_images = 0;
h->current_scan_status->downloaded_images = 0;
h->current_scan_status->complete_scanned = 0;
- h->current_metadata->format = 1;
- h->current_metadata->bytes_per_line = 0;
- h->current_metadata->pixels_per_line = 0;
- h->current_metadata->lines = 0;
- h->current_metadata->depth = 8;
h->read_info->scan_started = 0;
h->read_info->cancel = 0;
h->read_info->read_size = 0;
h->read_info->readed_lines = 0;
}
-void kds_s2000w_handler_get_current_metadata(handler* h)
+void kds_s2000w_handler_get_current_metadata(handler* h, metadata* params)
{
#ifndef NODEBUG
debug_printf(ALL, "get_current_metadata");
#endif
- image_metadata* mdata = malloc(sizeof(image_metadata));
+ params->format = 1;
+ params->last_frame = 1;
+ params->bytes_per_line = 0;
+ params->pixels_per_line = 0;
+ params->lines = 0;
+ params->depth = 8;
+
json_object* config = json_object_object_get(h->current_scanner_config, "Configuration");
json_object* metadata = json_object_object_get(config, "ColorMode");
const char* color_value = json_object_get_string(metadata);
+
+ if (strcmp(color_value, "Color") == 0)
+ params->format = 1;
+
+ if (strcmp(color_value, "Gray") == 0)
+ params->format = 0;
+
+ if (strcmp(color_value, "BW") == 0)
+ params->format = 0;
+
+ if (h->image->size < 1)
+ return;
+
+ image_metadata* mdata = malloc(sizeof(image_metadata));
+
blobdata* image = (blobdata*) h->image;
blobdata* scanner_image = malloc(sizeof(blobdata));
int channels = 1;
image->data = NULL;
image->data = 0;
-
- if (strcmp(color_value, "Color") == 0)
- h->current_metadata->format = 1;
-
- if (strcmp(color_value, "Gray") == 0)
- h->current_metadata->format = 0;
-
- if (strcmp(color_value, "BW") == 0)
- h->current_metadata->format = 0;
-
- if (h->current_metadata->format == 1)
+ if (params->format == 1)
channels = 3;
kds_s2000w_metadata_from_image(scanner_image, mdata);
- h->current_metadata->depth = mdata->depth;
- h->current_metadata->pixels_per_line = mdata->width;
- h->current_metadata->lines = mdata->height;
+ params->depth = mdata->depth;
+ params->pixels_per_line = mdata->width;
+ params->lines = mdata->height;
- if (h->current_metadata->depth > 8) {
- h->current_metadata->depth = 8;
- kds_s2000w_convert_jpg_to_pnm_with_depth(scanner_image, image, h->current_metadata->depth);
+ if (params->depth > 8) {
+ params->depth = 8;
+ kds_s2000w_convert_jpg_to_pnm_with_depth(scanner_image, image, params->depth);
} else {
kds_s2000w_convert_tiff_to_pnm(scanner_image, image);
}
debug_printf_int(DEBUG, "size of pnm image", image->size);
#endif
- if (h->current_metadata->depth == 1)
- h->current_metadata->bytes_per_line = channels * floor((h->current_metadata->pixels_per_line + 7) / 8);
+ if (params->depth == 1)
+ params->bytes_per_line = channels * floor((params->pixels_per_line + 7) / 8);
else
- h->current_metadata->bytes_per_line = channels * h->current_metadata->pixels_per_line * h->current_metadata->depth / 8;
-
+ params->bytes_per_line = channels * params->pixels_per_line * params->depth / 8;
metadata = NULL;
free(mdata);
typedef struct {
int format;
+ int last_frame;
int bytes_per_line;
int pixels_per_line;
int lines;
int state;
json_object* current_scanner_config;
scanstatus* current_scan_status;
- metadata* current_metadata;
readinfo* read_info;
imagedata* image;
} handler;
handler* init_handler();
void free_handler(handler* h);
void reset_handler(handler* h);
-void kds_s2000w_handler_get_current_metadata(handler* h);
+void kds_s2000w_handler_get_current_metadata(handler* h, metadata* params);
void kds_s2000w_handler_delete_current_image(handler* h);
void kds_s2000w_handler_download_current_image(handler* h);
void kds_s2000w_net_handler_get_current_scan_status(handler* h);
resp = NULL;
json_object_put(capabilities);
capabilities = NULL;
-
- h->current_metadata->format = 1;
- h->current_metadata->depth = 8;
}
void _set_options(handler* h)
value_object = json_object_object_get(config, "ColorMode");
_write_string_value_to_json(value_object, value);
value_object = NULL;
-
- char* str_Value = (char*) value;
- if (strcmp(str_Value, "Color") == 0) {
- h->current_metadata->format = 1;
- h->current_metadata->depth = 8;
- } else if (strcmp(str_Value, "Gray") == 0) {
- h->current_metadata->format = 0;
- h->current_metadata->depth = 8;
- } else {
- h->current_metadata->format = 0;
- h->current_metadata->depth = 1;
- }
-
- if (info != NULL)
- *info = RELOAD_PARAMS | RELOAD_OPTIONS;
-
break;
case 4:
value_object = json_object_object_get(config, "DPI");
return SANE_STATUS_CANCELLED;
}
- params->format = h->current_metadata->format;
- params->last_frame = 1;
- params->bytes_per_line = h->current_metadata->bytes_per_line;
- params->pixels_per_line = h->current_metadata->pixels_per_line;
- params->lines = h->current_metadata->lines;
- params->depth = h->current_metadata->depth;
+ kds_s2000w_handler_get_current_metadata(h, (metadata*) params);
h->read_info->read_size = 0;
h->read_info->readed_bytes_per_line = 0;
}
kds_s2000w_handler_download_current_image(h);
- kds_s2000w_handler_get_current_metadata(h);
kds_s2000w_handler_delete_current_image(h);
h->current_scan_status->current_image_number++;
handler* h = init_handler();
h->read_info->cancel = 0;
h->read_info->read_size = 0;
- h->current_metadata->format = 0;
h->image->size = 95003;
h->image->data = malloc(sizeof(char) * 95003);
char* image = (char*) h->image->data;
return;
}
-void kds_s2000w_net_get_parameters_with_image_data()
-{
- handler* h = init_handler();
- h->read_info->scan_started = 1;
- h->current_metadata->format = 1;
- h->current_metadata->bytes_per_line = 42;
- h->current_metadata->pixels_per_line = 1080;
- h->current_metadata->lines = 100;
- h->current_metadata->depth = 8;
- SANE_Parameters params;
-
- SANE_Status status = _sane_kds_s2000w_net_get_parameters(h, ¶ms);
-
- assert_int_equal(params.format, 1);
- assert_int_equal(params.last_frame, 1);
- assert_int_equal(params.bytes_per_line, 42);
- assert_int_equal(params.pixels_per_line, 1080);
- assert_int_equal(params.lines, 100);
- assert_int_equal(params.depth, 8);
- assert_int_equal(status, SANE_STATUS_GOOD);
-
- free_handler(h);
- h = NULL;
-}
-
void kds_s2000w_net_get_devices()
{
SANE_Device*** device_list = malloc(sizeof(SANE_Device**));
assert_int_equal(result, SANE_STATUS_GOOD);
assert_int_equal(h->current_scan_status->complete_scanned, 0);
- assert_int_equal(h->current_metadata->depth, 8);
- assert_int_equal(h->current_metadata->format, 1);
- assert_int_equal(h->current_metadata->pixels_per_line, 2);
- assert_int_equal(h->current_metadata->lines, 1);
json_object_put(h->current_scanner_config);
h->current_scanner_config = NULL;
assert_int_equal(result, SANE_STATUS_GOOD);
assert_int_equal(h->current_scan_status->complete_scanned, 0);
- assert_int_equal(h->current_metadata->depth, 8);
- assert_int_equal(h->current_metadata->format, 1);
- assert_int_equal(h->current_metadata->pixels_per_line, 2);
- assert_int_equal(h->current_metadata->lines, 1);
json_object_put(h->current_scanner_config);
h->current_scanner_config = NULL;
assert_int_equal(result, SANE_STATUS_GOOD);
assert_int_equal(h->current_scan_status->complete_scanned, 1);
- assert_int_equal(h->current_metadata->depth, 8);
- assert_int_equal(h->current_metadata->format, 1);
- assert_int_equal(h->current_metadata->pixels_per_line, 2);
- assert_int_equal(h->current_metadata->lines, 1);
json_object_put(h->current_scanner_config);
h->current_scanner_config = NULL;
assert_int_equal(result, SANE_STATUS_GOOD);
assert_int_equal(h->current_scan_status->complete_scanned, 1);
- assert_int_equal(h->current_metadata->depth, 8);
- assert_int_equal(h->current_metadata->format, 1);
- assert_int_equal(h->current_metadata->pixels_per_line, 2);
- assert_int_equal(h->current_metadata->lines, 1);
json_object_put(h->current_scanner_config);
h->current_scanner_config = NULL;
assert_int_equal(result, SANE_STATUS_GOOD);
assert_int_equal(h->current_scan_status->complete_scanned, 1);
- assert_int_equal(h->current_metadata->depth, 8);
- assert_int_equal(h->current_metadata->format, 1);
- assert_int_equal(h->current_metadata->pixels_per_line, 2);
- assert_int_equal(h->current_metadata->lines, 1);
json_object_put(h->current_scanner_config);
h->current_scanner_config = NULL;
#include <setjmp.h>
#include <cmocka.h>
-void kds_s2000w_net_get_parameters_with_image_data();
void kds_s2000w_net_get_devices();
void kds_s2000w_net_init();
void kds_s2000w_net_get_devices_only_remote();
int main()
{
const struct CMUnitTest net_tests[] = {
- cmocka_unit_test(kds_s2000w_net_get_parameters_with_image_data),
cmocka_unit_test(kds_s2000w_net_get_devices),
cmocka_unit_test(kds_s2000w_net_init),
cmocka_unit_test(kds_s2000w_net_get_devices_only_remote),