resp = NULL;
}
+uint16_t _kds_s2000w_handler_get_group_available_options(json_object* defaults, const char** group, size_t len)
+{
+ const json_object* key = NULL;
+ uint16_t bitmask = 0;
+
+ for (size_t i = 0; i < len; i++) {
+ key = json_object_object_get(defaults, group[i]);
+ if (key != NULL)
+ bitmask |= 1 << i;
+
+ key = NULL;
+ }
+
+ return bitmask;
+}
+
json_object* _kds_s2000w_handler_opts_reset(const option_descriptor_t* descriptor, handler_t* h)
{
if (strcmp(descriptor->config_name, RESET) != 0)
response_t* resp = kds_s2000w_client_response_init();
kds_s2000w_client_get_capabilities(resp);
+ json_object* capabilities = json_tokener_parse(resp->data);
+ json_object* defaults = json_object_object_get(capabilities, "Defaults");
+
mask_option_groups_t available_options = {
- .stanard_group = 0,
+ .standard_group = 0,
.geometry_group = 0,
.boldness_smoothing_group = 0,
.boldness_color_group = 0,
.feeder_group = 0
};
+ const char* standard_group[] = {
+ SCAN_SOURCE,
+ COLOR_MODE,
+ DPI,
+ SCAN_SIDE
+ };
+ size_t len = sizeof(standard_group) / sizeof(const char*);
+ available_options.standard_group = _kds_s2000w_handler_get_group_available_options(defaults, standard_group, len);
+
+ const char* geometry_group[] = {
+ CROPPING_MODE,
+ CROPPING_IMAGE,
+ IMAGE_OFFSET_X,
+ IMAGE_OFFSET_Y,
+ IMAGE_WIDTH,
+ IMAGE_HEIGHT
+ };
+ len = sizeof(geometry_group) / sizeof(const char*);
+ available_options.geometry_group = _kds_s2000w_handler_get_group_available_options(defaults, geometry_group, len);
+
+ const char* boldness_smoothing_group[] = {
+ FOREGROUND_BOLDNESS_MODE,
+ FOREGROUND_BOLDNESS_AGGRESSIVENESS,
+ BACKGROUND_SMOOTHING_MODE,
+ BACKGROUND_SMOOTHING_AGGRESSIVENESS
+ };
+ len = sizeof(boldness_smoothing_group) / sizeof(const char*);
+ available_options.boldness_smoothing_group = _kds_s2000w_handler_get_group_available_options(defaults, boldness_smoothing_group, len);
+
+ const char* boldness_color_group[] = {
+ COLOR_DROP_OUT,
+ COLOR_DROP_OUT_AGGRESSIVENESS,
+ COLOR_AUTO_BRIGHTNESS_MODE,
+ COLOR_BRIGHTNESS,
+ COLOR_CONTRAST,
+ COLOR_BALANCE_MODE,
+ COLOR_BALANCE_AGGRESSIVENESS,
+ COLOR_BALANCE_RED,
+ COLOR_BALANCE_GREEN,
+ COLOR_BALANCE_BLUE,
+ COLOR_SHARPEN,
+ BINARIZATION_CONTRAST,
+ RESET,
+ };
+ len = sizeof(boldness_color_group) / sizeof(const char*);
+ available_options.boldness_color_group = _kds_s2000w_handler_get_group_available_options(defaults, boldness_color_group, len);
+ available_options.boldness_color_group |= 1 << 12;
+
+ const char* image_processing_group[] = {
+ SKIP_BLANK_PAGES,
+ SKIP_BLANK_PAGES_CONTENT,
+ HOLE_FILL,
+ POST_SCAN_ROTATION,
+ EDGE_FILL,
+ IMAGE_BORDER,
+ JPEG_QUALITY
+ };
+ len = sizeof(image_processing_group) / sizeof(const char*);
+ available_options.image_processing_group = _kds_s2000w_handler_get_group_available_options(defaults, image_processing_group, len);
+
+ const char* feeder_group[] = {
+ AUTOSTART,
+ MAX_DOCUMENT_LENGTH,
+ TRANSPORT_HANDLING,
+ MULTIFEED_SENSITIVITY,
+ MULTIFEED_RESPONSE,
+ DOCUMENT_FEEDER_TIMEOUT,
+ DOCUMENT_FEEDER_TIMEOUT_RESPONSE
+ };
+ len = sizeof(feeder_group) / sizeof(const char*),
+ available_options.feeder_group = _kds_s2000w_handler_get_group_available_options(defaults, feeder_group, len);
+
+ json_object_put(capabilities);
+ capabilities = NULL;
kds_s2000w_client_response_free(resp);
resp = NULL;
return available_options;
mask_option_groups_t option_mask = kds_s2000w_handler_get_available_options();
- assert_int_equal(option_mask.stanard_group, 0);
- assert_int_equal(option_mask.geometry_group, 0);
- assert_int_equal(option_mask.boldness_smoothing_group, 0);
- assert_int_equal(option_mask.boldness_color_group, 0);
- assert_int_equal(option_mask.image_processing_group, 0);
- assert_int_equal(option_mask.feeder_group, 0);
+ assert_int_equal(option_mask.standard_group, 0xf);
+ assert_int_equal(option_mask.geometry_group, 0x3f);
+ assert_int_equal(option_mask.boldness_smoothing_group, 0xf);
+ assert_int_equal(option_mask.boldness_color_group, 0x1fff);
+ assert_int_equal(option_mask.image_processing_group, 0x7f);
+ assert_int_equal(option_mask.feeder_group, 0x7f);
kds_s2000w_client_response_free(resp);
resp = NULL;