From: Bastian Dehn Date: Wed, 25 Mar 2026 20:27:50 +0000 (+0100) Subject: init with bitmask X-Git-Tag: v1.1.25^2~3^2~6 X-Git-Url: https://gitweb.hhaalo.de/?a=commitdiff_plain;h=c7cb30e62d640817ec164db04aa8d8c058ded865;p=sane-kds-s2000w-net.git init with bitmask --- diff --git a/src/kds_s2000w_option_descriptors.c b/src/kds_s2000w_option_descriptors.c index a2d9b03..835f8b5 100644 --- a/src/kds_s2000w_option_descriptors.c +++ b/src/kds_s2000w_option_descriptors.c @@ -3,6 +3,8 @@ #include #include "kds_s2000w_option_descriptors.h" +#define BITS16 16 + typedef option_descriptor_t* (*descriptor_fn)(mask_option_t* mask); typedef struct { option_descriptor_t** descriptors; @@ -1442,13 +1444,51 @@ option_descriptor_t* _kds_s2000w_option_descriptor_document_feeder_timeout_respo /******************************************************************************* * profiles ******************************************************************************/ +size_t _kds_s2000w_option_descriptor_option_count_from_mask_group(uint16_t group) +{ + size_t count = 0; + + for (uint8_t i = 0; i < BITS16; i++) { + if (group >> i & 1) + count++; + } + + return count; +} + +size_t _kds_s2000w_option_descriptor_option_count_from_mask(const mask_option_t* mask) +{ + size_t count = 1; + if (mask->standard_group > 0) + count++; + if (mask->geometry_group > 0) + count++; + if (mask->boldness_smoothing_group > 0) + count++; + if (mask->boldness_color_group > 0) + count++; + if (mask->image_processing_group > 0) + count++; + if (mask->feeder_group > 0) + count++; + + count += _kds_s2000w_option_descriptor_option_count_from_mask_group(mask->standard_group); + count += _kds_s2000w_option_descriptor_option_count_from_mask_group(mask->geometry_group); + count += _kds_s2000w_option_descriptor_option_count_from_mask_group(mask->boldness_smoothing_group); + count += _kds_s2000w_option_descriptor_option_count_from_mask_group(mask->boldness_color_group); + count += _kds_s2000w_option_descriptor_option_count_from_mask_group(mask->image_processing_group); + count += _kds_s2000w_option_descriptor_option_count_from_mask_group(mask->feeder_group); + + return count; +} + SANE_Status _kds_s2000w_option_descriptor_init_profile(descriptor_fn* fn, size_t size, mask_option_t* mask) { kds_s2000w_option_descriptors = malloc(sizeof(option_descriptors_t)); if (kds_s2000w_option_descriptors == NULL) return SANE_STATUS_NO_MEM; - kds_s2000w_option_descriptors->size = size; + kds_s2000w_option_descriptors->size = _kds_s2000w_option_descriptor_option_count_from_mask(mask);; kds_s2000w_option_descriptors->descriptors = malloc(sizeof(option_descriptor_t*) * kds_s2000w_option_descriptors->size); if (kds_s2000w_option_descriptors->descriptors == NULL) { free(kds_s2000w_option_descriptors); diff --git a/tests/kds_s2000w_net_get_opt_tests.c b/tests/kds_s2000w_net_get_opt_tests.c index 00cae72..d11fd25 100644 --- a/tests/kds_s2000w_net_get_opt_tests.c +++ b/tests/kds_s2000w_net_get_opt_tests.c @@ -22,7 +22,12 @@ int setup(void** state) if (mask == NULL) return 1; - memset(mask, 1, sizeof(mask_option_t)); + mask->standard_group = 0xf; + mask->geometry_group = 0x3f; + mask->boldness_smoothing_group = 0xf; + mask->boldness_color_group = 0x1fff; + mask->image_processing_group = 0x7f; + mask->feeder_group = 0x7f; kds_s2000w_option_descriptors_init(mask); free(mask); mask = NULL; diff --git a/tests/kds_s2000w_net_set_opt_tests.c b/tests/kds_s2000w_net_set_opt_tests.c index 845f884..7dbab62 100644 --- a/tests/kds_s2000w_net_set_opt_tests.c +++ b/tests/kds_s2000w_net_set_opt_tests.c @@ -17,7 +17,12 @@ int setup(void** state) if (mask == NULL) return 1; - memset(mask, 1, sizeof(mask_option_t)); + mask->standard_group = 0xf; + mask->geometry_group = 0x3f; + mask->boldness_smoothing_group = 0xf; + mask->boldness_color_group = 0x1fff; + mask->image_processing_group = 0x7f; + mask->feeder_group = 0x7f; kds_s2000w_option_descriptors_init(mask); free(mask); mask = NULL; diff --git a/tests/kds_s2000w_option_descriptor_tests.c b/tests/kds_s2000w_option_descriptor_tests.c index ef748d7..e928a6c 100644 --- a/tests/kds_s2000w_option_descriptor_tests.c +++ b/tests/kds_s2000w_option_descriptor_tests.c @@ -17,7 +17,12 @@ void _kds_s2000w_option_init_descriptor_no_mem(int16_t no_mem_count) if (mask == NULL) return; - memset(mask, 1, sizeof(mask_option_t)); + mask->standard_group = 0xf; + mask->geometry_group = 0x3f; + mask->boldness_smoothing_group = 0xf; + mask->boldness_color_group = 0x1fff; + mask->image_processing_group = 0x7f; + mask->feeder_group = 0x7f; SANE_Status status = kds_s2000w_option_descriptors_init(mask); free(mask); mask = NULL; @@ -31,7 +36,12 @@ int setup(void** state) if (mask == NULL) return 1; - memset(mask, 1, sizeof(mask_option_t)); + mask->standard_group = 0xf; + mask->geometry_group = 0x3f; + mask->boldness_smoothing_group = 0xf; + mask->boldness_color_group = 0x1fff; + mask->image_processing_group = 0x7f; + mask->feeder_group = 0x7f; SANE_Status status = kds_s2000w_option_descriptors_init(mask); free(mask); mask = NULL;