Merge branch 'release-1.0.33-backports' into 'release-1.0.33'

[1.0.33] Miscellaneous backports

See merge request sane-project/backends!668
release-1.1.x
Povilas Kanapickas 2021-12-25 02:23:57 +00:00
commit a38919bf7f
24 zmienionych plików z 1010 dodań i 113 usunięć

Plik diff jest za duży Load Diff

Wyświetl plik

@ -184,6 +184,8 @@ SANE_Word sanei_epson_usb_product_ids[] = {
0x113e, /* XP-452 455 Series */
0x1141, /* L3100 Series */
0x1142, /* L3110 Series */
0x1188, /* L3210 Series */
0x1189, /* L3200 Series */
0 /* last entry - this is used for devices that are specified
in the config file as "usb <vendor> <product>" */
};

Wyświetl plik

@ -1255,6 +1255,9 @@ const epsonds_profile_map epsonds_models_predefined[] = {
{0x114F, "PID 114F","M3140 Series", 7},
{0x1143, "PID 1143","L3150 Series", 7},
{0x1143, "PID 1143","ET-2710 Series", 7},
{0x118A, "PID 118A","ET-2810 Series", 7},
{0x118A, "PID 118A","L3250 Series", 7},
{0x119B, "PID 119B","XP-2150 Series", 7},
{0x00, "","", 0x00 }
};

Wyświetl plik

@ -433,6 +433,7 @@ attach_one_config(SANEI_Config __sane_unused__ *config, const char *line,
SANE_Status status;
static ESCL_Device *escl_device = NULL;
if (*line == '#') return SANE_STATUS_GOOD;
if (!strncmp(line, "pdfblacklist", 12)) return SANE_STATUS_GOOD;
if (strncmp(line, "device", 6) == 0) {
char *name_str = NULL;
char *opt_model = NULL;

Wyświetl plik

@ -554,6 +554,8 @@ escl_capabilities(ESCL_Device *device, char *blacklist, SANE_Status *status)
curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)var);
curl_easy_setopt(curl_handle, CURLOPT_HEADERFUNCTION, header_callback);
curl_easy_setopt(curl_handle, CURLOPT_HEADERDATA, (void *)header);
curl_easy_setopt(curl_handle, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(curl_handle, CURLOPT_MAXREDIRS, 3L);
CURLcode res = curl_easy_perform(curl_handle);
if (res == CURLE_OK)
DBG( 1, "Create NewJob : the scanner header responded : [%s]\n", header->memory);

Wyświetl plik

@ -277,6 +277,8 @@ wake_up_device:
curl_easy_setopt(curl_handle, CURLOPT_POSTFIELDSIZE, upload->size);
curl_easy_setopt(curl_handle, CURLOPT_HEADERFUNCTION, download_callback);
curl_easy_setopt(curl_handle, CURLOPT_HEADERDATA, (void *)download);
curl_easy_setopt(curl_handle, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(curl_handle, CURLOPT_MAXREDIRS, 3L);
CURLcode res = curl_easy_perform(curl_handle);
if (res != CURLE_OK) {
DBG( 1, "Create NewJob : the scanner responded incorrectly: %s\n", curl_easy_strerror(res));

Wyświetl plik

@ -62,6 +62,8 @@ CURL_CALL:
scan_jobs, scanJob, result, scanner_start);
escl_curl_url(curl_handle, device, scan_cmd);
curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, write_callback);
curl_easy_setopt(curl_handle, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(curl_handle, CURLOPT_MAXREDIRS, 3L);
if (curl_easy_perform(curl_handle) == CURLE_OK) {
curl_easy_getinfo(curl_handle, CURLINFO_RESPONSE_CODE, &answer);
i++;

Wyświetl plik

@ -74,6 +74,8 @@ escl_scan(capabilities_t *scanner, const ESCL_Device *device, char *scanJob, cha
scan_jobs, scanJob, result, scanner_start);
escl_curl_url(curl_handle, device, scan_cmd);
curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, write_callback);
curl_easy_setopt(curl_handle, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(curl_handle, CURLOPT_MAXREDIRS, 3L);
if (scanner->tmp)
fclose(scanner->tmp);
scanner->tmp = tmpfile();

Wyświetl plik

@ -220,6 +220,8 @@ reload:
escl_curl_url(curl_handle, device, scanner_status);
curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, memory_callback_s);
curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)var);
curl_easy_setopt(curl_handle, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(curl_handle, CURLOPT_MAXREDIRS, 3L);
CURLcode res = curl_easy_perform(curl_handle);
if (res != CURLE_OK) {
DBG( 1, "The scanner didn't respond: %s\n", curl_easy_strerror(res));

Wyświetl plik

@ -279,6 +279,7 @@ std::ostream& operator<<(std::ostream& out, GpioId id)
case GpioId::CANON_8600F: out << "CANON_8600F"; break;
case GpioId::DP665: out << "DP665"; break;
case GpioId::DP685: out << "DP685"; break;
case GpioId::G4010: out << "G4010"; break;
case GpioId::G4050: out << "G4050"; break;
case GpioId::HP2300: out << "HP2300"; break;
case GpioId::HP2400: out << "HP2400"; break;

Wyświetl plik

@ -372,6 +372,7 @@ enum class GpioId : unsigned
DP665,
DP685,
G4050,
G4010,
HP2300,
HP2400,
HP3670,

Wyświetl plik

@ -4992,16 +4992,28 @@ 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;
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;
}
/* calibration needed */
s->opt[OPT_NEED_CALIBRATION_SW].name = "need-calibration";
@ -5821,6 +5833,7 @@ static void get_option_value(Genesys_Scanner* s, int option, void* val)
case OPT_OCR_SW:
case OPT_POWER_SW:
case OPT_EXTRA_SW:
case OPT_TRANSP_SW:
s->dev->cmd_set->update_hardware_sensors(s);
*reinterpret_cast<SANE_Bool*>(val) = s->buttons[genesys_option_to_button(option)].read();
break;
@ -6456,6 +6469,7 @@ GenesysButtonName genesys_option_to_button(int option)
case OPT_OCR_SW: return BUTTON_OCR_SW;
case OPT_POWER_SW: return BUTTON_POWER_SW;
case OPT_EXTRA_SW: return BUTTON_EXTRA_SW;
case OPT_TRANSP_SW: return BUTTON_TRANSP_SW;
default: throw std::runtime_error("Unknown option to convert to button index");
}
}

