]> gitweb.hhaalo.de Git - sane-kds-s2000w-net.git/commitdiff
move current scan state into handler
authorBastian Dehn <hhaalo@arcor.de>
Sun, 18 Feb 2024 10:52:17 +0000 (11:52 +0100)
committerBastian Dehn <hhaalo@arcor.de>
Sun, 18 Feb 2024 10:52:17 +0000 (11:52 +0100)
src/kds_s2000w_handler.c
src/kds_s2000w_handler.h

index e4718af03a37b8b20aab9959c5f30ac948cbea08..0b1f042341488a407d2df10be55da8b0126b47b8 100644 (file)
@@ -15,29 +15,19 @@ json_object* config = NULL;
 blobdata image;
 blobdata pnm_image;
 
-typedef struct {
-       int current_image_number;
-       int available_images;
-       int downloaded_images;
-       int complete_scanned;
-       metadata mdata;
-} scan_status;
-
-scan_status current_scan_status;
-
 void _get_current_metadata(handler* h)
 {
        debug_printf(ALL, "get_current_metadata");
        resp = kds_s2000w_client_response_init();
-       kds_s2000w_client_get_metadata(h->sessionid, current_scan_status.current_image_number, resp);
+       kds_s2000w_client_get_metadata(h->sessionid, h->current_scan_status.current_image_number, resp);
        if (resp->code != 200) {
-               current_scan_status.mdata.valid = 0;
+               h->current_scan_status.mdata.valid = 0;
                kds_s2000w_client_response_free(resp);
                resp = NULL;
                return;
        }
 
-       current_scan_status.mdata.valid = 0;
+       h->current_scan_status.mdata.valid = 0;
        json_object* metadataResp = NULL;
        json_object* metadata = NULL;
        json_object* mdata_value = NULL;
@@ -46,19 +36,19 @@ void _get_current_metadata(handler* h)
        metadataResp = json_tokener_parse(resp->data);
        metadata = json_object_object_get(metadataResp, "Metadata");
        mdata_value = json_object_object_get(metadata, "BitDepth");
-       current_scan_status.mdata.depth = json_object_get_int(mdata_value);
+       h->current_scan_status.mdata.depth = json_object_get_int(mdata_value);
        mdata_value = NULL;
 
        mdata_value = json_object_object_get(metadata, "ImageSize");
-       current_scan_status.mdata.size = json_object_get_int(mdata_value);
+       h->current_scan_status.mdata.size = json_object_get_int(mdata_value);
        mdata_value = NULL;
 
        mdata_value = json_object_object_get(metadata, "ImageWidth");
-       current_scan_status.mdata.pixels_per_line = json_object_get_int(mdata_value);
+       h->current_scan_status.mdata.pixels_per_line = json_object_get_int(mdata_value);
        mdata_value = NULL;
 
        mdata_value = json_object_object_get(metadata, "ImageHeight");
-       current_scan_status.mdata.lines = json_object_get_int(mdata_value);
+       h->current_scan_status.mdata.lines = json_object_get_int(mdata_value);
        mdata_value = NULL;
 
        json_object_put(metadataResp);
@@ -68,15 +58,15 @@ void _get_current_metadata(handler* h)
        mdata_value = NULL;
 
        if (strcmp(color_value, "Color") == 0)
-               current_scan_status.mdata.format = 1;
+               h->current_scan_status.mdata.format = 1;
 
        if (strcmp(color_value, "Gray") == 0)
-               current_scan_status.mdata.format = 0;
+               h->current_scan_status.mdata.format = 0;
 
        if (strcmp(color_value, "BW") == 0)
-               current_scan_status.mdata.format = 0;
+               h->current_scan_status.mdata.format = 0;
 
-       if (current_scan_status.mdata.format == 1)
+       if (h->current_scan_status.mdata.format == 1)
                channels = 3;
 
        if (pnm_image.size > 0) {
@@ -84,24 +74,24 @@ void _get_current_metadata(handler* h)
                pnm_image.data = NULL;
                pnm_image.size = 0;
        }
-       if (current_scan_status.mdata.depth > 8) {
-               current_scan_status.mdata.depth = 8;
-               kds_s2000w_convert_jpg_to_pnm_With_depth(&image, &pnm_image, current_scan_status.mdata.depth);
+       if (h->current_scan_status.mdata.depth > 8) {
+               h->current_scan_status.mdata.depth = 8;
+               kds_s2000w_convert_jpg_to_pnm_With_depth(&image, &pnm_image, h->current_scan_status.mdata.depth);
        } else {
                kds_s2000w_convert_jpg_to_pnm(&image, &pnm_image);
        }
 
-       current_scan_status.mdata.size = pnm_image.size;
-       current_scan_status.mdata.image = pnm_image.data;
+       h->current_scan_status.mdata.size = pnm_image.size;
+       h->current_scan_status.mdata.image = pnm_image.data;
        debug_printf_int(DEBUG, "size of pnm image", pnm_image.size);
 
-       if (current_scan_status.mdata.depth == 1)
-               current_scan_status.mdata.bytes_per_line = channels * floor((current_scan_status.mdata.pixels_per_line + 7) / 8);
+       if (h->current_scan_status.mdata.depth == 1)
+               h->current_scan_status.mdata.bytes_per_line = channels * floor((h->current_scan_status.mdata.pixels_per_line + 7) / 8);
        else
-               current_scan_status.mdata.bytes_per_line = channels * current_scan_status.mdata.pixels_per_line * current_scan_status.mdata.depth / 8;
+               h->current_scan_status.mdata.bytes_per_line = channels * h->current_scan_status.mdata.pixels_per_line * h->current_scan_status.mdata.depth / 8;
 
-       current_scan_status.mdata.valid = 1;
-       current_scan_status.mdata.is_last = 0;
+       h->current_scan_status.mdata.valid = 1;
+       h->current_scan_status.mdata.is_last = 0;
        
        metadata = NULL;
        kds_s2000w_client_response_free(resp);
@@ -113,7 +103,7 @@ void _delete_current_image(handler* h)
 {
        debug_printf(ALL, "delete_current_image");
        resp = kds_s2000w_client_response_init();
-       kds_s2000w_client_delete_image(h->sessionid, current_scan_status.current_image_number, resp);
+       kds_s2000w_client_delete_image(h->sessionid, h->current_scan_status.current_image_number, resp);
        kds_s2000w_client_response_free(resp);
        resp = NULL;
        sleep(1);
@@ -128,13 +118,13 @@ void _download_current_image(handler* h)
                image.size = 0;
        }
        resp = kds_s2000w_client_response_init();
-       kds_s2000w_client_get_image(h->sessionid, current_scan_status.current_image_number, resp);
+       kds_s2000w_client_get_image(h->sessionid, h->current_scan_status.current_image_number, resp);
        image.size = resp->size;
        image.data = malloc(sizeof(char) * resp->size);
        memcpy(image.data, resp->data, resp->size);
        kds_s2000w_client_response_free(resp);
        resp = NULL;
-       current_scan_status.downloaded_images++;
+       h->current_scan_status.downloaded_images++;
        sleep(1);
 }
 
@@ -150,12 +140,12 @@ void _get_current_scan_status(handler* h)
        status_resp_obj = json_tokener_parse(resp->data);
        status_obj = json_object_object_get(status_resp_obj, "Status");
        status_value_obj = json_object_object_get(status_obj, "NumImagesScanned");
-       current_scan_status.available_images = json_object_get_int(status_value_obj);
+       h->current_scan_status.available_images = json_object_get_int(status_value_obj);
        status_value_obj = NULL;
        status_value_obj = json_object_object_get(status_obj, "State");
        const char* scanner_state = json_object_get_string(status_value_obj);
        if (strcmp(scanner_state, "Scanning") != 0)
-               current_scan_status.complete_scanned = 1;
+               h->current_scan_status.complete_scanned = 1;
 
        json_object_put(status_resp_obj);
        status_resp_obj = NULL;
@@ -219,11 +209,11 @@ void kds_s2000w_handler_open(const char* devicename, void** handle)
        kds_s2000w_client_response_free(resp);
        resp = NULL;
 
-       current_scan_status.current_image_number = 1;
-       current_scan_status.available_images = 0;
-       current_scan_status.downloaded_images = 0;
-       current_scan_status.complete_scanned = 0;
-       current_scan_status.mdata.scanned_all_complete = 0;
+       h->current_scan_status.current_image_number = 1;
+       h->current_scan_status.available_images = 0;
+       h->current_scan_status.downloaded_images = 0;
+       h->current_scan_status.complete_scanned = 0;
+       h->current_scan_status.mdata.scanned_all_complete = 0;
        return;
 }
 
