From 29d29b0867052a619e9be873d9a0fe42107c259e Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Sun, 4 Feb 2024 12:32:27 +0100 Subject: [PATCH] move option implementation to seperate file --- CMakeLists.txt | 1 + src/kds_s2000w_handler.c | 363 +-------------------------------- src/kds_s2000w_handler_opts.c | 365 ++++++++++++++++++++++++++++++++++ src/kds_s2000w_handler_opts.h | 5 + 4 files changed, 372 insertions(+), 362 deletions(-) create mode 100644 src/kds_s2000w_handler_opts.c create mode 100644 src/kds_s2000w_handler_opts.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 5707787..2fe791c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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) diff --git a/src/kds_s2000w_handler.c b/src/kds_s2000w_handler.c index 5b514a8..36c74a7 100644 --- a/src/kds_s2000w_handler.c +++ b/src/kds_s2000w_handler.c @@ -1,11 +1,9 @@ #include -#include -#include #include #include -#include #include #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 index 0000000..4b98784 --- /dev/null +++ b/src/kds_s2000w_handler_opts.c @@ -0,0 +1,365 @@ +#include +#include +#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 index 0000000..1855e4f --- /dev/null +++ b/src/kds_s2000w_handler_opts.h @@ -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 -- 2.39.5