]> gitweb.hhaalo.de Git - sane-kds-s2000w-net.git/commitdiff
add filter option mask for profile
authorBastian Dehn <hhaalo@arcor.de>
Thu, 26 Mar 2026 17:51:58 +0000 (18:51 +0100)
committerBastian Dehn <hhaalo@arcor.de>
Thu, 26 Mar 2026 17:51:58 +0000 (18:51 +0100)
src/kds_s2000w_handler.h
src/kds_s2000w_handler_opts.c
src/kds_s2000w_handler_opts.h
src/kds_s2000w_net.c
src/kds_s2000w_option_descriptors.h
tests/kds_s2000w_net_tests.c

index 304c3a7b5feab43f8bbf386d2ac094d1f1abeea2..05c348a445d712c6cb6604b635ae2e2338cb5b9b 100644 (file)
@@ -4,6 +4,12 @@
 #include <stdbool.h>
 #include <json-c/json.h>
 
+typedef enum {
+       PROFILE_MIN,
+       PROFILE_230802_V1_0_36,
+       PROFILE_FULL
+} profile_t;
+
 typedef enum {
        NOTCONNECTED,
        OPENED,
@@ -47,7 +53,7 @@ typedef struct {
 } scan_status_t;
 
 typedef struct {
-       __attribute_deprecated__ uint8_t profile;
+       uint8_t profile;
        uint64_t sessionid;
        json_object* scanner_config;
        scan_status_t* scan_status;
@@ -73,6 +79,8 @@ void kds_s2000w_handler_close(handler_t* h);
 void kds_s2000w_handler_recreate_session(handler_t* h);
 
 mask_option_groups_t* kds_s2000w_handler_get_available_options();
+void kds_s2000w_handler_filter_available_options(profile_t profile, mask_option_groups_t* mask);
+
 int32_t kds_s2000w_handler_opts_get_option(handler_t* handle, uint32_t option, void* value, int32_t* info);
 int32_t kds_s2000w_handler_opts_set_option(handler_t* handle, uint32_t option, void* value, int32_t* info);
 
index c7095c34f5fe721cbef10071f652e3b3599cd2fe..152c9eb05c18419dc81f96aa641e2eecb15586e2 100644 (file)
@@ -651,6 +651,53 @@ mask_option_groups_t* kds_s2000w_handler_get_available_options()
        return available_options;
 }
 
+void kds_s2000w_handler_filter_available_options(profile_t profile, mask_option_groups_t* mask)
+{
+       const mask_option_groups_t min_profile = {
+               .standard_group = 0xe,
+               .geometry_group = 0x0,
+               .boldness_smoothing_group = 0x0,
+               .boldness_color_group = 0x1001,
+               .image_processing_group = 0x1,
+               .feeder_group = 0x1
+       };
+       const mask_option_groups_t v1_0_36_230802 = {
+               .standard_group = 0xf,
+               .geometry_group = 0x0,
+               .boldness_smoothing_group = 0xf,
+               .boldness_color_group = 0x19e7,
+               .image_processing_group = 0x1,
+               .feeder_group = 0x1
+       };
+       const mask_option_groups_t full_profle = {
+               .standard_group = 0xffff,
+               .geometry_group = 0xffff,
+               .boldness_smoothing_group = 0xffff,
+               .boldness_color_group = 0xffff,
+               .image_processing_group = 0xffff,
+               .feeder_group = 0xffff
+       };
+
+       mask_option_groups_t profile_mask = min_profile;
+       switch (profile) {
+       case PROFILE_FULL:
+               profile_mask = full_profle;
+               break;
+       case PROFILE_230802_V1_0_36:
+               profile_mask = v1_0_36_230802;
+               break;
+       default:
+               break;
+       }
+
+       mask->standard_group &= profile_mask.standard_group;
+       mask->geometry_group &= profile_mask.geometry_group;
+       mask->boldness_smoothing_group &= profile_mask.boldness_smoothing_group;
+       mask->boldness_color_group &= profile_mask.boldness_color_group;
+       mask->image_processing_group &= profile_mask.image_processing_group;
+       mask->feeder_group &= profile_mask.feeder_group;
+}
+
 int32_t kds_s2000w_handler_opts_get_option(handler_t* h, uint32_t option, void* value, int32_t* info)
 {
        _kds_s2000w_handler_opts_load_config(h);
index e50fd4467ee1a9fd2c1ae6bb764d74e8d55e2efd..5f0ac75ff045f3107a65fbc08b532f644981ac41 100644 (file)
@@ -4,6 +4,8 @@
 #include "kds_s2000w_handler.h"
 
 mask_option_groups_t* kds_s2000w_handler_get_available_options();
+void kds_s2000w_handler_filter_available_options(profile_t profile, mask_option_groups_t* mask);
+
 int32_t kds_s2000w_handler_opts_get_option(handler_t* h, uint32_t option, void* value, int32_t* info);
 int32_t kds_s2000w_handler_opts_set_option(handler_t* h, uint32_t option, void* value, int32_t* info);
 
index 44ab0de393909c03ad23c5a026d6176f6499412c..7d42e4787ca8ea8fcc3b459fa4e229ec50c43dc4 100644 (file)
@@ -99,6 +99,7 @@ SANE_Status sane_kds_s2000w_net_open(SANE_String_Const devicename,
        }
 
        mask_option_groups_t* option_mask = kds_s2000w_handler_get_available_options();
+       kds_s2000w_handler_filter_available_options(h->profile, option_mask);
        SANE_Status status = kds_s2000w_option_descriptors_init((mask_option_t*) option_mask);
 
        free(option_mask);
index 8eb75c143a59a0e2536fb0f5cd6db5c18ca198a7..e97d85ae746609790cc4755872213bb96b2ffc59 100644 (file)
  * methods
  ******************************************************************************/
 
-__attribute_deprecated__ typedef enum {
-       PROFILE_MIN,
-       PROFILE_230802_V1_0_36,
-       PROFILE_FULL
-} profile_t;
-
 typedef struct {
        const char* config_name;
        SANE_Option_Descriptor* descriptor;
index 3b2d2d4d822d4cff63974c9a11f51ca79ebd294f..cd9aae5f19b3b0f037231f6f8c92bb842e6672ff 100644 (file)
@@ -961,6 +961,46 @@ void kds_s2000w_handler_available_options_test(void** state)
        option_mask = NULL;
 }
 
+void kds_s2000w_handler_filter_availables_options_min_profile_test()
+{
+       mask_option_groups_t* mask = malloc(sizeof(mask_option_groups_t));
+       if (mask == NULL)
+               return;
+       memset(mask, 0xff, sizeof(mask_option_groups_t));
+
+       kds_s2000w_handler_filter_available_options(PROFILE_MIN, mask);
+
+       assert_int_equal(mask->standard_group, 0xe);
+       assert_int_equal(mask->geometry_group, 0x0);
+       assert_int_equal(mask->boldness_smoothing_group, 0x0);
+       assert_int_equal(mask->boldness_color_group, 0x1001);
+       assert_int_equal(mask->image_processing_group, 0x1);
+       assert_int_equal(mask->feeder_group, 0x1);
+
+       free(mask);
+       mask = NULL;
+}
+
+void kds_s2000w_handler_filter_availables_options_profile_v1_0_36_test()
+{
+       mask_option_groups_t* mask = malloc(sizeof(mask_option_groups_t));
+       if (mask == NULL)
+               return;
+       memset(mask, 0xff, sizeof(mask_option_groups_t));
+
+       kds_s2000w_handler_filter_available_options(PROFILE_230802_V1_0_36, mask);
+
+       assert_int_equal(mask->standard_group, 0xf);
+       assert_int_equal(mask->geometry_group, 0x0);
+       assert_int_equal(mask->boldness_smoothing_group, 0xf);
+       assert_int_equal(mask->boldness_color_group, 0x19e7);
+       assert_int_equal(mask->image_processing_group, 0x1);
+       assert_int_equal(mask->feeder_group, 0x1);
+
+       free(mask);
+       mask = NULL;
+}
+
 int main()
 {
        const struct CMUnitTest net_tests[] = {
@@ -991,7 +1031,9 @@ int main()
                cmocka_unit_test(kds_s2000w_net_get_select_fd_test),
                cmocka_unit_test(kds_s2000w_handler_depth_one_calc_bytes_per_line_tests),
                cmocka_unit_test(kds_s2000w_handler_depth_eight_calc_bytes_per_line_tests),
-               cmocka_unit_test(kds_s2000w_handler_available_options_test)
+               cmocka_unit_test(kds_s2000w_handler_available_options_test),
+               cmocka_unit_test(kds_s2000w_handler_filter_availables_options_min_profile_test),
+               cmocka_unit_test(kds_s2000w_handler_filter_availables_options_profile_v1_0_36_test)
        };
 
        return cmocka_run_group_tests(net_tests, setup, teardown);