]> gitweb.hhaalo.de Git - sane-kds-s2000w-net.git/commitdiff
change get option optimize
authorBastian Dehn <hhaalo@arcor.de>
Mon, 22 Sep 2025 10:09:03 +0000 (12:09 +0200)
committerBastian Dehn <hhaalo@arcor.de>
Mon, 22 Sep 2025 10:09:03 +0000 (12:09 +0200)
src/kds_s2000w_handler_opts.c

index 68d2ad4f1cfe83ed0cf83f5a5424c1193af2efe5..a6b2fbf444f3d10318f6edc8ec0f9d7fd29c795a 100644 (file)
@@ -8,19 +8,6 @@
 #define AUTOSTART_ON 1
 #define OPTION_COUNT 47
 
-__attribute_deprecated__ void _kds_s2000w_handler_opts_write_string_value(json_object* value_object, void* value)
-{
-       const char* json_value = json_object_get_string(value_object);
-       char* str_value = (char*) value;
-       strcpy(str_value, json_value);
-}
-
-__attribute_deprecated__ void _kds_s2000w_handler_opts_write_int_value(json_object* value_object, void* value)
-{
-       int32_t* int_value_ptr = (int32_t*) value;
-       *int_value_ptr = json_object_get_int(value_object);
-}
-
 __attribute_deprecated__ void _kds_s2000w_handler_opts_write_string_value_to_json(json_object* value_object, void* value)
 {
        char* char_value = (char*) value;
@@ -33,6 +20,21 @@ __attribute_deprecated__  void _kds_s2000w_handler_opts_write_int_value_to_json(
        json_object_set_int(value_object, *int_value_ptr);
 }
 
+void _kds_s2000w_handler_opts_write_value(json_object* value_object, SANE_Value_Type value_type, void* value)
+{
+       if (value_type == SANE_TYPE_INT || value_type == SANE_TYPE_BOOL) {
+               int32_t* int_value_ptr = (int32_t*) value;
+               *int_value_ptr = json_object_get_int(value_object);
+               return;
+       }
+
+       if (value_type == SANE_TYPE_STRING) {
+               const char* json_value = json_object_get_string(value_object);
+               char* str_value = (char*) value;
+               strcpy(str_value, json_value);
+       }
+}
+
 void _kds_s2000w_handler_opts_load_options(handler* h)
 {
        json_object_put(h->current_scanner_config);
@@ -244,8 +246,15 @@ void _kds_s2000w_handler_opts_set_enable_color_drop_out_aggressiveness(json_obje
 
 void kds_s2000w_handler_opts_get_option(handler* h, uint32_t option, void* value, int32_t* info)
 {
-       json_object* config = NULL;
+       if (option == STANDARD_GROUP_NUMBER
+               || option == GEOMETRY_GROUP_NUMBER
+               || option == BOLDNESS_SMOOTHING_NUMBER
+               || option == BOLDNESS_COLOR_NUMBER
+               || option == IMAGE_PROCESSING_NUMBER
+               || option == FEEDER_GROUP_NUMBER)
+               return;
 
+       json_object* config = NULL;
        if (h->current_scanner_config == NULL) {
                _kds_s2000w_handler_opts_load_options(h);
                config = json_object_object_get(h->current_scanner_config, "Configuration");
@@ -258,73 +267,31 @@ void kds_s2000w_handler_opts_get_option(handler* h, uint32_t option, void* value
 
        option_descriptor* descriptor = kds_s2000w_option_descriptor_full_get_by_number(option);
        json_object* value_object = NULL;
-       switch(option) {
-               case 0:
-                       config = json_object_object_get(h->current_scanner_config, "Configuration");
-                       int32_t* int_value_ptr = (int32_t*) value;
-                       *int_value_ptr = OPTION_COUNT;
-                       break;
-               case 2:
-                       value_object = json_object_object_get(config, descriptor->config_name);
-                       _kds_s2000w_handler_opts_write_string_value(value_object, value);
+       if (option == 0) {
+               config = json_object_object_get(h->current_scanner_config, "Configuration");
+               int32_t* int_value_ptr = (int32_t*) value;
+               *int_value_ptr = OPTION_COUNT;
+               return;
+       }
 
-                       if (strcmp(value, "Flatbed") == 0)
-                               h->current_scan_status->feeder = Flatbed;
+       if (option == 2) {
+               value_object = json_object_object_get(config, descriptor->config_name);
+               _kds_s2000w_handler_opts_write_value(value_object, descriptor->descriptor.type, value);
 
-                       if (strcmp(value, "DocumentFeeder") == 0)
-                               h->current_scan_status->feeder = DocumentFeeder;
+               if (strcmp(value, "Flatbed") == 0)
+                       h->current_scan_status->feeder = Flatbed;
 
-                       if (strcmp(value, "Automatic") == 0)
-                               h->current_scan_status->feeder = Automatic;
+               if (strcmp(value, "DocumentFeeder") == 0)
+                       h->current_scan_status->feeder = DocumentFeeder;
 
-                       break;
-               case 3:
-               case 5:
-               case 7:
-               case 8:
-               case 14:
-               case 16:
-               case 19:
-               case 21:
-               case 24:
-               case 29:
-               case 36:
-               case 37:
-               case 38:
-               case 39:
-               case 42:
-               case 43:
-               case 44:
-               case 46:
-                       value_object = json_object_object_get(config, descriptor->config_name);
-                       _kds_s2000w_handler_opts_write_string_value(value_object, value);
-                       break;
-               case 4:
-               case 9:
-               case 10:
-               case 11:
-               case 12:
-               case 15:
-               case 17:
-               case 20:
-               case 22:
-               case 23:
-               case 25:
-               case 26:
-               case 27:
-               case 28:
-               case 30:
-               case 33:
-               case 34:
-               case 35:
-               case 41:
-               case 45:
-                       value_object = json_object_object_get(config, descriptor->config_name);
-                       _kds_s2000w_handler_opts_write_int_value(value_object, value);
-                       break;
-               default:
-                       break;
+               if (strcmp(value, "Automatic") == 0)
+                       h->current_scan_status->feeder = Automatic;
+
+               return;
        }
+
+       value_object = json_object_object_get(config, descriptor->config_name);
+       _kds_s2000w_handler_opts_write_value(value_object, descriptor->descriptor.type, value);
 }
 
 void kds_s2000w_handler_opts_set_option(handler* h, uint32_t option, void* value, int32_t* info)