kopia lustrzana https://gitlab.com/sane-project/backends
Merge branch 'master' of ssh://git.debian.org/git/sane/sane-backends
commit
b604181208
|
@ -1,3 +1,8 @@
|
||||||
|
2010-10-13 Stéphane Voltz <stef.dev@free.fr>
|
||||||
|
* backend/genesys_devices.c backend/genesys_gl843.c
|
||||||
|
backend/genesys_gl843.h: added 100, 150, 400 and 600 dpi modes for
|
||||||
|
G4050 and G4010. Added 500 and 400 dpi modes for KV-SS080
|
||||||
|
|
||||||
2010-09-30 Alex Belkin <abc@telekom.ru>
|
2010-09-30 Alex Belkin <abc@telekom.ru>
|
||||||
* Makefile.in backend/Makefile.am backend/Makefile.in backend/xerox_mfp-tcp.c
|
* Makefile.in backend/Makefile.am backend/Makefile.in backend/xerox_mfp-tcp.c
|
||||||
backend/xerox_mfp-usb.c backend/xerox_mfp.c backend/xerox_mfp.conf.in backend/xerox_mfp.h
|
backend/xerox_mfp-usb.c backend/xerox_mfp.c backend/xerox_mfp.conf.in backend/xerox_mfp.h
|
||||||
|
|
|
@ -486,11 +486,11 @@ static Genesys_Sensor Sensor[] = {
|
||||||
NULL, NULL, NULL}
|
NULL, NULL, NULL}
|
||||||
,
|
,
|
||||||
{CCD_G4050,
|
{CCD_G4050,
|
||||||
600, /* 4800 */
|
4800,
|
||||||
48,
|
48,
|
||||||
28,
|
28,
|
||||||
152,
|
152,
|
||||||
2696*2, /* 2696*2=>600, *4=>2400 */
|
20400, /* 20400 only half part of the sensor is used */
|
||||||
210,
|
210,
|
||||||
230,
|
230,
|
||||||
/* 08 09 0a 0b */
|
/* 08 09 0a 0b */
|
||||||
|
@ -1004,8 +1004,8 @@ static Genesys_Model panasonic_kvss080_model = {
|
||||||
GENESYS_GL843,
|
GENESYS_GL843,
|
||||||
NULL,
|
NULL,
|
||||||
|
|
||||||
{ 600, 300, 200, 150, 100, 75, 0}, /* possible x-resolutions */
|
{ 600, 500, 400, 300, 200, 150, 100, 75, 0}, /* possible x-resolutions */
|
||||||
{ 1200, 600, 300, 200, 150, 100, 75, 0}, /* possible y-resolutions */
|
{ 1200, 600, 500, 400, 300, 200, 150, 100, 75, 0}, /* possible y-resolutions */
|
||||||
{16, 8, 0}, /* possible depths in gray mode */
|
{16, 8, 0}, /* possible depths in gray mode */
|
||||||
{16, 8, 0}, /* possible depths in color mode */
|
{16, 8, 0}, /* possible depths in color mode */
|
||||||
|
|
||||||
|
@ -1055,8 +1055,8 @@ static Genesys_Model hpg4010_model = {
|
||||||
GENESYS_GL843,
|
GENESYS_GL843,
|
||||||
NULL,
|
NULL,
|
||||||
|
|
||||||
{ /* 4800, 2400, 1200, 800, 600, 400, */ 300, 200, 0},
|
{ /*2400, 1200, */600, 400, 300, 200, 150, 100, 0}, /* TODO when settled down, add 800 and 1600 */
|
||||||
{ /* 4800, 2400, 1200, 800, 600, 400, */ 300, 200, 0},
|
{ /*2400, 1200, */600, 400, 300, 200, 150, 100, 0}, /* TODO 4800 available */
|
||||||
{16, 8, 0}, /* possible depths in gray mode */
|
{16, 8, 0}, /* possible depths in gray mode */
|
||||||
{16, 8, 0}, /* possible depths in color mode */
|
{16, 8, 0}, /* possible depths in color mode */
|
||||||
|
|
||||||
|
@ -1107,8 +1107,8 @@ static Genesys_Model hpg4050_model = {
|
||||||
GENESYS_GL843,
|
GENESYS_GL843,
|
||||||
NULL,
|
NULL,
|
||||||
|
|
||||||
{ /* 4800, 2400, 1200, 800, 600, 400, */ 300, 200, 0},
|
{ /*2400, 1200, */600, 400, 300, 200, 150, 100, 0}, /* TODO when settled down, add 800 and 1600 */
|
||||||
{ /* 4800, 2400, 1200, 800, 600, 400, */ 300, 200, 0},
|
{ /*2400, 1200, */600, 400, 300, 200, 150, 100, 0}, /* TODO 4800 available */
|
||||||
{16, 8, 0}, /* possible depths in gray mode */
|
{16, 8, 0}, /* possible depths in gray mode */
|
||||||
{16, 8, 0}, /* possible depths in color mode */
|
{16, 8, 0}, /* possible depths in color mode */
|
||||||
|
|
||||||
|
|
|
@ -509,6 +509,27 @@ static Motor_Profile *get_motor_profile(int motor_type, int exposure)
|
||||||
return &(motors[idx]);
|
return &(motors[idx]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** @brief returns the lowest possible ydpi for the device
|
||||||
|
* Parses device entry to find lowest motor dpi.
|
||||||
|
* @dev device description
|
||||||
|
* @return lowest motor resolution
|
||||||
|
*/
|
||||||
|
static int gl843_get_lowest_ydpi(Genesys_Device *dev)
|
||||||
|
{
|
||||||
|
int min=9600;
|
||||||
|
int i=0;
|
||||||
|
|
||||||
|
while(dev->model->ydpi_values[i]!=0)
|
||||||
|
{
|
||||||
|
if(dev->model->ydpi_values[i]<min)
|
||||||
|
{
|
||||||
|
min=dev->model->ydpi_values[i];
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
return min;
|
||||||
|
}
|
||||||
static int gl843_slope_table(uint16_t *slope,
|
static int gl843_slope_table(uint16_t *slope,
|
||||||
int *steps,
|
int *steps,
|
||||||
int dpi,
|
int dpi,
|
||||||
|
@ -534,13 +555,13 @@ Motor_Profile *profile;
|
||||||
/* use profile to build table */
|
/* use profile to build table */
|
||||||
sum=0;
|
sum=0;
|
||||||
i=0;
|
i=0;
|
||||||
current=((profile->table[0]*exposure)/profile->exposure)>>step_type;
|
current=profile->table[0]>>step_type;
|
||||||
while(i<(256*factor) && current>target)
|
while(i<(256*factor) && current>target)
|
||||||
{
|
{
|
||||||
slope[i]=current;
|
slope[i]=current;
|
||||||
sum+=slope[i];
|
sum+=slope[i];
|
||||||
i++;
|
i++;
|
||||||
current=((profile->table[i]*exposure)/profile->exposure)>>step_type;
|
current=profile->table[i]>>step_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* align size on step time factor */
|
/* align size on step time factor */
|
||||||
|
@ -574,6 +595,8 @@ gl843_setup_sensor (Genesys_Device * dev, Genesys_Register_Set * regs, int dpi)
|
||||||
r->value = dev->sensor.regs_0x10_0x1d[i];
|
r->value = dev->sensor.regs_0x10_0x1d[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* TODO we need to create another data struct
|
||||||
|
* for CKxMAP and CKSEL */
|
||||||
/* use x1 cksel when at higher resolutions */
|
/* use x1 cksel when at higher resolutions */
|
||||||
/* KV-SS080 sensor */
|
/* KV-SS080 sensor */
|
||||||
if (dev->model->ccd_type == CCD_KVSS080)
|
if (dev->model->ccd_type == CCD_KVSS080)
|
||||||
|
@ -590,6 +613,28 @@ gl843_setup_sensor (Genesys_Device * dev, Genesys_Register_Set * regs, int dpi)
|
||||||
sanei_genesys_write_register (dev, 0x78, 0x07);
|
sanei_genesys_write_register (dev, 0x78, 0x07);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* G4050/G4010 sensor */
|
||||||
|
if (dev->model->ccd_type == CCD_G4050)
|
||||||
|
{
|
||||||
|
if(dpi<=300)
|
||||||
|
{
|
||||||
|
sanei_genesys_write_register (dev, 0x74, 0x00);
|
||||||
|
sanei_genesys_write_register (dev, 0x75, 0x1c);
|
||||||
|
sanei_genesys_write_register (dev, 0x76, 0x7f);
|
||||||
|
}
|
||||||
|
else if(dpi<=600)
|
||||||
|
{
|
||||||
|
sanei_genesys_write_register (dev, 0x74, 0x00);
|
||||||
|
sanei_genesys_write_register (dev, 0x75, 0x01);
|
||||||
|
sanei_genesys_write_register (dev, 0x76, 0xff);
|
||||||
|
}
|
||||||
|
else /* 800 to 2400 case */
|
||||||
|
{
|
||||||
|
sanei_genesys_write_register (dev, 0x74, 0x00);
|
||||||
|
sanei_genesys_write_register (dev, 0x75, 0x3f);
|
||||||
|
sanei_genesys_write_register (dev, 0x76, 0xff);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < 9; i++)
|
for (i = 0; i < 9; i++)
|
||||||
{
|
{
|
||||||
|
@ -719,7 +764,8 @@ gl843_init_registers (Genesys_Device * dev)
|
||||||
SETREG (0xab, 0x50);
|
SETREG (0xab, 0x50);
|
||||||
|
|
||||||
/* G4050 values */
|
/* G4050 values */
|
||||||
if (strcmp (dev->model->name, "hewlett-packard-scanjet-g4050") == 0)
|
if ((strcmp (dev->model->name, "hewlett-packard-scanjet-g4050") == 0)
|
||||||
|
|| (strcmp (dev->model->name, "hewlett-packard-scanjet-g4010") == 0))
|
||||||
{
|
{
|
||||||
SETREG (0x03, 0x1d);
|
SETREG (0x03, 0x1d);
|
||||||
SETREG (0x05, 0x08);
|
SETREG (0x05, 0x08);
|
||||||
|
@ -746,7 +792,6 @@ gl843_init_registers (Genesys_Device * dev)
|
||||||
SETREG (0x9b, 0x80);
|
SETREG (0x9b, 0x80);
|
||||||
|
|
||||||
SETREG (0xac, 0x00);
|
SETREG (0xac, 0x00);
|
||||||
SETREG (0x18, 0x01); /* XXX STEF XXX CKSEL=1, CKTOGGLE=0 */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* fine tune upon device description */
|
/* fine tune upon device description */
|
||||||
|
@ -1010,7 +1055,7 @@ gl843_init_motor_regs_scan (Genesys_Device * dev,
|
||||||
/* fast table */
|
/* fast table */
|
||||||
fast_time=gl843_slope_table(fast_table,
|
fast_time=gl843_slope_table(fast_table,
|
||||||
&fast_steps,
|
&fast_steps,
|
||||||
100,
|
gl843_get_lowest_ydpi(dev),
|
||||||
scan_exposure_time,
|
scan_exposure_time,
|
||||||
dev->motor.base_ydpi,
|
dev->motor.base_ydpi,
|
||||||
scan_step_type,
|
scan_step_type,
|
||||||
|
@ -1116,6 +1161,78 @@ gl843_get_dpihw (Genesys_Device * dev)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**@brief compute hardware sensor dpi exposure to use
|
||||||
|
* compute the sensor hardware dpi based on target resolution
|
||||||
|
*/
|
||||||
|
static int gl843_compute_dpihw(Genesys_Device *dev, int xres)
|
||||||
|
{
|
||||||
|
switch(dev->model->ccd_type)
|
||||||
|
{
|
||||||
|
case CCD_G4050:
|
||||||
|
if(xres<=300)
|
||||||
|
{
|
||||||
|
return 600;
|
||||||
|
}
|
||||||
|
if(xres<=600)
|
||||||
|
{
|
||||||
|
return 1200;
|
||||||
|
}
|
||||||
|
if(xres<=1200)
|
||||||
|
{
|
||||||
|
return 2400;
|
||||||
|
}
|
||||||
|
return dev->sensor.optical_res;
|
||||||
|
case CCD_KVSS080:
|
||||||
|
default:
|
||||||
|
return dev->sensor.optical_res;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**@brief compute exposure to use
|
||||||
|
* compute the sensor exposure based on target resolution
|
||||||
|
*/
|
||||||
|
static int gl843_compute_exposure(Genesys_Device *dev, int xres)
|
||||||
|
{
|
||||||
|
switch(dev->model->ccd_type)
|
||||||
|
{
|
||||||
|
case CCD_G4050:
|
||||||
|
if(xres<1200)
|
||||||
|
{
|
||||||
|
return 8016;
|
||||||
|
}
|
||||||
|
return 21376;
|
||||||
|
case CCD_KVSS080:
|
||||||
|
default:
|
||||||
|
return 8000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**@brief compute motor step type to use
|
||||||
|
* compute the step type (full, half, quarter, ...) to use based
|
||||||
|
* on target resolution
|
||||||
|
* @param dev device description
|
||||||
|
* @param yres motor resolution
|
||||||
|
* @return 0 for full step
|
||||||
|
* 1 for half step
|
||||||
|
* 2 for quarter step
|
||||||
|
* 3 for eighth step
|
||||||
|
*/
|
||||||
|
static int gl843_compute_step_type(Genesys_Device *dev, int yres)
|
||||||
|
{
|
||||||
|
switch(dev->model->motor_type)
|
||||||
|
{
|
||||||
|
case MOTOR_G4050:
|
||||||
|
if(yres<=1200)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 2;
|
||||||
|
case MOTOR_KVSS080:
|
||||||
|
default:
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#define OPTICAL_FLAG_DISABLE_GAMMA 1
|
#define OPTICAL_FLAG_DISABLE_GAMMA 1
|
||||||
#define OPTICAL_FLAG_DISABLE_SHADING 2
|
#define OPTICAL_FLAG_DISABLE_SHADING 2
|
||||||
#define OPTICAL_FLAG_DISABLE_LAMP 4
|
#define OPTICAL_FLAG_DISABLE_LAMP 4
|
||||||
|
@ -1142,7 +1259,7 @@ gl843_init_optical_regs_scan (Genesys_Device * dev,
|
||||||
{
|
{
|
||||||
unsigned int words_per_line;
|
unsigned int words_per_line;
|
||||||
unsigned int startx, endx, used_pixels;
|
unsigned int startx, endx, used_pixels;
|
||||||
unsigned int dpiset, cksel;
|
unsigned int dpiset, cksel,dpihw, factor;
|
||||||
unsigned int i, bytes;
|
unsigned int i, bytes;
|
||||||
Genesys_Register_Set *r;
|
Genesys_Register_Set *r;
|
||||||
SANE_Status status;
|
SANE_Status status;
|
||||||
|
@ -1156,18 +1273,31 @@ gl843_init_optical_regs_scan (Genesys_Device * dev,
|
||||||
/* sensor parameters */
|
/* sensor parameters */
|
||||||
gl843_setup_sensor (dev, reg, used_res);
|
gl843_setup_sensor (dev, reg, used_res);
|
||||||
|
|
||||||
|
/* to manage high resolution device while keeping good
|
||||||
|
* low resolution scanning speed, we make hardware dpi vary */
|
||||||
|
dpihw=gl843_compute_dpihw(dev, used_res);
|
||||||
|
factor=dev->sensor.optical_res/dpihw;
|
||||||
|
DBG (DBG_io2, "%s: dpihw=%d (factor=%d)\n", __FUNCTION__, dpihw, factor);
|
||||||
|
|
||||||
r = sanei_genesys_get_address (reg, REG18);
|
r = sanei_genesys_get_address (reg, REG18);
|
||||||
cksel= (r->value & REG18_CKSEL)+1;
|
cksel= (r->value & REG18_CKSEL)+1;
|
||||||
|
|
||||||
DBG (DBG_io2, "%s: cksel=%d\n", __FUNCTION__, cksel);
|
DBG (DBG_io2, "%s: cksel=%d\n", __FUNCTION__, cksel);
|
||||||
dpiset = used_res * cksel;
|
dpiset = used_res * cksel;
|
||||||
|
|
||||||
/* start and end coordinate */
|
/* start and end coordinate in optical dpi coordinates */
|
||||||
startx = start/cksel + dev->sensor.dummy_pixel;
|
startx = start/cksel + dev->sensor.dummy_pixel;
|
||||||
|
|
||||||
used_pixels=pixels/cksel;
|
used_pixels=pixels/cksel;
|
||||||
endx = startx + used_pixels;
|
endx = startx + used_pixels;
|
||||||
|
|
||||||
|
/* factor correction when used dpihw is not native one */
|
||||||
|
if(factor>1)
|
||||||
|
{
|
||||||
|
startx/=factor;
|
||||||
|
endx/=factor;
|
||||||
|
used_pixels=endx-startx;
|
||||||
|
}
|
||||||
|
|
||||||
status = gl843_set_fe (dev, AFE_SET);
|
status = gl843_set_fe (dev, AFE_SET);
|
||||||
if (status != SANE_STATUS_GOOD)
|
if (status != SANE_STATUS_GOOD)
|
||||||
{
|
{
|
||||||
|
@ -1249,8 +1379,28 @@ gl843_init_optical_regs_scan (Genesys_Device * dev,
|
||||||
else
|
else
|
||||||
r->value |= 0x10; /* mono */
|
r->value |= 0x10; /* mono */
|
||||||
|
|
||||||
/* enable gamma tables */
|
/* register 05 */
|
||||||
r = sanei_genesys_get_address (reg, REG05);
|
r = sanei_genesys_get_address (reg, REG05);
|
||||||
|
|
||||||
|
/* set up dpihw */
|
||||||
|
r->value &= ~REG05_DPIHW;
|
||||||
|
switch(dpihw)
|
||||||
|
{
|
||||||
|
case 600:
|
||||||
|
r->value |= REG05_DPIHW_600;
|
||||||
|
break;
|
||||||
|
case 1200:
|
||||||
|
r->value |= REG05_DPIHW_1200;
|
||||||
|
break;
|
||||||
|
case 2400:
|
||||||
|
r->value |= REG05_DPIHW_2400;
|
||||||
|
break;
|
||||||
|
case 4800:
|
||||||
|
r->value |= REG05_DPIHW_4800;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* enable gamma tables */
|
||||||
if (flags & OPTICAL_FLAG_DISABLE_GAMMA)
|
if (flags & OPTICAL_FLAG_DISABLE_GAMMA)
|
||||||
r->value &= ~REG05_GMMENB;
|
r->value &= ~REG05_GMMENB;
|
||||||
else
|
else
|
||||||
|
@ -1272,7 +1422,7 @@ gl843_init_optical_regs_scan (Genesys_Device * dev,
|
||||||
r->value = LOBYTE (endx);
|
r->value = LOBYTE (endx);
|
||||||
|
|
||||||
/* words(16bit) before gamma, conversion to 8 bit or lineart */
|
/* words(16bit) before gamma, conversion to 8 bit or lineart */
|
||||||
words_per_line = (used_pixels * dpiset) / gl843_get_dpihw (dev);
|
words_per_line = (used_pixels * dpiset) / dpihw;
|
||||||
bytes = depth / 8;
|
bytes = depth / 8;
|
||||||
if (depth == 1)
|
if (depth == 1)
|
||||||
{
|
{
|
||||||
|
@ -1339,29 +1489,6 @@ gl843_get_led_exposure (Genesys_Device * dev)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**@ brief comput exposure to use
|
|
||||||
* compute the sensor exposure based on target resolution
|
|
||||||
*/
|
|
||||||
static int gl843_compute_exposure(Genesys_Device *dev, int xres)
|
|
||||||
{
|
|
||||||
switch(dev->model->ccd_type)
|
|
||||||
{
|
|
||||||
case CCD_G4050:
|
|
||||||
if(xres<=300)
|
|
||||||
{
|
|
||||||
return 3840;
|
|
||||||
}
|
|
||||||
if(xres<=600)
|
|
||||||
{
|
|
||||||
return 8016;
|
|
||||||
}
|
|
||||||
return 21376;
|
|
||||||
case CCD_KVSS080:
|
|
||||||
default:
|
|
||||||
return 8000;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* set up registers for an actual scan
|
/* set up registers for an actual scan
|
||||||
*
|
*
|
||||||
* this function sets up the scanner to scan in normal or single line mode
|
* this function sets up the scanner to scan in normal or single line mode
|
||||||
|
@ -1513,8 +1640,8 @@ independent of our calculated values:
|
||||||
slope_dpi = yres;
|
slope_dpi = yres;
|
||||||
|
|
||||||
/* scan_step_type */
|
/* scan_step_type */
|
||||||
scan_step_type = 1;
|
scan_step_type = gl843_compute_step_type(dev, slope_dpi);
|
||||||
exposure_time=gl843_compute_exposure (dev, used_res);
|
exposure_time = gl843_compute_exposure (dev, used_res);
|
||||||
|
|
||||||
DBG (DBG_info, "gl843_init_scan_regs : exposure_time=%d pixels\n",
|
DBG (DBG_info, "gl843_init_scan_regs : exposure_time=%d pixels\n",
|
||||||
exposure_time);
|
exposure_time);
|
||||||
|
@ -1786,7 +1913,7 @@ gl843_calculate_current_setup (Genesys_Device * dev)
|
||||||
slope_dpi = yres;
|
slope_dpi = yres;
|
||||||
|
|
||||||
/* scan_step_type */
|
/* scan_step_type */
|
||||||
scan_step_type = 1;
|
scan_step_type = gl843_compute_step_type(dev, yres);
|
||||||
|
|
||||||
exposure_time = sanei_genesys_exposure_time2 (dev,
|
exposure_time = sanei_genesys_exposure_time2 (dev,
|
||||||
slope_dpi,
|
slope_dpi,
|
||||||
|
@ -3572,8 +3699,8 @@ gl843_cold_boot (Genesys_Device * dev)
|
||||||
/* URB 14 control 0x40 0x0c 0x8c 0x10 len 1 wrote 0xb4 */
|
/* URB 14 control 0x40 0x0c 0x8c 0x10 len 1 wrote 0xb4 */
|
||||||
RIE (write_end_access (dev, 0x10, 0xb4));
|
RIE (write_end_access (dev, 0x10, 0xb4));
|
||||||
|
|
||||||
/* set up clock once for all */
|
/* set up clock once for all TODO use sensor type for these sensor realted registers */
|
||||||
if (strcmp (dev->model->name, "hewlett-packard-scanjet-g4050") == 0)
|
if (strncmp (dev->model->name, "hewlett-packard-scanjet-g40", 27) == 0)
|
||||||
{
|
{
|
||||||
/* CK1MAP */
|
/* CK1MAP */
|
||||||
RIE (sanei_genesys_write_register (dev, 0x74, 0x00));
|
RIE (sanei_genesys_write_register (dev, 0x74, 0x00));
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -64,11 +64,17 @@
|
||||||
:status :complete
|
:status :complete
|
||||||
:comment "1200x1200 dpi max, same as HP3670C"
|
:comment "1200x1200 dpi max, same as HP3670C"
|
||||||
|
|
||||||
|
:model "ScanJet G4010"
|
||||||
|
:interface "USB"
|
||||||
|
:usbid "0x03f0" "0x4505"
|
||||||
|
:status :basic
|
||||||
|
:comment "resolution from 100 to 600 supported, 1200 and 2400 remain to be added"
|
||||||
|
|
||||||
:model "ScanJet G4050"
|
:model "ScanJet G4050"
|
||||||
:interface "USB"
|
:interface "USB"
|
||||||
:usbid "0x03f0" "0x0a01"
|
:usbid "0x03f0" "0x4605"
|
||||||
:status :untested
|
:status :basic
|
||||||
:comment "1200x1200 dpi max"
|
:comment "resolution from 100 to 600 supported, 1200 and 2400 remain to be added"
|
||||||
|
|
||||||
; -----------------------------------------------------------------------------
|
; -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue