kopia lustrzana https://gitlab.com/sane-project/backends
genesys: Reduce duplication of waiting for non-empty buffer state
rodzic
bf9d69d20d
commit
26e418537f
|
@ -3073,7 +3073,7 @@ static void genesys_warmup_lamp(Genesys_Device* dev)
|
|||
double first_average = 0;
|
||||
double second_average = 0;
|
||||
int difference = 255;
|
||||
int empty, lines = 3;
|
||||
int lines = 3;
|
||||
|
||||
const auto& sensor = sanei_genesys_find_sensor_any(dev);
|
||||
|
||||
|
@ -3085,12 +3085,8 @@ static void genesys_warmup_lamp(Genesys_Device* dev)
|
|||
{
|
||||
DBG(DBG_info, "%s: one more loop\n", __func__);
|
||||
dev->cmd_set->begin_scan(dev, sensor, &dev->reg, false);
|
||||
bool empty = false;
|
||||
do
|
||||
{
|
||||
sanei_genesys_test_buffer_empty(dev, &empty);
|
||||
}
|
||||
while (empty);
|
||||
|
||||
wait_until_buffer_non_empty(dev);
|
||||
|
||||
try {
|
||||
sanei_genesys_read_data_from_scanner(dev, first_line.data(), total_size);
|
||||
|
@ -3105,12 +3101,9 @@ static void genesys_warmup_lamp(Genesys_Device* dev)
|
|||
seconds++;
|
||||
|
||||
dev->cmd_set->begin_scan(dev, sensor, &dev->reg, false);
|
||||
do
|
||||
{
|
||||
sanei_genesys_test_buffer_empty(dev, &empty);
|
||||
sanei_genesys_sleep_ms(100);
|
||||
}
|
||||
while (empty);
|
||||
|
||||
wait_until_buffer_non_empty(dev);
|
||||
|
||||
sanei_genesys_read_data_from_scanner(dev, second_line.data(), total_size);
|
||||
dev->cmd_set->end_scan(dev, &dev->reg, true);
|
||||
|
||||
|
@ -3311,11 +3304,8 @@ static void genesys_start_scan(Genesys_Device* dev, bool lamp_off)
|
|||
sanei_genesys_read_feed_steps (dev, &steps);
|
||||
}
|
||||
while (steps < expected);
|
||||
// wait for buffers to be filled
|
||||
bool empty = false;
|
||||
do {
|
||||
sanei_genesys_test_buffer_empty(dev, &empty);
|
||||
} while (empty);
|
||||
|
||||
wait_until_buffer_non_empty(dev);
|
||||
|
||||
/* when doing one or two-table movement, let the motor settle to scanning speed */
|
||||
/* and scanning start before reading data */
|
||||
|
|
|
@ -1556,11 +1556,7 @@ void CommandSetGl124::search_start_position(Genesys_Device* dev) const
|
|||
|
||||
begin_scan(dev, sensor, &local_reg, true);
|
||||
|
||||
// waits for valid data
|
||||
bool empty = false;
|
||||
do {
|
||||
sanei_genesys_test_buffer_empty(dev, &empty);
|
||||
} while (empty);
|
||||
wait_until_buffer_non_empty(dev);
|
||||
|
||||
// now we're on target, we can read data
|
||||
sanei_genesys_read_data_from_scanner(dev, data.data(), size);
|
||||
|
|
|
@ -3121,9 +3121,7 @@ static void simple_scan(Genesys_Device* dev, const Genesys_Sensor& sensor,
|
|||
{
|
||||
DBG_HELPER_ARGS(dbg, "move=%d, forward=%d, shading=%d", move, forward, shading);
|
||||
unsigned int size, lines, x, y, bpp;
|
||||
bool empty, split;
|
||||
int count;
|
||||
uint8_t val;
|
||||
bool split;
|
||||
|
||||
/* round up to multiple of 3 in case of CIS scanner */
|
||||
if (dev->model->is_cis) {
|
||||
|
@ -3198,24 +3196,7 @@ static void simple_scan(Genesys_Device* dev, const Genesys_Sensor& sensor,
|
|||
// starts scan
|
||||
dev->cmd_set->begin_scan(dev, sensor, &dev->reg, move);
|
||||
|
||||
/* wait for buffers to be filled */
|
||||
count = 0;
|
||||
do
|
||||
{
|
||||
sanei_genesys_sleep_ms(10);
|
||||
sanei_genesys_get_status(dev, &val);
|
||||
if (DBG_LEVEL > DBG_info)
|
||||
{
|
||||
print_status (val);
|
||||
}
|
||||
sanei_genesys_test_buffer_empty(dev, &empty);
|
||||
count++;
|
||||
}
|
||||
while (empty && count < 1000);
|
||||
|
||||
if (count == 1000) {
|
||||
throw SaneException(SANE_STATUS_IO_ERROR, "failed to read data");
|
||||
}
|
||||
wait_until_buffer_non_empty(dev, true);
|
||||
|
||||
// now we're on target, we can read data
|
||||
sanei_genesys_read_data_from_scanner(dev, data.data(), size);
|
||||
|
|
|
@ -2615,11 +2615,7 @@ void CommandSetGl841::search_start_position(Genesys_Device* dev) const
|
|||
|
||||
dev->cmd_set->begin_scan(dev, sensor, &local_reg, true);
|
||||
|
||||
// waits for valid data
|
||||
bool empty;
|
||||
do {
|
||||
sanei_genesys_test_buffer_empty(dev, &empty);
|
||||
} while (empty);
|
||||
wait_until_buffer_non_empty(dev);
|
||||
|
||||
// now we're on target, we can read data
|
||||
sanei_genesys_read_data_from_scanner(dev, data.data(), size);
|
||||
|
@ -4064,10 +4060,7 @@ void CommandSetGl841::search_strip(Genesys_Device* dev, const Genesys_Sensor& se
|
|||
dev->cmd_set->begin_scan(dev, sensor, &local_reg, true);
|
||||
|
||||
// waits for valid data
|
||||
bool empty = false;
|
||||
do {
|
||||
sanei_genesys_test_buffer_empty(dev, &empty);
|
||||
} while (empty);
|
||||
wait_until_buffer_non_empty(dev);
|
||||
|
||||
// now we're on target, we can read data
|
||||
sanei_genesys_read_data_from_scanner(dev, data.data(), size);
|
||||
|
@ -4092,10 +4085,7 @@ void CommandSetGl841::search_strip(Genesys_Device* dev, const Genesys_Sensor& se
|
|||
dev->cmd_set->begin_scan(dev, sensor, &local_reg, true);
|
||||
|
||||
// waits for valid data
|
||||
bool empty = false;
|
||||
do {
|
||||
sanei_genesys_test_buffer_empty(dev, &empty);
|
||||
} while (empty);
|
||||
wait_until_buffer_non_empty(dev);
|
||||
|
||||
// now we're on target, we can read data
|
||||
sanei_genesys_read_data_from_scanner(dev, data.data(), size);
|
||||
|
|
|
@ -2071,11 +2071,7 @@ void CommandSetGl843::search_start_position(Genesys_Device* dev) const
|
|||
|
||||
dev->cmd_set->begin_scan(dev, sensor, &local_reg, true);
|
||||
|
||||
// waits for valid data
|
||||
bool empty = false;
|
||||
do {
|
||||
sanei_genesys_test_buffer_empty(dev, &empty);
|
||||
} while (empty);
|
||||
wait_until_buffer_non_empty(dev);
|
||||
|
||||
// now we're on target, we can read data
|
||||
Image image = read_unshuffled_image_from_scanner(dev, session, session.output_total_bytes_raw);
|
||||
|
@ -3267,11 +3263,7 @@ void CommandSetGl843::search_strip(Genesys_Device* dev, const Genesys_Sensor& se
|
|||
|
||||
dev->cmd_set->begin_scan(dev, calib_sensor, &local_reg, true);
|
||||
|
||||
// waits for valid data
|
||||
bool empty = false;
|
||||
do {
|
||||
sanei_genesys_test_buffer_empty(dev, &empty);
|
||||
} while (empty);
|
||||
wait_until_buffer_non_empty(dev);
|
||||
|
||||
// now we're on target, we can read data
|
||||
auto data = read_unshuffled_image_from_scanner(dev, session,
|
||||
|
@ -3297,11 +3289,7 @@ void CommandSetGl843::search_strip(Genesys_Device* dev, const Genesys_Sensor& se
|
|||
// now start scan
|
||||
dev->cmd_set->begin_scan(dev, calib_sensor, &local_reg, true);
|
||||
|
||||
// waits for valid data
|
||||
bool empty = false;
|
||||
do {
|
||||
sanei_genesys_test_buffer_empty(dev, &empty);
|
||||
} while (empty);
|
||||
wait_until_buffer_non_empty(dev);
|
||||
|
||||
// now we're on target, we can read data
|
||||
data = read_unshuffled_image_from_scanner(dev, session, session.output_total_bytes_raw);
|
||||
|
|
|
@ -1238,11 +1238,7 @@ void CommandSetGl846::search_start_position(Genesys_Device* dev) const
|
|||
|
||||
begin_scan(dev, sensor, &local_reg, true);
|
||||
|
||||
// waits for valid data
|
||||
bool empty = false;
|
||||
do {
|
||||
sanei_genesys_test_buffer_empty(dev, &empty);
|
||||
} while (empty);
|
||||
wait_until_buffer_non_empty(dev);
|
||||
|
||||
// now we're on target, we can read data
|
||||
sanei_genesys_read_data_from_scanner(dev, data.data(), size);
|
||||
|
@ -2003,11 +1999,7 @@ void CommandSetGl846::search_strip(Genesys_Device* dev, const Genesys_Sensor& se
|
|||
|
||||
begin_scan(dev, sensor, &local_reg, true);
|
||||
|
||||
// waits for valid data
|
||||
bool empty = false;
|
||||
do {
|
||||
sanei_genesys_test_buffer_empty(dev, &empty);
|
||||
} while (empty);
|
||||
wait_until_buffer_non_empty(dev);
|
||||
|
||||
// now we're on target, we can read data
|
||||
sanei_genesys_read_data_from_scanner(dev, data.data(), size);
|
||||
|
@ -2031,11 +2023,7 @@ void CommandSetGl846::search_strip(Genesys_Device* dev, const Genesys_Sensor& se
|
|||
// now start scan
|
||||
begin_scan(dev, sensor, &local_reg, true);
|
||||
|
||||
// waits for valid data
|
||||
bool empty = false;
|
||||
do {
|
||||
sanei_genesys_test_buffer_empty(dev, &empty);
|
||||
} while (empty);
|
||||
wait_until_buffer_non_empty(dev);
|
||||
|
||||
// now we're on target, we can read data
|
||||
sanei_genesys_read_data_from_scanner(dev, data.data(), size);
|
||||
|
|
|
@ -1280,11 +1280,7 @@ void CommandSetGl847::search_start_position(Genesys_Device* dev) const
|
|||
|
||||
begin_scan(dev, sensor, &local_reg, true);
|
||||
|
||||
// waits for valid data
|
||||
bool empty = false;
|
||||
do {
|
||||
sanei_genesys_test_buffer_empty(dev, &empty);
|
||||
} while (empty);
|
||||
wait_until_buffer_non_empty(dev);
|
||||
|
||||
// now we're on target, we can read data
|
||||
sanei_genesys_read_data_from_scanner(dev, data.data(), size);
|
||||
|
@ -2079,11 +2075,7 @@ void CommandSetGl847::search_strip(Genesys_Device* dev, const Genesys_Sensor& se
|
|||
|
||||
begin_scan(dev, sensor, &local_reg, true);
|
||||
|
||||
// waits for valid data
|
||||
bool empty = false;
|
||||
do {
|
||||
sanei_genesys_test_buffer_empty(dev, &empty);
|
||||
} while (empty);
|
||||
wait_until_buffer_non_empty(dev);
|
||||
|
||||
// now we're on target, we can read data
|
||||
sanei_genesys_read_data_from_scanner(dev, data.data(), size);
|
||||
|
@ -2107,11 +2099,7 @@ void CommandSetGl847::search_strip(Genesys_Device* dev, const Genesys_Sensor& se
|
|||
// now start scan
|
||||
begin_scan(dev, sensor, &local_reg, true);
|
||||
|
||||
// waits for valid data
|
||||
bool empty = false;
|
||||
do {
|
||||
sanei_genesys_test_buffer_empty(dev, &empty);
|
||||
} while (empty);
|
||||
wait_until_buffer_non_empty(dev);
|
||||
|
||||
// now we're on target, we can read data
|
||||
sanei_genesys_read_data_from_scanner(dev, data.data(), size);
|
||||
|
|
|
@ -770,7 +770,7 @@ void sanei_genesys_read_scancnt(Genesys_Device* dev, unsigned int* words)
|
|||
* @param *empty return value
|
||||
* @return empty will be set to true if there is no scanned data.
|
||||
**/
|
||||
void sanei_genesys_test_buffer_empty(Genesys_Device* dev, bool* empty)
|
||||
bool sanei_genesys_is_buffer_empty(Genesys_Device* dev)
|
||||
{
|
||||
DBG_HELPER(dbg);
|
||||
uint8_t val = 0;
|
||||
|
@ -784,13 +784,32 @@ void sanei_genesys_test_buffer_empty(Genesys_Device* dev, bool* empty)
|
|||
*/
|
||||
sanei_genesys_sleep_ms(1);
|
||||
DBG(DBG_io2, "%s: buffer is empty\n", __func__);
|
||||
*empty = true;
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
*empty = false;
|
||||
|
||||
DBG(DBG_io, "%s: buffer is filled\n", __func__);
|
||||
return false;
|
||||
}
|
||||
|
||||
void wait_until_buffer_non_empty(Genesys_Device* dev, bool check_status_twice)
|
||||
{
|
||||
// FIXME: reduce MAX_RETRIES once tests are updated
|
||||
const unsigned MAX_RETRIES = 100000;
|
||||
for (unsigned i = 0; i < MAX_RETRIES; ++i) {
|
||||
|
||||
if (check_status_twice) {
|
||||
// FIXME: this only to preserve previous behavior, can be removed
|
||||
std::uint8_t val = 0;
|
||||
sanei_genesys_get_status(dev, &val);
|
||||
}
|
||||
|
||||
bool empty = sanei_genesys_is_buffer_empty(dev);
|
||||
sanei_genesys_sleep_ms(10);
|
||||
if (!empty)
|
||||
return;
|
||||
}
|
||||
throw SaneException(SANE_STATUS_IO_ERROR, "failed to read data");
|
||||
}
|
||||
|
||||
void wait_until_has_valid_words(Genesys_Device* dev)
|
||||
|
|
|
@ -418,7 +418,7 @@ void sanei_genesys_write_pnm_file(const char* filename, const Image& image);
|
|||
extern void sanei_genesys_write_pnm_file16(const char* filename, const uint16_t *data, unsigned channels,
|
||||
unsigned pixels_per_line, unsigned lines);
|
||||
|
||||
void sanei_genesys_test_buffer_empty(Genesys_Device* dev, bool* empty);
|
||||
void wait_until_buffer_non_empty(Genesys_Device* dev, bool check_status_twice = false);
|
||||
|
||||
extern void sanei_genesys_read_data_from_scanner(Genesys_Device* dev, uint8_t* data, size_t size);
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue