]> gitweb.hhaalo.de Git - sane-kds-s2000w-net.git/commitdiff
move option implementation to seperate file
authorBastian Dehn <hhaalo@arcor.de>
Sun, 4 Feb 2024 11:32:27 +0000 (12:32 +0100)
committerBastian Dehn <hhaalo@arcor.de>
Sun, 4 Feb 2024 11:37:25 +0000 (12:37 +0100)
CMakeLists.txt
src/kds_s2000w_handler.c
src/kds_s2000w_handler_opts.c [new file with mode: 0644]
src/kds_s2000w_handler_opts.h [new file with mode: 0644]

index 57077871c44c41481b1fe6170630e5b4a8d1d6fa..2fe791c789d3b04ff906c4f78f230d36d438ae11 100644 (file)
@@ -11,6 +11,7 @@ add_library("sane-kds_s2000w_net"
        "src/kds_s2000w_net.c"
        "src/kds_s2000w_option_descriptors.c"
        "src/kds_s2000w_handler.c"
+       "src/kds_s2000w_handler_opts.c"
        "src/kds_s2000w_client.c")
 set_target_properties("sane-kds_s2000w_net" PROPERTIES VERSION 1)
 
index 5b514a877d35c57d554fcdca1d1ad011e0022e96..36c74a759939e9cea66880f191dd9515173f9ccd 100644 (file)
@@ -1,11 +1,9 @@
 #include <stdio.h>
-#include <stdlib.h>
-#include <stddef.h>
 #include <string.h>
 #include <unistd.h>
-#include <curl/curl.h>
 #include <json-c/json.h>
 #include "kds_s2000w_handler.h"
+#include "kds_s2000w_handler_opts.h"
 #include "kds_s2000w_client.h"
 
 response* resp = NULL;
