From 88a12627f0553001cb019f80ef8b6f60f69ba843 Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Sat, 27 Jan 2024 11:20:10 +0100 Subject: [PATCH] read option three --- src/kds_s2000w_handler.c | 22 +++++++++++++++++----- src/kds_s2000w_net.c | 36 +++++++++++++++++++++++++++++------- 2 files changed, 46 insertions(+), 12 deletions(-) diff --git a/src/kds_s2000w_handler.c b/src/kds_s2000w_handler.c index 7b1704d..44e968a 100644 --- a/src/kds_s2000w_handler.c +++ b/src/kds_s2000w_handler.c @@ -77,11 +77,16 @@ void kds_s2000w_handler_get_option(int option, void* value) return; } + printf("DEBUG response: \n%s\n", resp->data); json_object* value_object = NULL; + int value_length = 0; + const char* string_value = NULL; + char* char_value = NULL; + int* int_value = NULL; switch(option) { case 0: - int* ignore_value = (int*) value; - *ignore_value = 3; + int_value = (int*) value; + *int_value = 4; break; case 1: value_object = json_object_object_get(config, "DPI"); @@ -91,9 +96,16 @@ void kds_s2000w_handler_get_option(int option, void* value) break; case 2: value_object = json_object_object_get(config, "ScanSide"); - const char* string_value = json_object_get_string(value_object); - char* char_value = (char*) value; - int value_length = strlen(char_value); + string_value = json_object_get_string(value_object); + char_value = (char*) value; + value_length = strlen(char_value); + memcpy(char_value, string_value, sizeof(char) * value_length); + break; + case 3: + value_object = json_object_object_get(config, "ColorMode"); + string_value = json_object_get_string(value_object); + char_value = (char*) value; + value_length = strlen(char_value); memcpy(char_value, string_value, sizeof(char) * value_length); break; default: diff --git a/src/kds_s2000w_net.c b/src/kds_s2000w_net.c index 1a5ac1d..5664aae 100644 --- a/src/kds_s2000w_net.c +++ b/src/kds_s2000w_net.c @@ -106,9 +106,7 @@ const SANE_Option_Descriptor* _sane_kds_s2000w_net_get_option_descriptor( option_descriptor_array.option_descriptors[option]->name = ""; option_descriptor_array.option_descriptors[option]->title = "option number count"; option_descriptor_array.option_descriptors[option]->desc = "available number of options"; - option_descriptor_array.option_descriptors[option]->type = SANE_TYPE_INT; option_descriptor_array.option_descriptors[option]->unit = SANE_UNIT_NONE; - option_descriptor_array.option_descriptors[option]->size = sizeof(SANE_Int); option_descriptor_array.option_descriptors[option]->cap = SANE_CAP_SOFT_DETECT; option_descriptor_array.option_descriptors[option]->constraint_type = SANE_CONSTRAINT_NONE; option_descriptor_array.option_descriptors[option]->constraint.string_list = NULL; @@ -120,9 +118,7 @@ const SANE_Option_Descriptor* _sane_kds_s2000w_net_get_option_descriptor( option_descriptor_array.option_descriptors[option]->name = "resolution"; option_descriptor_array.option_descriptors[option]->title = "resolution"; option_descriptor_array.option_descriptors[option]->desc = "resolution"; - option_descriptor_array.option_descriptors[option]->type = SANE_TYPE_INT; option_descriptor_array.option_descriptors[option]->unit = SANE_UNIT_DPI; - option_descriptor_array.option_descriptors[option]->size = sizeof(SANE_Int); option_descriptor_array.option_descriptors[option]->cap = SANE_CAP_SOFT_DETECT; option_descriptor_array.option_descriptors[option]->constraint_type = SANE_CONSTRAINT_NONE; option_descriptor_array.option_descriptors[option]->constraint.string_list = NULL; @@ -134,13 +130,39 @@ const SANE_Option_Descriptor* _sane_kds_s2000w_net_get_option_descriptor( option_descriptor_array.option_descriptors[option]->name = "scanside"; option_descriptor_array.option_descriptors[option]->title = "scanside"; option_descriptor_array.option_descriptors[option]->desc = "scanside"; - option_descriptor_array.option_descriptors[option]->type = SANE_TYPE_STRING; - option_descriptor_array.option_descriptors[option]->unit = SANE_UNIT_NONE; - option_descriptor_array.option_descriptors[option]->size = sizeof(SANE_String) * 50; option_descriptor_array.option_descriptors[option]->cap = SANE_CAP_SOFT_DETECT; option_descriptor_array.option_descriptors[option]->constraint_type = SANE_CONSTRAINT_NONE; option_descriptor_array.option_descriptors[option]->constraint.string_list = NULL; break; + case 3: + free(option_descriptor_array.option_descriptors[option]); + option_descriptor_array.option_descriptors[option] = NULL; + option_descriptor_array.option_descriptors[option] = malloc(sizeof(SANE_Option_Descriptor)); + option_descriptor_array.option_descriptors[option]->name = "colormode"; + option_descriptor_array.option_descriptors[option]->title = "colormode"; + option_descriptor_array.option_descriptors[option]->desc = "colormode"; + option_descriptor_array.option_descriptors[option]->cap = SANE_CAP_SOFT_DETECT; + option_descriptor_array.option_descriptors[option]->constraint_type = SANE_CONSTRAINT_NONE; + option_descriptor_array.option_descriptors[option]->constraint.string_list = NULL; + break; + default: + return NULL; + break; + } + + + switch (option) { + case 0: + case 1: + option_descriptor_array.option_descriptors[option]->type = SANE_TYPE_INT; + option_descriptor_array.option_descriptors[option]->size = sizeof(SANE_Int); + break; + case 2: + case 3: + option_descriptor_array.option_descriptors[option]->type = SANE_TYPE_STRING; + option_descriptor_array.option_descriptors[option]->unit = SANE_UNIT_NONE; + option_descriptor_array.option_descriptors[option]->size = sizeof(SANE_String) * 50; + break; default: return NULL; break; -- 2.39.5