Merge branch 'genesys-warmup' into 'master'

genesys: Fix and enable lamp warmup before first scan

See merge request sane-project/backends!396
merge-requests/213/head^2
Povilas Kanapickas 2020-04-09 21:13:27 +00:00
commit 11cace00a8
16 zmienionych plików z 160 dodań i 223 usunięć

Wyświetl plik

@ -67,8 +67,7 @@ public:
virtual void init(Genesys_Device* dev) const = 0;
virtual void init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor& sensor,
Genesys_Register_Set* regs, int* channels,
int* total_size) const = 0;
Genesys_Register_Set* regs) const = 0;
virtual void init_regs_for_shading(Genesys_Device* dev, const Genesys_Sensor& sensor,
Genesys_Register_Set& regs) const = 0;

Wyświetl plik

@ -474,8 +474,8 @@ enum class ModelFlag : unsigned
// use 14-bit gamma table instead of 12-bit
GAMMA_14BIT = 1 << 1,
// skip lamp warmup (genesys_warmup())
SKIP_WARMUP = 1 << 4,
// perform lamp warmup
WARMUP = 1 << 4,
// repark head and check for lock by moving without scanning
REPARK = 1 << 7,

Wyświetl plik

@ -3428,24 +3428,25 @@ static void genesys_warmup_lamp(Genesys_Device* dev)
{
DBG_HELPER(dbg);
unsigned seconds = 0;
int pixel;
int channels, total_size;
double first_average = 0;
double second_average = 0;
int difference = 255;
int lines = 3;
const auto& sensor = sanei_genesys_find_sensor_any(dev);
dev->cmd_set->init_regs_for_warmup(dev, sensor, &dev->reg, &channels, &total_size);
dev->cmd_set->init_regs_for_warmup(dev, sensor, &dev->reg);
dev->interface->write_registers(dev->reg);
auto total_pixels = dev->session.output_pixels;
auto total_size = dev->session.output_line_bytes;
auto channels = dev->session.params.channels;
auto lines = dev->session.output_line_count;
std::vector<uint8_t> first_line(total_size);
std::vector<uint8_t> second_line(total_size);
do
{
DBG(DBG_info, "%s: one more loop\n", __func__);
do {
DBG(DBG_info, "%s: one more loop\n", __func__);
first_line = second_line;
dev->cmd_set->begin_scan(dev, sensor, &dev->reg, false);
if (is_testing_mode()) {
@ -3456,72 +3457,45 @@ static void genesys_warmup_lamp(Genesys_Device* dev)
wait_until_buffer_non_empty(dev);
try {
sanei_genesys_read_data_from_scanner(dev, first_line.data(), total_size);
} catch (...) {
// FIXME: document why this retry is here
sanei_genesys_read_data_from_scanner(dev, first_line.data(), total_size);
}
dev->cmd_set->end_scan(dev, &dev->reg, true);
dev->interface->sleep_ms(1000);
seconds++;
dev->cmd_set->begin_scan(dev, sensor, &dev->reg, false);
wait_until_buffer_non_empty(dev);
sanei_genesys_read_data_from_scanner(dev, second_line.data(), total_size);
dev->cmd_set->end_scan(dev, &dev->reg, true);
/* compute difference between the two scans */
for (pixel = 0; pixel < total_size; pixel++)
{
// compute difference between the two scans
double first_average = 0;
double second_average = 0;
for (unsigned pixel = 0; pixel < total_size; pixel++) {
// 16 bit data
if (dev->session.params.depth == 16) {
first_average += (first_line[pixel] + first_line[pixel + 1] * 256);
second_average += (second_line[pixel] + second_line[pixel + 1] * 256);
pixel++;
}
else
{
first_average += first_line[pixel];
second_average += second_line[pixel];
}
}
if (dev->session.params.depth == 16) {
first_average /= pixel;
second_average /= pixel;
difference = static_cast<int>(std::fabs(first_average - second_average));
DBG(DBG_info, "%s: average = %.2f, diff = %.3f\n", __func__,
100 * ((second_average) / (256 * 256)),
100 * (difference / second_average));
first_average += (first_line[pixel] + first_line[pixel + 1] * 256);
second_average += (second_line[pixel] + second_line[pixel + 1] * 256);
pixel++;
} else {
first_average += first_line[pixel];
second_average += second_line[pixel];
}
}
if (second_average > (100 * 256)
&& (difference / second_average) < 0.002)
break;
}
else
{
first_average /= pixel;
second_average /= pixel;
if (DBG_LEVEL >= DBG_data)
{
sanei_genesys_write_pnm_file("gl_warmup1.pnm", first_line.data(), 8, channels,
total_size / (lines * channels), lines);
sanei_genesys_write_pnm_file("gl_warmup2.pnm", second_line.data(), 8, channels,
total_size / (lines * channels), lines);
}
DBG(DBG_info, "%s: average 1 = %.2f, average 2 = %.2f\n", __func__, first_average,
second_average);
/* if delta below 15/255 ~= 5.8%, lamp is considred warm enough */
if (fabs (first_average - second_average) < 15
&& second_average > 55)
break;
}
first_average /= total_pixels;
second_average /= total_pixels;
if (DBG_LEVEL >= DBG_data) {
sanei_genesys_write_pnm_file("gl_warmup1.pnm", first_line.data(),
dev->session.params.depth, channels,
total_size / (lines * channels), lines);
sanei_genesys_write_pnm_file("gl_warmup2.pnm", second_line.data(),
dev->session.params.depth, channels,
total_size / (lines * channels), lines);
}
DBG(DBG_info, "%s: average 1 = %.2f, average 2 = %.2f\n", __func__, first_average,
second_average);
if (second_average > 0 &&
std::fabs(first_average - second_average) / second_average < 0.005)
{
break;
}
/* sleep another second before next loop */
dev->interface->sleep_ms(1000);
seconds++;
} while (seconds < WARMUP_TIME);
@ -3555,9 +3529,15 @@ static void genesys_start_scan(Genesys_Device* dev, bool lamp_off)
/* wait for lamp warmup : until a warmup for TRANSPARENCY is designed, skip
* it when scanning from XPA. */
if (!has_flag(dev->model->flags, ModelFlag::SKIP_WARMUP) &&
(dev->settings.scan_method == ScanMethod::FLATBED))
if (has_flag(dev->model->flags, ModelFlag::WARMUP) &&
(dev->settings.scan_method != ScanMethod::TRANSPARENCY_INFRARED))
{
if (dev->settings.scan_method == ScanMethod::TRANSPARENCY ||
dev->settings.scan_method == ScanMethod::TRANSPARENCY_INFRARED)
{
dev->cmd_set->move_to_ta(dev);
}
genesys_warmup_lamp(dev);
}

Wyświetl plik

@ -1418,16 +1418,23 @@ void CommandSetGl124::coarse_gain_calibration(Genesys_Device* dev, const Genesys
// wait for lamp warmup by scanning the same line until difference
// between 2 scans is below a threshold
void CommandSetGl124::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor& sensor,
Genesys_Register_Set* reg, int* channels,
int* total_size) const
Genesys_Register_Set* reg) const
{
DBG_HELPER(dbg);
int num_pixels;
*channels=3;
*reg = dev->reg;
auto flags = ScanFlag::DISABLE_SHADING |
ScanFlag::DISABLE_GAMMA |
ScanFlag::SINGLE_LINE |
ScanFlag::IGNORE_STAGGER_OFFSET |
ScanFlag::IGNORE_COLOR_OFFSET;
if (dev->settings.scan_method == ScanMethod::TRANSPARENCY ||
dev->settings.scan_method == ScanMethod::TRANSPARENCY_INFRARED)
{
flags |= ScanFlag::USE_XPA;
}
ScanSession session;
session.params.xres = sensor.optical_res;
session.params.yres = dev->motor.base_ydpi;
@ -1435,24 +1442,17 @@ void CommandSetGl124::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Se
session.params.starty = 0;
session.params.pixels = dev->model->x_size_calib_mm * sensor.optical_res / MM_PER_INCH / 2;
session.params.lines = 1;
session.params.depth = 8;
session.params.channels = *channels;
session.params.depth = dev->model->bpp_color_values.front();
session.params.channels = 3;
session.params.scan_method = dev->settings.scan_method;
session.params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS;
session.params.color_filter = dev->settings.color_filter;
session.params.flags = ScanFlag::DISABLE_SHADING |
ScanFlag::DISABLE_GAMMA |
ScanFlag::SINGLE_LINE |
ScanFlag::IGNORE_STAGGER_OFFSET |
ScanFlag::IGNORE_COLOR_OFFSET;
session.params.flags = flags;
compute_session(dev, session, sensor);
init_regs_for_scan_session(dev, sensor, reg, session);
num_pixels = session.output_pixels;
*total_size = num_pixels * 3 * 1; /* colors * bytes_per_color * scan lines */
sanei_genesys_set_motor_power(*reg, false);
}

Wyświetl plik

@ -93,8 +93,7 @@ public:
void init(Genesys_Device* dev) const override;
void init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor& sensor,
Genesys_Register_Set* regs, int* channels,
int* total_size) const override;
Genesys_Register_Set* regs) const override;
void init_regs_for_shading(Genesys_Device* dev, const Genesys_Sensor& sensor,
Genesys_Register_Set& regs) const override;

