kopia lustrzana https://gitlab.com/sane-project/backends
gl843 wip, motor is running
rodzic
02def2b799
commit
c2db12d9e5
|
@ -717,7 +717,7 @@ sanei_genesys_get_address (Genesys_Register_Set * regs, SANE_Byte addr)
|
|||
if (regs[i].address == addr)
|
||||
return ®s[i];
|
||||
}
|
||||
DBG (DBG_error, "sanei_genesys_get_address: failed to find address for register %d, crash expected !\n",addr);
|
||||
DBG (DBG_error, "sanei_genesys_get_address: failed to find address for register 0x%02x, crash expected !\n",addr);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -145,7 +145,7 @@ static Genesys_Frontend Wolfson[] = {
|
|||
, {0x32, 0x04, 0x00}
|
||||
, {0x00, 0x00, 0x00}
|
||||
}
|
||||
, /* KVSS080 */
|
||||
, /* KV-SS080 */
|
||||
{DAC_KVSS080,
|
||||
{0x00, 0x23, 0x24, 0x0f}
|
||||
, {0x00, 0x00, 0x00}
|
||||
|
@ -489,36 +489,35 @@ static Genesys_Sensor Sensor[] = {
|
|||
48,
|
||||
85,
|
||||
152,
|
||||
5416,
|
||||
5110,
|
||||
210,
|
||||
230,
|
||||
{0x02, 0x00, 0x06, 0x04} ,
|
||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x08, 0x20, 0x2a, 0x00, 0x00,
|
||||
0x0c, 0x03}
|
||||
,
|
||||
{0x0f, 0x13, 0x17, 0x03, 0x07, 0x0b, 0x83, 0x00, 0xc1, 0x00, 0x00, 0x00,
|
||||
0x00} ,
|
||||
/* 08 09 0a 0b */
|
||||
{0x00, 0x00, 0x00, 0x6a} ,
|
||||
/* 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d */
|
||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x1c, 0x01, 0x2a, 0x2c, 0x00, 0x20, 0x04} , /* 18=00 at 600 dpi */
|
||||
/* 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e */
|
||||
{0x0c, 0x0f, 0x00, 0x03, 0x06, 0x09, 0x6b, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x23} ,
|
||||
1.0, 1.0, 1.0,
|
||||
NULL, NULL, NULL}
|
||||
,
|
||||
{CCD_G4050,
|
||||
4800,
|
||||
1200, /* XXX STEF XXX 4800 */
|
||||
48,
|
||||
85,
|
||||
28,
|
||||
152,
|
||||
5416,
|
||||
10220,
|
||||
210,
|
||||
230,
|
||||
{0x02, 0x00, 0x06, 0x04} ,
|
||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x08, 0x20, 0x2a, 0x00, 0x00,
|
||||
0x0c, 0x03}
|
||||
,
|
||||
{0x0f, 0x13, 0x17, 0x03, 0x07, 0x0b, 0x83, 0x00, 0xc1, 0x00, 0x00, 0x00,
|
||||
0x00} ,
|
||||
/* 08 09 0a 0b */
|
||||
{0x00, 0x00, 0x18, 0x69} ,
|
||||
/* 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d */
|
||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x0c, 0x01, 0x2a, 0x30, 0x00, 0x00, 0x08} ,
|
||||
/* 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e */
|
||||
{0x0e, 0x11, 0x02, 0x05, 0x08, 0x0b, 0x6b, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x6f} ,
|
||||
1.0, 1.0, 1.0,
|
||||
NULL, NULL, NULL}
|
||||
,
|
||||
|
||||
};
|
||||
|
||||
/** for General Purpose Output specific settings:
|
||||
|
@ -626,14 +625,18 @@ static Genesys_Gpo Gpo[] = {
|
|||
}
|
||||
,
|
||||
{GPO_KVSS080,
|
||||
{0x11, 0x00} ,
|
||||
{0x51, 0x20} ,
|
||||
{0xe5, 0x20} ,
|
||||
{0x7e, 0xa1} ,
|
||||
}
|
||||
,
|
||||
{GPO_G4050,
|
||||
{0x11, 0x00} ,
|
||||
{0x51, 0x20} ,
|
||||
{0x20, 0x00} ,
|
||||
{0xfc, 0x00} ,
|
||||
}
|
||||
/*
|
||||
uint8_t value[2]; 6c/6d
|
||||
uint8_t enable[2]; 6e/6f
|
||||
*/
|
||||
,
|
||||
};
|
||||
|
||||
|
@ -1074,8 +1077,8 @@ static Genesys_Model hpg4050_model = {
|
|||
GENESYS_GL843,
|
||||
NULL,
|
||||
|
||||
{ 1200, 600, 300, 150, 75, 0}, /* possible x-resolutions */
|
||||
{ 1200, 600, 300, 150, 75, 0}, /* possible y-resolutions */
|
||||
{ 1200, 600, 300, 200, 150, 75, 0}, /* possible x-resolutions */
|
||||
{ 1200, 600, 300, 200, 150, 75, 0}, /* possible y-resolutions */
|
||||
{16, 8, 0}, /* possible depths in gray mode */
|
||||
{16, 8, 0}, /* possible depths in color mode */
|
||||
|
||||
|
@ -1099,7 +1102,7 @@ static Genesys_Model hpg4050_model = {
|
|||
SANE_FIX (0.0), /* Amount of feeding needed to eject document
|
||||
after finishing scanning in mm */
|
||||
|
||||
0, 0, 0, /* RGB CCD Line-distance correction in pixel */
|
||||
0, 8, 16, /* RGB CCD Line-distance correction in pixel */
|
||||
|
||||
COLOR_ORDER_RGB, /* Order of the CCD/CIS colors */
|
||||
|
||||
|
|
|
@ -94,6 +94,78 @@ write_end_access (Genesys_Device * dev, uint8_t index, uint8_t val)
|
|||
return status;
|
||||
}
|
||||
|
||||
/* Write bulk data (e.g. gamma) */
|
||||
static SANE_Status
|
||||
gl843_bulk_write_data (Genesys_Device * dev, uint8_t addr,
|
||||
uint8_t * data, size_t len)
|
||||
{
|
||||
SANE_Status status;
|
||||
size_t size;
|
||||
uint8_t outdata[8];
|
||||
|
||||
DBG (DBG_io, "gl843_bulk_write_data writing %lu bytes\n",
|
||||
(u_long) len);
|
||||
|
||||
status =
|
||||
sanei_usb_control_msg (dev->dn, REQUEST_TYPE_OUT, REQUEST_REGISTER,
|
||||
VALUE_SET_REGISTER, INDEX, 1, &addr);
|
||||
if (status != SANE_STATUS_GOOD)
|
||||
{
|
||||
DBG (DBG_error,
|
||||
"gl843_bulk_write_data failed while setting register: %s\n",
|
||||
sane_strstatus (status));
|
||||
return status;
|
||||
}
|
||||
|
||||
while (len)
|
||||
{
|
||||
if (len > BULKOUT_MAXSIZE)
|
||||
size = BULKOUT_MAXSIZE;
|
||||
else
|
||||
size = len;
|
||||
|
||||
outdata[0] = BULK_OUT;
|
||||
outdata[1] = BULK_RAM;
|
||||
outdata[2] = 0x00;
|
||||
outdata[3] = 0x00;
|
||||
outdata[4] = (size & 0xff);
|
||||
outdata[5] = ((size >> 8) & 0xff);
|
||||
outdata[6] = ((size >> 16) & 0xff);
|
||||
outdata[7] = ((size >> 24) & 0xff);
|
||||
|
||||
status =
|
||||
sanei_usb_control_msg (dev->dn, REQUEST_TYPE_OUT, REQUEST_BUFFER,
|
||||
VALUE_BUFFER, INDEX, sizeof (outdata),
|
||||
outdata);
|
||||
if (status != SANE_STATUS_GOOD)
|
||||
{
|
||||
DBG (DBG_error,
|
||||
"gl843_bulk_write_data failed while writing command: %s\n",
|
||||
sane_strstatus (status));
|
||||
return status;
|
||||
}
|
||||
|
||||
status = sanei_usb_write_bulk (dev->dn, data, &size);
|
||||
if (status != SANE_STATUS_GOOD)
|
||||
{
|
||||
DBG (DBG_error,
|
||||
"gl843_bulk_write_data failed while writing bulk data: %s\n",
|
||||
sane_strstatus (status));
|
||||
return status;
|
||||
}
|
||||
|
||||
DBG (DBG_io2,
|
||||
"gl843_bulk_write_data: gamma wrote %lu bytes, %lu remaining\n",
|
||||
(u_long) size, (u_long) (len - size));
|
||||
|
||||
len -= size;
|
||||
data += size;
|
||||
}
|
||||
|
||||
DBGCOMPLETED;
|
||||
return status;
|
||||
}
|
||||
|
||||
/* Set address for writing data */
|
||||
static SANE_Status
|
||||
gl843_set_buffer_address (Genesys_Device * dev, uint32_t addr)
|
||||
|
@ -103,6 +175,15 @@ gl843_set_buffer_address (Genesys_Device * dev, uint32_t addr)
|
|||
DBG (DBG_io, "gl843_set_buffer_address: setting address to 0x%05x\n",
|
||||
addr & 0xffff);
|
||||
|
||||
status = sanei_genesys_write_register (dev, 0x5b, ((addr>>8) & 0xff));
|
||||
if (status != SANE_STATUS_GOOD)
|
||||
{
|
||||
DBG (DBG_error,
|
||||
"gl843_set_buffer_address: failed while writing high byte: %s\n",
|
||||
sane_strstatus (status));
|
||||
return status;
|
||||
}
|
||||
|
||||
status = sanei_genesys_write_register (dev, 0x5c, (addr & 0xff));
|
||||
if (status != SANE_STATUS_GOOD)
|
||||
{
|
||||
|
@ -112,16 +193,6 @@ gl843_set_buffer_address (Genesys_Device * dev, uint32_t addr)
|
|||
return status;
|
||||
}
|
||||
|
||||
addr = addr >> 8;
|
||||
status = sanei_genesys_write_register (dev, 0x5b, (addr & 0xff));
|
||||
if (status != SANE_STATUS_GOOD)
|
||||
{
|
||||
DBG (DBG_error,
|
||||
"gl843_set_buffer_address: failed while writing high byte: %s\n",
|
||||
sane_strstatus (status));
|
||||
return status;
|
||||
}
|
||||
|
||||
DBG (DBG_io, "gl843_set_buffer_address: completed\n");
|
||||
|
||||
return status;
|
||||
|
@ -137,7 +208,6 @@ gl843_set_buffer_address (Genesys_Device * dev, uint32_t addr)
|
|||
static SANE_Status
|
||||
write_data (Genesys_Device * dev, uint32_t addr, uint32_t size, uint8_t * data)
|
||||
{
|
||||
size_t written;
|
||||
SANE_Status status = SANE_STATUS_GOOD;
|
||||
uint8_t val;
|
||||
|
||||
|
@ -160,8 +230,7 @@ write_data (Genesys_Device * dev, uint32_t addr, uint32_t size, uint8_t * data)
|
|||
}
|
||||
|
||||
/* write actual data */
|
||||
written = size;
|
||||
status = sanei_usb_write_bulk (dev->dn, data, &written);
|
||||
status = gl843_bulk_write_data (dev, 0x3c, data, size);
|
||||
if (status != SANE_STATUS_GOOD)
|
||||
{
|
||||
DBG (DBG_error, "write_data: failed while writing bulk write data: %s\n",
|
||||
|
@ -169,6 +238,7 @@ write_data (Genesys_Device * dev, uint32_t addr, uint32_t size, uint8_t * data)
|
|||
return status;
|
||||
}
|
||||
|
||||
/* set back address to 0 */
|
||||
status = gl843_set_buffer_address (dev, 0);
|
||||
if (status != SANE_STATUS_GOOD)
|
||||
{
|
||||
|
@ -532,6 +602,7 @@ gl843_init_registers (Genesys_Device * dev)
|
|||
SETREG (0x78, 0x00);
|
||||
SETREG (0x79, 0x00);
|
||||
SETREG (0x7a, 0x00);
|
||||
SETREG (0x7a, 0x00);
|
||||
SETREG (0x7f, 0x00);
|
||||
SETREG (0x80, 0x00);
|
||||
SETREG (0x81, 0x00);
|
||||
|
@ -550,6 +621,10 @@ gl843_init_registers (Genesys_Device * dev)
|
|||
/* G4050 values */
|
||||
if(strcmp(dev->model->name,"hewlett-packard-scanjet-g4050")==0)
|
||||
{
|
||||
SETREG (0x03, 0x1d);
|
||||
SETREG (0x05, 0x08);
|
||||
SETREG (0x0a, 0x18);
|
||||
SETREG (0x0b, 0x69);
|
||||
}
|
||||
|
||||
/* fine tune upon device description */
|
||||
|
@ -953,7 +1028,7 @@ HOME_FREE: 3
|
|||
|
||||
status = gl843_send_slope_table (dev, 0, fast_slope_table, 256);
|
||||
status = gl843_send_slope_table (dev, 1, fast_slope_table, 256);
|
||||
/* XXX STEF XXX status = gl843_send_slope_table (dev, 2, fast_slope_table, 256); */
|
||||
status = gl843_send_slope_table (dev, 2, fast_slope_table, 256);
|
||||
status = gl843_send_slope_table (dev, 3, fast_slope_table, 256);
|
||||
status = gl843_send_slope_table (dev, 4, fast_slope_table, 256);
|
||||
|
||||
|
@ -1237,7 +1312,7 @@ gl843_init_motor_regs_scan (Genesys_Device * dev,
|
|||
if (status != SANE_STATUS_GOOD)
|
||||
return status;
|
||||
|
||||
/* XXX STEF XXX status = gl843_send_slope_table (dev, 2, slow_slope_table, 256); */
|
||||
status = gl843_send_slope_table (dev, 2, slow_slope_table, 256);
|
||||
|
||||
if (status != SANE_STATUS_GOOD)
|
||||
return status;
|
||||
|
@ -1555,6 +1630,8 @@ gl843_init_optical_regs_scan (Genesys_Device * dev,
|
|||
r->value &= ~REG05_GMMENB;
|
||||
else
|
||||
r->value |= REG05_GMMENB;
|
||||
/* XXX STEF XXX */
|
||||
r->value &= ~REG05_GMMENB;
|
||||
|
||||
/* sensor parameters */
|
||||
gl843_setup_sensor (dev, dev->reg);
|
||||
|
@ -2909,7 +2986,6 @@ gl843_begin_scan (Genesys_Device * dev, Genesys_Register_Set * reg,
|
|||
}
|
||||
|
||||
DBGCOMPLETED;
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -3520,79 +3596,6 @@ gl843_init_regs_for_scan (Genesys_Device * dev)
|
|||
return SANE_STATUS_GOOD;
|
||||
}
|
||||
|
||||
/* Write bulk data (e.g. gamma) */
|
||||
static SANE_Status
|
||||
gl843_bulk_write_data_gamma (Genesys_Device * dev, uint8_t addr,
|
||||
uint8_t * data, size_t len)
|
||||
{
|
||||
SANE_Status status;
|
||||
size_t size;
|
||||
uint8_t outdata[8];
|
||||
|
||||
DBG (DBG_io, "gl843_bulk_write_data_gamma writing %lu bytes\n",
|
||||
(u_long) len);
|
||||
|
||||
status =
|
||||
sanei_usb_control_msg (dev->dn, REQUEST_TYPE_OUT, REQUEST_REGISTER,
|
||||
VALUE_SET_REGISTER, INDEX, 1, &addr);
|
||||
if (status != SANE_STATUS_GOOD)
|
||||
{
|
||||
DBG (DBG_error,
|
||||
"gl843_bulk_write_data_gamma failed while setting register: %s\n",
|
||||
sane_strstatus (status));
|
||||
return status;
|
||||
}
|
||||
|
||||
while (len)
|
||||
{
|
||||
if (len > BULKOUT_MAXSIZE)
|
||||
size = BULKOUT_MAXSIZE;
|
||||
else
|
||||
size = len;
|
||||
|
||||
outdata[0] = BULK_OUT;
|
||||
outdata[1] = BULK_RAM;
|
||||
outdata[2] = 0x00;/* 0x82 works, too */
|
||||
outdata[3] = 0x00;
|
||||
outdata[4] = (size & 0xff);
|
||||
outdata[5] = ((size >> 8) & 0xff);
|
||||
outdata[6] = ((size >> 16) & 0xff);
|
||||
outdata[7] = ((size >> 24) & 0xff);
|
||||
|
||||
status =
|
||||
sanei_usb_control_msg (dev->dn, REQUEST_TYPE_OUT, REQUEST_BUFFER,
|
||||
VALUE_BUFFER, INDEX, sizeof (outdata),
|
||||
outdata);
|
||||
if (status != SANE_STATUS_GOOD)
|
||||
{
|
||||
DBG (DBG_error,
|
||||
"gl843_bulk_write_data_gamma failed while writing command: %s\n",
|
||||
sane_strstatus (status));
|
||||
return status;
|
||||
}
|
||||
|
||||
status = sanei_usb_write_bulk (dev->dn, data, &size);
|
||||
if (status != SANE_STATUS_GOOD)
|
||||
{
|
||||
DBG (DBG_error,
|
||||
"gl843_bulk_write_data_gamma failed while writing bulk data: %s\n",
|
||||
sane_strstatus (status));
|
||||
return status;
|
||||
}
|
||||
|
||||
DBG (DBG_io2,
|
||||
"gl843_bulk_write_data:gamma wrote %lu bytes, %lu remaining\n",
|
||||
(u_long) size, (u_long) (len - size));
|
||||
|
||||
len -= size;
|
||||
data += size;
|
||||
}
|
||||
|
||||
DBG (DBG_io, "gl843_bulk_write_data_gamma: completed\n");
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/*
|
||||
* this function sends generic gamma table (ie linear ones)
|
||||
* or the Sensor specific one if provided
|
||||
|
@ -3672,7 +3675,7 @@ gl843_send_gamma_table (Genesys_Device * dev, SANE_Bool generic)
|
|||
}
|
||||
|
||||
/* send data */
|
||||
status = gl843_bulk_write_data_gamma (dev, 0x28, (uint8_t *) gamma, size * 2 * 3);
|
||||
status = gl843_bulk_write_data (dev, 0x28, (uint8_t *) gamma, size * 2 * 3);
|
||||
if (status != SANE_STATUS_GOOD)
|
||||
{
|
||||
free (gamma);
|
||||
|
@ -4118,9 +4121,8 @@ gl843_cold_boot (Genesys_Device * dev)
|
|||
|
||||
DBGSTART;
|
||||
|
||||
/* XXX STEF XXX
|
||||
RIE (sanei_genesys_write_register (dev, 0x0e, 0x01));
|
||||
RIE (sanei_genesys_write_register (dev, 0x0e, 0x00)); */
|
||||
RIE (sanei_genesys_write_register (dev, 0x0e, 0x00));
|
||||
|
||||
/* test CHKVER */
|
||||
RIE (sanei_genesys_read_register (dev, REG40, &val));
|
||||
|
@ -4157,12 +4159,27 @@ gl843_cold_boot (Genesys_Device * dev)
|
|||
RIE (write_end_access (dev, 0x10, 0xb4));
|
||||
|
||||
/* set up clock once for all */
|
||||
RIE (sanei_genesys_write_register (dev, 0x77, 0x00));
|
||||
RIE (sanei_genesys_write_register (dev, 0x78, 0x00));
|
||||
RIE (sanei_genesys_write_register (dev, 0x79, 0x9f));
|
||||
if(strcmp(dev->model->name,"hewlett-packard-scanjet-g4050")==0)
|
||||
{
|
||||
/* CK3MAP */
|
||||
RIE (sanei_genesys_write_register (dev, 0x77, 0x03));
|
||||
RIE (sanei_genesys_write_register (dev, 0x78, 0xff));
|
||||
RIE (sanei_genesys_write_register (dev, 0x79, 0xff));
|
||||
}
|
||||
else
|
||||
{
|
||||
/* CK3MAP */
|
||||
RIE (sanei_genesys_write_register (dev, 0x77, 0x00));
|
||||
RIE (sanei_genesys_write_register (dev, 0x78, 0x07));
|
||||
RIE (sanei_genesys_write_register (dev, 0x79, 0xfe));
|
||||
}
|
||||
/* CK4MAP */
|
||||
RIE (sanei_genesys_write_register (dev, 0x7a, 0x03));
|
||||
RIE (sanei_genesys_write_register (dev, 0x7b, 0xff));
|
||||
RIE (sanei_genesys_write_register (dev, 0x7c, 0xff));
|
||||
|
||||
/* CLKSET */
|
||||
val = (dev->reg[reg_0x0b].value & ~REG0B_CLKSET) | REG0B_30MHZ;
|
||||
val = (dev->reg[reg_0x0b].value & ~REG0B_CLKSET) | REG0B_48MHZ;
|
||||
RIE (sanei_genesys_write_register (dev, REG0B, val));
|
||||
dev->reg[reg_0x0b].value = val;
|
||||
|
||||
|
@ -4673,7 +4690,7 @@ static Genesys_Command_Set gl843_cmd_set = {
|
|||
gl843_slow_back_home,
|
||||
|
||||
gl843_bulk_write_register,
|
||||
NULL,
|
||||
gl843_bulk_write_data,
|
||||
gl843_bulk_read_data,
|
||||
|
||||
gl843_update_hardware_sensors,
|
||||
|
|
Ładowanie…
Reference in New Issue