From: Bastian Dehn Date: Tue, 13 Feb 2024 19:15:11 +0000 (+0100) Subject: refactor option descriptor isolate X-Git-Tag: v1.0.0^2~290 X-Git-Url: https://gitweb.hhaalo.de/?a=commitdiff_plain;h=9446e0d8fb30243994610f8ed5a85f59ce13dffc;p=sane-kds-s2000w-net.git refactor option descriptor isolate --- diff --git a/src/kds_s2000w_net.c b/src/kds_s2000w_net.c index 22c4b47..68f68ec 100644 --- a/src/kds_s2000w_net.c +++ b/src/kds_s2000w_net.c @@ -16,7 +16,6 @@ typedef struct { } readinfo; readinfo read_info; -SANE_Option_Descriptor* option_descriptors = NULL; SANE_Device* device_info = NULL; readinfo* get_read_info() @@ -47,7 +46,7 @@ int _sane_kds_s2000w_net_find_first_data_byte(const char* data) SANE_Status _sane_kds_s2000w_net_init(SANE_Int* version_code, SANE_Auth_Callback authorize) { *version_code = SANE_VERSION_CODE(1, 0, 0); - option_descriptors = kds_s2000w_option_descriptor_init_option_descriptors(); + kds_s2000w_option_descriptor_init_option_descriptors(); device_info = malloc(sizeof(SANE_Device)); return SANE_STATUS_GOOD; } @@ -58,7 +57,7 @@ void _sane_kds_s2000w_net_exit(void) free(device_info); device_info = NULL; - kds_s2000w_option_descriptor_free_option_descriptors(option_descriptors); + kds_s2000w_option_descriptor_free_option_descriptors(); } SANE_Status _sane_kds_s2000w_net_get_devices(SANE_Device*** device_list, @@ -101,88 +100,7 @@ void _sane_kds_s2000w_net_close(SANE_Handle handle) const SANE_Option_Descriptor* _sane_kds_s2000w_net_get_option_descriptor( SANE_Handle handle, SANE_Int option) { - switch (option) { - case 0: - kds_s2000w_option_descriptor_num_options(&option_descriptors[option]); - break; - case 1: - kds_s2000w_option_descriptor_standard_group(&option_descriptors[option]); - break; - case 2: - kds_s2000w_option_descriptor_dpi(&option_descriptors[option]); - break; - case 3: - kds_s2000w_option_descriptor_scanside(&option_descriptors[option]); - break; - case 4: - kds_s2000w_option_descriptor_color_mode(&option_descriptors[option]); - break; - case 5: - kds_s2000w_option_descriptor_skip_blank_pages(&option_descriptors[option]); - break; - case 6: - kds_s2000w_option_descriptor_auto_start(&option_descriptors[option]); - break; - case 7: - kds_s2000w_option_descriptor_color_drop(&option_descriptors[option]); - break; - case 8: - kds_s2000w_option_descriptor_color_drop_out_aggressiveness(&option_descriptors[option]); - break; - case 9: - kds_s2000w_option_descriptor_output_type(&option_descriptors[option]); - break; - case 10: - kds_s2000w_option_descriptor_color_auto_brightness_mode(&option_descriptors[option]); - break; - case 11: - kds_s2000w_option_descriptor_color_balance_mode(&option_descriptors[option]); - break; - case 12: - kds_s2000w_option_descriptor_color_balancea_ggressiveness(&option_descriptors[option]); - break; - case 13: - kds_s2000w_option_descriptor_color_balance_red(&option_descriptors[option]); - break; - case 14: - kds_s2000w_option_descriptor_color_balance_green(&option_descriptors[option]); - break; - case 15: - kds_s2000w_option_descriptor_color_balance_blue(&option_descriptors[option]); - break; - case 16: - kds_s2000w_option_descriptor_foreground_boldness_mode(&option_descriptors[option]); - break; - case 17: - kds_s2000w_option_descriptor_foreground_boldness_aggressiveness(&option_descriptors[option]); - break; - case 18: - kds_s2000w_option_descriptor_background_smoothing_mode(&option_descriptors[option]); - break; - case 19: - kds_s2000w_option_descriptor_background_smoothing_aggressiveness(&option_descriptors[option]); - break; - case 20: - kds_s2000w_option_descriptor_binarization_mode(&option_descriptors[option]); - break; - case 21: - kds_s2000w_option_descriptor_binarization_contrast(&option_descriptors[option]); - break; - case 22: - kds_s2000w_option_descriptor_max_document_length(&option_descriptors[option]); - break; - case 23: - kds_s2000w_option_descriptor_scan_source(&option_descriptors[option]); - break; - case 24: - kds_s2000w_option_descriptor_config_reset(&option_descriptors[option]); - break; - default: - return NULL; - break; - } - - return &option_descriptors[option]; + return kds_s2000w_option_get_descriptor(option); } SANE_Status _sane_kds_s2000w_net_control_option(SANE_Handle handle, diff --git a/src/kds_s2000w_option_descriptors.c b/src/kds_s2000w_option_descriptors.c index 88884c0..0a633a3 100644 --- a/src/kds_s2000w_option_descriptors.c +++ b/src/kds_s2000w_option_descriptors.c @@ -2,103 +2,12 @@ #include #include "kds_s2000w_option_descriptors.h" -SANE_Word* constraint_dpi = NULL; -SANE_String_Const* constraint_scanside = NULL; -SANE_String_Const* constraint_colormode = NULL; -SANE_String_Const* constraint_colordrop = NULL; -SANE_Range* constraint_color_drop_out_aggressiveness_range = NULL; -SANE_String_Const* constraint_output_type = NULL; -SANE_String_Const* constraint_color_auto_brightnessmode = NULL; -SANE_String_Const* constraint_color_balance_mode = NULL; -SANE_Range* constraint_color_balance_aggressiveness = NULL; -SANE_Range* constraint_color_balance_red = NULL; -SANE_Range* constraint_color_balance_green = NULL; -SANE_Range* constraint_color_balance_blue = NULL; -SANE_String_Const* constraint_foreground_boldness_mode = NULL; -SANE_Range* constraint_foreground_boldness_aggressiveness = NULL; -SANE_String_Const* constraint_background_smoothing_mode = NULL; -SANE_Range* constraint_background_smoothing_aggressivness = NULL; -SANE_String_Const* constraint_binarization_mode = NULL; -SANE_Range* constraint_binarization_contrast = NULL; -SANE_String_Const* constraint_max_document_length = NULL; -SANE_String_Const* constraint_scan_source = NULL; - -SANE_Option_Descriptor* kds_s2000w_option_descriptor_init_option_descriptors() -{ - constraint_dpi = malloc(sizeof(SANE_Int) * 3); - constraint_scanside = malloc(sizeof(char*) * 3); - constraint_colormode = malloc(sizeof(char*) * 5); - constraint_colordrop = malloc(sizeof(char*) * 9); - constraint_color_drop_out_aggressiveness_range = malloc(sizeof(SANE_Range)); - constraint_output_type = malloc(sizeof(char*) * 3); - constraint_color_auto_brightnessmode = malloc(sizeof(char*) * 3); - constraint_color_balance_mode = malloc(sizeof(char*) * 5); - constraint_color_balance_aggressiveness = malloc(sizeof(SANE_Range)); - constraint_color_balance_red = malloc(sizeof(SANE_Range)); - constraint_color_balance_green = malloc(sizeof(SANE_Range)); - constraint_color_balance_blue = malloc(sizeof(SANE_Range)); - constraint_foreground_boldness_mode = malloc(sizeof(char*) * 4); - constraint_foreground_boldness_aggressiveness = malloc(sizeof(SANE_Range)); - constraint_background_smoothing_mode = malloc(sizeof(char*) * 4); - constraint_background_smoothing_aggressivness = malloc(sizeof(SANE_Range)); - constraint_binarization_mode = malloc(sizeof(char*) * 2); - constraint_binarization_contrast = malloc(sizeof(SANE_Range)); - constraint_max_document_length = malloc(sizeof(char*) * 2); - constraint_scan_source = malloc(sizeof(char*) * 4); +SANE_Option_Descriptor** descriptor_array = NULL; - SANE_Option_Descriptor* descriptor_array = malloc(sizeof(SANE_Option_Descriptor) * MAX_OPTION_COUNT); - return descriptor_array; -} - -void kds_s2000w_option_descriptor_free_option_descriptors(SANE_Option_Descriptor* descriptor_array) +SANE_Option_Descriptor* _kds_s2000w_option_descriptor_num_options() { - free(constraint_dpi); - constraint_dpi = NULL; - free(constraint_scanside); - constraint_scanside = NULL; - free(constraint_colormode); - constraint_colormode = NULL; - free(constraint_colordrop); - constraint_colordrop = NULL; - free(constraint_color_drop_out_aggressiveness_range); - constraint_color_drop_out_aggressiveness_range = NULL; - free(constraint_output_type); - constraint_output_type = NULL; - free(constraint_color_auto_brightnessmode); - constraint_color_auto_brightnessmode = NULL; - free(constraint_color_balance_mode); - constraint_color_balance_mode = NULL; - free(constraint_color_balance_aggressiveness); - constraint_color_balance_aggressiveness = NULL; - free(constraint_color_balance_red); - constraint_color_balance_red = NULL; - free(constraint_color_balance_green); - constraint_color_balance_green = NULL; - free(constraint_color_balance_blue); - constraint_color_balance_blue = NULL; - free(constraint_foreground_boldness_mode); - constraint_foreground_boldness_mode = NULL; - free(constraint_foreground_boldness_aggressiveness); - constraint_foreground_boldness_aggressiveness = NULL; - free(constraint_background_smoothing_mode); - constraint_background_smoothing_mode = NULL; - free(constraint_background_smoothing_aggressivness); - constraint_background_smoothing_aggressivness = NULL; - free(constraint_binarization_mode); - constraint_binarization_mode = NULL; - free(constraint_binarization_contrast); - constraint_binarization_contrast = NULL; - free(constraint_max_document_length); - constraint_max_document_length = NULL; - free(constraint_scan_source); - constraint_scan_source = NULL; + SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); - free(descriptor_array); - descriptor_array = NULL; -} - -void kds_s2000w_option_descriptor_num_options(SANE_Option_Descriptor* descriptor) -{ descriptor->name = SANE_NAME_NUM_OPTIONS; descriptor->title = SANE_TITLE_NUM_OPTIONS; descriptor->desc = SANE_DESC_NUM_OPTIONS; @@ -107,10 +16,14 @@ void kds_s2000w_option_descriptor_num_options(SANE_Option_Descriptor* descriptor descriptor->constraint_type = SANE_CONSTRAINT_NONE; descriptor->type = SANE_TYPE_INT; descriptor->size = sizeof(SANE_Int); + + return descriptor; } -void kds_s2000w_option_descriptor_standard_group(SANE_Option_Descriptor* descriptor) +SANE_Option_Descriptor* _kds_s2000w_option_descriptor_standard_group() { + SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); + descriptor->name = SANE_NAME_STANDARD; descriptor->title = SANE_TITLE_STANDARD; descriptor->desc = SANE_DESC_STANDARD; @@ -119,31 +32,43 @@ void kds_s2000w_option_descriptor_standard_group(SANE_Option_Descriptor* descrip descriptor->constraint_type = SANE_CONSTRAINT_NONE; descriptor->type = SANE_TYPE_GROUP; descriptor->size = 0; + + return descriptor; } -void kds_s2000w_option_descriptor_dpi(SANE_Option_Descriptor* descriptor) +SANE_Option_Descriptor* _kds_s2000w_option_descriptor_dpi() { + SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); + descriptor->name = SANE_NAME_SCAN_RESOLUTION; descriptor->title = SANE_TITLE_SCAN_RESOLUTION; descriptor->desc = SANE_DESC_SCAN_RESOLUTION; descriptor->unit = SANE_UNIT_DPI; descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; descriptor->constraint_type = SANE_CONSTRAINT_WORD_LIST; + SANE_Word* constraint_dpi = NULL; + constraint_dpi = malloc(sizeof(SANE_Int) * 3); constraint_dpi[0] = 2; constraint_dpi[1] = 200; constraint_dpi[2] = 300; descriptor->constraint.word_list = constraint_dpi; descriptor->type = SANE_TYPE_INT; descriptor->size = sizeof(SANE_Int); + + return descriptor; } -void kds_s2000w_option_descriptor_scanside(SANE_Option_Descriptor* descriptor) +SANE_Option_Descriptor* _kds_s2000w_option_descriptor_scanside() { + SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); + descriptor->name = "scanside"; descriptor->title = "Duplex Mode"; descriptor->desc = "Duplex Mode"; descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; descriptor->constraint_type = SANE_CONSTRAINT_STRING_LIST; + SANE_String_Const* constraint_scanside = NULL; + constraint_scanside = malloc(sizeof(char*) * 3); constraint_scanside[0] = "Simplex"; constraint_scanside[1] = "Duplex"; constraint_scanside[2] = NULL; @@ -151,15 +76,21 @@ void kds_s2000w_option_descriptor_scanside(SANE_Option_Descriptor* descriptor) descriptor->type = SANE_TYPE_STRING; descriptor->unit = SANE_UNIT_NONE; descriptor->size = sizeof(SANE_String) * 50; + + return descriptor; } -void kds_s2000w_option_descriptor_color_mode(SANE_Option_Descriptor* descriptor) +SANE_Option_Descriptor* _kds_s2000w_option_descriptor_color_mode() { + SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); + descriptor->name = SANE_NAME_SCAN_MODE; descriptor->title = SANE_TITLE_SCAN_MODE; descriptor->desc = SANE_DESC_SCAN_MODE; descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; descriptor->constraint_type = SANE_CONSTRAINT_STRING_LIST; + SANE_String_Const* constraint_colormode = NULL; + constraint_colormode = malloc(sizeof(char*) * 5); constraint_colormode[0] = "Color"; constraint_colormode[1] = "Gray"; constraint_colormode[2] = "BW"; @@ -169,10 +100,14 @@ void kds_s2000w_option_descriptor_color_mode(SANE_Option_Descriptor* descriptor) descriptor->type = SANE_TYPE_STRING; descriptor->unit = SANE_UNIT_NONE; descriptor->size = sizeof(SANE_String) * 50; + + return descriptor; } -void kds_s2000w_option_descriptor_skip_blank_pages(SANE_Option_Descriptor* descriptor) +SANE_Option_Descriptor* _kds_s2000w_option_descriptor_skip_blank_pages() { + SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); + descriptor->name = "skip-blank-pages"; descriptor->title = "Blank Image Deletion Mode"; descriptor->desc = "Blank Image Deletion Mode"; @@ -180,10 +115,14 @@ void kds_s2000w_option_descriptor_skip_blank_pages(SANE_Option_Descriptor* descr descriptor->constraint_type = SANE_CONSTRAINT_NONE; descriptor->type = SANE_TYPE_BOOL; descriptor->size = sizeof(SANE_Bool); + + return descriptor; } -void kds_s2000w_option_descriptor_auto_start(SANE_Option_Descriptor* descriptor) +SANE_Option_Descriptor* _kds_s2000w_option_descriptor_auto_start() { + SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); + descriptor->name = "autostart"; descriptor->title = "autostart"; descriptor->desc = "autostart"; @@ -191,15 +130,21 @@ void kds_s2000w_option_descriptor_auto_start(SANE_Option_Descriptor* descriptor) descriptor->constraint_type = SANE_CONSTRAINT_NONE; descriptor->type = SANE_TYPE_BOOL; descriptor->size = sizeof(SANE_Bool); + + return descriptor; } -void kds_s2000w_option_descriptor_color_drop(SANE_Option_Descriptor* descriptor) +SANE_Option_Descriptor* _kds_s2000w_option_descriptor_color_drop() { + SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); + descriptor->name = "colordrop"; descriptor->title = "colordrop"; descriptor->desc = "colordrop"; descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; descriptor->constraint_type = SANE_CONSTRAINT_STRING_LIST; + SANE_String_Const* constraint_colordrop = NULL; + constraint_colordrop = malloc(sizeof(char*) * 9); constraint_colordrop[0] = "None"; constraint_colordrop[1] = "Red"; constraint_colordrop[2] = "Green"; @@ -213,30 +158,42 @@ void kds_s2000w_option_descriptor_color_drop(SANE_Option_Descriptor* descriptor) descriptor->type = SANE_TYPE_STRING; descriptor->unit = SANE_UNIT_NONE; descriptor->size = sizeof(SANE_String) * 50; + + return descriptor; } -void kds_s2000w_option_descriptor_color_drop_out_aggressiveness(SANE_Option_Descriptor* descriptor) +SANE_Option_Descriptor* _kds_s2000w_option_descriptor_color_drop_out_aggressiveness() { + SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); + descriptor->name = "colordropoutaggressiveness"; descriptor->title = "colordropoutaggressiveness"; descriptor->desc = "colordropoutaggressiveness"; descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; descriptor->constraint_type = SANE_CONSTRAINT_RANGE; + SANE_Range* constraint_color_drop_out_aggressiveness_range = NULL; + constraint_color_drop_out_aggressiveness_range = malloc(sizeof(SANE_Range)); constraint_color_drop_out_aggressiveness_range->min = -10; constraint_color_drop_out_aggressiveness_range->max = 10; constraint_color_drop_out_aggressiveness_range->quant = 1; descriptor->constraint.range = constraint_color_drop_out_aggressiveness_range; descriptor->type = SANE_TYPE_INT; descriptor->size = sizeof(SANE_Int); + + return descriptor; } -void kds_s2000w_option_descriptor_output_type(SANE_Option_Descriptor* descriptor) +SANE_Option_Descriptor* _kds_s2000w_option_descriptor_output_type() { + SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); + descriptor->name = "outputtype"; descriptor->title = "outputtype"; descriptor->desc = "outputtype"; descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; descriptor->constraint_type = SANE_CONSTRAINT_STRING_LIST; + SANE_String_Const* constraint_output_type = NULL; + constraint_output_type = malloc(sizeof(char*) * 3); constraint_output_type[0] = "Images"; constraint_output_type[1] = "SinglePageColorPDFPlus2TIFs"; constraint_output_type[2] = NULL; @@ -244,15 +201,21 @@ void kds_s2000w_option_descriptor_output_type(SANE_Option_Descriptor* descriptor descriptor->type = SANE_TYPE_STRING; descriptor->unit = SANE_UNIT_NONE; descriptor->size = sizeof(SANE_String) * 50; + + return descriptor; } -void kds_s2000w_option_descriptor_color_auto_brightness_mode(SANE_Option_Descriptor* descriptor) +SANE_Option_Descriptor* _kds_s2000w_option_descriptor_color_auto_brightness_mode() { + SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); + descriptor->name = "colorautobrightnessmode"; descriptor->title = "colorautobrightnessmode"; descriptor->desc = "colorautobrightnessmode"; descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; descriptor->constraint_type = SANE_CONSTRAINT_STRING_LIST; + SANE_String_Const* constraint_color_auto_brightnessmode = NULL; + constraint_color_auto_brightnessmode = malloc(sizeof(char*) * 3); constraint_color_auto_brightnessmode[0] = "None"; constraint_color_auto_brightnessmode[1] = "Automatic"; constraint_color_auto_brightnessmode[2] = NULL; @@ -260,15 +223,21 @@ void kds_s2000w_option_descriptor_color_auto_brightness_mode(SANE_Option_Descrip descriptor->type = SANE_TYPE_STRING; descriptor->unit = SANE_UNIT_NONE; descriptor->size = sizeof(SANE_String) * 50; + + return descriptor; } -void kds_s2000w_option_descriptor_color_balance_mode(SANE_Option_Descriptor* descriptor) +SANE_Option_Descriptor* _kds_s2000w_option_descriptor_color_balance_mode() { + SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); + descriptor->name = "colorbalancemode"; descriptor->title = "colorbalancemode"; descriptor->desc = "colorbalancemode"; descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; descriptor->constraint_type = SANE_CONSTRAINT_STRING_LIST; + SANE_String_Const* constraint_color_balance_mode = NULL; + constraint_color_balance_mode = malloc(sizeof(char*) * 5); constraint_color_balance_mode[0] = "None"; constraint_color_balance_mode[1] = "Manual"; constraint_color_balance_mode[2] = "Automatic"; @@ -278,75 +247,107 @@ void kds_s2000w_option_descriptor_color_balance_mode(SANE_Option_Descriptor* des descriptor->type = SANE_TYPE_STRING; descriptor->unit = SANE_UNIT_NONE; descriptor->size = sizeof(SANE_String) * 50; + + return descriptor; } -void kds_s2000w_option_descriptor_color_balancea_ggressiveness(SANE_Option_Descriptor* descriptor) +SANE_Option_Descriptor* _kds_s2000w_option_descriptor_color_balancea_ggressiveness() { + SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); + descriptor->name = "colorbalanceaggressiveness"; descriptor->title = "colorbalanceaggressiveness"; descriptor->desc = "colorbalanceaggressiveness"; descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; descriptor->constraint_type = SANE_CONSTRAINT_RANGE; + SANE_Range* constraint_color_balance_aggressiveness = NULL; + constraint_color_balance_aggressiveness = malloc(sizeof(SANE_Range)); constraint_color_balance_aggressiveness->min = -2; constraint_color_balance_aggressiveness->max = 2; constraint_color_balance_aggressiveness->quant = 1; descriptor->constraint.range = constraint_color_balance_aggressiveness; descriptor->type = SANE_TYPE_INT; descriptor->size = sizeof(SANE_Int); + + return descriptor; } -void kds_s2000w_option_descriptor_color_balance_red(SANE_Option_Descriptor* descriptor) + + +SANE_Option_Descriptor* _kds_s2000w_option_descriptor_color_balance_red() { + SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); + descriptor->name = "colorbalancered"; descriptor->title = "colorbalancered"; descriptor->desc = "colorbalancered"; descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; descriptor->constraint_type = SANE_CONSTRAINT_RANGE; + SANE_Range* constraint_color_balance_red = NULL; + constraint_color_balance_red = malloc(sizeof(SANE_Range)); constraint_color_balance_red->min = -50; constraint_color_balance_red->max = 50; constraint_color_balance_red->quant = 1; descriptor->constraint.range = constraint_color_balance_red; descriptor->type = SANE_TYPE_INT; descriptor->size = sizeof(SANE_Int); + + return descriptor; } -void kds_s2000w_option_descriptor_color_balance_green(SANE_Option_Descriptor* descriptor) +SANE_Option_Descriptor* _kds_s2000w_option_descriptor_color_balance_green() { + SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); + descriptor->name = "colorbalancegreen"; descriptor->title = "colorbalancegreen"; descriptor->desc = "colorbalancegreen"; descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; descriptor->constraint_type = SANE_CONSTRAINT_RANGE; + SANE_Range* constraint_color_balance_green = NULL; + constraint_color_balance_green = malloc(sizeof(SANE_Range)); constraint_color_balance_green->min = -50; constraint_color_balance_green->max = 50; constraint_color_balance_green->quant = 1; descriptor->constraint.range = constraint_color_balance_green; descriptor->type = SANE_TYPE_INT; descriptor->size = sizeof(SANE_Int); + + return descriptor; } -void kds_s2000w_option_descriptor_color_balance_blue(SANE_Option_Descriptor* descriptor) +SANE_Option_Descriptor* _kds_s2000w_option_descriptor_color_balance_blue() { + SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); + descriptor->name = "color-balance-blue"; descriptor->title = "colorbalanceblue"; descriptor->desc = "colorbalanceblue"; descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; descriptor->constraint_type = SANE_CONSTRAINT_RANGE; + SANE_Range* constraint_color_balance_blue = NULL; + constraint_color_balance_blue = malloc(sizeof(SANE_Range)); constraint_color_balance_blue->min = -50; constraint_color_balance_blue->max = 50; constraint_color_balance_blue->quant = 1; descriptor->constraint.range = constraint_color_balance_blue; descriptor->type = SANE_TYPE_INT; descriptor->size = sizeof(SANE_Int); + + return descriptor; } -void kds_s2000w_option_descriptor_foreground_boldness_mode(SANE_Option_Descriptor* descriptor) +SANE_Option_Descriptor* _kds_s2000w_option_descriptor_foreground_boldness_mode() { + SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); + descriptor->name = "foreground-boldness-mode"; descriptor->title = "Foreground Boldness Mode"; descriptor->desc = "Foreground Boldness Mode"; descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; descriptor->constraint_type = SANE_CONSTRAINT_STRING_LIST; + SANE_String_Const* constraint_foreground_boldness_mode = NULL; + constraint_foreground_boldness_mode = malloc(sizeof(char*) * 4); constraint_foreground_boldness_mode[0] = "None"; constraint_foreground_boldness_mode[1] = "AutomaticAdvanced"; constraint_foreground_boldness_mode[2] = "Automatic"; @@ -355,30 +356,42 @@ void kds_s2000w_option_descriptor_foreground_boldness_mode(SANE_Option_Descripto descriptor->type = SANE_TYPE_STRING; descriptor->unit = SANE_UNIT_NONE; descriptor->size = sizeof(SANE_String) * 50; + + return descriptor; } -void kds_s2000w_option_descriptor_foreground_boldness_aggressiveness(SANE_Option_Descriptor* descriptor) +SANE_Option_Descriptor* _kds_s2000w_option_descriptor_foreground_boldness_aggressiveness() { + SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); + descriptor->name = "foreground-boldness-aggressiveness"; descriptor->title = "Foreground Boldness Mode"; descriptor->desc = "Foreground Boldness Mode"; descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; descriptor->constraint_type = SANE_CONSTRAINT_RANGE; + SANE_Range* constraint_foreground_boldness_aggressiveness = NULL; + constraint_foreground_boldness_aggressiveness = malloc(sizeof(SANE_Range)); constraint_foreground_boldness_aggressiveness->min = -10; constraint_foreground_boldness_aggressiveness->max = 10; constraint_foreground_boldness_aggressiveness->quant = 1; descriptor->constraint.range = constraint_foreground_boldness_aggressiveness; descriptor->type = SANE_TYPE_INT; descriptor->size = sizeof(SANE_Int); + + return descriptor; } -void kds_s2000w_option_descriptor_background_smoothing_mode(SANE_Option_Descriptor* descriptor) +SANE_Option_Descriptor* _kds_s2000w_option_descriptor_background_smoothing_mode() { + SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); + descriptor->name = "background-smoothing-mode"; descriptor->title = "Background Smoothing Mode"; descriptor->desc = "Background Smoothing Mode"; descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; descriptor->constraint_type = SANE_CONSTRAINT_STRING_LIST; + SANE_String_Const* constraint_background_smoothing_mode = NULL; + constraint_background_smoothing_mode = malloc(sizeof(char*) * 4); constraint_background_smoothing_mode[0] = "None"; constraint_background_smoothing_mode[1] = "AutomaticAdvanced"; constraint_background_smoothing_mode[2] = "Automatic"; @@ -387,74 +400,104 @@ void kds_s2000w_option_descriptor_background_smoothing_mode(SANE_Option_Descript descriptor->type = SANE_TYPE_STRING; descriptor->unit = SANE_UNIT_NONE; descriptor->size = sizeof(SANE_String) * 50; + + return descriptor; } -void kds_s2000w_option_descriptor_background_smoothing_aggressiveness(SANE_Option_Descriptor* descriptor) +SANE_Option_Descriptor* _kds_s2000w_option_descriptor_background_smoothing_aggressiveness() { + SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); + descriptor->name = "background-smoothing-aggressiveness"; descriptor->title = "Background Smoothing Aggressivenes"; descriptor->desc = "Background Smoothing Aggressivenes"; descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; descriptor->constraint_type = SANE_CONSTRAINT_RANGE; + SANE_Range* constraint_background_smoothing_aggressivness = NULL; + constraint_background_smoothing_aggressivness = malloc(sizeof(SANE_Range)); constraint_background_smoothing_aggressivness->min = -10; constraint_background_smoothing_aggressivness->max = 10; constraint_background_smoothing_aggressivness->quant = 1; descriptor->constraint.range = constraint_background_smoothing_aggressivness; descriptor->type = SANE_TYPE_INT; descriptor->size = sizeof(SANE_Int); + + return descriptor; } -void kds_s2000w_option_descriptor_binarization_mode(SANE_Option_Descriptor* descriptor) +SANE_Option_Descriptor* _kds_s2000w_option_descriptor_binarization_mode() { + SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); + descriptor->name = "binarization-mode"; descriptor->title = "binarizationmode"; descriptor->desc = "binarizationmode"; descriptor->cap = SANE_CAP_SOFT_DETECT; descriptor->constraint_type = SANE_CONSTRAINT_STRING_LIST; + SANE_String_Const* constraint_binarization_mode = NULL; + constraint_binarization_mode = malloc(sizeof(char*) * 2); constraint_binarization_mode[0] = "iThresholding"; constraint_binarization_mode[1] = NULL; descriptor->constraint.string_list = constraint_binarization_mode; descriptor->type = SANE_TYPE_STRING; descriptor->unit = SANE_UNIT_NONE; descriptor->size = sizeof(SANE_String) * 50; + + return descriptor; } -void kds_s2000w_option_descriptor_binarization_contrast(SANE_Option_Descriptor* descriptor) +SANE_Option_Descriptor* _kds_s2000w_option_descriptor_binarization_contrast() { + SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); + descriptor->name = SANE_NAME_CONTRAST; descriptor->title = SANE_TITLE_CONTRAST; descriptor->desc = SANE_DESC_CONTRAST; descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; descriptor->constraint_type = SANE_CONSTRAINT_RANGE; + SANE_Range* constraint_binarization_contrast = NULL; + constraint_binarization_contrast = malloc(sizeof(SANE_Range)); constraint_binarization_contrast->min = -50; constraint_binarization_contrast->max = 50; constraint_binarization_contrast->quant = 1; descriptor->constraint.range = constraint_binarization_contrast; descriptor->type = SANE_TYPE_INT; descriptor->size = sizeof(SANE_Int); + + return descriptor; } -void kds_s2000w_option_descriptor_max_document_length(SANE_Option_Descriptor* descriptor) +SANE_Option_Descriptor* _kds_s2000w_option_descriptor_max_document_length() { + SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); + descriptor->name = "maxdocumentlength"; descriptor->title = "maxdocumentlength"; descriptor->desc = "maxdocumentlength"; descriptor->cap = SANE_CAP_SOFT_DETECT; descriptor->constraint_type = SANE_CONSTRAINT_STRING_LIST; + SANE_String_Const* constraint_max_document_length = NULL; + constraint_max_document_length = malloc(sizeof(char*) * 2); constraint_max_document_length[0] = "#NoPrimaryControl#"; constraint_max_document_length[1] = NULL; descriptor->constraint.string_list = constraint_max_document_length; descriptor->type = SANE_TYPE_INT; descriptor->size = sizeof(SANE_Int); + + return descriptor; } -void kds_s2000w_option_descriptor_scan_source(SANE_Option_Descriptor* descriptor) +SANE_Option_Descriptor* _kds_s2000w_option_descriptor_scan_source() { + SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); + descriptor->name = SANE_NAME_SCAN_SOURCE; descriptor->title = SANE_TITLE_SCAN_SOURCE; descriptor->desc = SANE_DESC_SCAN_SOURCE; descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;; descriptor->constraint_type = SANE_CONSTRAINT_STRING_LIST; + SANE_String_Const* constraint_scan_source = NULL; + constraint_scan_source = malloc(sizeof(char*) * 4); constraint_scan_source[0] = "DocumentFeeder"; constraint_scan_source[1] = "Automatic"; constraint_scan_source[2] = "Flatbed"; @@ -463,10 +506,14 @@ void kds_s2000w_option_descriptor_scan_source(SANE_Option_Descriptor* descriptor descriptor->type = SANE_TYPE_STRING; descriptor->unit = SANE_UNIT_NONE; descriptor->size = sizeof(SANE_String) * 50; + + return descriptor; } -void kds_s2000w_option_descriptor_config_reset(SANE_Option_Descriptor* descriptor) +SANE_Option_Descriptor* _kds_s2000w_option_descriptor_config_reset() { + SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); + descriptor->name = "config-reset"; descriptor->title = "Konfiguration zuruecksetzen"; descriptor->desc = "Laedt die default Konfiguration des Scanners"; @@ -475,4 +522,52 @@ void kds_s2000w_option_descriptor_config_reset(SANE_Option_Descriptor* descripto descriptor->type = SANE_TYPE_BUTTON; descriptor->unit = SANE_UNIT_NONE; descriptor->size = 0; + + return descriptor; +} + +void kds_s2000w_option_descriptor_init_option_descriptors() +{ + descriptor_array = malloc(sizeof(SANE_Option_Descriptor*) * MAX_OPTION_COUNT); + + descriptor_array[0] = _kds_s2000w_option_descriptor_num_options(); + descriptor_array[1] = _kds_s2000w_option_descriptor_standard_group(); + descriptor_array[2] = _kds_s2000w_option_descriptor_dpi(); + descriptor_array[3] = _kds_s2000w_option_descriptor_scanside(); + descriptor_array[4] = _kds_s2000w_option_descriptor_color_mode(); + descriptor_array[5] = _kds_s2000w_option_descriptor_skip_blank_pages(); + descriptor_array[6] = _kds_s2000w_option_descriptor_auto_start(); + descriptor_array[7] = _kds_s2000w_option_descriptor_color_drop(); + descriptor_array[8] = _kds_s2000w_option_descriptor_color_drop_out_aggressiveness(); + descriptor_array[9] = _kds_s2000w_option_descriptor_output_type(); + descriptor_array[10] = _kds_s2000w_option_descriptor_color_auto_brightness_mode(); + descriptor_array[11] = _kds_s2000w_option_descriptor_color_balance_mode(); + descriptor_array[12] = _kds_s2000w_option_descriptor_color_balancea_ggressiveness(); + descriptor_array[13] = _kds_s2000w_option_descriptor_color_balance_red(); + descriptor_array[14] = _kds_s2000w_option_descriptor_color_balance_green(); + descriptor_array[15] = _kds_s2000w_option_descriptor_color_balance_blue(); + descriptor_array[16] = _kds_s2000w_option_descriptor_foreground_boldness_mode(); + descriptor_array[17] = _kds_s2000w_option_descriptor_foreground_boldness_aggressiveness(); + descriptor_array[18] = _kds_s2000w_option_descriptor_background_smoothing_mode(); + descriptor_array[19] = _kds_s2000w_option_descriptor_background_smoothing_aggressiveness(); + descriptor_array[20] = _kds_s2000w_option_descriptor_binarization_mode(); + descriptor_array[21] = _kds_s2000w_option_descriptor_binarization_contrast(); + descriptor_array[22] = _kds_s2000w_option_descriptor_max_document_length(); + descriptor_array[23] = _kds_s2000w_option_descriptor_scan_source(); + descriptor_array[24] = _kds_s2000w_option_descriptor_config_reset(); +} + +void kds_s2000w_option_descriptor_free_option_descriptors() +{ + for (int i = 0; i < MAX_OPTION_COUNT; i++) { + free(descriptor_array[i]); + } + + free(descriptor_array); + descriptor_array = NULL; +} + +SANE_Option_Descriptor* kds_s2000w_option_get_descriptor(int option) +{ + return descriptor_array[option]; } \ No newline at end of file diff --git a/src/kds_s2000w_option_descriptors.h b/src/kds_s2000w_option_descriptors.h index 0f14846..c057e75 100644 --- a/src/kds_s2000w_option_descriptors.h +++ b/src/kds_s2000w_option_descriptors.h @@ -4,32 +4,7 @@ #define MAX_OPTION_COUNT 25 -SANE_Option_Descriptor* kds_s2000w_option_descriptor_init_option_descriptors(); -void kds_s2000w_option_descriptor_free_option_descriptors(SANE_Option_Descriptor* descriptor_array); - -void kds_s2000w_option_descriptor_num_options(SANE_Option_Descriptor* descriptor); -void kds_s2000w_option_descriptor_standard_group(SANE_Option_Descriptor* descriptor); -void kds_s2000w_option_descriptor_dpi(SANE_Option_Descriptor* descriptor); -void kds_s2000w_option_descriptor_scanside(SANE_Option_Descriptor* descriptor); -void kds_s2000w_option_descriptor_color_mode(SANE_Option_Descriptor* descriptor); -void kds_s2000w_option_descriptor_skip_blank_pages(SANE_Option_Descriptor* descriptor); -void kds_s2000w_option_descriptor_auto_start(SANE_Option_Descriptor* descriptor); -void kds_s2000w_option_descriptor_color_drop(SANE_Option_Descriptor* descriptor); -void kds_s2000w_option_descriptor_color_drop_out_aggressiveness(SANE_Option_Descriptor* descriptor); -void kds_s2000w_option_descriptor_output_type(SANE_Option_Descriptor* descriptor); -void kds_s2000w_option_descriptor_color_auto_brightness_mode(SANE_Option_Descriptor* descriptor); -void kds_s2000w_option_descriptor_color_balance_mode(SANE_Option_Descriptor* descriptor); -void kds_s2000w_option_descriptor_color_balancea_ggressiveness(SANE_Option_Descriptor* descriptor); -void kds_s2000w_option_descriptor_color_balance_red(SANE_Option_Descriptor* descriptor); -void kds_s2000w_option_descriptor_color_balance_green(SANE_Option_Descriptor* descriptor); -void kds_s2000w_option_descriptor_color_balance_blue(SANE_Option_Descriptor* descriptor); -void kds_s2000w_option_descriptor_foreground_boldness_mode(SANE_Option_Descriptor* descriptor); -void kds_s2000w_option_descriptor_foreground_boldness_aggressiveness(SANE_Option_Descriptor* descriptor); -void kds_s2000w_option_descriptor_background_smoothing_mode(SANE_Option_Descriptor* descriptor); -void kds_s2000w_option_descriptor_background_smoothing_aggressiveness(SANE_Option_Descriptor* descriptor); -void kds_s2000w_option_descriptor_binarization_mode(SANE_Option_Descriptor* descriptor); -void kds_s2000w_option_descriptor_binarization_contrast(SANE_Option_Descriptor* descriptor); -void kds_s2000w_option_descriptor_max_document_length(SANE_Option_Descriptor* descriptor); -void kds_s2000w_option_descriptor_scan_source(SANE_Option_Descriptor* descriptor); -void kds_s2000w_option_descriptor_config_reset(SANE_Option_Descriptor* descriptor); +void kds_s2000w_option_descriptor_init_option_descriptors(); +void kds_s2000w_option_descriptor_free_option_descriptors(); +SANE_Option_Descriptor* kds_s2000w_option_get_descriptor(int option); #endif \ No newline at end of file