@@ -270,28 +260,28 @@ metadata kds_s2000w_handler_get_parameters(void* handle)
 {
        debug_printf(ALL, "kds_s2000w_handler_get_parameters");
        handler* h = (handler*) handle;
-       if (!current_scan_status.complete_scanned
-               && current_scan_status.downloaded_images == current_scan_status.available_images) {
+       if (!h->current_scan_status.complete_scanned
+               && h->current_scan_status.downloaded_images == h->current_scan_status.available_images) {
                _get_current_scan_status(h);
        }
 
-       if (current_scan_status.complete_scanned
-               && current_scan_status.downloaded_images == current_scan_status.available_images) {
-               current_scan_status.mdata.valid = 1;
-               current_scan_status.mdata.scanned_all_complete = 1;
-               current_scan_status.mdata.is_last = 1;
-               return current_scan_status.mdata;
+       if (h->current_scan_status.complete_scanned
+               && h->current_scan_status.downloaded_images == h->current_scan_status.available_images) {
+               h->current_scan_status.mdata.valid = 1;
+               h->current_scan_status.mdata.scanned_all_complete = 1;
+               h->current_scan_status.mdata.is_last = 1;
+               return h->current_scan_status.mdata;
        }
 
-       if (current_scan_status.downloaded_images >= current_scan_status.available_images) {
-               current_scan_status.mdata.valid = 0;
-               return current_scan_status.mdata;
+       if (h->current_scan_status.downloaded_images >= h->current_scan_status.available_images) {
+               h->current_scan_status.mdata.valid = 0;
+               return h->current_scan_status.mdata;
        }
 
        _download_current_image(h);
        _get_current_metadata(h);
        _delete_current_image(h);
-       current_scan_status.current_image_number++;
+       h->current_scan_status.current_image_number++;
 
-       return current_scan_status.mdata;
+       return h->current_scan_status.mdata;
 }
\ No newline at end of file
index aba82e3e65a13c07ad0e725b10997ddaf49a88da..e29e214481d83761e308c8ba7fccf88b12679a0a 100644 (file)
@@ -24,6 +24,14 @@ typedef struct {
        void* image;
 } metadata;
 
+typedef struct {
+       int current_image_number;
+       int available_images;
+       int downloaded_images;
+       int complete_scanned;
+       metadata mdata;
+} scan_status;
+
 typedef struct {
        int scan_started;
        int cancel;
@@ -36,6 +44,7 @@ typedef struct {
 typedef struct {
        long sessionid;
        int state;
+       scan_status current_scan_status;
        readinfo read_info;
 } handler;