Wyświetl plik

@ -2458,14 +2458,12 @@ void CommandSetGl646::coarse_gain_calibration(Genesys_Device* dev, const Genesys
*
*/
void CommandSetGl646::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor& sensor,
Genesys_Register_Set* local_reg, int* channels,
int* total_size) const
Genesys_Register_Set* local_reg) const
{
DBG_HELPER(dbg);
(void) sensor;
Genesys_Settings settings;
int lines;
dev->frontend = dev->frontend_initial;
@ -2483,7 +2481,7 @@ void CommandSetGl646::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Se
settings.pixels = dev->model->x_size_calib_mm * resolution / MM_PER_INCH;
settings.requested_pixels = settings.pixels;
settings.lines = 2;
settings.depth = 8;
settings.depth = dev->model->bpp_gray_values.front();
settings.color_filter = ColorFilter::RED;
settings.disable_interpolation = 0;
@ -2504,11 +2502,6 @@ void CommandSetGl646::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Se
/* turn off motor during this scan */
sanei_genesys_set_motor_power(*local_reg, false);
/* returned value to higher level warmup function */
*channels = 1;
lines = local_reg->get24(REG_LINCNT) + 1;
*total_size = lines * settings.pixels;
// now registers are ok, write them to scanner
gl646_set_fe(dev, local_sensor, AFE_SET, settings.xres);
}

