]> gitweb.hhaalo.de Git - sane-kds-s2000w-net.git/commitdiff
add implement calc available options
authorBastian Dehn <hhaalo@arcor.de>
Tue, 24 Mar 2026 17:42:46 +0000 (18:42 +0100)
committerBastian Dehn <hhaalo@arcor.de>
Tue, 24 Mar 2026 17:42:46 +0000 (18:42 +0100)
src/kds_s2000w_handler.h
src/kds_s2000w_handler_opts.c
tests/kds_s2000w_net_tests.c

index 7a97feeb769458b41625bf450a15e184dedc62cb..aaf8193f6d9539d2ea3038eb559e74edbef23c65 100644 (file)
@@ -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;
index 1704660d159841d83c9b711c78e40ec99a31079d..e2d472f75bede1e5556dfe2abd2fa3a01be2b628 100644 (file)
@@ -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;
index c0ee89dce9150f0e715bff9e6764718627060c18..86cd599c7da424816854ab684db850e03b0b11cc 100644 (file)
@@ -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;