#define AUTOSTART_ON 1
#define GUI_DPI 300
-#define MAX_WIDTH_INCH 85
-#define MAX_HEIGHT_INCH 140
void _kds_s2000w_handler_opts_write_value_to_json(json_object* value_object, SANE_Value_Type value_type, void* value)
{
}
}
-void _kds_s2000w_handler_opts_set_valid_coord(handler* h)
+void _kds_s2000w_handler_opts_set_valid_coord(handler* h, option_descriptor* descriptor)
{
- bool valid = h->coord->offset_x + h->coord->width < MAX_WIDTH_INCH;
- valid = valid && h->coord->offset_y + h->coord->height < MAX_HEIGHT_INCH;
+ bool valid = h->coord->offset_x >= 0 && h->coord->offset_x <= 75;
+ valid = valid && h->coord->offset_y >= 0 && h->coord->offset_y <= 130;
+ valid = valid && h->coord->width >= 10 && h->coord->width <= 85;
+ valid = valid && h->coord->height >= 10 && h->coord->height <= 140;
+ valid = valid && h->coord->offset_x + h->coord->width <= 85;
+ valid = valid && h->coord->offset_y + h->coord->height <= 140;
if (!valid)
return;
config = json_object_object_get(h->current_scanner_config, "Configuration");
option_descriptor* descriptor = kds_s2000w_option_descriptors_full_get_by_number(option);
- json_object* value_object = NULL;
-
- value_object = json_object_object_get(config, descriptor->config_name);
- _kds_s2000w_handler_opts_write_value_to_json(value_object, descriptor->descriptor->type, value);
-
- if (strcmp(descriptor->config_name, COLOR_MODE) == 0) {
- if (strcmp(value, "Flatbed") == 0)
- h->current_scan_status->feeder = Flatbed;
-
- if (strcmp(value, "DocumentFeeder") == 0)
- h->current_scan_status->feeder = DocumentFeeder;
-
- if (strcmp(value, "Automatic") == 0)
- h->current_scan_status->feeder = Automatic;
- }
+ json_object* value_object = json_object_object_get(config, descriptor->config_name);
- if (strcmp(descriptor->config_name, IMAGE_OFFSET_X) == 0
- || strcmp(descriptor->config_name, IMAGE_OFFSET_Y) == 0) {
+ if (strcmp(descriptor->config_name, IMAGE_OFFSET_X) == 0) {
int32_t* int_value = (int32_t*) value;
uint32_t tenth_inch = kds_s2000w_pixel_converter_pixel_to_tenth_inch(GUI_DPI, *int_value);
h->coord->offset_x = tenth_inch;
if (strcmp(descriptor->config_name, IMAGE_OFFSET_Y) == 0) {
int32_t* int_value = (int32_t*) value;
uint32_t tenth_inch = kds_s2000w_pixel_converter_pixel_to_tenth_inch(GUI_DPI, *int_value);
- h->coord->offset_x = tenth_inch;
+ h->coord->offset_y = tenth_inch;
}
if (strcmp(descriptor->config_name, IMAGE_WIDTH) == 0) {
int32_t* int_value = (int32_t*) value;
- value_object = json_object_object_get(config, IMAGE_OFFSET_X);
- int32_t tenth_inch_offset_x = json_object_get_int(value_object);
- uint32_t offset_x_pixel = kds_s2000w_pixel_converter_tenth_inch_to_pixel(GUI_DPI, tenth_inch_offset_x);
+ uint32_t offset_x_pixel = kds_s2000w_pixel_converter_tenth_inch_to_pixel(GUI_DPI, h->coord->offset_x);
uint32_t width_pixel = *int_value - offset_x_pixel;
uint32_t tenth_inch_width = kds_s2000w_pixel_converter_pixel_to_tenth_inch(GUI_DPI, width_pixel);
h->coord->width = tenth_inch_width;
if (strcmp(descriptor->config_name, IMAGE_HEIGHT) == 0) {
int32_t* int_value = (int32_t*) value;
- value_object = json_object_object_get(config, IMAGE_OFFSET_Y);
- int32_t tenth_inch_offset_y = json_object_get_int(value_object);
- uint32_t offset_y_pixel = kds_s2000w_pixel_converter_tenth_inch_to_pixel(GUI_DPI, tenth_inch_offset_y);
+ uint32_t offset_y_pixel = kds_s2000w_pixel_converter_tenth_inch_to_pixel(GUI_DPI, h->coord->offset_y);
uint32_t height_pixel = *int_value - offset_y_pixel;
uint32_t tenth_inch_height = kds_s2000w_pixel_converter_pixel_to_tenth_inch(GUI_DPI, height_pixel);
h->coord->height = tenth_inch_height;
}
- _kds_s2000w_handler_opts_set_valid_coord(h);
+ _kds_s2000w_handler_opts_set_valid_coord(h, descriptor);
+
+ if (strcmp(descriptor->config_name, IMAGE_OFFSET_X) != 0
+ && strcmp(descriptor->config_name, IMAGE_OFFSET_Y) != 0
+ && strcmp(descriptor->config_name, IMAGE_WIDTH) != 0
+ && strcmp(descriptor->config_name, IMAGE_HEIGHT) != 0)
+ _kds_s2000w_handler_opts_write_value_to_json(value_object, descriptor->descriptor->type, value);
+
+ if (strcmp(descriptor->config_name, COLOR_MODE) == 0) {
+ if (strcmp(value, "Flatbed") == 0)
+ h->current_scan_status->feeder = Flatbed;
+
+ if (strcmp(value, "DocumentFeeder") == 0)
+ h->current_scan_status->feeder = DocumentFeeder;
+
+ if (strcmp(value, "Automatic") == 0)
+ h->current_scan_status->feeder = Automatic;
+ }
if (strcmp(descriptor->config_name, RESET) == 0) {
_kds_s2000w_handler_opts_set_option_to_default(h);