From 551c8d51f3c52c44408c75262b00ae11c4673190 Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Tue, 23 Sep 2025 16:05:39 +0200 Subject: [PATCH] add profile for backward compatibility --- src/kds_s2000w_handler_opts.c | 42 +++++++++++---- src/kds_s2000w_net.conf | 5 +- src/kds_s2000w_option_descriptors.c | 79 ++++++++++++++++++++++++++--- src/kds_s2000w_option_descriptors.h | 1 + 4 files changed, 109 insertions(+), 18 deletions(-) diff --git a/src/kds_s2000w_handler_opts.c b/src/kds_s2000w_handler_opts.c index 01990b6..e2d719b 100644 --- a/src/kds_s2000w_handler_opts.c +++ b/src/kds_s2000w_handler_opts.c @@ -180,21 +180,33 @@ void _kds_s2000w_handler_opts_set_enable_color_aggressiveness(json_object* confi color_balance_aggressivness->cap &= ~SANE_CAP_SOFT_SELECT; } -void _kds_s2000w_handler_opts_set_enable_color_brightness_and_contrast(json_object* config) +void _kds_s2000w_handler_opts_set_enable_color_brightness(json_object* config) { json_object* color_auto_brightness_mode = json_object_object_get(config, "ColorAutoBrightnessMode");; const char* color_auto_brightness_mode_value = json_object_get_string(color_auto_brightness_mode); SANE_Option_Descriptor* color_brightness = kds_s2000w_option_descriptors_get_by_name("color-brightness"); - SANE_Option_Descriptor* color_constrast = kds_s2000w_option_descriptors_get_by_name("color-contrast"); if (strcmp(color_auto_brightness_mode_value, "Manual") == 0) { color_brightness->cap |= SANE_CAP_SOFT_SELECT; - color_constrast->cap |= SANE_CAP_SOFT_SELECT; return; } color_brightness->cap &= ~SANE_CAP_SOFT_SELECT; +} + +void _kds_s2000w_handler_opts_set_enable_color_contrast(json_object* config) +{ + json_object* color_auto_brightness_mode = json_object_object_get(config, "ColorAutoBrightnessMode");; + const char* color_auto_brightness_mode_value = json_object_get_string(color_auto_brightness_mode); + + SANE_Option_Descriptor* color_constrast = kds_s2000w_option_descriptors_get_by_name("color-contrast"); + + if (strcmp(color_auto_brightness_mode_value, "Manual") == 0) { + color_constrast->cap |= SANE_CAP_SOFT_SELECT; + return; + } + color_constrast->cap &= ~SANE_CAP_SOFT_SELECT; } @@ -267,7 +279,9 @@ void _kds_s2000w_handler_opts_set_info_option(option_descriptor* descriptor, int *info = RELOAD_OPTIONS | RELOAD_PARAMS; } -void _kds_s2000w_handler_opts_set_depends_opts(const char* config_name, json_object* config) +void _kds_s2000w_handler_opts_set_depends_opts(handler* h, + const char* config_name, + json_object* config) { if (strcmp(config_name, CROPPING_MODE) == 0) { _kds_s2000w_handler_opts_set_enable_cropping_image(config); @@ -286,8 +300,11 @@ void _kds_s2000w_handler_opts_set_depends_opts(const char* config_name, json_obj if (strcmp(config_name, COLOR_DROP_OUT) == 0) _kds_s2000w_handler_opts_set_enable_color_drop_out_aggressiveness(config); - if (strcmp(config_name, COLOR_AUTO_BRIGHTNESS_MODE) == 0) - _kds_s2000w_handler_opts_set_enable_color_brightness_and_contrast(config); + if (strcmp(config_name, COLOR_AUTO_BRIGHTNESS_MODE) == 0 + && h->profile == PROFILE_FULL) { + _kds_s2000w_handler_opts_set_enable_color_brightness(config); + _kds_s2000w_handler_opts_set_enable_color_contrast(config); + } if (strcmp(config_name, COLOR_BALANCE_MODE) == 0) { _kds_s2000w_handler_opts_set_enable_color_balance(config); @@ -295,12 +312,15 @@ void _kds_s2000w_handler_opts_set_depends_opts(const char* config_name, json_obj } if (strcmp(config_name, RESET) == 0) { - _kds_s2000w_handler_opts_set_enable_cropping_image(config); - _kds_s2000w_handler_opts_set_enable_suboptions_cropping_image(config); + if (h->profile == PROFILE_FULL) { + _kds_s2000w_handler_opts_set_enable_cropping_image(config); + _kds_s2000w_handler_opts_set_enable_suboptions_cropping_image(config); + _kds_s2000w_handler_opts_set_enable_color_brightness(config); + _kds_s2000w_handler_opts_set_enable_color_contrast(config); + } _kds_s2000w_handler_opts_set_enable_boldness_aggressiveness(config); _kds_s2000w_handler_opts_set_enable_smoothing_aggressiveness(config); _kds_s2000w_handler_opts_set_enable_color_drop_out_aggressiveness(config); - _kds_s2000w_handler_opts_set_enable_color_brightness_and_contrast(config); _kds_s2000w_handler_opts_set_enable_color_aggressiveness(config); _kds_s2000w_handler_opts_set_enable_color_balance(config); } @@ -387,8 +407,8 @@ void kds_s2000w_handler_opts_set_option(handler* h, uint32_t option, void* value _kds_s2000w_handler_opts_set_autostart_on(config); } - if (h->profile == PROFILE_FULL) - _kds_s2000w_handler_opts_set_depends_opts(descriptor->config_name, config); + if (h->profile > PROFILE_MIN) + _kds_s2000w_handler_opts_set_depends_opts(h, descriptor->config_name, config); _kds_s2000w_handler_opts_set_info_option(descriptor, info); _kds_s2000w_handler_opts_set_options(h); diff --git a/src/kds_s2000w_net.conf b/src/kds_s2000w_net.conf index 77f0d1d..57752ca 100644 --- a/src/kds_s2000w_net.conf +++ b/src/kds_s2000w_net.conf @@ -1,7 +1,10 @@ scanner_url = "https://scanner.example.com" username = "muster" -# profile: 0=FULL 1=MIN +# profiles +# 0=PROFILE_FULL +# 1=PROFILE_230802_V1_0_36 +# 2=PROFILE_MIN profile = 1 # log levels: 0=OFF, 1=FATAL, 2=ERROR, 3=WARN, 4=INFO, 5=DEBUG, 6=ALL diff --git a/src/kds_s2000w_option_descriptors.c b/src/kds_s2000w_option_descriptors.c index 06b1ba7..78a0fa2 100644 --- a/src/kds_s2000w_option_descriptors.c +++ b/src/kds_s2000w_option_descriptors.c @@ -4,8 +4,9 @@ #include "kds_s2000w_option_descriptors.h" #include "kds_s2000w_debug.h" -#define FULL_PROFILE_MAX_OPTION_COUNT 47 -#define MIN_PROFILE_MAX_OPTION_COUNT 9 +#define PROFILE_FULL_MAX_OPTION_COUNT 47 +#define PROFILE_230802_V1_0_36_MAX_OPTION_COUNT 24 +#define PROFILE_MIN_MAX_OPTION_COUNT 10 option_descriptor** descriptors = NULL; uint8_t max_option_count = 0; @@ -1113,7 +1114,7 @@ SANE_Option_Descriptor _kds_s2000w_option_descriptor_feeder_group() void _kds_s2000w_option_descriptors_init_min_profile() { - max_option_count = MIN_PROFILE_MAX_OPTION_COUNT; + max_option_count = PROFILE_MIN_MAX_OPTION_COUNT; descriptors = malloc(sizeof(option_descriptor*) * max_option_count); for (int i = 0; i < max_option_count; i++) { @@ -1136,13 +1137,74 @@ void _kds_s2000w_option_descriptors_init_min_profile() descriptors[6]->descriptor = _kds_s2000w_option_descriptor_color_drop(); descriptors[7]->config_name = RESET; descriptors[7]->descriptor = _kds_s2000w_option_descriptor_config_reset(); - descriptors[8]->config_name = SKIP_BLANK_PAGES; - descriptors[8]->descriptor = _kds_s2000w_option_descriptor_skip_blank_pages(); + descriptors[8]->config_name = IMAGE_PROCESSING_GROUP; + descriptors[8]->descriptor = _kds_s2000w_option_descriptor_image_processing_group(); + descriptors[9]->config_name = SKIP_BLANK_PAGES; + descriptors[9]->descriptor = _kds_s2000w_option_descriptor_skip_blank_pages(); +} + +void _kds_s2000w_option_descriptors_init_230802_v1_0_36_profile() +{ + max_option_count = PROFILE_230802_V1_0_36_MAX_OPTION_COUNT; + + descriptors = malloc(sizeof(option_descriptor*) * max_option_count); + for (int i = 0; i < max_option_count; i++) { + descriptors[i] = malloc(sizeof(option_descriptor)); + } + + descriptors[0]->config_name = OPTION_COUNT; + descriptors[0]->descriptor = _kds_s2000w_option_descriptor_num_options(); + descriptors[1]->config_name = STANDARD_GROUP; + descriptors[1]->descriptor = _kds_s2000w_option_descriptor_standard_group(); + descriptors[2]->config_name = SCAN_SOURCE; + descriptors[2]->descriptor = _kds_s2000w_option_descriptor_scan_source(); + descriptors[3]->config_name = COLOR_MODE; + descriptors[3]->descriptor = _kds_s2000w_option_descriptor_color_mode(); + descriptors[4]->config_name = DPI; + descriptors[4]->descriptor = _kds_s2000w_option_descriptor_dpi(); + descriptors[5]->config_name = SCAN_SIDE; + descriptors[5]->descriptor = _kds_s2000w_option_descriptor_scanside(); + descriptors[6]->config_name = BOLDNESS_SMOOTHING_GROUP; + descriptors[6]->descriptor = _kds_s2000w_option_descriptor_boldness_smoothing_group(); + descriptors[7]->config_name = FOREGROUND_BOLDNESS_MODE; + descriptors[7]->descriptor = _kds_s2000w_option_descriptor_foreground_boldness_mode(); + descriptors[8]->config_name = FOREGROUND_BOLDNESS_AGGRESSIVENESS; + descriptors[8]->descriptor = _kds_s2000w_option_descriptor_foreground_boldness_aggressiveness(); + descriptors[9]->config_name = BACKGROUND_SMOOTHING_MODE; + descriptors[9]->descriptor = _kds_s2000w_option_descriptor_background_smoothing_mode(); + descriptors[10]->config_name = BACKGROUND_SMOOTHING_AGGRESSIVENESS; + descriptors[10]->descriptor = _kds_s2000w_option_descriptor_background_smoothing_aggressiveness(); + descriptors[11]->config_name = BOLDNESS_COLOR_GROUP; + descriptors[11]->descriptor = _kds_s2000w_option_descriptor_boldness_color_group(); + descriptors[12]->config_name = COLOR_DROP_OUT; + descriptors[12]->descriptor = _kds_s2000w_option_descriptor_color_drop(); + descriptors[13]->config_name = COLOR_DROP_OUT_AGGRESSIVENESS; + descriptors[13]->descriptor = _kds_s2000w_option_descriptor_color_drop_out_aggressiveness(); + descriptors[14]->config_name = COLOR_AUTO_BRIGHTNESS_MODE; + descriptors[14]->descriptor = _kds_s2000w_option_descriptor_color_auto_brightness_mode(); + descriptors[15]->config_name = COLOR_BALANCE_MODE; + descriptors[15]->descriptor = _kds_s2000w_option_descriptor_color_balance_mode(); + descriptors[16]->config_name = COLOR_BALANCE_AGGRESSIVENESS; + descriptors[16]->descriptor = _kds_s2000w_option_descriptor_color_balance_agressiveness(); + descriptors[17]->config_name = COLOR_BALANCE_RED; + descriptors[17]->descriptor = _kds_s2000w_option_descriptor_color_balance_red(); + descriptors[18]->config_name = COLOR_BALANCE_GREEN; + descriptors[18]->descriptor = _kds_s2000w_option_descriptor_color_balance_green(); + descriptors[19]->config_name = COLOR_BALANCE_BLUE; + descriptors[19]->descriptor = _kds_s2000w_option_descriptor_color_balance_blue(); + descriptors[20]->config_name = BINARIZATION_CONTRAST; + descriptors[20]->descriptor = _kds_s2000w_option_descriptor_binarization_contrast(); + descriptors[21]->config_name = RESET; + descriptors[21]->descriptor = _kds_s2000w_option_descriptor_config_reset(); + descriptors[22]->config_name = IMAGE_PROCESSING_GROUP; + descriptors[22]->descriptor = _kds_s2000w_option_descriptor_image_processing_group(); + descriptors[23]->config_name = SKIP_BLANK_PAGES; + descriptors[23]->descriptor = _kds_s2000w_option_descriptor_skip_blank_pages(); } void _kds_s2000w_option_descriptors_init_full_profile() { - max_option_count = FULL_PROFILE_MAX_OPTION_COUNT; + max_option_count = PROFILE_FULL_MAX_OPTION_COUNT; descriptors = malloc(sizeof(option_descriptor*) * max_option_count); for (int i = 0; i < max_option_count; i++) { @@ -1254,6 +1316,11 @@ void kds_s2000w_option_descriptors_init(uint8_t profile) return; } + if (profile == PROFILE_230802_V1_0_36) { + _kds_s2000w_option_descriptors_init_230802_v1_0_36_profile(); + return; + } + _kds_s2000w_option_descriptors_init_min_profile(); } diff --git a/src/kds_s2000w_option_descriptors.h b/src/kds_s2000w_option_descriptors.h index 8cccd19..d838808 100644 --- a/src/kds_s2000w_option_descriptors.h +++ b/src/kds_s2000w_option_descriptors.h @@ -59,6 +59,7 @@ enum { PROFILE_MIN, + PROFILE_230802_V1_0_36, PROFILE_FULL }; -- 2.47.3