Wyświetl plik

@ -124,6 +124,7 @@ enum Genesys_Option
OPT_OCR_SW,
OPT_POWER_SW,
OPT_EXTRA_SW,
OPT_TRANSP_SW,
OPT_NEED_CALIBRATION_SW,
OPT_BUTTON_GROUP,
OPT_CALIBRATE,
@ -144,6 +145,7 @@ enum GenesysButtonName : unsigned {
BUTTON_OCR_SW,
BUTTON_POWER_SW,
BUTTON_EXTRA_SW,
BUTTON_TRANSP_SW,
NUM_BUTTONS
};

Wyświetl plik

@ -113,7 +113,7 @@ gl124_init_registers (Genesys_Device * dev)
dev->reg.init_reg(0x09, 0x00);
dev->reg.init_reg(0x0a, 0xc0);
dev->reg.init_reg(0x0b, 0x2a);
dev->reg.init_reg(0x0c, 0x12);
dev->reg.init_reg(0x0c, 0x12); // SENSOR_DEF
dev->reg.init_reg(0x11, 0x00);
dev->reg.init_reg(0x12, 0x00);
dev->reg.init_reg(0x13, 0x0f);

Wyświetl plik

@ -1240,6 +1240,7 @@ void CommandSetGl843::begin_scan(Genesys_Device* dev, const Genesys_Sensor& sens
dev->interface->write_register(0x7e, 0x04);
break;
case GpioId::G4050:
case GpioId::G4010:
dev->interface->write_register(REG_0xA7, 0xfe);
dev->interface->write_register(REG_0xA8, 0x3e);
dev->interface->write_register(REG_0xA9, 0x06);
@ -1680,6 +1681,7 @@ void CommandSetGl843::update_hardware_sensors(Genesys_Scanner* s) const
*/
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)
{
@ -1692,6 +1694,12 @@ void CommandSetGl843::update_hardware_sensors(Genesys_Scanner* s) const
s->buttons[BUTTON_EMAIL_SW].write((val & 0x04) == 0);
s->buttons[BUTTON_COPY_SW].write((val & 0x08) == 0);
break;
case GpioId::G4010:
s->buttons[BUTTON_FILE_SW].write((val & 0x01) == 0);
s->buttons[BUTTON_COPY_SW].write((val & 0x04) == 0);
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:
default:

Wyświetl plik

@ -712,7 +712,7 @@ ImagePipelineNodeCalibrate::ImagePipelineNodeCalibrate(ImagePipelineNode& source
const std::vector<std::uint16_t>& bottom,
const std::vector<std::uint16_t>& top,
std::size_t x_start) :
source_{source}
source_(source)
{
std::size_t size = 0;
if (bottom.size() >= x_start && top.size() >= x_start) {

Wyświetl plik

@ -116,6 +116,7 @@
#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 */
/* USB control message values */
#define REQUEST_TYPE_IN (USB_TYPE_VENDOR | USB_DIR_IN)

Wyświetl plik

@ -257,6 +257,21 @@ void genesys_init_gpo_tables()
s_gpo->push_back(gpo);
gpo = Genesys_Gpo();
gpo.id = GpioId::G4010;
gpo.regs = {
{ 0x6c, 0x20 },
{ 0x6d, 0x00 },
{ 0x6e, 0xfc },
{ 0x6f, 0x00 },
{ 0xa6, 0x08 },
{ 0xa7, 0x1e },
{ 0xa8, 0x3e },
{ 0xa9, 0x06 },
};
s_gpo->push_back(gpo);
gpo = Genesys_Gpo();
gpo.id = GpioId::HP_N6310;
gpo.regs = {

Wyświetl plik

@ -342,12 +342,12 @@ void genesys_init_usb_device_tables()
model.is_sheetfed = false;
model.sensor_id = SensorId::CCD_G4050;
model.adc_id = AdcId::G4050;
model.gpio_id = GpioId::G4050;
model.gpio_id = GpioId::G4010;
model.motor_id = MotorId::G4050;
model.flags = ModelFlag::WARMUP |
ModelFlag::DARK_CALIBRATION |
ModelFlag::CUSTOM_GAMMA;
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_TRANSP_SW;
model.search_lines = 100;
s_usb_devices->emplace_back(0x03f0, 0x4505, model);

Wyświetl plik

@ -2635,6 +2635,13 @@ void genesys_init_sensor_tables()
sensor.shading_factor = setting.shading_factor;
sensor.segment_order = setting.segment_order;
sensor.custom_regs = setting.custom_regs;
sensor.channels = { 1 };
sensor.custom_regs.set_value(0x0c, 0x10);
s_sensors->push_back(sensor);
sensor.channels = { 3 };
sensor.custom_regs.set_value(0x0c, 0x12);
s_sensors->push_back(sensor);
}
}
@ -2805,6 +2812,13 @@ void genesys_init_sensor_tables()
sensor.shading_factor = setting.shading_factor;
sensor.segment_order = setting.segment_order;
sensor.custom_regs = setting.custom_regs;
sensor.channels = { 1 };
sensor.custom_regs.set_value(0x0c, 0x10);
s_sensors->push_back(sensor);
sensor.channels = { 3 };
sensor.custom_regs.set_value(0x0c, 0x12);
s_sensors->push_back(sensor);
}
}
@ -3000,6 +3014,13 @@ void genesys_init_sensor_tables()
sensor.shading_factor = setting.shading_factor;
sensor.segment_order = setting.segment_order;
sensor.custom_regs = setting.custom_regs;
sensor.channels = { 1 };
sensor.custom_regs.set_value(0x0c, 0x10);
s_sensors->push_back(sensor);
sensor.channels = { 3 };
sensor.custom_regs.set_value(0x0c, 0x12);
s_sensors->push_back(sensor);
}
}
@ -3196,6 +3217,13 @@ void genesys_init_sensor_tables()
sensor.shading_factor = setting.shading_factor;
sensor.segment_order = setting.segment_order;
sensor.custom_regs = setting.custom_regs;
sensor.channels = { 1 };
sensor.custom_regs.set_value(0x0c, 0x10);
s_sensors->push_back(sensor);
sensor.channels = { 3 };
sensor.custom_regs.set_value(0x0c, 0x12);
s_sensors->push_back(sensor);
}
}

