]> gitweb.hhaalo.de Git - sane-kds-s2000w-net.git/commitdiff
init with bitmask
authorBastian Dehn <hhaalo@arcor.de>
Wed, 25 Mar 2026 20:27:50 +0000 (21:27 +0100)
committerBastian Dehn <hhaalo@arcor.de>
Wed, 25 Mar 2026 20:27:50 +0000 (21:27 +0100)
src/kds_s2000w_option_descriptors.c
tests/kds_s2000w_net_get_opt_tests.c
tests/kds_s2000w_net_set_opt_tests.c
tests/kds_s2000w_option_descriptor_tests.c

index a2d9b033d79dcb897d1da977e7589f03b62167c3..835f8b52b69cbfaff91f93be0fa77d679edefb92 100644 (file)
@@ -3,6 +3,8 @@
 #include <sane/saneopts.h>
 #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);
index 00cae72aa8f87a22ca8583a4fd87c6c5de3636d4..d11fd25148f75bd3c7fcab9e84ed7d5898578189 100644 (file)
@@ -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;
index 845f884c83f9a4effb30e2c2fc01de4a05672c8d..7dbab62119e48404d9ad1b33e879ffacc230b030 100644 (file)
@@ -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;
index ef748d762bb6cf93b362fe0962fc47fbbe9262d2..e928a6ca32d5eb699b0f0e31732318c0dc2e20e0 100644 (file)
@@ -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;