Merge branch 'genesys-misc-cleanup' into 'master'

genesys: Miscellaneous cleanup

See merge request sane-project/backends!177
merge-requests/179/head
Povilas Kanapickas 2019-09-27 21:56:17 +00:00
commit dc52dc84f0
11 zmienionych plików z 150 dodań i 173 usunięć

Wyświetl plik

@ -281,6 +281,7 @@ sanei_genesys_init_structs (Genesys_Device * dev)
for (const auto& frontend : *s_frontends) {
if (dev->model->dac_type == frontend.fe_id) {
dev->frontend_initial = frontend;
dev->frontend = frontend;
fe_ok = true;
break;
}
@ -3410,53 +3411,6 @@ static void accurate_line_read(Genesys_Device* dev, Genesys_Buffer& buffer)
buffer.produce(buffer.size());
}
/** @brief fill buffer while reducing vertical resolution
* This function fills a read buffer with scanned data from a sensor
* which puts odd and even pixels in 2 different data segment. So a complete
* must be read and bytes interleaved to get usable by the other stages
* of the backend
*/
static void genesys_fill_line_interp_buffer(Genesys_Device* dev, uint8_t* work_buffer_dst,
size_t size)
{
DBG_HELPER(dbg);
size_t count;
/* fill buffer if needed */
if (dev->oe_buffer.avail() == 0)
{
accurate_line_read(dev, dev->oe_buffer);
}
/* copy size bytes of data, copying from a line when line count matches */
count = 0;
while (count < size)
{
/* line counter */
// dev->line_interp holds the number of lines scanned for one line of data sent
if (((dev->line_count / dev->session.params.channels) % dev->line_interp) == 0) {
/* copy pixel when line matches */
work_buffer_dst[count] = dev->oe_buffer.get_read_pos()[dev->deseg_curr_byte];
count++;
}
// always update pointer so we skip uncopied data
dev->deseg_curr_byte++;
/* go to next line if needed */
if (dev->deseg_curr_byte == dev->session.output_segment_pixel_group_count) {
dev->oe_buffer.set_pos(dev->oe_buffer.pos() + dev->session.output_line_bytes_raw);
dev->deseg_curr_byte = 0;
dev->line_count++;
}
/* read a new buffer if needed */
if (dev->oe_buffer.pos() >= dev->oe_buffer.avail())
{
accurate_line_read(dev, dev->oe_buffer);
}
}
}
/** @brief fill buffer for segmented sensors
* This function fills a read buffer with scanned data from a sensor segmented
* in several parts (multi-lines sensors). Data of the same valid area is read
@ -3610,12 +3564,7 @@ static void genesys_fill_read_buffer(Genesys_Device* dev)
*
* This is also the place where full duplex data will be handled.
*/
if (dev->line_interp>0)
{
// line interpolation
genesys_fill_line_interp_buffer(dev, work_buffer_dst, size);
}
else if (dev->session.segment_count > 1) {
if (dev->session.segment_count > 1) {
// multi-segment sensors processing
genesys_fill_segmented_buffer(dev, work_buffer_dst, size);
}
@ -3648,10 +3597,6 @@ static void genesys_read_ordered_data(Genesys_Device* dev, SANE_Byte* destinatio
uint8_t *work_buffer_dst;
unsigned int dst_lines;
unsigned int step_1_mode;
unsigned int needs_reorder;
unsigned int needs_ccd;
unsigned int needs_shrink;
unsigned int needs_reverse;
Genesys_Buffer *src_buffer;
Genesys_Buffer *dst_buffer;
@ -3670,30 +3615,6 @@ static void genesys_read_ordered_data(Genesys_Device* dev, SANE_Byte* destinatio
src_pixels = dev->current_setup.pixels;
needs_reorder = 1;
if (channels != 3 && depth != 16)
needs_reorder = 0;
#ifndef WORDS_BIGENDIAN
if (channels != 3 && depth == 16)
needs_reorder = 0;
if (channels == 3 && depth == 16 && !dev->model->is_cis &&
dev->model->line_mode_color_order == COLOR_ORDER_RGB)
needs_reorder = 0;
#endif
if (channels == 3 && depth == 8 && !dev->model->is_cis &&
dev->model->line_mode_color_order == COLOR_ORDER_RGB)
needs_reorder = 0;
needs_ccd = dev->current_setup.max_shift > 0;
needs_shrink = dev->settings.requested_pixels != src_pixels;
needs_reverse = depth == 1;
DBG(DBG_info, "%s: using filters:%s%s%s%s\n", __func__,
needs_reorder ? " reorder" : "",
needs_ccd ? " ccd" : "",
needs_shrink ? " shrink" : "",
needs_reverse ? " reverse" : "");
DBG(DBG_info, "%s: frontend requested %lu bytes\n", __func__, (u_long) * len);
DBG(DBG_info, "%s: bytes_to_read=%lu, total_bytes_read=%lu\n", __func__,
@ -3778,8 +3699,7 @@ Problems with the first approach:
src_buffer = &(dev->read_buffer);
/* maybe reorder components/bytes */
if (needs_reorder)
{
if (dev->session.pipeline_needs_reorder) {
if (depth == 1) {
throw SaneException("Can't reorder single bit data\n");
}
@ -3808,14 +3728,17 @@ Problems with the first approach:
{
step_1_mode = 0;
if (depth == 16)
step_1_mode |= 1;
if (depth == 16) {
step_1_mode |= 1;
}
if (dev->model->is_cis)
step_1_mode |= 2;
if (dev->model->is_cis) {
step_1_mode |= 2;
}
if (dev->model->line_mode_color_order == COLOR_ORDER_BGR)
step_1_mode |= 4;
if (dev->model->line_mode_color_order == ColorOrder::BGR) {
step_1_mode |= 4;
}
switch (step_1_mode)
{
@ -3870,8 +3793,8 @@ Problems with the first approach:
src_buffer = dst_buffer;
}
/* maybe reverse effects of ccd layout */
if (needs_ccd)
// maybe reverse effects of ccd layout
if (dev->session.pipeline_needs_ccd)
{
// should not happen with depth == 1.
if (depth == 1) {
@ -3920,9 +3843,8 @@ Problems with the first approach:
src_buffer = dst_buffer;
}
/* maybe shrink(or enlarge) lines */
if (needs_shrink)
{
// maybe shrink(or enlarge) lines
if (dev->session.pipeline_needs_shrink) {
dst_buffer = &(dev->out_buffer);
@ -3975,8 +3897,7 @@ Problems with the first approach:
bytes = *len;
work_buffer_src = src_buffer->get_read_pos();
if (needs_reverse)
{
if (dev->session.pipeline_needs_reverse) {
genesys_reverse_bits(work_buffer_src, destination, bytes);
*len = bytes;
}
@ -5549,7 +5470,6 @@ sane_open_impl(SANE_String_Const devicename, SANE_Handle * handle)
s->dev->parking = SANE_FALSE;
s->dev->read_active = SANE_FALSE;
s->dev->force_calibration = 0;
s->dev->line_interp = 0;
s->dev->line_count = 0;
s->dev->binary=NULL;

Wyświetl plik

@ -152,7 +152,7 @@ struct Genesys_Model
SANE_Int ld_shift_b = 0;
// Order of the CCD/CIS colors
Genesys_Color_Order line_mode_color_order = COLOR_ORDER_RGB;
ColorOrder line_mode_color_order = ColorOrder::RGB;
// Is this a CIS or CCD scanner?
SANE_Bool is_cis = false;
@ -238,6 +238,11 @@ struct Genesys_Device
Genesys_Register_Set calib_reg;
Genesys_Settings settings;
Genesys_Frontend frontend, frontend_initial;
// whether the frontend is initialized. This is currently used just to preserve historical
// behavior
bool frontend_is_init = false;
Genesys_Gpo gpo;
Genesys_Motor motor;
uint8_t control[6] = {};
@ -314,8 +319,7 @@ struct Genesys_Device
SANE_Int ld_shift_g = 0;
// used blue line-distance shift
SANE_Int ld_shift_b = 0;
// number of lines used in line interpolation
int line_interp = 0;
// number of scan lines used during scan
int line_count = 0;

Wyświetl plik

@ -110,12 +110,6 @@ inline void serialize(std::ostream& str, ColorFilter& x)
serialize(str, value);
}
enum Genesys_Color_Order
{
COLOR_ORDER_RGB,
COLOR_ORDER_BGR
};
enum class ColorOrder
{
RGB,

Wyświetl plik

@ -947,15 +947,11 @@ static void gl124_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
dev->deseg_curr_byte = 0;
dev->line_count = 0;
dev->line_interp = 0;
DBG (DBG_io2, "%s: pixels =%d\n", __func__, session.optical_pixels);
DBG (DBG_io2, "%s: depth =%d\n", __func__, session.params.depth);
DBG (DBG_io2, "%s: dev->line_interp=%lu\n", __func__, (unsigned long)dev->line_interp);
// BUG: we shouldn't multiply by channels here
dev->oe_buffer.clear();
dev->oe_buffer.alloc(session.output_line_bytes_raw * session.params.channels);
build_image_pipeline(dev, session);
// MAXWD is expressed in 2 words unit

Wyświetl plik

@ -751,6 +751,7 @@ static void gl843_set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint
{
DBG(DBG_proc, "%s(): setting DAC %u\n", __func__, dev->model->dac_type);
dev->frontend = dev->frontend_initial;
dev->frontend_is_init = true;
}
// check analog frontend type
@ -767,9 +768,8 @@ static void gl843_set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint
for (i = 1; i <= 3; i++)
{
// FIXME: BUG: we should initialize dev->frontend before first use. Right now it's
// initialized during genesys_coarse_calibration()
if (dev->frontend.regs.empty()) {
// FIXME: the check below is just historical artifact, we can remove it when convenient
if (!dev->frontend_is_init) {
sanei_genesys_fe_write_data(dev, i, 0x00);
} else {
sanei_genesys_fe_write_data(dev, i, dev->frontend.regs.get_value(0x00 + i));
@ -781,8 +781,8 @@ static void gl843_set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint
for (i = 0; i < 3; i++)
{
// FIXME: BUG: see above
if (dev->frontend.regs.empty()) {
// FIXME: the check below is just historical artifact, we can remove it when convenient
if (!dev->frontend_is_init) {
sanei_genesys_fe_write_data(dev, 0x20 + i, 0x00);
} else {
sanei_genesys_fe_write_data(dev, 0x20 + i, dev->frontend.get_offset(i));
@ -793,8 +793,8 @@ static void gl843_set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint
{
for (i = 0; i < 3; i++)
{
// FIXME: BUG: see above
if (dev->frontend.regs.empty()) {
// FIXME: the check below is just historical artifact, we can remove it when convenient
if (!dev->frontend_is_init) {
sanei_genesys_fe_write_data(dev, 0x24 + i, 0x00);
} else {
sanei_genesys_fe_write_data(dev, 0x24 + i, dev->frontend.regs.get_value(0x24 + i));
@ -804,8 +804,8 @@ static void gl843_set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint
for (i = 0; i < 3; i++)
{
// FIXME: BUG: see above
if (dev->frontend.regs.empty()) {
// FIXME: the check below is just historical artifact, we can remove it when convenient
if (!dev->frontend_is_init) {
sanei_genesys_fe_write_data(dev, 0x28 + i, 0x00);
} else {
sanei_genesys_fe_write_data(dev, 0x28 + i, dev->frontend.get_gain(i));
@ -1301,8 +1301,7 @@ static void gl843_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens
dev->out_buffer.clear();
dev->out_buffer.alloc(session.buffer_size_out);
dev->oe_buffer.clear();
dev->oe_buffer.alloc(session.output_line_bytes_raw * 2);
build_image_pipeline(dev, session);
dev->read_bytes_left_after_deseg = session.output_line_bytes * session.output_line_count;

Wyświetl plik

@ -808,7 +808,6 @@ static void gl846_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
}
dev->deseg_curr_byte = 0;
dev->line_interp = 0;
unsigned dpiset = session.params.xres * ccd_pixels_per_system_pixel;
reg->set16(REG_DPISET, dpiset);
@ -822,9 +821,7 @@ static void gl846_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
DBG (DBG_io2, "%s: pixels =%d\n", __func__, session.optical_pixels);
DBG (DBG_io2, "%s: depth =%d\n", __func__, session.params.depth);
// BUG: we shouldn't multiply by channels here
dev->oe_buffer.clear();
dev->oe_buffer.alloc(session.output_line_bytes_raw * session.params.channels);
build_image_pipeline(dev, session);
/* MAXWD is expressed in 4 words unit */
// BUG: we shouldn't multiply by channels here

Wyświetl plik

@ -825,7 +825,6 @@ static void gl847_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
}
dev->deseg_curr_byte = 0;
dev->line_interp = 0;
unsigned dpiset = session.params.xres * ccd_pixels_per_system_pixel;
reg->set16(REG_DPISET, dpiset);
@ -839,9 +838,7 @@ static void gl847_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
DBG (DBG_io2, "%s: pixels =%d\n", __func__, session.optical_pixels);
DBG (DBG_io2, "%s: depth =%d\n", __func__, session.params.depth);
// BUG: we shouldn't multiply by channels here
dev->oe_buffer.clear();
dev->oe_buffer.alloc(session.output_line_bytes_raw * session.params.channels);
build_image_pipeline(dev, session);
/* MAXWD is expressed in 4 words unit */
// BUG: we shouldn't multiply by channels here

Wyświetl plik

@ -1204,6 +1204,35 @@ void compute_session_buffer_sizes(AsicType asic, ScanSession& s)
}
}
void compute_session_pipeline(const Genesys_Device* dev, ScanSession& s)
{
auto channels = s.params.channels;
auto depth = s.params.depth;
s.pipeline_needs_reorder = true;
if (channels != 3 && depth != 16) {
s.pipeline_needs_reorder = false;
}
#ifndef WORDS_BIGENDIAN
if (channels != 3 && depth == 16) {
s.pipeline_needs_reorder = false;
}
if (channels == 3 && depth == 16 && !dev->model->is_cis &&
dev->model->line_mode_color_order == ColorOrder::RGB)
{
s.pipeline_needs_reorder = false;
}
#endif
if (channels == 3 && depth == 8 && !dev->model->is_cis &&
dev->model->line_mode_color_order == ColorOrder::RGB)
{
s.pipeline_needs_reorder = false;
}
s.pipeline_needs_ccd = s.max_color_shift_lines + s.num_staggered_lines > 0;
s.pipeline_needs_shrink = dev->settings.requested_pixels != s.output_pixels;
s.pipeline_needs_reverse = depth == 1;
}
void compute_session(Genesys_Device* dev, ScanSession& s, const Genesys_Sensor& sensor)
{
DBG_HELPER(dbg);
@ -1385,6 +1414,34 @@ void compute_session(Genesys_Device* dev, ScanSession& s, const Genesys_Sensor&
}
compute_session_buffer_sizes(dev->model->asic_type, s);
compute_session_pipeline(dev, s);
}
static std::size_t get_usb_buffer_read_size(AsicType asic, const ScanSession& session)
{
switch (asic) {
case AsicType::GL646:
// buffer not used on this chip set
return 1;
case AsicType::GL124:
case AsicType::GL846:
case AsicType::GL847:
// BUG: we shouldn't multiply by channels here
return session.output_line_bytes_raw * session.params.channels;
case AsicType::GL843:
return session.output_line_bytes_raw * 2;
default:
throw SaneException("Unknown asic type");
}
}
void build_image_pipeline(Genesys_Device* dev, const ScanSession& session)
{
dev->oe_buffer.clear();
dev->oe_buffer.alloc(get_usb_buffer_read_size(dev->model->asic_type, session));
}
std::uint8_t compute_frontend_gain_wolfson(float value, float target_value)
@ -2138,6 +2195,11 @@ void debug_dump(unsigned level, const ScanSession& session)
DBG(level, " buffer_size_read : %zu\n", session.buffer_size_lines);
DBG(level, " buffer_size_shrink : %zu\n", session.buffer_size_shrink);
DBG(level, " buffer_size_out : %zu\n", session.buffer_size_out);
DBG(level, " filters:%s%s%s%s\n",
session.pipeline_needs_reorder ? " reorder" : "",
session.pipeline_needs_ccd ? " ccd" : "",
session.pipeline_needs_shrink ? " shrink" : "",
session.pipeline_needs_reverse ? " reverse" : "");
debug_dump(level, session.params);
}

Wyświetl plik

@ -638,6 +638,8 @@ extern void sanei_genesys_generate_gamma_buffer(Genesys_Device* dev,
void compute_session(Genesys_Device* dev, ScanSession& s, const Genesys_Sensor& sensor);
void build_image_pipeline(Genesys_Device* dev, const ScanSession& session);
void genesys_fill_segmented_buffer(Genesys_Device* dev, uint8_t* work_buffer_dst, size_t size);
std::uint8_t compute_frontend_gain(float value, float target_value,

Wyświetl plik

@ -294,6 +294,12 @@ struct ScanSession {
// whether to enable ledadd functionality
bool enable_ledadd = false;
// what pipeline modifications are needed
bool pipeline_needs_reorder = false;
bool pipeline_needs_ccd = false;
bool pipeline_needs_shrink = false;
bool pipeline_needs_reverse = false;
void assert_computed() const
{
if (!computed) {

Wyświetl plik

@ -97,7 +97,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_g = 8;
model.ld_shift_b = 16;
model.line_mode_color_order = COLOR_ORDER_BGR;
model.line_mode_color_order = ColorOrder::BGR;
model.is_cis = SANE_FALSE;
model.is_sheetfed = SANE_FALSE;
@ -149,7 +149,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_g = 0;
model.ld_shift_b = 0;
model.line_mode_color_order = COLOR_ORDER_RGB;
model.line_mode_color_order = ColorOrder::RGB;
model.is_cis = SANE_TRUE;
model.is_sheetfed = SANE_FALSE;
@ -208,7 +208,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_g = 8;
model.ld_shift_b = 16;
model.line_mode_color_order = COLOR_ORDER_RGB;
model.line_mode_color_order = ColorOrder::RGB;
model.is_cis = SANE_FALSE;
model.is_sheetfed = SANE_FALSE;
@ -263,7 +263,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_g = 24;
model.ld_shift_b = 48;
model.line_mode_color_order = COLOR_ORDER_RGB;
model.line_mode_color_order = ColorOrder::RGB;
model.is_cis = SANE_FALSE;
model.is_sheetfed = SANE_FALSE;
@ -318,7 +318,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_r = 0;
model.ld_shift_g = 24;
model.ld_shift_b = 48;
model.line_mode_color_order = COLOR_ORDER_RGB;
model.line_mode_color_order = ColorOrder::RGB;
model.is_cis = SANE_FALSE;
model.is_sheetfed = SANE_FALSE;
@ -375,7 +375,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_g = 24;
model.ld_shift_b = 48;
model.line_mode_color_order = COLOR_ORDER_RGB;
model.line_mode_color_order = ColorOrder::RGB;
model.is_cis = SANE_FALSE;
model.is_sheetfed = SANE_FALSE;
@ -432,7 +432,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_g = 24;
model.ld_shift_b = 48;
model.line_mode_color_order = COLOR_ORDER_RGB;
model.line_mode_color_order = ColorOrder::RGB;
model.is_cis = SANE_FALSE;
model.is_sheetfed = SANE_FALSE;
@ -491,7 +491,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_g = 24;
model.ld_shift_b = 48;
model.line_mode_color_order = COLOR_ORDER_RGB;
model.line_mode_color_order = ColorOrder::RGB;
model.is_cis = SANE_FALSE;
model.is_sheetfed = SANE_FALSE;
@ -552,7 +552,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_g = 48;
model.ld_shift_b = 96;
model.line_mode_color_order = COLOR_ORDER_RGB;
model.line_mode_color_order = ColorOrder::RGB;
model.is_cis = SANE_FALSE;
model.is_sheetfed = SANE_FALSE;
@ -613,7 +613,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_g = 0;
model.ld_shift_b = 0;
model.line_mode_color_order = COLOR_ORDER_RGB;
model.line_mode_color_order = ColorOrder::RGB;
model.is_cis = SANE_TRUE;
model.is_sheetfed = SANE_FALSE;
@ -672,7 +672,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_r = 0;
model.ld_shift_g = 0;
model.ld_shift_b = 0;
model.line_mode_color_order = COLOR_ORDER_RGB;
model.line_mode_color_order = ColorOrder::RGB;
model.is_cis = SANE_TRUE;
model.is_sheetfed = SANE_FALSE;
@ -730,7 +730,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_r = 0;
model.ld_shift_g = 0;
model.ld_shift_b = 0;
model.line_mode_color_order = COLOR_ORDER_RGB;
model.line_mode_color_order = ColorOrder::RGB;
model.is_cis = SANE_TRUE;
model.is_sheetfed = SANE_FALSE;
model.ccd_type = CIS_CANONLIDE120;
@ -788,7 +788,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_g = 0;
model.ld_shift_b = 0;
model.line_mode_color_order = COLOR_ORDER_RGB;
model.line_mode_color_order = ColorOrder::RGB;
model.is_cis = SANE_TRUE;
model.is_sheetfed = SANE_FALSE;
@ -848,7 +848,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_g = 0;
model.ld_shift_b = 0;
model.line_mode_color_order = COLOR_ORDER_RGB;
model.line_mode_color_order = ColorOrder::RGB;
model.is_cis = SANE_TRUE;
model.is_sheetfed = SANE_FALSE;
model.ccd_type = CIS_CANONLIDE220;
@ -907,7 +907,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_g = 0;
model.ld_shift_b = 0;
model.line_mode_color_order = COLOR_ORDER_RGB;
model.line_mode_color_order = ColorOrder::RGB;
model.is_cis = SANE_TRUE;
model.is_sheetfed = SANE_FALSE;
@ -966,7 +966,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_g = 0;
model.ld_shift_b = 0;
model.line_mode_color_order = COLOR_ORDER_RGB;
model.line_mode_color_order = ColorOrder::RGB;
model.is_cis = SANE_TRUE;
model.is_sheetfed = SANE_FALSE;
@ -1026,7 +1026,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_g = 0;
model.ld_shift_b = 0;
model.line_mode_color_order = COLOR_ORDER_RGB;
model.line_mode_color_order = ColorOrder::RGB;
model.is_cis = SANE_TRUE;
model.is_sheetfed = SANE_FALSE;
model.ccd_type = CIS_CANONLIDE200;
@ -1084,7 +1084,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_r = 0;
model.ld_shift_g = 0;
model.ld_shift_b = 0;
model.line_mode_color_order = COLOR_ORDER_RGB;
model.line_mode_color_order = ColorOrder::RGB;
model.is_cis = SANE_TRUE;
model.is_sheetfed = SANE_FALSE;
@ -1143,7 +1143,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_g = 0;
model.ld_shift_b = 0;
model.line_mode_color_order = COLOR_ORDER_RGB;
model.line_mode_color_order = ColorOrder::RGB;
model.is_cis = SANE_TRUE;
model.is_sheetfed = SANE_FALSE;
@ -1205,7 +1205,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_g = 8;
model.ld_shift_b = 0;
model.line_mode_color_order = COLOR_ORDER_RGB;
model.line_mode_color_order = ColorOrder::RGB;
model.is_cis = SANE_FALSE;
model.is_sheetfed = SANE_FALSE;
model.ccd_type = CCD_HP2300;
@ -1262,7 +1262,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_g = 24;
model.ld_shift_b = 48;
model.line_mode_color_order = COLOR_ORDER_RGB;
model.line_mode_color_order = ColorOrder::RGB;
model.is_cis = SANE_FALSE;
model.is_sheetfed = SANE_FALSE;
@ -1320,7 +1320,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_g = 0;
model.ld_shift_b = 0;
model.line_mode_color_order = COLOR_ORDER_RGB;
model.line_mode_color_order = ColorOrder::RGB;
model.is_cis = SANE_TRUE;
model.is_sheetfed = SANE_TRUE;
@ -1377,7 +1377,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_g = 24;
model.ld_shift_b = 48;
model.line_mode_color_order = COLOR_ORDER_RGB;
model.line_mode_color_order = ColorOrder::RGB;
model.is_cis = SANE_FALSE;
model.is_sheetfed = SANE_FALSE;
@ -1435,7 +1435,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_g = 8;
model.ld_shift_b = 16;
model.line_mode_color_order = COLOR_ORDER_BGR;
model.line_mode_color_order = ColorOrder::BGR;
model.is_cis = SANE_FALSE;
model.is_sheetfed = SANE_FALSE;
@ -1486,7 +1486,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_g = 8;
model.ld_shift_b = 16;
model.line_mode_color_order = COLOR_ORDER_BGR;
model.line_mode_color_order = ColorOrder::BGR;
model.is_cis = SANE_FALSE;
model.is_sheetfed = SANE_FALSE;
@ -1541,7 +1541,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_r = 48;
model.ld_shift_g = 24;
model.ld_shift_b = 0;
model.line_mode_color_order = COLOR_ORDER_RGB;
model.line_mode_color_order = ColorOrder::RGB;
model.is_cis = SANE_FALSE;
model.is_sheetfed = SANE_FALSE;
@ -1603,7 +1603,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_g = 0;
model.ld_shift_b = 0;
model.line_mode_color_order = COLOR_ORDER_RGB;
model.line_mode_color_order = ColorOrder::RGB;
model.is_cis = SANE_TRUE;
model.is_sheetfed = SANE_TRUE;
@ -1658,7 +1658,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_g = 0;
model.ld_shift_b = 0;
model.line_mode_color_order = COLOR_ORDER_RGB;
model.line_mode_color_order = ColorOrder::RGB;
model.is_cis = SANE_TRUE;
model.is_sheetfed = SANE_TRUE;
@ -1713,7 +1713,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_g = 0;
model.ld_shift_b = 0;
model.line_mode_color_order = COLOR_ORDER_RGB;
model.line_mode_color_order = ColorOrder::RGB;
model.is_cis = SANE_TRUE;
model.is_sheetfed = SANE_TRUE;
@ -1768,7 +1768,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_g = 0;
model.ld_shift_b = 0;
model.line_mode_color_order = COLOR_ORDER_RGB;
model.line_mode_color_order = ColorOrder::RGB;
model.is_cis = SANE_TRUE;
model.is_sheetfed = SANE_TRUE;
@ -1824,7 +1824,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_g = 0;
model.ld_shift_b = 0;
model.line_mode_color_order = COLOR_ORDER_RGB;
model.line_mode_color_order = ColorOrder::RGB;
model.is_cis = SANE_TRUE;
model.is_sheetfed = SANE_TRUE;
@ -1879,7 +1879,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_g = 0;
model.ld_shift_b = 0;
model.line_mode_color_order = COLOR_ORDER_RGB;
model.line_mode_color_order = ColorOrder::RGB;
model.is_cis = SANE_TRUE;
model.is_sheetfed = SANE_TRUE;
@ -1935,7 +1935,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_r = 0;
model.ld_shift_g = 0;
model.ld_shift_b = 0;
model.line_mode_color_order = COLOR_ORDER_RGB;
model.line_mode_color_order = ColorOrder::RGB;
model.is_cis = SANE_TRUE;
model.is_sheetfed = SANE_TRUE;
@ -1990,7 +1990,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_g = 0;
model.ld_shift_b = 0;
model.line_mode_color_order = COLOR_ORDER_RGB;
model.line_mode_color_order = ColorOrder::RGB;
model.is_cis = SANE_TRUE;
model.is_sheetfed = SANE_TRUE;
@ -2047,7 +2047,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_g = 0;
model.ld_shift_b = 0;
model.line_mode_color_order = COLOR_ORDER_RGB;
model.line_mode_color_order = ColorOrder::RGB;
model.is_cis = SANE_TRUE;
model.is_sheetfed = SANE_TRUE;
@ -2103,7 +2103,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_g = 0;
model.ld_shift_b = 0;
model.line_mode_color_order = COLOR_ORDER_RGB;
model.line_mode_color_order = ColorOrder::RGB;
model.is_cis = SANE_TRUE;
model.is_sheetfed = SANE_TRUE;
@ -2159,7 +2159,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_r = 48;
model.ld_shift_g = 24;
model.ld_shift_b = 0;
model.line_mode_color_order = COLOR_ORDER_RGB;
model.line_mode_color_order = ColorOrder::RGB;
model.is_cis = SANE_FALSE;
model.is_sheetfed = SANE_FALSE;
@ -2220,7 +2220,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_r = 48;
model.ld_shift_g = 24;
model.ld_shift_b = 0;
model.line_mode_color_order = COLOR_ORDER_RGB;
model.line_mode_color_order = ColorOrder::RGB;
model.is_cis = SANE_FALSE;
model.is_sheetfed = SANE_FALSE;
@ -2282,7 +2282,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_g = 0;
model.ld_shift_b = 0;
model.line_mode_color_order = COLOR_ORDER_RGB;
model.line_mode_color_order = ColorOrder::RGB;
model.is_cis = SANE_TRUE;
model.is_sheetfed = SANE_TRUE;
@ -2337,7 +2337,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_g = 24;
model.ld_shift_b = 48;
model.line_mode_color_order = COLOR_ORDER_RGB;
model.line_mode_color_order = ColorOrder::RGB;
model.is_cis = SANE_FALSE;
model.is_sheetfed = SANE_FALSE;
@ -2395,7 +2395,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_g = 0;
model.ld_shift_b = 0;
model.line_mode_color_order = COLOR_ORDER_RGB;
model.line_mode_color_order = ColorOrder::RGB;
model.is_cis = SANE_FALSE;
model.is_sheetfed = SANE_FALSE;
@ -2455,7 +2455,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_g = 24;
model.ld_shift_b = 48;
model.line_mode_color_order = COLOR_ORDER_RGB;
model.line_mode_color_order = ColorOrder::RGB;
model.is_cis = SANE_FALSE;
model.is_sheetfed = SANE_FALSE;
@ -2510,7 +2510,7 @@ void genesys_init_usb_device_tables()
model.ld_shift_g = 24;
model.ld_shift_b = 48;
model.line_mode_color_order = COLOR_ORDER_RGB;
model.line_mode_color_order = ColorOrder::RGB;
model.is_cis = SANE_FALSE;
model.is_sheetfed = SANE_FALSE;