1/* sane - Scanner Access Now Easy. 2 3 Copyright (C) 2019 Povilas Kanapickas <povilas@radix.lt> 4 5 This file is part of the SANE package. 6 7 This program is free software; you can redistribute it and/or 8 modify it under the terms of the GNU General Public License as 9 published by the Free Software Foundation; either version 2 of the 10 License, or (at your option) any later version. 11 12 This program is distributed in the hope that it will be useful, but 13 WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 General Public License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with this program. If not, see <https://www.gnu.org/licenses/>. 19*/ 20 21#define DEBUG_DECLARE_ONLY 22 23#include "low.h" 24 25namespace genesys { 26 27StaticInit<std::vector<Genesys_Motor>> s_motors; 28 29void genesys_init_motor_tables() 30{ 31 s_motors.init(); 32 33 MotorProfile profile; 34 35 Genesys_Motor motor; 36 motor.id = MotorId::UMAX; 37 motor.base_ydpi = 2400; 38 motor.profiles.push_back({MotorSlope::create_from_steps(11000, 3000, 128), StepType::FULL, 0}); 39 motor.profiles.push_back({MotorSlope::create_from_steps(11000, 3000, 128), StepType::HALF, 0}); 40 s_motors->push_back(std::move(motor)); 41 42 43 motor = Genesys_Motor(); 44 motor.id = MotorId::MD_5345; // MD5345/6228/6471 45 motor.base_ydpi = 2400; 46 motor.profiles.push_back({MotorSlope::create_from_steps(2000, 1375, 128), StepType::FULL, 0}); 47 motor.profiles.push_back({MotorSlope::create_from_steps(2000, 1375, 128), StepType::HALF, 0}); 48 s_motors->push_back(std::move(motor)); 49 50 51 motor = Genesys_Motor(); 52 motor.id = MotorId::ST24; 53 motor.base_ydpi = 2400; 54 motor.profiles.push_back({MotorSlope::create_from_steps(2289, 2100, 128), StepType::FULL, 0}); 55 motor.profiles.push_back({MotorSlope::create_from_steps(2289, 2100, 128), StepType::HALF, 0}); 56 s_motors->push_back(std::move(motor)); 57 58 59 motor = Genesys_Motor(); 60 motor.id = MotorId::HP3670; 61 motor.base_ydpi = 1200; 62 motor.profiles.push_back({MotorSlope::create_from_steps(11000, 3000, 128), StepType::FULL, 0}); 63 motor.profiles.push_back({MotorSlope::create_from_steps(11000, 3000, 128), StepType::HALF, 0}); 64 s_motors->push_back(std::move(motor)); 65 66 67 motor = Genesys_Motor(); 68 motor.id = MotorId::HP2400; 69 motor.base_ydpi = 1200; 70 motor.profiles.push_back({MotorSlope::create_from_steps(11000, 3000, 128), StepType::FULL, 0}); 71 motor.profiles.push_back({MotorSlope::create_from_steps(11000, 3000, 128), StepType::HALF, 0}); 72 s_motors->push_back(std::move(motor)); 73 74 75 motor = Genesys_Motor(); 76 motor.id = MotorId::HP2300; 77 motor.base_ydpi = 1200; 78 motor.profiles.push_back({MotorSlope::create_from_steps(3200, 1200, 128), StepType::FULL, 0}); 79 motor.profiles.push_back({MotorSlope::create_from_steps(3200, 1200, 128), StepType::HALF, 0}); 80 s_motors->push_back(std::move(motor)); 81 82 83 motor = Genesys_Motor(); 84 motor.id = MotorId::CANON_LIDE_35; 85 motor.base_ydpi = 1200; 86 87 profile = MotorProfile{MotorSlope::create_from_steps(3500, 1300, 150), StepType::HALF, 0}; 88 profile.resolutions = { 75, 150, 200, 300, 600 }; 89 motor.profiles.push_back(profile); 90 91 profile = MotorProfile{MotorSlope::create_from_steps(3500, 1300, 150), StepType::QUARTER, 0}; 92 profile.resolutions = { 1200, 2400 }; 93 motor.profiles.push_back(profile); 94 95 profile = MotorProfile{MotorSlope::create_from_steps(3500, 1400, 150), StepType::FULL, 0}; 96 profile.resolutions = { 75, 150, 200, 300 }; 97 motor.fast_profiles.push_back(profile); 98 99 profile = MotorProfile{MotorSlope::create_from_steps(6000, 3000, 100), StepType::FULL, 0}; 100 profile.resolutions = { 600, 1200, 2400 }; 101 motor.fast_profiles.push_back(profile); 102 103 s_motors->push_back(std::move(motor)); 104 105 106 motor = Genesys_Motor(); 107 motor.id = MotorId::CANON_LIDE_60; 108 motor.base_ydpi = 1200; 109 110 profile = MotorProfile{MotorSlope::create_from_steps(3500, 1400, 150), StepType::HALF, 0}; 111 motor.profiles.push_back(profile); 112 113 profile = MotorProfile{MotorSlope::create_from_steps(3500, 1400, 150), StepType::FULL, 0}; 114 profile.resolutions = { 75, 150, 300 }; 115 motor.fast_profiles.push_back(profile); 116 117 profile = MotorProfile{MotorSlope::create_from_steps(6000, 3000, 100), StepType::FULL, 0}; 118 profile.resolutions = { 600, 1200, 2400 }; 119 motor.fast_profiles.push_back(profile); 120 121 s_motors->push_back(std::move(motor)); 122 123 124 motor = Genesys_Motor(); 125 motor.id = MotorId::CANON_LIDE_90; 126 motor.base_ydpi = 1200; 127 profile = {MotorSlope::create_from_steps(8000, 3000, 200), StepType::FULL, 0}; 128 profile.resolutions = { 150, 300 }; 129 motor.profiles.push_back(profile); 130 131 profile = {MotorSlope::create_from_steps(7000, 3000, 200), StepType::HALF, 0}; 132 profile.resolutions = { 600, 1200 }; 133 motor.profiles.push_back(profile); 134 135 profile = {MotorSlope::create_from_steps(7000, 3000, 200), StepType::QUARTER, 0}; 136 profile.resolutions = { 2400 }; 137 motor.profiles.push_back(profile); 138 s_motors->push_back(std::move(motor)); 139 140 141 motor = Genesys_Motor(); 142 motor.id = MotorId::XP200; 143 motor.base_ydpi = 600; 144 motor.profiles.push_back({MotorSlope::create_from_steps(3500, 1300, 60), StepType::FULL, 0}); 145 motor.profiles.push_back({MotorSlope::create_from_steps(3500, 1300, 60), StepType::HALF, 0}); 146 motor.fast_profiles.push_back({MotorSlope::create_from_steps(3500, 1300, 60), StepType::FULL, 0}); 147 s_motors->push_back(std::move(motor)); 148 149 150 motor = Genesys_Motor(); 151 motor.id = MotorId::XP300; 152 motor.base_ydpi = 300; 153 // works best with GPIO10, GPIO14 off 154 profile = MotorProfile{MotorSlope::create_from_steps(3700, 3700, 2), StepType::FULL, 0}; 155 profile.resolutions = {}; // used during fast moves 156 motor.profiles.push_back(profile); 157 158 // FIXME: this motor profile is useless 159 profile = MotorProfile{MotorSlope::create_from_steps(11000, 11000, 2), StepType::HALF, 0}; 160 profile.resolutions = {75, 150, 300, 600}; 161 motor.profiles.push_back(profile); 162 163 profile = MotorProfile{MotorSlope::create_from_steps(3700, 3700, 2), StepType::FULL, 0}; 164 motor.fast_profiles.push_back(profile); 165 s_motors->push_back(std::move(motor)); 166 167 168 motor = Genesys_Motor(); 169 motor.id = MotorId::DP665; 170 motor.base_ydpi = 750; 171 172 profile = MotorProfile{MotorSlope::create_from_steps(3000, 2500, 10), StepType::FULL, 0}; 173 profile.resolutions = {75, 150}; 174 motor.profiles.push_back(profile); 175 176 // FIXME: this motor profile is useless 177 profile = MotorProfile{MotorSlope::create_from_steps(11000, 11000, 2), StepType::HALF, 0}; 178 profile.resolutions = {300, 600, 1200}; 179 motor.profiles.push_back(profile); 180 181 profile = MotorProfile{MotorSlope::create_from_steps(3000, 2500, 10), StepType::FULL, 0}; 182 motor.fast_profiles.push_back(profile); 183 s_motors->push_back(std::move(motor)); 184 185 186 motor = Genesys_Motor(); 187 motor.id = MotorId::ROADWARRIOR; 188 motor.base_ydpi = 750; 189 190 profile = MotorProfile{MotorSlope::create_from_steps(3000, 2600, 10), StepType::FULL, 0}; 191 profile.resolutions = {75, 150}; 192 motor.profiles.push_back(profile); 193 194 // FIXME: this motor profile is useless 195 profile = MotorProfile{MotorSlope::create_from_steps(11000, 11000, 2), StepType::HALF, 0}; 196 profile.resolutions = {300, 600, 1200}; 197 motor.profiles.push_back(profile); 198 199 profile = MotorProfile{MotorSlope::create_from_steps(3000, 2600, 10), StepType::FULL, 0}; 200 motor.fast_profiles.push_back(profile); 201 s_motors->push_back(std::move(motor)); 202 203 204 motor = Genesys_Motor(); 205 motor.id = MotorId::DSMOBILE_600; 206 motor.base_ydpi = 750; 207 208 profile = MotorProfile{MotorSlope::create_from_steps(6666, 3700, 8), StepType::FULL, 0}; 209 profile.resolutions = {75, 150}; 210 motor.profiles.push_back(profile); 211 212 profile = MotorProfile{MotorSlope::create_from_steps(6666, 3700, 8), StepType::HALF, 0}; 213 profile.resolutions = {300, 600, 1200}; 214 motor.profiles.push_back(profile); 215 216 profile = MotorProfile{MotorSlope::create_from_steps(6666, 3700, 8), StepType::FULL, 0}; 217 motor.fast_profiles.push_back(profile); 218 s_motors->push_back(std::move(motor)); 219 220 221 motor = Genesys_Motor(); 222 motor.id = MotorId::CANON_LIDE_100; 223 motor.base_ydpi = 1200; 224 motor.profiles.push_back({MotorSlope::create_from_steps(46876, 864, 255), 225 StepType::HALF, 1432}); 226 motor.profiles.push_back({MotorSlope::create_from_steps(46876, 864, 279), 227 StepType::QUARTER, 2712}); 228 motor.profiles.push_back({MotorSlope::create_from_steps(31680, 864, 247), 229 StepType::EIGHTH, 5280}); 230 s_motors->push_back(std::move(motor)); 231 232 233 motor = Genesys_Motor(); 234 motor.id = MotorId::CANON_LIDE_200; 235 motor.base_ydpi = 1200; 236 motor.profiles.push_back({MotorSlope::create_from_steps(46876, 864, 255), 237 StepType::HALF, 1432}); 238 motor.profiles.push_back({MotorSlope::create_from_steps(46876, 864, 279), 239 StepType::QUARTER, 2712}); 240 motor.profiles.push_back({MotorSlope::create_from_steps(31680, 864, 247), 241 StepType::EIGHTH, 5280}); 242 motor.profiles.push_back({MotorSlope::create_from_steps(31680, 864, 247), 243 StepType::EIGHTH, 10416}); 244 s_motors->push_back(std::move(motor)); 245 246 247 motor = Genesys_Motor(); 248 motor.id = MotorId::CANON_LIDE_700; 249 motor.base_ydpi = 1200; 250 motor.profiles.push_back({MotorSlope::create_from_steps(46876, 534, 255), 251 StepType::HALF, 1424}); 252 motor.profiles.push_back({MotorSlope::create_from_steps(46876, 534, 255), 253 StepType::HALF, 1504}); 254 motor.profiles.push_back({MotorSlope::create_from_steps(46876, 2022, 127), 255 StepType::HALF, 2696}); 256 motor.profiles.push_back({MotorSlope::create_from_steps(46876, 534, 255), 257 StepType::HALF, 2848}); 258 motor.profiles.push_back({MotorSlope::create_from_steps(46876, 15864, 2), 259 StepType::EIGHTH, 10576}); 260 s_motors->push_back(std::move(motor)); 261 262 263 motor = Genesys_Motor(); 264 motor.id = MotorId::KVSS080; 265 motor.base_ydpi = 1200; 266 motor.profiles.push_back({MotorSlope::create_from_steps(44444, 500, 489), 267 StepType::HALF, 8000}); 268 s_motors->push_back(std::move(motor)); 269 270 271 motor = Genesys_Motor(); 272 motor.id = MotorId::G4050; 273 motor.base_ydpi = 2400; 274 motor.profiles.push_back({MotorSlope::create_from_steps(7842, 320, 602), 275 StepType::HALF, 8016}); 276 motor.profiles.push_back({MotorSlope::create_from_steps(9422, 254, 1004), 277 StepType::HALF, 15624}); 278 motor.profiles.push_back({MotorSlope::create_from_steps(28032, 2238, 604), 279 StepType::HALF, 56064}); 280 motor.profiles.push_back({MotorSlope::create_from_steps(42752, 1706, 610), 281 StepType::QUARTER, 42752}); 282 s_motors->push_back(std::move(motor)); 283 284 285 motor = Genesys_Motor(); 286 motor.id = MotorId::CANON_4400F; 287 motor.base_ydpi = 2400; 288 289 profile = MotorProfile(); 290 profile.slope = MotorSlope::create_from_steps(28597 * 2, 727 * 2, 200); 291 profile.step_type = StepType::QUARTER; 292 profile.motor_vref = 1; 293 profile.resolutions = { 300, 600 }; 294 motor.profiles.push_back(std::move(profile)); 295 296 profile = MotorProfile(); 297 profile.slope = MotorSlope::create_from_steps(28597 * 2, 727 * 2, 200); 298 profile.step_type = StepType::QUARTER; 299 profile.motor_vref = 0; 300 profile.resolutions = { 1200, 2400, 4800, 9600 }; 301 motor.profiles.push_back(std::move(profile)); 302 303 profile = MotorProfile(); 304 profile.slope = MotorSlope::create_from_steps(28597 * 2, 279 * 2, 1000); 305 profile.step_type = StepType::QUARTER; 306 profile.motor_vref = 0; 307 motor.fast_profiles.push_back(std::move(profile)); 308 309 s_motors->push_back(std::move(motor)); 310 311 312 motor = Genesys_Motor(); 313 motor.id = MotorId::CANON_5600F; 314 motor.base_ydpi = 2400; 315 316 // FIXME: real limit is 134, but for some reason the motor can't acquire that speed. 317 profile = MotorProfile(); 318 profile.slope = MotorSlope::create_from_steps(2500 * 2, 134 * 2, 1000); 319 profile.step_type = StepType::HALF; 320 profile.motor_vref = 0; 321 profile.resolutions = { 75, 150 }; 322 motor.profiles.push_back(std::move(profile)); 323 324 profile = MotorProfile(); 325 profile.slope = MotorSlope::create_from_steps(2500 * 2, 200 * 2, 1000); 326 profile.step_type = StepType::QUARTER; 327 profile.motor_vref = 0; 328 profile.resolutions = { 300, 600, 1200, 2400, 4800 }; 329 motor.profiles.push_back(std::move(profile)); 330 331 profile = MotorProfile(); 332 profile.slope = MotorSlope::create_from_steps(2500 * 2, 200 * 2, 1000); 333 profile.step_type = StepType::QUARTER; 334 profile.motor_vref = 0; 335 motor.fast_profiles.push_back(std::move(profile)); 336 337 s_motors->push_back(std::move(motor)); 338 339 340 motor = Genesys_Motor(); 341 motor.id = MotorId::CANON_8400F; 342 motor.base_ydpi = 1600; 343 344 profile = MotorProfile(); 345 profile.slope = MotorSlope::create_from_steps(20202 * 4, 333 * 4, 100); 346 profile.step_type = StepType::QUARTER; 347 profile.motor_vref = 0; 348 profile.resolutions = VALUE_FILTER_ANY; 349 profile.scan_methods = { ScanMethod::FLATBED }; 350 motor.profiles.push_back(std::move(profile)); 351 352 profile = MotorProfile(); 353 profile.slope = MotorSlope::create_from_steps(65535 * 4, 333 * 4, 100); 354 profile.step_type = StepType::QUARTER; 355 profile.motor_vref = 2; 356 profile.resolutions = VALUE_FILTER_ANY; 357 profile.scan_methods = { ScanMethod::TRANSPARENCY, ScanMethod::TRANSPARENCY_INFRARED }; 358 motor.profiles.push_back(std::move(profile)); 359 360 profile = MotorProfile(); 361 profile.slope = MotorSlope::create_from_steps(65535 * 4, 333 * 4, 200); 362 profile.step_type = StepType::QUARTER; 363 profile.motor_vref = 2; 364 profile.resolutions = VALUE_FILTER_ANY; 365 profile.scan_methods = VALUE_FILTER_ANY; 366 motor.fast_profiles.push_back(std::move(profile)); 367 368 s_motors->push_back(std::move(motor)); 369 370 371 motor = Genesys_Motor(); 372 motor.id = MotorId::CANON_8600F; 373 motor.base_ydpi = 2400; 374 375 profile = MotorProfile(); 376 profile.slope = MotorSlope::create_from_steps(54612, 1500, 219); 377 profile.step_type = StepType::QUARTER; 378 profile.motor_vref = 3; 379 profile.resolutions = { 300, 600 }; 380 profile.scan_methods = { ScanMethod::FLATBED }; 381 motor.profiles.push_back(std::move(profile)); 382 383 profile = MotorProfile(); 384 profile.slope = MotorSlope::create_from_steps(54612, 1500, 219); 385 profile.step_type = StepType::QUARTER; 386 profile.motor_vref = 2; 387 profile.resolutions = { 1200, 2400 }; 388 profile.scan_methods = { ScanMethod::FLATBED }; 389 motor.profiles.push_back(std::move(profile)); 390 391 profile = MotorProfile(); 392 profile.slope = MotorSlope::create_from_steps(54612, 1500, 219); 393 profile.step_type = StepType::QUARTER; 394 profile.motor_vref = 2; 395 profile.resolutions = { 4800 }; 396 profile.scan_methods = { ScanMethod::FLATBED }; 397 motor.profiles.push_back(std::move(profile)); 398 399 profile = MotorProfile(); 400 profile.slope = MotorSlope::create_from_steps(54612, 1500, 219); 401 profile.step_type = StepType::QUARTER; 402 profile.motor_vref = 2; 403 profile.resolutions = { 300, 600 }; 404 profile.scan_methods = { ScanMethod::TRANSPARENCY, 405 ScanMethod::TRANSPARENCY_INFRARED }; 406 motor.profiles.push_back(std::move(profile)); 407 408 profile = MotorProfile(); 409 profile.slope = MotorSlope::create_from_steps(54612, 1500, 219); 410 profile.step_type = StepType::QUARTER; 411 profile.motor_vref = 1; 412 profile.resolutions = { 1200, 2400 }; 413 profile.scan_methods = { ScanMethod::TRANSPARENCY, 414 ScanMethod::TRANSPARENCY_INFRARED }; 415 motor.profiles.push_back(std::move(profile)); 416 417 profile = MotorProfile(); 418 profile.slope = MotorSlope::create_from_steps(54612, 1500, 219); 419 profile.step_type = StepType::QUARTER; 420 profile.motor_vref = 0; 421 profile.resolutions = { 4800 }; 422 profile.scan_methods = { ScanMethod::TRANSPARENCY, 423 ScanMethod::TRANSPARENCY_INFRARED }; 424 motor.profiles.push_back(std::move(profile)); 425 426 profile = MotorProfile(); 427 profile.slope = MotorSlope::create_from_steps(59240, 582, 1020); 428 profile.step_type = StepType::QUARTER; 429 profile.motor_vref = 2; 430 motor.fast_profiles.push_back(std::move(profile)); 431 432 s_motors->push_back(std::move(motor)); 433 434 435 motor = Genesys_Motor(); 436 motor.id = MotorId::CANON_LIDE_110; 437 motor.base_ydpi = 4800; 438 motor.profiles.push_back({MotorSlope::create_from_steps(62496, 335, 255), 439 StepType::FULL, 2768}); 440 motor.profiles.push_back({MotorSlope::create_from_steps(62496, 335, 469), 441 StepType::HALF, 5360}); 442 motor.profiles.push_back({MotorSlope::create_from_steps(62496, 2632, 3), 443 StepType::HALF, 10528}); 444 motor.profiles.push_back({MotorSlope::create_from_steps(62496, 10432, 3), 445 StepType::QUARTER, 20864}); 446 s_motors->push_back(std::move(motor)); 447 448 449 motor = Genesys_Motor(); 450 motor.id = MotorId::CANON_LIDE_120; 451 motor.base_ydpi = 4800; 452 motor.profiles.push_back({MotorSlope::create_from_steps(62496, 864, 127), 453 StepType::FULL, 4608}); 454 motor.profiles.push_back({MotorSlope::create_from_steps(62496, 1338, 63), 455 StepType::HALF, 5360}); 456 motor.profiles.push_back({MotorSlope::create_from_steps(62464, 2632, 3), 457 StepType::QUARTER, 10528}); 458 motor.profiles.push_back({MotorSlope::create_from_steps(62592, 10432, 5), 459 StepType::QUARTER, 20864}); 460 s_motors->push_back(std::move(motor)); 461 462 463 motor = Genesys_Motor(); 464 motor.id = MotorId::CANON_LIDE_210; 465 motor.base_ydpi = 4800; 466 motor.profiles.push_back({MotorSlope::create_from_steps(62496, 335, 255), 467 StepType::FULL, 2768}); 468 motor.profiles.push_back({MotorSlope::create_from_steps(62496, 335, 469), 469 StepType::HALF, 5360}); 470 motor.profiles.push_back({MotorSlope::create_from_steps(62496, 2632, 3), 471 StepType::HALF, 10528}); 472 motor.profiles.push_back({MotorSlope::create_from_steps(62496, 10432, 4), 473 StepType::QUARTER, 20864}); 474 motor.profiles.push_back({MotorSlope::create_from_steps(62496, 10432, 4), 475 StepType::EIGHTH, 41536}); 476 s_motors->push_back(std::move(motor)); 477 478 479 motor = Genesys_Motor(); 480 motor.id = MotorId::PLUSTEK_OPTICPRO_3600; 481 motor.base_ydpi = 1200; 482 483 profile = MotorProfile{MotorSlope::create_from_steps(3500, 1300, 60), StepType::FULL, 0}; 484 profile.resolutions = {75, 100, 150, 200}; 485 motor.profiles.push_back(profile); 486 487 // FIXME: this motor profile is almost useless 488 profile = MotorProfile{MotorSlope::create_from_steps(3500, 3250, 60), StepType::HALF, 0}; 489 profile.resolutions = {300, 400, 600, 1200}; 490 motor.profiles.push_back(profile); 491 492 profile = MotorProfile{MotorSlope::create_from_steps(3500, 1300, 60), StepType::FULL, 0}; 493 motor.fast_profiles.push_back(profile); 494 s_motors->push_back(std::move(motor)); 495 496 497 motor = Genesys_Motor(); 498 motor.id = MotorId::PLUSTEK_OPTICFILM_7200; 499 motor.base_ydpi = 3600; 500 501 profile = MotorProfile(); 502 profile.slope = MotorSlope::create_from_steps(20000 * 2, 600 * 2, 200); 503 profile.step_type = StepType::HALF; 504 profile.motor_vref = 0; 505 motor.profiles.push_back(std::move(profile)); 506 507 s_motors->push_back(std::move(motor)); 508 509 510 motor = Genesys_Motor(); 511 motor.id = MotorId::PLUSTEK_OPTICFILM_7200I; 512 motor.base_ydpi = 3600; 513 514 profile = MotorProfile(); 515 profile.slope = MotorSlope::create_from_steps(34722 * 2, 454 * 2, 40); 516 profile.step_type = StepType::HALF; 517 profile.motor_vref = 3; 518 motor.profiles.push_back(std::move(profile)); 519 520 profile = MotorProfile(); 521 profile.slope = MotorSlope::create_from_steps(34722 * 2, 454 * 2, 40); 522 profile.step_type = StepType::HALF; 523 profile.motor_vref = 0; 524 motor.fast_profiles.push_back(std::move(profile)); 525 526 s_motors->push_back(std::move(motor)); 527 528 529 motor = Genesys_Motor(); 530 motor.id = MotorId::PLUSTEK_OPTICFILM_7300; 531 motor.base_ydpi = 3600; 532 533 profile = MotorProfile(); 534 profile.slope = MotorSlope::create_from_steps(56818 * 4, 454 * 4, 30); 535 profile.step_type = StepType::QUARTER; 536 profile.motor_vref = 3; 537 motor.profiles.push_back(std::move(profile)); 538 539 profile = MotorProfile(); 540 profile.slope = MotorSlope::create_from_steps(56818 * 4, 454 * 4, 30); 541 profile.step_type = StepType::QUARTER; 542 profile.motor_vref = 0; 543 motor.fast_profiles.push_back(std::move(profile)); 544 545 s_motors->push_back(std::move(motor)); 546 547 548 motor = Genesys_Motor(); 549 motor.id = MotorId::PLUSTEK_OPTICFILM_7400; 550 motor.base_ydpi = 3600; 551 552 profile = MotorProfile(); 553 profile.slope = MotorSlope::create_from_steps(64102 * 4, 400 * 4, 30); 554 profile.step_type = StepType::QUARTER; 555 profile.motor_vref = 3; 556 motor.profiles.push_back(profile); 557 motor.fast_profiles.push_back(profile); 558 s_motors->push_back(std::move(motor)); 559 560 561 motor = Genesys_Motor(); 562 motor.id = MotorId::PLUSTEK_OPTICFILM_7500I; 563 motor.base_ydpi = 3600; 564 565 profile = MotorProfile(); 566 profile.slope = MotorSlope::create_from_steps(56818 * 4, 454 * 4, 30); 567 profile.step_type = StepType::QUARTER; 568 profile.motor_vref = 3; 569 motor.profiles.push_back(std::move(profile)); 570 571 profile = MotorProfile(); 572 profile.slope = MotorSlope::create_from_steps(56818 * 4, 454 * 4, 30); 573 profile.step_type = StepType::QUARTER; 574 profile.motor_vref = 0; 575 motor.fast_profiles.push_back(std::move(profile)); 576 577 s_motors->push_back(std::move(motor)); 578 579 580 motor = Genesys_Motor(); 581 motor.id = MotorId::PLUSTEK_OPTICFILM_8200I; 582 motor.base_ydpi = 3600; 583 584 profile = MotorProfile(); 585 profile.slope = MotorSlope::create_from_steps(64102 * 4, 400 * 4, 100); 586 profile.step_type = StepType::QUARTER; 587 profile.motor_vref = 3; 588 motor.profiles.push_back(profile); 589 motor.fast_profiles.push_back(profile); 590 s_motors->push_back(std::move(motor)); 591 592 593 motor = Genesys_Motor(); 594 motor.id = MotorId::IMG101; 595 motor.base_ydpi = 600; 596 motor.profiles.push_back({MotorSlope::create_from_steps(22000, 1000, 1017), 597 StepType::HALF, 11000}); 598 s_motors->push_back(std::move(motor)); 599 600 601 motor = Genesys_Motor(); 602 motor.id = MotorId::PLUSTEK_OPTICBOOK_3800; 603 motor.base_ydpi = 600; 604 motor.profiles.push_back({MotorSlope::create_from_steps(22000, 1000, 1017), 605 StepType::HALF, 11000}); 606 s_motors->push_back(std::move(motor)); 607 608 609 motor = Genesys_Motor(); 610 motor.id = MotorId::CANON_LIDE_80; 611 motor.base_ydpi = 2400; 612 motor.profiles.push_back({MotorSlope::create_from_steps(9560, 1912, 31), StepType::FULL, 0}); 613 s_motors->push_back(std::move(motor)); 614} 615 616} // namespace genesys 617