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