From 4510f17d9c2b7a553d2dc1891071bac63fead0eb Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Fri, 17 Oct 2025 18:42:25 +0200 Subject: [PATCH] change all scan states into one var --- src/kds_s2000w_handler.c | 10 +++------- src/kds_s2000w_handler.h | 11 ++++++++--- src/kds_s2000w_handler_opts.c | 2 +- src/kds_s2000w_net.c | 20 +++++++++----------- tests/kds_s2000w_net_read_tests.c | 1 - tests/kds_s2000w_net_tests.c | 22 ++++++++++------------ 6 files changed, 31 insertions(+), 35 deletions(-) diff --git a/src/kds_s2000w_handler.c b/src/kds_s2000w_handler.c index 1ca34fd..aa52a74 100644 --- a/src/kds_s2000w_handler.c +++ b/src/kds_s2000w_handler.c @@ -108,12 +108,10 @@ handler* kds_s2000w_handler_init() h->profile = 0; h->sessionid = 0; h->state = NOTCONNECTED; + h->scan_status->state = STOPPED; h->scan_status->image_number = 1; h->scan_status->available_images = 0; h->scan_status->downloaded_images = 0; - h->scan_status->completed = false; - h->read_info->scan_started = false; - h->read_info->cancel = false; h->read_info->read_size = 0; h->image->size = 0; h->image->data = NULL; @@ -157,12 +155,10 @@ void kds_s2000w_handler_reset(handler* h) free(h->image->data); h->image->data = NULL; + h->scan_status->state = STOPPED; h->scan_status->image_number = 1; h->scan_status->available_images = 0; h->scan_status->downloaded_images = 0; - h->scan_status->completed = false; - h->read_info->scan_started = false; - h->read_info->cancel = false; h->read_info->read_size = 0; } @@ -384,7 +380,7 @@ void kds_s2000w_handler_get_current_scan_status(handler* h) status_value_obj = json_object_object_get(status_obj, "State"); const char* scanner_state = json_object_get_string(status_value_obj); if (strcmp(scanner_state, "Scanning") != 0) - h->scan_status->completed = true; + h->scan_status->state = COMPLETED; json_object_put(status_resp_obj); status_resp_obj = NULL; diff --git a/src/kds_s2000w_handler.h b/src/kds_s2000w_handler.h index d12f686..dfa778b 100644 --- a/src/kds_s2000w_handler.h +++ b/src/kds_s2000w_handler.h @@ -21,6 +21,13 @@ enum { Automatic }; +enum { + STOPPED, + STARTED, + CANCLED, + COMPLETED +}; + typedef struct { size_t size; void* data; @@ -43,15 +50,13 @@ typedef struct { } coord_t; typedef struct { + uint8_t state; uint8_t image_number; uint8_t available_images; uint8_t downloaded_images; - bool completed; } scan_status_t; typedef struct { - bool scan_started; - bool cancel; uint64_t read_size; } readinfo; diff --git a/src/kds_s2000w_handler_opts.c b/src/kds_s2000w_handler_opts.c index 05d7ffd..894df4e 100644 --- a/src/kds_s2000w_handler_opts.c +++ b/src/kds_s2000w_handler_opts.c @@ -494,7 +494,7 @@ void kds_s2000w_handler_opts_get_option(handler* h, uint32_t option, void* value void kds_s2000w_handler_opts_set_option(handler* h, uint32_t option, void* value, int32_t* info) { - if (h->read_info->scan_started) + if (h->scan_status->state == STARTED) return; json_object* config = _kds_s2000w_handler_opts_load_config(h); diff --git a/src/kds_s2000w_net.c b/src/kds_s2000w_net.c index a8780d1..38536b3 100644 --- a/src/kds_s2000w_net.c +++ b/src/kds_s2000w_net.c @@ -155,20 +155,18 @@ SANE_Status sane_kds_s2000w_net_start(SANE_Handle handle) handler* h = (handler*) handle; - if (h->read_info->cancel) + if (h->scan_status->state == CANCLED) return SANE_STATUS_CANCELLED; - if (!h->read_info->scan_started) { - h->read_info->cancel = false; - h->read_info->scan_started = true; + if (h->scan_status->state == STOPPED) { + h->scan_status->state = STARTED; kds_s2000w_handler_start_scan(h); } for (uint32_t i = 0; i < 30; i++) { kds_s2000w_handler_get_current_scan_status(h); - - if (h->scan_status->available_images > 0) - break; + if (h->scan_status->available_images > 0) + break; } if (h->scan_status->available_images < 1) @@ -178,7 +176,7 @@ SANE_Status sane_kds_s2000w_net_start(SANE_Handle handle) kds_s2000w_handler_delete_current_image(h); h->scan_status->image_number++; - if (h->scan_status->completed) { + if (h->scan_status->state == COMPLETED) { kds_s2000w_handler_stop_scan(h); return SANE_STATUS_GOOD; } @@ -219,7 +217,7 @@ void sane_kds_s2000w_net_cancel(SANE_Handle handle) handler* h = (handler*) handle; - if (h->read_info->cancel) { + if (h->scan_status->state == CANCLED) { kds_s2000w_debug_printf(DEBUG, "scan completed canceled"); kds_s2000w_handler_reset(h); kds_s2000w_handler_recreate_session(h); @@ -228,7 +226,7 @@ void sane_kds_s2000w_net_cancel(SANE_Handle handle) kds_s2000w_handler_get_current_scan_status(h); - if (h->scan_status->completed) { + if (h->scan_status->state == COMPLETED) { kds_s2000w_debug_printf(DEBUG, "scan completed"); kds_s2000w_handler_reset(h); return; @@ -242,7 +240,7 @@ void sane_kds_s2000w_net_cancel(SANE_Handle handle) } kds_s2000w_debug_printf(DEBUG, "scan canceled"); - h->read_info->cancel = true; + h->scan_status->state = CANCLED; kds_s2000w_handler_stop_scan(h); } diff --git a/tests/kds_s2000w_net_read_tests.c b/tests/kds_s2000w_net_read_tests.c index 7a171f7..47d3977 100644 --- a/tests/kds_s2000w_net_read_tests.c +++ b/tests/kds_s2000w_net_read_tests.c @@ -102,7 +102,6 @@ void sane_kds_s2000w_net_read_empty_image_test() void sane_kds_s2000w_net_read_bytes_per_line_bigger_test() { handler* h = kds_s2000w_handler_init(); - h->read_info->cancel = false; h->read_info->read_size = 0; h->image->size = 95003; h->image->data = malloc(sizeof(char) * 95003); diff --git a/tests/kds_s2000w_net_tests.c b/tests/kds_s2000w_net_tests.c index e51f046..713798e 100644 --- a/tests/kds_s2000w_net_tests.c +++ b/tests/kds_s2000w_net_tests.c @@ -358,7 +358,7 @@ void sane_kds_s2000w_net_start_test(void** state) int result = sane_kds_s2000w_net_start(h); assert_int_equal(result, SANE_STATUS_GOOD); - assert_false(h->scan_status->completed); + assert_int_equal(h->scan_status->state, STARTED); json_object_put(h->scanner_config); h->scanner_config = NULL; @@ -403,7 +403,7 @@ void sane_kds_s2000w_net_start_one_page_per_flatscan_test(void** state) int result = sane_kds_s2000w_net_start(h); assert_int_equal(result, SANE_STATUS_GOOD); - assert_false(h->scan_status->completed); + assert_int_equal(h->scan_status->state, STARTED); json_object_put(h->scanner_config); h->scanner_config = NULL; @@ -450,7 +450,7 @@ void sane_kds_s2000w_net_start_one_page_per_feeder_test(void** state) int result = sane_kds_s2000w_net_start(h); assert_int_equal(result, SANE_STATUS_GOOD); - assert_true(h->scan_status->completed); + assert_int_equal(h->scan_status->state, COMPLETED); json_object_put(h->scanner_config); h->scanner_config = NULL; @@ -526,7 +526,7 @@ void sane_kds_s2000w_net_start_two_pages_per_feeder_test(void** state) int32_t result = sane_kds_s2000w_net_start(h); assert_int_equal(result, SANE_STATUS_GOOD); - assert_true(h->scan_status->completed); + assert_int_equal(h->scan_status->state, COMPLETED); json_object_put(h->scanner_config); h->scanner_config = NULL; @@ -566,7 +566,7 @@ void sane_kds_s2000w_net_cancel_test() sane_kds_s2000w_net_cancel(h); - assert_true(h->read_info->cancel); + assert_int_equal(h->scan_status->state, CANCLED); kds_s2000w_client_response_free(resp); resp = NULL; @@ -579,7 +579,7 @@ void sane_kds_s2000w_net_cancel_test() void sane_kds_s2000w_net_cancel_start_test() { handler* h = kds_s2000w_handler_init(); - h->read_info->cancel = true; + h->scan_status->state = CANCLED; SANE_Status status = sane_kds_s2000w_net_start(h); @@ -608,11 +608,11 @@ void sane_kds_s2000w_net_cancel_canceled_test() expect_function_call(__wrap_kds_s2000w_client_open_session); expect_function_call(__wrap_kds_s2000w_client_set_option); handler* h = kds_s2000w_handler_init(); - h->read_info->cancel = true; + h->scan_status->state = CANCLED; sane_kds_s2000w_net_cancel(h); - assert_false(h->read_info->cancel); + assert_int_equal(h->scan_status->state, STOPPED); kds_s2000w_client_response_free(resp_status); resp_status = NULL; @@ -647,8 +647,7 @@ void sane_kds_s2000w_net_cancel_completed_scan_feeder_test() sane_kds_s2000w_net_cancel(h); - assert_false(h->read_info->cancel); - assert_false(h->scan_status->completed); + assert_int_equal(h->scan_status->state, STOPPED); kds_s2000w_client_response_free(resp_status); resp_status = NULL; @@ -697,8 +696,7 @@ void sane_kds_s2000w_net_cancel_completed_scan_flatbed_test() sane_kds_s2000w_net_cancel(h); - assert_false(h->read_info->cancel); - assert_false(h->scan_status->completed); + assert_int_equal(h->scan_status->state, STOPPED); kds_s2000w_client_response_free(resp_status); resp_status = NULL; -- 2.47.3