From 029414e378cebf3e95a9ce7e5106893045693c9c Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Sun, 18 Feb 2024 11:52:17 +0100 Subject: [PATCH] move current scan state into handler --- src/kds_s2000w_handler.c | 98 ++++++++++++++++++---------------------- src/kds_s2000w_handler.h | 9 ++++ 2 files changed, 53 insertions(+), 54 deletions(-) diff --git a/src/kds_s2000w_handler.c b/src/kds_s2000w_handler.c index e4718af..0b1f042 100644 --- a/src/kds_s2000w_handler.c +++ b/src/kds_s2000w_handler.c @@ -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 diff --git a/src/kds_s2000w_handler.h b/src/kds_s2000w_handler.h index aba82e3..e29e214 100644 --- a/src/kds_s2000w_handler.h +++ b/src/kds_s2000w_handler.h @@ -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; -- 2.39.5