1/* sane - Scanner Access Now Easy. 2 3 Copyright (C) 2003 Oliver Rauch 4 Copyright (C) 2003-2005 Henning Meier-Geinitz <henning@meier-geinitz.de> 5 Copyright (C) 2004, 2005 Gerhard Jaeger <gerhard@gjaeger.de> 6 Copyright (C) 2004-2013 Stéphane Voltz <stef.dev@free.fr> 7 Copyright (C) 2005-2009 Pierre Willenbrock <pierre@pirsoft.dnsalias.org> 8 Copyright (C) 2007 Luke <iceyfor@gmail.com> 9 Copyright (C) 2010 Jack McGill <jmcgill85258@yahoo.com> 10 Copyright (C) 2010 Andrey Loginov <avloginov@gmail.com>, 11 xerox travelscan device entry 12 Copyright (C) 2010 Chris Berry <s0457957@sms.ed.ac.uk> and Michael Rickmann <mrickma@gwdg.de> 13 for Plustek Opticbook 3600 support 14 Copyright (C) 2019 Povilas Kanapickas <povilas@radix.lt> 15 16 This file is part of the SANE package. 17 18 This program is free software; you can redistribute it and/or 19 modify it under the terms of the GNU General Public License as 20 published by the Free Software Foundation; either version 2 of the 21 License, or (at your option) any later version. 22 23 This program is distributed in the hope that it will be useful, but 24 WITHOUT ANY WARRANTY; without even the implied warranty of 25 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 26 General Public License for more details. 27 28 You should have received a copy of the GNU General Public License 29 along with this program. If not, see <https://www.gnu.org/licenses/>. 30*/ 31 32#define DEBUG_DECLARE_ONLY 33 34#include "low.h" 35 36namespace genesys { 37 38StaticInit<std::vector<UsbDeviceEntry>> s_usb_devices; 39 40void genesys_init_usb_device_tables() 41{ 42 /* Guidelines on calibration area sizes 43 ------------------------------------ 44 45 on many scanners scanning a single line takes around 10ms. In order not to take excessive 46 amount of time, the sizes of the calibration area are limited as follows: 47 2400 dpi or less: 4mm (would take ~4 seconds on 2400 dpi) 48 4800 dpi or less: 3mm (would take ~6 seconds on 4800 dpi) 49 anything more: 2mm (would take ~7 seconds on 9600 dpi) 50 51 Optional properties 52 ------------------- 53 54 All fields of the Genesys_Model class are defined even if they use default value, with 55 the following exceptions: 56 57 If the scanner does not have ScanMethod::TRANSPARENCY or ScanMethod::TRANSPARENCY_INFRARED, 58 the following properties are optional: 59 60 model.x_offset_ta = 0.0; 61 model.y_offset_ta = 0.0; 62 model.x_size_ta = 0.0; 63 model.y_size_ta = 0.0; 64 65 model.y_offset_sensor_to_ta = 0.0; 66 model.y_offset_calib_white_ta = 0.0; 67 model.y_size_calib_ta_mm = 0.0; 68 69 If the scanner does not have ModelFlag::DARK_WHITE_CALIBRATION, then the following 70 properties are optional: 71 72 model.y_offset_calib_dark_white_mm = 0.0; 73 model.y_size_calib_dark_white_mm = 0.0; 74 */ 75 76 s_usb_devices.init(); 77 78 Genesys_Model model; 79 model.name = "umax-astra-4500"; 80 model.vendor = "UMAX"; 81 model.model = "Astra 4500"; 82 model.model_id = ModelId::UMAX_ASTRA_4500; 83 model.asic_type = AsicType::GL646; 84 85 model.resolutions = { 86 { 87 { ScanMethod::FLATBED }, 88 { 1200, 600, 300, 150, 75 }, 89 { 2400, 1200, 600, 300, 150, 75 } 90 } 91 }; 92 model.bpp_gray_values = { 8, 16 }; 93 model.bpp_color_values = { 8, 16 }; 94 95 model.x_offset = 3.5; 96 model.y_offset = 7.5; 97 model.x_size = 218.0; 98 model.y_size = 299.0; 99 100 model.y_offset_calib_white = 0.0; 101 model.y_size_calib_mm = 4.0; 102 model.x_offset_calib_black = 1.0; 103 model.x_size_calib_mm = 228.6; 104 105 model.post_scan = 0.0; 106 model.eject_feed = 0.0; 107 108 model.ld_shift_r = 0; 109 model.ld_shift_g = 8; 110 model.ld_shift_b = 16; 111 112 model.line_mode_color_order = ColorOrder::BGR; 113 114 model.is_cis = false; 115 model.is_sheetfed = false; 116 model.sensor_id = SensorId::CCD_UMAX; 117 model.adc_id = AdcId::WOLFSON_UMAX; 118 model.gpio_id = GpioId::UMAX; 119 model.motor_id = MotorId::UMAX; 120 model.flags = ModelFlag::UNTESTED; 121 model.buttons = GENESYS_HAS_NO_BUTTONS; 122 model.search_lines = 200; 123 124 s_usb_devices->emplace_back(0x0638, 0x0a10, model); 125 126 127 model = Genesys_Model(); 128 model.name = "canon-lide-50"; 129 model.vendor = "Canon"; 130 model.model = "LiDE 35/40/50"; 131 model.model_id = ModelId::CANON_LIDE_50; 132 model.asic_type = AsicType::GL841; 133 134 model.resolutions = { 135 { 136 { ScanMethod::FLATBED }, 137 { 1200, 600, 300, 200, 150, 75 }, 138 { 2400, 1200, 600, 300, 200, 150, 75 }, 139 } 140 }; 141 142 model.bpp_gray_values = { 8, 16 }; 143 model.bpp_color_values = { 8, 16 }; 144 145 model.x_offset = 0.42; 146 model.y_offset = 7.9; 147 model.x_size = 218.0; 148 model.y_size = 299.0; 149 150 model.y_offset_calib_white = 3.0; 151 model.y_size_calib_mm = 3.0; 152 model.y_offset_calib_dark_white_mm = 1.0; 153 model.y_size_calib_dark_white_mm = 6.0; 154 model.x_size_calib_mm = 220.13334; 155 model.x_offset_calib_black = 0.0; 156 157 model.post_scan = 0.0; 158 model.eject_feed = 0.0; 159 160 model.ld_shift_r = 0; 161 model.ld_shift_g = 0; 162 model.ld_shift_b = 0; 163 164 model.line_mode_color_order = ColorOrder::RGB; 165 166 model.is_cis = true; 167 model.is_sheetfed = false; 168 model.sensor_id = SensorId::CIS_CANON_LIDE_35; 169 model.adc_id = AdcId::CANON_LIDE_35; 170 model.gpio_id = GpioId::CANON_LIDE_35; 171 model.motor_id = MotorId::CANON_LIDE_35; 172 model.flags = ModelFlag::DARK_WHITE_CALIBRATION | 173 ModelFlag::HOST_SIDE_GRAY | 174 ModelFlag::CUSTOM_GAMMA; 175 model.buttons = GENESYS_HAS_SCAN_SW | 176 GENESYS_HAS_FILE_SW | 177 GENESYS_HAS_EMAIL_SW | 178 GENESYS_HAS_COPY_SW; 179 model.search_lines = 400; 180 181 s_usb_devices->emplace_back(0x04a9, 0x2213, model); 182 183 184 model = Genesys_Model(); 185 model.name = "panasonic-kv-ss080"; 186 model.vendor = "Panasonic"; 187 model.model = "KV-SS080"; 188 model.model_id = ModelId::PANASONIC_KV_SS080; 189 model.asic_type = AsicType::GL843; 190 191 model.resolutions = { 192 { 193 { ScanMethod::FLATBED }, 194 { 600, /* 500, 400,*/ 300, 200, 150, 100, 75 }, 195 { 1200, 600, /* 500, 400, */ 300, 200, 150, 100, 75 }, 196 } 197 }; 198 199 model.bpp_gray_values = { 8, 16 }; 200 model.bpp_color_values = { 8, 16 }; 201 202 model.x_offset = 7.2; 203 model.y_offset = 14.7; 204 model.x_size = 217.7; 205 model.y_size = 300.0; 206 207 model.y_offset_calib_white = 9.0; 208 model.y_size_calib_mm = 4.0; 209 model.x_offset_calib_black = 0.0; 210 model.x_size_calib_mm = 227.584; 211 212 model.post_scan = 0.0; 213 model.eject_feed = 0.0; 214 215 model.ld_shift_r = 0; 216 model.ld_shift_g = 8; 217 model.ld_shift_b = 16; 218 219 model.line_mode_color_order = ColorOrder::RGB; 220 221 model.is_cis = false; 222 model.is_sheetfed = false; 223 model.sensor_id = SensorId::CCD_KVSS080; 224 model.adc_id = AdcId::KVSS080; 225 model.gpio_id = GpioId::KVSS080; 226 model.motor_id = MotorId::KVSS080; 227 model.flags = ModelFlag::CUSTOM_GAMMA; 228 model.buttons = GENESYS_HAS_SCAN_SW; 229 model.search_lines = 100; 230 231 s_usb_devices->emplace_back(0x04da, 0x100f, model); 232 233 234 model = Genesys_Model(); 235 model.name = "hewlett-packard-scanjet-4850c"; 236 model.vendor = "Hewlett Packard"; 237 model.model = "ScanJet 4850C"; 238 model.model_id = ModelId::HP_SCANJET_4850C; 239 model.asic_type = AsicType::GL843; 240 241 model.resolutions = { 242 { 243 { ScanMethod::FLATBED }, 244 { 2400, 1200, 600, 400, 300, 200, 150, 100 }, 245 { 2400, 1200, 600, 400, 300, 200, 150, 100 }, 246 } 247 }; 248 249 model.bpp_gray_values = { 8, 16 }; 250 model.bpp_color_values = { 8, 16 }; 251 252 model.x_offset = 7.9; 253 model.y_offset = 10.0; 254 model.x_size = 219.6; 255 model.y_size = 314.5; 256 257 model.y_offset_calib_white = 0.0; 258 model.y_size_calib_mm = 4.0; 259 model.x_offset_calib_black = 0.0; 260 model.x_size_calib_mm = 226.9067; 261 262 model.post_scan = 0.0; 263 model.eject_feed = 0.0; 264 265 model.ld_shift_r = 0; 266 model.ld_shift_g = 24; 267 model.ld_shift_b = 48; 268 269 model.line_mode_color_order = ColorOrder::RGB; 270 271 model.is_cis = false; 272 model.is_sheetfed = false; 273 model.sensor_id = SensorId::CCD_HP_4850C; 274 model.adc_id = AdcId::G4050; 275 model.gpio_id = GpioId::G4050; 276 model.motor_id = MotorId::G4050; 277 model.flags = ModelFlag::WARMUP | 278 ModelFlag::SHADING_REPARK | 279 ModelFlag::CUSTOM_GAMMA; 280 model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_FILE_SW | GENESYS_HAS_COPY_SW; 281 model.search_lines = 100; 282 s_usb_devices->emplace_back(0x03f0, 0x1b05, model); 283 284 285 model = Genesys_Model(); 286 model.name = "hewlett-packard-scanjet-g4010"; 287 model.vendor = "Hewlett Packard"; 288 model.model = "ScanJet G4010"; 289 model.model_id = ModelId::HP_SCANJET_G4010; 290 model.asic_type = AsicType::GL843; 291 292 model.resolutions = { 293 { 294 { ScanMethod::FLATBED }, 295 { 2400, 1200, 600, 400, 300, 200, 150, 100 }, 296 { 2400, 1200, 600, 400, 300, 200, 150, 100 }, 297 } 298 }; 299 300 model.bpp_gray_values = { 8, 16 }; 301 model.bpp_color_values = { 8, 16 }; 302 303 model.x_offset = 8.0; 304 model.y_offset = 13.00; 305 model.x_size = 217.9; 306 model.y_size = 315.0; 307 308 model.y_offset_calib_white = 3.0; 309 model.y_size_calib_mm = 4.0; 310 model.x_offset_calib_black = 0.0; 311 model.x_size_calib_mm = 226.9067; 312 313 model.post_scan = 0.0; 314 model.eject_feed = 0.0; 315 316 model.ld_shift_r = 0; 317 model.ld_shift_g = 24; 318 model.ld_shift_b = 48; 319 model.line_mode_color_order = ColorOrder::RGB; 320 321 model.is_cis = false; 322 model.is_sheetfed = false; 323 model.sensor_id = SensorId::CCD_G4050; 324 model.adc_id = AdcId::G4050; 325 model.gpio_id = GpioId::G4010; 326 model.motor_id = MotorId::G4050; 327 model.flags = ModelFlag::WARMUP | 328 ModelFlag::DARK_CALIBRATION | 329 ModelFlag::CUSTOM_GAMMA; 330 model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_FILE_SW | GENESYS_HAS_COPY_SW | GENESYS_HAS_TRANSP_SW; 331 model.search_lines = 100; 332 333 s_usb_devices->emplace_back(0x03f0, 0x4505, model); 334 335 336 model = Genesys_Model(); 337 model.name = "hewlett-packard-scanjet-g4050"; 338 model.vendor = "Hewlett Packard"; 339 model.model = "ScanJet G4050"; 340 model.model_id = ModelId::HP_SCANJET_G4050; 341 model.asic_type = AsicType::GL843; 342 343 model.resolutions = { 344 { 345 { ScanMethod::FLATBED }, 346 { 2400, 1200, 600, 400, 300, 200, 150, 100 }, 347 { 2400, 1200, 600, 400, 300, 200, 150, 100 }, 348 } 349 }; 350 351 model.bpp_gray_values = { 8, 16 }; 352 model.bpp_color_values = { 8, 16 }; 353 354 model.x_offset = 8.0; 355 model.y_offset = 10.00; 356 model.x_size = 217.9; 357 model.y_size = 315.0; 358 359 model.y_offset_calib_white = 0.0; 360 model.y_size_calib_mm = 4.0; 361 model.x_offset_calib_black = 0.0; 362 model.x_size_calib_mm = 226.9067; 363 364 model.post_scan = 0.0; 365 model.eject_feed = 0.0; 366 367 model.ld_shift_r = 0; 368 model.ld_shift_g = 24; 369 model.ld_shift_b = 48; 370 371 model.line_mode_color_order = ColorOrder::RGB; 372 373 model.is_cis = false; 374 model.is_sheetfed = false; 375 model.sensor_id = SensorId::CCD_G4050; 376 model.adc_id = AdcId::G4050; 377 model.gpio_id = GpioId::G4050; 378 model.motor_id = MotorId::G4050; 379 model.flags = ModelFlag::WARMUP | 380 ModelFlag::DARK_CALIBRATION | 381 ModelFlag::CUSTOM_GAMMA; 382 model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_FILE_SW | GENESYS_HAS_COPY_SW; 383 model.search_lines = 100; 384 385 s_usb_devices->emplace_back(0x03f0, 0x4605, model); 386 387 388 model = Genesys_Model(); 389 model.name = "canon-canoscan-4400f"; 390 model.vendor = "Canon"; 391 model.model = "Canoscan 4400f"; 392 model.model_id = ModelId::CANON_4400F; 393 model.asic_type = AsicType::GL843; 394 395 model.resolutions = { 396 { 397 { ScanMethod::FLATBED }, 398 { 1200, 600, 300 }, 399 { 1200, 600, 300 }, 400 }, { 401 { ScanMethod::TRANSPARENCY }, 402 { 4800, 2400, 1200 }, 403 { 9600, 4800, 2400, 1200 }, 404 } 405 }; 406 407 model.bpp_gray_values = { 8, 16 }; 408 model.bpp_color_values = { 8, 16 }; 409 410 model.x_offset = 6.0; 411 model.y_offset = 10.00; 412 model.x_size = 215.9; 413 model.y_size = 297.0; 414 415 model.y_offset_calib_white = 2.0; 416 model.y_size_calib_mm = 4.0; 417 model.x_offset_calib_black = 0.0; 418 model.x_size_calib_mm = 241.3; 419 420 model.x_offset_ta = 115.0; 421 model.y_offset_ta = 37.0; 422 model.x_size_ta = 35.0; 423 model.y_size_ta = 230.0; 424 425 model.y_offset_sensor_to_ta = 23.0; 426 model.y_offset_calib_white_ta = 24.0; 427 model.y_size_calib_ta_mm = 2.0; 428 429 model.post_scan = 0.0; 430 model.eject_feed = 0.0; 431 432 model.ld_shift_r = 96; 433 model.ld_shift_g = 48; 434 model.ld_shift_b = 0; 435 436 model.line_mode_color_order = ColorOrder::RGB; 437 438 model.is_cis = false; 439 model.is_sheetfed = false; 440 model.sensor_id = SensorId::CCD_CANON_4400F; 441 model.adc_id = AdcId::CANON_4400F; 442 model.gpio_id = GpioId::CANON_4400F; 443 model.motor_id = MotorId::CANON_4400F; 444 model.flags = ModelFlag::WARMUP | 445 ModelFlag::DARK_CALIBRATION | 446 ModelFlag::CUSTOM_GAMMA | 447 ModelFlag::SHADING_REPARK | 448 ModelFlag::UTA_NO_SECONDARY_MOTOR; 449 450 model.buttons = GENESYS_HAS_TRANSP_SW | GENESYS_HAS_EMAIL_SW 451 | GENESYS_HAS_COPY_SW | GENESYS_HAS_PDF1_SW | GENESYS_HAS_PDF2_SW 452 | GENESYS_HAS_PDF3_SW | GENESYS_HAS_PDF4_SW; 453 model.search_lines = 100; 454 455 s_usb_devices->emplace_back(0x04a9, 0x2228, model); 456 457 458 model = Genesys_Model(); 459 model.name = "canon-canoscan-8400f"; 460 model.vendor = "Canon"; 461 model.model = "Canoscan 8400f"; 462 model.model_id = ModelId::CANON_8400F; 463 model.asic_type = AsicType::GL843; 464 465 model.resolutions = { 466 { 467 { ScanMethod::FLATBED }, 468 { 3200, 1600, 800, 400 }, 469 { 3200, 1600, 800, 400 }, 470 }, { 471 { ScanMethod::TRANSPARENCY }, 472 { 3200, 1600, 800, 400 }, 473 { 3200, 1600, 800, 400 }, 474 }, { 475 { ScanMethod::TRANSPARENCY_INFRARED }, 476 { 3200, 1600, 800, 400 }, 477 { 3200, 1600, 800, 400 }, 478 } 479 }; 480 481 model.bpp_gray_values = { 8, 16 }; 482 model.bpp_color_values = { 8, 16 }; 483 484 model.x_offset = 5.5; 485 model.y_offset = 17.00; 486 model.x_size = 219.9; 487 model.y_size = 300.0; 488 489 model.y_offset_calib_white = 0.0; 490 model.y_size_calib_mm = 3.0; 491 model.x_offset_calib_black = 10.0; 492 model.x_size_calib_mm = 225.425; 493 494 model.x_offset_ta = 75.0; 495 model.y_offset_ta = 45.00; 496 model.x_size_ta = 75.0; 497 model.y_size_ta = 230.0; 498 499 model.y_offset_sensor_to_ta = 22.0; 500 model.y_offset_calib_white_ta = 25.0; 501 model.y_size_calib_ta_mm = 3.0; 502 503 model.post_scan = 0.0; 504 model.eject_feed = 0.0; 505 506 model.ld_shift_r = 0; 507 model.ld_shift_g = 24; 508 model.ld_shift_b = 48; 509 510 model.line_mode_color_order = ColorOrder::RGB; 511 512 model.is_cis = false; 513 model.is_sheetfed = false; 514 model.sensor_id = SensorId::CCD_CANON_8400F; 515 model.adc_id = AdcId::CANON_8400F; 516 model.gpio_id = GpioId::CANON_8400F; 517 model.motor_id = MotorId::CANON_8400F; 518 model.flags = ModelFlag::WARMUP | 519 ModelFlag::DARK_CALIBRATION | 520 ModelFlag::CUSTOM_GAMMA | 521 ModelFlag::SHADING_REPARK; 522 model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_FILE_SW | GENESYS_HAS_COPY_SW | GENESYS_HAS_EMAIL_SW; 523 model.search_lines = 100; 524 525 s_usb_devices->emplace_back(0x04a9, 0x221e, model); 526 527 528 model = Genesys_Model(); 529 model.name = "canon-canoscan-8600f"; 530 model.vendor = "Canon"; 531 model.model = "Canoscan 8600f"; 532 model.model_id = ModelId::CANON_8600F; 533 model.asic_type = AsicType::GL843; 534 535 model.resolutions = { 536 { 537 { ScanMethod::FLATBED }, 538 { 1200, 600, 300 }, 539 { 1200, 600, 300 }, 540 }, { 541 { ScanMethod::TRANSPARENCY, ScanMethod::TRANSPARENCY_INFRARED }, 542 { 4800, 2400, 1200, 600, 300 }, 543 { 4800, 2400, 1200, 600, 300 }, 544 } 545 }; 546 547 model.bpp_gray_values = { 8, 16 }; 548 model.bpp_color_values = { 8, 16 }; 549 550 model.x_offset = 24.0; 551 model.y_offset = 10.0; 552 model.x_size = 216.0; 553 model.y_size = 297.0; 554 555 model.y_offset_calib_white = 0.0; 556 model.y_size_calib_mm = 4.0; 557 model.x_offset_calib_black = 8.0; 558 model.x_size_calib_mm = 240.70734; 559 560 model.x_offset_ta = 97.0; 561 model.y_offset_ta = 38.5; 562 model.x_size_ta = 70.0; 563 model.y_size_ta = 230.0; 564 565 model.y_offset_sensor_to_ta = 23.0; 566 model.y_offset_calib_white_ta = 25.5; 567 model.y_size_calib_ta_mm = 3.0; 568 569 model.post_scan = 0.0; 570 model.eject_feed = 0.0; 571 572 model.ld_shift_r = 0; 573 model.ld_shift_g = 48; 574 model.ld_shift_b = 96; 575 576 model.line_mode_color_order = ColorOrder::RGB; 577 578 model.is_cis = false; 579 model.is_sheetfed = false; 580 model.sensor_id = SensorId::CCD_CANON_8600F; 581 model.adc_id = AdcId::CANON_8600F; 582 model.gpio_id = GpioId::CANON_8600F; 583 model.motor_id = MotorId::CANON_8600F; 584 model.flags = ModelFlag::WARMUP | 585 ModelFlag::DARK_CALIBRATION | 586 ModelFlag::CUSTOM_GAMMA | 587 ModelFlag::SHADING_REPARK; 588 model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_FILE_SW | GENESYS_HAS_COPY_SW; 589 model.search_lines = 100; 590 591 s_usb_devices->emplace_back(0x04a9, 0x2229, model); 592 593 594 model = Genesys_Model(); 595 model.name = "canon-lide-100"; 596 model.vendor = "Canon"; 597 model.model = "LiDE 100"; 598 model.model_id = ModelId::CANON_LIDE_100; 599 model.asic_type = AsicType::GL847; 600 601 model.resolutions = { 602 { 603 { ScanMethod::FLATBED }, 604 { 2400, 1200, 600, 300, 200, 150 }, 605 { 4800, 2400, 1200, 600, 300, 200, 150 }, 606 } 607 }; 608 609 model.bpp_gray_values = { 8, 16 }; 610 model.bpp_color_values = { 8, 16 }; 611 612 model.x_offset = 1.1; 613 model.y_offset = 8.3; 614 model.x_size = 216.07; 615 model.y_size = 299.0; 616 617 model.y_offset_calib_white = 0.4233334; 618 model.y_size_calib_mm = 3.0; 619 model.x_offset_calib_black = 0.0; 620 model.x_size_calib_mm = 217.4241; 621 622 model.post_scan = 0.0; 623 model.eject_feed = 0.0; 624 625 model.ld_shift_r = 0; 626 model.ld_shift_g = 0; 627 model.ld_shift_b = 0; 628 629 model.line_mode_color_order = ColorOrder::RGB; 630 631 model.is_cis = true; 632 model.is_sheetfed = false; 633 model.sensor_id = SensorId::CIS_CANON_LIDE_100; 634 model.adc_id = AdcId::CANON_LIDE_200; 635 model.gpio_id = GpioId::CANON_LIDE_200; 636 model.motor_id = MotorId::CANON_LIDE_100; 637 model.flags = ModelFlag::SIS_SENSOR | 638 ModelFlag::DARK_CALIBRATION | 639 ModelFlag::SHADING_REPARK | 640 ModelFlag::CUSTOM_GAMMA; 641 model.buttons = GENESYS_HAS_SCAN_SW | 642 GENESYS_HAS_COPY_SW | 643 GENESYS_HAS_EMAIL_SW | 644 GENESYS_HAS_FILE_SW; 645 model.search_lines = 400; 646 647 s_usb_devices->emplace_back(0x04a9, 0x1904, model); 648 649 650 model = Genesys_Model(); 651 model.name = "canon-lide-110"; 652 model.vendor = "Canon"; 653 model.model = "LiDE 110"; 654 model.model_id = ModelId::CANON_LIDE_110; 655 model.asic_type = AsicType::GL124; 656 657 model.resolutions = { 658 { 659 { ScanMethod::FLATBED }, 660 { 2400, 1200, 600, /* 400,*/ 300, 150, 100, 75 }, 661 { 4800, 2400, 1200, 600, /* 400,*/ 300, 150, 100, 75 }, 662 } 663 }; 664 665 model.bpp_gray_values = { 8, 16 }; 666 model.bpp_color_values = { 8, 16 }; 667 668 model.x_offset = 2.2; 669 model.y_offset = 9.0; 670 model.x_size = 216.70; 671 model.y_size = 300.0; 672 673 model.y_offset_calib_white = 0.0; 674 model.y_size_calib_mm = 3.0; 675 model.x_offset_calib_black = 0.0; 676 model.x_size_calib_mm = 218.7787; 677 678 model.post_scan = 0.0; 679 model.eject_feed = 0.0; 680 681 model.ld_shift_r = 0; 682 model.ld_shift_g = 0; 683 model.ld_shift_b = 0; 684 model.line_mode_color_order = ColorOrder::RGB; 685 686 model.is_cis = true; 687 model.is_sheetfed = false; 688 model.sensor_id = SensorId::CIS_CANON_LIDE_110; 689 model.adc_id = AdcId::CANON_LIDE_110; 690 model.gpio_id = GpioId::CANON_LIDE_110; 691 model.motor_id = MotorId::CANON_LIDE_110; 692 model.flags = ModelFlag::DARK_CALIBRATION | 693 ModelFlag::SHADING_REPARK | 694 ModelFlag::CUSTOM_GAMMA; 695 model.buttons = GENESYS_HAS_SCAN_SW | 696 GENESYS_HAS_COPY_SW | 697 GENESYS_HAS_EMAIL_SW | 698 GENESYS_HAS_FILE_SW; 699 model.search_lines = 400; 700 701 s_usb_devices->emplace_back(0x04a9, 0x1909, model); 702 703 704 model = Genesys_Model(); 705 model.name = "canon-lide-120"; 706 model.vendor = "Canon"; 707 model.model = "LiDE 120"; 708 model.model_id = ModelId::CANON_LIDE_120; 709 model.asic_type = AsicType::GL124; 710 711 model.resolutions = { 712 { 713 { ScanMethod::FLATBED }, 714 { 2400, 1200, 600, 300, 150, 100, 75 }, 715 { 4800, 2400, 1200, 600, 300, 150, 100, 75 }, 716 } 717 }; 718 719 model.bpp_gray_values = { 8, 16 }; 720 model.bpp_color_values = { 8, 16 }; 721 722 model.x_offset = 0.0; 723 model.y_offset = 8.0; 724 model.x_size = 216.0; 725 model.y_size = 300.0; 726 727 model.y_offset_calib_white = 1.0; 728 model.y_size_calib_mm = 3.0; 729 model.x_offset_calib_black = 0.0; 730 model.x_size_calib_mm = 216.0694; 731 732 model.post_scan = 0.0; 733 model.eject_feed = 0.0; 734 735 model.ld_shift_r = 0; 736 model.ld_shift_g = 0; 737 model.ld_shift_b = 0; 738 model.line_mode_color_order = ColorOrder::RGB; 739 model.is_cis = true; 740 model.is_sheetfed = false; 741 model.sensor_id = SensorId::CIS_CANON_LIDE_120; 742 model.adc_id = AdcId::CANON_LIDE_120; 743 model.gpio_id = GpioId::CANON_LIDE_120; 744 model.motor_id = MotorId::CANON_LIDE_120; 745 model.flags = ModelFlag::DARK_CALIBRATION | 746 ModelFlag::SHADING_REPARK | 747 ModelFlag::CUSTOM_GAMMA; 748 model.buttons = GENESYS_HAS_SCAN_SW | 749 GENESYS_HAS_COPY_SW | 750 GENESYS_HAS_EMAIL_SW | 751 GENESYS_HAS_FILE_SW; 752 model.search_lines = 400; 753 754 s_usb_devices->emplace_back(0x04a9, 0x190e, model); 755 756 757 model = Genesys_Model(); 758 model.name = "canon-lide-210"; 759 model.vendor = "Canon"; 760 model.model = "LiDE 210"; 761 model.model_id = ModelId::CANON_LIDE_210; 762 model.asic_type = AsicType::GL124; 763 764 model.resolutions = { 765 { 766 { ScanMethod::FLATBED }, 767 { 4800, 2400, 1200, 600, /* 400,*/ 300, 150, 100, 75 }, 768 { 4800, 2400, 1200, 600, /* 400,*/ 300, 150, 100, 75 }, 769 } 770 }; 771 772 model.bpp_gray_values = { 8, 16 }; 773 model.bpp_color_values = { 8, 16 }; 774 775 model.x_offset = 2.1; 776 model.y_offset = 8.7; 777 model.x_size = 216.70; 778 model.y_size = 297.5; 779 780 model.y_offset_calib_white = 0.0; 781 model.y_size_calib_mm = 3.0; 782 model.x_offset_calib_black = 0.0; 783 model.x_size_calib_mm = 218.7787; 784 785 model.post_scan = 0.0; 786 model.eject_feed = 0.0; 787 788 model.ld_shift_r = 0; 789 model.ld_shift_g = 0; 790 model.ld_shift_b = 0; 791 792 model.line_mode_color_order = ColorOrder::RGB; 793 794 model.is_cis = true; 795 model.is_sheetfed = false; 796 model.sensor_id = SensorId::CIS_CANON_LIDE_210; 797 model.adc_id = AdcId::CANON_LIDE_110; 798 model.gpio_id = GpioId::CANON_LIDE_210; 799 model.motor_id = MotorId::CANON_LIDE_210; 800 model.flags = ModelFlag::DARK_CALIBRATION | 801 ModelFlag::SHADING_REPARK | 802 ModelFlag::CUSTOM_GAMMA; 803 model.buttons = GENESYS_HAS_SCAN_SW | 804 GENESYS_HAS_COPY_SW | 805 GENESYS_HAS_EMAIL_SW | 806 GENESYS_HAS_FILE_SW | 807 GENESYS_HAS_EXTRA_SW; 808 model.search_lines = 400; 809 810 s_usb_devices->emplace_back(0x04a9, 0x190a, model); 811 812 813 model = Genesys_Model(); 814 model.name = "canon-lide-220"; 815 model.vendor = "Canon"; 816 model.model = "LiDE 220"; 817 model.model_id = ModelId::CANON_LIDE_220; 818 model.asic_type = AsicType::GL124; // or a compatible one 819 820 model.resolutions = { 821 { 822 { ScanMethod::FLATBED }, 823 { 4800, 2400, 1200, 600, 300, 150, 100, 75 }, 824 { 4800, 2400, 1200, 600, 300, 150, 100, 75 }, 825 } 826 }; 827 828 model.bpp_gray_values = { 8, 16 }; 829 model.bpp_color_values = { 8, 16 }; 830 831 model.x_offset = 2.1; 832 model.y_offset = 8.7; 833 model.x_size = 216.70; 834 model.y_size = 297.5; 835 836 model.y_offset_calib_white = 0.0; 837 model.y_size_calib_mm = 3.0; 838 model.x_offset_calib_black = 0.0; 839 model.x_size_calib_mm = 218.7787; 840 841 model.post_scan = 0.0; 842 model.eject_feed = 0.0; 843 844 model.ld_shift_r = 0; 845 model.ld_shift_g = 0; 846 model.ld_shift_b = 0; 847 848 model.line_mode_color_order = ColorOrder::RGB; 849 model.is_cis = true; 850 model.is_sheetfed = false; 851 model.sensor_id = SensorId::CIS_CANON_LIDE_220; 852 model.adc_id = AdcId::CANON_LIDE_110; 853 model.gpio_id = GpioId::CANON_LIDE_210; 854 model.motor_id = MotorId::CANON_LIDE_210; 855 model.flags = ModelFlag::DARK_CALIBRATION | 856 ModelFlag::SHADING_REPARK | 857 ModelFlag::CUSTOM_GAMMA; 858 model.buttons = GENESYS_HAS_SCAN_SW | 859 GENESYS_HAS_COPY_SW | 860 GENESYS_HAS_EMAIL_SW | 861 GENESYS_HAS_FILE_SW | 862 GENESYS_HAS_EXTRA_SW; 863 model.search_lines = 400; 864 865 s_usb_devices->emplace_back(0x04a9, 0x190f, model); 866 867 868 model = Genesys_Model(); 869 model.name = "canon-canoscan-5600f"; 870 model.vendor = "Canon"; 871 model.model = "CanoScan 5600F"; 872 model.model_id = ModelId::CANON_5600F; 873 model.asic_type = AsicType::GL847; 874 875 model.resolutions = { 876 { 877 { ScanMethod::FLATBED, ScanMethod::TRANSPARENCY }, 878 { 4800, 2400, 1200, 600, 300, /*150*/ }, 879 { 4800, 2400, 1200, 600, 300, /*150*/ }, 880 } 881 }; 882 883 model.bpp_gray_values = { 8, 16 }; 884 model.bpp_color_values = { 8, 16 }; 885 886 model.x_offset = 1.5; 887 model.y_offset = 10.4; 888 model.x_size = 219.00; 889 model.y_size = 305.0; 890 891 model.y_offset_calib_white = 2.0; 892 model.y_size_calib_mm = 2.0; 893 model.x_offset_calib_black = 0.0; 894 model.x_size_calib_mm = 220.5; 895 896 model.x_offset_ta = 93.0; 897 model.y_offset_ta = 42.4; 898 model.x_size_ta = 35.0; 899 model.y_size_ta = 230.0; 900 901 model.y_offset_sensor_to_ta = 0; 902 model.y_offset_calib_white_ta = 21.4; 903 model.y_size_calib_ta_mm = 1.0; 904 905 model.post_scan = 0.0; 906 model.eject_feed = 0.0; 907 908 model.ld_shift_r = 0; 909 model.ld_shift_g = 32; 910 model.ld_shift_b = 64; 911 912 model.line_mode_color_order = ColorOrder::RGB; 913 914 model.is_cis = false; 915 model.is_sheetfed = false; 916 model.sensor_id = SensorId::CCD_CANON_5600F; 917 model.adc_id = AdcId::CANON_5600F; 918 model.gpio_id = GpioId::CANON_5600F; 919 model.motor_id = MotorId::CANON_5600F; 920 model.flags = ModelFlag::SIS_SENSOR | 921 ModelFlag::INVERT_PIXEL_DATA | 922 ModelFlag::DISABLE_ADC_CALIBRATION | 923 ModelFlag::DISABLE_EXPOSURE_CALIBRATION | 924 ModelFlag::HOST_SIDE_CALIBRATION_COMPLETE_SCAN | 925 ModelFlag::DARK_CALIBRATION | 926 ModelFlag::SHADING_REPARK | 927 ModelFlag::UTA_NO_SECONDARY_MOTOR | 928 ModelFlag::CUSTOM_GAMMA; 929 model.buttons = GENESYS_HAS_SCAN_SW | 930 GENESYS_HAS_COPY_SW | 931 GENESYS_HAS_EMAIL_SW | 932 GENESYS_HAS_PDF1_SW | 933 GENESYS_HAS_PDF2_SW | 934 GENESYS_HAS_PDF3_SW | 935 GENESYS_HAS_PDF4_SW; 936 model.search_lines = 400; 937 938 s_usb_devices->emplace_back(0x04a9, 0x1906, model); 939 940 941 model = Genesys_Model(); 942 model.name = "canon-lide-700f"; 943 model.vendor = "Canon"; 944 model.model = "LiDE 700F"; 945 model.model_id = ModelId::CANON_LIDE_700F; 946 model.asic_type = AsicType::GL847; 947 948 model.resolutions = { 949 { 950 // FIXME: support 2400 ad 4800 dpi 951 { ScanMethod::FLATBED }, 952 { 1200, 600, 300, 200, 150, 100, 75 }, 953 { 1200, 600, 300, 200, 150, 100, 75 }, 954 } 955 }; 956 957 model.bpp_gray_values = { 8, 16 }; 958 model.bpp_color_values = { 8, 16 }; 959 960 model.x_offset = 3.1; 961 model.y_offset = 8.1; 962 model.x_size = 216.07; 963 model.y_size = 297.0; 964 965 model.y_offset_calib_white = 0.4233334; 966 model.y_size_calib_mm = 3.0; 967 model.x_offset_calib_black = 0.0; 968 model.x_size_calib_mm = 219.6254; 969 970 model.post_scan = 0.0; 971 model.eject_feed = 0.0; 972 973 model.ld_shift_r = 0; 974 model.ld_shift_g = 0; 975 model.ld_shift_b = 0; 976 977 model.line_mode_color_order = ColorOrder::RGB; 978 979 model.is_cis = true; 980 model.is_sheetfed = false; 981 model.sensor_id = SensorId::CIS_CANON_LIDE_700F; 982 model.adc_id = AdcId::CANON_LIDE_700F; 983 model.gpio_id = GpioId::CANON_LIDE_700F; 984 model.motor_id = MotorId::CANON_LIDE_700; 985 model.flags = ModelFlag::SIS_SENSOR | 986 ModelFlag::DARK_CALIBRATION | 987 ModelFlag::SHADING_REPARK | 988 ModelFlag::CUSTOM_GAMMA; 989 model.buttons = GENESYS_HAS_SCAN_SW | 990 GENESYS_HAS_COPY_SW | 991 GENESYS_HAS_EMAIL_SW | 992 GENESYS_HAS_FILE_SW; 993 model.search_lines = 400; 994 995 s_usb_devices->emplace_back(0x04a9, 0x1907, model); 996 997 998 model = Genesys_Model(); 999 model.name = "canon-lide-200"; 1000 model.vendor = "Canon"; 1001 model.model = "LiDE 200"; 1002 model.model_id = ModelId::CANON_LIDE_200; 1003 model.asic_type = AsicType::GL847; 1004 1005 model.resolutions = { 1006 { 1007 { ScanMethod::FLATBED }, 1008 { 4800, 2400, 1200, 600, 300, 200, 150 }, 1009 { 4800, 2400, 1200, 600, 300, 200, 150 }, 1010 } 1011 }; 1012 1013 model.bpp_gray_values = { 8, 16 }; 1014 model.bpp_color_values = { 8, 16 }; 1015 1016 model.x_offset = 1.1; 1017 model.y_offset = 8.3; 1018 model.x_size = 216.07; 1019 model.y_size = 299.0; 1020 1021 model.y_offset_calib_white = 0.4233334; 1022 model.y_size_calib_mm = 3.0; 1023 model.x_offset_calib_black = 0.0; 1024 model.x_size_calib_mm = 217.4241; 1025 1026 model.post_scan = 0.0; 1027 model.eject_feed = 0.0; 1028 1029 model.ld_shift_r = 0; 1030 model.ld_shift_g = 0; 1031 model.ld_shift_b = 0; 1032 1033 model.line_mode_color_order = ColorOrder::RGB; 1034 model.is_cis = true; 1035 model.is_sheetfed = false; 1036 model.sensor_id = SensorId::CIS_CANON_LIDE_200; 1037 model.adc_id = AdcId::CANON_LIDE_200; 1038 model.gpio_id = GpioId::CANON_LIDE_200; 1039 model.motor_id = MotorId::CANON_LIDE_200; 1040 model.flags = ModelFlag::SIS_SENSOR | 1041 ModelFlag::DARK_CALIBRATION | 1042 ModelFlag::SHADING_REPARK | 1043 ModelFlag::CUSTOM_GAMMA; 1044 model.buttons = GENESYS_HAS_SCAN_SW | 1045 GENESYS_HAS_COPY_SW | 1046 GENESYS_HAS_EMAIL_SW | 1047 GENESYS_HAS_FILE_SW; 1048 model.search_lines = 400; 1049 1050 s_usb_devices->emplace_back(0x04a9, 0x1905, model); 1051 1052 1053 model = Genesys_Model(); 1054 model.name = "canon-lide-60"; 1055 model.vendor = "Canon"; 1056 model.model = "LiDE 60"; 1057 model.model_id = ModelId::CANON_LIDE_60; 1058 model.asic_type = AsicType::GL841; 1059 1060 model.resolutions = { 1061 { 1062 { ScanMethod::FLATBED }, 1063 { 1200, 600, 300, 150, 75 }, 1064 { 2400, 1200, 600, 300, 150, 75 }, 1065 } 1066 }; 1067 1068 model.bpp_gray_values = { 8, 16 }; 1069 model.bpp_color_values = { 8, 16 }; 1070 1071 model.x_offset = 0.42; 1072 model.y_offset = 7.9; 1073 model.x_size = 218.0; 1074 model.y_size = 299.0; 1075 1076 model.y_offset_calib_white = 3.0; 1077 model.y_size_calib_mm = 3.0; 1078 model.y_offset_calib_dark_white_mm = 1.0; 1079 model.y_size_calib_dark_white_mm = 6.0; 1080 model.x_offset_calib_black = 0.0; 1081 model.x_size_calib_mm = 220.13334; 1082 1083 model.post_scan = 0.0; 1084 model.eject_feed = 0.0; 1085 1086 model.ld_shift_r = 0; 1087 model.ld_shift_g = 0; 1088 model.ld_shift_b = 0; 1089 model.line_mode_color_order = ColorOrder::RGB; 1090 1091 model.is_cis = true; 1092 model.is_sheetfed = false; 1093 model.sensor_id = SensorId::CIS_CANON_LIDE_60; 1094 model.adc_id = AdcId::CANON_LIDE_35; 1095 model.gpio_id = GpioId::CANON_LIDE_35; 1096 model.motor_id = MotorId::CANON_LIDE_60; 1097 model.flags = ModelFlag::DARK_WHITE_CALIBRATION | 1098 ModelFlag::HOST_SIDE_GRAY | 1099 ModelFlag::CUSTOM_GAMMA; 1100 1101 model.buttons = GENESYS_HAS_COPY_SW | 1102 GENESYS_HAS_SCAN_SW | 1103 GENESYS_HAS_FILE_SW | 1104 GENESYS_HAS_EMAIL_SW; 1105 model.search_lines = 400; 1106 s_usb_devices->emplace_back(0x04a9, 0x221c, model); 1107 1108 1109 model = Genesys_Model(); 1110 model.name = "canon-lide-80"; 1111 model.vendor = "Canon"; 1112 model.model = "LiDE 80"; 1113 model.model_id = ModelId::CANON_LIDE_80; 1114 model.asic_type = AsicType::GL841; 1115 1116 model.resolutions = { 1117 { 1118 { ScanMethod::FLATBED }, 1119 { 1200, 600, 300, 150, 100, 75 }, 1120 { 2400, 1200, 600, 300, 150, 100, 75 }, 1121 } 1122 }; 1123 1124 model.bpp_gray_values = { 8, 16 }; 1125 model.bpp_color_values = { 8, 16 }; 1126 model.x_offset = 0.42; 1127 model.y_offset = 7.90; 1128 model.x_size = 216.07; 1129 model.y_size = 299.0; 1130 1131 model.y_offset_calib_white = 4.5; 1132 model.y_size_calib_mm = 3.0; 1133 model.y_offset_calib_dark_white_mm = 1.0; 1134 model.y_size_calib_dark_white_mm = 6.0; 1135 model.x_offset_calib_black = 0.0; 1136 model.x_size_calib_mm = 216.7467; 1137 1138 model.post_scan = 0.0; 1139 model.eject_feed = 0.0; 1140 1141 model.ld_shift_r = 0; 1142 model.ld_shift_g = 0; 1143 model.ld_shift_b = 0; 1144 1145 model.line_mode_color_order = ColorOrder::RGB; 1146 1147 model.is_cis = true; 1148 model.is_sheetfed = false; 1149 model.sensor_id = SensorId::CIS_CANON_LIDE_80; 1150 model.adc_id = AdcId::CANON_LIDE_80; 1151 model.gpio_id = GpioId::CANON_LIDE_80; 1152 model.motor_id = MotorId::CANON_LIDE_80; 1153 model.flags = ModelFlag::DARK_WHITE_CALIBRATION | 1154 ModelFlag::HOST_SIDE_GRAY | 1155 ModelFlag::CUSTOM_GAMMA; 1156 model.buttons = GENESYS_HAS_SCAN_SW | 1157 GENESYS_HAS_FILE_SW | 1158 GENESYS_HAS_EMAIL_SW | 1159 GENESYS_HAS_COPY_SW; 1160 model.search_lines = 400; 1161 1162 s_usb_devices->emplace_back(0x04a9, 0x2214, model); 1163 1164 1165 model = Genesys_Model(); 1166 model.name = "canon-lide-90"; 1167 model.vendor = "Canon"; 1168 model.model = "LiDE 90"; 1169 model.model_id = ModelId::CANON_LIDE_90; 1170 model.asic_type = AsicType::GL842; 1171 1172 model.resolutions = { 1173 { 1174 { ScanMethod::FLATBED }, 1175 { 2400, 1200, 600, 300 }, 1176 { 2400, 1200, 600, 300 }, 1177 } 1178 }; 1179 1180 model.bpp_gray_values = { 8, 16 }; 1181 model.bpp_color_values = { 8, 16 }; 1182 model.x_offset = 3.50; 1183 model.y_offset = 9.0; 1184 model.x_size = 219.0; 1185 model.y_size = 299.0; 1186 1187 model.y_offset_calib_white = 0.0; 1188 model.y_size_calib_mm = 2.0; 1189 model.y_offset_calib_dark_white_mm = 0.0; 1190 model.y_size_calib_dark_white_mm = 0.0; 1191 model.x_offset_calib_black = 0.0; 1192 model.x_size_calib_mm = 221.5; 1193 1194 model.post_scan = 0.0; 1195 model.eject_feed = 0.0; 1196 1197 model.ld_shift_r = 0; 1198 model.ld_shift_g = 0; 1199 model.ld_shift_b = 0; 1200 1201 model.line_mode_color_order = ColorOrder::RGB; 1202 1203 model.is_cis = true; 1204 model.is_sheetfed = false; 1205 model.sensor_id = SensorId::CIS_CANON_LIDE_90; 1206 model.adc_id = AdcId::CANON_LIDE_90; 1207 model.gpio_id = GpioId::CANON_LIDE_90; 1208 model.motor_id = MotorId::CANON_LIDE_90; 1209 model.flags = ModelFlag::DISABLE_ADC_CALIBRATION | 1210 ModelFlag::HOST_SIDE_CALIBRATION_COMPLETE_SCAN | 1211 ModelFlag::USE_CONSTANT_FOR_DARK_CALIBRATION | 1212 ModelFlag::DISABLE_FAST_FEEDING | 1213 ModelFlag::SHADING_REPARK | 1214 ModelFlag::CUSTOM_GAMMA; 1215 model.buttons = GENESYS_HAS_SCAN_SW | 1216 GENESYS_HAS_FILE_SW | 1217 GENESYS_HAS_EMAIL_SW | 1218 GENESYS_HAS_COPY_SW; 1219 model.search_lines = 400; 1220 1221 s_usb_devices->emplace_back(0x04a9, 0x1900, model); 1222 1223 1224 model = Genesys_Model(); 1225 model.name = "hewlett-packard-scanjet-2300c"; 1226 model.vendor = "Hewlett Packard"; 1227 model.model = "ScanJet 2300c"; 1228 model.model_id = ModelId::HP_SCANJET_2300C; 1229 model.asic_type = AsicType::GL646; 1230 1231 model.resolutions = { 1232 { 1233 { ScanMethod::FLATBED }, 1234 { 600, 300, 150, 75 }, 1235 { 1200, 600, 300, 150, 75 }, 1236 } 1237 }; 1238 1239 model.bpp_gray_values = { 8, 16 }; 1240 model.bpp_color_values = { 8, 16 }; 1241 1242 model.x_offset = 6.5; 1243 model.y_offset = 8; 1244 model.x_size = 215.9; 1245 model.y_size = 295.0; 1246 1247 model.y_offset_calib_white = 0.0; 1248 model.y_size_calib_mm = 4.0; 1249 model.x_offset_calib_black = 1.0; 1250 model.x_size_calib_mm = 227.2454; 1251 1252 model.post_scan = 0.0; 1253 model.eject_feed = 0.0; 1254 1255 model.ld_shift_r = 32; 1256 model.ld_shift_g = 16; 1257 model.ld_shift_b = 0; 1258 1259 model.line_mode_color_order = ColorOrder::RGB; 1260 model.is_cis = false; 1261 model.is_sheetfed = false; 1262 model.sensor_id = SensorId::CCD_HP2300; 1263 model.adc_id = AdcId::WOLFSON_HP2300; 1264 model.gpio_id = GpioId::HP2300; 1265 model.motor_id = MotorId::HP2300; 1266 model.flags = ModelFlag::GAMMA_14BIT | 1267 ModelFlag::DARK_CALIBRATION | 1268 ModelFlag::CUSTOM_GAMMA; 1269 model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_COPY_SW; 1270 model.search_lines = 132; 1271 1272 s_usb_devices->emplace_back(0x03f0, 0x0901, model); 1273 1274 1275 model = Genesys_Model(); 1276 model.name = "hewlett-packard-scanjet-2400c"; 1277 model.vendor = "Hewlett Packard"; 1278 model.model = "ScanJet 2400c"; 1279 model.model_id = ModelId::HP_SCANJET_2400C; 1280 model.asic_type = AsicType::GL646; 1281 1282 model.resolutions = { 1283 { 1284 { ScanMethod::FLATBED }, 1285 { 1200, 600, 300, 150, 100, 50 }, 1286 { 1200, 600, 300, 150, 100, 50 }, 1287 } 1288 }; 1289 1290 model.bpp_gray_values = { 8, 16 }; 1291 model.bpp_color_values = { 8, 16 }; 1292 1293 model.x_offset = 6.5; 1294 model.y_offset = 2.5; 1295 model.x_size = 220.0; 1296 model.y_size = 297.2; 1297 1298 model.y_offset_calib_white = 0.0; 1299 model.y_size_calib_mm = 2.0; // FIXME: check if white area is really so small 1300 model.x_offset_calib_black = 1.0; 1301 model.x_size_calib_mm = 230.1241; 1302 1303 model.post_scan = 0.0; 1304 model.eject_feed = 0.0; 1305 1306 model.ld_shift_r = 0; 1307 model.ld_shift_g = 24; 1308 model.ld_shift_b = 48; 1309 1310 model.line_mode_color_order = ColorOrder::RGB; 1311 1312 model.is_cis = false; 1313 model.is_sheetfed = false; 1314 model.sensor_id = SensorId::CCD_HP2400; 1315 model.adc_id = AdcId::WOLFSON_HP2400; 1316 model.gpio_id = GpioId::HP2400; 1317 model.motor_id = MotorId::HP2400; 1318 model.flags = ModelFlag::GAMMA_14BIT | 1319 ModelFlag::DARK_CALIBRATION | 1320 ModelFlag::CUSTOM_GAMMA; 1321 model.buttons = GENESYS_HAS_COPY_SW | GENESYS_HAS_EMAIL_SW | GENESYS_HAS_SCAN_SW; 1322 model.search_lines = 132; 1323 1324 s_usb_devices->emplace_back(0x03f0, 0x0a01, model); 1325 1326 1327 model = Genesys_Model(); 1328 model.name = "visioneer-strobe-xp200"; 1329 model.vendor = "Visioneer"; 1330 model.model = "Strobe XP200"; 1331 model.model_id = ModelId::VISIONEER_STROBE_XP200; 1332 model.asic_type = AsicType::GL646; 1333 1334 model.resolutions = { 1335 { 1336 { ScanMethod::FLATBED }, 1337 { 600, 300, 200, 100, 75 }, 1338 { 600, 300, 200, 100, 75 }, 1339 } 1340 }; 1341 1342 model.bpp_gray_values = { 8, 16 }; 1343 model.bpp_color_values = { 8, 16 }; 1344 1345 model.x_offset = 0.5; 1346 model.y_offset = 16.0; 1347 model.x_size = 215.9; 1348 model.y_size = 297.2; 1349 1350 model.y_offset_calib_white = 0.0; 1351 model.y_size_calib_mm = 4.0; 1352 model.x_offset_calib_black = 0.0; 1353 model.x_size_calib_mm = 220.1334; 1354 1355 model.post_scan = 0.0; 1356 model.eject_feed = 0.0; 1357 1358 model.ld_shift_r = 0; 1359 model.ld_shift_g = 0; 1360 model.ld_shift_b = 0; 1361 1362 model.line_mode_color_order = ColorOrder::RGB; 1363 1364 model.is_cis = true; 1365 model.is_sheetfed = true; 1366 model.sensor_id = SensorId::CIS_XP200; 1367 model.adc_id = AdcId::AD_XP200; 1368 model.gpio_id = GpioId::XP200; 1369 model.motor_id = MotorId::XP200; 1370 model.flags = ModelFlag::GAMMA_14BIT | 1371 ModelFlag::CUSTOM_GAMMA | 1372 ModelFlag::DARK_CALIBRATION; 1373 model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE; 1374 model.search_lines = 132; 1375 1376 s_usb_devices->emplace_back(0x04a7, 0x0426, model); 1377 1378 1379 model = Genesys_Model(); 1380 model.name = "hewlett-packard-scanjet-3670"; 1381 model.vendor = "Hewlett Packard"; 1382 model.model = "ScanJet 3670"; 1383 model.model_id = ModelId::HP_SCANJET_3670; 1384 model.asic_type = AsicType::GL646; 1385 1386 model.resolutions = { 1387 { 1388 { ScanMethod::FLATBED }, 1389 { 1200, 600, 300, 150, 100, 75, 50 }, 1390 { 1200, 600, 300, 150, 100, 75, 50 }, 1391 } 1392 }; 1393 1394 model.bpp_gray_values = { 8, 16 }; 1395 model.bpp_color_values = { 8, 16 }; 1396 1397 model.x_offset = 8.5; 1398 model.y_offset = 11.0; 1399 model.x_size = 215.9; 1400 model.y_size = 300.0; 1401 1402 model.y_offset_calib_white = 0.0; 1403 model.y_size_calib_mm = 4.0; 1404 model.x_offset_calib_black = 1.0; 1405 model.x_size_calib_mm = 230.1241; 1406 1407 model.post_scan = 0.0; 1408 model.eject_feed = 0.0; 1409 1410 model.ld_shift_r = 0; 1411 model.ld_shift_g = 24; 1412 model.ld_shift_b = 48; 1413 1414 model.line_mode_color_order = ColorOrder::RGB; 1415 1416 model.is_cis = false; 1417 model.is_sheetfed = false; 1418 model.sensor_id = SensorId::CCD_HP3670; 1419 model.adc_id = AdcId::WOLFSON_HP3670; 1420 model.gpio_id = GpioId::HP3670; 1421 model.motor_id = MotorId::HP3670; 1422 model.flags = ModelFlag::WARMUP | 1423 ModelFlag::GAMMA_14BIT | 1424 ModelFlag::DARK_CALIBRATION | 1425 ModelFlag::CUSTOM_GAMMA; 1426 model.buttons = GENESYS_HAS_COPY_SW | GENESYS_HAS_EMAIL_SW | GENESYS_HAS_SCAN_SW; 1427 model.search_lines = 200; 1428 1429 s_usb_devices->emplace_back(0x03f0, 0x1405, model); 1430 1431 1432 model = Genesys_Model(); 1433 model.name = "plustek-opticpro-st12"; 1434 model.vendor = "Plustek"; 1435 model.model = "OpticPro ST12"; 1436 model.model_id = ModelId::PLUSTEK_OPTICPRO_ST12; 1437 model.asic_type = AsicType::GL646; 1438 1439 model.resolutions = { 1440 { 1441 { ScanMethod::FLATBED }, 1442 { 600, 300, 150, 75 }, 1443 { 1200, 600, 300, 150, 75 }, 1444 } 1445 }; 1446 1447 model.bpp_gray_values = { 8, 16 }; 1448 model.bpp_color_values = { 8, 16 }; 1449 1450 model.x_offset = 3.5; 1451 model.y_offset = 7.5; 1452 model.x_size = 218.0; 1453 model.y_size = 299.0; 1454 1455 model.y_offset_calib_white = 0.0; 1456 model.y_size_calib_mm = 4.0; 1457 model.x_offset_calib_black = 1.0; 1458 model.x_size_calib_mm = 229.2774; 1459 1460 model.post_scan = 0.0; 1461 model.eject_feed = 0.0; 1462 1463 model.ld_shift_r = 0; 1464 model.ld_shift_g = 8; 1465 model.ld_shift_b = 16; 1466 1467 model.line_mode_color_order = ColorOrder::BGR; 1468 1469 model.is_cis = false; 1470 model.is_sheetfed = false; 1471 model.sensor_id = SensorId::CCD_ST12; 1472 model.adc_id = AdcId::WOLFSON_ST12; 1473 model.gpio_id = GpioId::ST12; 1474 model.motor_id = MotorId::UMAX; 1475 model.flags = ModelFlag::UNTESTED | ModelFlag::GAMMA_14BIT; 1476 model.buttons = GENESYS_HAS_NO_BUTTONS; 1477 model.search_lines = 200; 1478 1479 s_usb_devices->emplace_back(0x07b3, 0x0600, model); 1480 1481 model = Genesys_Model(); 1482 model.name = "plustek-opticpro-st24"; 1483 model.vendor = "Plustek"; 1484 model.model = "OpticPro ST24"; 1485 model.model_id = ModelId::PLUSTEK_OPTICPRO_ST24; 1486 model.asic_type = AsicType::GL646; 1487 1488 model.resolutions = { 1489 { 1490 { ScanMethod::FLATBED }, 1491 { 1200, 600, 300, 150, 75 }, 1492 { 2400, 1200, 600, 300, 150, 75 }, 1493 } 1494 }; 1495 1496 model.bpp_gray_values = { 8, 16 }; 1497 model.bpp_color_values = { 8, 16 }; 1498 1499 model.x_offset = 3.5; 1500 model.y_offset = 7.5; // FIXME: incorrect, needs updating 1501 model.x_size = 218.0; 1502 model.y_size = 299.0; 1503 1504 model.y_offset_calib_white = 0.0; 1505 model.y_size_calib_mm = 4.0; 1506 model.x_offset_calib_black = 1.0; 1507 model.x_size_calib_mm = 228.6; 1508 1509 model.post_scan = 0.0; 1510 model.eject_feed = 0.0; 1511 1512 model.ld_shift_r = 0; 1513 model.ld_shift_g = 8; 1514 model.ld_shift_b = 16; 1515 1516 model.line_mode_color_order = ColorOrder::BGR; 1517 1518 model.is_cis = false; 1519 model.is_sheetfed = false; 1520 model.sensor_id = SensorId::CCD_ST24; 1521 model.adc_id = AdcId::WOLFSON_ST24; 1522 model.gpio_id = GpioId::ST24; 1523 model.motor_id = MotorId::ST24; 1524 model.flags = ModelFlag::UNTESTED | 1525 ModelFlag::GAMMA_14BIT | 1526 ModelFlag::CUSTOM_GAMMA; 1527 model.buttons = GENESYS_HAS_NO_BUTTONS; 1528 model.search_lines = 200; 1529 1530 s_usb_devices->emplace_back(0x07b3, 0x0601, model); 1531 1532 model = Genesys_Model(); 1533 model.name = "medion-md5345-model"; 1534 model.vendor = "Medion"; 1535 model.model = "MD5345/MD6228/MD6471"; 1536 model.model_id = ModelId::MEDION_MD5345; 1537 model.asic_type = AsicType::GL646; 1538 1539 model.resolutions = { 1540 { 1541 { ScanMethod::FLATBED }, 1542 { 1200, 600, 400, 300, 200, 150, 100, 75, 50 }, 1543 { 2400, 1200, 600, 400, 300, 200, 150, 100, 75, 50 }, 1544 } 1545 }; 1546 1547 model.bpp_gray_values = { 8, 16 }; 1548 model.bpp_color_values = { 8, 16 }; 1549 1550 model.x_offset = 0.30; 1551 model.y_offset = 4.0; // FIXME: incorrect, needs updating 1552 model.x_size = 220.0; 1553 model.y_size = 296.4; 1554 1555 model.y_offset_calib_white = 0.00; 1556 model.y_size_calib_mm = 2.0; 1557 model.x_offset_calib_black = 0.00; 1558 model.x_size_calib_mm = 230.1241; 1559 1560 model.post_scan = 0.0; 1561 model.eject_feed = 0.0; 1562 1563 model.ld_shift_r = 96; 1564 model.ld_shift_g = 48; 1565 model.ld_shift_b = 0; 1566 model.line_mode_color_order = ColorOrder::RGB; 1567 1568 model.is_cis = false; 1569 model.is_sheetfed = false; 1570 model.sensor_id = SensorId::CCD_5345; 1571 model.adc_id = AdcId::WOLFSON_5345; 1572 model.gpio_id = GpioId::MD_5345; 1573 model.motor_id = MotorId::MD_5345; 1574 model.flags = ModelFlag::WARMUP | 1575 ModelFlag::GAMMA_14BIT | 1576 ModelFlag::DARK_CALIBRATION | 1577 ModelFlag::CUSTOM_GAMMA; 1578 model.buttons = GENESYS_HAS_COPY_SW | 1579 GENESYS_HAS_EMAIL_SW | 1580 GENESYS_HAS_POWER_SW | 1581 GENESYS_HAS_OCR_SW | 1582 GENESYS_HAS_SCAN_SW; 1583 model.search_lines = 200; 1584 1585 s_usb_devices->emplace_back(0x0461, 0x0377, model); 1586 1587 model = Genesys_Model(); 1588 model.name = "visioneer-strobe-xp300"; 1589 model.vendor = "Visioneer"; 1590 model.model = "Strobe XP300"; 1591 model.model_id = ModelId::VISIONEER_STROBE_XP300; 1592 model.asic_type = AsicType::GL841; 1593 1594 model.resolutions = { 1595 { 1596 { ScanMethod::FLATBED }, 1597 { 600, 300, 150, 75 }, 1598 { 600, 300, 150, 75 }, 1599 } 1600 }; 1601 1602 model.bpp_gray_values = { 8, 16 }; 1603 model.bpp_color_values = { 8, 16 }; 1604 1605 model.x_offset = 0.0; 1606 model.y_offset = 1.0; 1607 model.x_size = 435.0; 1608 model.y_size = 511; 1609 1610 model.y_offset_calib_white = 0.0; 1611 model.y_size_calib_mm = 4.0; 1612 model.x_offset_calib_black = 0.0; 1613 model.x_size_calib_mm = 433.4934; 1614 1615 model.post_scan = 26.5; 1616 // this is larger than needed -- accounts for second sensor head, which is a calibration item 1617 model.eject_feed = 0.0; 1618 model.ld_shift_r = 0; 1619 model.ld_shift_g = 0; 1620 model.ld_shift_b = 0; 1621 1622 model.line_mode_color_order = ColorOrder::RGB; 1623 1624 model.is_cis = true; 1625 model.is_sheetfed = true; 1626 model.sensor_id = SensorId::CCD_XP300; 1627 model.adc_id = AdcId::WOLFSON_XP300; 1628 model.gpio_id = GpioId::XP300; 1629 model.motor_id = MotorId::XP300; 1630 model.flags = ModelFlag::DARK_CALIBRATION | 1631 ModelFlag::CUSTOM_GAMMA; 1632 model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE; 1633 model.search_lines = 400; 1634 1635 s_usb_devices->emplace_back(0x04a7, 0x0474, model); 1636 1637 model = Genesys_Model(); 1638 model.name = "syscan-docketport-665"; 1639 model.vendor = "Syscan/Ambir"; 1640 model.model = "DocketPORT 665"; 1641 model.model_id = ModelId::SYSCAN_DOCKETPORT_665; 1642 model.asic_type = AsicType::GL841; 1643 1644 model.resolutions = { 1645 { 1646 { ScanMethod::FLATBED }, 1647 { 600, 300, 150, 75 }, 1648 { 1200, 600, 300, 150, 75 }, 1649 } 1650 }; 1651 1652 model.bpp_gray_values = { 8, 16 }; 1653 model.bpp_color_values = { 8, 16 }; 1654 1655 model.x_offset = 0.0; 1656 model.y_offset = 0.0; 1657 model.x_size = 108.0; 1658 model.y_size = 511; 1659 1660 model.y_offset_calib_white = 0.0; 1661 model.y_size_calib_mm = 4.0; 1662 model.x_offset_calib_black = 0.0; 1663 model.x_size_calib_mm = 105.664; 1664 1665 model.post_scan = 17.5; 1666 model.eject_feed = 0.0; 1667 1668 model.ld_shift_r = 0; 1669 model.ld_shift_g = 0; 1670 model.ld_shift_b = 0; 1671 1672 model.line_mode_color_order = ColorOrder::RGB; 1673 1674 model.is_cis = true; 1675 model.is_sheetfed = true; 1676 model.sensor_id = SensorId::CCD_DP665; 1677 model.adc_id = AdcId::WOLFSON_XP300; 1678 model.gpio_id = GpioId::DP665; 1679 model.motor_id = MotorId::DP665; 1680 model.flags = ModelFlag::DARK_CALIBRATION | 1681 ModelFlag::CUSTOM_GAMMA; 1682 model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE; 1683 model.search_lines = 400; 1684 1685 s_usb_devices->emplace_back(0x0a82, 0x4803, model); 1686 1687 model = Genesys_Model(); 1688 model.name = "visioneer-roadwarrior"; 1689 model.vendor = "Visioneer"; 1690 model.model = "Readwarrior"; 1691 model.model_id = ModelId::VISIONEER_ROADWARRIOR; 1692 model.asic_type = AsicType::GL841; 1693 1694 model.resolutions = { 1695 { 1696 { ScanMethod::FLATBED }, 1697 { 600, 300, 150, 75 }, 1698 { 1200, 600, 300, 150, 75 }, 1699 } 1700 }; 1701 1702 model.bpp_gray_values = { 8, 16 }; 1703 model.bpp_color_values = { 8, 16 }; 1704 1705 model.x_offset = 0.0; 1706 model.y_offset = 0.0; 1707 model.x_size = 220.0; 1708 model.y_size = 511; 1709 1710 model.y_offset_calib_white = 0.0; 1711 model.y_size_calib_mm = 4.0; 1712 model.x_offset_calib_black = 0.0; 1713 model.x_size_calib_mm = 220.1334; 1714 1715 model.post_scan = 16.0; 1716 model.eject_feed = 0.0; 1717 1718 model.ld_shift_r = 0; 1719 model.ld_shift_g = 0; 1720 model.ld_shift_b = 0; 1721 1722 model.line_mode_color_order = ColorOrder::RGB; 1723 1724 model.is_cis = true; 1725 model.is_sheetfed = true; 1726 model.sensor_id = SensorId::CCD_ROADWARRIOR; 1727 model.adc_id = AdcId::WOLFSON_XP300; 1728 model.gpio_id = GpioId::DP665; 1729 model.motor_id = MotorId::ROADWARRIOR; 1730 model.flags = ModelFlag::CUSTOM_GAMMA | 1731 ModelFlag::DARK_CALIBRATION; 1732 model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE; 1733 model.search_lines = 400; 1734 1735 s_usb_devices->emplace_back(0x04a7, 0x0494, model); 1736 1737 model = Genesys_Model(); 1738 model.name = "syscan-docketport-465"; 1739 model.vendor = "Syscan"; 1740 model.model = "DocketPORT 465"; 1741 model.model_id = ModelId::SYSCAN_DOCKETPORT_465; 1742 model.asic_type = AsicType::GL841; 1743 1744 model.resolutions = { 1745 { 1746 { ScanMethod::FLATBED }, 1747 { 600, 300, 150, 75 }, 1748 { 1200, 600, 300, 150, 75 }, 1749 } 1750 }; 1751 1752 model.bpp_gray_values = { 8, 16 }; 1753 model.bpp_color_values = { 8, 16 }; 1754 1755 model.x_offset = 0.0; 1756 model.y_offset = 0.0; 1757 model.x_size = 220.0; 1758 model.y_size = 511; 1759 1760 model.y_offset_calib_white = 0.0; 1761 model.y_size_calib_mm = 4.0; 1762 model.x_offset_calib_black = 0.0; 1763 model.x_size_calib_mm = 220.1334; 1764 1765 model.post_scan = 16.0; 1766 model.eject_feed = 0.0; 1767 1768 model.ld_shift_r = 0; 1769 model.ld_shift_g = 0; 1770 model.ld_shift_b = 0; 1771 1772 model.line_mode_color_order = ColorOrder::RGB; 1773 1774 model.is_cis = true; 1775 model.is_sheetfed = true; 1776 model.sensor_id = SensorId::CCD_ROADWARRIOR; 1777 model.adc_id = AdcId::WOLFSON_XP300; 1778 model.gpio_id = GpioId::DP665; 1779 model.motor_id = MotorId::ROADWARRIOR; 1780 model.flags = ModelFlag::DISABLE_ADC_CALIBRATION | 1781 ModelFlag::DISABLE_EXPOSURE_CALIBRATION | 1782 ModelFlag::DISABLE_SHADING_CALIBRATION | 1783 ModelFlag::CUSTOM_GAMMA | 1784 ModelFlag::UNTESTED; 1785 model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW; 1786 model.search_lines = 400; 1787 1788 s_usb_devices->emplace_back(0x0a82, 0x4802, model); 1789 1790 1791 model = Genesys_Model(); 1792 model.name = "visioneer-xp100-revision3"; 1793 model.vendor = "Visioneer"; 1794 model.model = "XP100 Revision 3"; 1795 model.model_id = ModelId::VISIONEER_STROBE_XP100_REVISION3; 1796 model.asic_type = AsicType::GL841; 1797 1798 model.resolutions = { 1799 { 1800 { ScanMethod::FLATBED }, 1801 { 600, 300, 150, 75 }, 1802 { 1200, 600, 300, 150, 75 }, 1803 } 1804 }; 1805 1806 model.bpp_gray_values = { 8, 16 }; 1807 model.bpp_color_values = { 8, 16 }; 1808 1809 model.x_offset = 0.0; 1810 model.y_offset = 0.0; 1811 model.x_size = 220.0; 1812 model.y_size = 511; 1813 1814 model.y_offset_calib_white = 0.0; 1815 model.y_size_calib_mm = 4.0; 1816 model.x_offset_calib_black = 0.0; 1817 model.x_size_calib_mm = 220.1334; 1818 1819 model.post_scan = 16.0; 1820 model.eject_feed = 0.0; 1821 1822 model.ld_shift_r = 0; 1823 model.ld_shift_g = 0; 1824 model.ld_shift_b = 0; 1825 1826 model.line_mode_color_order = ColorOrder::RGB; 1827 1828 model.is_cis = true; 1829 model.is_sheetfed = true; 1830 model.sensor_id = SensorId::CCD_ROADWARRIOR; 1831 model.adc_id = AdcId::WOLFSON_XP300; 1832 model.gpio_id = GpioId::DP665; 1833 model.motor_id = MotorId::ROADWARRIOR; 1834 model.flags = ModelFlag::CUSTOM_GAMMA | 1835 ModelFlag::DARK_CALIBRATION; 1836 model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE; 1837 model.search_lines = 400; 1838 1839 s_usb_devices->emplace_back(0x04a7, 0x049b, model); 1840 1841 model = Genesys_Model(); 1842 model.name = "pentax-dsmobile-600"; 1843 model.vendor = "Pentax"; 1844 model.model = "DSmobile 600"; 1845 model.model_id = ModelId::PENTAX_DSMOBILE_600; 1846 model.asic_type = AsicType::GL841; 1847 1848 model.resolutions = { 1849 { 1850 { ScanMethod::FLATBED }, 1851 { 600, 300, 150, 75 }, 1852 { 1200, 600, 300, 150, 75 }, 1853 } 1854 }; 1855 1856 model.bpp_gray_values = { 8, 16 }; 1857 model.bpp_color_values = { 8, 16 }; 1858 1859 model.x_offset = 0.0; 1860 model.y_offset = 0.0; 1861 model.x_size = 220.0; 1862 model.y_size = 511; 1863 1864 model.y_offset_calib_white = 0.0; 1865 model.y_size_calib_mm = 4.0; 1866 model.x_offset_calib_black = 0.0; 1867 model.x_size_calib_mm = 220.1334; 1868 1869 model.post_scan = 16.0; 1870 model.eject_feed = 0.0; 1871 1872 model.ld_shift_r = 0; 1873 model.ld_shift_g = 0; 1874 model.ld_shift_b = 0; 1875 1876 model.line_mode_color_order = ColorOrder::RGB; 1877 1878 model.is_cis = true; 1879 model.is_sheetfed = true; 1880 model.sensor_id = SensorId::CCD_DSMOBILE600; 1881 model.adc_id = AdcId::WOLFSON_DSM600; 1882 model.gpio_id = GpioId::DP665; 1883 model.motor_id = MotorId::DSMOBILE_600; 1884 model.flags = ModelFlag::CUSTOM_GAMMA | 1885 ModelFlag::DARK_CALIBRATION; 1886 model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE; 1887 model.search_lines = 400; 1888 1889 s_usb_devices->emplace_back(0x0a17, 0x3210, model); 1890 // clone, only usb id is different 1891 s_usb_devices->emplace_back(0x04f9, 0x2038, model); 1892 1893 model = Genesys_Model(); 1894 model.name = "syscan-docketport-467"; 1895 model.vendor = "Syscan"; 1896 model.model = "DocketPORT 467"; 1897 model.model_id = ModelId::SYSCAN_DOCKETPORT_467; 1898 model.asic_type = AsicType::GL841; 1899 1900 model.resolutions = { 1901 { 1902 { ScanMethod::FLATBED }, 1903 { 600, 300, 150, 75 }, 1904 { 1200, 600, 300, 150, 75 }, 1905 } 1906 }; 1907 1908 model.bpp_gray_values = { 8, 16 }; 1909 model.bpp_color_values = { 8, 16 }; 1910 1911 model.x_offset = 0.0; 1912 model.y_offset = 0.0; 1913 model.x_size = 220.0; 1914 model.y_size = 511; 1915 1916 model.y_offset_calib_white = 0.0; 1917 model.y_size_calib_mm = 4.0; 1918 model.x_offset_calib_black = 0.0; 1919 model.x_size_calib_mm = 220.1334; 1920 1921 model.post_scan = 16.0; 1922 model.eject_feed = 0.0; 1923 1924 model.ld_shift_r = 0; 1925 model.ld_shift_g = 0; 1926 model.ld_shift_b = 0; 1927 model.line_mode_color_order = ColorOrder::RGB; 1928 1929 model.is_cis = true; 1930 model.is_sheetfed = true; 1931 model.sensor_id = SensorId::CCD_DSMOBILE600; 1932 model.adc_id = AdcId::WOLFSON_DSM600; 1933 model.gpio_id = GpioId::DP665; 1934 model.motor_id = MotorId::DSMOBILE_600; 1935 model.flags = ModelFlag::CUSTOM_GAMMA | 1936 ModelFlag::DARK_CALIBRATION; 1937 model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE; 1938 model.search_lines = 400; 1939 1940 s_usb_devices->emplace_back(0x1dcc, 0x4812, model); 1941 1942 model = Genesys_Model(); 1943 model.name = "syscan-docketport-685"; 1944 model.vendor = "Syscan/Ambir"; 1945 model.model = "DocketPORT 685"; 1946 model.model_id = ModelId::SYSCAN_DOCKETPORT_685; 1947 model.asic_type = AsicType::GL841; 1948 1949 model.resolutions = { 1950 { 1951 { ScanMethod::FLATBED }, 1952 { 600, 300, 150, 75 }, 1953 { 600, 300, 150, 75 }, 1954 } 1955 }; 1956 1957 model.bpp_gray_values = { 8, 16 }; 1958 model.bpp_color_values = { 8, 16 }; 1959 1960 model.x_offset = 0.0; 1961 model.y_offset = 1.0; 1962 model.x_size = 212.0; 1963 model.y_size = 500; 1964 1965 model.y_offset_calib_white = 0.0; 1966 model.y_size_calib_mm = 4.0; 1967 model.x_offset_calib_black = 0.0; 1968 model.x_size_calib_mm = 212.5134; 1969 1970 model.post_scan = 26.5; 1971 // this is larger than needed -- accounts for second sensor head, which is a calibration item 1972 model.eject_feed = 0.0; 1973 model.ld_shift_r = 0; 1974 model.ld_shift_g = 0; 1975 model.ld_shift_b = 0; 1976 1977 model.line_mode_color_order = ColorOrder::RGB; 1978 1979 model.is_cis = true; 1980 model.is_sheetfed = true; 1981 model.sensor_id = SensorId::CCD_DP685; 1982 model.adc_id = AdcId::WOLFSON_DSM600; 1983 model.gpio_id = GpioId::DP685; 1984 model.motor_id = MotorId::XP300; 1985 model.flags = ModelFlag::CUSTOM_GAMMA | 1986 ModelFlag::DARK_CALIBRATION; 1987 model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE; 1988 model.search_lines = 400; 1989 1990 1991 s_usb_devices->emplace_back(0x0a82, 0x480c, model); 1992 1993 1994 model = Genesys_Model(); 1995 model.name = "syscan-docketport-485"; 1996 model.vendor = "Syscan/Ambir"; 1997 model.model = "DocketPORT 485"; 1998 model.model_id = ModelId::SYSCAN_DOCKETPORT_485; 1999 model.asic_type = AsicType::GL841; 2000 2001 model.resolutions = { 2002 { 2003 { ScanMethod::FLATBED }, 2004 { 600, 300, 150, 75 }, 2005 { 600, 300, 150, 75 }, 2006 } 2007 }; 2008 2009 model.bpp_gray_values = { 8, 16 }; 2010 model.bpp_color_values = { 8, 16 }; 2011 2012 model.x_offset = 0.0; 2013 model.y_offset = 1.0; 2014 model.x_size = 435.0; 2015 model.y_size = 511; 2016 2017 model.y_offset_calib_white = 0.0; 2018 model.y_size_calib_mm = 4.0; 2019 model.x_offset_calib_black = 0.0; 2020 model.x_size_calib_mm = 433.4934; 2021 2022 model.post_scan = 26.5; 2023 // this is larger than needed -- accounts for second sensor head, which is a calibration item 2024 model.eject_feed = 0.0; 2025 model.ld_shift_r = 0; 2026 model.ld_shift_g = 0; 2027 model.ld_shift_b = 0; 2028 2029 model.line_mode_color_order = ColorOrder::RGB; 2030 2031 model.is_cis = true; 2032 model.is_sheetfed = true; 2033 model.sensor_id = SensorId::CCD_XP300; 2034 model.adc_id = AdcId::WOLFSON_XP300; 2035 model.gpio_id = GpioId::XP300; 2036 model.motor_id = MotorId::XP300; 2037 model.flags = ModelFlag::CUSTOM_GAMMA | 2038 ModelFlag::DARK_CALIBRATION; 2039 model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE; 2040 model.search_lines = 400; 2041 2042 s_usb_devices->emplace_back(0x0a82, 0x4800, model); 2043 2044 2045 model = Genesys_Model(); 2046 model.name = "dct-docketport-487"; 2047 model.vendor = "DCT"; 2048 model.model = "DocketPORT 487"; 2049 model.model_id = ModelId::DCT_DOCKETPORT_487; 2050 model.asic_type = AsicType::GL841; 2051 2052 model.resolutions = { 2053 { 2054 { ScanMethod::FLATBED }, 2055 { 600, 300, 150, 75 }, 2056 { 600, 300, 150, 75 }, 2057 } 2058 }; 2059 2060 model.bpp_gray_values = { 8, 16 }; 2061 model.bpp_color_values = { 8, 16 }; 2062 2063 model.x_offset = 0.0; 2064 model.y_offset = 1.0; 2065 model.x_size = 435.0; 2066 model.y_size = 511; 2067 2068 model.y_offset_calib_white = 0.0; 2069 model.y_size_calib_mm = 4.0; 2070 model.x_offset_calib_black = 0.0; 2071 model.x_size_calib_mm = 433.4934; 2072 2073 model.post_scan = 26.5; 2074 // this is larger than needed -- accounts for second sensor head, which is a calibration item 2075 model.eject_feed = 0.0; 2076 2077 model.ld_shift_r = 0; 2078 model.ld_shift_g = 0; 2079 model.ld_shift_b = 0; 2080 2081 model.line_mode_color_order = ColorOrder::RGB; 2082 2083 model.is_cis = true; 2084 model.is_sheetfed = true; 2085 model.sensor_id = SensorId::CCD_DOCKETPORT_487; 2086 model.adc_id = AdcId::WOLFSON_XP300; 2087 model.gpio_id = GpioId::XP300; 2088 model.motor_id = MotorId::XP300; 2089 model.flags = ModelFlag::DARK_CALIBRATION | 2090 ModelFlag::CUSTOM_GAMMA | 2091 ModelFlag::UNTESTED; 2092 model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE; 2093 model.search_lines = 400; 2094 2095 s_usb_devices->emplace_back(0x1dcc, 0x4810, model); 2096 2097 2098 model = Genesys_Model(); 2099 model.name = "visioneer-7100-model"; 2100 model.vendor = "Visioneer"; 2101 model.model = "OneTouch 7100"; 2102 model.model_id = ModelId::VISIONEER_7100; 2103 model.asic_type = AsicType::GL646; 2104 2105 model.resolutions = { 2106 { 2107 { ScanMethod::FLATBED }, 2108 { 1200, 600, 400, 300, 200, 150, 100, 75, 50 }, 2109 { 2400, 1200, 600, 400, 300, 200, 150, 100, 75, 50 }, 2110 } 2111 }; 2112 2113 model.bpp_gray_values = { 8, 16 }; 2114 model.bpp_color_values = { 8, 16 }; 2115 2116 model.x_offset = 4.00; 2117 model.y_offset = 5.0; // FIXME: incorrect, needs updating 2118 model.x_size = 215.9; 2119 model.y_size = 296.4; 2120 2121 model.y_offset_calib_white = 0.00; 2122 model.y_size_calib_mm = 4.0; 2123 model.x_offset_calib_black = 0.00; 2124 model.x_size_calib_mm = 230.1241; 2125 2126 model.post_scan = 0.0; 2127 model.eject_feed = 0.0; 2128 2129 model.ld_shift_r = 96; 2130 model.ld_shift_g = 48; 2131 model.ld_shift_b = 0; 2132 model.line_mode_color_order = ColorOrder::RGB; 2133 2134 model.is_cis = false; 2135 model.is_sheetfed = false; 2136 model.sensor_id = SensorId::CCD_5345; 2137 model.adc_id = AdcId::WOLFSON_5345; 2138 model.gpio_id = GpioId::MD_5345; 2139 model.motor_id = MotorId::MD_5345; 2140 model.flags = ModelFlag::WARMUP | 2141 ModelFlag::GAMMA_14BIT | 2142 ModelFlag::DARK_CALIBRATION | 2143 ModelFlag::CUSTOM_GAMMA; 2144 model.buttons = GENESYS_HAS_COPY_SW | 2145 GENESYS_HAS_EMAIL_SW | 2146 GENESYS_HAS_POWER_SW | 2147 GENESYS_HAS_OCR_SW | 2148 GENESYS_HAS_SCAN_SW; 2149 model.search_lines = 200; 2150 2151 s_usb_devices->emplace_back(0x04a7, 0x0229, model); 2152 2153 2154 model = Genesys_Model(); 2155 model.name = "xerox-2400-model"; 2156 model.vendor = "Xerox"; 2157 model.model = "OneTouch 2400"; 2158 model.model_id = ModelId::XEROX_2400; 2159 model.asic_type = AsicType::GL646; 2160 2161 model.resolutions = { 2162 { 2163 { ScanMethod::FLATBED }, 2164 { 1200, 600, 400, 300, 200, 150, 100, 75, 50 }, 2165 { 2400, 1200, 600, 400, 300, 200, 150, 100, 75, 50 }, 2166 } 2167 }; 2168 2169 model.bpp_gray_values = { 8, 16 }; 2170 model.bpp_color_values = { 8, 16 }; 2171 2172 model.x_offset = 4.00; 2173 model.y_offset = 5.0; // FIXME: incorrect, needs updating 2174 model.x_size = 215.9; 2175 model.y_size = 296.4; 2176 2177 model.y_offset_calib_white = 0.00; 2178 model.y_size_calib_mm = 4.0; 2179 model.x_offset_calib_black = 0.00; 2180 model.x_size_calib_mm = 230.1241; 2181 2182 model.post_scan = 0.0; 2183 model.eject_feed = 0.0; 2184 2185 model.ld_shift_r = 96; 2186 model.ld_shift_g = 48; 2187 model.ld_shift_b = 0; 2188 model.line_mode_color_order = ColorOrder::RGB; 2189 2190 model.is_cis = false; 2191 model.is_sheetfed = false; 2192 model.sensor_id = SensorId::CCD_5345; 2193 model.adc_id = AdcId::WOLFSON_5345; 2194 model.gpio_id = GpioId::MD_5345; 2195 model.motor_id = MotorId::MD_5345; 2196 model.flags = ModelFlag::WARMUP | 2197 ModelFlag::GAMMA_14BIT | 2198 ModelFlag::DARK_CALIBRATION | 2199 ModelFlag::CUSTOM_GAMMA; 2200 model.buttons = GENESYS_HAS_COPY_SW | 2201 GENESYS_HAS_EMAIL_SW | 2202 GENESYS_HAS_POWER_SW | 2203 GENESYS_HAS_OCR_SW | 2204 GENESYS_HAS_SCAN_SW; 2205 model.search_lines = 200; 2206 2207 s_usb_devices->emplace_back(0x0461, 0x038b, model); 2208 2209 2210 model = Genesys_Model(); 2211 model.name = "xerox-travelscanner"; 2212 model.vendor = "Xerox"; 2213 model.model = "Travelscanner 100"; 2214 model.model_id = ModelId::XEROX_TRAVELSCANNER_100; 2215 model.asic_type = AsicType::GL841; 2216 2217 model.resolutions = { 2218 { 2219 { ScanMethod::FLATBED }, 2220 { 600, 300, 150, 75 }, 2221 { 1200, 600, 300, 150, 75 }, 2222 } 2223 }; 2224 2225 model.bpp_gray_values = { 8, 16 }; 2226 model.bpp_color_values = { 8, 16 }; 2227 2228 model.x_offset = 4.0; 2229 model.y_offset = 0.0; 2230 model.x_size = 220.0; 2231 model.y_size = 511; 2232 2233 model.y_offset_calib_white = 0.0; 2234 model.y_size_calib_mm = 4.0; 2235 model.x_offset_calib_black = 0.0; 2236 model.x_size_calib_mm = 220.1334; 2237 2238 model.post_scan = 16.0; 2239 model.eject_feed = 0.0; 2240 2241 model.ld_shift_r = 0; 2242 model.ld_shift_g = 0; 2243 model.ld_shift_b = 0; 2244 2245 model.line_mode_color_order = ColorOrder::RGB; 2246 2247 model.is_cis = true; 2248 model.is_sheetfed = true; 2249 model.sensor_id = SensorId::CCD_ROADWARRIOR; 2250 model.adc_id = AdcId::WOLFSON_XP300; 2251 model.gpio_id = GpioId::DP665; 2252 model.motor_id = MotorId::ROADWARRIOR; 2253 model.flags = ModelFlag::CUSTOM_GAMMA | 2254 ModelFlag::DARK_CALIBRATION; 2255 model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE; 2256 model.search_lines = 400; 2257 2258 s_usb_devices->emplace_back(0x04a7, 0x04ac, model); 2259 2260 2261 model = Genesys_Model(); 2262 model.name = "plustek-opticbook-3600"; 2263 model.vendor = "PLUSTEK"; 2264 model.model = "OpticBook 3600"; 2265 model.model_id = ModelId::PLUSTEK_OPTICPRO_3600; 2266 model.asic_type = AsicType::GL841; 2267 2268 model.resolutions = { 2269 { 2270 { ScanMethod::FLATBED }, 2271 { /*1200,*/ 600, 400, 300, 200, 150, 100, 75 }, 2272 { /*2400,*/ 1200, 600, 400, 300, 200, 150, 100, 75 }, 2273 } 2274 }; 2275 2276 model.bpp_gray_values = { 8, 16 }; 2277 model.bpp_color_values = { 8, 16 }; 2278 2279 model.x_offset = 0.42; 2280 model.y_offset = 6.75; 2281 model.x_size = 216.0; 2282 model.y_size = 297.0; 2283 2284 model.y_offset_calib_white = 0.0; 2285 model.y_size_calib_mm = 4.0; 2286 model.x_offset_calib_black = 0.0; 2287 model.x_size_calib_mm = 213.7834; 2288 2289 model.post_scan = 0.0; 2290 model.eject_feed = 0.0; 2291 2292 model.ld_shift_r = 0; 2293 model.ld_shift_g = 24; 2294 model.ld_shift_b = 48; 2295 2296 model.line_mode_color_order = ColorOrder::RGB; 2297 2298 model.is_cis = false; 2299 model.is_sheetfed = false; 2300 model.sensor_id = SensorId::CCD_PLUSTEK_OPTICPRO_3600; 2301 model.adc_id = AdcId::PLUSTEK_OPTICPRO_3600; 2302 model.gpio_id = GpioId::PLUSTEK_OPTICPRO_3600; 2303 model.motor_id = MotorId::PLUSTEK_OPTICPRO_3600; 2304 model.flags = ModelFlag::UNTESTED | // not fully working yet 2305 ModelFlag::CUSTOM_GAMMA | 2306 ModelFlag::DARK_CALIBRATION; 2307 model.buttons = GENESYS_HAS_NO_BUTTONS; 2308 model.search_lines = 200; 2309 2310 s_usb_devices->emplace_back(0x07b3, 0x0900, model); 2311 2312 2313 2314 model = Genesys_Model(); 2315 model.name = "plustek-opticfilm-7200"; 2316 model.vendor = "PLUSTEK"; 2317 model.model = "OpticFilm 7200"; 2318 model.model_id = ModelId::PLUSTEK_OPTICFILM_7200; 2319 model.asic_type = AsicType::GL842; 2320 2321 model.resolutions = { 2322 { 2323 { ScanMethod::TRANSPARENCY }, 2324 { 7200, 3600, 1800, 900 }, 2325 { 7200, 3600, 1800, 900 }, 2326 } 2327 }; 2328 2329 model.bpp_gray_values = { 16 }; 2330 model.bpp_color_values = { 16 }; 2331 model.default_method = ScanMethod::TRANSPARENCY; 2332 2333 model.x_offset = 0.0; 2334 model.y_offset = 0.0; 2335 model.x_size = 36.0; 2336 model.y_size = 44.0; 2337 2338 model.y_offset_calib_white = 0.0; 2339 model.y_size_calib_mm = 0.0; 2340 model.x_offset_calib_black = 6.5; 2341 model.x_size_calib_mm = 35.9834; 2342 2343 model.x_offset_ta = 0.7f; 2344 model.y_offset_ta = 28.0; 2345 model.x_size_ta = 36.0; 2346 model.y_size_ta = 25.0; 2347 2348 model.y_offset_sensor_to_ta = 0.0; 2349 model.y_offset_calib_black_ta = 6.5; 2350 model.y_offset_calib_white_ta = 0.0; 2351 model.y_size_calib_ta_mm = 2.0; 2352 2353 model.post_scan = 0.0; 2354 model.eject_feed = 0.0; 2355 2356 model.ld_shift_r = 0; 2357 model.ld_shift_g = 12; 2358 model.ld_shift_b = 24; 2359 2360 model.line_mode_color_order = ColorOrder::RGB; 2361 2362 model.is_cis = false; 2363 model.is_sheetfed = false; 2364 2365 model.sensor_id = SensorId::CCD_PLUSTEK_OPTICFILM_7200; 2366 model.adc_id = AdcId::PLUSTEK_OPTICFILM_7200; 2367 model.gpio_id = GpioId::PLUSTEK_OPTICFILM_7200; 2368 model.motor_id = MotorId::PLUSTEK_OPTICFILM_7200; 2369 2370 model.flags = ModelFlag::WARMUP | 2371 ModelFlag::CUSTOM_GAMMA | 2372 ModelFlag::DARK_CALIBRATION | 2373 ModelFlag::SHADING_REPARK; 2374 2375 model.search_lines = 200; 2376 s_usb_devices->emplace_back(0x07b3, 0x0807, model); 2377 2378 2379 model = Genesys_Model(); 2380 model.name = "plustek-opticfilm-7200i"; 2381 model.vendor = "PLUSTEK"; 2382 model.model = "OpticFilm 7200i"; 2383 model.model_id = ModelId::PLUSTEK_OPTICFILM_7200I; 2384 model.asic_type = AsicType::GL843; 2385 2386 model.resolutions = { 2387 { 2388 { ScanMethod::TRANSPARENCY, ScanMethod::TRANSPARENCY_INFRARED }, 2389 { 7200, 3600, 1800, 900 }, 2390 { 7200, 3600, 1800, 900 }, 2391 } 2392 }; 2393 2394 model.bpp_gray_values = { 16 }; 2395 model.bpp_color_values = { 16 }; 2396 model.default_method = ScanMethod::TRANSPARENCY; 2397 2398 model.x_offset = 0.0; 2399 model.y_offset = 0.0; 2400 model.x_size = 36.0; 2401 model.y_size = 44.0; 2402 2403 model.y_offset_calib_white = 0.0; 2404 model.y_size_calib_mm = 0.0; 2405 model.x_offset_calib_black = 6.5; 2406 model.x_size_calib_mm = 35.9834; 2407 2408 model.x_offset_ta = 0.0; 2409 model.y_offset_ta = 29.0; 2410 model.x_size_ta = 36.0; 2411 model.y_size_ta = 24.0; 2412 2413 model.y_offset_sensor_to_ta = 0.0; 2414 model.y_offset_calib_black_ta = 6.5; 2415 model.y_offset_calib_white_ta = 0.0; 2416 model.y_size_calib_ta_mm = 2.0; 2417 2418 model.post_scan = 0.0; 2419 model.eject_feed = 0.0; 2420 2421 model.ld_shift_r = 0; 2422 model.ld_shift_g = 12; 2423 model.ld_shift_b = 24; 2424 2425 model.line_mode_color_order = ColorOrder::RGB; 2426 2427 model.is_cis = false; 2428 model.is_sheetfed = false; 2429 2430 model.sensor_id = SensorId::CCD_PLUSTEK_OPTICFILM_7200I; 2431 model.adc_id = AdcId::PLUSTEK_OPTICFILM_7200I; 2432 model.gpio_id = GpioId::PLUSTEK_OPTICFILM_7200I; 2433 model.motor_id = MotorId::PLUSTEK_OPTICFILM_7200I; 2434 2435 model.flags = ModelFlag::WARMUP | 2436 ModelFlag::CUSTOM_GAMMA | 2437 ModelFlag::DARK_CALIBRATION | 2438 ModelFlag::SHADING_REPARK | 2439 ModelFlag::SWAP_16BIT_DATA; 2440 2441 model.search_lines = 200; 2442 s_usb_devices->emplace_back(0x07b3, 0x0c04, model); 2443 2444 2445 // same as 7200i, just without the infrared channel 2446 model.name = "plustek-opticfilm-7200-v2"; 2447 model.model = "OpticFilm 7200 v2"; 2448 model.resolutions = { 2449 { 2450 { ScanMethod::TRANSPARENCY }, 2451 { 7200, 3600, 1800, 900 }, 2452 { 7200, 3600, 1800, 900 }, 2453 } 2454 }; 2455 s_usb_devices->emplace_back(0x07b3, 0x0c07, model); 2456 2457 2458 model = Genesys_Model(); 2459 model.name = "plustek-opticfilm-7300"; 2460 model.vendor = "PLUSTEK"; 2461 model.model = "OpticFilm 7300"; 2462 model.model_id = ModelId::PLUSTEK_OPTICFILM_7300; 2463 model.asic_type = AsicType::GL843; 2464 2465 model.resolutions = { 2466 { 2467 { ScanMethod::TRANSPARENCY }, 2468 { 7200, 3600, 1800, 900 }, 2469 { 7200, 3600, 1800, 900 }, 2470 } 2471 }; 2472 2473 model.bpp_gray_values = { 16 }; 2474 model.bpp_color_values = { 16 }; 2475 model.default_method = ScanMethod::TRANSPARENCY; 2476 2477 model.x_offset = 0.0; 2478 model.y_offset = 0.0; 2479 model.x_size = 36.0; 2480 model.y_size = 44.0; 2481 2482 model.y_offset_calib_white = 0.0; 2483 model.y_size_calib_mm = 0.0; 2484 model.x_offset_calib_black = 6.5; 2485 model.x_size_calib_mm = 35.9834; 2486 2487 model.x_offset_ta = 0.0; 2488 model.y_offset_ta = 29.0; 2489 model.x_size_ta = 36.0; 2490 model.y_size_ta = 24.0; 2491 2492 model.y_offset_sensor_to_ta = 0.0; 2493 model.y_offset_calib_black_ta = 6.5; 2494 model.y_offset_calib_white_ta = 0.0; 2495 model.y_size_calib_ta_mm = 2.0; 2496 2497 model.post_scan = 0.0; 2498 model.eject_feed = 0.0; 2499 2500 model.ld_shift_r = 0; 2501 model.ld_shift_g = 12; 2502 model.ld_shift_b = 24; 2503 2504 model.line_mode_color_order = ColorOrder::RGB; 2505 2506 model.is_cis = false; 2507 model.is_sheetfed = false; 2508 2509 model.sensor_id = SensorId::CCD_PLUSTEK_OPTICFILM_7300; 2510 model.adc_id = AdcId::PLUSTEK_OPTICFILM_7300; 2511 model.gpio_id = GpioId::PLUSTEK_OPTICFILM_7300; 2512 model.motor_id = MotorId::PLUSTEK_OPTICFILM_7300; 2513 2514 model.flags = ModelFlag::WARMUP | 2515 ModelFlag::CUSTOM_GAMMA | 2516 ModelFlag::DARK_CALIBRATION | 2517 ModelFlag::SHADING_REPARK; 2518 2519 model.search_lines = 200; 2520 s_usb_devices->emplace_back(0x07b3, 0x0c12, model); 2521 2522 2523 // same as 7300, same USB ID as 7400-v2 2524 model.name = "plustek-opticfilm-7400-v1"; 2525 model.model = "OpticFilm 7400 (v1)"; 2526 s_usb_devices->emplace_back(0x07b3, 0x0c3a, 0x0400, model); 2527 2528 2529 model = Genesys_Model(); 2530 model.name = "plustek-opticfilm-7400-v2"; 2531 model.vendor = "PLUSTEK"; 2532 model.model = "OpticFilm 7400 (v2)"; 2533 model.model_id = ModelId::PLUSTEK_OPTICFILM_7400; 2534 model.asic_type = AsicType::GL845; 2535 2536 model.resolutions = { 2537 { 2538 { ScanMethod::TRANSPARENCY }, 2539 { 7200, 3600, 2400, 1200, 600 }, 2540 { 7200, 3600, 2400, 1200, 600 }, 2541 } 2542 }; 2543 2544 model.bpp_gray_values = { 16 }; 2545 model.bpp_color_values = { 16 }; 2546 model.default_method = ScanMethod::TRANSPARENCY; 2547 2548 model.x_offset = 0.0; 2549 model.y_offset = 0.0; 2550 model.x_size = 36.0; 2551 model.y_size = 44.0; 2552 2553 model.y_offset_calib_white = 0.0; 2554 model.y_size_calib_mm = 0.0; 2555 model.x_offset_calib_black = 6.5; 2556 model.x_size_calib_mm = 36.83; 2557 2558 model.x_offset_ta = 0.5; 2559 model.y_offset_ta = 29.0; 2560 model.x_size_ta = 36.33; 2561 model.y_size_ta = 25.0; 2562 2563 model.y_offset_sensor_to_ta = 0.0; 2564 model.y_offset_calib_black_ta = 6.5; 2565 model.y_offset_calib_white_ta = 0.0; 2566 model.y_size_calib_ta_mm = 2.0; 2567 2568 model.post_scan = 0.0; 2569 model.eject_feed = 0.0; 2570 2571 model.ld_shift_r = 0; 2572 model.ld_shift_g = 12; 2573 model.ld_shift_b = 24; 2574 2575 model.line_mode_color_order = ColorOrder::RGB; 2576 2577 model.is_cis = false; 2578 model.is_sheetfed = false; 2579 2580 model.sensor_id = SensorId::CCD_PLUSTEK_OPTICFILM_7400; 2581 model.adc_id = AdcId::PLUSTEK_OPTICFILM_7400; 2582 model.gpio_id = GpioId::PLUSTEK_OPTICFILM_7400; 2583 model.motor_id = MotorId::PLUSTEK_OPTICFILM_7400; 2584 2585 model.flags = ModelFlag::CUSTOM_GAMMA | 2586 ModelFlag::DARK_CALIBRATION | 2587 ModelFlag::SHADING_REPARK; 2588 2589 model.search_lines = 200; 2590 s_usb_devices->emplace_back(0x07b3, 0x0c3a, 0x0605, model); 2591 2592 2593 // same as 7400-v2 2594 model.name = "plustek-opticfilm-8100"; 2595 model.model = "OpticFilm 8100"; 2596 s_usb_devices->emplace_back(0x07b3, 0x130c, model); 2597 2598 2599 model = Genesys_Model(); 2600 model.name = "plustek-opticfilm-7500i"; 2601 model.vendor = "PLUSTEK"; 2602 model.model = "OpticFilm 7500i"; 2603 model.model_id = ModelId::PLUSTEK_OPTICFILM_7500I; 2604 model.asic_type = AsicType::GL843; 2605 2606 model.resolutions = { 2607 { 2608 { ScanMethod::TRANSPARENCY, ScanMethod::TRANSPARENCY_INFRARED }, 2609 { 7200, 3600, 1800, 900 }, 2610 { 7200, 3600, 1800, 900 }, 2611 } 2612 }; 2613 2614 model.bpp_gray_values = { 16 }; 2615 model.bpp_color_values = { 16 }; 2616 model.default_method = ScanMethod::TRANSPARENCY; 2617 2618 model.x_offset = 0.0; 2619 model.y_offset = 0.0; 2620 model.x_size = 36.0; 2621 model.y_size = 44.0; 2622 2623 model.y_offset_calib_white = 0.0; 2624 model.y_size_calib_mm = 0.0; 2625 model.x_offset_calib_black = 6.5; 2626 2627 model.x_offset_ta = 0.0; 2628 model.y_offset_ta = 29.0; 2629 model.x_size_ta = 36.0; 2630 model.y_size_ta = 24.0; 2631 model.x_size_calib_mm = 35.9834; 2632 2633 model.y_offset_sensor_to_ta = 0.0; 2634 model.y_offset_calib_black_ta = 6.5; 2635 model.y_offset_calib_white_ta = 0.0; 2636 model.y_size_calib_ta_mm = 2.0; 2637 2638 model.post_scan = 0.0; 2639 model.eject_feed = 0.0; 2640 2641 model.ld_shift_r = 0; 2642 model.ld_shift_g = 12; 2643 model.ld_shift_b = 24; 2644 2645 model.line_mode_color_order = ColorOrder::RGB; 2646 2647 model.is_cis = false; 2648 model.is_sheetfed = false; 2649 2650 model.sensor_id = SensorId::CCD_PLUSTEK_OPTICFILM_7500I; 2651 model.adc_id = AdcId::PLUSTEK_OPTICFILM_7500I; 2652 model.gpio_id = GpioId::PLUSTEK_OPTICFILM_7500I; 2653 model.motor_id = MotorId::PLUSTEK_OPTICFILM_7500I; 2654 2655 model.flags = ModelFlag::WARMUP | 2656 ModelFlag::CUSTOM_GAMMA | 2657 ModelFlag::DARK_CALIBRATION | 2658 ModelFlag::SHADING_REPARK; 2659 2660 model.search_lines = 200; 2661 s_usb_devices->emplace_back(0x07b3, 0x0c13, model); 2662 2663 2664 // same as 7500i 2665 model.name = "plustek-opticfilm-7600i-v1"; 2666 model.model = "OpticFilm 7600i (v1)"; 2667 s_usb_devices->emplace_back(0x07b3, 0x0c3b, 0x0400, model); 2668 2669 2670 model = Genesys_Model(); 2671 model.name = "plustek-opticfilm-8200i"; 2672 model.vendor = "PLUSTEK"; 2673 model.model = "OpticFilm 8200i"; 2674 model.model_id = ModelId::PLUSTEK_OPTICFILM_8200I; 2675 model.asic_type = AsicType::GL845; 2676 2677 model.resolutions = { 2678 { 2679 { ScanMethod::TRANSPARENCY, ScanMethod::TRANSPARENCY_INFRARED }, 2680 { 7200, 3600, 1800, 900 }, 2681 { 7200, 3600, 1800, 900 }, 2682 } 2683 }; 2684 2685 model.bpp_gray_values = { 16 }; 2686 model.bpp_color_values = { 16 }; 2687 model.default_method = ScanMethod::TRANSPARENCY; 2688 2689 model.x_offset = 0.0; 2690 model.y_offset = 0.0; 2691 model.x_size = 36.0; 2692 model.y_size = 44.0; 2693 2694 model.y_offset_calib_white = 0.0; 2695 model.y_size_calib_mm = 0.0; 2696 model.x_offset_calib_black = 6.5; 2697 model.x_size_calib_mm = 36.83; 2698 2699 model.x_offset_ta = 0.5; 2700 model.y_offset_ta = 28.5; 2701 model.x_size_ta = 36.33; 2702 model.y_size_ta = 25.0; 2703 2704 model.y_offset_sensor_to_ta = 0.0; 2705 model.y_offset_calib_black_ta = 6.5; 2706 model.y_offset_calib_white_ta = 0.0; 2707 model.y_size_calib_ta_mm = 2.0; 2708 2709 model.post_scan = 0.0; 2710 model.eject_feed = 0.0; 2711 2712 model.ld_shift_r = 0; 2713 model.ld_shift_g = 12; 2714 model.ld_shift_b = 24; 2715 2716 model.line_mode_color_order = ColorOrder::RGB; 2717 2718 model.is_cis = false; 2719 model.is_sheetfed = false; 2720 2721 model.sensor_id = SensorId::CCD_PLUSTEK_OPTICFILM_8200I; 2722 model.adc_id = AdcId::PLUSTEK_OPTICFILM_8200I; 2723 model.gpio_id = GpioId::PLUSTEK_OPTICFILM_8200I; 2724 model.motor_id = MotorId::PLUSTEK_OPTICFILM_8200I; 2725 2726 model.flags = ModelFlag::CUSTOM_GAMMA | 2727 ModelFlag::DARK_CALIBRATION | 2728 ModelFlag::SHADING_REPARK; 2729 2730 model.search_lines = 200; 2731 s_usb_devices->emplace_back(0x07b3, 0x130d, model); 2732 2733 2734 // same as 8200i 2735 model.name = "plustek-opticfilm-7600i-v2"; 2736 model.model = "OpticFilm 7600i (v2)"; 2737 s_usb_devices->emplace_back(0x07b3, 0x0c3b, 0x0605, model); 2738 2739 2740 model = Genesys_Model(); 2741 model.name = "hewlett-packard-scanjet-N6310"; 2742 model.vendor = "Hewlett Packard"; 2743 model.model = "ScanJet N6310"; 2744 model.model_id = ModelId::HP_SCANJET_N6310; 2745 model.asic_type = AsicType::GL847; 2746 2747 model.resolutions = { 2748 { 2749 { ScanMethod::FLATBED }, 2750 { 2400, 1200, 600, 400, 300, 200, 150, 100, 75 }, 2751 { 2400, 1200, 600, 400, 300, 200, 150, 100, 75 }, 2752 } 2753 }; 2754 2755 model.bpp_gray_values = { 8, 16 }; 2756 model.bpp_color_values = { 8, 16 }; 2757 2758 model.x_offset = 6; 2759 model.y_offset = 2; 2760 model.x_size = 216; 2761 model.y_size = 511; 2762 2763 model.y_offset_calib_white = 0.0; 2764 model.y_size_calib_mm = 4.0; // FIXME: y_offset is liely incorrect 2765 model.x_offset_calib_black = 0.0; 2766 model.x_size_calib_mm = 452.12; 2767 2768 model.post_scan = 0; 2769 model.eject_feed = 0; 2770 2771 model.ld_shift_r = 0; 2772 model.ld_shift_g = 0; 2773 model.ld_shift_b = 0; 2774 2775 model.line_mode_color_order = ColorOrder::RGB; 2776 2777 model.is_cis = false; 2778 model.is_sheetfed = false; 2779 model.sensor_id = SensorId::CCD_HP_N6310; 2780 model.adc_id = AdcId::CANON_LIDE_200; // Not defined yet for N6310 2781 model.gpio_id = GpioId::HP_N6310; 2782 model.motor_id = MotorId::CANON_LIDE_200; // Not defined yet for N6310 2783 model.flags = ModelFlag::UNTESTED | 2784 ModelFlag::GAMMA_14BIT | 2785 ModelFlag::DARK_CALIBRATION | 2786 ModelFlag::CUSTOM_GAMMA | 2787 ModelFlag::DISABLE_ADC_CALIBRATION | 2788 ModelFlag::DISABLE_EXPOSURE_CALIBRATION | 2789 ModelFlag::DISABLE_SHADING_CALIBRATION; 2790 2791 model.buttons = GENESYS_HAS_NO_BUTTONS; 2792 model.search_lines = 100; 2793 2794 s_usb_devices->emplace_back(0x03f0, 0x4705, model); 2795 2796 2797 model = Genesys_Model(); 2798 model.name = "plustek-opticbook-3800"; 2799 model.vendor = "PLUSTEK"; 2800 model.model = "OpticBook 3800"; 2801 model.model_id = ModelId::PLUSTEK_OPTICBOOK_3800; 2802 model.asic_type = AsicType::GL845; 2803 2804 model.resolutions = { 2805 { 2806 { ScanMethod::FLATBED }, 2807 { 1200, 600, 300, 150, 100, 75 }, 2808 { 1200, 600, 300, 150, 100, 75 }, 2809 } 2810 }; 2811 2812 model.bpp_gray_values = { 8, 16 }; 2813 model.bpp_color_values = { 8, 16 }; 2814 2815 model.x_offset = 7.2; 2816 model.y_offset = 14.7; 2817 model.x_size = 217.7; 2818 model.y_size = 300.0; 2819 2820 model.y_offset_calib_white = 9.0; 2821 model.y_size_calib_mm = 4.0; 2822 model.x_offset_calib_black = 0.0; 2823 model.x_size_calib_mm = 215.9; 2824 2825 model.post_scan = 0.0; 2826 model.eject_feed = 0.0; 2827 2828 model.ld_shift_r = 0; 2829 model.ld_shift_g = 24; 2830 model.ld_shift_b = 48; 2831 2832 model.line_mode_color_order = ColorOrder::RGB; 2833 2834 model.is_cis = false; 2835 model.is_sheetfed = false; 2836 model.sensor_id = SensorId::CCD_PLUSTEK_OPTICBOOK_3800; 2837 model.adc_id = AdcId::PLUSTEK_OPTICBOOK_3800; 2838 model.gpio_id = GpioId::PLUSTEK_OPTICBOOK_3800; 2839 model.motor_id = MotorId::PLUSTEK_OPTICBOOK_3800; 2840 model.flags = ModelFlag::CUSTOM_GAMMA; 2841 model.buttons = GENESYS_HAS_NO_BUTTONS; // TODO there are 4 buttons to support 2842 model.search_lines = 100; 2843 2844 s_usb_devices->emplace_back(0x07b3, 0x1300, model); 2845 2846 2847 model = Genesys_Model(); 2848 model.name = "canon-image-formula-101"; 2849 model.vendor = "Canon"; 2850 model.model = "Image Formula 101"; 2851 model.model_id = ModelId::CANON_IMAGE_FORMULA_101; 2852 model.asic_type = AsicType::GL846; 2853 2854 model.resolutions = { 2855 { 2856 { ScanMethod::FLATBED }, 2857 { 1200, 600, 300, 150, 100, 75 }, 2858 { 1200, 600, 300, 150, 100, 75 }, 2859 } 2860 }; 2861 2862 model.bpp_gray_values = { 8, 16 }; 2863 model.bpp_color_values = { 8, 16 }; 2864 2865 model.x_offset = 7.2; 2866 model.y_offset = 14.7; 2867 model.x_size = 217.7; 2868 model.y_size = 300.0; 2869 2870 model.y_offset_calib_white = 9.0; 2871 model.y_size_calib_mm = 4.0; 2872 model.x_offset_calib_black = 0.0; 2873 model.x_size_calib_mm = 228.6; 2874 2875 model.post_scan = 0.0; 2876 model.eject_feed = 0.0; 2877 2878 model.ld_shift_r = 0; 2879 model.ld_shift_g = 24; 2880 model.ld_shift_b = 48; 2881 2882 model.line_mode_color_order = ColorOrder::RGB; 2883 2884 model.is_cis = false; 2885 model.is_sheetfed = false; 2886 model.sensor_id = SensorId::CCD_IMG101; 2887 model.adc_id = AdcId::IMG101; 2888 model.gpio_id = GpioId::IMG101; 2889 model.motor_id = MotorId::IMG101; 2890 model.flags = ModelFlag::CUSTOM_GAMMA | 2891 ModelFlag::UNTESTED; 2892 model.buttons = GENESYS_HAS_NO_BUTTONS ; 2893 model.search_lines = 100; 2894 2895 s_usb_devices->emplace_back(0x1083, 0x162e, model); 2896} 2897 2898void verify_usb_device_tables() 2899{ 2900 for (const auto& device : *s_usb_devices) { 2901 const auto& model = device.model(); 2902 2903 if (model.x_size_calib_mm == 0.0f) { 2904 throw SaneException("Calibration width can't be zero"); 2905 } 2906 2907 if (model.has_method(ScanMethod::FLATBED)) { 2908 if (model.y_size_calib_mm == 0.0f) { 2909 throw SaneException("Calibration size can't be zero"); 2910 } 2911 } 2912 if (model.has_method(ScanMethod::TRANSPARENCY) || 2913 model.has_method(ScanMethod::TRANSPARENCY_INFRARED)) 2914 { 2915 if (model.y_size_calib_ta_mm == 0.0f) { 2916 throw SaneException("Calibration size can't be zero"); 2917 } 2918 } 2919 } 2920} 2921 2922} // namespace genesys 2923