kopia lustrzana https://gitlab.com/sane-project/backends
Merge branch 'genesys-plustek-7300-7500i' into 'master'
genesys: Implement support for Plustek OpticFilm 7300 and 7500i scanners See merge request sane-project/backends!210merge-requests/210/merge
commit
5ca0acd19a
|
@ -127,6 +127,12 @@ usb 0x07b3 0x0900
|
|||
# Plustek OpticFilm 7200i
|
||||
usb 0x07b3 0x0c04
|
||||
|
||||
# Plustek OpticFilm 7300
|
||||
usb 0x07b3 0x0c12
|
||||
|
||||
# Plustek OpticFilm 7500i
|
||||
usb 0x07b3 0x0c13
|
||||
|
||||
# Primax Electronics, Ltd Xerox 2400 Onetouch
|
||||
usb 0x0461 0x038b
|
||||
|
||||
|
|
|
@ -153,6 +153,8 @@ enum class ModelId : unsigned
|
|||
PENTAX_DSMOBILE_600,
|
||||
PLUSTEK_OPTICBOOK_3800,
|
||||
PLUSTEK_OPTICFILM_7200I,
|
||||
PLUSTEK_OPTICFILM_7300,
|
||||
PLUSTEK_OPTICFILM_7500I,
|
||||
PLUSTEK_OPTICPRO_3600,
|
||||
PLUSTEK_OPTICPRO_ST12,
|
||||
PLUSTEK_OPTICPRO_ST24,
|
||||
|
@ -190,6 +192,8 @@ enum class SensorId : unsigned
|
|||
CCD_KVSS080,
|
||||
CCD_PLUSTEK_OPTICBOOK_3800,
|
||||
CCD_PLUSTEK_OPTICFILM_7200I,
|
||||
CCD_PLUSTEK_OPTICFILM_7300,
|
||||
CCD_PLUSTEK_OPTICFILM_7500I,
|
||||
CCD_PLUSTEK_OPTICPRO_3600,
|
||||
CCD_ROADWARRIOR,
|
||||
CCD_ST12, // SONY ILX548: 5340 Pixel ???
|
||||
|
@ -239,6 +243,8 @@ enum class AdcId : unsigned
|
|||
KVSS080,
|
||||
PLUSTEK_OPTICBOOK_3800,
|
||||
PLUSTEK_OPTICFILM_7200I,
|
||||
PLUSTEK_OPTICFILM_7300,
|
||||
PLUSTEK_OPTICFILM_7500I,
|
||||
PLUSTEK_OPTICPRO_3600,
|
||||
WOLFSON_5345,
|
||||
WOLFSON_DSM600,
|
||||
|
@ -289,6 +295,8 @@ enum class GpioId : unsigned
|
|||
MD_5345,
|
||||
PLUSTEK_OPTICBOOK_3800,
|
||||
PLUSTEK_OPTICFILM_7200I,
|
||||
PLUSTEK_OPTICFILM_7300,
|
||||
PLUSTEK_OPTICFILM_7500I,
|
||||
PLUSTEK_OPTICPRO_3600,
|
||||
ST12,
|
||||
ST24,
|
||||
|
@ -321,6 +329,8 @@ enum class MotorId : unsigned
|
|||
MD_5345,
|
||||
PLUSTEK_OPTICBOOK_3800,
|
||||
PLUSTEK_OPTICFILM_7200I,
|
||||
PLUSTEK_OPTICFILM_7300,
|
||||
PLUSTEK_OPTICFILM_7500I,
|
||||
PLUSTEK_OPTICPRO_3600,
|
||||
ROADWARRIOR,
|
||||
ST24,
|
||||
|
|
|
@ -2591,6 +2591,8 @@ static void genesys_send_shading_coefficient(Genesys_Device* dev, const Genesys_
|
|||
case SensorId::CCD_CANON_8400F:
|
||||
case SensorId::CCD_CANON_8600F:
|
||||
case SensorId::CCD_PLUSTEK_OPTICFILM_7200I:
|
||||
case SensorId::CCD_PLUSTEK_OPTICFILM_7300:
|
||||
case SensorId::CCD_PLUSTEK_OPTICFILM_7500I:
|
||||
target_code = 0xe000;
|
||||
o = 0;
|
||||
compute_coefficients (dev,
|
||||
|
|
|
@ -175,7 +175,9 @@ static void gl843_setup_sensor(Genesys_Device* dev, const Genesys_Sensor& sensor
|
|||
regs->set8(custom_reg.address, custom_reg.value);
|
||||
}
|
||||
if (!(dev->model->flags & GENESYS_FLAG_FULL_HWDPI_MODE) &&
|
||||
dev->model->model_id != ModelId::PLUSTEK_OPTICFILM_7200I)
|
||||
dev->model->model_id != ModelId::PLUSTEK_OPTICFILM_7200I &&
|
||||
dev->model->model_id != ModelId::PLUSTEK_OPTICFILM_7300 &&
|
||||
dev->model->model_id != ModelId::PLUSTEK_OPTICFILM_7500I)
|
||||
{
|
||||
regs->set8(0x7d, 0x90);
|
||||
}
|
||||
|
@ -204,12 +206,7 @@ gl843_init_registers (Genesys_Device * dev)
|
|||
|
||||
dev->reg.clear();
|
||||
|
||||
/* default to KV-SS080 */
|
||||
SETREG (0xa2, 0x0f);
|
||||
if (dev->model->model_id == ModelId::CANON_8600F) {
|
||||
SETREG(0xa2, 0x1f);
|
||||
}
|
||||
SETREG (0x01, 0x00);
|
||||
SETREG(0x01, 0x00);
|
||||
SETREG (0x02, 0x78);
|
||||
SETREG (0x03, 0x1f);
|
||||
if (dev->model->model_id == ModelId::HP_SCANJET_G4010 ||
|
||||
|
@ -223,7 +220,10 @@ gl843_init_registers (Genesys_Device * dev)
|
|||
}
|
||||
|
||||
SETREG(0x04, 0x10);
|
||||
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7200I) {
|
||||
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7200I ||
|
||||
dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7300 ||
|
||||
dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7500I)
|
||||
{
|
||||
SETREG(0x04, 0x22);
|
||||
}
|
||||
|
||||
|
@ -250,7 +250,10 @@ gl843_init_registers (Genesys_Device * dev)
|
|||
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7200I) {
|
||||
SETREG(0x06, 0xd0);
|
||||
}
|
||||
if (dev->model->model_id == ModelId::CANON_4400F) {
|
||||
if (dev->model->model_id == ModelId::CANON_4400F ||
|
||||
dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7300 ||
|
||||
dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7500I)
|
||||
{
|
||||
SETREG(0x06, 0xf0); /* SCANMOD=111, PWRBIT and no GAIN4 */
|
||||
}
|
||||
|
||||
|
@ -280,6 +283,10 @@ gl843_init_registers (Genesys_Device * dev)
|
|||
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7200I) {
|
||||
SETREG(0x0b, 0x2a);
|
||||
}
|
||||
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7300 ||
|
||||
dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7500I) {
|
||||
SETREG(0x0b, 0x4a);
|
||||
}
|
||||
if (dev->model->model_id == ModelId::HP_SCANJET_G4010 ||
|
||||
dev->model->model_id == ModelId::HP_SCANJET_G4050 ||
|
||||
dev->model->model_id == ModelId::HP_SCANJET_4850C)
|
||||
|
@ -288,7 +295,8 @@ gl843_init_registers (Genesys_Device * dev)
|
|||
}
|
||||
|
||||
if (dev->model->model_id != ModelId::CANON_8400F &&
|
||||
dev->model->model_id != ModelId::PLUSTEK_OPTICFILM_7200I)
|
||||
dev->model->model_id != ModelId::PLUSTEK_OPTICFILM_7200I &&
|
||||
dev->model->model_id != ModelId::PLUSTEK_OPTICFILM_7300)
|
||||
{
|
||||
SETREG (0x0c, 0x00);
|
||||
}
|
||||
|
@ -382,6 +390,11 @@ gl843_init_registers (Genesys_Device * dev)
|
|||
{
|
||||
SETREG(0x34, 0x14);
|
||||
}
|
||||
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7300 ||
|
||||
dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7500I)
|
||||
{
|
||||
SETREG(0x34, 0x3c);
|
||||
}
|
||||
|
||||
// MAXWD: If available buffer size is less than 2*MAXWD words, then
|
||||
// "buffer full" state will be set.
|
||||
|
@ -437,6 +450,11 @@ gl843_init_registers (Genesys_Device * dev)
|
|||
if (dev->model->model_id == ModelId::CANON_8600F) {
|
||||
SETREG(0x5e, 0x1f);
|
||||
}
|
||||
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7300 ||
|
||||
dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7500I)
|
||||
{
|
||||
SETREG(0x5e, 0x01);
|
||||
}
|
||||
|
||||
//FMOVDEC: The number of deceleration steps in table 5 for auto-go-home
|
||||
SETREG(0x5f, 0x01);
|
||||
|
@ -446,6 +464,11 @@ gl843_init_registers (Genesys_Device * dev)
|
|||
if (dev->model->model_id == ModelId::CANON_8600F) {
|
||||
SETREG(0x5f, 0xf0);
|
||||
}
|
||||
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7300 ||
|
||||
dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7500I)
|
||||
{
|
||||
SETREG(0x5f, 0x01);
|
||||
}
|
||||
|
||||
// Z1MOD[0:20]
|
||||
SETREG (0x60, 0x00);
|
||||
|
@ -466,6 +489,11 @@ gl843_init_registers (Genesys_Device * dev)
|
|||
// FASTPWM[5:0]: Motor phase PWM duty cycle setting for tables 4-5
|
||||
SETREG (0x68, 0x7f);
|
||||
|
||||
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7300) {
|
||||
SETREG(0x67, 0x80);
|
||||
SETREG(0x68, 0x80);
|
||||
}
|
||||
|
||||
// FSHDEC[0:7]: The number of deceleration steps after scanning is finished
|
||||
// (table 3)
|
||||
SETREG (0x69, 0x01);
|
||||
|
@ -496,7 +524,10 @@ gl843_init_registers (Genesys_Device * dev)
|
|||
{
|
||||
SETREG(0x6b, 0xf4);
|
||||
}
|
||||
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7200I) {
|
||||
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7200I ||
|
||||
dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7300 ||
|
||||
dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7500I)
|
||||
{
|
||||
SETREG(0x6b, 0x31);
|
||||
}
|
||||
|
||||
|
@ -579,11 +610,13 @@ gl843_init_registers (Genesys_Device * dev)
|
|||
{
|
||||
SETREG(0x80, 0x50);
|
||||
}
|
||||
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7300 ||
|
||||
dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7500I)
|
||||
{
|
||||
SETREG(0x80, 0x0f);
|
||||
}
|
||||
|
||||
if (dev->model->model_id != ModelId::CANON_4400F) {
|
||||
// NOTE: Historical code. None of the following 6 registers are
|
||||
// documented in the datasheet. Their default value is 0, so probably it's
|
||||
// not a bad idea to leave this here.
|
||||
SETREG (0x81, 0x00);
|
||||
SETREG (0x82, 0x00);
|
||||
SETREG (0x83, 0x00);
|
||||
|
@ -602,7 +635,8 @@ gl843_init_registers (Genesys_Device * dev)
|
|||
|
||||
// MTRPLS[0:7]: The width of the ADF motor trigger signal pulse.
|
||||
if (dev->model->model_id != ModelId::CANON_8400F &&
|
||||
dev->model->model_id != ModelId::PLUSTEK_OPTICFILM_7200I)
|
||||
dev->model->model_id != ModelId::PLUSTEK_OPTICFILM_7200I &&
|
||||
dev->model->model_id != ModelId::PLUSTEK_OPTICFILM_7300)
|
||||
{
|
||||
SETREG(0x94, 0xff);
|
||||
}
|
||||
|
@ -632,6 +666,11 @@ gl843_init_registers (Genesys_Device * dev)
|
|||
|
||||
// RMADLY[0:1], MOTLAG, CMODE, STEPTIM, MULDMYLN, IFRS
|
||||
SETREG(0x9d, 0x04);
|
||||
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7300 ||
|
||||
dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7500I)
|
||||
{
|
||||
SETREG(0x9d, 0x00);
|
||||
}
|
||||
if (dev->model->model_id == ModelId::CANON_4400F ||
|
||||
dev->model->model_id == ModelId::CANON_8400F ||
|
||||
dev->model->model_id == ModelId::CANON_8600F ||
|
||||
|
@ -646,11 +685,16 @@ gl843_init_registers (Genesys_Device * dev)
|
|||
|
||||
// SEL3INV, TGSTIME[0:2], TGWTIME[0:2]
|
||||
if (dev->model->model_id != ModelId::CANON_8400F &&
|
||||
dev->model->model_id != ModelId::PLUSTEK_OPTICFILM_7200I)
|
||||
dev->model->model_id != ModelId::PLUSTEK_OPTICFILM_7200I &&
|
||||
dev->model->model_id != ModelId::PLUSTEK_OPTICFILM_7300)
|
||||
{
|
||||
SETREG(0x9e, 0x00); // SENSOR_DEF
|
||||
}
|
||||
|
||||
if (dev->model->model_id != ModelId::PLUSTEK_OPTICFILM_7300) {
|
||||
SETREG(0xa2, 0x0f);
|
||||
}
|
||||
|
||||
// RFHSET[0:4]: Refresh time of SDRAM in units of 2us
|
||||
if (dev->model->model_id == ModelId::CANON_4400F ||
|
||||
dev->model->model_id == ModelId::CANON_8600F)
|
||||
|
@ -663,14 +707,16 @@ gl843_init_registers (Genesys_Device * dev)
|
|||
// not documented
|
||||
if (dev->model->model_id != ModelId::CANON_4400F &&
|
||||
dev->model->model_id != ModelId::CANON_8400F &&
|
||||
dev->model->model_id != ModelId::PLUSTEK_OPTICFILM_7200I)
|
||||
dev->model->model_id != ModelId::PLUSTEK_OPTICFILM_7200I &&
|
||||
dev->model->model_id != ModelId::PLUSTEK_OPTICFILM_7300)
|
||||
{
|
||||
SETREG(0xaa, 0x00);
|
||||
}
|
||||
|
||||
// GPOM9, MULSTOP[0-2], NODECEL, TB3TB1, TB5TB2, FIX16CLK. Not documented
|
||||
if (dev->model->model_id != ModelId::CANON_8400F &&
|
||||
dev->model->model_id != ModelId::PLUSTEK_OPTICFILM_7200I) {
|
||||
dev->model->model_id != ModelId::PLUSTEK_OPTICFILM_7200I &&
|
||||
dev->model->model_id != ModelId::PLUSTEK_OPTICFILM_7300) {
|
||||
SETREG(0xab, 0x50);
|
||||
}
|
||||
if (dev->model->model_id == ModelId::CANON_4400F) {
|
||||
|
@ -979,12 +1025,8 @@ static void gl843_init_motor_regs_scan(Genesys_Device* dev,
|
|||
r->value &= 0xf0; /* 0 dummy lines */
|
||||
r->value |= scan_dummy; /* dummy lines */
|
||||
|
||||
r = sanei_genesys_get_address (reg, REG67);
|
||||
r->value = 0x3f | (static_cast<unsigned>(step_type) << REG67S_STEPSEL);
|
||||
|
||||
// BUG: here we are writing non-fast step type to fast step type register
|
||||
r = sanei_genesys_get_address (reg, REG68);
|
||||
r->value = 0x3f | (static_cast<unsigned>(step_type) << REG68S_FSTPSEL);
|
||||
reg->set8_mask(REG67, static_cast<unsigned>(step_type) << REG67S_STEPSEL, 0xc0);
|
||||
reg->set8_mask(REG68, static_cast<unsigned>(step_type) << REG68S_FSTPSEL, 0xc0);
|
||||
|
||||
/* steps for STOP table */
|
||||
r = sanei_genesys_get_address (reg, REG_FMOVDEC);
|
||||
|
@ -1724,6 +1766,14 @@ static void gl843_set_xpa_lamp_power(Genesys_Device* dev, bool set)
|
|||
{ 0xa8, 0x00, 0x07 },
|
||||
}
|
||||
},
|
||||
{ ModelId::PLUSTEK_OPTICFILM_7300, ScanMethod::TRANSPARENCY, {}, {} },
|
||||
{ ModelId::PLUSTEK_OPTICFILM_7500I, ScanMethod::TRANSPARENCY, {}, {} },
|
||||
{ ModelId::PLUSTEK_OPTICFILM_7500I, ScanMethod::TRANSPARENCY_INFRARED, {
|
||||
{ 0xa8, 0x07, 0x07 },
|
||||
}, {
|
||||
{ 0xa8, 0x00, 0x07 },
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
for (const auto& setting : settings) {
|
||||
|
@ -1798,7 +1848,9 @@ void CommandSetGl843::begin_scan(Genesys_Device* dev, const Genesys_Sensor& sens
|
|||
gl843_set_xpa_motor_power(dev, true);
|
||||
}
|
||||
break;
|
||||
case GpioId::PLUSTEK_OPTICFILM_7200I: {
|
||||
case GpioId::PLUSTEK_OPTICFILM_7200I:
|
||||
case GpioId::PLUSTEK_OPTICFILM_7300:
|
||||
case GpioId::PLUSTEK_OPTICFILM_7500I: {
|
||||
if (reg->state.is_xpa_on && reg->state.is_lamp_on) {
|
||||
gl843_set_xpa_lamp_power(dev, true);
|
||||
}
|
||||
|
@ -3094,6 +3146,10 @@ void CommandSetGl843::asic_boot(Genesys_Device* dev, bool cold) const
|
|||
}
|
||||
else if (dev->model->model_id == ModelId::CANON_8600F) {
|
||||
sanei_genesys_write_0x8c(dev, 0x10, 0xc8);
|
||||
} else if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7300 ||
|
||||
dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7500I)
|
||||
{
|
||||
sanei_genesys_write_0x8c(dev, 0x10, 0xd4);
|
||||
} else {
|
||||
sanei_genesys_write_0x8c(dev, 0x10, 0xb4);
|
||||
}
|
||||
|
@ -3107,6 +3163,10 @@ void CommandSetGl843::asic_boot(Genesys_Device* dev, bool cold) const
|
|||
case ModelId::PLUSTEK_OPTICFILM_7200I:
|
||||
clock_freq = REG0B_30MHZ;
|
||||
break;
|
||||
case ModelId::PLUSTEK_OPTICFILM_7300:
|
||||
case ModelId::PLUSTEK_OPTICFILM_7500I:
|
||||
clock_freq = REG0B_40MHZ;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -938,7 +938,8 @@ void sanei_genesys_set_lamp_power(Genesys_Device* dev, const Genesys_Sensor& sen
|
|||
// 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_7200I ||
|
||||
dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7500I) &&
|
||||
dev->settings.scan_method == ScanMethod::TRANSPARENCY_INFRARED)
|
||||
{
|
||||
regs.find_reg(0x03).value &= ~REG03_LAMPPWR;
|
||||
|
@ -1493,7 +1494,10 @@ void compute_session(Genesys_Device* dev, ScanSession& s, const Genesys_Sensor&
|
|||
// In quarter-CCD mode optical_pixels is 4x larger than the actual physical number
|
||||
s.optical_pixels = align_int_up(s.optical_pixels, 2 * s.ccd_size_divisor);
|
||||
|
||||
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7200I) {
|
||||
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7200I ||
|
||||
dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7300 ||
|
||||
dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7500I)
|
||||
{
|
||||
s.optical_pixels = align_int_up(s.optical_pixels, 16);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -478,6 +478,40 @@ void genesys_init_frontend_tables()
|
|||
s_frontends->push_back(fe);
|
||||
|
||||
|
||||
fe = Genesys_Frontend();
|
||||
fe.id = AdcId::PLUSTEK_OPTICFILM_7300;
|
||||
fe.layout = analog_devices;
|
||||
fe.regs = {
|
||||
{ 0x00, 0xf8 },
|
||||
{ 0x01, 0x80 },
|
||||
{ 0x02, 0x10 },
|
||||
{ 0x03, 0x06 },
|
||||
{ 0x04, 0x06 },
|
||||
{ 0x05, 0x09 },
|
||||
{ 0x06, 0x0a },
|
||||
{ 0x07, 0x0102 },
|
||||
};
|
||||
fe.reg2 = {0x00, 0x00, 0x00};
|
||||
s_frontends->push_back(fe);
|
||||
|
||||
|
||||
fe = Genesys_Frontend();
|
||||
fe.id = AdcId::PLUSTEK_OPTICFILM_7500I;
|
||||
fe.layout = analog_devices;
|
||||
fe.regs = {
|
||||
{ 0x00, 0xf8 },
|
||||
{ 0x01, 0x80 },
|
||||
{ 0x02, 0x1d },
|
||||
{ 0x03, 0x17 },
|
||||
{ 0x04, 0x13 },
|
||||
{ 0x05, 0x00 },
|
||||
{ 0x06, 0x00 },
|
||||
{ 0x07, 0x0111 },
|
||||
};
|
||||
fe.reg2 = {0x00, 0x00, 0x00};
|
||||
s_frontends->push_back(fe);
|
||||
|
||||
|
||||
fe = Genesys_Frontend();
|
||||
fe.id = AdcId::CANON_8400F;
|
||||
fe.layout = wolfson_layout;
|
||||
|
|
|
@ -304,6 +304,33 @@ void genesys_init_gpo_tables()
|
|||
};
|
||||
s_gpo->push_back(gpo);
|
||||
|
||||
gpo = Genesys_Gpo();
|
||||
gpo.id = GpioId::PLUSTEK_OPTICFILM_7300;
|
||||
gpo.regs = {
|
||||
{ 0x6c, 0x4c },
|
||||
{ 0x6d, 0x00 },
|
||||
{ 0x6e, 0x4c },
|
||||
{ 0x6f, 0x80 },
|
||||
{ 0xa6, 0x00 },
|
||||
{ 0xa7, 0x07 },
|
||||
{ 0xa8, 0x20 },
|
||||
{ 0xa9, 0x01 },
|
||||
};
|
||||
s_gpo->push_back(gpo);
|
||||
|
||||
gpo = Genesys_Gpo();
|
||||
gpo.id = GpioId::PLUSTEK_OPTICFILM_7500I;
|
||||
gpo.regs = {
|
||||
{ 0x6c, 0x4c },
|
||||
{ 0x6d, 0x00 },
|
||||
{ 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;
|
||||
|
|
|
@ -2389,6 +2389,123 @@ void genesys_init_usb_device_tables()
|
|||
s_usb_devices->emplace_back(0x07b3, 0x0c04, model);
|
||||
|
||||
|
||||
model = Genesys_Model();
|
||||
model.name = "plustek-opticfilm-7300";
|
||||
model.vendor = "PLUSTEK";
|
||||
model.model = "OpticFilm 7300";
|
||||
model.model_id = ModelId::PLUSTEK_OPTICFILM_7300;
|
||||
model.asic_type = AsicType::GL843;
|
||||
model.xdpi_values = { 7200, 3600, 1800, 900 };
|
||||
model.ydpi_values = { 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.x_offset_calib_black = 6.5;
|
||||
|
||||
model.x_offset_ta = 0.0;
|
||||
model.y_offset_ta = 29.0;
|
||||
model.x_size_ta = 36.0;
|
||||
model.y_size_ta = 24.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.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_7300;
|
||||
model.adc_id = AdcId::PLUSTEK_OPTICFILM_7300;
|
||||
model.gpio_id = GpioId::PLUSTEK_OPTICFILM_7300;
|
||||
model.motor_id = MotorId::PLUSTEK_OPTICFILM_7300;
|
||||
|
||||
model.flags = GENESYS_FLAG_HAS_UTA |
|
||||
GENESYS_FLAG_CUSTOM_GAMMA |
|
||||
GENESYS_FLAG_SKIP_WARMUP |
|
||||
GENESYS_FLAG_DARK_CALIBRATION |
|
||||
GENESYS_FLAG_OFFSET_CALIBRATION |
|
||||
GENESYS_HAS_NO_BUTTONS |
|
||||
GENESYS_FLAG_SHADING_REPARK |
|
||||
GENESYS_FLAG_CALIBRATION_HOST_SIDE;
|
||||
|
||||
model.shading_lines = 7;
|
||||
model.shading_ta_lines = 50;
|
||||
model.search_lines = 200;
|
||||
s_usb_devices->emplace_back(0x07b3, 0x0c12, model);
|
||||
|
||||
|
||||
model = Genesys_Model();
|
||||
model.name = "plustek-opticfilm-7500i";
|
||||
model.vendor = "PLUSTEK";
|
||||
model.model = "OpticFilm 7500i";
|
||||
model.model_id = ModelId::PLUSTEK_OPTICFILM_7500I;
|
||||
model.asic_type = AsicType::GL843;
|
||||
model.xdpi_values = { 7200, 3600, 1800, 900 };
|
||||
model.ydpi_values = { 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.x_offset_calib_black = 6.5;
|
||||
|
||||
model.x_offset_ta = 0.0;
|
||||
model.y_offset_ta = 29.0;
|
||||
model.x_size_ta = 36.0;
|
||||
model.y_size_ta = 24.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.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_7500I;
|
||||
model.adc_id = AdcId::PLUSTEK_OPTICFILM_7500I;
|
||||
model.gpio_id = GpioId::PLUSTEK_OPTICFILM_7500I;
|
||||
model.motor_id = MotorId::PLUSTEK_OPTICFILM_7500I;
|
||||
|
||||
model.flags = GENESYS_FLAG_HAS_UTA |
|
||||
GENESYS_FLAG_HAS_UTA_INFRARED |
|
||||
GENESYS_FLAG_CUSTOM_GAMMA |
|
||||
GENESYS_FLAG_SKIP_WARMUP |
|
||||
GENESYS_FLAG_DARK_CALIBRATION |
|
||||
GENESYS_FLAG_OFFSET_CALIBRATION |
|
||||
GENESYS_HAS_NO_BUTTONS |
|
||||
GENESYS_FLAG_SHADING_REPARK |
|
||||
GENESYS_FLAG_CALIBRATION_HOST_SIDE;
|
||||
|
||||
model.shading_lines = 7;
|
||||
model.shading_ta_lines = 50;
|
||||
model.search_lines = 200;
|
||||
s_usb_devices->emplace_back(0x07b3, 0x0c13, model);
|
||||
|
||||
|
||||
model = Genesys_Model();
|
||||
model.name = "hewlett-packard-scanjet-N6310";
|
||||
model.vendor = "Hewlett Packard";
|
||||
|
|
|
@ -619,6 +619,22 @@ void genesys_init_motor_tables()
|
|||
s_motors->push_back(std::move(motor));
|
||||
|
||||
|
||||
motor = Genesys_Motor();
|
||||
motor.id = MotorId::PLUSTEK_OPTICFILM_7300;
|
||||
motor.base_ydpi = 3600;
|
||||
motor.optical_ydpi = 3600;
|
||||
motor.max_step_type = 0;
|
||||
s_motors->push_back(std::move(motor));
|
||||
|
||||
|
||||
motor = Genesys_Motor();
|
||||
motor.id = MotorId::PLUSTEK_OPTICFILM_7500I;
|
||||
motor.base_ydpi = 3600;
|
||||
motor.optical_ydpi = 3600;
|
||||
motor.max_step_type = 0;
|
||||
s_motors->push_back(std::move(motor));
|
||||
|
||||
|
||||
motor = Genesys_Motor();
|
||||
motor.id = MotorId::IMG101;
|
||||
motor.base_ydpi = 600;
|
||||
|
|
|
@ -747,6 +747,34 @@ static uint32_t motor_speeds_plustek_7200i_2[] = {
|
|||
15880, 15880, 0
|
||||
};
|
||||
|
||||
static std::uint32_t motor_speeds_plustek_7300_1[] = {
|
||||
31250, 3105, 2266, 1883, 1653, 1512, 1512, 0
|
||||
};
|
||||
|
||||
static std::uint32_t motor_speeds_plustek_7500i_1[] = {
|
||||
31250, 3105, 2266, 1883, 1653, 1512, 1512, 0
|
||||
};
|
||||
|
||||
static std::uint32_t motor_speeds_plustek_7500i_2[] = {
|
||||
31250, 3105, 2266, 1883, 1653, 1493, 1375, 1375, 0
|
||||
};
|
||||
|
||||
/* TODO:
|
||||
1800 dpi: 31250, 3105, 3025, 3025
|
||||
|
||||
3600 dpi: 31250, 6050, 6050
|
||||
|
||||
7200 dpi: 31250, 12100, 12100
|
||||
|
||||
isrd:
|
||||
|
||||
1800 dpi: 31250, 3105, 2750, 2750
|
||||
|
||||
3600 dpi: 31250, 5500, 5500,
|
||||
|
||||
7200 dpi: 31250, 11000, 11000,
|
||||
*/
|
||||
|
||||
Motor_Profile gl843_motor_profiles[] = {
|
||||
{ MotorId::KVSS080, 8000, StepType::HALF, kvss080 },
|
||||
{ MotorId::G4050, 8016, StepType::HALF, g4050_fast },
|
||||
|
@ -758,6 +786,9 @@ Motor_Profile gl843_motor_profiles[] = {
|
|||
{ MotorId::CANON_8600F, 0x59d8, StepType::QUARTER, motor_speeds_cs8600f }, // FIXME: if the exposure is lower then we'll select another motor
|
||||
{ MotorId::PLUSTEK_OPTICFILM_7200I, 0x19c8, StepType::HALF, motor_speeds_plustek_7200i_1},
|
||||
{ MotorId::PLUSTEK_OPTICFILM_7200I, 0x2538, StepType::HALF, motor_speeds_plustek_7200i_2},
|
||||
{ MotorId::PLUSTEK_OPTICFILM_7300, 0x2f44, StepType::QUARTER, motor_speeds_plustek_7300_1},
|
||||
{ MotorId::PLUSTEK_OPTICFILM_7500I, 0x2f44, StepType::QUARTER, motor_speeds_plustek_7500i_1},
|
||||
{ MotorId::PLUSTEK_OPTICFILM_7500I, 0x2af8, StepType::QUARTER, motor_speeds_plustek_7500i_2},
|
||||
{ MotorId::UNKNOWN, 0, StepType::FULL, nullptr },
|
||||
};
|
||||
|
||||
|
|
|
@ -3393,6 +3393,162 @@ void genesys_init_sensor_tables()
|
|||
}
|
||||
|
||||
|
||||
sensor = Genesys_Sensor();
|
||||
sensor.sensor_id = SensorId::CCD_PLUSTEK_OPTICFILM_7300;
|
||||
sensor.optical_res = 7200;
|
||||
sensor.method = ScanMethod::TRANSPARENCY;
|
||||
sensor.register_dpihw_override = 1200;
|
||||
sensor.black_pixels = 88; // TODO
|
||||
sensor.dummy_pixel = 20;
|
||||
sensor.ccd_start_xoffset = 0;
|
||||
sensor.sensor_pixels = 10200; // TODO
|
||||
sensor.fau_gain_white_ref = 210;
|
||||
sensor.gain_white_ref = 230;
|
||||
sensor.exposure = { 0x0000, 0x0000, 0x0000 };
|
||||
sensor.exposure_lperiod = 0x2f44;
|
||||
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, 0x0a },
|
||||
{ 0x53, 0x0d },
|
||||
{ 0x54, 0x0f },
|
||||
{ 0x55, 0x01 },
|
||||
{ 0x56, 0x04 },
|
||||
{ 0x57, 0x07 },
|
||||
{ 0x58, 0x31 },
|
||||
{ 0x59, 0x79 },
|
||||
{ 0x5a, 0xc0 },
|
||||
{ 0x70, 0x0c },
|
||||
{ 0x71, 0x0d },
|
||||
{ 0x72, 0x0e },
|
||||
{ 0x73, 0x0f },
|
||||
{ 0x74, 0x00 }, { 0x75, 0x00 }, { 0x76, 0x00 },
|
||||
{ 0x77, 0x00 }, { 0x78, 0x00 }, { 0x79, 0x00 },
|
||||
{ 0x7a, 0x00 }, { 0x7b, 0x00 }, { 0x7c, 0x00 },
|
||||
};
|
||||
sensor.gamma = {1.0, 1.0, 1.0};
|
||||
sensor.get_logical_hwdpi_fun = default_get_logical_hwdpi;
|
||||
sensor.get_register_hwdpi_fun = default_get_logical_hwdpi;
|
||||
sensor.get_hwdpi_divisor_fun = default_get_hwdpi_divisor_for_dpi;
|
||||
sensor.get_ccd_size_divisor_fun = get_ccd_size_divisor_exact;
|
||||
{
|
||||
struct CustomSensorSettings
|
||||
{
|
||||
ResolutionFilter resolutions;
|
||||
unsigned ccd_size_divisor;
|
||||
unsigned logical_dpihw_override;
|
||||
unsigned pixel_count_multiplier;
|
||||
unsigned dpiset_override;
|
||||
};
|
||||
|
||||
CustomSensorSettings custom_settings[] = {
|
||||
{ { 900 }, 1, 900, 8, 150 },
|
||||
{ { 1800 }, 1, 1800, 4, 300 },
|
||||
{ { 3600 }, 1, 3600, 2, 600 },
|
||||
{ { 7200 }, 1, 7200, 1, 1200 },
|
||||
};
|
||||
|
||||
for (const CustomSensorSettings& setting : custom_settings) {
|
||||
sensor.resolutions = setting.resolutions;
|
||||
sensor.ccd_size_divisor = setting.ccd_size_divisor;
|
||||
sensor.logical_dpihw_override = setting.logical_dpihw_override;
|
||||
sensor.pixel_count_multiplier = setting.pixel_count_multiplier;
|
||||
sensor.dpiset_override = setting.dpiset_override;
|
||||
s_sensors->push_back(sensor);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
sensor = Genesys_Sensor();
|
||||
sensor.sensor_id = SensorId::CCD_PLUSTEK_OPTICFILM_7500I;
|
||||
sensor.optical_res = 7200;
|
||||
sensor.register_dpihw_override = 1200;
|
||||
sensor.black_pixels = 88; // TODO
|
||||
sensor.dummy_pixel = 20;
|
||||
sensor.ccd_start_xoffset = 0;
|
||||
sensor.sensor_pixels = 10200; // TODO
|
||||
sensor.fau_gain_white_ref = 210;
|
||||
sensor.gain_white_ref = 230;
|
||||
sensor.exposure = { 0x0000, 0x0000, 0x0000 };
|
||||
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, 0x0a },
|
||||
{ 0x53, 0x0d },
|
||||
{ 0x54, 0x0f },
|
||||
{ 0x55, 0x01 },
|
||||
{ 0x56, 0x04 },
|
||||
{ 0x57, 0x07 },
|
||||
{ 0x58, 0x31 },
|
||||
{ 0x59, 0x79 },
|
||||
{ 0x5a, 0xc0 },
|
||||
{ 0x70, 0x0c },
|
||||
{ 0x71, 0x0d },
|
||||
{ 0x72, 0x0e },
|
||||
{ 0x73, 0x0f },
|
||||
{ 0x74, 0x00 }, { 0x75, 0x00 }, { 0x76, 0x00 },
|
||||
{ 0x77, 0x00 }, { 0x78, 0x00 }, { 0x79, 0x00 },
|
||||
{ 0x7a, 0x00 }, { 0x7b, 0x00 }, { 0x7c, 0x00 },
|
||||
};
|
||||
sensor.gamma = {1.0, 1.0, 1.0};
|
||||
sensor.get_logical_hwdpi_fun = default_get_logical_hwdpi;
|
||||
sensor.get_register_hwdpi_fun = default_get_logical_hwdpi;
|
||||
sensor.get_hwdpi_divisor_fun = default_get_hwdpi_divisor_for_dpi;
|
||||
sensor.get_ccd_size_divisor_fun = get_ccd_size_divisor_exact;
|
||||
{
|
||||
struct CustomSensorSettings
|
||||
{
|
||||
ResolutionFilter resolutions;
|
||||
ScanMethod method;
|
||||
unsigned ccd_size_divisor;
|
||||
unsigned logical_dpihw_override;
|
||||
unsigned pixel_count_multiplier;
|
||||
unsigned exposure_lperiod;
|
||||
unsigned dpiset_override;
|
||||
};
|
||||
|
||||
CustomSensorSettings custom_settings[] = {
|
||||
{ { 900 }, ScanMethod::TRANSPARENCY, 1, 900, 8, 0x2f44, 150 },
|
||||
{ { 1800 }, ScanMethod::TRANSPARENCY, 1, 1800, 4, 0x2f44, 300 },
|
||||
{ { 3600 }, ScanMethod::TRANSPARENCY, 1, 3600, 2, 0x2f44, 600 },
|
||||
{ { 7200 }, ScanMethod::TRANSPARENCY, 1, 7200, 1, 0x2f44, 1200 },
|
||||
{ { 900 }, ScanMethod::TRANSPARENCY_INFRARED, 1, 900, 8, 0x2af8, 150 },
|
||||
{ { 1800 }, ScanMethod::TRANSPARENCY_INFRARED, 1, 1800, 4, 0x2af8, 300 },
|
||||
{ { 3600 }, ScanMethod::TRANSPARENCY_INFRARED, 1, 3600, 2, 0x2af8, 600 },
|
||||
{ { 7200 }, ScanMethod::TRANSPARENCY_INFRARED, 1, 7200, 1, 0x2af8, 1200 },
|
||||
};
|
||||
|
||||
for (const CustomSensorSettings& setting : custom_settings) {
|
||||
sensor.resolutions = setting.resolutions;
|
||||
sensor.method = setting.method;
|
||||
sensor.ccd_size_divisor = setting.ccd_size_divisor;
|
||||
sensor.logical_dpihw_override = setting.logical_dpihw_override;
|
||||
sensor.pixel_count_multiplier = setting.pixel_count_multiplier;
|
||||
sensor.exposure_lperiod = setting.exposure_lperiod;
|
||||
sensor.dpiset_override = setting.dpiset_override;
|
||||
s_sensors->push_back(sensor);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
sensor = Genesys_Sensor();
|
||||
sensor.sensor_id = SensorId::CCD_IMG101;
|
||||
sensor.optical_res = 1200;
|
||||
|
|
|
@ -22,6 +22,16 @@
|
|||
:usbid "0x07b3" "0x0c04"
|
||||
:status :basic
|
||||
|
||||
:model "OpticFilm 7300"
|
||||
:interface "USB"
|
||||
:usbid "0x07b3" "0x0c12"
|
||||
:status :basic
|
||||
|
||||
:model "OpticFilm 7500i"
|
||||
:interface "USB"
|
||||
:usbid "0x07b3" "0x0c13"
|
||||
:status :basic
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
|
||||
:mfg "Medion/Lifetec/Tevion/Cytron"
|
||||
|
|
Ładowanie…
Reference in New Issue