From: Bastian Dehn Date: Tue, 24 Mar 2026 17:42:46 +0000 (+0100) Subject: add implement calc available options X-Git-Tag: v1.1.25^2~3^2~14 X-Git-Url: https://gitweb.hhaalo.de/?a=commitdiff_plain;h=555c60193decbb751002d0ede312f1b2b5903aa9;p=sane-kds-s2000w-net.git add implement calc available options --- diff --git a/src/kds_s2000w_handler.h b/src/kds_s2000w_handler.h index 7a97fee..aaf8193 100644 --- a/src/kds_s2000w_handler.h +++ b/src/kds_s2000w_handler.h @@ -56,7 +56,7 @@ typedef struct { } handler_t; typedef struct { - uint16_t stanard_group; + uint16_t standard_group; uint16_t geometry_group; uint16_t boldness_smoothing_group; uint16_t boldness_color_group; diff --git a/src/kds_s2000w_handler_opts.c b/src/kds_s2000w_handler_opts.c index 1704660..e2d472f 100644 --- a/src/kds_s2000w_handler_opts.c +++ b/src/kds_s2000w_handler_opts.c @@ -97,6 +97,22 @@ void _kds_s2000w_handler_opts_set_option_to_default(handler_t* h) resp = NULL; } +uint16_t _kds_s2000w_handler_get_group_available_options(json_object* defaults, const char** group, size_t len) +{ + const json_object* key = NULL; + uint16_t bitmask = 0; + + for (size_t i = 0; i < len; i++) { + key = json_object_object_get(defaults, group[i]); + if (key != NULL) + bitmask |= 1 << i; + + key = NULL; + } + + return bitmask; +} + json_object* _kds_s2000w_handler_opts_reset(const option_descriptor_t* descriptor, handler_t* h) { if (strcmp(descriptor->config_name, RESET) != 0) @@ -547,8 +563,11 @@ mask_option_groups_t kds_s2000w_handler_get_available_options() response_t* resp = kds_s2000w_client_response_init(); kds_s2000w_client_get_capabilities(resp); + json_object* capabilities = json_tokener_parse(resp->data); + json_object* defaults = json_object_object_get(capabilities, "Defaults"); + mask_option_groups_t available_options = { - .stanard_group = 0, + .standard_group = 0, .geometry_group = 0, .boldness_smoothing_group = 0, .boldness_color_group = 0, @@ -556,6 +575,80 @@ mask_option_groups_t kds_s2000w_handler_get_available_options() .feeder_group = 0 }; + const char* standard_group[] = { + SCAN_SOURCE, + COLOR_MODE, + DPI, + SCAN_SIDE + }; + size_t len = sizeof(standard_group) / sizeof(const char*); + available_options.standard_group = _kds_s2000w_handler_get_group_available_options(defaults, standard_group, len); + + const char* geometry_group[] = { + CROPPING_MODE, + CROPPING_IMAGE, + IMAGE_OFFSET_X, + IMAGE_OFFSET_Y, + IMAGE_WIDTH, + IMAGE_HEIGHT + }; + len = sizeof(geometry_group) / sizeof(const char*); + available_options.geometry_group = _kds_s2000w_handler_get_group_available_options(defaults, geometry_group, len); + + const char* boldness_smoothing_group[] = { + FOREGROUND_BOLDNESS_MODE, + FOREGROUND_BOLDNESS_AGGRESSIVENESS, + BACKGROUND_SMOOTHING_MODE, + BACKGROUND_SMOOTHING_AGGRESSIVENESS + }; + len = sizeof(boldness_smoothing_group) / sizeof(const char*); + available_options.boldness_smoothing_group = _kds_s2000w_handler_get_group_available_options(defaults, boldness_smoothing_group, len); + + const char* boldness_color_group[] = { + COLOR_DROP_OUT, + COLOR_DROP_OUT_AGGRESSIVENESS, + COLOR_AUTO_BRIGHTNESS_MODE, + COLOR_BRIGHTNESS, + COLOR_CONTRAST, + COLOR_BALANCE_MODE, + COLOR_BALANCE_AGGRESSIVENESS, + COLOR_BALANCE_RED, + COLOR_BALANCE_GREEN, + COLOR_BALANCE_BLUE, + COLOR_SHARPEN, + BINARIZATION_CONTRAST, + RESET, + }; + len = sizeof(boldness_color_group) / sizeof(const char*); + available_options.boldness_color_group = _kds_s2000w_handler_get_group_available_options(defaults, boldness_color_group, len); + available_options.boldness_color_group |= 1 << 12; + + const char* image_processing_group[] = { + SKIP_BLANK_PAGES, + SKIP_BLANK_PAGES_CONTENT, + HOLE_FILL, + POST_SCAN_ROTATION, + EDGE_FILL, + IMAGE_BORDER, + JPEG_QUALITY + }; + len = sizeof(image_processing_group) / sizeof(const char*); + available_options.image_processing_group = _kds_s2000w_handler_get_group_available_options(defaults, image_processing_group, len); + + const char* feeder_group[] = { + AUTOSTART, + MAX_DOCUMENT_LENGTH, + TRANSPORT_HANDLING, + MULTIFEED_SENSITIVITY, + MULTIFEED_RESPONSE, + DOCUMENT_FEEDER_TIMEOUT, + DOCUMENT_FEEDER_TIMEOUT_RESPONSE + }; + len = sizeof(feeder_group) / sizeof(const char*), + available_options.feeder_group = _kds_s2000w_handler_get_group_available_options(defaults, feeder_group, len); + + json_object_put(capabilities); + capabilities = NULL; kds_s2000w_client_response_free(resp); resp = NULL; return available_options; diff --git a/tests/kds_s2000w_net_tests.c b/tests/kds_s2000w_net_tests.c index c0ee89d..86cd599 100644 --- a/tests/kds_s2000w_net_tests.c +++ b/tests/kds_s2000w_net_tests.c @@ -944,12 +944,12 @@ void kds_s2000w_handler_available_options_test() mask_option_groups_t option_mask = kds_s2000w_handler_get_available_options(); - assert_int_equal(option_mask.stanard_group, 0); - assert_int_equal(option_mask.geometry_group, 0); - assert_int_equal(option_mask.boldness_smoothing_group, 0); - assert_int_equal(option_mask.boldness_color_group, 0); - assert_int_equal(option_mask.image_processing_group, 0); - assert_int_equal(option_mask.feeder_group, 0); + assert_int_equal(option_mask.standard_group, 0xf); + assert_int_equal(option_mask.geometry_group, 0x3f); + assert_int_equal(option_mask.boldness_smoothing_group, 0xf); + assert_int_equal(option_mask.boldness_color_group, 0x1fff); + assert_int_equal(option_mask.image_processing_group, 0x7f); + assert_int_equal(option_mask.feeder_group, 0x7f); kds_s2000w_client_response_free(resp); resp = NULL;