genesys: Return errors as exceptions from *set_buffer_address()

merge-requests/101/head
Povilas Kanapickas 2019-07-14 23:40:42 +03:00
rodzic 17a619a927
commit 3a47a9ed4d
6 zmienionych plików z 32 dodań i 107 usunięć

Wyświetl plik

@ -945,6 +945,7 @@ genesys_send_offset_and_shading (Genesys_Device * dev, const Genesys_Sensor& sen
uint8_t * data,
int size)
{
DBG_HELPER(dbg);
int dpihw;
int start_address;
SANE_Status status = SANE_STATUS_GOOD;
@ -957,7 +958,6 @@ genesys_send_offset_and_shading (Genesys_Device * dev, const Genesys_Sensor& sen
if(dev->model->cmd_set->send_shading_data!=NULL)
{
status=dev->model->cmd_set->send_shading_data(dev, sensor, data, size);
DBGCOMPLETED;
return status;
}
@ -995,16 +995,12 @@ genesys_send_offset_and_shading (Genesys_Device * dev, const Genesys_Sensor& sen
else /* reserved */
return SANE_STATUS_INVAL;
}
else /* color */
start_address = 0x00;
status = sanei_genesys_set_buffer_address (dev, start_address);
if (status != SANE_STATUS_GOOD)
{
DBG(DBG_error, "%s: failed to set buffer address: %s\n", __func__, sane_strstatus(status));
return status;
else { // color
start_address = 0x00;
}
sanei_genesys_set_buffer_address(dev, start_address);
status = dev->model->cmd_set->bulk_write_data (dev, 0x3c, data, size);
if (status != SANE_STATUS_GOOD)
{
@ -1012,8 +1008,6 @@ genesys_send_offset_and_shading (Genesys_Device * dev, const Genesys_Sensor& sen
return status;
}
DBGCOMPLETED;
return SANE_STATUS_GOOD;
}

Wyświetl plik

@ -1081,12 +1081,7 @@ gl646_asic_test (Genesys_Device * dev)
data[i + 1] = (i / 2) % 256;
}
status = sanei_genesys_set_buffer_address (dev, 0x0000);
if (status != SANE_STATUS_GOOD)
{
DBG(DBG_error, "%s: failed to set buffer address: %s\n", __func__, sane_strstatus(status));
return status;
}
sanei_genesys_set_buffer_address(dev, 0x0000);
status = sanei_genesys_bulk_write_data(dev, 0x3c, data.data(), size);
if (status != SANE_STATUS_GOOD)
@ -1095,12 +1090,7 @@ gl646_asic_test (Genesys_Device * dev)
return status;
}
status = sanei_genesys_set_buffer_address (dev, 0x0000);
if (status != SANE_STATUS_GOOD)
{
DBG(DBG_error, "%s: failed to set buffer address: %s\n", __func__, sane_strstatus(status));
return status;
}
sanei_genesys_set_buffer_address(dev, 0x0000);
gl646_bulk_read_data(dev, 0x45, verify_data.data(), verify_size);
@ -1317,6 +1307,7 @@ static SANE_Status
gl646_send_slope_table (Genesys_Device * dev, int table_nr,
uint16_t * slope_table, int steps)
{
DBG_HELPER(dbg);
int dpihw;
int start_address;
SANE_Status status = SANE_STATUS_GOOD;
@ -1342,13 +1333,7 @@ gl646_send_slope_table (Genesys_Device * dev, int table_nr,
table[i * 2 + 1] = slope_table[i] >> 8;
}
status =
sanei_genesys_set_buffer_address (dev, start_address + table_nr * 0x100);
if (status != SANE_STATUS_GOOD)
{
DBG(DBG_error, "%s: failed to set buffer address: %s\n", __func__, sane_strstatus(status));
return status;
}
sanei_genesys_set_buffer_address(dev, start_address + table_nr * 0x100);
status = sanei_genesys_bulk_write_data(dev, 0x3c, table.data(), steps * 2);
if (status != SANE_STATUS_GOOD)
@ -1357,7 +1342,6 @@ gl646_send_slope_table (Genesys_Device * dev, int table_nr,
return status;
}
DBG(DBG_proc, "%s: end\n", __func__);
return status;
}
@ -2908,13 +2892,12 @@ setup_for_scan (Genesys_Device * dev,
static SANE_Status
gl646_send_gamma_table (Genesys_Device * dev, const Genesys_Sensor& sensor)
{
DBG_HELPER(dbg);
int size;
int address;
SANE_Status status = SANE_STATUS_GOOD;
int bits;
DBGSTART;
/* gamma table size */
if (dev->model->flags & GENESYS_FLAG_14BIT_GAMMA)
{
@ -2948,13 +2931,8 @@ gl646_send_gamma_table (Genesys_Device * dev, const Genesys_Sensor& sensor)
return SANE_STATUS_INVAL;
}
/* send address */
status = sanei_genesys_set_buffer_address (dev, address);
if (status != SANE_STATUS_GOOD)
{
DBG(DBG_error, "%s: failed to set buffer address: %s\n", __func__, sane_strstatus(status));
return status;
}
// send address
sanei_genesys_set_buffer_address(dev, address);
/* send data */
status = sanei_genesys_bulk_write_data(dev, 0x3c, gamma.data(), size * 2 * 3);
@ -2963,8 +2941,6 @@ gl646_send_gamma_table (Genesys_Device * dev, const Genesys_Sensor& sensor)
DBG(DBG_error, "%s: failed to send gamma table: %s\n", __func__, sane_strstatus(status));
return status;
}
DBGCOMPLETED;
return SANE_STATUS_GOOD;
}
@ -3997,12 +3973,8 @@ gl646_init (Genesys_Device * dev)
addr = 0x1fa00;
break;
}
status = sanei_genesys_set_buffer_address (dev, addr);
if (status != SANE_STATUS_GOOD)
{
DBG(DBG_error, "%s: failed to set up control address\n", __func__);
return SANE_STATUS_INVAL;
}
sanei_genesys_set_buffer_address(dev, addr);
sanei_usb_set_timeout (2 * 1000);
len = 6;
// for some reason, read fails here for MD6471, HP2300 and XP200 one time out of
@ -4477,6 +4449,7 @@ gl646_update_hardware_sensors (Genesys_Scanner * session)
static SANE_Status
write_control (Genesys_Device * dev, const Genesys_Sensor& sensor, int resolution)
{
DBG_HELPER(dbg);
SANE_Status status = SANE_STATUS_GOOD;
uint8_t control[4];
uint32_t addr = 0xdead;
@ -4526,12 +4499,7 @@ write_control (Genesys_Device * dev, const Genesys_Sensor& sensor, int resolutio
DBG(DBG_info, "%s: control write=0x%02x 0x%02x 0x%02x 0x%02x\n", __func__, control[0], control[1],
control[2], control[3]);
status = sanei_genesys_set_buffer_address (dev, addr);
if (status != SANE_STATUS_GOOD)
{
DBG(DBG_error, "%s: failed to set up control address\n", __func__);
return SANE_STATUS_INVAL;
}
sanei_genesys_set_buffer_address(dev, addr);
status = sanei_genesys_bulk_write_data(dev, 0x3c, control, 4);
if (status != SANE_STATUS_GOOD)
{

Wyświetl plik

@ -298,7 +298,6 @@ sanei_gl841_asic_test (Genesys_Device * dev)
{
DBG_HELPER(dbg);
SANE_Status status = SANE_STATUS_GOOD;
uint8_t val;
size_t size, verify_size;
unsigned int i;
@ -342,12 +341,7 @@ sanei_gl841_asic_test (Genesys_Device * dev)
data[i + 1] = (i / 2) % 256;
}
status = sanei_genesys_set_buffer_address (dev, 0x0000);
if (status != SANE_STATUS_GOOD)
{
DBG(DBG_error, "%s: failed to set buffer address: %s\n", __func__, sane_strstatus(status));
return status;
}
sanei_genesys_set_buffer_address(dev, 0x0000);
/* status = sanei_genesys_bulk_write_data(dev, 0x3c, data, size);
if (status != SANE_STATUS_GOOD)
@ -358,12 +352,7 @@ sanei_gl841_asic_test (Genesys_Device * dev)
return status;
}*/
status = sanei_genesys_set_buffer_address (dev, 0x0000);
if (status != SANE_STATUS_GOOD)
{
DBG(DBG_error, "%s: failed to set buffer address: %s\n", __func__, sane_strstatus(status));
return status;
}
sanei_genesys_set_buffer_address(dev, 0x0000);
sanei_genesys_bulk_read_data(dev, 0x45, verify_data.data(), verify_size);
@ -722,6 +711,7 @@ static SANE_Status
gl841_send_slope_table (Genesys_Device * dev, int table_nr,
uint16_t * slope_table, int steps)
{
DBG_HELPER(dbg);
int dpihw;
int start_address;
SANE_Status status = SANE_STATUS_GOOD;
@ -759,13 +749,7 @@ gl841_send_slope_table (Genesys_Device * dev, int table_nr,
DBG(DBG_io, "%s: %s\n", __func__, msg);
}
status =
sanei_genesys_set_buffer_address (dev, start_address + table_nr * 0x200);
if (status != SANE_STATUS_GOOD)
{
DBG(DBG_error, "%s: failed to set buffer address: %s\n", __func__, sane_strstatus(status));
return status;
}
sanei_genesys_set_buffer_address(dev, start_address + table_nr * 0x200);
status = sanei_genesys_bulk_write_data(dev, 0x3c, table.data(), steps * 2);
if (status != SANE_STATUS_GOOD)
@ -774,7 +758,6 @@ gl841_send_slope_table (Genesys_Device * dev, int table_nr,
return status;
}
DBG(DBG_proc, "%s: completed\n", __func__);
return status;
}
@ -5375,26 +5358,20 @@ SANE_Status
gl841_send_shading_data (Genesys_Device * dev, const Genesys_Sensor& sensor,
uint8_t * data, int size)
{
DBG_HELPER(dbg);
SANE_Status status = SANE_STATUS_GOOD;
uint32_t length, x, factor, pixels, i;
uint32_t lines, channels;
uint16_t dpiset, dpihw, strpixel ,endpixel, beginpixel;
uint8_t *ptr,*src;
DBGSTART;
DBG(DBG_io2, "%s: writing %d bytes of shading data\n", __func__, size);
/* old method if no SHDAREA */
if((dev->reg.find_reg(0x01).value & REG01_SHDAREA) == 0)
{
/* start address */
status = sanei_genesys_set_buffer_address (dev, 0x0000);
if (status != SANE_STATUS_GOOD)
{
DBG(DBG_error, "%s: failed to set buffer address: %s\n", __func__,
sane_strstatus(status));
return status;
}
// start address
sanei_genesys_set_buffer_address(dev, 0x0000);
/* shading data whole line */
status = dev->model->cmd_set->bulk_write_data (dev, 0x3c, data, size);
@ -5404,7 +5381,6 @@ gl841_send_shading_data (Genesys_Device * dev, const Genesys_Sensor& sensor,
sane_strstatus(status));
return status;
}
DBGCOMPLETED;
return status;
}
@ -5477,13 +5453,11 @@ gl841_send_shading_data (Genesys_Device * dev, const Genesys_Sensor& sensor,
ptr+=4;
}
/* 0x5400 alignment for LIDE80 internal memory */
RIE(sanei_genesys_set_buffer_address(dev, 0x5400*i));
// 0x5400 alignment for LIDE80 internal memory
sanei_genesys_set_buffer_address(dev, 0x5400*i);
RIE(dev->model->cmd_set->bulk_write_data(dev, 0x3c, buffer.data(), pixels));
}
DBGCOMPLETED;
return status;
}

Wyświetl plik

@ -4340,6 +4340,7 @@ static SANE_Status
gl843_send_shading_data (Genesys_Device * dev, const Genesys_Sensor& sensor,
uint8_t * data, int size)
{
DBG_HELPER(dbg);
SANE_Status status = SANE_STATUS_GOOD;
uint32_t final_size, length, i;
uint8_t *buffer;
@ -4347,8 +4348,6 @@ gl843_send_shading_data (Genesys_Device * dev, const Genesys_Sensor& sensor,
GenesysRegister *r;
uint16_t dpiset, strpixel, endpixel, startx, factor;
DBGSTART;
offset=0;
length=size;
r = sanei_genesys_get_address(&dev->reg, REG01);
@ -4404,13 +4403,8 @@ gl843_send_shading_data (Genesys_Device * dev, const Genesys_Sensor& sensor,
}
}
/* send data */
status = sanei_genesys_set_buffer_address (dev, 0);
if (status != SANE_STATUS_GOOD)
{
DBG(DBG_error, "%s: failed to set buffer address: %s\n", __func__, sane_strstatus(status));
return status;
}
// send data
sanei_genesys_set_buffer_address(dev, 0);
status = dev->model->cmd_set->bulk_write_data (dev, 0x3c, final_data.data(), count);
if (status != SANE_STATUS_GOOD)
@ -4418,7 +4412,6 @@ gl843_send_shading_data (Genesys_Device * dev, const Genesys_Sensor& sensor,
DBG(DBG_error, "%s: failed to send shading table: %s\n", __func__, sane_strstatus(status));
}
DBGCOMPLETED;
return status;
}

Wyświetl plik

@ -557,9 +557,8 @@ void sanei_genesys_read_register(Genesys_Device* dev, uint16_t reg, uint8_t* val
DBG(DBG_io, "%s (0x%02x, 0x%02x) completed\n", __func__, reg, *val);
}
/* Set address for writing data */
SANE_Status
sanei_genesys_set_buffer_address (Genesys_Device * dev, uint32_t addr)
// Set address for writing data
void sanei_genesys_set_buffer_address(Genesys_Device* dev, uint32_t addr)
{
DBG_HELPER(dbg);
@ -569,7 +568,7 @@ sanei_genesys_set_buffer_address (Genesys_Device * dev, uint32_t addr)
|| dev->model->asic_type==GENESYS_GL124)
{
DBG(DBG_warn, "%s: shouldn't be used for GL846+ ASICs\n", __func__);
return SANE_STATUS_GOOD;
return;
}
DBG(DBG_io, "%s: setting address to 0x%05x\n", __func__, addr & 0xfffffff0);
@ -580,8 +579,6 @@ sanei_genesys_set_buffer_address (Genesys_Device * dev, uint32_t addr)
addr = addr >> 8;
sanei_genesys_write_register(dev, 0x2a, (addr & 0xff));
return SANE_STATUS_GOOD;
}
/**@brief read data from analog frontend (AFE)

Wyświetl plik

@ -1788,8 +1788,7 @@ sanei_genesys_calculate_zmode (uint32_t exposure_time,
uint8_t fwdstep, uint8_t tgtime,
uint32_t * z1, uint32_t * z2);
extern SANE_Status
sanei_genesys_set_buffer_address (Genesys_Device * dev, uint32_t addr);
extern void sanei_genesys_set_buffer_address(Genesys_Device* dev, uint32_t addr);
/** @brief Reads data from frontend register.
* Reads data from the given frontend register. May be used to query