kopia lustrzana https://gitlab.com/sane-project/backends
Merge remote-tracking branch 'origin/master' into escl-simple-scan
commit
bb9c4ead76
|
@ -160,6 +160,9 @@ public:
|
|||
/// cold boot init function
|
||||
virtual void asic_boot(Genesys_Device* dev, bool cold) const = 0;
|
||||
|
||||
/// checks if specific scan head is at home position
|
||||
virtual bool is_head_home(Genesys_Device& dev, ScanHeadId scan_head) const = 0;
|
||||
|
||||
/// enables or disables XPA slider motor
|
||||
virtual void set_xpa_lamp_power(Genesys_Device& dev, bool set) const = 0;
|
||||
|
||||
|
|
|
@ -23,11 +23,50 @@
|
|||
#define DEBUG_DECLARE_ONLY
|
||||
|
||||
#include "command_set_common.h"
|
||||
#include "low.h"
|
||||
|
||||
namespace genesys {
|
||||
|
||||
CommandSetCommon::~CommandSetCommon() = default;
|
||||
|
||||
bool CommandSetCommon::is_head_home(Genesys_Device& dev, ScanHeadId scan_head) const
|
||||
{
|
||||
struct HeadSettings {
|
||||
ModelId model_id;
|
||||
ScanHeadId scan_head;
|
||||
GenesysRegisterSettingSet regs;
|
||||
};
|
||||
|
||||
HeadSettings settings[] = {
|
||||
{ ModelId::CANON_8600F,
|
||||
ScanHeadId::PRIMARY, {
|
||||
{ 0x6c, 0x20, 0x60 },
|
||||
{ 0xa6, 0x00, 0x01 },
|
||||
}
|
||||
},
|
||||
{ ModelId::CANON_8600F,
|
||||
ScanHeadId::SECONDARY, {
|
||||
{ 0x6c, 0x00, 0x60 },
|
||||
{ 0xa6, 0x01, 0x01 },
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
for (const auto& setting : settings) {
|
||||
if (setting.model_id == dev.model->model_id &&
|
||||
setting.scan_head == scan_head)
|
||||
{
|
||||
auto reg_backup = apply_reg_settings_to_device_with_backup(dev, setting.regs);
|
||||
auto status = scanner_read_status(dev);
|
||||
apply_reg_settings_to_device(dev, reg_backup);
|
||||
return status.is_at_home;
|
||||
}
|
||||
}
|
||||
|
||||
auto status = scanner_read_status(dev);
|
||||
return status.is_at_home;
|
||||
}
|
||||
|
||||
void CommandSetCommon::set_xpa_lamp_power(Genesys_Device& dev, bool set) const
|
||||
|
||||
{
|
||||
|
@ -127,39 +166,38 @@ void CommandSetCommon::set_motor_mode(Genesys_Device& dev, Genesys_Register_Set&
|
|||
ResolutionFilter resolutions;
|
||||
GenesysRegisterSettingSet regs_primary_and_secondary;
|
||||
GenesysRegisterSettingSet regs_primary;
|
||||
GenesysRegisterSettingSet regs_secondary;
|
||||
};
|
||||
|
||||
MotorSettings settings[] = {
|
||||
{ ModelId::CANON_8400F, { 400, 800, 1600 }, {
|
||||
{ ModelId::CANON_8400F, { 400, 800, 1600, 3200 }, {
|
||||
{ 0x6c, 0x00, 0x90 },
|
||||
{ 0xa9, 0x04, 0x06 },
|
||||
}, {
|
||||
{ 0x6c, 0x90, 0x90 },
|
||||
{ 0xa9, 0x02, 0x06 },
|
||||
}
|
||||
},
|
||||
{ ModelId::CANON_8400F, { 3200 }, {
|
||||
{ 0x6c, 0x00, 0x92 },
|
||||
{ 0xa9, 0x04, 0x06 },
|
||||
}, {
|
||||
{ 0x6c, 0x90, 0x90 },
|
||||
{ 0xa9, 0x02, 0x06 },
|
||||
}
|
||||
}, {}
|
||||
},
|
||||
{ ModelId::CANON_8600F, { 300, 600, 1200 }, {
|
||||
{ 0x6c, 0x00, 0x20 },
|
||||
{ 0x6c, 0x00, 0x60 },
|
||||
{ 0xa6, 0x01, 0x41 },
|
||||
}, {
|
||||
{ 0x6c, 0x20, 0x22 },
|
||||
{ 0x6c, 0x20, 0x62 },
|
||||
{ 0xa6, 0x00, 0x41 },
|
||||
}, {
|
||||
{ 0x6c, 0x40, 0x62 },
|
||||
{ 0xa6, 0x01, 0x41 },
|
||||
}
|
||||
},
|
||||
{ ModelId::CANON_8600F, { 2400, 4800 }, {
|
||||
{ 0x6c, 0x02, 0x22 },
|
||||
{ 0x6c, 0x02, 0x62 },
|
||||
{ 0xa6, 0x01, 0x41 },
|
||||
}, {
|
||||
{ 0x6c, 0x20, 0x22 },
|
||||
{ 0x6c, 0x20, 0x62 },
|
||||
{ 0xa6, 0x00, 0x41 },
|
||||
}, {
|
||||
{ 0x6c, 0x40, 0x62 },
|
||||
{ 0xa6, 0x01, 0x41 },
|
||||
}
|
||||
},
|
||||
{ ModelId::HP_SCANJET_G4050, ResolutionFilter::ANY, {
|
||||
|
@ -173,11 +211,11 @@ void CommandSetCommon::set_motor_mode(Genesys_Device& dev, Genesys_Register_Set&
|
|||
{ 0x6b, 0x00, 0x01 }, // BUG: note that only ADF is unset
|
||||
{ 0xa8, 0x04, 0x04 },
|
||||
{ 0xa9, 0x00, 0x10 }, // note that 0x20 bit is not reset
|
||||
}
|
||||
}, {}
|
||||
},
|
||||
{ ModelId::PLUSTEK_OPTICFILM_7200I, ResolutionFilter::ANY, {}, {} },
|
||||
{ ModelId::PLUSTEK_OPTICFILM_7300, ResolutionFilter::ANY, {}, {} },
|
||||
{ ModelId::PLUSTEK_OPTICFILM_7500I, ResolutionFilter::ANY, {}, {} },
|
||||
{ ModelId::PLUSTEK_OPTICFILM_7200I, ResolutionFilter::ANY, {}, {}, {} },
|
||||
{ ModelId::PLUSTEK_OPTICFILM_7300, ResolutionFilter::ANY, {}, {}, {} },
|
||||
{ ModelId::PLUSTEK_OPTICFILM_7500I, ResolutionFilter::ANY, {}, {}, {} },
|
||||
};
|
||||
|
||||
for (const auto& setting : settings) {
|
||||
|
@ -193,6 +231,10 @@ void CommandSetCommon::set_motor_mode(Genesys_Device& dev, Genesys_Register_Set&
|
|||
apply_reg_settings_to_device(dev, setting.regs_primary_and_secondary);
|
||||
break;
|
||||
}
|
||||
case MotorMode::SECONDARY: {
|
||||
apply_reg_settings_to_device(dev, setting.regs_secondary);
|
||||
break;
|
||||
}
|
||||
}
|
||||
regs.state.motor_mode = mode;
|
||||
return;
|
||||
|
|
|
@ -35,6 +35,8 @@ class CommandSetCommon : public CommandSet
|
|||
public:
|
||||
~CommandSetCommon() override;
|
||||
|
||||
bool is_head_home(Genesys_Device& dev, ScanHeadId scan_head) const override;
|
||||
|
||||
void set_xpa_lamp_power(Genesys_Device& dev, bool set) const override;
|
||||
|
||||
void set_motor_mode(Genesys_Device& dev, Genesys_Register_Set& regs,
|
||||
|
|
|
@ -528,6 +528,7 @@ enum class MotorMode : unsigned
|
|||
{
|
||||
PRIMARY = 0,
|
||||
PRIMARY_AND_SECONDARY,
|
||||
SECONDARY,
|
||||
};
|
||||
|
||||
} // namespace genesys
|
||||
|
|
|
@ -1176,8 +1176,22 @@ void scanner_move_back_home(Genesys_Device& dev, bool wait_until_home)
|
|||
}
|
||||
|
||||
namespace {
|
||||
void handle_motor_position_after_move_back_home_ta(Genesys_Device& dev)
|
||||
bool should_use_secondary_motor_mode(Genesys_Device& dev)
|
||||
{
|
||||
bool should_use = !dev.is_head_pos_known(ScanHeadId::SECONDARY) ||
|
||||
!dev.is_head_pos_known(ScanHeadId::PRIMARY) ||
|
||||
dev.head_pos(ScanHeadId::SECONDARY) > dev.head_pos(ScanHeadId::PRIMARY);
|
||||
bool supports = dev.model->model_id == ModelId::CANON_8600F;
|
||||
return should_use && supports;
|
||||
}
|
||||
|
||||
void handle_motor_position_after_move_back_home_ta(Genesys_Device& dev, MotorMode motor_mode)
|
||||
{
|
||||
if (motor_mode == MotorMode::SECONDARY) {
|
||||
dev.set_head_pos_zero(ScanHeadId::SECONDARY);
|
||||
return;
|
||||
}
|
||||
|
||||
if (dev.is_head_pos_known(ScanHeadId::PRIMARY)) {
|
||||
if (dev.head_pos(ScanHeadId::PRIMARY) > dev.head_pos(ScanHeadId::SECONDARY)) {
|
||||
dev.advance_head_pos_by_steps(ScanHeadId::PRIMARY, Direction::BACKWARD,
|
||||
|
@ -1209,7 +1223,9 @@ void scanner_move_back_home_ta(Genesys_Device& dev)
|
|||
const auto& sensor = sanei_genesys_find_sensor(&dev, resolution, 1, scan_method);
|
||||
|
||||
if (dev.is_head_pos_known(ScanHeadId::SECONDARY) &&
|
||||
dev.head_pos(ScanHeadId::SECONDARY) > 1000)
|
||||
dev.is_head_pos_known(ScanHeadId::PRIMARY) &&
|
||||
dev.head_pos(ScanHeadId::SECONDARY) > 1000 &&
|
||||
dev.head_pos(ScanHeadId::SECONDARY) <= dev.head_pos(ScanHeadId::PRIMARY))
|
||||
{
|
||||
// leave 500 steps for regular slow back home
|
||||
scanner_move(dev, scan_method, dev.head_pos(ScanHeadId::SECONDARY) - 500,
|
||||
|
@ -1240,7 +1256,11 @@ void scanner_move_back_home_ta(Genesys_Device& dev)
|
|||
scanner_clear_scan_and_feed_counts(dev);
|
||||
|
||||
dev.interface->write_registers(local_reg);
|
||||
dev.cmd_set->set_motor_mode(dev, local_reg, MotorMode::PRIMARY_AND_SECONDARY);
|
||||
|
||||
auto motor_mode = should_use_secondary_motor_mode(dev) ? MotorMode::SECONDARY
|
||||
: MotorMode::PRIMARY_AND_SECONDARY;
|
||||
|
||||
dev.cmd_set->set_motor_mode(dev, local_reg, motor_mode);
|
||||
|
||||
try {
|
||||
scanner_start_action(dev, true);
|
||||
|
@ -1254,7 +1274,7 @@ void scanner_move_back_home_ta(Genesys_Device& dev)
|
|||
if (is_testing_mode()) {
|
||||
dev.interface->test_checkpoint("move_back_home_ta");
|
||||
|
||||
handle_motor_position_after_move_back_home_ta(dev);
|
||||
handle_motor_position_after_move_back_home_ta(dev, motor_mode);
|
||||
|
||||
scanner_stop_action(dev);
|
||||
dev.cmd_set->set_motor_mode(dev, local_reg, MotorMode::PRIMARY);
|
||||
|
@ -1268,7 +1288,7 @@ void scanner_move_back_home_ta(Genesys_Device& dev)
|
|||
if (status.is_at_home) {
|
||||
dbg.log(DBG_info, "TA reached home position");
|
||||
|
||||
handle_motor_position_after_move_back_home_ta(dev);
|
||||
handle_motor_position_after_move_back_home_ta(dev, motor_mode);
|
||||
|
||||
scanner_stop_action(dev);
|
||||
dev.cmd_set->set_motor_mode(dev, local_reg, MotorMode::PRIMARY);
|
||||
|
@ -4631,7 +4651,7 @@ static void probe_genesys_devices()
|
|||
of Genesys_Calibration_Cache as is.
|
||||
*/
|
||||
static const char* CALIBRATION_IDENT = "sane_genesys";
|
||||
static const int CALIBRATION_VERSION = 21;
|
||||
static const int CALIBRATION_VERSION = 23;
|
||||
|
||||
bool read_calibration(std::istream& str, Genesys_Device::Calibration& calibration,
|
||||
const std::string& path)
|
||||
|
|
|
@ -1214,6 +1214,15 @@ void CommandSetGl843::init_regs_for_scan_session(Genesys_Device* dev, const Gene
|
|||
DBG(DBG_info, "%s: total bytes to send = %zu\n", __func__, dev->total_bytes_to_read);
|
||||
}
|
||||
|
||||
static double get_model_x_offset_ta(const Genesys_Device& dev,
|
||||
const Genesys_Settings& settings)
|
||||
{
|
||||
if (dev.model->model_id == ModelId::CANON_8600F && settings.xres == 4800) {
|
||||
return 85.0;
|
||||
}
|
||||
return dev.model->x_offset_ta;
|
||||
}
|
||||
|
||||
ScanSession CommandSetGl843::calculate_scan_session(const Genesys_Device* dev,
|
||||
const Genesys_Sensor& sensor,
|
||||
const Genesys_Settings& settings) const
|
||||
|
@ -1229,18 +1238,20 @@ ScanSession CommandSetGl843::calculate_scan_session(const Genesys_Device* dev,
|
|||
if (settings.scan_method == ScanMethod::TRANSPARENCY ||
|
||||
settings.scan_method == ScanMethod::TRANSPARENCY_INFRARED)
|
||||
{
|
||||
start = static_cast<int>(dev->model->x_offset_ta);
|
||||
start = static_cast<int>(get_model_x_offset_ta(*dev, settings));
|
||||
} else {
|
||||
start = static_cast<int>(dev->model->x_offset);
|
||||
}
|
||||
|
||||
if (dev->model->model_id == ModelId::CANON_8600F)
|
||||
start += static_cast<int>(settings.tl_x);
|
||||
|
||||
if (dev->model->model_id == ModelId::CANON_8400F ||
|
||||
dev->model->model_id == ModelId::CANON_8600F)
|
||||
{
|
||||
// FIXME: this is probably just an artifact of a bug elsewhere
|
||||
start /= ccd_size_divisor;
|
||||
}
|
||||
|
||||
start += static_cast<int>(settings.tl_x);
|
||||
start = static_cast<int>((start * sensor.optical_res) / MM_PER_INCH);
|
||||
|
||||
ScanSession session;
|
||||
|
@ -1400,6 +1411,20 @@ void CommandSetGl843::begin_scan(Genesys_Device* dev, const Genesys_Sensor& sens
|
|||
dev->interface->write_register(REG_0x7E, 0x01);
|
||||
break;
|
||||
case GpioId::CANON_8400F:
|
||||
if (dev->session.params.xres == 3200)
|
||||
{
|
||||
GenesysRegisterSettingSet reg_settings = {
|
||||
{ 0x6c, 0x00, 0x02 },
|
||||
};
|
||||
apply_reg_settings_to_device(*dev, reg_settings);
|
||||
}
|
||||
if (reg->state.is_xpa_on && reg->state.is_lamp_on) {
|
||||
dev->cmd_set->set_xpa_lamp_power(*dev, true);
|
||||
}
|
||||
if (reg->state.is_xpa_on) {
|
||||
dev->cmd_set->set_motor_mode(*dev, *reg, MotorMode::PRIMARY_AND_SECONDARY);
|
||||
}
|
||||
break;
|
||||
case GpioId::CANON_8600F:
|
||||
if (reg->state.is_xpa_on && reg->state.is_lamp_on) {
|
||||
dev->cmd_set->set_xpa_lamp_power(*dev, true);
|
||||
|
@ -1446,6 +1471,12 @@ void CommandSetGl843::begin_scan(Genesys_Device* dev, const Genesys_Sensor& sens
|
|||
dev->advance_head_pos_by_session(ScanHeadId::SECONDARY);
|
||||
break;
|
||||
}
|
||||
case MotorMode::SECONDARY: {
|
||||
if (reg->state.is_motor_on) {
|
||||
dev->advance_head_pos_by_session(ScanHeadId::SECONDARY);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1627,7 +1658,7 @@ void CommandSetGl843::init_regs_for_shading(Genesys_Device* dev, const Genesys_S
|
|||
dev->model->model_id == ModelId::CANON_8600F &&
|
||||
dev->settings.xres == 4800)
|
||||
{
|
||||
float offset = static_cast<float>(dev->model->x_offset_ta);
|
||||
float offset = static_cast<float>(get_model_x_offset_ta(*dev, dev->settings));
|
||||
offset /= calib_sensor.get_ccd_size_divisor_for_dpi(resolution);
|
||||
offset = static_cast<float>((offset * calib_sensor.optical_res) / MM_PER_INCH);
|
||||
|
||||
|
@ -1732,10 +1763,11 @@ void CommandSetGl843::init_regs_for_scan(Genesys_Device* dev, const Genesys_Sens
|
|||
if (dev->settings.scan_method==ScanMethod::TRANSPARENCY ||
|
||||
dev->settings.scan_method == ScanMethod::TRANSPARENCY_INFRARED)
|
||||
{
|
||||
start = static_cast<float>(dev->model->x_offset_ta);
|
||||
start = static_cast<float>(get_model_x_offset_ta(*dev, dev->settings));
|
||||
} else {
|
||||
start = static_cast<float>(dev->model->x_offset);
|
||||
}
|
||||
start = static_cast<float>(start + dev->settings.tl_x);
|
||||
|
||||
if (dev->model->model_id == ModelId::CANON_8400F ||
|
||||
dev->model->model_id == ModelId::CANON_8600F)
|
||||
|
@ -1744,7 +1776,6 @@ void CommandSetGl843::init_regs_for_scan(Genesys_Device* dev, const Genesys_Sens
|
|||
start /= sensor.get_ccd_size_divisor_for_dpi(dev->settings.xres);
|
||||
}
|
||||
|
||||
start = static_cast<float>(start + dev->settings.tl_x);
|
||||
start = static_cast<float>((start * sensor.optical_res) / MM_PER_INCH);
|
||||
|
||||
ScanSession session;
|
||||
|
@ -2026,7 +2057,7 @@ void CommandSetGl843::offset_calibration(Genesys_Device* dev, const Genesys_Sens
|
|||
dev->model->model_id == ModelId::CANON_8600F &&
|
||||
dev->settings.xres == 4800)
|
||||
{
|
||||
start_pixel = static_cast<int>(dev->model->x_offset_ta);
|
||||
start_pixel = static_cast<int>(get_model_x_offset_ta(*dev, dev->settings));
|
||||
start_pixel /= calib_sensor.get_ccd_size_divisor_for_dpi(resolution);
|
||||
start_pixel = static_cast<int>((start_pixel * calib_sensor.optical_res) / MM_PER_INCH);
|
||||
|
||||
|
|
|
@ -1504,6 +1504,14 @@ void sanei_genesys_asic_init(Genesys_Device* dev, bool /*max_regs*/)
|
|||
dev->already_initialized = true;
|
||||
|
||||
// Move to home if needed
|
||||
if (dev->model->model_id == ModelId::CANON_8600F) {
|
||||
if (!dev->cmd_set->is_head_home(*dev, ScanHeadId::SECONDARY)) {
|
||||
dev->set_head_pos_unknown(ScanHeadId::SECONDARY);
|
||||
}
|
||||
if (!dev->cmd_set->is_head_home(*dev, ScanHeadId::PRIMARY)) {
|
||||
dev->set_head_pos_unknown(ScanHeadId::SECONDARY);
|
||||
}
|
||||
}
|
||||
dev->cmd_set->move_back_home(dev, true);
|
||||
|
||||
// Set powersaving (default = 15 minutes)
|
||||
|
|
|
@ -515,7 +515,7 @@ void genesys_init_usb_device_tables()
|
|||
model.bpp_gray_values = { 8, 16 };
|
||||
model.bpp_color_values = { 8, 16 };
|
||||
|
||||
model.x_offset = 3.5;
|
||||
model.x_offset = 5.5;
|
||||
model.y_offset = 17.00;
|
||||
model.x_size = 219.9;
|
||||
model.y_size = 300.0;
|
||||
|
@ -592,7 +592,7 @@ void genesys_init_usb_device_tables()
|
|||
model.y_offset_calib_white = 0.0;
|
||||
model.x_offset_calib_black = 8.0;
|
||||
|
||||
model.x_offset_ta = 85.0;
|
||||
model.x_offset_ta = 94.0;
|
||||
model.y_offset_ta = 26.0;
|
||||
model.x_size_ta = 70.0;
|
||||
model.y_size_ta = 230.0;
|
||||
|
|
|
@ -2400,7 +2400,7 @@ void genesys_init_sensor_tables()
|
|||
// 31 at 600 dpi, 58 at 1200 dpi
|
||||
sensor.dummy_pixel = 20;
|
||||
sensor.ccd_start_xoffset = 152;
|
||||
sensor.sensor_pixels = 27200;
|
||||
sensor.sensor_pixels = 28400;
|
||||
sensor.fau_gain_white_ref = 160;
|
||||
sensor.gain_white_ref = 160;
|
||||
sensor.exposure = { 0x9c40, 0x9c40, 0x9c40 };
|
||||
|
@ -2424,25 +2424,11 @@ void genesys_init_sensor_tables()
|
|||
};
|
||||
|
||||
CustomSensorSettings custom_settings[] = {
|
||||
{ { 400 }, 2400, 1, 7200, { ScanMethod::FLATBED }, {
|
||||
{ 0x16, 0x33 },
|
||||
{ 0x17, 0x0c },
|
||||
{ 0x18, 0x13 },
|
||||
{ 0x19, 0x2a },
|
||||
{ 0x1a, 0x30 },
|
||||
{ 0x1b, 0x00 },
|
||||
{ 0x1c, 0x00 },
|
||||
{ 0x1d, 0x84 },
|
||||
{ 0x1e, 0xa0 },
|
||||
{ 0x52, 0x0d },
|
||||
{ 0x53, 0x10 },
|
||||
{ 0x54, 0x01 },
|
||||
{ 0x55, 0x04 },
|
||||
{ 0x56, 0x07 },
|
||||
{ 0x57, 0x0a },
|
||||
{ 0x58, 0x6b },
|
||||
{ 0x59, 0x00 },
|
||||
{ 0x5a, 0x40 },
|
||||
{ { 400 }, 2400, 1, 7200, { ScanMethod::FLATBED }, {
|
||||
{ 0x16, 0x33 }, { 0x17, 0x0c }, { 0x18, 0x13 }, { 0x19, 0x2a },
|
||||
{ 0x1a, 0x30 }, { 0x1b, 0x00 }, { 0x1c, 0x00 }, { 0x1d, 0x84 }, { 0x1e, 0xa0 },
|
||||
{ 0x52, 0x0d }, { 0x53, 0x10 }, { 0x54, 0x01 }, { 0x55, 0x04 },
|
||||
{ 0x56, 0x07 }, { 0x57, 0x0a }, { 0x58, 0x6b }, { 0x59, 0x00 }, { 0x5a, 0x40 },
|
||||
{ 0x70, 0x01 }, { 0x71, 0x02 }, { 0x72, 0x03 }, { 0x73, 0x04 },
|
||||
{ 0x74, 0x00 }, { 0x75, 0x0e }, { 0x76, 0x3f },
|
||||
{ 0x77, 0x00 }, { 0x78, 0x00 }, { 0x79, 0x00 },
|
||||
|
@ -2450,25 +2436,11 @@ void genesys_init_sensor_tables()
|
|||
{ 0x80, 0x2a },
|
||||
}, {}
|
||||
},
|
||||
{ { 800 }, 4800, 1, 7200, { ScanMethod::FLATBED }, {
|
||||
{ 0x16, 0x33 },
|
||||
{ 0x17, 0x0c },
|
||||
{ 0x18, 0x13 },
|
||||
{ 0x19, 0x2a },
|
||||
{ 0x1a, 0x30 },
|
||||
{ 0x1b, 0x00 },
|
||||
{ 0x1c, 0x00 },
|
||||
{ 0x1d, 0x84 },
|
||||
{ 0x1e, 0xa0 },
|
||||
{ 0x52, 0x0d },
|
||||
{ 0x53, 0x10 },
|
||||
{ 0x54, 0x01 },
|
||||
{ 0x55, 0x04 },
|
||||
{ 0x56, 0x07 },
|
||||
{ 0x57, 0x0a },
|
||||
{ 0x58, 0x6b },
|
||||
{ 0x59, 0x00 },
|
||||
{ 0x5a, 0x40 },
|
||||
{ { 800 }, 4800, 1, 7200, { ScanMethod::FLATBED }, {
|
||||
{ 0x16, 0x33 }, { 0x17, 0x0c }, { 0x18, 0x13 }, { 0x19, 0x2a },
|
||||
{ 0x1a, 0x30 }, { 0x1b, 0x00 }, { 0x1c, 0x00 }, { 0x1d, 0x84 }, { 0x1e, 0xa0 },
|
||||
{ 0x52, 0x0d }, { 0x53, 0x10 }, { 0x54, 0x01 }, { 0x55, 0x04 },
|
||||
{ 0x56, 0x07 }, { 0x57, 0x0a }, { 0x58, 0x6b }, { 0x59, 0x00 }, { 0x5a, 0x40 },
|
||||
{ 0x70, 0x01 }, { 0x71, 0x02 }, { 0x72, 0x03 }, { 0x73, 0x04 },
|
||||
{ 0x74, 0x00 }, { 0x75, 0x0e }, { 0x76, 0x3f },
|
||||
{ 0x77, 0x00 }, { 0x78, 0x00 }, { 0x79, 0x00 },
|
||||
|
@ -2476,26 +2448,12 @@ void genesys_init_sensor_tables()
|
|||
{ 0x80, 0x20 },
|
||||
}, {}
|
||||
},
|
||||
{ { 1600 }, 4800, 1, 14400, { ScanMethod::FLATBED }, {
|
||||
{ 0x16, 0x33 },
|
||||
{ 0x17, 0x0c },
|
||||
{ 0x18, 0x11 },
|
||||
{ 0x19, 0x2a },
|
||||
{ 0x1a, 0x30 },
|
||||
{ 0x1b, 0x00 },
|
||||
{ 0x1c, 0x00 },
|
||||
{ 0x1d, 0x84 },
|
||||
{ 0x1e, 0xa1 },
|
||||
{ 0x52, 0x0b },
|
||||
{ 0x53, 0x0e },
|
||||
{ 0x54, 0x11 },
|
||||
{ 0x55, 0x02 },
|
||||
{ 0x56, 0x05 },
|
||||
{ 0x57, 0x08 },
|
||||
{ 0x58, 0x63 },
|
||||
{ 0x59, 0x00 },
|
||||
{ 0x5a, 0x40 },
|
||||
{ 0x70, 0x01 }, { 0x71, 0x02 }, { 0x72, 0x02 }, { 0x73, 0x03 },
|
||||
{ { 1600 }, 4800, 1, 14400, { ScanMethod::FLATBED }, {
|
||||
{ 0x16, 0x33 }, { 0x17, 0x0c }, { 0x18, 0x11 }, { 0x19, 0x2a },
|
||||
{ 0x1a, 0x30 }, { 0x1b, 0x00 }, { 0x1c, 0x00 }, { 0x1d, 0x84 }, { 0x1e, 0xa1 },
|
||||
{ 0x52, 0x0b }, { 0x53, 0x0e }, { 0x54, 0x11 }, { 0x55, 0x02 },
|
||||
{ 0x56, 0x05 }, { 0x57, 0x08 }, { 0x58, 0x63 }, { 0x59, 0x00 }, { 0x5a, 0x40 },
|
||||
{ 0x70, 0x00 }, { 0x71, 0x01 }, { 0x72, 0x02 }, { 0x73, 0x03 },
|
||||
{ 0x74, 0x00 }, { 0x75, 0x01 }, { 0x76, 0xff },
|
||||
{ 0x77, 0x00 }, { 0x78, 0x00 }, { 0x79, 0x00 },
|
||||
{ 0x7a, 0x02 }, { 0x7b, 0x49 }, { 0x7c, 0x24 },
|
||||
|
@ -2504,25 +2462,11 @@ void genesys_init_sensor_tables()
|
|||
{ 0x03, 0x1f },
|
||||
}
|
||||
},
|
||||
{ { 3200 }, 4800, 1, 28800, { ScanMethod::FLATBED }, {
|
||||
{ 0x16, 0x33 },
|
||||
{ 0x17, 0x0c },
|
||||
{ 0x18, 0x10 },
|
||||
{ 0x19, 0x2a },
|
||||
{ 0x1a, 0x30 },
|
||||
{ 0x1b, 0x00 },
|
||||
{ 0x1c, 0x20 },
|
||||
{ 0x1d, 0x84 },
|
||||
{ 0x1e, 0xa1 },
|
||||
{ 0x52, 0x02 },
|
||||
{ 0x53, 0x05 },
|
||||
{ 0x54, 0x08 },
|
||||
{ 0x55, 0x0b },
|
||||
{ 0x56, 0x0e },
|
||||
{ 0x57, 0x11 },
|
||||
{ 0x58, 0x1b },
|
||||
{ 0x59, 0x00 },
|
||||
{ 0x5a, 0x40 },
|
||||
{ { 3200 }, 4800, 1, 28800, { ScanMethod::FLATBED }, {
|
||||
{ 0x16, 0x33 }, { 0x17, 0x0c }, { 0x18, 0x10 }, { 0x19, 0x2a },
|
||||
{ 0x1a, 0x30 }, { 0x1b, 0x00 }, { 0x1c, 0x20 }, { 0x1d, 0x84 }, { 0x1e, 0xa1 },
|
||||
{ 0x52, 0x02 }, { 0x53, 0x05 }, { 0x54, 0x08 }, { 0x55, 0x0b },
|
||||
{ 0x56, 0x0e }, { 0x57, 0x11 }, { 0x58, 0x1b }, { 0x59, 0x00 }, { 0x5a, 0x40 },
|
||||
{ 0x70, 0x09 }, { 0x71, 0x0a }, { 0x72, 0x0b }, { 0x73, 0x0c },
|
||||
{ 0x74, 0x00 }, { 0x75, 0x00 }, { 0x76, 0x00 },
|
||||
{ 0x77, 0x00 }, { 0x78, 0x00 }, { 0x79, 0x00 },
|
||||
|
@ -2532,26 +2476,12 @@ void genesys_init_sensor_tables()
|
|||
{ 0x03, 0x1f },
|
||||
},
|
||||
},
|
||||
{ { 400 }, 2400, 1, 14400, { ScanMethod::TRANSPARENCY,
|
||||
ScanMethod::TRANSPARENCY_INFRARED }, {
|
||||
{ 0x16, 0x33 },
|
||||
{ 0x17, 0x0c },
|
||||
{ 0x18, 0x13 },
|
||||
{ 0x19, 0x2a },
|
||||
{ 0x1a, 0x30 },
|
||||
{ 0x1b, 0x00 },
|
||||
{ 0x1c, 0x00 },
|
||||
{ 0x1d, 0x84 },
|
||||
{ 0x1e, 0xa0 },
|
||||
{ 0x52, 0x0d },
|
||||
{ 0x53, 0x10 },
|
||||
{ 0x54, 0x01 },
|
||||
{ 0x55, 0x04 },
|
||||
{ 0x56, 0x07 },
|
||||
{ 0x57, 0x0a },
|
||||
{ 0x58, 0x6b },
|
||||
{ 0x59, 0x00 },
|
||||
{ 0x5a, 0x40 },
|
||||
{ { 400 }, 2400, 1, 14400, { ScanMethod::TRANSPARENCY,
|
||||
ScanMethod::TRANSPARENCY_INFRARED }, {
|
||||
{ 0x16, 0x33 }, { 0x17, 0x0c }, { 0x18, 0x13 }, { 0x19, 0x2a },
|
||||
{ 0x1a, 0x30 }, { 0x1b, 0x00 }, { 0x1c, 0x00 }, { 0x1d, 0x84 }, { 0x1e, 0xa0 },
|
||||
{ 0x52, 0x0d }, { 0x53, 0x10 }, { 0x54, 0x01 }, { 0x55, 0x04 },
|
||||
{ 0x56, 0x07 }, { 0x57, 0x0a }, { 0x58, 0x6b }, { 0x59, 0x00 }, { 0x5a, 0x40 },
|
||||
{ 0x70, 0x01 }, { 0x71, 0x02 }, { 0x72, 0x03 }, { 0x73, 0x04 },
|
||||
{ 0x74, 0x00 }, { 0x75, 0x0e }, { 0x76, 0x3f },
|
||||
{ 0x77, 0x00 }, { 0x78, 0x00 }, { 0x79, 0x00 },
|
||||
|
@ -2559,53 +2489,25 @@ void genesys_init_sensor_tables()
|
|||
{ 0x80, 0x20 },
|
||||
}, {}
|
||||
},
|
||||
{ { 800 }, 4800, 1, 14400, { ScanMethod::TRANSPARENCY,
|
||||
ScanMethod::TRANSPARENCY_INFRARED }, {
|
||||
{ 0x16, 0x33 },
|
||||
{ 0x17, 0x0c },
|
||||
{ 0x18, 0x13 },
|
||||
{ 0x19, 0x2a },
|
||||
{ 0x1a, 0x30 },
|
||||
{ 0x1b, 0x00 },
|
||||
{ 0x1c, 0x00 },
|
||||
{ 0x1d, 0x84 },
|
||||
{ 0x1e, 0xa0 },
|
||||
{ 0x52, 0x0d },
|
||||
{ 0x53, 0x10 },
|
||||
{ 0x54, 0x01 },
|
||||
{ 0x55, 0x04 },
|
||||
{ 0x56, 0x07 },
|
||||
{ 0x57, 0x0a },
|
||||
{ 0x58, 0x6b },
|
||||
{ 0x59, 0x00 },
|
||||
{ 0x5a, 0x40 },
|
||||
{ 0x70, 0x01 }, { 0x71, 0x02 }, { 0x72, 0x03 }, { 0x73, 0x04 },
|
||||
{ { 800 }, 4800, 1, 14400, { ScanMethod::TRANSPARENCY,
|
||||
ScanMethod::TRANSPARENCY_INFRARED }, {
|
||||
{ 0x16, 0x33 }, { 0x17, 0x0c }, { 0x18, 0x13 }, { 0x19, 0x2a },
|
||||
{ 0x1a, 0x30 }, { 0x1b, 0x00 }, { 0x1c, 0x00 }, { 0x1d, 0x84 }, { 0x1e, 0xa0 },
|
||||
{ 0x52, 0x0d }, { 0x53, 0x10 }, { 0x54, 0x01 }, { 0x55, 0x04 },
|
||||
{ 0x56, 0x07 }, { 0x57, 0x0a }, { 0x58, 0x6b }, { 0x59, 0x00 }, { 0x5a, 0x40 },
|
||||
{ 0x70, 0x00 }, { 0x71, 0x01 }, { 0x72, 0x02 }, { 0x73, 0x03 },
|
||||
{ 0x74, 0x00 }, { 0x75, 0x0e }, { 0x76, 0x3f },
|
||||
{ 0x77, 0x00 }, { 0x78, 0x00 }, { 0x79, 0x00 },
|
||||
{ 0x7a, 0x01 }, { 0x7b, 0xb6 }, { 0x7c, 0xdb },
|
||||
{ 0x80, 0x20 },
|
||||
}, {}
|
||||
},
|
||||
{ { 1600 }, 4800, 1, 28800, { ScanMethod::TRANSPARENCY,
|
||||
ScanMethod::TRANSPARENCY_INFRARED }, {
|
||||
{ 0x16, 0x33 },
|
||||
{ 0x17, 0x0c },
|
||||
{ 0x18, 0x11 },
|
||||
{ 0x19, 0x2a },
|
||||
{ 0x1a, 0x30 },
|
||||
{ 0x1b, 0x00 },
|
||||
{ 0x1c, 0x00 },
|
||||
{ 0x1d, 0x84 },
|
||||
{ 0x1e, 0xa0 },
|
||||
{ 0x52, 0x0b },
|
||||
{ 0x53, 0x0e },
|
||||
{ 0x54, 0x11 },
|
||||
{ 0x55, 0x02 },
|
||||
{ 0x56, 0x05 },
|
||||
{ 0x57, 0x08 },
|
||||
{ 0x58, 0x63 },
|
||||
{ 0x59, 0x00 },
|
||||
{ 0x5a, 0x40 },
|
||||
{ { 1600 }, 4800, 1, 28800, { ScanMethod::TRANSPARENCY,
|
||||
ScanMethod::TRANSPARENCY_INFRARED }, {
|
||||
{ 0x16, 0x33 }, { 0x17, 0x0c }, { 0x18, 0x11 }, { 0x19, 0x2a },
|
||||
{ 0x1a, 0x30 }, { 0x1b, 0x00 }, { 0x1c, 0x00 }, { 0x1d, 0x84 }, { 0x1e, 0xa0 },
|
||||
{ 0x52, 0x0b }, { 0x53, 0x0e }, { 0x54, 0x11 }, { 0x55, 0x02 },
|
||||
{ 0x56, 0x05 }, { 0x57, 0x08 }, { 0x58, 0x63 }, { 0x59, 0x00 }, { 0x5a, 0x40 },
|
||||
{ 0x70, 0x00 }, { 0x71, 0x01 }, { 0x72, 0x02 }, { 0x73, 0x03 },
|
||||
{ 0x74, 0x00 }, { 0x75, 0x01 }, { 0x76, 0xff },
|
||||
{ 0x77, 0x00 }, { 0x78, 0x00 }, { 0x79, 0x00 },
|
||||
|
@ -2615,26 +2517,12 @@ void genesys_init_sensor_tables()
|
|||
{ 0x03, 0x1f },
|
||||
},
|
||||
},
|
||||
{ { 3200 }, 4800, 1, 28800, { ScanMethod::TRANSPARENCY,
|
||||
ScanMethod::TRANSPARENCY_INFRARED }, {
|
||||
{ 0x16, 0x33 },
|
||||
{ 0x17, 0x0c },
|
||||
{ 0x18, 0x10 },
|
||||
{ 0x19, 0x2a },
|
||||
{ 0x1a, 0x30 },
|
||||
{ 0x1b, 0x00 },
|
||||
{ 0x1c, 0x20 },
|
||||
{ 0x1d, 0x84 },
|
||||
{ 0x1e, 0xa0 },
|
||||
{ 0x52, 0x02 },
|
||||
{ 0x53, 0x05 },
|
||||
{ 0x54, 0x08 },
|
||||
{ 0x55, 0x0b },
|
||||
{ 0x56, 0x0e },
|
||||
{ 0x57, 0x11 },
|
||||
{ 0x58, 0x1b },
|
||||
{ 0x59, 0x00 },
|
||||
{ 0x5a, 0x40 },
|
||||
{ { 3200 }, 4800, 1, 28800, { ScanMethod::TRANSPARENCY,
|
||||
ScanMethod::TRANSPARENCY_INFRARED }, {
|
||||
{ 0x16, 0x33 }, { 0x17, 0x0c }, { 0x18, 0x10 }, { 0x19, 0x2a },
|
||||
{ 0x1a, 0x30 }, { 0x1b, 0x00 }, { 0x1c, 0x20 }, { 0x1d, 0x84 }, { 0x1e, 0xa0 },
|
||||
{ 0x52, 0x02 }, { 0x53, 0x05 }, { 0x54, 0x08 }, { 0x55, 0x0b },
|
||||
{ 0x56, 0x0e }, { 0x57, 0x11 }, { 0x58, 0x1b }, { 0x59, 0x00 }, { 0x5a, 0x40 },
|
||||
{ 0x70, 0x09 }, { 0x71, 0x0a }, { 0x72, 0x0b }, { 0x73, 0x0c },
|
||||
{ 0x74, 0x00 }, { 0x75, 0x00 }, { 0x76, 0x00 },
|
||||
{ 0x77, 0x00 }, { 0x78, 0x00 }, { 0x79, 0x00 },
|
||||
|
|
Ładowanie…
Reference in New Issue