Wyświetl plik

@ -446,8 +446,7 @@ public:
void init(Genesys_Device* dev) const override;
void init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor& sensor,
Genesys_Register_Set* regs, int* channels,
int* total_size) const override;
Genesys_Register_Set* regs) const override;
void init_regs_for_shading(Genesys_Device* dev, const Genesys_Sensor& sensor,
Genesys_Register_Set& regs) const override;

Wyświetl plik

@ -2834,8 +2834,7 @@ void CommandSetGl841::coarse_gain_calibration(Genesys_Device* dev, const Genesys
// wait for lamp warmup by scanning the same line until difference
// between 2 scans is below a threshold
void CommandSetGl841::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor& sensor,
Genesys_Register_Set* local_reg, int* channels,
int* total_size) const
Genesys_Register_Set* local_reg) const
{
DBG_HELPER(dbg);
int num_pixels = 4 * 300;
@ -2849,6 +2848,17 @@ void CommandSetGl841::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Se
dev->frontend.set_offset(1, 0x80);
dev->frontend.set_offset(2, 0x80);
auto flags = ScanFlag::DISABLE_SHADING |
ScanFlag::DISABLE_GAMMA |
ScanFlag::SINGLE_LINE |
ScanFlag::IGNORE_STAGGER_OFFSET |
ScanFlag::IGNORE_COLOR_OFFSET;
if (dev->settings.scan_method == ScanMethod::TRANSPARENCY ||
dev->settings.scan_method == ScanMethod::TRANSPARENCY_INFRARED)
{
flags |= ScanFlag::USE_XPA;
}
ScanSession session;
session.params.xres = sensor.optical_res;
session.params.yres = dev->settings.yres;
@ -2856,27 +2866,16 @@ void CommandSetGl841::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Se
session.params.starty = 0;
session.params.pixels = num_pixels;
session.params.lines = 1;
session.params.depth = 16;
session.params.channels = *channels;
session.params.depth = dev->model->bpp_color_values.front();
session.params.channels = 3;
session.params.scan_method = dev->settings.scan_method;
if (*channels == 3) {
session.params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS;
} else {
session.params.scan_mode = ScanColorMode::GRAY;
}
session.params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS;
session.params.color_filter = dev->settings.color_filter;
session.params.flags = ScanFlag::DISABLE_SHADING |
ScanFlag::DISABLE_GAMMA |
ScanFlag::SINGLE_LINE |
ScanFlag::IGNORE_STAGGER_OFFSET |
ScanFlag::IGNORE_COLOR_OFFSET;
session.params.flags = flags;
compute_session(dev, session, sensor);
init_regs_for_scan_session(dev, sensor, local_reg, session);
num_pixels = session.output_pixels;
*total_size = num_pixels * 3 * 2 * 1; /* colors * bytes_per_color * scan lines */
}
/*

Wyświetl plik

@ -60,8 +60,7 @@ public:
void init(Genesys_Device* dev) const override;
void init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor& sensor,
Genesys_Register_Set* regs, int* channels,
int* total_size) const override;
Genesys_Register_Set* regs) const override;
void init_regs_for_shading(Genesys_Device* dev, const Genesys_Sensor& sensor,
Genesys_Register_Set& regs) const override;

Wyświetl plik

@ -1757,23 +1757,32 @@ void CommandSetGl843::coarse_gain_calibration(Genesys_Device* dev, const Genesys
// wait for lamp warmup by scanning the same line until difference
// between 2 scans is below a threshold
void CommandSetGl843::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor& sensor,
Genesys_Register_Set* reg, int* channels,
int* total_size) const
Genesys_Register_Set* reg) const
{
DBG_HELPER(dbg);
(void) sensor;
*channels=3;
unsigned channels = 3;
unsigned resolution = dev->model->get_resolution_settings(dev->settings.scan_method)
.get_nearest_resolution_x(600);
const auto& calib_sensor = sanei_genesys_find_sensor(dev, resolution, *channels,
const auto& calib_sensor = sanei_genesys_find_sensor(dev, resolution, channels,
dev->settings.scan_method);
unsigned num_pixels = dev->model->x_size_calib_mm * resolution / MM_PER_INCH / 2;
*total_size = num_pixels * 3 * 1;
*reg = dev->reg;
auto flags = ScanFlag::DISABLE_SHADING |
ScanFlag::DISABLE_GAMMA |
ScanFlag::SINGLE_LINE |
ScanFlag::IGNORE_STAGGER_OFFSET |
ScanFlag::IGNORE_COLOR_OFFSET;
if (dev->settings.scan_method == ScanMethod::TRANSPARENCY ||
dev->settings.scan_method == ScanMethod::TRANSPARENCY_INFRARED)
{
flags |= ScanFlag::USE_XPA;
}
ScanSession session;
session.params.xres = resolution;
session.params.yres = resolution;
@ -1781,16 +1790,13 @@ void CommandSetGl843::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Se
session.params.starty = 0;
session.params.pixels = num_pixels;
session.params.lines = 1;
session.params.depth = 8;
session.params.channels = *channels;
session.params.depth = dev->model->bpp_color_values.front();
session.params.channels = channels;
session.params.scan_method = dev->settings.scan_method;
session.params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS;
session.params.color_filter = dev->settings.color_filter;
session.params.flags = ScanFlag::DISABLE_SHADING |
ScanFlag::DISABLE_GAMMA |
ScanFlag::SINGLE_LINE |
ScanFlag::IGNORE_STAGGER_OFFSET |
ScanFlag::IGNORE_COLOR_OFFSET;
session.params.flags = flags;
compute_session(dev, session, calib_sensor);
init_regs_for_scan_session(dev, calib_sensor, reg, session);

Wyświetl plik

@ -60,8 +60,7 @@ public:
void init(Genesys_Device* dev) const override;
void init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor& sensor,
Genesys_Register_Set* regs, int* channels,
int* total_size) const override;
Genesys_Register_Set* regs) const override;
void init_regs_for_shading(Genesys_Device* dev, const Genesys_Sensor& sensor,
Genesys_Register_Set& regs) const override;

Wyświetl plik

@ -1392,14 +1392,11 @@ bool CommandSetGl846::needs_home_before_init_regs_for_scan(Genesys_Device* dev)
}
void CommandSetGl846::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor& sensor,
Genesys_Register_Set* regs, int* channels,
int* total_size) const
Genesys_Register_Set* regs) const
{
(void) dev;
(void) sensor;
(void) regs;
(void) channels;
(void) total_size;
throw SaneException("not implemented");
}

Wyświetl plik

@ -60,8 +60,7 @@ public:
void init(Genesys_Device* dev) const override;
void init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor& sensor,
Genesys_Register_Set* regs, int* channels,
int* total_size) const override;
Genesys_Register_Set* regs) const override;
void init_regs_for_shading(Genesys_Device* dev, const Genesys_Sensor& sensor,
Genesys_Register_Set& regs) const override;

Wyświetl plik

@ -1288,14 +1288,11 @@ bool CommandSetGl847::needs_home_before_init_regs_for_scan(Genesys_Device* dev)
}
void CommandSetGl847::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor& sensor,
Genesys_Register_Set* regs, int* channels,
int* total_size) const
Genesys_Register_Set* regs) const
{
(void) dev;
(void) sensor;
(void) regs;
(void) channels;
(void) total_size;
throw SaneException("not implemented");
}

Wyświetl plik

@ -80,8 +80,7 @@ public:
void init(Genesys_Device* dev) const override;
void init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor& sensor,
Genesys_Register_Set* regs, int* channels,
int* total_size) const override;
Genesys_Register_Set* regs) const override;
void init_regs_for_shading(Genesys_Device* dev, const Genesys_Sensor& sensor,
Genesys_Register_Set& regs) const override;

Wyświetl plik

@ -192,8 +192,7 @@ void genesys_init_usb_device_tables()
model.adc_id = AdcId::CANON_LIDE_35;
model.gpio_id = GpioId::CANON_LIDE_35;
model.motor_id = MotorId::CANON_LIDE_35;
model.flags = ModelFlag::SKIP_WARMUP |
ModelFlag::DARK_WHITE_CALIBRATION |
model.flags = ModelFlag::DARK_WHITE_CALIBRATION |
ModelFlag::CUSTOM_GAMMA;
model.buttons = GENESYS_HAS_SCAN_SW |
GENESYS_HAS_FILE_SW |
@ -247,8 +246,7 @@ void genesys_init_usb_device_tables()
model.adc_id = AdcId::KVSS080;
model.gpio_id = GpioId::KVSS080;
model.motor_id = MotorId::KVSS080;
model.flags = ModelFlag::SKIP_WARMUP |
ModelFlag::CUSTOM_GAMMA;
model.flags = ModelFlag::CUSTOM_GAMMA;
model.buttons = GENESYS_HAS_SCAN_SW;
model.search_lines = 100;
@ -298,8 +296,8 @@ void genesys_init_usb_device_tables()
model.adc_id = AdcId::G4050;
model.gpio_id = GpioId::G4050;
model.motor_id = MotorId::G4050;
model.flags = ModelFlag::SHADING_REPARK |
ModelFlag::SKIP_WARMUP |
model.flags = ModelFlag::WARMUP |
ModelFlag::SHADING_REPARK |
ModelFlag::CUSTOM_GAMMA;
model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_FILE_SW | GENESYS_HAS_COPY_SW;
model.search_lines = 100;
@ -348,7 +346,7 @@ void genesys_init_usb_device_tables()
model.adc_id = AdcId::G4050;
model.gpio_id = GpioId::G4050;
model.motor_id = MotorId::G4050;
model.flags = ModelFlag::SKIP_WARMUP |
model.flags = ModelFlag::WARMUP |
ModelFlag::DARK_CALIBRATION |
ModelFlag::CUSTOM_GAMMA;
model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_FILE_SW | GENESYS_HAS_COPY_SW;
@ -400,7 +398,7 @@ void genesys_init_usb_device_tables()
model.adc_id = AdcId::G4050;
model.gpio_id = GpioId::G4050;
model.motor_id = MotorId::G4050;
model.flags = ModelFlag::SKIP_WARMUP |
model.flags = ModelFlag::WARMUP |
ModelFlag::DARK_CALIBRATION |
ModelFlag::CUSTOM_GAMMA;
model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_FILE_SW | GENESYS_HAS_COPY_SW;
@ -465,7 +463,7 @@ void genesys_init_usb_device_tables()
model.adc_id = AdcId::CANON_4400F;
model.gpio_id = GpioId::CANON_4400F;
model.motor_id = MotorId::CANON_4400F;
model.flags = ModelFlag::SKIP_WARMUP |
model.flags = ModelFlag::WARMUP |
ModelFlag::DARK_CALIBRATION |
ModelFlag::CUSTOM_GAMMA |
ModelFlag::SHADING_REPARK |
@ -537,7 +535,7 @@ void genesys_init_usb_device_tables()
model.adc_id = AdcId::CANON_8400F;
model.gpio_id = GpioId::CANON_8400F;
model.motor_id = MotorId::CANON_8400F;
model.flags = ModelFlag::SKIP_WARMUP |
model.flags = ModelFlag::WARMUP |
ModelFlag::DARK_CALIBRATION |
ModelFlag::CUSTOM_GAMMA |
ModelFlag::SHADING_REPARK;
@ -603,7 +601,7 @@ void genesys_init_usb_device_tables()
model.adc_id = AdcId::CANON_8600F;
model.gpio_id = GpioId::CANON_8600F;
model.motor_id = MotorId::CANON_8600F;
model.flags = ModelFlag::SKIP_WARMUP |
model.flags = ModelFlag::WARMUP |
ModelFlag::DARK_CALIBRATION |
ModelFlag::CUSTOM_GAMMA |
ModelFlag::SHADING_REPARK;
@ -656,8 +654,7 @@ void genesys_init_usb_device_tables()
model.adc_id = AdcId::CANON_LIDE_200;
model.gpio_id = GpioId::CANON_LIDE_200;
model.motor_id = MotorId::CANON_LIDE_100;
model.flags = ModelFlag::SKIP_WARMUP |
ModelFlag::SIS_SENSOR |
model.flags = ModelFlag::SIS_SENSOR |
ModelFlag::DARK_CALIBRATION |
ModelFlag::SHADING_REPARK |
ModelFlag::CUSTOM_GAMMA;
@ -712,8 +709,7 @@ void genesys_init_usb_device_tables()
model.adc_id = AdcId::CANON_LIDE_110;
model.gpio_id = GpioId::CANON_LIDE_110;
model.motor_id = MotorId::CANON_LIDE_110;
model.flags = ModelFlag::SKIP_WARMUP |
ModelFlag::DARK_CALIBRATION |
model.flags = ModelFlag::DARK_CALIBRATION |
ModelFlag::SHADING_REPARK |
ModelFlag::CUSTOM_GAMMA;
model.buttons = GENESYS_HAS_SCAN_SW |
@ -766,8 +762,7 @@ void genesys_init_usb_device_tables()
model.adc_id = AdcId::CANON_LIDE_120;
model.gpio_id = GpioId::CANON_LIDE_120;
model.motor_id = MotorId::CANON_LIDE_120;
model.flags = ModelFlag::SKIP_WARMUP |
ModelFlag::DARK_CALIBRATION |
model.flags = ModelFlag::DARK_CALIBRATION |
ModelFlag::SHADING_REPARK |
ModelFlag::CUSTOM_GAMMA;
model.buttons = GENESYS_HAS_SCAN_SW |
@ -822,8 +817,7 @@ void genesys_init_usb_device_tables()
model.adc_id = AdcId::CANON_LIDE_110;
model.gpio_id = GpioId::CANON_LIDE_210;
model.motor_id = MotorId::CANON_LIDE_210;
model.flags = ModelFlag::SKIP_WARMUP |
ModelFlag::DARK_CALIBRATION |
model.flags = ModelFlag::DARK_CALIBRATION |
ModelFlag::SHADING_REPARK |
ModelFlag::CUSTOM_GAMMA;
model.buttons = GENESYS_HAS_SCAN_SW |
@ -878,8 +872,7 @@ void genesys_init_usb_device_tables()
model.adc_id = AdcId::CANON_LIDE_110;
model.gpio_id = GpioId::CANON_LIDE_210;
model.motor_id = MotorId::CANON_LIDE_210;
model.flags = ModelFlag::SKIP_WARMUP |
ModelFlag::DARK_CALIBRATION |
model.flags = ModelFlag::DARK_CALIBRATION |
ModelFlag::SHADING_REPARK |
ModelFlag::CUSTOM_GAMMA;
model.buttons = GENESYS_HAS_SCAN_SW |
@ -936,7 +929,6 @@ void genesys_init_usb_device_tables()
model.gpio_id = GpioId::CANON_LIDE_200;
model.motor_id = MotorId::CANON_LIDE_200;
model.flags = ModelFlag::UNTESTED |
ModelFlag::SKIP_WARMUP |
ModelFlag::SIS_SENSOR |
ModelFlag::DARK_CALIBRATION |
ModelFlag::CUSTOM_GAMMA;
@ -992,8 +984,7 @@ void genesys_init_usb_device_tables()
model.adc_id = AdcId::CANON_LIDE_700F;
model.gpio_id = GpioId::CANON_LIDE_700F;
model.motor_id = MotorId::CANON_LIDE_700;
model.flags = ModelFlag::SKIP_WARMUP |
ModelFlag::SIS_SENSOR |
model.flags = ModelFlag::SIS_SENSOR |
ModelFlag::DARK_CALIBRATION |
ModelFlag::SHADING_REPARK |
ModelFlag::CUSTOM_GAMMA;
@ -1048,8 +1039,7 @@ void genesys_init_usb_device_tables()
model.adc_id = AdcId::CANON_LIDE_200;
model.gpio_id = GpioId::CANON_LIDE_200;
model.motor_id = MotorId::CANON_LIDE_200;
model.flags = ModelFlag::SKIP_WARMUP |
ModelFlag::SIS_SENSOR |
model.flags = ModelFlag::SIS_SENSOR |
ModelFlag::DARK_CALIBRATION |
ModelFlag::SHADING_REPARK |
ModelFlag::CUSTOM_GAMMA;
@ -1106,8 +1096,7 @@ void genesys_init_usb_device_tables()
model.adc_id = AdcId::CANON_LIDE_35;
model.gpio_id = GpioId::CANON_LIDE_35;
model.motor_id = MotorId::CANON_LIDE_35;
model.flags = ModelFlag::SKIP_WARMUP |
ModelFlag::DARK_WHITE_CALIBRATION |
model.flags = ModelFlag::DARK_WHITE_CALIBRATION |
ModelFlag::CUSTOM_GAMMA;
model.buttons = GENESYS_HAS_COPY_SW |
@ -1162,8 +1151,7 @@ void genesys_init_usb_device_tables()
model.adc_id = AdcId::CANON_LIDE_80;
model.gpio_id = GpioId::CANON_LIDE_80;
model.motor_id = MotorId::CANON_LIDE_80;
model.flags = ModelFlag::SKIP_WARMUP |
ModelFlag::DARK_WHITE_CALIBRATION |
model.flags = ModelFlag::DARK_WHITE_CALIBRATION |
ModelFlag::CUSTOM_GAMMA;
model.buttons = GENESYS_HAS_SCAN_SW |
GENESYS_HAS_FILE_SW |
@ -1217,7 +1205,6 @@ void genesys_init_usb_device_tables()
model.gpio_id = GpioId::HP2300;
model.motor_id = MotorId::HP2300;
model.flags = ModelFlag::GAMMA_14BIT |
ModelFlag::SKIP_WARMUP |
ModelFlag::DARK_CALIBRATION |
ModelFlag::CUSTOM_GAMMA;
model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_COPY_SW;
@ -1271,7 +1258,6 @@ void genesys_init_usb_device_tables()
model.motor_id = MotorId::HP2400;
model.flags = ModelFlag::GAMMA_14BIT |
ModelFlag::DARK_CALIBRATION |
ModelFlag::SKIP_WARMUP |
ModelFlag::CUSTOM_GAMMA;
model.buttons = GENESYS_HAS_COPY_SW | GENESYS_HAS_EMAIL_SW | GENESYS_HAS_SCAN_SW;
model.search_lines = 132;
@ -1324,7 +1310,6 @@ void genesys_init_usb_device_tables()
model.motor_id = MotorId::XP200;
model.flags = ModelFlag::GAMMA_14BIT |
ModelFlag::CUSTOM_GAMMA |
ModelFlag::SKIP_WARMUP |
ModelFlag::DARK_CALIBRATION;
model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE;
model.search_lines = 132;
@ -1375,7 +1360,8 @@ void genesys_init_usb_device_tables()
model.adc_id = AdcId::WOLFSON_HP3670;
model.gpio_id = GpioId::HP3670;
model.motor_id = MotorId::HP3670;
model.flags = ModelFlag::GAMMA_14BIT |
model.flags = ModelFlag::WARMUP |
ModelFlag::GAMMA_14BIT |
ModelFlag::DARK_CALIBRATION |
ModelFlag::CUSTOM_GAMMA;
model.buttons = GENESYS_HAS_COPY_SW | GENESYS_HAS_EMAIL_SW | GENESYS_HAS_SCAN_SW;
@ -1526,7 +1512,8 @@ void genesys_init_usb_device_tables()
model.adc_id = AdcId::WOLFSON_5345;
model.gpio_id = GpioId::MD_5345;
model.motor_id = MotorId::MD_5345;
model.flags = ModelFlag::GAMMA_14BIT |
model.flags = ModelFlag::WARMUP |
ModelFlag::GAMMA_14BIT |
ModelFlag::DARK_CALIBRATION |
ModelFlag::CUSTOM_GAMMA;
model.buttons = GENESYS_HAS_COPY_SW |
@ -1581,8 +1568,7 @@ void genesys_init_usb_device_tables()
model.adc_id = AdcId::WOLFSON_XP300;
model.gpio_id = GpioId::XP300;
model.motor_id = MotorId::XP300;
model.flags = ModelFlag::SKIP_WARMUP |
ModelFlag::DARK_CALIBRATION |
model.flags = ModelFlag::DARK_CALIBRATION |
ModelFlag::CUSTOM_GAMMA;
model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE;
model.search_lines = 400;
@ -1632,8 +1618,7 @@ void genesys_init_usb_device_tables()
model.adc_id = AdcId::WOLFSON_XP300;
model.gpio_id = GpioId::DP665;
model.motor_id = MotorId::DP665;
model.flags = ModelFlag::SKIP_WARMUP |
ModelFlag::DARK_CALIBRATION |
model.flags = ModelFlag::DARK_CALIBRATION |
ModelFlag::CUSTOM_GAMMA;
model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE;
model.search_lines = 400;
@ -1683,8 +1668,7 @@ void genesys_init_usb_device_tables()
model.adc_id = AdcId::WOLFSON_XP300;
model.gpio_id = GpioId::DP665;
model.motor_id = MotorId::ROADWARRIOR;
model.flags = ModelFlag::SKIP_WARMUP |
ModelFlag::CUSTOM_GAMMA |
model.flags = ModelFlag::CUSTOM_GAMMA |
ModelFlag::DARK_CALIBRATION;
model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE;
model.search_lines = 400;
@ -1734,8 +1718,7 @@ void genesys_init_usb_device_tables()
model.adc_id = AdcId::WOLFSON_XP300;
model.gpio_id = GpioId::DP665;
model.motor_id = MotorId::ROADWARRIOR;
model.flags = ModelFlag::SKIP_WARMUP |
ModelFlag::NO_CALIBRATION |
model.flags = ModelFlag::NO_CALIBRATION |
ModelFlag::CUSTOM_GAMMA |
ModelFlag::UNTESTED;
model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW;
@ -1787,8 +1770,7 @@ void genesys_init_usb_device_tables()
model.adc_id = AdcId::WOLFSON_XP300;
model.gpio_id = GpioId::DP665;
model.motor_id = MotorId::ROADWARRIOR;
model.flags = ModelFlag::SKIP_WARMUP |
ModelFlag::CUSTOM_GAMMA |
model.flags = ModelFlag::CUSTOM_GAMMA |
ModelFlag::DARK_CALIBRATION;
model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE;
model.search_lines = 400;
@ -1838,8 +1820,7 @@ void genesys_init_usb_device_tables()
model.adc_id = AdcId::WOLFSON_DSM600;
model.gpio_id = GpioId::DP665;
model.motor_id = MotorId::DSMOBILE_600;
model.flags = ModelFlag::SKIP_WARMUP |
ModelFlag::CUSTOM_GAMMA |
model.flags = ModelFlag::CUSTOM_GAMMA |
ModelFlag::DARK_CALIBRATION;
model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE;
model.search_lines = 400;
@ -1890,8 +1871,7 @@ void genesys_init_usb_device_tables()
model.adc_id = AdcId::WOLFSON_DSM600;
model.gpio_id = GpioId::DP665;
model.motor_id = MotorId::DSMOBILE_600;
model.flags = ModelFlag::SKIP_WARMUP |
ModelFlag::CUSTOM_GAMMA |
model.flags = ModelFlag::CUSTOM_GAMMA |
ModelFlag::DARK_CALIBRATION;
model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE;
model.search_lines = 400;
@ -1941,8 +1921,7 @@ void genesys_init_usb_device_tables()
model.adc_id = AdcId::WOLFSON_DSM600;
model.gpio_id = GpioId::DP685;
model.motor_id = MotorId::XP300;
model.flags = ModelFlag::SKIP_WARMUP |
ModelFlag::CUSTOM_GAMMA |
model.flags = ModelFlag::CUSTOM_GAMMA |
ModelFlag::DARK_CALIBRATION;
model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE;
model.search_lines = 400;
@ -1994,8 +1973,7 @@ void genesys_init_usb_device_tables()
model.adc_id = AdcId::WOLFSON_XP300;
model.gpio_id = GpioId::XP300;
model.motor_id = MotorId::XP300;
model.flags = ModelFlag::SKIP_WARMUP |
ModelFlag::CUSTOM_GAMMA |
model.flags = ModelFlag::CUSTOM_GAMMA |
ModelFlag::DARK_CALIBRATION;
model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE;
model.search_lines = 400;
@ -2047,8 +2025,7 @@ void genesys_init_usb_device_tables()
model.adc_id = AdcId::WOLFSON_XP300;
model.gpio_id = GpioId::XP300;
model.motor_id = MotorId::XP300;
model.flags = ModelFlag::SKIP_WARMUP |
ModelFlag::DARK_CALIBRATION |
model.flags = ModelFlag::DARK_CALIBRATION |
ModelFlag::CUSTOM_GAMMA |
ModelFlag::UNTESTED;
model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE;
@ -2099,7 +2076,8 @@ void genesys_init_usb_device_tables()
model.adc_id = AdcId::WOLFSON_5345;
model.gpio_id = GpioId::MD_5345;
model.motor_id = MotorId::MD_5345;
model.flags = ModelFlag::GAMMA_14BIT |
model.flags = ModelFlag::WARMUP |
ModelFlag::GAMMA_14BIT |
ModelFlag::DARK_CALIBRATION |
ModelFlag::CUSTOM_GAMMA;
model.buttons = GENESYS_HAS_COPY_SW |
@ -2154,7 +2132,8 @@ void genesys_init_usb_device_tables()
model.adc_id = AdcId::WOLFSON_5345;
model.gpio_id = GpioId::MD_5345;
model.motor_id = MotorId::MD_5345;
model.flags = ModelFlag::GAMMA_14BIT |
model.flags = ModelFlag::WARMUP |
ModelFlag::GAMMA_14BIT |
ModelFlag::DARK_CALIBRATION |
ModelFlag::CUSTOM_GAMMA;
model.buttons = GENESYS_HAS_COPY_SW |
@ -2210,8 +2189,7 @@ void genesys_init_usb_device_tables()
model.adc_id = AdcId::WOLFSON_XP300;
model.gpio_id = GpioId::DP665;
model.motor_id = MotorId::ROADWARRIOR;
model.flags = ModelFlag::SKIP_WARMUP |
ModelFlag::CUSTOM_GAMMA |
model.flags = ModelFlag::CUSTOM_GAMMA |
ModelFlag::DARK_CALIBRATION;
model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE;
model.search_lines = 400;
@ -2264,7 +2242,6 @@ void genesys_init_usb_device_tables()
model.motor_id = MotorId::PLUSTEK_OPTICPRO_3600;
model.flags = ModelFlag::UNTESTED | // not fully working yet
ModelFlag::CUSTOM_GAMMA |
ModelFlag::SKIP_WARMUP |
ModelFlag::DARK_CALIBRATION;
model.buttons = GENESYS_HAS_NO_BUTTONS;
model.search_lines = 200;
@ -2328,8 +2305,8 @@ void genesys_init_usb_device_tables()
model.gpio_id = GpioId::PLUSTEK_OPTICFILM_7200I;
model.motor_id = MotorId::PLUSTEK_OPTICFILM_7200I;
model.flags = ModelFlag::CUSTOM_GAMMA |
ModelFlag::SKIP_WARMUP |
model.flags = ModelFlag::WARMUP |
ModelFlag::CUSTOM_GAMMA |
ModelFlag::DARK_CALIBRATION |
ModelFlag::SHADING_REPARK |
ModelFlag::INVERTED_16BIT_DATA;
@ -2407,8 +2384,8 @@ void genesys_init_usb_device_tables()
model.gpio_id = GpioId::PLUSTEK_OPTICFILM_7300;
model.motor_id = MotorId::PLUSTEK_OPTICFILM_7300;
model.flags = ModelFlag::CUSTOM_GAMMA |
ModelFlag::SKIP_WARMUP |
model.flags = ModelFlag::WARMUP |
ModelFlag::CUSTOM_GAMMA |
ModelFlag::DARK_CALIBRATION |
ModelFlag::SHADING_REPARK;
@ -2479,7 +2456,6 @@ void genesys_init_usb_device_tables()
model.motor_id = MotorId::PLUSTEK_OPTICFILM_7400;
model.flags = ModelFlag::CUSTOM_GAMMA |
ModelFlag::SKIP_WARMUP |
ModelFlag::DARK_CALIBRATION |
ModelFlag::SHADING_REPARK;
@ -2549,8 +2525,8 @@ void genesys_init_usb_device_tables()
model.gpio_id = GpioId::PLUSTEK_OPTICFILM_7500I;
model.motor_id = MotorId::PLUSTEK_OPTICFILM_7500I;
model.flags = ModelFlag::CUSTOM_GAMMA |
ModelFlag::SKIP_WARMUP |
model.flags = ModelFlag::WARMUP |
ModelFlag::CUSTOM_GAMMA |
ModelFlag::DARK_CALIBRATION |
ModelFlag::SHADING_REPARK;
@ -2621,7 +2597,6 @@ void genesys_init_usb_device_tables()
model.motor_id = MotorId::PLUSTEK_OPTICFILM_8200I;
model.flags = ModelFlag::CUSTOM_GAMMA |
ModelFlag::SKIP_WARMUP |
ModelFlag::DARK_CALIBRATION |
ModelFlag::SHADING_REPARK;
@ -2682,7 +2657,6 @@ void genesys_init_usb_device_tables()
ModelFlag::GAMMA_14BIT |
ModelFlag::DARK_CALIBRATION |
ModelFlag::CUSTOM_GAMMA |
ModelFlag::SKIP_WARMUP |
ModelFlag::NO_CALIBRATION;
model.buttons = GENESYS_HAS_NO_BUTTONS;
@ -2734,8 +2708,7 @@ void genesys_init_usb_device_tables()
model.adc_id = AdcId::PLUSTEK_OPTICBOOK_3800;
model.gpio_id = GpioId::PLUSTEK_OPTICBOOK_3800;
model.motor_id = MotorId::PLUSTEK_OPTICBOOK_3800;
model.flags = ModelFlag::SKIP_WARMUP |
ModelFlag::CUSTOM_GAMMA;
model.flags = ModelFlag::CUSTOM_GAMMA;
model.buttons = GENESYS_HAS_NO_BUTTONS; // TODO there are 4 buttons to support
model.search_lines = 100;
@ -2785,8 +2758,7 @@ void genesys_init_usb_device_tables()
model.adc_id = AdcId::IMG101;
model.gpio_id = GpioId::IMG101;
model.motor_id = MotorId::IMG101;
model.flags = ModelFlag::SKIP_WARMUP |
ModelFlag::CUSTOM_GAMMA |
model.flags = ModelFlag::CUSTOM_GAMMA |
ModelFlag::UNTESTED;
model.buttons = GENESYS_HAS_NO_BUTTONS ;
model.search_lines = 100;