From 84357741a6a6e6430f199b2c3f7498e0e97da9ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Frings-F=C3=BCrst?= Date: Sun, 12 Feb 2023 17:35:53 +0100 Subject: New upstream version 1.2.1 --- backend/genesys/fwd.h | 2 +- backend/genesys/genesys.cpp | 226 +++++++++++++++++------------ backend/genesys/genesys.h | 8 + backend/genesys/gl124.cpp | 37 +++-- backend/genesys/gl124.h | 4 +- backend/genesys/gl646.cpp | 68 ++++----- backend/genesys/gl646.h | 4 +- backend/genesys/gl841.cpp | 119 ++++++++++----- backend/genesys/gl841.h | 4 +- backend/genesys/gl842.cpp | 21 +-- backend/genesys/gl842.h | 4 +- backend/genesys/gl843.cpp | 51 ++++--- backend/genesys/gl843.h | 4 +- backend/genesys/gl846.cpp | 32 ++-- backend/genesys/gl846.h | 4 +- backend/genesys/gl847.cpp | 77 ++++++---- backend/genesys/gl847.h | 4 +- backend/genesys/image.h | 2 +- backend/genesys/image_pipeline.cpp | 2 +- backend/genesys/image_pixel.h | 2 +- backend/genesys/low.cpp | 110 +++++++------- backend/genesys/low.h | 37 ++--- backend/genesys/scanner_interface_usb.cpp | 6 +- backend/genesys/serialize.cpp | 0 backend/genesys/serialize.h | 2 +- backend/genesys/tables_model.cpp | 11 +- backend/genesys/test_scanner_interface.cpp | 4 +- 27 files changed, 492 insertions(+), 353 deletions(-) delete mode 100644 backend/genesys/serialize.cpp (limited to 'backend/genesys') diff --git a/backend/genesys/fwd.h b/backend/genesys/fwd.h index 9937654..5d341b8 100644 --- a/backend/genesys/fwd.h +++ b/backend/genesys/fwd.h @@ -59,7 +59,7 @@ struct Pixel; struct RawPixel; // low.h -struct UsbDeviceEntry; +class UsbDeviceEntry; // motor.h struct Genesys_Motor; diff --git a/backend/genesys/genesys.cpp b/backend/genesys/genesys.cpp index 5aba58c..ab1367e 100644 --- a/backend/genesys/genesys.cpp +++ b/backend/genesys/genesys.cpp @@ -310,9 +310,8 @@ void sanei_genesys_init_structs (Genesys_Device * dev) * @param gamma gamma to compute values * @return a gamma table filled with the computed values * */ -void -sanei_genesys_create_gamma_table (std::vector& gamma_table, int size, - float maximum, float gamma_max, float gamma) +void sanei_genesys_create_gamma_table(std::vector& gamma_table, int size, + float maximum, float gamma_max, float gamma) { gamma_table.clear(); gamma_table.resize(size, 0); @@ -334,7 +333,7 @@ sanei_genesys_create_gamma_table (std::vector& gamma_table, int size, } void sanei_genesys_create_default_gamma_table(Genesys_Device* dev, - std::vector& gamma_table, float gamma) + std::vector& gamma_table, float gamma) { int size = 0; int max = 0; @@ -346,6 +345,7 @@ void sanei_genesys_create_default_gamma_table(Genesys_Device* dev, } max = size - 1; } else if (dev->model->asic_type == AsicType::GL124 || + dev->model->asic_type == AsicType::GL845 || dev->model->asic_type == AsicType::GL846 || dev->model->asic_type == AsicType::GL847) { size = 257; @@ -396,7 +396,7 @@ SANE_Int sanei_genesys_exposure_time2(Genesys_Device * dev, const MotorProfile& The data needs to be of size "size", and in little endian byte order. */ static void genesys_send_offset_and_shading(Genesys_Device* dev, const Genesys_Sensor& sensor, - uint8_t* data, int size) + std::uint8_t* data, int size) { DBG_HELPER_ARGS(dbg, "(size = %d)", size); int start_address; @@ -427,10 +427,10 @@ void sanei_genesys_init_shading_data(Genesys_Device* dev, const Genesys_Sensor& unsigned channels = dev->settings.get_channels(); - // 16 bit black, 16 bit white - std::vector shading_data(pixels_per_line * 4 * channels, 0); + // 16 bit black, 16 bit white + std::vector shading_data(pixels_per_line * 4 * channels, 0); - uint8_t* shading_data_ptr = shading_data.data(); + std::uint8_t* shading_data_ptr = shading_data.data(); for (unsigned i = 0; i < pixels_per_line * channels; i++) { *shading_data_ptr++ = 0x00; /* dark lo */ @@ -487,7 +487,7 @@ void scanner_clear_scan_and_feed_counts(Genesys_Device& dev) } void scanner_send_slope_table(Genesys_Device* dev, const Genesys_Sensor& sensor, unsigned table_nr, - const std::vector& slope_table) + const std::vector& slope_table) { DBG_HELPER_ARGS(dbg, "table_nr = %d, steps = %zu", table_nr, slope_table.size()); @@ -515,7 +515,7 @@ void scanner_send_slope_table(Genesys_Device* dev, const Genesys_Sensor& sensor, throw SaneException("invalid table number %d", table_nr); } - std::vector table; + std::vector table; table.reserve(slope_table.size() * 2); for (std::size_t i = 0; i < slope_table.size(); i++) { table.push_back(slope_table[i] & 0xff); @@ -1868,7 +1868,7 @@ void scanner_coarse_gain_calibration(Genesys_Device& dev, const Genesys_Sensor& dev.model->asic_type == AsicType::GL842 || dev.model->asic_type == AsicType::GL843) { - std::vector values; + std::vector values; // FIXME: start from the second line because the first line often has artifacts. Probably // caused by unclean cleanup of previous scan for (std::size_t x = pixels / 4; x < (pixels * 3 / 4); x++) { @@ -2178,12 +2178,12 @@ SensorExposure scanner_led_calibration(Genesys_Device& dev, const Genesys_Sensor } void sanei_genesys_calculate_zmod(bool two_table, - uint32_t exposure_time, - const std::vector& slope_table, + std::uint32_t exposure_time, + const std::vector& slope_table, unsigned acceleration_steps, unsigned move_steps, unsigned buffer_acceleration_steps, - uint32_t* out_z1, uint32_t* out_z2) + std::uint32_t* out_z1, std::uint32_t* out_z2) { // acceleration total time unsigned sum = std::accumulate(slope_table.begin(), slope_table.begin() + acceleration_steps, @@ -2233,7 +2233,7 @@ static void genesys_shading_calibration_impl(Genesys_Device* dev, const Genesys_ debug_dump(DBG_info, dev->calib_session); size_t size; - uint32_t pixels_per_line; + std::uint32_t pixels_per_line; if (dev->model->asic_type == AsicType::GL842 || dev->model->asic_type == AsicType::GL843 || @@ -2274,7 +2274,7 @@ static void genesys_shading_calibration_impl(Genesys_Device* dev, const Genesys_ size = channels * 2 * pixels_per_line * (dev->calib_session.params.lines + 1); } - std::vector calibration_data(size / 2); + std::vector calibration_data(size / 2); // turn off motor and lamp power for flatbed scanners, but not for sheetfed scanners // because they have a calibration sheet with a sufficient black strip @@ -2353,8 +2353,8 @@ static void genesys_shading_calibration_impl(Genesys_Device* dev, const Genesys_ static void genesys_dark_shading_by_dummy_pixel(Genesys_Device* dev, const Genesys_Sensor& sensor) { DBG_HELPER(dbg); - uint32_t pixels_per_line; - uint32_t skip, xend; + std::uint32_t pixels_per_line; + std::uint32_t skip, xend; int dummy1, dummy2, dummy3; /* dummy black average per channel */ if (dev->model->asic_type == AsicType::GL842 || @@ -2578,11 +2578,9 @@ static void genesys_dark_white_shading_calibration(Genesys_Device* dev, dev->interface->write_registers(local_reg); } - size_t size; - uint32_t pixels_per_line; + std::size_t size; + std::uint32_t pixels_per_line; unsigned int x; - uint32_t dark, white, dark_sum, white_sum, dark_count, white_count, col, - dif; if (dev->model->asic_type == AsicType::GL842 || dev->model->asic_type == AsicType::GL843) @@ -2618,7 +2616,7 @@ static void genesys_dark_white_shading_calibration(Genesys_Device* dev, size = channels * 2 * pixels_per_line * dev->calib_session.params.lines; } - std::vector calibration_data(size); + std::vector calibration_data(size); // turn on motor and lamp power sanei_genesys_set_lamp_power(dev, sensor, local_reg, true); @@ -2656,19 +2654,17 @@ static void genesys_dark_white_shading_calibration(Genesys_Device* dev, std::fill(dev->white_average_data.begin(), dev->white_average_data.begin() + start_offset * channels, 0); - uint16_t* average_white = dev->white_average_data.data() + - start_offset * channels; - uint16_t* average_dark = dev->dark_average_data.data() + - start_offset * channels; + std::uint16_t* average_white = dev->white_average_data.data() + start_offset * channels; + std::uint16_t* average_dark = dev->dark_average_data.data() + start_offset * channels; for (x = 0; x < pixels_per_line * channels; x++) { - dark = 0xffff; - white = 0; + std::uint32_t dark = 0xffff; + std::uint32_t white = 0; for (std::size_t y = 0; y < dev->calib_session.params.lines; y++) { - col = calibration_data[(x + y * pixels_per_line * channels) * 2]; + std::uint32_t col = calibration_data[(x + y * pixels_per_line * channels) * 2]; col |= calibration_data[(x + y * pixels_per_line * channels) * 2 + 1] << 8; @@ -2679,20 +2675,20 @@ static void genesys_dark_white_shading_calibration(Genesys_Device* dev, dark = col; } - dif = white - dark; + std::uint32_t dif = white - dark; dark = dark + dif / 8; white = white - dif / 8; - dark_count = 0; - dark_sum = 0; + std::uint32_t dark_count = 0; + std::uint32_t dark_sum = 0; - white_count = 0; - white_sum = 0; + std::uint32_t white_count = 0; + std::uint32_t white_sum = 0; for (std::size_t y = 0; y < dev->calib_session.params.lines; y++) { - col = calibration_data[(x + y * pixels_per_line * channels) * 2]; + std::uint32_t col = calibration_data[(x + y * pixels_per_line * channels) * 2]; col |= calibration_data[(x + y * pixels_per_line * channels) * 2 + 1] << 8; @@ -2780,9 +2776,8 @@ compute_coefficient (unsigned int coeff, unsigned int target, unsigned int value * @param target_bright value of the white target code * @param target_dark value of the black target code */ -static void -compute_averaged_planar (Genesys_Device * dev, const Genesys_Sensor& sensor, - uint8_t * shading_data, +static void compute_averaged_planar(Genesys_Device * dev, const Genesys_Sensor& sensor, + std::uint8_t* shading_data, unsigned int pixels_per_line, unsigned int words_per_color, unsigned int channels, @@ -2852,7 +2847,8 @@ compute_averaged_planar (Genesys_Device * dev, const Genesys_Sensor& sensor, avgpixels = 15; /* LiDE80 packs shading data */ - if (dev->model->sensor_id != SensorId::CIS_CANON_LIDE_80) { + if (dev->model->sensor_id != SensorId::CIS_CANON_LIDE_80) + { factor=1; fill=avgpixels; } @@ -2961,7 +2957,7 @@ static std::array color_order_to_cmat(ColorOrder color_order) * @param target value of the target code */ static void compute_coefficients(Genesys_Device * dev, - uint8_t * shading_data, + std::uint8_t* shading_data, unsigned int pixels_per_line, unsigned int channels, ColorOrder color_order, @@ -2969,7 +2965,6 @@ static void compute_coefficients(Genesys_Device * dev, unsigned int coeff, unsigned int target) { - uint8_t *ptr; /* contain 16bit words in little endian */ unsigned int x, c; unsigned int val, br, dk; unsigned int start, end; @@ -2995,7 +2990,8 @@ static void compute_coefficients(Genesys_Device * dev, for (x = start; x < end; x++) { /* TODO if channels=1 , use filter to know the base addr */ - ptr = shading_data + 4 * ((x + offset) * channels + cmat[c]); + // contain 16bit words in little endian + std::uint8_t* ptr = shading_data + 4 * ((x + offset) * channels + cmat[c]); // dark data dk = dev->dark_average_data[x * channels + c]; @@ -3033,7 +3029,7 @@ static void compute_coefficients(Genesys_Device * dev, * @param target white target value */ static void compute_planar_coefficients(Genesys_Device * dev, - uint8_t * shading_data, + std::uint8_t* shading_data, unsigned int factor, unsigned int pixels_per_line, unsigned int words_per_color, @@ -3043,22 +3039,20 @@ static void compute_planar_coefficients(Genesys_Device * dev, unsigned int coeff, unsigned int target) { - uint8_t *ptr; /* contains 16bit words in little endian */ - uint32_t x, c, i; - uint32_t val, dk, br; + std::uint32_t i; + std::uint32_t val, dk, br; auto cmat = color_order_to_cmat(color_order); DBG(DBG_io, "%s: factor=%d, pixels_per_line=%d, words=0x%X, coeff=0x%04x\n", __func__, factor, pixels_per_line, words_per_color, coeff); - for (c = 0; c < channels; c++) - { + for (unsigned c = 0; c < channels; c++) { /* shading data is larger than pixels_per_line so offset can be neglected */ - for (x = 0; x < pixels_per_line; x+=factor) - { + for (unsigned x = 0; x < pixels_per_line; x += factor) { /* x2 because of 16 bit values, and x2 since one coeff for dark * and another for white */ - ptr = shading_data + words_per_color * cmat[c] * 2 + (x + offset) * 4; + // contains 16bit words in little endian + std::uint8_t* ptr = shading_data + words_per_color * cmat[c] * 2 + (x + offset) * 4; dk = 0; br = 0; @@ -3074,9 +3068,8 @@ static void compute_planar_coefficients(Genesys_Device * dev, val = compute_coefficient (coeff, target, br - dk); - /* we duplicate the information to have calibration data at optical resolution */ - for (i = 0; i < factor; i++) - { + // we duplicate the information to have calibration data at optical resolution + for (unsigned i = 0; i < factor; i++) { ptr[0 + 4 * i] = dk & 255; ptr[1 + 4 * i] = dk / 256; ptr[2 + 4 * i] = val & 0xff; @@ -3097,10 +3090,9 @@ static void compute_planar_coefficients(Genesys_Device * dev, } } -static void -compute_shifted_coefficients (Genesys_Device * dev, - const Genesys_Sensor& sensor, - uint8_t * shading_data, +static void compute_shifted_coefficients(Genesys_Device * dev, + const Genesys_Sensor& sensor, + std::uint8_t* shading_data, unsigned int pixels_per_line, unsigned int channels, ColorOrder color_order, @@ -3112,7 +3104,7 @@ compute_shifted_coefficients (Genesys_Device * dev, { unsigned int x, avgpixels, basepixels, i, j, val1, val2; unsigned int br_tmp [3], dk_tmp [3]; - uint8_t *ptr = shading_data + offset * 3 * 4; /* contain 16bit words in little endian */ + std::uint8_t* ptr = shading_data + offset * 3 * 4; // contain 16bit words in little endian unsigned int patch_cnt = offset * 3; /* at start, offset of first patch */ auto cmat = color_order_to_cmat(color_order); @@ -3198,7 +3190,7 @@ static void genesys_send_shading_coefficient(Genesys_Device* dev, const Genesys_ return; } - uint32_t pixels_per_line; + std::uint32_t pixels_per_line; int o; unsigned int length; /**> number of shading calibration data words */ unsigned int factor; @@ -3255,8 +3247,8 @@ static void genesys_send_shading_coefficient(Genesys_Device* dev, const Genesys_ length = words_per_color * 3 * 2; /* allocate computed size */ - // contains 16bit words in little endian - std::vector shading_data(length, 0); + // contains 16bit words in little endian + std::vector shading_data(length, 0); if (!dev->calib_session.computed) { genesys_send_offset_and_shading(dev, sensor, shading_data.data(), length); @@ -3584,7 +3576,7 @@ static void genesys_save_calibration(Genesys_Device* dev, const Genesys_Sensor& static void genesys_flatbed_calibration(Genesys_Device* dev, Genesys_Sensor& sensor) { DBG_HELPER(dbg); - uint32_t pixels_per_line; + std::uint32_t pixels_per_line; unsigned coarse_res = sensor.full_resolution; if (dev->settings.yres <= sensor.full_resolution / 2) { @@ -3857,8 +3849,8 @@ static void genesys_warmup_lamp(Genesys_Device* dev) auto channels = dev->session.params.channels; auto lines = dev->session.output_line_count; - std::vector first_line(total_size); - std::vector second_line(total_size); + std::vector first_line(total_size); + std::vector second_line(total_size); do { first_line = second_line; @@ -4892,28 +4884,76 @@ static void init_options(Genesys_Scanner* s) s->opt[OPT_POWER_SW].cap = SANE_CAP_INACTIVE; /* extra button */ - s->opt[OPT_EXTRA_SW].name = "extra"; - s->opt[OPT_EXTRA_SW].title = SANE_I18N("Extra button"); - s->opt[OPT_EXTRA_SW].desc = SANE_I18N("Extra button"); - s->opt[OPT_EXTRA_SW].type = SANE_TYPE_BOOL; - s->opt[OPT_EXTRA_SW].unit = SANE_UNIT_NONE; - if (model->buttons & GENESYS_HAS_EXTRA_SW) { - s->opt[OPT_EXTRA_SW].cap = SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED; - } else { - s->opt[OPT_EXTRA_SW].cap = SANE_CAP_INACTIVE; - } - - // transparency/scan_film button - s->opt[OPT_TRANSP_SW].name = "transparency"; - s->opt[OPT_TRANSP_SW].title = SANE_I18N ("Transparency button"); - s->opt[OPT_TRANSP_SW].desc = SANE_I18N ("Transparency button"); - s->opt[OPT_TRANSP_SW].type = SANE_TYPE_BOOL; - s->opt[OPT_TRANSP_SW].unit = SANE_UNIT_NONE; - if (model->buttons & GENESYS_HAS_TRANSP_SW) { - s->opt[OPT_TRANSP_SW].cap = SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED; - } else { - s->opt[OPT_TRANSP_SW].cap = SANE_CAP_INACTIVE; - } + s->opt[OPT_EXTRA_SW].name = "extra"; + s->opt[OPT_EXTRA_SW].title = SANE_I18N("Extra button"); + s->opt[OPT_EXTRA_SW].desc = SANE_I18N("Extra button"); + s->opt[OPT_EXTRA_SW].type = SANE_TYPE_BOOL; + s->opt[OPT_EXTRA_SW].unit = SANE_UNIT_NONE; + if (model->buttons & GENESYS_HAS_EXTRA_SW) + s->opt[OPT_EXTRA_SW].cap = + SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED; + else + s->opt[OPT_EXTRA_SW].cap = SANE_CAP_INACTIVE; + + /* transparency/scan_film button */ + s->opt[OPT_TRANSP_SW].name = "transparency"; + s->opt[OPT_TRANSP_SW].title = SANE_I18N ("Transparency button"); + s->opt[OPT_TRANSP_SW].desc = SANE_I18N ("Transparency button"); + s->opt[OPT_TRANSP_SW].type = SANE_TYPE_BOOL; + s->opt[OPT_TRANSP_SW].unit = SANE_UNIT_NONE; + if (model->buttons & GENESYS_HAS_TRANSP_SW) + s->opt[OPT_TRANSP_SW].cap = + SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED; + else + s->opt[OPT_TRANSP_SW].cap = SANE_CAP_INACTIVE; + + /* PDF special function button 1 */ + s->opt[OPT_PDF1_SW].name = "pdf1"; + s->opt[OPT_PDF1_SW].title = SANE_I18N ("PDF function button 1"); + s->opt[OPT_PDF1_SW].desc = SANE_I18N ("PDF function button 1"); + s->opt[OPT_PDF1_SW].type = SANE_TYPE_BOOL; + s->opt[OPT_PDF1_SW].unit = SANE_UNIT_NONE; + if (model->buttons & GENESYS_HAS_PDF1_SW) + s->opt[OPT_PDF1_SW].cap = + SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED; + else + s->opt[OPT_PDF1_SW].cap = SANE_CAP_INACTIVE; + + /* PDF special function button 2 */ + s->opt[OPT_PDF2_SW].name = "pdf2"; + s->opt[OPT_PDF2_SW].title = SANE_I18N ("PDF function button 2"); + s->opt[OPT_PDF2_SW].desc = SANE_I18N ("PDF function button 2"); + s->opt[OPT_PDF2_SW].type = SANE_TYPE_BOOL; + s->opt[OPT_PDF2_SW].unit = SANE_UNIT_NONE; + if (model->buttons & GENESYS_HAS_PDF2_SW) + s->opt[OPT_PDF2_SW].cap = + SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED; + else + s->opt[OPT_PDF2_SW].cap = SANE_CAP_INACTIVE; + + /* PDF special function button 3 */ + s->opt[OPT_PDF3_SW].name = "pdf3"; + s->opt[OPT_PDF3_SW].title = SANE_I18N ("PDF function button 3"); + s->opt[OPT_PDF3_SW].desc = SANE_I18N ("PDF function button 3"); + s->opt[OPT_PDF3_SW].type = SANE_TYPE_BOOL; + s->opt[OPT_PDF3_SW].unit = SANE_UNIT_NONE; + if (model->buttons & GENESYS_HAS_PDF3_SW) + s->opt[OPT_PDF3_SW].cap = + SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED; + else + s->opt[OPT_PDF3_SW].cap = SANE_CAP_INACTIVE; + + /* PDF special function button 4 */ + s->opt[OPT_PDF4_SW].name = "pdf4"; + s->opt[OPT_PDF4_SW].title = SANE_I18N ("PDF function button 4"); + s->opt[OPT_PDF4_SW].desc = SANE_I18N ("PDF function button 4"); + s->opt[OPT_PDF4_SW].type = SANE_TYPE_BOOL; + s->opt[OPT_PDF4_SW].unit = SANE_UNIT_NONE; + if (model->buttons & GENESYS_HAS_PDF4_SW) + s->opt[OPT_PDF4_SW].cap = + SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED; + else + s->opt[OPT_PDF4_SW].cap = SANE_CAP_INACTIVE; /* calibration needed */ s->opt[OPT_NEED_CALIBRATION_SW].name = "need-calibration"; @@ -5588,7 +5628,7 @@ static void get_option_value(Genesys_Scanner* s, int option, void* val) auto* dev = s->dev; unsigned int i; SANE_Word* table = nullptr; - std::vector gamma_table; + std::vector gamma_table; unsigned option_size = 0; const Genesys_Sensor* sensor = nullptr; @@ -5734,6 +5774,10 @@ static void get_option_value(Genesys_Scanner* s, int option, void* val) case OPT_POWER_SW: case OPT_EXTRA_SW: case OPT_TRANSP_SW: + case OPT_PDF1_SW: + case OPT_PDF2_SW: + case OPT_PDF3_SW: + case OPT_PDF4_SW: s->dev->cmd_set->update_hardware_sensors(s); *reinterpret_cast(val) = s->buttons[genesys_option_to_button(option)].read(); break; @@ -6370,6 +6414,10 @@ GenesysButtonName genesys_option_to_button(int option) case OPT_POWER_SW: return BUTTON_POWER_SW; case OPT_EXTRA_SW: return BUTTON_EXTRA_SW; case OPT_TRANSP_SW: return BUTTON_TRANSP_SW; + case OPT_PDF1_SW: return BUTTON_PDF1_SW; + case OPT_PDF2_SW: return BUTTON_PDF2_SW; + case OPT_PDF3_SW: return BUTTON_PDF3_SW; + case OPT_PDF4_SW: return BUTTON_PDF4_SW; default: throw std::runtime_error("Unknown option to convert to button index"); } } diff --git a/backend/genesys/genesys.h b/backend/genesys/genesys.h index 272beaa..65b66e7 100644 --- a/backend/genesys/genesys.h +++ b/backend/genesys/genesys.h @@ -104,6 +104,10 @@ enum Genesys_Option OPT_POWER_SW, OPT_EXTRA_SW, OPT_TRANSP_SW, + OPT_PDF1_SW, + OPT_PDF2_SW, + OPT_PDF3_SW, + OPT_PDF4_SW, OPT_NEED_CALIBRATION_SW, OPT_BUTTON_GROUP, OPT_CALIBRATE, @@ -125,6 +129,10 @@ enum GenesysButtonName : unsigned { BUTTON_POWER_SW, BUTTON_EXTRA_SW, BUTTON_TRANSP_SW, + BUTTON_PDF1_SW, + BUTTON_PDF2_SW, + BUTTON_PDF3_SW, + BUTTON_PDF4_SW, NUM_BUTTONS }; diff --git a/backend/genesys/gl124.cpp b/backend/genesys/gl124.cpp index 1fa4d99..af193a3 100644 --- a/backend/genesys/gl124.cpp +++ b/backend/genesys/gl124.cpp @@ -355,7 +355,7 @@ gl124_init_registers (Genesys_Device * dev) * @param dev device owning the AFE * @param set flag AFE_INIT to specify the AFE must be reset before writing data * */ -static void gl124_set_ti_fe(Genesys_Device* dev, uint8_t set) +static void gl124_set_ti_fe(Genesys_Device* dev, std::uint8_t set) { DBG_HELPER(dbg); int i; @@ -367,9 +367,8 @@ static void gl124_set_ti_fe(Genesys_Device* dev, uint8_t set) // start writing to DAC dev->interface->write_fe_register(0x00, 0x80); - /* write values to analog frontend */ - for (uint16_t addr = 0x01; addr < 0x04; addr++) - { + // write values to analog frontend + for (std::uint16_t addr = 0x01; addr < 0x04; addr++) { dev->interface->write_fe_register(addr, dev->frontend.regs.get_value(addr)); } @@ -392,13 +391,14 @@ static void gl124_set_ti_fe(Genesys_Device* dev, uint8_t set) // Set values of analog frontend -void CommandSetGl124::set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t set) const +void CommandSetGl124::set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, + std::uint8_t set) const { DBG_HELPER_ARGS(dbg, "%s", set == AFE_INIT ? "init" : set == AFE_SET ? "set" : set == AFE_POWER_SAVE ? "powersave" : "huh?"); (void) sensor; - uint8_t val; + std::uint8_t val; if (set == AFE_INIT) { dev->frontend = dev->frontend_initial; @@ -434,7 +434,7 @@ static void gl124_init_motor_regs_scan(Genesys_Device* dev, DBG_HELPER(dbg); unsigned int lincnt, fast_dpi; unsigned int feedl,dist; - uint32_t z1, z2; + std::uint32_t z1, z2; unsigned yres; unsigned min_speed; unsigned int linesel; @@ -489,7 +489,7 @@ static void gl124_init_motor_regs_scan(Genesys_Device* dev, reg->set24(REG_LINCNT, lincnt); /* compute register 02 value */ - uint8_t r02 = REG_0x02_NOTHOME; + std::uint8_t r02 = REG_0x02_NOTHOME; if (has_flag(flags, ScanFlag::AUTO_GO_HOME)) { r02 |= REG_0x02_AGOHOME; @@ -578,7 +578,6 @@ static void gl124_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens const ScanSession& session) { DBG_HELPER_ARGS(dbg, "exposure_time=%d", exposure_time); - uint32_t expmax; scanner_setup_sensor(*dev, sensor, *reg); @@ -659,7 +658,7 @@ static void gl124_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens reg->find_reg(REG_0x60).value &= ~REG_0x60_LEDADD; if (session.enable_ledadd) { reg->find_reg(REG_0x60).value |= REG_0x60_LEDADD; - expmax = reg->get24(REG_EXPR); + std::uint32_t expmax = reg->get24(REG_EXPR); expmax = std::max(expmax, reg->get24(REG_EXPG)); expmax = std::max(expmax, reg->get24(REG_EXPB)); @@ -745,7 +744,7 @@ void CommandSetGl124::init_regs_for_scan_session(Genesys_Device* dev, const Gene dev->session = session; dev->total_bytes_read = 0; - dev->total_bytes_to_read = session.output_line_bytes_requested * session.params.lines; + dev->total_bytes_to_read = (size_t)session.output_line_bytes_requested * (size_t)session.params.lines; DBG(DBG_info, "%s: total bytes to send to frontend = %zu\n", __func__, dev->total_bytes_to_read); @@ -826,7 +825,7 @@ void gl124_setup_scan_gpio(Genesys_Device* dev, int resolution) { DBG_HELPER(dbg); - uint8_t val = dev->interface->read_register(REG_0x32); + std::uint8_t val = dev->interface->read_register(REG_0x32); /* LiDE 110, 210 and 220 cases */ if(dev->model->gpio_id != GpioId::CANON_LIDE_120) { @@ -883,7 +882,7 @@ void CommandSetGl124::begin_scan(Genesys_Device* dev, const Genesys_Sensor& sens scanner_clear_scan_and_feed_counts(*dev); // enable scan and motor - uint8_t val = dev->interface->read_register(REG_0x01); + std::uint8_t val = dev->interface->read_register(REG_0x01); val |= REG_0x01_SCAN; dev->interface->write_register(REG_0x01, val); @@ -974,7 +973,7 @@ void CommandSetGl124::wait_for_motor_stop(Genesys_Device* dev) const DBG_HELPER(dbg); auto status = scanner_read_status(*dev); - uint8_t val40 = dev->interface->read_register(REG_0x100); + std::uint8_t val40 = dev->interface->read_register(REG_0x100); if (!status.is_motor_enabled && (val40 & REG_0x100_MOTMFLG) == 0) { return; @@ -997,7 +996,7 @@ void CommandSetGl124::send_shading_data(Genesys_Device* dev, const Genesys_Senso { DBG_HELPER_ARGS(dbg, "writing %d bytes of shading data", size); std::uint32_t addr, length, segcnt, pixels, i; - uint8_t *ptr, *src; + std::uint8_t *ptr, *src; /* logical size of a color as seen by generic code of the frontend */ length = size / 3; @@ -1020,7 +1019,7 @@ void CommandSetGl124::send_shading_data(Genesys_Device* dev, const Genesys_Senso std::to_string(dev->session.segment_count)); DBG( DBG_io2, "%s: using chunks of %d bytes (%d shading data pixels)\n",__func__,length, length/4); - std::vector buffer(pixels * dev->session.segment_count, 0); + std::vector buffer(pixels * dev->session.segment_count, 0); /* write actual red data */ for(i=0;i<3;i++) @@ -1047,7 +1046,7 @@ void CommandSetGl124::send_shading_data(Genesys_Device* dev, const Genesys_Senso /* next shading coefficient */ ptr+=4; } - uint8_t val = dev->interface->read_register(0xd0+i); + std::uint8_t val = dev->interface->read_register(0xd0+i); addr = val * 8192 + 0x10000000; dev->interface->write_ahb(addr, pixels * dev->session.segment_count, buffer.data()); } @@ -1254,7 +1253,7 @@ void CommandSetGl124::asic_boot(Genesys_Device* dev, bool cold) const dev->interface->write_register(0x36, 0x01); // set GPIO 17 - uint8_t val = dev->interface->read_register(0x33); + std::uint8_t val = dev->interface->read_register(0x33); val |= 0x01; dev->interface->write_register(0x33, val); @@ -1297,7 +1296,7 @@ void CommandSetGl124::update_hardware_sensors(Genesys_Scanner* s) const any of them. */ DBG_HELPER(dbg); - uint8_t val = s->dev->interface->read_register(REG_0x31); + std::uint8_t val = s->dev->interface->read_register(REG_0x31); /* TODO : for the next scanner special case, * add another per scanner button profile struct to avoid growing diff --git a/backend/genesys/gl124.h b/backend/genesys/gl124.h index 02b733b..2b98b1b 100644 --- a/backend/genesys/gl124.h +++ b/backend/genesys/gl124.h @@ -46,7 +46,7 @@ public: Genesys_Register_Set* reg, const ScanSession& session) const override; - void set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t set) const override; + void set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, std::uint8_t set) const override; void set_powersaving(Genesys_Device* dev, int delay) const override; void save_power(Genesys_Device* dev, bool enable) const override; @@ -80,7 +80,7 @@ public: void eject_document(Genesys_Device* dev) const override; - void send_shading_data(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t* data, + void send_shading_data(Genesys_Device* dev, const Genesys_Sensor& sensor, std::uint8_t* data, int size) const override; ScanSession calculate_scan_session(const Genesys_Device* dev, diff --git a/backend/genesys/gl646.cpp b/backend/genesys/gl646.cpp index bdde703..ac6c617 100644 --- a/backend/genesys/gl646.cpp +++ b/backend/genesys/gl646.cpp @@ -43,11 +43,12 @@ constexpr unsigned CALIBRATION_LINES = 10; static void write_control(Genesys_Device* dev, const Genesys_Sensor& sensor, int resolution); -static void gl646_set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t set, int dpi); +static void gl646_set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, std::uint8_t set, + int dpi); static void simple_scan(Genesys_Device* dev, const Genesys_Sensor& sensor, const ScanSession& session, bool move, - std::vector& data, const char* test_identifier); + std::vector& data, const char* test_identifier); /** * Send the stop scan command * */ @@ -374,7 +375,7 @@ static Motor_Master motor_master[] = { /** * reads value from gpio endpoint */ -static void gl646_gpio_read(IUsbDevice& usb_dev, uint8_t* value) +static void gl646_gpio_read(IUsbDevice& usb_dev, std::uint8_t* value) { DBG_HELPER(dbg); usb_dev.control_msg(REQUEST_TYPE_IN, REQUEST_REGISTER, GPIO_READ, INDEX, 1, value); @@ -383,7 +384,7 @@ static void gl646_gpio_read(IUsbDevice& usb_dev, uint8_t* value) /** * writes the given value to gpio endpoint */ -static void gl646_gpio_write(IUsbDevice& usb_dev, uint8_t value) +static void gl646_gpio_write(IUsbDevice& usb_dev, std::uint8_t value) { DBG_HELPER_ARGS(dbg, "(0x%02x)", value); usb_dev.control_msg(REQUEST_TYPE_OUT, REQUEST_REGISTER, GPIO_WRITE, INDEX, 1, &value); @@ -392,7 +393,7 @@ static void gl646_gpio_write(IUsbDevice& usb_dev, uint8_t value) /** * writes the given value to gpio output enable endpoint */ -static void gl646_gpio_output_enable(IUsbDevice& usb_dev, uint8_t value) +static void gl646_gpio_output_enable(IUsbDevice& usb_dev, std::uint8_t value) { DBG_HELPER_ARGS(dbg, "(0x%02x)", value); usb_dev.control_msg(REQUEST_TYPE_OUT, REQUEST_REGISTER, GPIO_OUTPUT_ENABLE, INDEX, 1, &value); @@ -440,10 +441,10 @@ void CommandSetGl646::init_regs_for_scan_session(Genesys_Device* dev, const Gene debug_dump(DBG_info, sensor); - uint32_t move = session.params.starty; + std::uint32_t move = session.params.starty; Motor_Master *motor = nullptr; - uint32_t z1, z2; + std::uint32_t z1, z2; int feedl; @@ -817,7 +818,8 @@ void CommandSetGl646::init_regs_for_scan_session(Genesys_Device* dev, const Gene dev->session = session; dev->total_bytes_read = 0; - dev->total_bytes_to_read = session.output_line_bytes_requested * session.params.lines; + dev->total_bytes_to_read = (size_t) session.output_line_bytes_requested + * (size_t) session.params.lines; /* select color filter based on settings */ regs->find_reg(0x04).value &= ~REG_0x04_FILTER; @@ -1023,7 +1025,7 @@ gl646_init_regs (Genesys_Device * dev) } // Set values of Analog Device type frontend -static void gl646_set_ad_fe(Genesys_Device* dev, uint8_t set) +static void gl646_set_ad_fe(Genesys_Device* dev, std::uint8_t set) { DBG_HELPER(dbg); int i; @@ -1058,7 +1060,7 @@ static void gl646_set_ad_fe(Genesys_Device* dev, uint8_t set) * @param set action from AFE_SET, AFE_INIT and AFE_POWERSAVE * @param dpi resolution of the scan since it affects settings */ -static void gl646_wm_hp3670(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t set, +static void gl646_wm_hp3670(Genesys_Device* dev, const Genesys_Sensor& sensor, std::uint8_t set, unsigned dpi) { DBG_HELPER(dbg); @@ -1108,16 +1110,17 @@ static void gl646_wm_hp3670(Genesys_Device* dev, const Genesys_Sensor& sensor, u * @param set action to execute * @param dpi dpi to setup the AFE */ -static void gl646_set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t set, int dpi) +static void gl646_set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, std::uint8_t set, + int dpi) { DBG_HELPER_ARGS(dbg, "%s,%d", set == AFE_INIT ? "init" : set == AFE_SET ? "set" : set == AFE_POWER_SAVE ? "powersave" : "huh?", dpi); int i; - uint8_t val; + std::uint8_t val; /* Analog Device type frontend */ - uint8_t frontend_type = dev->reg.find_reg(0x04).value & REG_0x04_FESET; + std::uint8_t frontend_type = dev->reg.find_reg(0x04).value & REG_0x04_FESET; if (frontend_type == 0x02) { gl646_set_ad_fe(dev, set); return; @@ -1203,7 +1206,8 @@ static void gl646_set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint * @param dev device to set * @param set action to execute */ -void CommandSetGl646::set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t set) const +void CommandSetGl646::set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, + std::uint8_t set) const { gl646_set_fe(dev, sensor, set, dev->settings.yres); } @@ -1854,10 +1858,7 @@ void CommandSetGl646::send_gamma_table(Genesys_Device* dev, const Genesys_Sensor bits = 12; } - /* allocate temporary gamma tables: 16 bits words, 3 channels */ - std::vector gamma(size * 2 * 3); - - sanei_genesys_generate_gamma_buffer(dev, sensor, bits, size-1, size, gamma.data()); + auto gamma = generate_gamma_buffer(dev, sensor, bits, size-1, size); /* table address */ switch (dev->reg.find_reg(0x05).value >> 6) @@ -1892,7 +1893,7 @@ SensorExposure CommandSetGl646::led_calibration(Genesys_Device* dev, const Genes int val; int avg[3], avga, avge; int turn; - uint16_t expr, expg, expb; + std::uint16_t expr, expg, expb; unsigned channels = dev->settings.get_channels(); @@ -1927,7 +1928,7 @@ SensorExposure CommandSetGl646::led_calibration(Genesys_Device* dev, const Genes // colors * bytes_per_color * scan lines unsigned total_size = pixels * channels * 2 * 1; - std::vector line(total_size); + std::vector line(total_size); /* we try to get equal bright leds here: @@ -2022,13 +2023,12 @@ SensorExposure CommandSetGl646::led_calibration(Genesys_Device* dev, const Genes /** * average dark pixels of a scan */ -static int -dark_average (uint8_t * data, unsigned int pixels, unsigned int lines, - unsigned int channels, unsigned int black) +static int dark_average(std::uint8_t * data, unsigned int pixels, unsigned int lines, + unsigned int channels, unsigned int black) { unsigned int i, j, k, average, count; unsigned int avg[3]; - uint8_t val; + std::uint8_t val; /* computes average value on black margin */ for (k = 0; k < channels; k++) @@ -2110,7 +2110,7 @@ static void ad_fe_offset_calibration(Genesys_Device* dev, const Genesys_Sensor& dev->frontend.set_gain(1, 0); dev->frontend.set_gain(2, 0); - std::vector line; + std::vector line; /* scan with no move */ bottom = 1; @@ -2231,7 +2231,7 @@ void CommandSetGl646::offset_calibration(Genesys_Device* dev, const Genesys_Sens dev->frontend.set_offset(1, bottom); dev->frontend.set_offset(2, bottom); - std::vector first_line, second_line; + std::vector first_line, second_line; dev->cmd_set->init_regs_for_scan_session(dev, sensor, &dev->reg, session); simple_scan(dev, calib_sensor, session, false, first_line, "offset_first_line"); @@ -2383,7 +2383,7 @@ void CommandSetGl646::coarse_gain_calibration(Genesys_Device* dev, const Genesys unsigned pass = 0; - std::vector line; + std::vector line; /* loop until each channel raises to acceptable level */ while (((average[0] < calib_sensor.gain_white_ref) || @@ -2512,8 +2512,8 @@ void CommandSetGl646::init(Genesys_Device* dev) const DBG_INIT(); DBG_HELPER(dbg); - uint8_t val = 0; - uint32_t addr = 0xdead; + std::uint8_t val = 0; + std::uint32_t addr = 0xdead; size_t len; // to detect real power up condition, we write to REG_0x41 with pwrbit set, then read it back. @@ -2643,7 +2643,7 @@ void CommandSetGl646::init(Genesys_Device* dev) const static void simple_scan(Genesys_Device* dev, const Genesys_Sensor& sensor, const ScanSession& session, bool move, - std::vector& data, const char* scan_identifier) + std::vector& data, const char* scan_identifier) { unsigned lines = session.output_line_count; if (!dev->model->is_cis) { @@ -2695,7 +2695,7 @@ static void simple_scan(Genesys_Device* dev, const Genesys_Sensor& sensor, if (dev->model->is_cis && session.params.scan_mode == ScanColorMode::COLOR_SINGLE_PASS) { auto pixels_count = session.params.pixels; - std::vector buffer(pixels_count * 3 * bpp); + std::vector buffer(pixels_count * 3 * bpp); if (bpp == 1) { for (unsigned y = 0; y < lines; y++) { @@ -2738,7 +2738,7 @@ void CommandSetGl646::update_hardware_sensors(Genesys_Scanner* session) const { DBG_HELPER(dbg); Genesys_Device *dev = session->dev; - uint8_t value; + std::uint8_t value; // do what is needed to get a new set of events, but try to not loose any of them. gl646_gpio_read(dev->interface->get_usb_device(), &value); @@ -2858,8 +2858,8 @@ void CommandSetGl646::update_home_sensor_gpio(Genesys_Device& dev) const static void write_control(Genesys_Device* dev, const Genesys_Sensor& sensor, int resolution) { DBG_HELPER(dbg); - uint8_t control[4]; - uint32_t addr = 0xdead; + std::uint8_t control[4]; + std::uint32_t addr = 0xdead; /* 2300 does not write to 'control' */ if (dev->model->motor_id == MotorId::HP2300) { diff --git a/backend/genesys/gl646.h b/backend/genesys/gl646.h index 04e5fb2..5bbcfb2 100644 --- a/backend/genesys/gl646.h +++ b/backend/genesys/gl646.h @@ -50,7 +50,7 @@ public: Genesys_Register_Set* reg, const ScanSession& session) const override; - void set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t set) const override; + void set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, std::uint8_t set) const override; void set_powersaving(Genesys_Device* dev, int delay) const override; void save_power(Genesys_Device* dev, bool enable) const override; @@ -84,7 +84,7 @@ public: void eject_document(Genesys_Device* dev) const override; - void send_shading_data(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t* data, + void send_shading_data(Genesys_Device* dev, const Genesys_Sensor& sensor, std::uint8_t* data, int size) const override; bool has_send_shading_data() const override diff --git a/backend/genesys/gl841.cpp b/backend/genesys/gl841.cpp index 27a6a36..3b068d1 100644 --- a/backend/genesys/gl841.cpp +++ b/backend/genesys/gl841.cpp @@ -288,7 +288,7 @@ gl841_init_registers (Genesys_Device * dev) } } -static void gl841_set_lide80_fe(Genesys_Device* dev, uint8_t set) +static void gl841_set_lide80_fe(Genesys_Device* dev, std::uint8_t set) { DBG_HELPER(dbg); @@ -311,7 +311,7 @@ static void gl841_set_lide80_fe(Genesys_Device* dev, uint8_t set) } // Set values of Analog Device type frontend -static void gl841_set_ad_fe(Genesys_Device* dev, uint8_t set) +static void gl841_set_ad_fe(Genesys_Device* dev, std::uint8_t set) { DBG_HELPER(dbg); int i; @@ -361,7 +361,8 @@ static void gl841_set_ad_fe(Genesys_Device* dev, uint8_t set) } // Set values of analog frontend -void CommandSetGl841::set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t set) const +void CommandSetGl841::set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, + std::uint8_t set) const { DBG_HELPER_ARGS(dbg, "%s", set == AFE_INIT ? "init" : set == AFE_SET ? "set" : @@ -369,7 +370,7 @@ void CommandSetGl841::set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, (void) sensor; /* Analog Device type frontend */ - uint8_t frontend_type = dev->reg.find_reg(0x04).value & REG_0x04_FESET; + std::uint8_t frontend_type = dev->reg.find_reg(0x04).value & REG_0x04_FESET; if (frontend_type == 0x02) { gl841_set_ad_fe(dev, set); @@ -453,12 +454,68 @@ static void gl841_write_freq(Genesys_Device* dev, unsigned int ydpi) { DBG_HELPER(dbg); /**< fast table */ -uint8_t tdefault[] = {0x18,0x36,0x18,0x36,0x18,0x36,0x18,0x36,0x18,0x36,0x18,0x36,0x18,0x36,0x18,0x36,0x18,0x36,0x18,0x36,0x18,0x36,0x18,0x36,0x18,0x36,0x18,0x36,0x18,0x36,0x18,0x36,0x18,0xb6,0x18,0xb6,0x18,0xb6,0x18,0xb6,0x18,0xb6,0x18,0xb6,0x18,0xb6,0x18,0xb6,0x18,0xb6,0x18,0xb6,0x18,0xb6,0x18,0xb6,0x18,0xb6,0x18,0xb6,0x18,0xb6,0x18,0xb6,0x18,0xf6,0x18,0xf6,0x18,0xf6,0x18,0xf6,0x18,0xf6,0x18,0xf6,0x18,0xf6,0x18,0xf6,0x18,0xf6,0x18,0xf6,0x18,0xf6,0x18,0xf6,0x18,0xf6,0x18,0xf6,0x18,0xf6,0x18,0xf6,0x18,0x76,0x18,0x76,0x18,0x76,0x18,0x76,0x18,0x76,0x18,0x76,0x18,0x76,0x18,0x76,0x18,0x76,0x18,0x76,0x18,0x76,0x18,0x76,0x18,0x76,0x18,0x76,0x18,0x76,0x18,0x76}; -uint8_t t1200[] = {0xc7,0x31,0xc7,0x31,0xc7,0x31,0xc7,0x31,0xc7,0x31,0xc7,0x31,0xc7,0x31,0xc7,0x31,0xc0,0x11,0xc0,0x11,0xc0,0x11,0xc0,0x11,0xc0,0x11,0xc0,0x11,0xc0,0x11,0xc0,0x11,0xc7,0xb1,0xc7,0xb1,0xc7,0xb1,0xc7,0xb1,0xc7,0xb1,0xc7,0xb1,0xc7,0xb1,0xc7,0xb1,0x07,0xe0,0x07,0xe0,0x07,0xe0,0x07,0xe0,0x07,0xe0,0x07,0xe0,0x07,0xe0,0x07,0xe0,0xc7,0xf1,0xc7,0xf1,0xc7,0xf1,0xc7,0xf1,0xc7,0xf1,0xc7,0xf1,0xc7,0xf1,0xc7,0xf1,0xc0,0x51,0xc0,0x51,0xc0,0x51,0xc0,0x51,0xc0,0x51,0xc0,0x51,0xc0,0x51,0xc0,0x51,0xc7,0x71,0xc7,0x71,0xc7,0x71,0xc7,0x71,0xc7,0x71,0xc7,0x71,0xc7,0x71,0xc7,0x71,0x07,0x20,0x07,0x20,0x07,0x20,0x07,0x20,0x07,0x20,0x07,0x20,0x07,0x20,0x07,0x20}; -uint8_t t300[] = {0x08,0x32,0x08,0x32,0x08,0x32,0x08,0x32,0x08,0x32,0x08,0x32,0x08,0x32,0x08,0x32,0x00,0x13,0x00,0x13,0x00,0x13,0x00,0x13,0x00,0x13,0x00,0x13,0x00,0x13,0x00,0x13,0x08,0xb2,0x08,0xb2,0x08,0xb2,0x08,0xb2,0x08,0xb2,0x08,0xb2,0x08,0xb2,0x08,0xb2,0x0c,0xa0,0x0c,0xa0,0x0c,0xa0,0x0c,0xa0,0x0c,0xa0,0x0c,0xa0,0x0c,0xa0,0x0c,0xa0,0x08,0xf2,0x08,0xf2,0x08,0xf2,0x08,0xf2,0x08,0xf2,0x08,0xf2,0x08,0xf2,0x08,0xf2,0x00,0xd3,0x00,0xd3,0x00,0xd3,0x00,0xd3,0x00,0xd3,0x00,0xd3,0x00,0xd3,0x00,0xd3,0x08,0x72,0x08,0x72,0x08,0x72,0x08,0x72,0x08,0x72,0x08,0x72,0x08,0x72,0x08,0x72,0x0c,0x60,0x0c,0x60,0x0c,0x60,0x0c,0x60,0x0c,0x60,0x0c,0x60,0x0c,0x60,0x0c,0x60}; -uint8_t t150[] = {0x0c,0x33,0xcf,0x33,0xcf,0x33,0xcf,0x33,0xcf,0x33,0xcf,0x33,0xcf,0x33,0xcf,0x33,0x40,0x14,0x80,0x15,0x80,0x15,0x80,0x15,0x80,0x15,0x80,0x15,0x80,0x15,0x80,0x15,0x0c,0xb3,0xcf,0xb3,0xcf,0xb3,0xcf,0xb3,0xcf,0xb3,0xcf,0xb3,0xcf,0xb3,0xcf,0xb3,0x11,0xa0,0x16,0xa0,0x16,0xa0,0x16,0xa0,0x16,0xa0,0x16,0xa0,0x16,0xa0,0x16,0xa0,0x0c,0xf3,0xcf,0xf3,0xcf,0xf3,0xcf,0xf3,0xcf,0xf3,0xcf,0xf3,0xcf,0xf3,0xcf,0xf3,0x40,0xd4,0x80,0xd5,0x80,0xd5,0x80,0xd5,0x80,0xd5,0x80,0xd5,0x80,0xd5,0x80,0xd5,0x0c,0x73,0xcf,0x73,0xcf,0x73,0xcf,0x73,0xcf,0x73,0xcf,0x73,0xcf,0x73,0xcf,0x73,0x11,0x60,0x16,0x60,0x16,0x60,0x16,0x60,0x16,0x60,0x16,0x60,0x16,0x60,0x16,0x60}; - -uint8_t *table; + std::uint8_t tdefault[] = { + 0x18, 0x36, 0x18, 0x36, 0x18, 0x36, 0x18, 0x36, 0x18, 0x36, + 0x18, 0x36, 0x18, 0x36, 0x18, 0x36, 0x18, 0x36, 0x18, 0x36, + 0x18, 0x36, 0x18, 0x36, 0x18, 0x36, 0x18, 0x36, 0x18, 0x36, + 0x18, 0x36, 0x18, 0xb6, 0x18, 0xb6, 0x18, 0xb6, 0x18, 0xb6, + 0x18, 0xb6, 0x18, 0xb6, 0x18, 0xb6, 0x18, 0xb6, 0x18, 0xb6, + 0x18, 0xb6, 0x18, 0xb6, 0x18, 0xb6, 0x18, 0xb6, 0x18, 0xb6, + 0x18, 0xb6, 0x18, 0xb6, 0x18, 0xf6, 0x18, 0xf6, 0x18, 0xf6, + 0x18, 0xf6, 0x18, 0xf6, 0x18, 0xf6, 0x18, 0xf6, 0x18, 0xf6, + 0x18, 0xf6, 0x18, 0xf6, 0x18, 0xf6, 0x18, 0xf6, 0x18, 0xf6, + 0x18, 0xf6, 0x18, 0xf6, 0x18, 0xf6, 0x18, 0x76, 0x18, 0x76, + 0x18, 0x76, 0x18, 0x76, 0x18, 0x76, 0x18, 0x76, 0x18, 0x76, + 0x18, 0x76, 0x18, 0x76, 0x18, 0x76, 0x18, 0x76, 0x18, 0x76, + 0x18, 0x76, 0x18, 0x76, 0x18, 0x76, 0x18, 0x76 + }; + std::uint8_t t1200[] = { + 0xc7, 0x31, 0xc7, 0x31, 0xc7, 0x31, 0xc7, 0x31, 0xc7, 0x31, + 0xc7, 0x31, 0xc7, 0x31, 0xc7, 0x31, 0xc0, 0x11, 0xc0, 0x11, + 0xc0, 0x11, 0xc0, 0x11, 0xc0, 0x11, 0xc0, 0x11, 0xc0, 0x11, + 0xc0, 0x11, 0xc7, 0xb1, 0xc7, 0xb1, 0xc7, 0xb1, 0xc7, 0xb1, + 0xc7, 0xb1, 0xc7, 0xb1, 0xc7, 0xb1, 0xc7, 0xb1, 0x07, 0xe0, + 0x07, 0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07, 0xe0, + 0x07, 0xe0, 0x07, 0xe0, 0xc7, 0xf1, 0xc7, 0xf1, 0xc7, 0xf1, + 0xc7, 0xf1, 0xc7, 0xf1, 0xc7, 0xf1, 0xc7, 0xf1, 0xc7, 0xf1, + 0xc0, 0x51, 0xc0, 0x51, 0xc0, 0x51, 0xc0, 0x51, 0xc0, 0x51, + 0xc0, 0x51, 0xc0, 0x51, 0xc0, 0x51, 0xc7, 0x71, 0xc7, 0x71, + 0xc7, 0x71, 0xc7, 0x71, 0xc7, 0x71, 0xc7, 0x71, 0xc7, 0x71, + 0xc7, 0x71, 0x07, 0x20, 0x07, 0x20, 0x07, 0x20, 0x07, 0x20, + 0x07, 0x20, 0x07, 0x20, 0x07, 0x20, 0x07, 0x20 + }; + std::uint8_t t300[] = { + 0x08, 0x32, 0x08, 0x32, 0x08, 0x32, 0x08, 0x32, 0x08, 0x32, + 0x08, 0x32, 0x08, 0x32, 0x08, 0x32, 0x00, 0x13, 0x00, 0x13, + 0x00, 0x13, 0x00, 0x13, 0x00, 0x13, 0x00, 0x13, 0x00, 0x13, + 0x00, 0x13, 0x08, 0xb2, 0x08, 0xb2, 0x08, 0xb2, 0x08, 0xb2, + 0x08, 0xb2, 0x08, 0xb2, 0x08, 0xb2, 0x08, 0xb2, 0x0c, 0xa0, + 0x0c, 0xa0, 0x0c, 0xa0, 0x0c, 0xa0, 0x0c, 0xa0, 0x0c, 0xa0, + 0x0c, 0xa0, 0x0c, 0xa0, 0x08, 0xf2, 0x08, 0xf2, 0x08, 0xf2, + 0x08, 0xf2, 0x08, 0xf2, 0x08, 0xf2, 0x08, 0xf2, 0x08, 0xf2, + 0x00, 0xd3, 0x00, 0xd3, 0x00, 0xd3, 0x00, 0xd3, 0x00, 0xd3, + 0x00, 0xd3, 0x00, 0xd3, 0x00, 0xd3, 0x08, 0x72, 0x08, 0x72, + 0x08, 0x72, 0x08, 0x72, 0x08, 0x72, 0x08, 0x72, 0x08, 0x72, + 0x08, 0x72, 0x0c, 0x60, 0x0c, 0x60, 0x0c, 0x60, 0x0c, 0x60, + 0x0c, 0x60, 0x0c, 0x60, 0x0c, 0x60, 0x0c, 0x60 + }; + std::uint8_t t150[] = { + 0x0c, 0x33, 0xcf, 0x33, 0xcf, 0x33, 0xcf, 0x33, 0xcf, 0x33, + 0xcf, 0x33, 0xcf, 0x33, 0xcf, 0x33, 0x40, 0x14, 0x80, 0x15, + 0x80, 0x15, 0x80, 0x15, 0x80, 0x15, 0x80, 0x15, 0x80, 0x15, + 0x80, 0x15, 0x0c, 0xb3, 0xcf, 0xb3, 0xcf, 0xb3, 0xcf, 0xb3, + 0xcf, 0xb3, 0xcf, 0xb3, 0xcf, 0xb3, 0xcf, 0xb3, 0x11, 0xa0, + 0x16, 0xa0, 0x16, 0xa0, 0x16, 0xa0, 0x16, 0xa0, 0x16, 0xa0, + 0x16, 0xa0, 0x16, 0xa0, 0x0c, 0xf3, 0xcf, 0xf3, 0xcf, 0xf3, + 0xcf, 0xf3, 0xcf, 0xf3, 0xcf, 0xf3, 0xcf, 0xf3, 0xcf, 0xf3, + 0x40, 0xd4, 0x80, 0xd5, 0x80, 0xd5, 0x80, 0xd5, 0x80, 0xd5, + 0x80, 0xd5, 0x80, 0xd5, 0x80, 0xd5, 0x0c, 0x73, 0xcf, 0x73, + 0xcf, 0x73, 0xcf, 0x73, 0xcf, 0x73, 0xcf, 0x73, 0xcf, 0x73, + 0xcf, 0x73, 0x11, 0x60, 0x16, 0x60, 0x16, 0x60, 0x16, 0x60, + 0x16, 0x60, 0x16, 0x60, 0x16, 0x60, 0x16, 0x60 + }; + + std::uint8_t *table; if(dev->model->motor_id == MotorId::CANON_LIDE_80) { switch(ydpi) @@ -495,7 +552,7 @@ static void gl841_init_motor_regs_feed(Genesys_Device* dev, const Genesys_Sensor /*number of scan lines to add in a scan_lines line*/ { - std::vector table; + std::vector table; table.resize(256, 0xffff); scanner_send_slope_table(dev, sensor, 0, table); @@ -711,6 +768,7 @@ static void gl841_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens const ScanSession& session) { DBG_HELPER_ARGS(dbg, "exposure_time=%d", exposure_time); + dev->cmd_set->set_fe(dev, sensor, AFE_SET); /* gpio part.*/ @@ -920,7 +978,7 @@ dummy \ scanned lines dev->session = session; dev->total_bytes_read = 0; - dev->total_bytes_to_read = session.output_line_bytes_requested * session.params.lines; + dev->total_bytes_to_read = (size_t)session.output_line_bytes_requested * (size_t)session.params.lines; if (session.use_host_side_gray) { dev->total_bytes_to_read /= 3; } @@ -998,7 +1056,7 @@ void CommandSetGl841::save_power(Genesys_Device* dev, bool enable) const /* final state: GPIO8 disabled, GPIO9 enabled, GPIO17 disabled, GPIO18 disabled*/ - uint8_t val = dev->interface->read_register(REG_0x6D); + std::uint8_t val = dev->interface->read_register(REG_0x6D); dev->interface->write_register(REG_0x6D, val | 0x80); dev->interface->sleep_ms(1); @@ -1023,7 +1081,7 @@ void CommandSetGl841::save_power(Genesys_Device* dev, bool enable) const } if (dev->model->gpio_id == GpioId::DP685) { - uint8_t val = dev->interface->read_register(REG_0x6B); + std::uint8_t val = dev->interface->read_register(REG_0x6B); dev->interface->write_register(REG_0x6B, val & ~REG_0x6B_GPO17); dev->reg.find_reg(0x6b).value &= ~REG_0x6B_GPO17; dev->initial_regs.find_reg(0x6b).value &= ~REG_0x6B_GPO17; @@ -1041,7 +1099,7 @@ void CommandSetGl841::save_power(Genesys_Device* dev, bool enable) const /* final state: GPIO8 enabled, GPIO9 disabled, GPIO17 enabled, GPIO18 enabled*/ - uint8_t val = dev->interface->read_register(REG_0x6D); + std::uint8_t val = dev->interface->read_register(REG_0x6D); dev->interface->write_register(REG_0x6D, val | 0x80); dev->interface->sleep_ms(10); @@ -1070,7 +1128,7 @@ void CommandSetGl841::save_power(Genesys_Device* dev, bool enable) const if (dev->model->gpio_id == GpioId::DP665 || dev->model->gpio_id == GpioId::DP685) { - uint8_t val = dev->interface->read_register(REG_0x6B); + std::uint8_t val = dev->interface->read_register(REG_0x6B); dev->interface->write_register(REG_0x6B, val | REG_0x6B_GPO17); dev->reg.find_reg(0x6b).value |= REG_0x6B_GPO17; dev->initial_regs.find_reg(0x6b).value |= REG_0x6B_GPO17; @@ -1147,7 +1205,7 @@ static bool gl841_get_paper_sensor(Genesys_Device* dev) { DBG_HELPER(dbg); - uint8_t val = dev->interface->read_register(REG_0x6D); + std::uint8_t val = dev->interface->read_register(REG_0x6D); return (val & 0x1) == 0; } @@ -1365,7 +1423,7 @@ void CommandSetGl841::begin_scan(Genesys_Device* dev, const Genesys_Sensor& sens (void) sensor; // FIXME: SEQUENTIAL not really needed in this case Genesys_Register_Set local_reg(Genesys_Register_Set::SEQUENTIAL); - uint8_t val; + std::uint8_t val; if (dev->model->gpio_id == GpioId::CANON_LIDE_80) { val = dev->interface->read_register(REG_0x6B); @@ -1476,10 +1534,7 @@ void CommandSetGl841::send_gamma_table(Genesys_Device* dev, const Genesys_Sensor size = 256; - /* allocate temporary gamma tables: 16 bits words, 3 channels */ - std::vector gamma(size * 2 * 3); - - sanei_genesys_generate_gamma_buffer(dev, sensor, 16, 65535, size, gamma.data()); + auto gamma = generate_gamma_buffer(dev, sensor, 16, 65535, size); dev->interface->write_gamma(0x28, 0x0000, gamma.data(), size * 2 * 3); } @@ -1549,7 +1604,7 @@ static void ad_fe_offset_calibration(Genesys_Device* dev, const Genesys_Sensor& // FIXME: we're reading twice as much data for no reason std::size_t total_size = session.output_line_bytes * 2; - std::vector line(total_size); + std::vector line(total_size); dev->frontend.set_gain(0, 0); dev->frontend.set_gain(1, 0); @@ -2029,10 +2084,9 @@ void CommandSetGl841::init(Genesys_Device* dev) const void CommandSetGl841::update_hardware_sensors(Genesys_Scanner* s) const { DBG_HELPER(dbg); - /* do what is needed to get a new set of events, but try to not lose - any of them. - */ - uint8_t val; + + // do what is needed to get a new set of events, but try to not lose any of them. + std::uint8_t val; if (s->dev->model->gpio_id == GpioId::CANON_LIDE_35 || s->dev->model->gpio_id == GpioId::CANON_LIDE_80) @@ -2060,11 +2114,10 @@ void CommandSetGl841::update_hardware_sensors(Genesys_Scanner* s) const * for all the channels. */ void CommandSetGl841::send_shading_data(Genesys_Device* dev, const Genesys_Sensor& sensor, - uint8_t* data, int size) const + std::uint8_t* data, int size) const { DBG_HELPER_ARGS(dbg, "writing %d bytes of shading data", size); - uint32_t length, x, pixels, i; - uint8_t *ptr,*src; + std::uint32_t length, x, pixels, i; /* old method if no SHDAREA */ if ((dev->reg.find_reg(0x01).value & REG_0x01_SHDAREA) == 0) { @@ -2094,7 +2147,7 @@ void CommandSetGl841::send_shading_data(Genesys_Device* dev, const Genesys_Senso DBG(DBG_io2, "%s: using chunks of %d bytes (%d shading data pixels)\n", __func__, length, length/4); - std::vector buffer(pixels, 0); + std::vector buffer(pixels, 0); /* write actual shading data contigously * channel by channel, starting at addr 0x0000 @@ -2103,14 +2156,14 @@ void CommandSetGl841::send_shading_data(Genesys_Device* dev, const Genesys_Senso { /* copy data to work buffer and process it */ /* coefficient destination */ - ptr=buffer.data(); + std::uint8_t* ptr = buffer.data(); /* iterate on both sensor segment, data has been averaged, * so is in the right order and we only have to copy it */ for(x=0;xinterface->read_register(REG_0x04) & REG_0x04_FESET; + std::uint8_t fe_type = dev->interface->read_register(REG_0x04) & REG_0x04_FESET; if (fe_type == 2 || dev->model->model_id == ModelId::CANON_LIDE_90) { for (const auto& reg : dev->frontend.regs) { dev->interface->write_fe_register(reg.address, reg.value); @@ -568,7 +569,7 @@ void CommandSetGl842::init_regs_for_scan_session(Genesys_Device* dev, const Gene dev->session = session; dev->total_bytes_read = 0; - dev->total_bytes_to_read = session.output_line_bytes_requested * session.params.lines; + dev->total_bytes_to_read = (size_t)session.output_line_bytes_requested * (size_t)session.params.lines; } ScanSession CommandSetGl842::calculate_scan_session(const Genesys_Device* dev, @@ -841,11 +842,11 @@ void CommandSetGl842::send_gamma_table(Genesys_Device* dev, const Genesys_Sensor unsigned size = 256; - std::vector gamma(size * 2 * 3); + std::vector gamma(size * 2 * 3); - std::vector rgamma = get_gamma_table(dev, sensor, GENESYS_RED); - std::vector ggamma = get_gamma_table(dev, sensor, GENESYS_GREEN); - std::vector bgamma = get_gamma_table(dev, sensor, GENESYS_BLUE); + std::vector rgamma = get_gamma_table(dev, sensor, GENESYS_RED); + std::vector ggamma = get_gamma_table(dev, sensor, GENESYS_GREEN); + std::vector bgamma = get_gamma_table(dev, sensor, GENESYS_BLUE); // copy sensor specific's gamma tables for (unsigned i = 0; i < size; i++) { @@ -951,7 +952,7 @@ void CommandSetGl842::asic_boot(Genesys_Device* dev, bool cold) const dev->interface->write_registers(dev->reg); if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7200) { - uint8_t data[32] = { + std::uint8_t data[32] = { 0xd0, 0x38, 0x07, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -1006,7 +1007,7 @@ void CommandSetGl842::update_home_sensor_gpio(Genesys_Device& dev) const * for all the channels. */ void CommandSetGl842::send_shading_data(Genesys_Device* dev, const Genesys_Sensor& sensor, - uint8_t* data, int size) const + std::uint8_t* data, int size) const { DBG_HELPER(dbg); @@ -1032,7 +1033,7 @@ void CommandSetGl842::send_shading_data(Genesys_Device* dev, const Genesys_Senso dev->interface->record_key_value("shading_offset", std::to_string(offset)); dev->interface->record_key_value("shading_length", std::to_string(length)); - std::vector final_data(length, 0); + std::vector final_data(length, 0); unsigned count = 0; if (offset < 0) { diff --git a/backend/genesys/gl842.h b/backend/genesys/gl842.h index 3636bac..7a60819 100644 --- a/backend/genesys/gl842.h +++ b/backend/genesys/gl842.h @@ -46,7 +46,7 @@ public: Genesys_Register_Set* reg, const ScanSession& session) const override; - void set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t set) const override; + void set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, std::uint8_t set) const override; void set_powersaving(Genesys_Device* dev, int delay) const override; void save_power(Genesys_Device* dev, bool enable) const override; @@ -80,7 +80,7 @@ public: void eject_document(Genesys_Device* dev) const override; - void send_shading_data(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t* data, + void send_shading_data(Genesys_Device* dev, const Genesys_Sensor& sensor, std::uint8_t* data, int size) const override; ScanSession calculate_scan_session(const Genesys_Device* dev, diff --git a/backend/genesys/gl843.cpp b/backend/genesys/gl843.cpp index 6180bf9..c2f4b52 100644 --- a/backend/genesys/gl843.cpp +++ b/backend/genesys/gl843.cpp @@ -597,7 +597,7 @@ gl843_init_registers (Genesys_Device * dev) } if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7200I) { - uint8_t data[32] = { + std::uint8_t data[32] = { 0x8c, 0x8f, 0xc9, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -616,7 +616,8 @@ static void gl843_set_ad_fe(Genesys_Device* dev) } // Set values of analog frontend -void CommandSetGl843::set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t set) const +void CommandSetGl843::set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, + std::uint8_t set) const { DBG_HELPER_ARGS(dbg, "%s", set == AFE_INIT ? "init" : set == AFE_SET ? "set" : @@ -629,7 +630,7 @@ void CommandSetGl843::set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, // check analog frontend type // FIXME: looks like we write to that register with initial data - uint8_t fe_type = dev->interface->read_register(REG_0x04) & REG_0x04_FESET; + std::uint8_t fe_type = dev->interface->read_register(REG_0x04) & REG_0x04_FESET; if (fe_type == 2) { gl843_set_ad_fe(dev); return; @@ -1041,7 +1042,7 @@ void CommandSetGl843::init_regs_for_scan_session(Genesys_Device* dev, const Gene dev->session = session; dev->total_bytes_read = 0; - dev->total_bytes_to_read = session.output_line_bytes_requested * session.params.lines; + dev->total_bytes_to_read = (size_t)session.output_line_bytes_requested * (size_t)session.params.lines; DBG(DBG_info, "%s: total bytes to send = %zu\n", __func__, dev->total_bytes_to_read); } @@ -1120,7 +1121,7 @@ void CommandSetGl843::save_power(Genesys_Device* dev, bool enable) const // switch KV-SS080 lamp off if (dev->model->gpio_id == GpioId::KVSS080) { - uint8_t val = dev->interface->read_register(REG_0x6C); + std::uint8_t val = dev->interface->read_register(REG_0x6C); if (enable) { val &= 0xef; } else { @@ -1140,7 +1141,7 @@ static bool gl843_get_paper_sensor(Genesys_Device* dev) { DBG_HELPER(dbg); - uint8_t val = dev->interface->read_register(REG_0x6D); + std::uint8_t val = dev->interface->read_register(REG_0x6D); return (val & 0x1) == 0; } @@ -1283,7 +1284,7 @@ void CommandSetGl843::begin_scan(Genesys_Device* dev, const Genesys_Sensor& sens scanner_clear_scan_and_feed_counts(*dev); // enable scan and motor - uint8_t val = dev->interface->read_register(REG_0x01); + std::uint8_t val = dev->interface->read_register(REG_0x01); val |= REG_0x01_SCAN; dev->interface->write_register(REG_0x01, val); @@ -1436,11 +1437,11 @@ void CommandSetGl843::send_gamma_table(Genesys_Device* dev, const Genesys_Sensor size = 256; /* allocate temporary gamma tables: 16 bits words, 3 channels */ - std::vector gamma(size * 2 * 3); + std::vector gamma(size * 2 * 3); - std::vector rgamma = get_gamma_table(dev, sensor, GENESYS_RED); - std::vector ggamma = get_gamma_table(dev, sensor, GENESYS_GREEN); - std::vector bgamma = get_gamma_table(dev, sensor, GENESYS_BLUE); + std::vector rgamma = get_gamma_table(dev, sensor, GENESYS_RED); + std::vector ggamma = get_gamma_table(dev, sensor, GENESYS_GREEN); + std::vector bgamma = get_gamma_table(dev, sensor, GENESYS_BLUE); // copy sensor specific's gamma tables for (i = 0; i < size; i++) { @@ -1553,7 +1554,7 @@ static void gl843_init_gpio(Genesys_Device* dev) void CommandSetGl843::asic_boot(Genesys_Device* dev, bool cold) const { DBG_HELPER(dbg); - uint8_t val; + std::uint8_t val; if (cold) { dev->interface->write_register(0x0e, 0x01); @@ -1665,7 +1666,7 @@ void CommandSetGl843::update_hardware_sensors(Genesys_Scanner* s) const any of them. */ - uint8_t val = s->dev->interface->read_register(REG_0x6D); + std::uint8_t val = s->dev->interface->read_register(REG_0x6D); DBG(DBG_io, "%s: read buttons_gpio value=0x%x\n", __func__, (int)val); switch (s->dev->model->gpio_id) @@ -1685,8 +1686,21 @@ void CommandSetGl843::update_hardware_sensors(Genesys_Scanner* s) const s->buttons[BUTTON_TRANSP_SW].write((val & 0x40) == 0); s->buttons[BUTTON_SCAN_SW].write((val & 0x08) == 0); break; - case GpioId::CANON_4400F: case GpioId::CANON_8400F: + s->buttons[BUTTON_COPY_SW].write((val & 0x01) == 0); + s->buttons[BUTTON_SCAN_SW].write((val & 0x02) == 0); + s->buttons[BUTTON_FILE_SW].write((val & 0x04) == 0); + s->buttons[BUTTON_EMAIL_SW].write((val & 0x08) == 0); + break; + case GpioId::CANON_4400F: + s->buttons[BUTTON_COPY_SW].write((val & 0x68) == 0x28); + s->buttons[BUTTON_TRANSP_SW].write((val & 0x68) == 0x20); + s->buttons[BUTTON_EMAIL_SW].write((val & 0x68) == 0x08); + s->buttons[BUTTON_PDF1_SW].write((val & 0x68) == 0x00); + s->buttons[BUTTON_PDF2_SW].write((val & 0x68) == 0x60); + s->buttons[BUTTON_PDF3_SW].write((val & 0x68) == 0x48); + s->buttons[BUTTON_PDF4_SW].write((val & 0x68) == 0x40); + break; default: break; } @@ -1703,11 +1717,10 @@ void CommandSetGl843::update_home_sensor_gpio(Genesys_Device& dev) const * for all the channels. */ void CommandSetGl843::send_shading_data(Genesys_Device* dev, const Genesys_Sensor& sensor, - uint8_t* data, int size) const + std::uint8_t* data, int size) const { DBG_HELPER(dbg); - uint32_t final_size, i; - uint8_t *buffer; + std::uint32_t final_size, i; int count; int offset = 0; @@ -1735,10 +1748,10 @@ void CommandSetGl843::send_shading_data(Genesys_Device* dev, const Genesys_Senso /* compute and allocate size for final data */ final_size = ((length+251) / 252) * 256; DBG(DBG_io, "%s: final shading size=%04x (length=%d)\n", __func__, final_size, length); - std::vector final_data(final_size, 0); + std::vector final_data(final_size, 0); /* copy regular shading data to the expected layout */ - buffer = final_data.data(); + std::uint8_t* buffer = final_data.data(); count = 0; if (offset < 0) { count += (-offset); diff --git a/backend/genesys/gl843.h b/backend/genesys/gl843.h index ac845bd..6012c36 100644 --- a/backend/genesys/gl843.h +++ b/backend/genesys/gl843.h @@ -46,7 +46,7 @@ public: Genesys_Register_Set* reg, const ScanSession& session) const override; - void set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t set) const override; + void set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, std::uint8_t set) const override; void set_powersaving(Genesys_Device* dev, int delay) const override; void save_power(Genesys_Device* dev, bool enable) const override; @@ -80,7 +80,7 @@ public: void eject_document(Genesys_Device* dev) const override; - void send_shading_data(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t* data, + void send_shading_data(Genesys_Device* dev, const Genesys_Sensor& sensor, std::uint8_t* data, int size) const override; ScanSession calculate_scan_session(const Genesys_Device* dev, diff --git a/backend/genesys/gl846.cpp b/backend/genesys/gl846.cpp index b427376..6db312a 100644 --- a/backend/genesys/gl846.cpp +++ b/backend/genesys/gl846.cpp @@ -284,7 +284,7 @@ gl846_init_registers (Genesys_Device * dev) /** * Set register values of Analog Device type frontend * */ -static void gl846_set_adi_fe(Genesys_Device* dev, uint8_t set) +static void gl846_set_adi_fe(Genesys_Device* dev, std::uint8_t set) { DBG_HELPER(dbg); int i; @@ -314,15 +314,16 @@ static void gl846_set_adi_fe(Genesys_Device* dev, uint8_t set) } // Set values of analog frontend -void CommandSetGl846::set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t set) const +void CommandSetGl846::set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, + std::uint8_t set) const { DBG_HELPER_ARGS(dbg, "%s", set == AFE_INIT ? "init" : set == AFE_SET ? "set" : set == AFE_POWER_SAVE ? "powersave" : "huh?"); (void) sensor; - /* route to specific analog frontend setup */ - uint8_t frontend_type = dev->reg.find_reg(0x04).value & REG_0x04_FESET; + // route to specific analog frontend setup + std::uint8_t frontend_type = dev->reg.find_reg(0x04).value & REG_0x04_FESET; switch (frontend_type) { case 0x02: /* ADI FE */ gl846_set_adi_fe(dev, set); @@ -658,7 +659,7 @@ void CommandSetGl846::init_regs_for_scan_session(Genesys_Device* dev, const Gene dev->session = session; dev->total_bytes_read = 0; - dev->total_bytes_to_read = session.output_line_bytes_requested * session.params.lines; + dev->total_bytes_to_read = (size_t)session.output_line_bytes_requested * (size_t)session.params.lines; DBG(DBG_info, "%s: total bytes to send = %zu\n", __func__, dev->total_bytes_to_read); } @@ -748,7 +749,6 @@ void CommandSetGl846::begin_scan(Genesys_Device* dev, const Genesys_Sensor& sens { DBG_HELPER(dbg); (void) sensor; - uint8_t val; if (reg->state.is_xpa_on && reg->state.is_lamp_on) { dev->cmd_set->set_xpa_lamp_power(*dev, true); @@ -756,7 +756,7 @@ void CommandSetGl846::begin_scan(Genesys_Device* dev, const Genesys_Sensor& sens scanner_clear_scan_and_feed_counts(*dev); - val = dev->interface->read_register(REG_0x01); + std::uint8_t val = dev->interface->read_register(REG_0x01); val |= REG_0x01_SCAN; dev->interface->write_register(REG_0x01, val); reg->set8(REG_0x01, val); @@ -862,11 +862,10 @@ void CommandSetGl846::init_regs_for_shading(Genesys_Device* dev, const Genesys_S * for all the channels. */ void CommandSetGl846::send_shading_data(Genesys_Device* dev, const Genesys_Sensor& sensor, - uint8_t* data, int size) const + std::uint8_t* data, int size) const { DBG_HELPER_ARGS(dbg, "writing %d bytes of shading data", size); std::uint32_t addr, i; - uint8_t val,*ptr,*src; unsigned length = static_cast(size / 3); @@ -884,7 +883,7 @@ void CommandSetGl846::send_shading_data(Genesys_Device* dev, const Genesys_Senso dev->interface->record_key_value("shading_length", std::to_string(length)); dev->interface->record_key_value("shading_factor", std::to_string(sensor.shading_factor)); - std::vector buffer(pixels, 0); + std::vector buffer(pixels, 0); DBG(DBG_io2, "%s: using chunks of %d (0x%04x) bytes\n", __func__, pixels, pixels); @@ -896,12 +895,12 @@ void CommandSetGl846::send_shading_data(Genesys_Device* dev, const Genesys_Senso { /* build up actual shading data by copying the part from the full width one * to the one corresponding to SHDAREA */ - ptr = buffer.data(); + std::uint8_t* ptr = buffer.data(); /* iterate on both sensor segment */ for (unsigned x = 0; x < pixels; x += 4 * sensor.shading_factor) { // coefficient source - src = (data + offset + i * length) + x; + std::uint8_t* src = (data + offset + i * length) + x; /* coefficient copy */ ptr[0]=src[0]; @@ -913,7 +912,7 @@ void CommandSetGl846::send_shading_data(Genesys_Device* dev, const Genesys_Senso ptr+=4; } - val = dev->interface->read_register(0xd0+i); + std::uint8_t val = dev->interface->read_register(0xd0+i); addr = val * 8192 + 0x10000000; dev->interface->write_ahb(addr, pixels, buffer.data()); } @@ -961,7 +960,7 @@ static void gl846_init_memory_layout(Genesys_Device* dev) void CommandSetGl846::asic_boot(Genesys_Device* dev, bool cold) const { DBG_HELPER(dbg); - uint8_t val; + std::uint8_t val; // reset ASIC if cold boot if (cold) { @@ -1036,8 +1035,7 @@ void CommandSetGl846::update_hardware_sensors(Genesys_Scanner* s) const /* do what is needed to get a new set of events, but try to not lose any of them. */ - uint8_t val; - uint8_t scan, file, email, copy; + std::uint8_t scan, file, email, copy; switch(s->dev->model->gpio_id) { default: @@ -1046,7 +1044,7 @@ void CommandSetGl846::update_hardware_sensors(Genesys_Scanner* s) const email=0x04; copy=0x08; } - val = s->dev->interface->read_register(REG_0x6D); + std::uint8_t val = s->dev->interface->read_register(REG_0x6D); s->buttons[BUTTON_SCAN_SW].write((val & scan) == 0); s->buttons[BUTTON_FILE_SW].write((val & file) == 0); diff --git a/backend/genesys/gl846.h b/backend/genesys/gl846.h index f1d396d..c0acec4 100644 --- a/backend/genesys/gl846.h +++ b/backend/genesys/gl846.h @@ -46,7 +46,7 @@ public: Genesys_Register_Set* reg, const ScanSession& session) const override; - void set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t set) const override; + void set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, std::uint8_t set) const override; void set_powersaving(Genesys_Device* dev, int delay) const override; void save_power(Genesys_Device* dev, bool enable) const override; @@ -80,7 +80,7 @@ public: void eject_document(Genesys_Device* dev) const override; - void send_shading_data(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t* data, + void send_shading_data(Genesys_Device* dev, const Genesys_Sensor& sensor, std::uint8_t* data, int size) const override; ScanSession calculate_scan_session(const Genesys_Device* dev, diff --git a/backend/genesys/gl847.cpp b/backend/genesys/gl847.cpp index 13f9dd9..14d1fd0 100644 --- a/backend/genesys/gl847.cpp +++ b/backend/genesys/gl847.cpp @@ -51,7 +51,7 @@ gl847_init_registers (Genesys_Device * dev) { DBG_HELPER(dbg); int lide700=0; - uint8_t val; + std::uint8_t val; /* 700F class needs some different initial settings */ if (dev->model->model_id == ModelId::CANON_LIDE_700F) { @@ -233,7 +233,8 @@ gl847_init_registers (Genesys_Device * dev) } // Set values of analog frontend -void CommandSetGl847::set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t set) const +void CommandSetGl847::set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, + std::uint8_t set) const { DBG_HELPER_ARGS(dbg, "%s", set == AFE_INIT ? "init" : set == AFE_SET ? "set" : @@ -389,7 +390,7 @@ static void gl847_init_motor_regs_scan(Genesys_Device* dev, unsigned tgtime = 1 << (reg->get8(REG_0x1C) & REG_0x1C_TGTIME); // hi res motor speed GPIO - uint8_t effective = dev->interface->read_register(REG_0x6C); + std::uint8_t effective = dev->interface->read_register(REG_0x6C); // if quarter step, bipolar Vref2 @@ -624,7 +625,7 @@ void CommandSetGl847::init_regs_for_scan_session(Genesys_Device* dev, const Gene dev->session = session; dev->total_bytes_read = 0; - dev->total_bytes_to_read = session.output_line_bytes_requested * session.params.lines; + dev->total_bytes_to_read = (size_t)session.output_line_bytes_requested * (size_t)session.params.lines; DBG(DBG_info, "%s: total bytes to send = %zu\n", __func__, dev->total_bytes_to_read); } @@ -722,7 +723,7 @@ void CommandSetGl847::begin_scan(Genesys_Device* dev, const Genesys_Sensor& sens { DBG_HELPER(dbg); (void) sensor; - uint8_t val; + std::uint8_t val; if (reg->state.is_xpa_on && reg->state.is_lamp_on) { dev->cmd_set->set_xpa_lamp_power(*dev, true); @@ -879,11 +880,10 @@ void CommandSetGl847::init_regs_for_shading(Genesys_Device* dev, const Genesys_S * for all the channels. */ void CommandSetGl847::send_shading_data(Genesys_Device* dev, const Genesys_Sensor& sensor, - uint8_t* data, int size) const + std::uint8_t* data, int size) const { DBG_HELPER_ARGS(dbg, "writing %d bytes of shading data", size); std::uint32_t addr, i; - uint8_t val,*ptr,*src; unsigned length = static_cast(size / 3); @@ -901,7 +901,7 @@ void CommandSetGl847::send_shading_data(Genesys_Device* dev, const Genesys_Senso dev->interface->record_key_value("shading_length", std::to_string(length)); dev->interface->record_key_value("shading_factor", std::to_string(sensor.shading_factor)); - std::vector buffer(pixels, 0); + std::vector buffer(pixels, 0); DBG(DBG_io2, "%s: using chunks of %d (0x%04x) bytes\n", __func__, pixels, pixels); @@ -917,12 +917,12 @@ void CommandSetGl847::send_shading_data(Genesys_Device* dev, const Genesys_Senso { /* build up actual shading data by copying the part from the full width one * to the one corresponding to SHDAREA */ - ptr = buffer.data(); + std::uint8_t* ptr = buffer.data(); // iterate on both sensor segment for (unsigned x = 0; x < pixels; x += 4 * sensor.shading_factor) { - /* coefficient source */ - src = (data + offset + i * length) + x; + // coefficient source + std::uint8_t* src = (data + offset + i * length) + x; /* coefficient copy */ ptr[0]=src[0]; @@ -934,7 +934,7 @@ void CommandSetGl847::send_shading_data(Genesys_Device* dev, const Genesys_Senso ptr+=4; } - val = dev->interface->read_register(0xd0+i); + std::uint8_t val = dev->interface->read_register(0xd0+i); addr = val * 8192 + 0x10000000; dev->interface->write_ahb(addr, pixels, buffer.data()); } @@ -1030,7 +1030,7 @@ void CommandSetGl847::asic_boot(Genesys_Device* dev, bool cold) const } // test CHKVER - uint8_t val = dev->interface->read_register(REG_0x40); + std::uint8_t val = dev->interface->read_register(REG_0x40); if (val & REG_0x40_CHKVER) { val = dev->interface->read_register(0x00); DBG(DBG_info, "%s: reported version for genesys chip is 0x%02x\n", __func__, val); @@ -1089,27 +1089,46 @@ void CommandSetGl847::update_hardware_sensors(Genesys_Scanner* s) const /* do what is needed to get a new set of events, but try to not lose any of them. */ - uint8_t val; - uint8_t scan, file, email, copy; + std::uint8_t val; switch(s->dev->model->gpio_id) { case GpioId::CANON_LIDE_700F: - scan=0x04; - file=0x02; - email=0x01; - copy=0x08; + val = s->dev->interface->read_register(REG_0x6D); + DBG(DBG_io, "%s: read buttons_gpio value=0x%x\n", __func__, (int)val); + + s->buttons[BUTTON_SCAN_SW].write((val & 0x04) == 0); + s->buttons[BUTTON_FILE_SW].write((val & 0x02) == 0); + s->buttons[BUTTON_EMAIL_SW].write((val & 0x01) == 0); + s->buttons[BUTTON_COPY_SW].write((val & 0x08) == 0); + break; + + case GpioId::CANON_5600F: + val = s->dev->interface->read_register(REG_0x6D); + DBG(DBG_io, "%s: read buttons_gpio 0x6d value=0x%x\n", __func__, (int)val); + s->buttons[BUTTON_SCAN_SW].write((val & 0x02) == 0); + s->buttons[BUTTON_EMAIL_SW].write((val & 0x01) == 0); + s->buttons[BUTTON_COPY_SW].write((val & 0x08) == 0); + s->buttons[BUTTON_PDF4_SW].write((val & 0x04) == 0); + + val = s->dev->interface->read_register(REG_0xA6); + DBG(DBG_io, "%s: read buttons_gpio 0xa6 value=0x%x\n", __func__, (int)val); + s->buttons[BUTTON_PDF1_SW].write((val & 0x03) == 0x01); + s->buttons[BUTTON_PDF2_SW].write((val & 0x03) == 0x02); + + val = s->dev->interface->read_register(REG_0x6C); + DBG(DBG_io, "%s: read buttons_gpio 0x6c value=0x%x\n", __func__, (int)val); + s->buttons[BUTTON_PDF3_SW].write((val & 0x80) == 0x00); break; + default: - scan=0x01; - file=0x02; - email=0x04; - copy=0x08; - } - val = s->dev->interface->read_register(REG_0x6D); + val = s->dev->interface->read_register(REG_0x6D); + DBG(DBG_io, "%s: read buttons_gpio value=0x%x\n", __func__, (int)val); - s->buttons[BUTTON_SCAN_SW].write((val & scan) == 0); - s->buttons[BUTTON_FILE_SW].write((val & file) == 0); - s->buttons[BUTTON_EMAIL_SW].write((val & email) == 0); - s->buttons[BUTTON_COPY_SW].write((val & copy) == 0); + s->buttons[BUTTON_SCAN_SW].write((val & 0x01) == 0); + s->buttons[BUTTON_FILE_SW].write((val & 0x02) == 0); + s->buttons[BUTTON_EMAIL_SW].write((val & 0x04) == 0); + s->buttons[BUTTON_COPY_SW].write((val & 0x08) == 0); + break; + } } void CommandSetGl847::update_home_sensor_gpio(Genesys_Device& dev) const diff --git a/backend/genesys/gl847.h b/backend/genesys/gl847.h index 4b98b7a..68bf553 100644 --- a/backend/genesys/gl847.h +++ b/backend/genesys/gl847.h @@ -46,7 +46,7 @@ public: Genesys_Register_Set* reg, const ScanSession& session) const override; - void set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t set) const override; + void set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, std::uint8_t set) const override; void set_powersaving(Genesys_Device* dev, int delay) const override; void save_power(Genesys_Device* dev, bool enable) const override; @@ -80,7 +80,7 @@ public: void eject_document(Genesys_Device* dev) const override; - void send_shading_data(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t* data, + void send_shading_data(Genesys_Device* dev, const Genesys_Sensor& sensor, std::uint8_t* data, int size) const override; ScanSession calculate_scan_session(const Genesys_Device* dev, diff --git a/backend/genesys/image.h b/backend/genesys/image.h index 07d3be3..80797ed 100644 --- a/backend/genesys/image.h +++ b/backend/genesys/image.h @@ -15,7 +15,7 @@ General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see .s + along with this program. If not, see . */ #ifndef BACKEND_GENESYS_IMAGE_H diff --git a/backend/genesys/image_pipeline.cpp b/backend/genesys/image_pipeline.cpp index f53680f..8dae0c5 100644 --- a/backend/genesys/image_pipeline.cpp +++ b/backend/genesys/image_pipeline.cpp @@ -173,7 +173,7 @@ ImagePipelineNodeDesegment::ImagePipelineNodeDesegment(ImagePipelineNode& source std::iota(segment_order_.begin(), segment_order_.end(), 0); } -bool ImagePipelineNodeDesegment::get_next_row_data(uint8_t* out_data) +bool ImagePipelineNodeDesegment::get_next_row_data(std::uint8_t* out_data) { bool got_data = true; diff --git a/backend/genesys/image_pixel.h b/backend/genesys/image_pixel.h index e414cfb..4f487ea 100644 --- a/backend/genesys/image_pixel.h +++ b/backend/genesys/image_pixel.h @@ -15,7 +15,7 @@ General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see .s + along with this program. If not, see . */ #ifndef BACKEND_GENESYS_IMAGE_PIXEL_H diff --git a/backend/genesys/low.cpp b/backend/genesys/low.cpp index a6da2c1..3ffc24a 100644 --- a/backend/genesys/low.cpp +++ b/backend/genesys/low.cpp @@ -106,7 +106,7 @@ unsigned sanei_genesys_get_bulk_max_size(AsicType asic_type) } // Set address for writing data -void sanei_genesys_set_buffer_address(Genesys_Device* dev, uint32_t addr) +void sanei_genesys_set_buffer_address(Genesys_Device* dev, std::uint32_t addr) { DBG_HELPER(dbg); @@ -356,12 +356,12 @@ void wait_until_has_valid_words(Genesys_Device* dev) } // Read data (e.g scanned image) from scan buffer -void sanei_genesys_read_data_from_scanner(Genesys_Device* dev, uint8_t* data, size_t size) +void sanei_genesys_read_data_from_scanner(Genesys_Device* dev, std::uint8_t* data, size_t size) { DBG_HELPER_ARGS(dbg, "size = %zu bytes", size); - if (size & 1) - DBG(DBG_info, "WARNING %s: odd number of bytes\n", __func__); + if (size & 1) + DBG(DBG_info, "WARNING %s: odd number of bytes\n", __func__); wait_until_has_valid_words(dev); @@ -565,7 +565,7 @@ void sanei_genesys_read_feed_steps(Genesys_Device* dev, unsigned int* steps) void sanei_genesys_set_lamp_power(Genesys_Device* dev, const Genesys_Sensor& sensor, Genesys_Register_Set& regs, bool set) { - static const uint8_t REG_0x03_LAMPPWR = 0x10; + static const std::uint8_t REG_0x03_LAMPPWR = 0x10; if (set) { regs.find_reg(0x03).value |= REG_0x03_LAMPPWR; @@ -606,7 +606,7 @@ void sanei_genesys_set_lamp_power(Genesys_Device* dev, const Genesys_Sensor& sen void sanei_genesys_set_motor_power(Genesys_Register_Set& regs, bool set) { - static const uint8_t REG_0x02_MTRPWR = 0x10; + static const std::uint8_t REG_0x02_MTRPWR = 0x10; if (set) { regs.find_reg(0x02).value |= REG_0x02_MTRPWR; @@ -635,13 +635,13 @@ bool should_enable_gamma(const ScanSession& session, const Genesys_Sensor& senso return true; } -std::vector get_gamma_table(Genesys_Device* dev, const Genesys_Sensor& sensor, - int color) +std::vector get_gamma_table(Genesys_Device* dev, const Genesys_Sensor& sensor, + int color) { if (!dev->gamma_override_tables[color].empty()) { return dev->gamma_override_tables[color]; } else { - std::vector ret; + std::vector ret; sanei_genesys_create_default_gamma_table(dev, ret, sensor.gamma[color]); return ret; } @@ -654,23 +654,38 @@ std::vector get_gamma_table(Genesys_Device* dev, const Genesys_Sensor& * @param bits number of bits used by gamma * @param max value for gamma * @param size of the gamma table - * @param gamma allocated gamma buffer to fill */ -void sanei_genesys_generate_gamma_buffer(Genesys_Device* dev, +std::vector generate_gamma_buffer(Genesys_Device* dev, const Genesys_Sensor& sensor, - int bits, - int max, - int size, - uint8_t* gamma) + int bits, int max, int size) { DBG_HELPER(dbg); - std::vector rgamma = get_gamma_table(dev, sensor, GENESYS_RED); - std::vector ggamma = get_gamma_table(dev, sensor, GENESYS_GREEN); - std::vector bgamma = get_gamma_table(dev, sensor, GENESYS_BLUE); + + // the gamma tables are 16 bits words and contain 3 channels + std::vector gamma_buf(size * 2 * 3); + + std::vector rgamma = get_gamma_table(dev, sensor, GENESYS_RED); + std::vector ggamma = get_gamma_table(dev, sensor, GENESYS_GREEN); + std::vector bgamma = get_gamma_table(dev, sensor, GENESYS_BLUE); + + auto get_gamma_value = [](const std::vector& array, + std::size_t index) -> std::uint16_t + { + if (index < array.size()) + return array[index]; + return 0xffff; + }; + + auto set_gamma_buf_value = [](std::vector& array, std::size_t pos, + std::uint16_t value) + { + array[pos * 2 + 0] = value & 0xff; + array[pos * 2 + 1] = (value >> 8) & 0xff; + }; if(dev->settings.contrast!=0 || dev->settings.brightness!=0) { - std::vector lut(65536); + std::vector lut(65536); sanei_genesys_load_lut(reinterpret_cast(lut.data()), bits, bits, @@ -680,39 +695,21 @@ void sanei_genesys_generate_gamma_buffer(Genesys_Device* dev, dev->settings.brightness); for (int i = 0; i < size; i++) { - uint16_t value=rgamma[i]; - value=lut[value]; - gamma[i * 2 + size * 0 + 0] = value & 0xff; - gamma[i * 2 + size * 0 + 1] = (value >> 8) & 0xff; - - value=ggamma[i]; - value=lut[value]; - gamma[i * 2 + size * 2 + 0] = value & 0xff; - gamma[i * 2 + size * 2 + 1] = (value >> 8) & 0xff; - - value=bgamma[i]; - value=lut[value]; - gamma[i * 2 + size * 4 + 0] = value & 0xff; - gamma[i * 2 + size * 4 + 1] = (value >> 8) & 0xff; + set_gamma_buf_value(gamma_buf, i + size * 0, lut[get_gamma_value(rgamma, i)]); + set_gamma_buf_value(gamma_buf, i + size * 1, lut[get_gamma_value(ggamma, i)]); + set_gamma_buf_value(gamma_buf, i + size * 2, lut[get_gamma_value(bgamma, i)]); } } else { for (int i = 0; i < size; i++) { - uint16_t value=rgamma[i]; - gamma[i * 2 + size * 0 + 0] = value & 0xff; - gamma[i * 2 + size * 0 + 1] = (value >> 8) & 0xff; - - value=ggamma[i]; - gamma[i * 2 + size * 2 + 0] = value & 0xff; - gamma[i * 2 + size * 2 + 1] = (value >> 8) & 0xff; - - value=bgamma[i]; - gamma[i * 2 + size * 4 + 0] = value & 0xff; - gamma[i * 2 + size * 4 + 1] = (value >> 8) & 0xff; + set_gamma_buf_value(gamma_buf, i + size * 0, get_gamma_value(rgamma, i)); + set_gamma_buf_value(gamma_buf, i + size * 1, get_gamma_value(ggamma, i)); + set_gamma_buf_value(gamma_buf, i + size * 2, get_gamma_value(bgamma, i)); } } + return gamma_buf; } @@ -730,15 +727,12 @@ void sanei_genesys_send_gamma_table(Genesys_Device* dev, const Genesys_Sensor& s size = 256 + 1; - /* allocate temporary gamma tables: 16 bits words, 3 channels */ - std::vector gamma(size * 2 * 3, 255); - - sanei_genesys_generate_gamma_buffer(dev, sensor, 16, 65535, size, gamma.data()); + auto gamma = generate_gamma_buffer(dev, sensor, 16, 65535, size); // loop sending gamma tables NOTE: 0x01000000 not 0x10000000 for (i = 0; i < 3; i++) { // clear corresponding GMM_N bit - uint8_t val = dev->interface->read_register(0xbd); + std::uint8_t val = dev->interface->read_register(0xbd); val &= ~(0x01 << i); dev->interface->write_register(0xbd, val); @@ -1410,7 +1404,7 @@ void sanei_genesys_asic_init(Genesys_Device* dev) { DBG_HELPER(dbg); - uint8_t val; + std::uint8_t val; bool cold = true; // URB 16 control 0xc0 0x0c 0x8e 0x0b len 1 read 0x00 */ @@ -1507,13 +1501,13 @@ void scanner_start_action(Genesys_Device& dev, bool start_motor) void sanei_genesys_set_dpihw(Genesys_Register_Set& regs, unsigned dpihw) { // same across GL646, GL841, GL843, GL846, GL847, GL124 - const uint8_t REG_0x05_DPIHW_MASK = 0xc0; - const uint8_t REG_0x05_DPIHW_600 = 0x00; - const uint8_t REG_0x05_DPIHW_1200 = 0x40; - const uint8_t REG_0x05_DPIHW_2400 = 0x80; - const uint8_t REG_0x05_DPIHW_4800 = 0xc0; + const std::uint8_t REG_0x05_DPIHW_MASK = 0xc0; + const std::uint8_t REG_0x05_DPIHW_600 = 0x00; + const std::uint8_t REG_0x05_DPIHW_1200 = 0x40; + const std::uint8_t REG_0x05_DPIHW_2400 = 0x80; + const std::uint8_t REG_0x05_DPIHW_4800 = 0xc0; - uint8_t dpihw_setting; + std::uint8_t dpihw_setting; switch (dpihw) { case 600: dpihw_setting = REG_0x05_DPIHW_600; @@ -1925,8 +1919,8 @@ void sanei_genesys_load_lut(unsigned char* lut, double shift, rise; int max_in_val = (1 << in_bits) - 1; int max_out_val = (1 << out_bits) - 1; - uint8_t *lut_p8 = lut; - uint16_t* lut_p16 = reinterpret_cast(lut); + std::uint8_t* lut_p8 = lut; + std::uint16_t* lut_p16 = reinterpret_cast(lut); /* slope is converted to rise per unit run: * first [-127,127] to [-.999,.999] diff --git a/backend/genesys/low.h b/backend/genesys/low.h index b0d23fe..1b96cc5 100644 --- a/backend/genesys/low.h +++ b/backend/genesys/low.h @@ -95,7 +95,11 @@ #define GENESYS_HAS_POWER_SW (1 << 6) /**< scanner has power button */ #define GENESYS_HAS_CALIBRATE (1 << 7) /**< scanner has 'calibrate' software button to start calibration */ #define GENESYS_HAS_EXTRA_SW (1 << 8) /**< scanner has extra function button */ -#define GENESYS_HAS_TRANSP_SW (1 << 9) /**< scanner has TRANSPARCY/SCAN_FILM button */ +#define GENESYS_HAS_TRANSP_SW (1 << 9) /**< scanner has TRANSPARENCY/SCAN_FILM button */ +#define GENESYS_HAS_PDF1_SW (1 << 10) /**< scanner has special PDF button 1 */ +#define GENESYS_HAS_PDF2_SW (1 << 11) /**< scanner has special PDF button 2 */ +#define GENESYS_HAS_PDF3_SW (1 << 12) /**< scanner has special PDF button 3 */ +#define GENESYS_HAS_PDF4_SW (1 << 13) /**< scanner has special PDF button 4 */ /* USB control message values */ #define REQUEST_TYPE_IN (USB_TYPE_VENDOR | USB_DIR_IN) @@ -203,8 +207,8 @@ void scanner_register_rw_set_bits(Genesys_Device& dev, std::uint16_t address, st void scanner_register_rw_bits(Genesys_Device& dev, std::uint16_t address, std::uint8_t value, std::uint8_t mask); -extern void sanei_genesys_write_ahb(Genesys_Device* dev, uint32_t addr, uint32_t size, - uint8_t* data); +void sanei_genesys_write_ahb(Genesys_Device* dev, std::uint32_t addr, std::uint32_t size, + std::uint8_t* data); extern void sanei_genesys_init_structs (Genesys_Device * dev); @@ -251,14 +255,14 @@ bool should_enable_gamma(const ScanSession& session, const Genesys_Sensor& senso i.e. the number written to REG_FWDSTEP. */ void sanei_genesys_calculate_zmod(bool two_table, - uint32_t exposure_time, - const std::vector& slope_table, + std::uint32_t exposure_time, + const std::vector& slope_table, unsigned acceleration_steps, unsigned move_steps, unsigned buffer_acceleration_steps, - uint32_t* out_z1, uint32_t* out_z2); + std::uint32_t* out_z1, std::uint32_t* out_z2); -extern void sanei_genesys_set_buffer_address(Genesys_Device* dev, uint32_t addr); +extern void sanei_genesys_set_buffer_address(Genesys_Device* dev, std::uint32_t addr); unsigned sanei_genesys_get_bulk_max_size(AsicType asic_type); @@ -266,10 +270,10 @@ SANE_Int sanei_genesys_exposure_time2(Genesys_Device* dev, const MotorProfile& p int endpixel, int led_exposure); void sanei_genesys_create_default_gamma_table(Genesys_Device* dev, - std::vector& gamma_table, float gamma); + std::vector& gamma_table, float gamma); -std::vector get_gamma_table(Genesys_Device* dev, const Genesys_Sensor& sensor, - int color); +std::vector get_gamma_table(Genesys_Device* dev, const Genesys_Sensor& sensor, + int color); void sanei_genesys_send_gamma_table(Genesys_Device* dev, const Genesys_Sensor& sensor); @@ -307,14 +311,14 @@ SensorExposure scanner_led_calibration(Genesys_Device& dev, const Genesys_Sensor void scanner_clear_scan_and_feed_counts(Genesys_Device& dev); void scanner_send_slope_table(Genesys_Device* dev, const Genesys_Sensor& sensor, unsigned table_nr, - const std::vector& slope_table); + const std::vector& slope_table); extern void sanei_genesys_write_file(const char* filename, const std::uint8_t* data, std::size_t length); 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); +void sanei_genesys_read_data_from_scanner(Genesys_Device* dev, std::uint8_t* data, size_t size); Image read_unshuffled_image_from_scanner(Genesys_Device* dev, const ScanSession& session, std::size_t total_bytes); @@ -392,12 +396,9 @@ extern void sanei_genesys_load_lut(unsigned char* lut, int out_min, int out_max, int slope, int offset); -extern void sanei_genesys_generate_gamma_buffer(Genesys_Device* dev, - const Genesys_Sensor& sensor, - int bits, - int max, - int size, - uint8_t* gamma); +std::vector generate_gamma_buffer(Genesys_Device* dev, + const Genesys_Sensor& sensor, + int bits, int max, int size); unsigned session_adjust_output_pixels(unsigned output_pixels, const Genesys_Device& dev, const Genesys_Sensor& sensor, diff --git a/backend/genesys/scanner_interface_usb.cpp b/backend/genesys/scanner_interface_usb.cpp index da8823b..542d4ff 100644 --- a/backend/genesys/scanner_interface_usb.cpp +++ b/backend/genesys/scanner_interface_usb.cpp @@ -126,8 +126,8 @@ void ScannerInterfaceUsb::write_registers(const Genesys_Register_Set& regs) if (dev_->model->asic_type == AsicType::GL646 || dev_->model->asic_type == AsicType::GL841) { - uint8_t outdata[8]; - std::vector buffer; + std::uint8_t outdata[8]; + std::vector buffer; buffer.reserve(regs.size() * 2); /* copy registers and values in data buffer */ @@ -185,7 +185,7 @@ static void bulk_read_data_send_header(UsbDevice& usb_dev, AsicType asic_type, s { DBG_HELPER(dbg); - uint8_t outdata[8]; + std::uint8_t outdata[8]; if (asic_type == AsicType::GL124 || asic_type == AsicType::GL845 || asic_type == AsicType::GL846 || diff --git a/backend/genesys/serialize.cpp b/backend/genesys/serialize.cpp deleted file mode 100644 index e69de29..0000000 diff --git a/backend/genesys/serialize.h b/backend/genesys/serialize.h index ed67ea3..5040ed0 100644 --- a/backend/genesys/serialize.h +++ b/backend/genesys/serialize.h @@ -15,7 +15,7 @@ General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see .s + along with this program. If not, see . */ #ifndef BACKEND_GENESYS_SERIALIZE_H diff --git a/backend/genesys/tables_model.cpp b/backend/genesys/tables_model.cpp index d139334..6d02db8 100644 --- a/backend/genesys/tables_model.cpp +++ b/backend/genesys/tables_model.cpp @@ -447,7 +447,9 @@ void genesys_init_usb_device_tables() ModelFlag::SHADING_REPARK | ModelFlag::UTA_NO_SECONDARY_MOTOR; - model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_FILE_SW | GENESYS_HAS_COPY_SW; + model.buttons = GENESYS_HAS_TRANSP_SW | GENESYS_HAS_EMAIL_SW + | GENESYS_HAS_COPY_SW | GENESYS_HAS_PDF1_SW | GENESYS_HAS_PDF2_SW + | GENESYS_HAS_PDF3_SW | GENESYS_HAS_PDF4_SW; model.search_lines = 100; s_usb_devices->emplace_back(0x04a9, 0x2228, model); @@ -517,7 +519,7 @@ void genesys_init_usb_device_tables() ModelFlag::DARK_CALIBRATION | ModelFlag::CUSTOM_GAMMA | ModelFlag::SHADING_REPARK; - model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_FILE_SW | GENESYS_HAS_COPY_SW; + model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_FILE_SW | GENESYS_HAS_COPY_SW | GENESYS_HAS_EMAIL_SW; model.search_lines = 100; s_usb_devices->emplace_back(0x04a9, 0x221e, model); @@ -927,7 +929,10 @@ void genesys_init_usb_device_tables() model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_COPY_SW | GENESYS_HAS_EMAIL_SW | - GENESYS_HAS_FILE_SW; + GENESYS_HAS_PDF1_SW | + GENESYS_HAS_PDF2_SW | + GENESYS_HAS_PDF3_SW | + GENESYS_HAS_PDF4_SW; model.search_lines = 400; s_usb_devices->emplace_back(0x04a9, 0x1906, model); diff --git a/backend/genesys/test_scanner_interface.cpp b/backend/genesys/test_scanner_interface.cpp index 412176e..ef7cdbb 100644 --- a/backend/genesys/test_scanner_interface.cpp +++ b/backend/genesys/test_scanner_interface.cpp @@ -26,8 +26,8 @@ namespace genesys { -TestScannerInterface::TestScannerInterface(Genesys_Device* dev, uint16_t vendor_id, - uint16_t product_id, uint16_t bcd_device) : +TestScannerInterface::TestScannerInterface(Genesys_Device* dev, std::uint16_t vendor_id, + std::uint16_t product_id, std::uint16_t bcd_device) : dev_{dev}, usb_dev_{vendor_id, product_id, bcd_device} { -- cgit v1.2.3