From: Bastian Dehn Date: Fri, 27 Dec 2024 08:11:46 +0000 (+0100) Subject: Revert "remove option feeder automatic" X-Git-Tag: v1.0.15^2~2 X-Git-Url: https://gitweb.hhaalo.de/?a=commitdiff_plain;h=75a4748f190ce71bc3e23409768560c635e19b8c;p=sane-kds-s2000w-net.git Revert "remove option feeder automatic" This reverts commit 75f1f7fd983309d72910b333f58c088ea792aa60. --- diff --git a/src/kds_s2000w_handler.c b/src/kds_s2000w_handler.c index 440e0ca..7088e16 100644 --- a/src/kds_s2000w_handler.c +++ b/src/kds_s2000w_handler.c @@ -301,6 +301,7 @@ void kds_s2000w_handler_open(const char* devicename, void** handle) return; } + h->image->size = 0; h->image->data = NULL; diff --git a/src/kds_s2000w_handler_opts.c b/src/kds_s2000w_handler_opts.c index 3b9cb89..c82ba75 100644 --- a/src/kds_s2000w_handler_opts.c +++ b/src/kds_s2000w_handler_opts.c @@ -133,6 +133,9 @@ void kds_s2000w_handler_get_option(handler* h, int option, void* value, int* inf if (strcmp(value, "DocumentFeeder") == 0) h->current_scan_status->feeder = 1; + if (strcmp(value, "Automatic") == 0) + h->current_scan_status->feeder = 2; + break; case 3: value_object = json_object_object_get(config, "ColorMode"); @@ -235,6 +238,9 @@ void kds_s2000w_handler_set_option(handler* h, int option, void* value, int* inf if (strcmp(value, "DocumentFeeder") == 0) h->current_scan_status->feeder = 1; + if (strcmp(value, "Automatic") == 0) + h->current_scan_status->feeder = 2; + break; case 3: value_object = json_object_object_get(config, "ColorMode"); diff --git a/src/kds_s2000w_net.c b/src/kds_s2000w_net.c index 46d9e4f..17b11d3 100644 --- a/src/kds_s2000w_net.c +++ b/src/kds_s2000w_net.c @@ -175,7 +175,8 @@ SANE_Status _sane_kds_s2000w_net_start(SANE_Handle handle) kds_s2000w_handler_start_scan(h); } - if (h->current_scan_status->downloaded_images > 0 + if (h->current_scan_status->feeder == 0 + && h->current_scan_status->downloaded_images > 0 && h->current_scan_status->available_images < 1) return SANE_STATUS_NO_DOCS; diff --git a/src/kds_s2000w_option_descriptors.c b/src/kds_s2000w_option_descriptors.c index 0adacb6..4703861 100644 --- a/src/kds_s2000w_option_descriptors.c +++ b/src/kds_s2000w_option_descriptors.c @@ -453,8 +453,9 @@ SANE_Option_Descriptor _kds_s2000w_option_descriptor_scan_source() constraint_scan_source = malloc(sizeof(SANE_String_Const*) * 4); constraint_scan_source[0] = "DocumentFeeder"; - constraint_scan_source[1] = "Flatbed"; - constraint_scan_source[2] = NULL; + constraint_scan_source[1] = "Automatic"; + constraint_scan_source[2] = "Flatbed"; + constraint_scan_source[3] = NULL; SANE_Option_Descriptor descriptor = { SANE_NAME_SCAN_SOURCE, @@ -462,7 +463,7 @@ SANE_Option_Descriptor _kds_s2000w_option_descriptor_scan_source() SANE_DESC_SCAN_SOURCE, SANE_TYPE_STRING, SANE_UNIT_NONE, - sizeof(SANE_String_Const*) * 3, + sizeof(SANE_String_Const*) * 4, SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT, SANE_CONSTRAINT_STRING_LIST, {.string_list = constraint_scan_source} diff --git a/tests/kds_s2000w_net_tests.c b/tests/kds_s2000w_net_tests.c index 93bafe1..c8e3b43 100644 --- a/tests/kds_s2000w_net_tests.c +++ b/tests/kds_s2000w_net_tests.c @@ -324,6 +324,99 @@ void sane_kds_s2000w_net_start_two_pages_per_feeder(void** state) h = NULL; } +void sane_kds_s2000w_net_start_slow_two_pages_per_feeder(void** state) +{ + response** response_list = (response**) *state; + will_return(mock_response, response_list[0]); + will_return(__wrap_kds_s2000w_client_start_scan, 0); + response* resp_status = kds_s2000w_client_response_init(); + resp_status->data = realloc(resp_status->data, 205); + const char* status = "{ \ + \"Status\": { \ + \"NumImagesScanned\": 1, \ + \"NumImagesStored\": 1, \ + \"State\": \"Scanning\", \ + \"ErrorNum\": 0, \ + \"LastError\": \"Status: 200 Success\", \ + \"PaperDetected\": \"0\", \ + \"PercentAvailable\": 99 \ + }}\0"; + memcpy(resp_status->data, status, 205); + resp_status->code = 200; + resp_status->size = 205; + will_return(mock_response, resp_status); + will_return(__wrap_kds_s2000w_client_status_session, 0); + will_return(mock_response, response_list[2]); + will_return(__wrap_kds_s2000w_client_get_image, 0); + will_return(mock_response, response_list[0]); + will_return(__wrap_kds_s2000w_client_delete_image, 0); + expect_function_call(__wrap_kds_s2000w_client_start_scan); + expect_function_call(__wrap_kds_s2000w_client_status_session); + expect_function_call(__wrap_kds_s2000w_client_get_image); + expect_function_call(__wrap_kds_s2000w_client_delete_image); + + handler* h = init_handler(); + h->current_scan_status->feeder = 1; + const char* test_config = "{\"Configuration\": { \"ColorMode\": \"Color\" } }"; + h->current_scanner_config = json_tokener_parse(test_config); + + int result = _sane_kds_s2000w_net_start(h); + + resp_status->data = realloc(resp_status->data, 210); + const char* status2 = "{ \ + \"Status\": { \ + \"NumImagesScanned\": 2, \ + \"NumImagesStored\": 1, \ + \"State\": \"Done Scanning\", \ + \"ErrorNum\": 0, \ + \"LastError\": \"Status: 200 Success\", \ + \"PaperDetected\": \"0\", \ + \"PercentAvailable\": 99 \ + }}\0"; + memcpy(resp_status->data, status2, 210); + resp_status->code = 200; + resp_status->size = 210; + will_return(mock_response, resp_status); + will_return(__wrap_kds_s2000w_client_status_session, 0); + will_return(mock_response, response_list[2]); + will_return(__wrap_kds_s2000w_client_get_image, 0); + will_return(mock_response, response_list[0]); + will_return(__wrap_kds_s2000w_client_delete_image, 0); + will_return(mock_response, response_list[0]); + will_return(__wrap_kds_s2000w_client_stop_scan, 0); + expect_function_call(__wrap_kds_s2000w_client_status_session); + expect_function_call(__wrap_kds_s2000w_client_get_image); + expect_function_call(__wrap_kds_s2000w_client_delete_image); + expect_function_call(__wrap_kds_s2000w_client_stop_scan); + + result = _sane_kds_s2000w_net_start(h); + + assert_int_equal(result, SANE_STATUS_GOOD); + assert_int_equal(h->current_scan_status->complete_scanned, 1); + + json_object_put(h->current_scanner_config); + h->current_scanner_config = NULL; + kds_s2000w_client_response_free(resp_status); + resp_status = NULL; + + free_handler(h); + h = NULL; +} + +void sane_kds_s2000w_net_get_parameter_cancel() +{ + handler* h = init_handler(); + h->read_info->cancel = 1; + + SANE_Status status = _sane_kds_s2000w_net_get_parameters(h, NULL); + + assert_int_equal(h->read_info->cancel, 0); + assert_int_equal(status, SANE_STATUS_CANCELLED); + + free_handler(h); + h = NULL; +} + void sane_kds_s2000w_net_cancel() { response* resp_status = kds_s2000w_client_response_init(); diff --git a/tests/kds_s2000w_net_tests.h b/tests/kds_s2000w_net_tests.h index de91bbc..34c1bf8 100644 --- a/tests/kds_s2000w_net_tests.h +++ b/tests/kds_s2000w_net_tests.h @@ -16,6 +16,8 @@ void sane_kds_s2000w_net_start(void** state); void sane_kds_s2000w_net_start_one_page_per_flatscan(void** state); void sane_kds_s2000w_net_start_one_page_per_feeder(void** state); void sane_kds_s2000w_net_start_two_pages_per_feeder(void** state); +void sane_kds_s2000w_net_start_slow_two_pages_per_feeder(void** state); +void sane_kds_s2000w_net_get_parameter_cancel(); void sane_kds_s2000w_net_cancel(); void sane_kds_s2000w_net_open(); void sane_kds_s2000w_net_open_busy_device(); diff --git a/tests/kds_s2000w_net_tests_run.c b/tests/kds_s2000w_net_tests_run.c index 0a30e9d..1b2203e 100644 --- a/tests/kds_s2000w_net_tests_run.c +++ b/tests/kds_s2000w_net_tests_run.c @@ -78,6 +78,7 @@ int main() cmocka_unit_test_setup_teardown(sane_kds_s2000w_net_start_one_page_per_flatscan, setup_net_start, teardown_net_start), cmocka_unit_test_setup_teardown(sane_kds_s2000w_net_start_one_page_per_feeder, setup_net_start, teardown_net_start), cmocka_unit_test_setup_teardown(sane_kds_s2000w_net_start_two_pages_per_feeder, setup_net_start, teardown_net_start), + cmocka_unit_test_setup_teardown(sane_kds_s2000w_net_start_slow_two_pages_per_feeder, setup_net_start, teardown_net_start) }; return cmocka_run_group_tests(net_tests, NULL, NULL); diff --git a/tests/kds_s2000w_option_descriptor_tests.c b/tests/kds_s2000w_option_descriptor_tests.c index 55f6574..c8e9872 100644 --- a/tests/kds_s2000w_option_descriptor_tests.c +++ b/tests/kds_s2000w_option_descriptor_tests.c @@ -69,12 +69,13 @@ void kds_s2000w_option_get_descriptor_two() assert_string_equal(SANE_DESC_SCAN_SOURCE, option->desc); assert_int_equal(SANE_TYPE_STRING, option->type); assert_int_equal(SANE_UNIT_NONE, option->unit); - assert_int_equal(sizeof(SANE_String_Const*) * 3, option->size); + assert_int_equal(sizeof(SANE_String_Const*) * 4, option->size); assert_int_equal(SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT, option->cap); assert_int_equal(SANE_CONSTRAINT_STRING_LIST, option->constraint_type); assert_string_equal("DocumentFeeder", option->constraint.string_list[0]); - assert_string_equal("Flatbed", option->constraint.string_list[1]); - assert_null(option->constraint.string_list[2]); + assert_string_equal("Automatic", option->constraint.string_list[1]); + assert_string_equal("Flatbed", option->constraint.string_list[2]); + assert_null(option->constraint.string_list[3]); } void kds_s2000w_option_get_descriptor_three()