#include <stdbool.h>
#include <json-c/json.h>
+typedef enum {
+ PROFILE_MIN,
+ PROFILE_230802_V1_0_36,
+ PROFILE_FULL
+} profile_t;
+
typedef enum {
NOTCONNECTED,
OPENED,
} scan_status_t;
typedef struct {
- __attribute_deprecated__ uint8_t profile;
+ uint8_t profile;
uint64_t sessionid;
json_object* scanner_config;
scan_status_t* scan_status;
void kds_s2000w_handler_recreate_session(handler_t* h);
mask_option_groups_t* kds_s2000w_handler_get_available_options();
+void kds_s2000w_handler_filter_available_options(profile_t profile, mask_option_groups_t* mask);
+
int32_t kds_s2000w_handler_opts_get_option(handler_t* handle, uint32_t option, void* value, int32_t* info);
int32_t kds_s2000w_handler_opts_set_option(handler_t* handle, uint32_t option, void* value, int32_t* info);
return available_options;
}
+void kds_s2000w_handler_filter_available_options(profile_t profile, mask_option_groups_t* mask)
+{
+ const mask_option_groups_t min_profile = {
+ .standard_group = 0xe,
+ .geometry_group = 0x0,
+ .boldness_smoothing_group = 0x0,
+ .boldness_color_group = 0x1001,
+ .image_processing_group = 0x1,
+ .feeder_group = 0x1
+ };
+ const mask_option_groups_t v1_0_36_230802 = {
+ .standard_group = 0xf,
+ .geometry_group = 0x0,
+ .boldness_smoothing_group = 0xf,
+ .boldness_color_group = 0x19e7,
+ .image_processing_group = 0x1,
+ .feeder_group = 0x1
+ };
+ const mask_option_groups_t full_profle = {
+ .standard_group = 0xffff,
+ .geometry_group = 0xffff,
+ .boldness_smoothing_group = 0xffff,
+ .boldness_color_group = 0xffff,
+ .image_processing_group = 0xffff,
+ .feeder_group = 0xffff
+ };
+
+ mask_option_groups_t profile_mask = min_profile;
+ switch (profile) {
+ case PROFILE_FULL:
+ profile_mask = full_profle;
+ break;
+ case PROFILE_230802_V1_0_36:
+ profile_mask = v1_0_36_230802;
+ break;
+ default:
+ break;
+ }
+
+ mask->standard_group &= profile_mask.standard_group;
+ mask->geometry_group &= profile_mask.geometry_group;
+ mask->boldness_smoothing_group &= profile_mask.boldness_smoothing_group;
+ mask->boldness_color_group &= profile_mask.boldness_color_group;
+ mask->image_processing_group &= profile_mask.image_processing_group;
+ mask->feeder_group &= profile_mask.feeder_group;
+}
+
int32_t kds_s2000w_handler_opts_get_option(handler_t* h, uint32_t option, void* value, int32_t* info)
{
_kds_s2000w_handler_opts_load_config(h);
#include "kds_s2000w_handler.h"
mask_option_groups_t* kds_s2000w_handler_get_available_options();
+void kds_s2000w_handler_filter_available_options(profile_t profile, mask_option_groups_t* mask);
+
int32_t kds_s2000w_handler_opts_get_option(handler_t* h, uint32_t option, void* value, int32_t* info);
int32_t kds_s2000w_handler_opts_set_option(handler_t* h, uint32_t option, void* value, int32_t* info);
}
mask_option_groups_t* option_mask = kds_s2000w_handler_get_available_options();
+ kds_s2000w_handler_filter_available_options(h->profile, option_mask);
SANE_Status status = kds_s2000w_option_descriptors_init((mask_option_t*) option_mask);
free(option_mask);
* methods
******************************************************************************/
-__attribute_deprecated__ typedef enum {
- PROFILE_MIN,
- PROFILE_230802_V1_0_36,
- PROFILE_FULL
-} profile_t;
-
typedef struct {
const char* config_name;
SANE_Option_Descriptor* descriptor;
option_mask = NULL;
}
+void kds_s2000w_handler_filter_availables_options_min_profile_test()
+{
+ mask_option_groups_t* mask = malloc(sizeof(mask_option_groups_t));
+ if (mask == NULL)
+ return;
+ memset(mask, 0xff, sizeof(mask_option_groups_t));
+
+ kds_s2000w_handler_filter_available_options(PROFILE_MIN, mask);
+
+ assert_int_equal(mask->standard_group, 0xe);
+ assert_int_equal(mask->geometry_group, 0x0);
+ assert_int_equal(mask->boldness_smoothing_group, 0x0);
+ assert_int_equal(mask->boldness_color_group, 0x1001);
+ assert_int_equal(mask->image_processing_group, 0x1);
+ assert_int_equal(mask->feeder_group, 0x1);
+
+ free(mask);
+ mask = NULL;
+}
+
+void kds_s2000w_handler_filter_availables_options_profile_v1_0_36_test()
+{
+ mask_option_groups_t* mask = malloc(sizeof(mask_option_groups_t));
+ if (mask == NULL)
+ return;
+ memset(mask, 0xff, sizeof(mask_option_groups_t));
+
+ kds_s2000w_handler_filter_available_options(PROFILE_230802_V1_0_36, mask);
+
+ assert_int_equal(mask->standard_group, 0xf);
+ assert_int_equal(mask->geometry_group, 0x0);
+ assert_int_equal(mask->boldness_smoothing_group, 0xf);
+ assert_int_equal(mask->boldness_color_group, 0x19e7);
+ assert_int_equal(mask->image_processing_group, 0x1);
+ assert_int_equal(mask->feeder_group, 0x1);
+
+ free(mask);
+ mask = NULL;
+}
+
int main()
{
const struct CMUnitTest net_tests[] = {
cmocka_unit_test(kds_s2000w_net_get_select_fd_test),
cmocka_unit_test(kds_s2000w_handler_depth_one_calc_bytes_per_line_tests),
cmocka_unit_test(kds_s2000w_handler_depth_eight_calc_bytes_per_line_tests),
- cmocka_unit_test(kds_s2000w_handler_available_options_test)
+ cmocka_unit_test(kds_s2000w_handler_available_options_test),
+ cmocka_unit_test(kds_s2000w_handler_filter_availables_options_min_profile_test),
+ cmocka_unit_test(kds_s2000w_handler_filter_availables_options_profile_v1_0_36_test)
};
return cmocka_run_group_tests(net_tests, setup, teardown);