From: Bastian Dehn Date: Sat, 24 Feb 2024 18:01:45 +0000 (+0100) Subject: add channels into handler X-Git-Tag: v1.0.0^2~201 X-Git-Url: https://gitweb.hhaalo.de/?a=commitdiff_plain;h=8c07354b6384039984b26077168516c9c915a882;p=sane-kds-s2000w-net.git add channels into handler --- diff --git a/src/kds_s2000w_handler.c b/src/kds_s2000w_handler.c index b3cb0e8..31b732f 100644 --- a/src/kds_s2000w_handler.c +++ b/src/kds_s2000w_handler.c @@ -32,7 +32,7 @@ void _get_current_metadata(handler* h) json_object* metadataResp = NULL; json_object* metadata = NULL; json_object* mdata_value = NULL; - int channels = 1; + h->current_metadata->channels = 1; metadataResp = json_tokener_parse(resp->data); metadata = json_object_object_get(metadataResp, "Metadata"); @@ -68,7 +68,7 @@ void _get_current_metadata(handler* h) h->current_metadata->format = 0; if (h->current_metadata->format == 1) - channels = 3; + h->current_metadata->channels = 3; if (pnm_image.size > 0) { free(pnm_image.data); @@ -87,9 +87,9 @@ void _get_current_metadata(handler* h) debug_printf_int(DEBUG, "size of pnm image", pnm_image.size); if (h->current_metadata->depth == 1) - h->current_metadata->bytes_per_line = channels * floor((h->current_metadata->pixels_per_line + 7) / 8); + h->current_metadata->bytes_per_line = h->current_metadata->channels * floor((h->current_metadata->pixels_per_line + 7) / 8); else - h->current_metadata->bytes_per_line = channels * h->current_metadata->pixels_per_line * h->current_metadata->depth / 8; + h->current_metadata->bytes_per_line = h->current_metadata->channels * h->current_metadata->pixels_per_line * h->current_metadata->depth / 8; h->current_metadata->valid = 1; h->current_metadata->is_last = 0; @@ -185,6 +185,7 @@ handler* init_handler() h->current_metadata->pixels_per_line = 0; h->current_metadata->lines = 0; h->current_metadata->depth = 8; + h->current_metadata->channels = 3; h->current_metadata->valid = 0; h->current_metadata->scanned_all_complete = 0; h->current_metadata->image = NULL; diff --git a/src/kds_s2000w_handler.h b/src/kds_s2000w_handler.h index b144adc..48d22c8 100644 --- a/src/kds_s2000w_handler.h +++ b/src/kds_s2000w_handler.h @@ -8,7 +8,7 @@ enum { enum { RELOAD_OPTIONS = 2, - REALOD_PARAMS = 4 + RELOAD_PARAMS = 4 }; typedef struct { @@ -19,6 +19,7 @@ typedef struct { int pixels_per_line; int lines; int depth; + int channels; int valid; int scanned_all_complete; void* image; @@ -51,7 +52,7 @@ handler* init_handler(); void free_handler(handler* h); void kds_s2000w_handler_open(const char* devicename, void** handle); void kds_s2000w_handler_close(handler* h); -void kds_s2000w_handler_get_option(handler* handle, int option, void* value); +void kds_s2000w_handler_get_option(handler* handle, int option, void* value, int* info); void kds_s2000w_handler_set_option(handler* handle, int option, void* value, int* info); void kds_s2000w_handler_set_option_auto(int option); void kds_s2000w_handler_start_scan(handler* h); diff --git a/src/kds_s2000w_handler_opts.c b/src/kds_s2000w_handler_opts.c index 72f002d..c0b14d9 100644 --- a/src/kds_s2000w_handler_opts.c +++ b/src/kds_s2000w_handler_opts.c @@ -117,7 +117,7 @@ void init_gamma_table() } } -void kds_s2000w_handler_get_option(handler* h, int option, void* value) +void kds_s2000w_handler_get_option(handler* h, int option, void* value, int* info) { config = json_object_object_get(resp_config, "Configuration"); json_object* value_object = NULL; @@ -139,10 +139,13 @@ void kds_s2000w_handler_get_option(handler* h, int option, void* value) value_object = json_object_object_get(config, "ColorMode"); _write_string_value(value_object, value); - if (strcmp(value, "Color") == 0) + if (strcmp(value, "Color") == 0) { h->current_metadata->format = 1; - else + h->current_metadata->channels = 3; + } else { h->current_metadata->format = 0; + h->current_metadata->channels = 1; + } break; case 5: diff --git a/src/kds_s2000w_handler_opts.h b/src/kds_s2000w_handler_opts.h index 2fdbfd8..0bdf7d6 100644 --- a/src/kds_s2000w_handler_opts.h +++ b/src/kds_s2000w_handler_opts.h @@ -1,7 +1,7 @@ #ifndef KDS_S2000W_HANDLER_OPTS_H #define KDS_S2000W_HANDLER_OPTS_H void init_gamma_table(); -void kds_s2000w_handler_get_option(handler* h, int option, void* value); +void kds_s2000w_handler_get_option(handler* h, int option, void* value, int* info); void kds_s2000w_handler_set_option(handler* h, 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 5972e9d..a25e900 100644 --- a/src/kds_s2000w_net.c +++ b/src/kds_s2000w_net.c @@ -2,6 +2,7 @@ #include #include #include +#include #include #include "kds_s2000w_option_descriptors.h" #include "kds_s2000w_handler.h" @@ -99,7 +100,7 @@ SANE_Status _sane_kds_s2000w_net_control_option(SANE_Handle handle, debug_printf(ALL, "sane_kds_s2000w_net_control_option"); handler* h = (handler*) handle; if (action == SANE_ACTION_GET_VALUE) - kds_s2000w_handler_get_option(h, option, value); + kds_s2000w_handler_get_option(h, option, value, info); if (action == SANE_ACTION_SET_VALUE) kds_s2000w_handler_set_option(h, option, value, info); diff --git a/tests/kds_s2000w_net_get_params_tests.c b/tests/kds_s2000w_net_get_params_tests.c index 5901a5b..29eb5bc 100644 --- a/tests/kds_s2000w_net_get_params_tests.c +++ b/tests/kds_s2000w_net_get_params_tests.c @@ -24,7 +24,6 @@ START_TEST(kds_s2000w_net_get_parameters_with_image_data) h->current_metadata->valid = 1; h->current_metadata->format = 1; h->current_metadata->is_last = 0; - h->current_metadata->bytes_per_line = 42; h->current_metadata->pixels_per_line = 1080; h->current_metadata->lines = 100; h->current_metadata->depth = 8; @@ -34,7 +33,7 @@ START_TEST(kds_s2000w_net_get_parameters_with_image_data) ck_assert_int_eq(params.format, 1); ck_assert_int_eq(params.last_frame, 0); - ck_assert_int_eq(params.bytes_per_line, 42); + ck_assert_int_eq(params.bytes_per_line, 0); ck_assert_int_eq(params.pixels_per_line, 1080); ck_assert_int_eq(params.lines, 100); ck_assert_int_eq(params.depth, 8);