Wyświetl plik

@ -226,7 +226,7 @@ class BasicStreamStateSaver
{
public:
explicit BasicStreamStateSaver(std::basic_ios<Char, Traits>& stream) :
stream_{stream}
stream_(stream)
{
flags_ = stream_.flags();
width_ = stream_.width();

Wyświetl plik

@ -1122,6 +1122,16 @@
:usbid "0x04b8" "0x1142"
:status :complete
:model "L3200 Series"
:interface "USB"
:usbid "0x04b8" "0x1189"
:status :complete
:model "L3210 Series"
:interface "USB"
:usbid "0x04b8" "0x1188"
:status :complete
:model "LP-7900CS"
:status :untested
:comment "business all-in-one; scanner is a ES-7000H"

Wyświetl plik

@ -339,6 +339,21 @@
:usbid "0x04b8" "0x1143"
:status :complete
:model "ET-2810 Series"
:interface "USB"
:usbid "0x04b8" "0x118A"
:status :complete
:model "L3250 Series"
:interface "USB"
:usbid "0x04b8" "0x118A"
:status :complete
:model "XP-2150 Series"
:interface "USB"
:usbid "0x04b8" "0x119B"
:status :complete
:model ""
:interface "USB"
:usbid "0x04b8" "0x00"

Wyświetl plik

@ -252,8 +252,18 @@ Supports Epson-based Fujitsu USB scanners. See
for details.
.TP
.B epson
Supports Epson SCSI, parallel port and USB flatbed scanners. See
Old driver for Epson SCSI, parallel port and USB flatbed scanners. See
.BR sane\-epson (5)
for details but try
.BR epson2
first.
.TP
.B epson2
Newer driver for Epson SCSI, parallel port, network and USB flatbed
scanners (try this before
.BR epson
which is outdated). See
.BR sane\-epson2 (5)
for details.
.TP
.B escl
@ -878,6 +888,7 @@ for details).
.BR sane\-dll (5),
.BR sane\-dmc (5),
.BR sane\-epson (5),
.BR sane\-epson2 (5),
.BR sane\-escl (5),
.BR sane\-fujitsu (5),
.BR sane\-genesys (5),