genesys: Add support for Plustek Opticfilm 8200i

merge-requests/213/head^2
Povilas Kanapickas 2020-03-27 21:29:28 +02:00
rodzic adaac29d90
commit 6cb39e0a29
14 zmienionych plików z 252 dodań i 30 usunięć

Wyświetl plik

@ -136,6 +136,9 @@ usb 0x07b3 0x0c3a
# Plustek OpticFilm 7500i
usb 0x07b3 0x0c13
# Plustek OpticFilm 8200i
usb 0x07b3 0x130d
# Primax Electronics, Ltd Xerox 2400 Onetouch
usb 0x0461 0x038b

Wyświetl plik

@ -130,6 +130,13 @@ void CommandSetCommon::set_xpa_lamp_power(Genesys_Device& dev, bool set) const
{ 0xa8, 0x00, 0x07 },
}
},
{ ModelId::PLUSTEK_OPTICFILM_8200I, ScanMethod::TRANSPARENCY, {}, {} },
{ ModelId::PLUSTEK_OPTICFILM_8200I, ScanMethod::TRANSPARENCY_INFRARED, {
{ 0xa8, 0x04, 0x04 },
}, {
{ 0xa8, 0x00, 0x04 },
}
},
};
for (const auto& setting : settings) {
@ -206,6 +213,7 @@ void CommandSetCommon::set_motor_mode(Genesys_Device& dev, Genesys_Register_Set&
{ ModelId::PLUSTEK_OPTICFILM_7300, VALUE_FILTER_ANY, {}, {}, {} },
{ ModelId::PLUSTEK_OPTICFILM_7400, VALUE_FILTER_ANY, {}, {}, {} },
{ ModelId::PLUSTEK_OPTICFILM_7500I, VALUE_FILTER_ANY, {}, {}, {} },
{ ModelId::PLUSTEK_OPTICFILM_8200I, VALUE_FILTER_ANY, {}, {}, {} },
};
for (const auto& setting : settings) {

Wyświetl plik

@ -144,6 +144,7 @@ std::ostream& operator<<(std::ostream& out, ModelId id)
case ModelId::PLUSTEK_OPTICFILM_7300: out << "PLUSTEK_OPTICFILM_7300"; break;
case ModelId::PLUSTEK_OPTICFILM_7400: out << "PLUSTEK_OPTICFILM_7400"; break;
case ModelId::PLUSTEK_OPTICFILM_7500I: out << "PLUSTEK_OPTICFILM_7500I"; break;
case ModelId::PLUSTEK_OPTICFILM_8200I: out << "PLUSTEK_OPTICFILM_8200I"; break;
case ModelId::PLUSTEK_OPTICPRO_3600: out << "PLUSTEK_OPTICPRO_3600"; break;
case ModelId::PLUSTEK_OPTICPRO_ST12: out << "PLUSTEK_OPTICPRO_ST12"; break;
case ModelId::PLUSTEK_OPTICPRO_ST24: out << "PLUSTEK_OPTICPRO_ST24"; break;
@ -189,6 +190,7 @@ std::ostream& operator<<(std::ostream& out, AdcId id)
case AdcId::PLUSTEK_OPTICFILM_7300: out << "PLUSTEK_OPTICFILM_7300"; break;
case AdcId::PLUSTEK_OPTICFILM_7400: out << "PLUSTEK_OPTICFILM_7400"; break;
case AdcId::PLUSTEK_OPTICFILM_7500I: out << "PLUSTEK_OPTICFILM_7500I"; break;
case AdcId::PLUSTEK_OPTICFILM_8200I: out << "PLUSTEK_OPTICFILM_8200I"; break;
case AdcId::PLUSTEK_OPTICPRO_3600: out << "PLUSTEK_OPTICPRO_3600"; break;
case AdcId::WOLFSON_5345: out << "WOLFSON_5345"; break;
case AdcId::WOLFSON_DSM600: out << "WOLFSON_DSM600"; break;
@ -234,6 +236,7 @@ std::ostream& operator<<(std::ostream& out, GpioId id)
case GpioId::PLUSTEK_OPTICFILM_7300: out << "PLUSTEK_OPTICFILM_7300"; break;
case GpioId::PLUSTEK_OPTICFILM_7400: out << "PLUSTEK_OPTICFILM_7400"; break;
case GpioId::PLUSTEK_OPTICFILM_7500I: out << "PLUSTEK_OPTICFILM_7500I"; break;
case GpioId::PLUSTEK_OPTICFILM_8200I: out << "PLUSTEK_OPTICFILM_8200I"; break;
case GpioId::PLUSTEK_OPTICPRO_3600: out << "PLUSTEK_OPTICPRO_3600"; break;
case GpioId::ST12: out << "ST12"; break;
case GpioId::ST24: out << "ST24"; break;
@ -274,6 +277,7 @@ std::ostream& operator<<(std::ostream& out, MotorId id)
case MotorId::PLUSTEK_OPTICFILM_7300: out << "PLUSTEK_OPTICFILM_7300"; break;
case MotorId::PLUSTEK_OPTICFILM_7400: out << "PLUSTEK_OPTICFILM_7400"; break;
case MotorId::PLUSTEK_OPTICFILM_7500I: out << "PLUSTEK_OPTICFILM_7500I"; break;
case MotorId::PLUSTEK_OPTICFILM_8200I: out << "PLUSTEK_OPTICFILM_8200I"; break;
case MotorId::PLUSTEK_OPTICPRO_3600: out << "PLUSTEK_OPTICPRO_3600"; break;
case MotorId::ROADWARRIOR: out << "ROADWARRIOR"; break;
case MotorId::ST24: out << "ST24"; break;

Wyświetl plik

@ -205,6 +205,7 @@ enum class ModelId : unsigned
PLUSTEK_OPTICFILM_7300,
PLUSTEK_OPTICFILM_7400,
PLUSTEK_OPTICFILM_7500I,
PLUSTEK_OPTICFILM_8200I,
PLUSTEK_OPTICPRO_3600,
PLUSTEK_OPTICPRO_ST12,
PLUSTEK_OPTICPRO_ST24,
@ -262,6 +263,7 @@ enum class SensorId : unsigned
CCD_PLUSTEK_OPTICFILM_7300,
CCD_PLUSTEK_OPTICFILM_7400,
CCD_PLUSTEK_OPTICFILM_7500I,
CCD_PLUSTEK_OPTICFILM_8200I,
CCD_PLUSTEK_OPTICPRO_3600,
CCD_ROADWARRIOR,
CCD_ST12, // SONY ILX548: 5340 Pixel ???
@ -315,6 +317,7 @@ enum class AdcId : unsigned
PLUSTEK_OPTICFILM_7300,
PLUSTEK_OPTICFILM_7400,
PLUSTEK_OPTICFILM_7500I,
PLUSTEK_OPTICFILM_8200I,
PLUSTEK_OPTICPRO_3600,
WOLFSON_5345,
WOLFSON_DSM600,
@ -370,6 +373,7 @@ enum class GpioId : unsigned
PLUSTEK_OPTICFILM_7300,
PLUSTEK_OPTICFILM_7400,
PLUSTEK_OPTICFILM_7500I,
PLUSTEK_OPTICFILM_8200I,
PLUSTEK_OPTICPRO_3600,
ST12,
ST24,
@ -408,6 +412,7 @@ enum class MotorId : unsigned
PLUSTEK_OPTICFILM_7300,
PLUSTEK_OPTICFILM_7400,
PLUSTEK_OPTICFILM_7500I,
PLUSTEK_OPTICFILM_8200I,
PLUSTEK_OPTICPRO_3600,
ROADWARRIOR,
ST24,

Wyświetl plik

@ -2983,6 +2983,7 @@ static void genesys_send_shading_coefficient(Genesys_Device* dev, const Genesys_
case SensorId::CCD_PLUSTEK_OPTICFILM_7300:
case SensorId::CCD_PLUSTEK_OPTICFILM_7400:
case SensorId::CCD_PLUSTEK_OPTICFILM_7500I:
case SensorId::CCD_PLUSTEK_OPTICFILM_8200I:
target_code = 0xe000;
o = 0;
compute_coefficients (dev,

Wyświetl plik

@ -108,25 +108,35 @@ gl846_init_registers (Genesys_Device * dev)
dev->reg.clear();
dev->reg.init_reg(0x01, 0x60);
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7400) {
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7400 ||
dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_8200I)
{
dev->reg.init_reg(0x01, 0x22);
}
dev->reg.init_reg(0x02, 0x38);
dev->reg.init_reg(0x03, 0x03);
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7400) {
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7400 ||
dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_8200I)
{
dev->reg.init_reg(0x03, 0xbf);
}
dev->reg.init_reg(0x04, 0x22);
dev->reg.init_reg(0x05, 0x60);
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7400) {
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7400 ||
dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_8200I)
{
dev->reg.init_reg(0x05, 0x48);
}
dev->reg.init_reg(0x06, 0x10);
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7400) {
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7400 ||
dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_8200I)
{
dev->reg.init_reg(0x06, 0xf0);
}
dev->reg.init_reg(0x08, 0x60);
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7400) {
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7400 ||
dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_8200I)
{
dev->reg.init_reg(0x08, 0x00);
}
dev->reg.init_reg(0x09, 0x00);
@ -135,7 +145,9 @@ gl846_init_registers (Genesys_Device * dev)
if (dev->model->model_id == ModelId::PLUSTEK_OPTICBOOK_3800) {
dev->reg.init_reg(0x0b, 0x2a);
}
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7400) {
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7400 ||
dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_8200I)
{
dev->reg.init_reg(0x0b, 0x4a);
}
dev->reg.init_reg(0x0c, 0x00);
@ -163,7 +175,9 @@ gl846_init_registers (Genesys_Device * dev)
}
dev->reg.init_reg(0x20, 0x03);
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7400) {
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7400 ||
dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_8200I)
{
dev->reg.init_reg(0x20, 0x55);
}
dev->reg.init_reg(0x21, 0x10); // STEPNO: set during motor setup
@ -184,7 +198,9 @@ gl846_init_registers (Genesys_Device * dev)
// DUMMY: the number of CCD dummy pixels
dev->reg.init_reg(0x34, 0x1f);
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7400) {
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7400 ||
dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_8200I)
{
dev->reg.init_reg(0x34, 0x14);
}
@ -208,7 +224,9 @@ gl846_init_registers (Genesys_Device * dev)
// DECSEL, STEPTIM
dev->reg.init_reg(0x5e, 0x1f);
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7400) {
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7400 ||
dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_8200I)
{
dev->reg.init_reg(0x5e, 0x01);
}
dev->reg.init_reg(0x5f, 0x01); // FMOVDEC: overwritten during motor setup
@ -238,7 +256,9 @@ gl846_init_registers (Genesys_Device * dev)
dev->reg.init_reg(0x7c, 0x99); // SENSOR_DEF
dev->reg.init_reg(0x7d, 0x20); // SENSOR_DEF
dev->reg.init_reg(0x7f, 0x05);
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7400) {
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7400 ||
dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_8200I)
{
dev->reg.init_reg(0x7f, 0x00);
}
dev->reg.init_reg(0x80, 0x4f); // overwritten during motor setup
@ -267,7 +287,9 @@ gl846_init_registers (Genesys_Device * dev)
// RFHSET (SDRAM refresh time)
dev->reg.init_reg(0xa2, 0x1f);
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7400) {
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7400 ||
dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_8200I)
{
dev->reg.init_reg(0xa2, 0x0f);
}
@ -275,7 +297,9 @@ gl846_init_registers (Genesys_Device * dev)
// Various important settings: GPOM9, MULSTOP, NODECEL, TB3TB1, TB5TB2, FIX16CLK
dev->reg.init_reg(0xab, 0xc0);
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7400) {
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7400 ||
dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_8200I)
{
dev->reg.init_reg(0xab, 0x01);
}
if (dev->model->model_id == ModelId::PLUSTEK_OPTICBOOK_3800) {
@ -616,6 +640,7 @@ static void gl846_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
sanei_genesys_set_lamp_power(dev, sensor, *reg,
!has_flag(session.params.flags, ScanFlag::DISABLE_LAMP));
reg->state.is_xpa_on = has_flag(session.params.flags, ScanFlag::USE_XPA);
/* BW threshold */
r = sanei_genesys_get_address (reg, 0x2e);
@ -853,11 +878,9 @@ void CommandSetGl846::begin_scan(Genesys_Device* dev, const Genesys_Sensor& sens
uint8_t val;
GenesysRegister *r;
/* XXX STEF XXX SCAN GPIO */
/*
val = dev->interface->read_register(REG_0x6C);
dev->interface->write_register(REG_0x6C, val);
*/
if (reg->state.is_xpa_on && reg->state.is_lamp_on) {
dev->cmd_set->set_xpa_lamp_power(*dev, true);
}
scanner_clear_scan_and_feed_counts(*dev);
@ -880,6 +903,10 @@ void CommandSetGl846::end_scan(Genesys_Device* dev, Genesys_Register_Set* reg,
(void) reg;
DBG_HELPER_ARGS(dbg, "check_stop = %d", check_stop);
if (reg->state.is_xpa_on) {
dev->cmd_set->set_xpa_lamp_power(*dev, false);
}
if (!dev->model->is_sheetfed) {
scanner_stop_action(*dev);
}
@ -1271,7 +1298,9 @@ void CommandSetGl846::asic_boot(Genesys_Device* dev, bool cold) const
}
// set up clocks
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7400) {
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7400 ||
dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_8200I)
{
dev->interface->write_0x8c(0x10, 0x0c);
dev->interface->write_0x8c(0x13, 0x0c);
} else {

Wyświetl plik

@ -607,16 +607,17 @@ void sanei_genesys_set_lamp_power(Genesys_Device* dev, const Genesys_Sensor& sen
if (dev->model->asic_type == AsicType::GL843) {
regs_set_exposure(dev->model->asic_type, regs, sensor.exposure);
}
// we don't actually turn on lamp on infrared scan
if ((dev->model->model_id == ModelId::CANON_8400F ||
dev->model->model_id == ModelId::CANON_8600F ||
dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7200I ||
dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7500I) &&
dev->settings.scan_method == ScanMethod::TRANSPARENCY_INFRARED)
{
regs.find_reg(0x03).value &= ~REG_0x03_LAMPPWR;
}
// we don't actually turn on lamp on infrared scan
if ((dev->model->model_id == ModelId::CANON_8400F ||
dev->model->model_id == ModelId::CANON_8600F ||
dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7200I ||
dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7500I ||
dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_8200I) &&
dev->settings.scan_method == ScanMethod::TRANSPARENCY_INFRARED)
{
regs.find_reg(0x03).value &= ~REG_0x03_LAMPPWR;
}
} else {
regs.find_reg(0x03).value &= ~REG_0x03_LAMPPWR;
@ -1006,7 +1007,8 @@ void compute_session(const Genesys_Device* dev, ScanSession& s, const Genesys_Se
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7200I ||
dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7300 ||
dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7400 ||
dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7500I)
dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7500I ||
dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_8200I)
{
s.optical_pixels = align_int_up(s.optical_pixels, 16);
}
@ -1060,7 +1062,8 @@ void compute_session(const Genesys_Device* dev, ScanSession& s, const Genesys_Se
if ((dev->model->asic_type == AsicType::GL845 ||
dev->model->asic_type == AsicType::GL846 ||
dev->model->asic_type == AsicType::GL847) &&
dev->model->model_id != ModelId::PLUSTEK_OPTICFILM_7400)
dev->model->model_id != ModelId::PLUSTEK_OPTICFILM_7400 &&
dev->model->model_id != ModelId::PLUSTEK_OPTICFILM_8200I)
{
if (s.segment_count > 1) {
s.conseq_pixel_dist = sensor.segment_size;

Wyświetl plik

@ -539,6 +539,23 @@ void genesys_init_frontend_tables()
s_frontends->push_back(fe);
fe = Genesys_Frontend();
fe.id = AdcId::PLUSTEK_OPTICFILM_8200I;
fe.layout = analog_devices;
fe.regs = {
{ 0x00, 0xf8 },
{ 0x01, 0x80 },
{ 0x02, 0x28 },
{ 0x03, 0x20 },
{ 0x04, 0x28 },
{ 0x05, 0x2f },
{ 0x06, 0x2d },
{ 0x07, 0x23 },
};
fe.reg2 = {0x00, 0x00, 0x00};
s_frontends->push_back(fe);
fe = Genesys_Frontend();
fe.id = AdcId::CANON_4400F;
fe.layout = wolfson_layout;

Wyświetl plik

@ -344,6 +344,16 @@ void genesys_init_gpo_tables()
};
s_gpo->push_back(gpo);
gpo = Genesys_Gpo();
gpo.id = GpioId::PLUSTEK_OPTICFILM_8200I;
gpo.regs = {
{ 0x6b, 0x30 }, { 0x6c, 0x4c }, { 0x6d, 0x80 }, { 0x6e, 0x4c }, { 0x6f, 0x80 },
{ 0xa6, 0x00 }, { 0xa7, 0x07 }, { 0xa8, 0x20 }, { 0xa9, 0x01 },
};
s_gpo->push_back(gpo);
gpo = Genesys_Gpo();
gpo.id = GpioId::CANON_4400F;
gpo.regs = {

Wyświetl plik

@ -54,7 +54,7 @@ void genesys_init_memory_layout_tables()
s_memory_layout->push_back(ml);
ml = MemoryLayout();
ml.models = { ModelId::PLUSTEK_OPTICFILM_7400 };
ml.models = { ModelId::PLUSTEK_OPTICFILM_7400, ModelId::PLUSTEK_OPTICFILM_8200I };
ml.regs = {
{ 0x81, 0x6d }, { 0x82, 0x00 }, { 0x83, 0x00 }, { 0x84, 0x00 },
{ 0x85, 0x00 }, { 0x86, 0x00 },

Wyświetl plik

@ -2535,6 +2535,71 @@ void genesys_init_usb_device_tables()
s_usb_devices->emplace_back(0x07b3, 0x0c13, model);
model = Genesys_Model();
model.name = "plustek-opticfilm-8200i";
model.vendor = "PLUSTEK";
model.model = "OpticFilm 8200i";
model.model_id = ModelId::PLUSTEK_OPTICFILM_8200I;
model.asic_type = AsicType::GL845;
model.resolutions = {
{
{ ScanMethod::TRANSPARENCY, ScanMethod::TRANSPARENCY_INFRARED },
{ 7200, 3600, 1800, 900 },
{ 7200, 3600, 1800, 900 },
}
};
model.bpp_gray_values = { 16 };
model.bpp_color_values = { 16 };
model.default_method = ScanMethod::TRANSPARENCY;
model.x_offset = 0.0;
model.y_offset = 0.0;
model.x_size = 36.0;
model.y_size = 44.0;
model.y_offset_calib_white = 0.0;
model.y_size_calib_mm = 0.0;
model.x_offset_calib_black = 6.5;
model.x_size_calib_mm = 37.0;
model.x_offset_ta = 0.5;
model.y_offset_ta = 28.5;
model.x_size_ta = 37.0;
model.y_size_ta = 25.0;
model.y_offset_sensor_to_ta = 0.0;
model.y_offset_calib_black_ta = 6.5;
model.y_offset_calib_white_ta = 0.0;
model.y_size_calib_ta_mm = 2.0;
model.post_scan = 0.0;
model.eject_feed = 0.0;
model.ld_shift_r = 0;
model.ld_shift_g = 12;
model.ld_shift_b = 24;
model.line_mode_color_order = ColorOrder::RGB;
model.is_cis = false;
model.is_sheetfed = false;
model.sensor_id = SensorId::CCD_PLUSTEK_OPTICFILM_8200I;
model.adc_id = AdcId::PLUSTEK_OPTICFILM_8200I;
model.gpio_id = GpioId::PLUSTEK_OPTICFILM_8200I;
model.motor_id = MotorId::PLUSTEK_OPTICFILM_8200I;
model.flags = ModelFlag::CUSTOM_GAMMA |
ModelFlag::SKIP_WARMUP |
ModelFlag::DARK_CALIBRATION |
ModelFlag::SHADING_REPARK;
model.search_lines = 200;
s_usb_devices->emplace_back(0x07b3, 0x130d, model);
model = Genesys_Model();
model.name = "hewlett-packard-scanjet-N6310";
model.vendor = "Hewlett Packard";

Wyświetl plik

@ -486,6 +486,20 @@ void genesys_init_motor_tables()
s_motors->push_back(std::move(motor));
motor = Genesys_Motor();
motor.id = MotorId::PLUSTEK_OPTICFILM_8200I;
motor.base_ydpi = 3600;
motor.optical_ydpi = 3600;
profile = MotorProfile();
profile.slope = MotorSlope::create_from_steps(64102 * 4, 400 * 4, 100);
profile.step_type = StepType::QUARTER;
profile.motor_vref = 3;
motor.profiles.push_back(profile);
motor.fast_profiles.push_back(profile);
s_motors->push_back(std::move(motor));
motor = Genesys_Motor();
motor.id = MotorId::IMG101;
motor.base_ydpi = 600;

Wyświetl plik

@ -3376,6 +3376,64 @@ void genesys_init_sensor_tables()
}
sensor = Genesys_Sensor();
sensor.sensor_id = SensorId::CCD_PLUSTEK_OPTICFILM_8200I; // gl845
sensor.optical_res = 7200;
sensor.method = ScanMethod::TRANSPARENCY;
sensor.register_dpihw = 1200;
sensor.ccd_size_divisor = 1;
sensor.black_pixels = 88; // TODO
sensor.dummy_pixel = 20;
sensor.ccd_start_xoffset = 120;
sensor.fau_gain_white_ref = 210;
sensor.gain_white_ref = 230;
sensor.exposure = { 0x0000, 0x0000, 0x0000 };
sensor.exposure_lperiod = 14000;
sensor.stagger_config = StaggerConfig{7200, 4};
sensor.use_host_side_calib = true;
sensor.custom_regs = {
{ 0x08, 0x00 }, { 0x09, 0x00 }, { 0x0a, 0x00 },
{ 0x16, 0x27 }, { 0x17, 0x0c }, { 0x18, 0x10 }, { 0x19, 0x2a },
{ 0x1a, 0x00 }, { 0x1b, 0x00 }, { 0x1c, 0x20 }, { 0x1d, 0x84 },
{ 0x52, 0x09 }, { 0x53, 0x0d }, { 0x54, 0x0f }, { 0x55, 0x01 },
{ 0x56, 0x04 }, { 0x57, 0x07 }, { 0x58, 0x31 }, { 0x59, 0x79 }, { 0x5a, 0xc0 },
{ 0x70, 0x0a }, { 0x71, 0x0b }, { 0x72, 0x0c }, { 0x73, 0x0d },
{ 0x74, 0x00 }, { 0x75, 0x00 }, { 0x76, 0x00 },
{ 0x77, 0x00 }, { 0x78, 0x00 }, { 0x79, 0x00 },
{ 0x7a, 0x00 }, { 0x7b, 0x00 }, { 0x7c, 0x00 }, { 0x7d, 0x00 },
{ 0x87, 0x00 },
};
sensor.gamma = { 1.0f, 1.0f, 1.0f };
sensor.get_ccd_size_divisor_fun = get_ccd_size_divisor_exact;
{
struct CustomSensorSettings
{
ValueFilterAny<unsigned> resolutions;
ScanMethod method;
unsigned register_dpiset;
};
CustomSensorSettings custom_settings[] = {
{ { 900 }, ScanMethod::TRANSPARENCY, 150 },
{ { 1800 }, ScanMethod::TRANSPARENCY, 300 },
{ { 3600 }, ScanMethod::TRANSPARENCY, 600 },
{ { 7200 }, ScanMethod::TRANSPARENCY, 1200 },
{ { 900 }, ScanMethod::TRANSPARENCY_INFRARED, 150 },
{ { 1800 }, ScanMethod::TRANSPARENCY_INFRARED, 300 },
{ { 3600 }, ScanMethod::TRANSPARENCY_INFRARED, 600 },
{ { 7200 }, ScanMethod::TRANSPARENCY_INFRARED, 1200 },
};
for (const CustomSensorSettings& setting : custom_settings) {
sensor.resolutions = setting.resolutions;
sensor.method = setting.method;
sensor.shading_resolution = setting.resolutions.values()[0];
sensor.register_dpiset = setting.register_dpiset;
s_sensors->push_back(sensor);
}
}
sensor = Genesys_Sensor();
sensor.sensor_id = SensorId::CCD_IMG101; // gl846
sensor.resolutions = { 75, 100, 150, 300, 600, 1200 };

Wyświetl plik

@ -37,6 +37,11 @@
:usbid "0x07b3" "0x0c13"
:status :basic
:model "OpticFilm 8200i"
:interface "USB"
:usbid "0x07b3" "0x130d"
:status :basic
; -----------------------------------------------------------------------------
:mfg "Medion/Lifetec/Tevion/Cytron"