From 28fb99eadcdf0263dda797a31b66e711a0ed2129 Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Sun, 28 Jan 2024 21:18:13 +0100 Subject: [PATCH] fix response null terminate and add button reset implement --- src/kds_s2000w_client.c | 2 +- src/kds_s2000w_handler.c | 22 ++++++++++++++++++++-- src/kds_s2000w_handler.h | 7 ++++++- src/kds_s2000w_net.c | 2 +- 4 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/kds_s2000w_client.c b/src/kds_s2000w_client.c index 5cffaea..2006dc2 100644 --- a/src/kds_s2000w_client.c +++ b/src/kds_s2000w_client.c @@ -15,7 +15,7 @@ size_t _kds_s2000w_client_callback(char *ptr, size_t size, size_t nmemb, void *u memcpy(data->data, ptr, fullsize); data->size = fullsize + sizeof(char); - data->data[data->size] = 0; + data->data[data->size] = NULL; return fullsize; } diff --git a/src/kds_s2000w_handler.c b/src/kds_s2000w_handler.c index 9fef227..f66f987 100644 --- a/src/kds_s2000w_handler.c +++ b/src/kds_s2000w_handler.c @@ -213,7 +213,7 @@ void kds_s2000w_handler_get_option(int option, void* value) } } -void kds_s2000w_handler_set_option(int option, void* value) +void kds_s2000w_handler_set_option(int option, void* value, int* info) { config = json_object_object_get(resObj, "Configuration"); json_object* value_object = NULL; @@ -310,9 +310,27 @@ void kds_s2000w_handler_set_option(int option, void* value) printf("Konfiguration reset\n"); resp = kds_s2000w_client_response_init(); kds_s2000w_client_get_capabilities(resp); - printf("capabilities: %s\n", resp->data); + + printf("response data: %s", resp->data); + + json_object* capabilities = json_tokener_parse(resp->data); + json_object* default_values = json_object_object_get(capabilities, "Defaults"); + const char* json_string = json_object_to_json_string_ext(default_values, JSON_C_TO_STRING_PLAIN); + printf("default_values: %s\n", json_string); + + kds_s2000w_client_response_free(resp); + + 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); + *info = RELOAD_OPTIONS; break; default: break; diff --git a/src/kds_s2000w_handler.h b/src/kds_s2000w_handler.h index 172e27d..2ff7ebf 100644 --- a/src/kds_s2000w_handler.h +++ b/src/kds_s2000w_handler.h @@ -10,10 +10,15 @@ typedef struct { device_state state; } current_state; +enum { + RELOAD_OPTIONS, + REALOD_PARAMS +}; + current_state* kds_s2000w_handler_open(); void kds_s2000w_handler_close(); current_state* kds_s2000w_handler_current_state(); void kds_s2000w_handler_get_option(int option, void* value); -void kds_s2000w_handler_set_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 diff --git a/src/kds_s2000w_net.c b/src/kds_s2000w_net.c index 4aee330..116ead4 100644 --- a/src/kds_s2000w_net.c +++ b/src/kds_s2000w_net.c @@ -161,7 +161,7 @@ SANE_Status _sane_kds_s2000w_net_control_option(SANE_Handle handle, kds_s2000w_handler_get_option(option, value); if (action == SANE_ACTION_SET_VALUE) - kds_s2000w_handler_set_option(option, value); + kds_s2000w_handler_set_option(option, value, info); if (action == SANE_ACTION_SET_AUTO) kds_s2000w_handler_set_option_auto(option); -- 2.39.5