kopia lustrzana https://gitlab.com/sane-project/backends
genesys: Add support for Plustek Opticfilm 8200i
rodzic
adaac29d90
commit
6cb39e0a29
|
@ -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
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 = {
|
||||
|
|
|
@ -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 },
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 };
|
||||
|
|
|
@ -37,6 +37,11 @@
|
|||
:usbid "0x07b3" "0x0c13"
|
||||
:status :basic
|
||||
|
||||
:model "OpticFilm 8200i"
|
||||
:interface "USB"
|
||||
:usbid "0x07b3" "0x130d"
|
||||
:status :basic
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
|
||||
:mfg "Medion/Lifetec/Tevion/Cytron"
|
||||
|
|
Ładowanie…
Reference in New Issue