]> gitweb.hhaalo.de Git - sane-kds-s2000w-net.git/commitdiff
fix response null terminate and add button reset implement
authorBastian Dehn <hhaalo@arcor.de>
Sun, 28 Jan 2024 20:18:13 +0000 (21:18 +0100)
committerBastian Dehn <hhaalo@arcor.de>
Sun, 28 Jan 2024 20:18:13 +0000 (21:18 +0100)
src/kds_s2000w_client.c
src/kds_s2000w_handler.c
src/kds_s2000w_handler.h
src/kds_s2000w_net.c

index 5cffaeaeb913a939094c75b9a3ae20b61502b1e0..2006dc242a9b9a7fdc5a8d872275d2ee644bac85 100644 (file)
@@ -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;
 }
index 9fef227c2b21b2d8eebfa2b54fbd0dec90ce3381..f66f987987a11294afcae44692833642daa9748a 100644 (file)
@@ -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;
index 172e27d7f4b7e15c3984aebd491c59a276b1a680..2ff7ebf1a312b5091725341555395efd5111e3af 100644 (file)
@@ -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
index 4aee330c207d4ae90fc9a79d5f2f0a68cb950ad1..116ead4805ab0050ac8c6b76137d377243092bd6 100644 (file)
@@ -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);