@@ -21,111 +19,12 @@ typedef struct {
 
 scan_status current_scan_status;
 
-void _write_string_value(json_object* value_object, void* value)
-{
-       const char* string_value = json_object_get_string(value_object);
-       char* char_value = (char*) value;
-       int value_length = strlen(string_value) + 1;
-       memcpy(char_value, string_value, sizeof(char) * value_length);
-}
-
-void _write_int_value(json_object* value_object, void* value)
-{
-       int* int_value_ptr = (int*) value;
-       *int_value_ptr = json_object_get_int(value_object);
-}
-
-void _write_string_value_to_json(json_object* value_object, void* value)
-{
-       char* char_value = (char*) value;
-       json_object_set_string(value_object, char_value);
-}
-
-void _write_int_value_to_json(json_object* value_object, void* value)
-{
-       int* int_value_ptr = (int*) value;
-       json_object_set_int(value_object, *int_value_ptr);
-}
-
-void _load_options()
-{
-       json_object_put(resp_config);
-       resp_config = NULL;
-
-       resp = kds_s2000w_client_response_init();
-       int result = kds_s2000w_client_get_option(state->sessionid, resp);
-       resp_config = json_tokener_parse(resp->data);
-       config = json_object_object_get(resp_config, "Configuration");
-
-       if (result != 0 || resp->code == 404) {
-               kds_s2000w_client_response_free(resp);
-               resp = NULL;
-               json_object_put(resp_config);
-               resp_config = NULL;
-               return;
-       }
-
-       kds_s2000w_client_response_free(resp);
-       resp = NULL;
-}
-
-int _change_output_type_to_images()
-{
-       json_object* value_object = json_object_object_get(config, "ColorMode");
-       const char* color_mode_value = json_object_get_string(value_object);
-       if (strcmp(color_mode_value, "Color_BW") != 0) {
-               value_object = NULL;
-               value_object = json_object_object_get(config, "OutputType");
-               const char* reset_value_ptr = "Images";
-               _write_string_value_to_json(value_object, (void*) reset_value_ptr);
-               value_object = NULL;
-               return 1;
-       }
-
-       return 0;
-}
-
-int _color_change_to_color_bw()
-{
-       json_object* value_object = json_object_object_get(config, "ColorMode");
-       const char* color_mode_value = json_object_get_string(value_object);
-       if (strcmp(color_mode_value, "Color_BW") != 0) {
-               const char* reset_value_ptr = "Color_BW";
-               _write_string_value_to_json(value_object, (void*) reset_value_ptr);
-               value_object = NULL;
-               return 1;
-       }
-
-       return 0;
-}
-
-int _change_skip_blank_pages_off()
-{
-       json_object* value_object = json_object_object_get(config, "OutputType");
-       const char* output_type = json_object_get_string(value_object);
-       value_object = NULL;
-
-       if (strcmp(output_type, "SinglePageColorPDFPlus2TIFs") == 0) {
-               value_object = json_object_object_get(config, "SkipBlankPages");
-               json_object_set_int(value_object, 0);
-               value_object = NULL;
-               return 1;
-       }
-
-       return 0;
-}
-
 current_state* kds_s2000w_handler_open()
 {
        state = malloc(sizeof(current_state));
        state->sessionid = 0;
        state->state = NOTCONNECTED;
 
-       state->state = NOTCONNECTED;
-       CURL *curl = curl_easy_init();
-       if(!curl)
-               return state;
-
        resp = kds_s2000w_client_response_init();
        int result = kds_s2000w_client_open_session("hhaalo", resp);
 
@@ -187,266 +86,6 @@ current_state* kds_s2000w_handler_current_state()
        return state;
 }
 
-void kds_s2000w_handler_get_option(int option, void* value)
-{
-       config = json_object_object_get(resp_config, "Configuration");
-       json_object* value_object = NULL;
-       switch(option) {
-               case 0:
-                       _load_options();
-                       int* int_value_ptr = (int*) value;
-                       *int_value_ptr = json_object_object_length(config) + 3;
-                       break;
-               case 2:
-                       value_object = json_object_object_get(config, "DPI");
-                       _write_int_value(value_object, value);
-                       break;
-               case 3:
-                       value_object = json_object_object_get(config, "ScanSide");
-                       _write_string_value(value_object, value);
-                       break;
-               case 4:
-                       value_object = json_object_object_get(config, "ColorMode");
-                       _write_string_value(value_object, value);
-                       break;
-               case 5:
-                       value_object = json_object_object_get(config, "SkipBlankPages");
-                       _write_int_value(value_object, value);
-                       break;
-               case 6:
-                       value_object = json_object_object_get(config, "AutoStart");
-                       _write_int_value(value_object, value);
-                       break;
-               case 7:
-                       value_object = json_object_object_get(config, "ColorDropOut");
-                       _write_string_value(value_object, value);
-                       break;
-               case 8:
-                       value_object = json_object_object_get(config, "ColorDropOutAggressiveness");
-                       _write_int_value(value_object, value);
-                       break;
-               case 9:
-                       value_object = json_object_object_get(config, "OutputType");
-                       _write_string_value(value_object, value);
-                       break;
-               case 10:
-                       value_object = json_object_object_get(config, "ColorAutoBrightnessMode");
-                       _write_string_value(value_object, value);
-                       break;
-               case 11:
-                       value_object = json_object_object_get(config, "ColorBalanceMode");
-                       _write_string_value(value_object, value);
-                       break;
-               case 12:
-                       value_object = json_object_object_get(config, "ColorBalanceAggressiveness");
-                       _write_int_value(value_object, value);
-                       break;
-               case 13:
-                       value_object = json_object_object_get(config, "ColorBalanceRed");
-                       _write_int_value(value_object, value);
-                       break;
-               case 14:
-                       value_object = json_object_object_get(config, "ColorBalanceGreen");
-                       _write_int_value(value_object, value);
-                       break;
-               case 15:
-                       value_object = json_object_object_get(config, "ColorBalanceBlue");
-                       _write_int_value(value_object, value);
-                       break;
-               case 16:
-                       value_object = json_object_object_get(config, "ForegroundBoldnessMode");
-                       _write_string_value(value_object, value);
-                       break;
-               case 17:
-                       value_object = json_object_object_get(config, "ForegroundBoldnessAggressiveness");
-                       _write_int_value(value_object, value);
-                       break;
-               case 18:
-                       value_object = json_object_object_get(config, "BackgroundSmoothingMode");
-                       _write_string_value(value_object, value);
-                       break;
-               case 19:
-                       value_object = json_object_object_get(config, "BackgroundSmoothingAggressiveness");
-                       _write_int_value(value_object, value);
-                       break;
-               case 20:
-                       value_object = json_object_object_get(config, "BinarizationMode");
-                       _write_string_value(value_object, value);
-                       break;
-               case 21:
-                       value_object = json_object_object_get(config, "BinarizationContrast");
-                       _write_int_value(value_object, value);
-                       break;
-               case 22:
-                       value_object = json_object_object_get(config, "MaxDocumentLength");
-                       _write_int_value(value_object, value);
-                       break;
-               case 23:
-                       value_object = json_object_object_get(config, "ScanSource");
-                       _write_string_value(value_object, value);
-                       break;
-               default:
-                       break;
-       }
-}
-
-void kds_s2000w_handler_set_option(int option, void* value, int* info)
-{
-       config = json_object_object_get(resp_config, "Configuration");
-       json_object* value_object = NULL;
-       switch(option) {
-               case 2:
-                       value_object = json_object_object_get(config, "DPI");
-                       _write_int_value_to_json(value_object, value);
-                       break;
-               case 3:
-                       value_object = json_object_object_get(config, "ScanSide");
-                       _write_string_value_to_json(value_object, value);
-                       value_object = NULL;
-                       break;
-               case 4:
-                       value_object = json_object_object_get(config, "ColorMode");
-                       _write_string_value_to_json(value_object, value);
-                       value_object = NULL;
-
-                       if (_change_output_type_to_images())
-                               *info = RELOAD_OPTIONS;
-
-                       break;
-               case 5:
-                       value_object = json_object_object_get(config, "SkipBlankPages");
-                       _write_int_value_to_json(value_object, value);
-                       value_object = NULL;
-
-                       if (_change_skip_blank_pages_off())
-                               *info = RELOAD_OPTIONS;
-
-                       break;
-               case 6:
-                       value_object = json_object_object_get(config, "AutoStart");
-                       _write_int_value_to_json(value_object, value);
-                       break;
-               case 7:
-                       value_object = json_object_object_get(config, "ColorDropOut");
-                       _write_string_value_to_json(value_object, value);
-                       break;
-               case 8:
-                       value_object = json_object_object_get(config, "ColorDropOutAggressiveness");
-                       _write_int_value_to_json(value_object, value);
-                       break;
-               case 9:
-                       value_object = json_object_object_get(config, "OutputType");
-                       _write_string_value_to_json(value_object, value);
-                       value_object = NULL;
-
-                       if (_color_change_to_color_bw())
-                               *info = RELOAD_OPTIONS;
-
-                       if (_change_skip_blank_pages_off())
-                               *info = RELOAD_OPTIONS;
-
-                       break;
-               case 10:
-                       value_object = json_object_object_get(config, "ColorAutoBrightnessMode");
-                       _write_string_value_to_json(value_object, value);
-                       break;
-               case 11:
-                       value_object = json_object_object_get(config, "ColorBalanceMode");
-                       _write_string_value_to_json(value_object, value);
-                       break;
-               case 12:
-                       value_object = json_object_object_get(config, "ColorBalanceAggressiveness");
-                       _write_int_value_to_json(value_object, value);
-                       break;
-               case 13:
-                       value_object = json_object_object_get(config, "ColorBalanceRed");
-                       _write_int_value_to_json(value_object, value);
-                       break;
-               case 14:
-                       value_object = json_object_object_get(config, "ColorBalanceGreen");
-                       _write_int_value_to_json(value_object, value);
-                       break;
-               case 15:
-                       value_object = json_object_object_get(config, "ColorBalanceBlue");
-                       _write_int_value_to_json(value_object, value);
-                       break;
-               case 16:
-                       value_object = json_object_object_get(config, "ForegroundBoldnessMode");
-                       _write_string_value_to_json(value_object, value);
-                       break;
-               case 17:
-                       value_object = json_object_object_get(config, "ForegroundBoldnessAggressiveness");
-                       _write_int_value_to_json(value_object, value);
-                       break;
-               case 18:
-                       value_object = json_object_object_get(config, "BackgroundSmoothingMode");
-                       _write_string_value_to_json(value_object, value);
-                       break;
-               case 19:
-                       value_object = json_object_object_get(config, "BackgroundSmoothingAggressiveness");
-                       _write_int_value_to_json(value_object, value);
-                       break;
-               case 20:
-                       value_object = json_object_object_get(config, "BinarizationMode");
-                       _write_string_value_to_json(value_object, value);
-                       break;
-               case 21:
-                       value_object = json_object_object_get(config, "BinarizationContrast");
-                       _write_int_value_to_json(value_object, value);
-                       break;
-               case 22:
-                       value_object = json_object_object_get(config, "MaxDocumentLength");
-                       _write_int_value_to_json(value_object, value);
-                       break;
-               case 23:
-                       value_object = json_object_object_get(config, "ScanSource");
-                       _write_string_value_to_json(value_object, value);
-                       break;
-               case 24:
-                       resp = kds_s2000w_client_response_init();
-                       kds_s2000w_client_get_capabilities(resp);
-                       json_object* capabilities = json_tokener_parse(resp->data);
-                       json_object* default_values = json_object_object_get(capabilities, "Defaults");
-                       json_object* default_config = json_object_new_object();
-                       json_object_object_add(default_config, "Configuration", default_values);
-                       const char* json_string = json_object_to_json_string_ext(default_config, JSON_C_TO_STRING_PLAIN);
-                       kds_s2000w_client_response_free(resp);
-                       resp = NULL;
-
-                       resp = kds_s2000w_client_response_init();
-                       resp->size = sizeof(char) * strlen(json_string);
-                       resp->code = 0;
-                       resp->data = realloc(resp->data, resp->size);
-                       resp->data = memcpy(resp->data, json_string, resp->size);
-                       kds_s2000w_client_set_option(state->sessionid, resp);
-                       kds_s2000w_client_response_free(resp);
-                       resp = NULL;
-                       json_object_put(capabilities);
-                       capabilities = NULL;
-
-                       *info = RELOAD_OPTIONS;
-                       _load_options();
-                       return;
-                       break;
-               default:
-                       break;
-       }
-
-       const char* json_string = json_object_to_json_string_ext(resp_config, JSON_C_TO_STRING_PLAIN);
-       resp = kds_s2000w_client_response_init();
-       resp->size = sizeof(char) * strlen(json_string);
-       resp->code = 0;
-       resp->data = realloc(resp->data, resp->size);
-       resp->data = memcpy(resp->data, json_string, resp->size);
-       kds_s2000w_client_set_option(state->sessionid, resp);
-       kds_s2000w_client_response_free(resp);
-       resp = NULL;
-}
-
-void kds_s2000w_handler_set_option_auto(int option)
-{
-       return;
-}
 
 void kds_s2000w_handler_start_scan()
 {
diff --git a/src/kds_s2000w_handler_opts.c b/src/kds_s2000w_handler_opts.c
new file mode 100644 (file)
index 0000000..4b98784
--- /dev/null
@@ -0,0 +1,365 @@
+#include <string.h>
+#include <json-c/json.h>
+#include "kds_s2000w_handler.h"
+#include "kds_s2000w_client.h"
+#include "kds_s2000w_handler_opts.h"
+
+extern current_state* state;
+extern response* resp;
+extern json_object* resp_config;
+extern json_object* config;
+
+void _write_string_value(json_object* value_object, void* value)
+{
+       const char* string_value = json_object_get_string(value_object);
+       char* char_value = (char*) value;
+       int value_length = strlen(string_value) + 1;
+       memcpy(char_value, string_value, sizeof(char) * value_length);
+}
+
+void _write_int_value(json_object* value_object, void* value)
+{
+       int* int_value_ptr = (int*) value;
+       *int_value_ptr = json_object_get_int(value_object);
+}
+
+void _write_string_value_to_json(json_object* value_object, void* value)
+{
+       char* char_value = (char*) value;
+       json_object_set_string(value_object, char_value);
+}
+
+void _write_int_value_to_json(json_object* value_object, void* value)
+{
+       int* int_value_ptr = (int*) value;
+       json_object_set_int(value_object, *int_value_ptr);
+}
+
+void _load_options()
+{
+       json_object_put(resp_config);
+       resp_config = NULL;
+
+       resp = kds_s2000w_client_response_init();
+       int result = kds_s2000w_client_get_option(state->sessionid, resp);
+       resp_config = json_tokener_parse(resp->data);
+       config = json_object_object_get(resp_config, "Configuration");
+
+       if (result != 0 || resp->code == 404) {
+               kds_s2000w_client_response_free(resp);
+               resp = NULL;
+               json_object_put(resp_config);
+               resp_config = NULL;
+               return;
+       }
+
+       kds_s2000w_client_response_free(resp);
+       resp = NULL;
+}
+
+int _change_output_type_to_images()
+{
+       json_object* value_object = json_object_object_get(config, "ColorMode");
+       const char* color_mode_value = json_object_get_string(value_object);
+       if (strcmp(color_mode_value, "Color_BW") != 0) {
+               value_object = NULL;
+               value_object = json_object_object_get(config, "OutputType");
+               const char* reset_value_ptr = "Images";
+               _write_string_value_to_json(value_object, (void*) reset_value_ptr);
+               value_object = NULL;
+               return 1;
+       }
+
+       return 0;
+}
+
+int _color_change_to_color_bw()
+{
+       json_object* value_object = json_object_object_get(config, "ColorMode");
+       const char* color_mode_value = json_object_get_string(value_object);
+       if (strcmp(color_mode_value, "Color_BW") != 0) {
+               const char* reset_value_ptr = "Color_BW";
+               _write_string_value_to_json(value_object, (void*) reset_value_ptr);
+               value_object = NULL;
+               return 1;
+       }
+
+       return 0;
+}
+
+int _change_skip_blank_pages_off()
+{
+       json_object* value_object = json_object_object_get(config, "OutputType");
+       const char* output_type = json_object_get_string(value_object);
+       value_object = NULL;
+
+       if (strcmp(output_type, "SinglePageColorPDFPlus2TIFs") == 0) {
+               value_object = json_object_object_get(config, "SkipBlankPages");
+               json_object_set_int(value_object, 0);
+               value_object = NULL;
+               return 1;
+       }
+
+       return 0;
+}
+
+void kds_s2000w_handler_get_option(int option, void* value)
+{
+       config = json_object_object_get(resp_config, "Configuration");
+       json_object* value_object = NULL;
+       switch(option) {
+               case 0:
+                       _load_options();
+                       int* int_value_ptr = (int*) value;
+                       *int_value_ptr = json_object_object_length(config) + 3;
+                       break;
+               case 2:
+                       value_object = json_object_object_get(config, "DPI");
+                       _write_int_value(value_object, value);
+                       break;
+               case 3:
+                       value_object = json_object_object_get(config, "ScanSide");
+                       _write_string_value(value_object, value);
+                       break;
+               case 4:
+                       value_object = json_object_object_get(config, "ColorMode");
+                       _write_string_value(value_object, value);
+                       break;
+               case 5:
+                       value_object = json_object_object_get(config, "SkipBlankPages");
+                       _write_int_value(value_object, value);
+                       break;
+               case 6:
+                       value_object = json_object_object_get(config, "AutoStart");
+                       _write_int_value(value_object, value);
+                       break;
+               case 7:
+                       value_object = json_object_object_get(config, "ColorDropOut");
+                       _write_string_value(value_object, value);
+                       break;
+               case 8:
+                       value_object = json_object_object_get(config, "ColorDropOutAggressiveness");
+                       _write_int_value(value_object, value);
+                       break;
+               case 9:
+                       value_object = json_object_object_get(config, "OutputType");
+                       _write_string_value(value_object, value);
+                       break;
+               case 10:
+                       value_object = json_object_object_get(config, "ColorAutoBrightnessMode");
+                       _write_string_value(value_object, value);
+                       break;
+               case 11:
+                       value_object = json_object_object_get(config, "ColorBalanceMode");
+                       _write_string_value(value_object, value);
+                       break;
+               case 12:
+                       value_object = json_object_object_get(config, "ColorBalanceAggressiveness");
+                       _write_int_value(value_object, value);
+                       break;
+               case 13:
+                       value_object = json_object_object_get(config, "ColorBalanceRed");
+                       _write_int_value(value_object, value);
+                       break;
+               case 14:
+                       value_object = json_object_object_get(config, "ColorBalanceGreen");
+                       _write_int_value(value_object, value);
+                       break;
+               case 15:
+                       value_object = json_object_object_get(config, "ColorBalanceBlue");
+                       _write_int_value(value_object, value);
+                       break;
+               case 16:
+                       value_object = json_object_object_get(config, "ForegroundBoldnessMode");
+                       _write_string_value(value_object, value);
+                       break;
+               case 17:
+                       value_object = json_object_object_get(config, "ForegroundBoldnessAggressiveness");
+                       _write_int_value(value_object, value);
+                       break;
+               case 18:
+                       value_object = json_object_object_get(config, "BackgroundSmoothingMode");
+                       _write_string_value(value_object, value);
+                       break;
+               case 19:
+                       value_object = json_object_object_get(config, "BackgroundSmoothingAggressiveness");
+                       _write_int_value(value_object, value);
+                       break;
+               case 20:
+                       value_object = json_object_object_get(config, "BinarizationMode");
+                       _write_string_value(value_object, value);
+                       break;
+               case 21:
+                       value_object = json_object_object_get(config, "BinarizationContrast");
+                       _write_int_value(value_object, value);
+                       break;
+               case 22:
+                       value_object = json_object_object_get(config, "MaxDocumentLength");
+                       _write_int_value(value_object, value);
+                       break;
+               case 23:
+                       value_object = json_object_object_get(config, "ScanSource");
+                       _write_string_value(value_object, value);
+                       break;
+               default:
+                       break;
+       }
+}
+
+void kds_s2000w_handler_set_option(int option, void* value, int* info)
+{
+       config = json_object_object_get(resp_config, "Configuration");
+       json_object* value_object = NULL;
+       switch(option) {
+               case 2:
+                       value_object = json_object_object_get(config, "DPI");
+                       _write_int_value_to_json(value_object, value);
+                       break;
+               case 3:
+                       value_object = json_object_object_get(config, "ScanSide");
+                       _write_string_value_to_json(value_object, value);
+                       value_object = NULL;
+                       break;
+               case 4:
+                       value_object = json_object_object_get(config, "ColorMode");
+                       _write_string_value_to_json(value_object, value);
+                       value_object = NULL;
+
+                       if (_change_output_type_to_images())
+                               *info = RELOAD_OPTIONS;
+
+                       break;
+               case 5:
+                       value_object = json_object_object_get(config, "SkipBlankPages");
+                       _write_int_value_to_json(value_object, value);
+                       value_object = NULL;
+
+                       if (_change_skip_blank_pages_off())
+                               *info = RELOAD_OPTIONS;
+
+                       break;
+               case 6:
+                       value_object = json_object_object_get(config, "AutoStart");
+                       _write_int_value_to_json(value_object, value);
+                       break;
+               case 7:
+                       value_object = json_object_object_get(config, "ColorDropOut");
+                       _write_string_value_to_json(value_object, value);
+                       break;
+               case 8:
+                       value_object = json_object_object_get(config, "ColorDropOutAggressiveness");
+                       _write_int_value_to_json(value_object, value);
+                       break;
+               case 9:
+                       value_object = json_object_object_get(config, "OutputType");
+                       _write_string_value_to_json(value_object, value);
+                       value_object = NULL;
+
+                       if (_color_change_to_color_bw())
+                               *info = RELOAD_OPTIONS;
+
+                       if (_change_skip_blank_pages_off())
+                               *info = RELOAD_OPTIONS;
+
+                       break;
+               case 10:
+                       value_object = json_object_object_get(config, "ColorAutoBrightnessMode");
+                       _write_string_value_to_json(value_object, value);
+                       break;
+               case 11:
+                       value_object = json_object_object_get(config, "ColorBalanceMode");
+                       _write_string_value_to_json(value_object, value);
+                       break;
+               case 12:
+                       value_object = json_object_object_get(config, "ColorBalanceAggressiveness");
+                       _write_int_value_to_json(value_object, value);
+                       break;
+               case 13:
+                       value_object = json_object_object_get(config, "ColorBalanceRed");
+                       _write_int_value_to_json(value_object, value);
+                       break;
+               case 14:
+                       value_object = json_object_object_get(config, "ColorBalanceGreen");
+                       _write_int_value_to_json(value_object, value);
+                       break;
+               case 15:
+                       value_object = json_object_object_get(config, "ColorBalanceBlue");
+                       _write_int_value_to_json(value_object, value);
+                       break;
+               case 16:
+                       value_object = json_object_object_get(config, "ForegroundBoldnessMode");
+                       _write_string_value_to_json(value_object, value);
+                       break;
+               case 17:
+                       value_object = json_object_object_get(config, "ForegroundBoldnessAggressiveness");
+                       _write_int_value_to_json(value_object, value);
+                       break;
+               case 18:
+                       value_object = json_object_object_get(config, "BackgroundSmoothingMode");
+                       _write_string_value_to_json(value_object, value);
+                       break;
+               case 19:
+                       value_object = json_object_object_get(config, "BackgroundSmoothingAggressiveness");
+                       _write_int_value_to_json(value_object, value);
+                       break;
+               case 20:
+                       value_object = json_object_object_get(config, "BinarizationMode");
+                       _write_string_value_to_json(value_object, value);
+                       break;
+               case 21:
+                       value_object = json_object_object_get(config, "BinarizationContrast");
+                       _write_int_value_to_json(value_object, value);
+                       break;
+               case 22:
+                       value_object = json_object_object_get(config, "MaxDocumentLength");
+                       _write_int_value_to_json(value_object, value);
+                       break;
+               case 23:
+                       value_object = json_object_object_get(config, "ScanSource");
+                       _write_string_value_to_json(value_object, value);
+                       break;
+               case 24:
+                       resp = kds_s2000w_client_response_init();
+                       kds_s2000w_client_get_capabilities(resp);
+                       json_object* capabilities = json_tokener_parse(resp->data);
+                       json_object* default_values = json_object_object_get(capabilities, "Defaults");
+                       json_object* default_config = json_object_new_object();
+                       json_object_object_add(default_config, "Configuration", default_values);
+                       const char* json_string = json_object_to_json_string_ext(default_config, JSON_C_TO_STRING_PLAIN);
+                       kds_s2000w_client_response_free(resp);
+                       resp = NULL;
+
+                       resp = kds_s2000w_client_response_init();
+                       resp->size = sizeof(char) * strlen(json_string);
+                       resp->code = 0;
+                       resp->data = realloc(resp->data, resp->size);
+                       resp->data = memcpy(resp->data, json_string, resp->size);
+                       kds_s2000w_client_set_option(state->sessionid, resp);
+                       kds_s2000w_client_response_free(resp);
+                       resp = NULL;
+                       json_object_put(capabilities);
+                       capabilities = NULL;
+
+                       *info = RELOAD_OPTIONS;
+                       _load_options();
+                       return;
+                       break;
+               default:
+                       break;
+       }
+
+       const char* json_string = json_object_to_json_string_ext(resp_config, JSON_C_TO_STRING_PLAIN);
+       resp = kds_s2000w_client_response_init();
+       resp->size = sizeof(char) * strlen(json_string);
+       resp->code = 0;
+       resp->data = realloc(resp->data, resp->size);
+       resp->data = memcpy(resp->data, json_string, resp->size);
+       kds_s2000w_client_set_option(state->sessionid, resp);
+       kds_s2000w_client_response_free(resp);
+       resp = NULL;
+}
+
+void kds_s2000w_handler_set_option_auto(int option)
+{
+       return;
+}
\ No newline at end of file
diff --git a/src/kds_s2000w_handler_opts.h b/src/kds_s2000w_handler_opts.h
new file mode 100644 (file)
index 0000000..1855e4f
--- /dev/null
@@ -0,0 +1,5 @@
+#ifndef KDS_S2000W_HANDLER_OPTS_H
+void kds_s2000w_handler_get_option(int option, void* value);
+void kds_s2000w_handler_set_option(int option, void* value, int* info);
+void kds_s2000w_handler_set_option_auto(int option);
+#endif
\ No newline at end of file