#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;
/*******************************************************************************
* 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);
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;
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;
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;
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;