From 7f61f12800620566360ce02fc6e7be2b6bf96886 Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Mon, 24 Feb 2025 19:47:40 +0100 Subject: [PATCH] add br x value --- src/kds_s2000w_handler.c | 5 +++ src/kds_s2000w_handler.h | 6 +++ src/kds_s2000w_handler_opts.c | 38 ++++++++++++++----- src/kds_s2000w_option_descriptors.c | 27 ++++++++++++- tests/kds_s2000w_net_get_opt_tests.c | 17 ++++++++- tests/kds_s2000w_net_get_opt_tests.h | 1 + tests/kds_s2000w_net_get_opt_tests_run.c | 3 +- tests/kds_s2000w_option_descriptor_tests.c | 19 +++++++++- tests/kds_s2000w_option_descriptor_tests.h | 1 + .../kds_s2000w_option_descriptor_tests_run.c | 1 + 10 files changed, 105 insertions(+), 13 deletions(-) diff --git a/src/kds_s2000w_handler.c b/src/kds_s2000w_handler.c index d082cc1..8061dc1 100644 --- a/src/kds_s2000w_handler.c +++ b/src/kds_s2000w_handler.c @@ -59,6 +59,7 @@ handler* kds_s2000w_handler_init() kds_s2000w_debug_printf(ALL, "init handler"); handler* h = malloc(sizeof(handler)); + h->br = malloc(sizeof(coordinate)); h->current_scanner_config = NULL; h->current_scan_status = malloc(sizeof(scanstatus)); h->read_info = malloc(sizeof(readinfo)); @@ -66,6 +67,8 @@ handler* kds_s2000w_handler_init() h->sessionid = 0; h->state = NOTCONNECTED; + h->br->x = 0; + h->br->y = 0; h->current_scan_status->current_image_number = 1; h->current_scan_status->available_images = 0; h->current_scan_status->downloaded_images = 0; @@ -94,6 +97,8 @@ void kds_s2000w_handler_free(handler* h) json_object_put(h->current_scanner_config); h->current_scanner_config = NULL; + free(h->br); + h->br = NULL; free(h->current_scan_status); h->current_scan_status = NULL; free(h->read_info); diff --git a/src/kds_s2000w_handler.h b/src/kds_s2000w_handler.h index 67e3312..3502170 100644 --- a/src/kds_s2000w_handler.h +++ b/src/kds_s2000w_handler.h @@ -21,6 +21,11 @@ enum { Automatic }; +typedef struct { + int32_t x; + int32_t y; +} coordinate; + typedef struct { size_t size; void* data; @@ -52,6 +57,7 @@ typedef struct { typedef struct { uint64_t sessionid; uint8_t state; + coordinate* br; json_object* current_scanner_config; scanstatus* current_scan_status; readinfo* read_info; diff --git a/src/kds_s2000w_handler_opts.c b/src/kds_s2000w_handler_opts.c index 379bc8a..6d6dcc5 100644 --- a/src/kds_s2000w_handler_opts.c +++ b/src/kds_s2000w_handler_opts.c @@ -7,7 +7,7 @@ #include "kds_s2000w_debug.h" #define AUTOSTART_ON 1 -#define OPTION_COUNT 47 +#define OPTION_COUNT 48 #define OFFSET_X_MAX_INCH 75 #define OFFSET_Y_MAX_INCH 390 @@ -305,26 +305,38 @@ void _kds_s2000w_handler_opts_set_enable_color_drop_out_aggressiveness(json_obje color_drop_out_aggressiveness->cap &= ~SANE_CAP_SOFT_SELECT; } -void _kds_s2000w_handler_opts_get_pixel_value_from_inch(json_object* config, const char* option_name, void* value) +int32_t _kds_s2000w_handler_opts_inch_to_pixel(json_object* config, int32_t inch) { - int32_t* pixel = (int32_t*) value; + json_object* object_value = json_object_object_get(config, "DPI"); + int32_t dpi = json_object_get_int(object_value); + return kds_s2000w_handler_opts_calc_inch_to_pixel(dpi, inch); +} + +int32_t _kds_s2000w_handler_opts_pixel_to_inch(json_object* config, int32_t pixel) +{ json_object* object_value = json_object_object_get(config, "DPI"); int32_t dpi = json_object_get_int(object_value); - object_value = json_object_object_get(config, option_name); + + return kds_s2000w_handler_opts_calc_pixel_to_inch(dpi, pixel); +} + +void _kds_s2000w_handler_opts_get_pixel_value_from_inch(json_object* config, const char* option_name, void* value) +{ + int32_t* pixel = (int32_t*) value; + + json_object* object_value = json_object_object_get(config, option_name); int32_t inch = json_object_get_int(object_value); - *pixel = kds_s2000w_handler_opts_calc_inch_to_pixel(dpi, inch); + *pixel = _kds_s2000w_handler_opts_inch_to_pixel(config, inch); } void _kds_s2000w_handler_opts_set_inch_value_from_pixel(json_object* config, const char* option_name, void* value) { int32_t* pixel = (int32_t*) value; - json_object* object_value = json_object_object_get(config, "DPI"); - int32_t dpi = json_object_get_int(object_value); - object_value = json_object_object_get(config, option_name); - int32_t inch = kds_s2000w_handler_opts_calc_pixel_to_inch(dpi, *pixel); + json_object* object_value = json_object_object_get(config, option_name); + int32_t inch = _kds_s2000w_handler_opts_pixel_to_inch(config, *pixel); _kds_s2000w_handler_opts_write_int_value_to_json(object_value, &inch); } @@ -512,6 +524,10 @@ void kds_s2000w_handler_opts_get_option(handler* h, uint32_t option, void* value value_object = json_object_object_get(config, "DocumentFeederTimeoutResponse"); _kds_s2000w_handler_opts_write_string_value(value_object, value); break; + case 47: + int* br_x = (int*) value; + *br_x = _kds_s2000w_handler_opts_inch_to_pixel(config, h->br->x); + break; default: break; } @@ -747,6 +763,10 @@ void kds_s2000w_handler_opts_set_option(handler* h, uint32_t option, void* value value_object = json_object_object_get(config, "DocumentFeederTimeoutResponse"); _kds_s2000w_handler_opts_write_string_value_to_json(value_object, value); break; + case 47: + int* br_x = (int*) value; + *br_x = _kds_s2000w_handler_opts_pixel_to_inch(config, h->br->x); + break; default: break; } diff --git a/src/kds_s2000w_option_descriptors.c b/src/kds_s2000w_option_descriptors.c index 57638bb..57d02e0 100644 --- a/src/kds_s2000w_option_descriptors.c +++ b/src/kds_s2000w_option_descriptors.c @@ -3,7 +3,7 @@ #include "kds_s2000w_option_descriptors.h" #include "kds_s2000w_debug.h" -#define MAX_OPTION_COUNT 47 +#define MAX_OPTION_COUNT 48 SANE_Option_Descriptor* descriptor_array = NULL; @@ -1108,6 +1108,30 @@ SANE_Option_Descriptor _kds_s2000w_option_descriptor_feeder_group() return descriptor; } +SANE_Option_Descriptor _kds_s2000w_option_descriptor_br_x() +{ + kds_s2000w_debug_printf(ALL, "kds_s2000w_option_descriptor_br_x"); + + SANE_Range* constraint = malloc(sizeof(SANE_Range)); + constraint->min = 0; + constraint->max = 1500; + constraint->quant = 20; + + SANE_Option_Descriptor descriptor = { + SANE_NAME_SCAN_BR_X, + SANE_TITLE_SCAN_BR_X, + SANE_DESC_SCAN_BR_X, + SANE_TYPE_INT, + SANE_UNIT_PIXEL, + sizeof(SANE_Int), + SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT | SANE_CAP_ADVANCED, + SANE_CONSTRAINT_RANGE, + {.range = constraint} + }; + + return descriptor; +} + void kds_s2000w_option_descriptors_init() { kds_s2000w_debug_printf(ALL, "kds_s2000w_option_descriptor_init_option_descriptors"); @@ -1160,6 +1184,7 @@ void kds_s2000w_option_descriptors_init() descriptor_array[44] = _kds_s2000w_option_descriptor_multifeed_response(); descriptor_array[45] = _kds_s2000w_option_descriptor_document_feeder_timeout(); descriptor_array[46] = _kds_s2000w_option_descriptor_document_feeder_timeout_response(); + descriptor_array[47] = _kds_s2000w_option_descriptor_br_x(); } void kds_s2000w_option_descriptors_free() diff --git a/tests/kds_s2000w_net_get_opt_tests.c b/tests/kds_s2000w_net_get_opt_tests.c index c34fcec..03cca15 100644 --- a/tests/kds_s2000w_net_get_opt_tests.c +++ b/tests/kds_s2000w_net_get_opt_tests.c @@ -7,7 +7,7 @@ #include "../src/kds_s2000w_net.h" #include "../src/kds_s2000w_handler.h" -#define MAX_OPTION_COUNT 47 +#define MAX_OPTION_COUNT 48 void sane_kds_s2000w_net_control_get_option_zero_test(void** state) { @@ -612,6 +612,21 @@ void sane_kds_s2000w_net_control_get_option_fourtysix_test(void** state) assert_string_equal(value, "Stop"); + kds_s2000w_handler_free(h); + h = NULL; +} + +void sane_kds_s2000w_net_control_get_option_fourtyseven_test(void** state) +{ + handler* h = kds_s2000w_handler_init(); + response* resp = (response*) *state; + h->current_scanner_config = json_tokener_parse(resp->data); + int32_t value; + + sane_kds_s2000w_net_control_option(h, 47, SANE_ACTION_GET_VALUE, &value, NULL); + + assert_int_equal(value, 0); + kds_s2000w_handler_free(h); h = NULL; } \ No newline at end of file diff --git a/tests/kds_s2000w_net_get_opt_tests.h b/tests/kds_s2000w_net_get_opt_tests.h index 3659963..d8cd008 100644 --- a/tests/kds_s2000w_net_get_opt_tests.h +++ b/tests/kds_s2000w_net_get_opt_tests.h @@ -46,5 +46,6 @@ void sane_kds_s2000w_net_control_get_option_fourtythree_test(void** state); void sane_kds_s2000w_net_control_get_option_fourtyfour_test(void** state); void sane_kds_s2000w_net_control_get_option_fourtyfive_test(void** state); void sane_kds_s2000w_net_control_get_option_fourtysix_test(void** state); +void sane_kds_s2000w_net_control_get_option_fourtyseven_test(void** state); #endif \ No newline at end of file diff --git a/tests/kds_s2000w_net_get_opt_tests_run.c b/tests/kds_s2000w_net_get_opt_tests_run.c index c5de03a..b077855 100644 --- a/tests/kds_s2000w_net_get_opt_tests_run.c +++ b/tests/kds_s2000w_net_get_opt_tests_run.c @@ -119,7 +119,8 @@ int main() cmocka_unit_test_setup_teardown(sane_kds_s2000w_net_control_get_option_fourtythree_test, setup_default_get_option, teardown_default_get_option), cmocka_unit_test_setup_teardown(sane_kds_s2000w_net_control_get_option_fourtyfour_test, setup_default_get_option, teardown_default_get_option), cmocka_unit_test_setup_teardown(sane_kds_s2000w_net_control_get_option_fourtyfive_test, setup_default_get_option, teardown_default_get_option), - cmocka_unit_test_setup_teardown(sane_kds_s2000w_net_control_get_option_fourtysix_test, setup_default_get_option, teardown_default_get_option) + cmocka_unit_test_setup_teardown(sane_kds_s2000w_net_control_get_option_fourtysix_test, setup_default_get_option, teardown_default_get_option), + cmocka_unit_test_setup_teardown(sane_kds_s2000w_net_control_get_option_fourtyseven_test, setup_default_get_option, teardown_default_get_option) }; 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 fc70f10..6af316b 100644 --- a/tests/kds_s2000w_option_descriptor_tests.c +++ b/tests/kds_s2000w_option_descriptor_tests.c @@ -4,7 +4,7 @@ #include "kds_s2000w_client_mock.h" #include "../src/kds_s2000w_option_descriptors.h" -#define MAX_OPTION_COUNT 47 +#define MAX_OPTION_COUNT 48 int setup(void** state) { @@ -822,6 +822,23 @@ void kds_s2000w_option_get_descriptor_fourtysix_test() assert_null(option->constraint.string_list[3]); } +void kds_s2000w_option_get_descriptor_fourtyseven_test() +{ + SANE_Option_Descriptor* option = kds_s2000w_option_descriptors_get(47); + + assert_string_equal(SANE_NAME_SCAN_BR_X, option->name); + assert_string_equal(SANE_TITLE_SCAN_BR_X, option->title); + assert_string_equal(SANE_DESC_SCAN_BR_X, option->desc); + assert_int_equal(SANE_TYPE_INT, option->type); + assert_int_equal(SANE_UNIT_PIXEL, option->unit); + assert_int_equal(sizeof(SANE_Int), option->size); + assert_int_equal(SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT | SANE_CAP_ADVANCED, option->cap); + assert_int_equal(SANE_CONSTRAINT_RANGE, option->constraint_type); + assert_int_equal(option->constraint.range->min, 0); + assert_int_equal(option->constraint.range->max, 1500); + assert_int_equal(option->constraint.range->quant, 20); +} + void kds_s2000w_option_get_descriptor_get_by_name_test() { SANE_Option_Descriptor* option = kds_s2000w_option_descriptors_get_by_name("config-reset"); diff --git a/tests/kds_s2000w_option_descriptor_tests.h b/tests/kds_s2000w_option_descriptor_tests.h index 938952a..d412f3d 100644 --- a/tests/kds_s2000w_option_descriptor_tests.h +++ b/tests/kds_s2000w_option_descriptor_tests.h @@ -55,6 +55,7 @@ void kds_s2000w_option_get_descriptor_fourtythree_test(); void kds_s2000w_option_get_descriptor_fourtyfour_test(); void kds_s2000w_option_get_descriptor_fourtyfive_test(); void kds_s2000w_option_get_descriptor_fourtysix_test(); +void kds_s2000w_option_get_descriptor_fourtyseven_test(); void kds_s2000w_option_get_descriptor_get_by_name_test(); void kds_s2000w_option_get_descriptor_over_max_options_test(); #endif \ No newline at end of file diff --git a/tests/kds_s2000w_option_descriptor_tests_run.c b/tests/kds_s2000w_option_descriptor_tests_run.c index f3ef88d..126e943 100644 --- a/tests/kds_s2000w_option_descriptor_tests_run.c +++ b/tests/kds_s2000w_option_descriptor_tests_run.c @@ -50,6 +50,7 @@ int main() cmocka_unit_test_setup_teardown(kds_s2000w_option_get_descriptor_fourtyfour_test, setup, teardown), cmocka_unit_test_setup_teardown(kds_s2000w_option_get_descriptor_fourtyfive_test, setup, teardown), cmocka_unit_test_setup_teardown(kds_s2000w_option_get_descriptor_fourtysix_test, setup, teardown), + cmocka_unit_test_setup_teardown(kds_s2000w_option_get_descriptor_fourtyseven_test, setup, teardown), cmocka_unit_test_setup_teardown(kds_s2000w_option_get_descriptor_get_by_name_test, setup, teardown), cmocka_unit_test_setup_teardown(kds_s2000w_option_get_descriptor_over_max_options_test, setup, teardown), }; -- 2.39.5