1141cc406Sopenharmony_ci/* sane - Scanner Access Now Easy. 2141cc406Sopenharmony_ci 3141cc406Sopenharmony_ci Copyright (C) 2019 Povilas Kanapickas <povilas@radix.lt> 4141cc406Sopenharmony_ci 5141cc406Sopenharmony_ci This file is part of the SANE package. 6141cc406Sopenharmony_ci 7141cc406Sopenharmony_ci This program is free software; you can redistribute it and/or 8141cc406Sopenharmony_ci modify it under the terms of the GNU General Public License as 9141cc406Sopenharmony_ci published by the Free Software Foundation; either version 2 of the 10141cc406Sopenharmony_ci License, or (at your option) any later version. 11141cc406Sopenharmony_ci 12141cc406Sopenharmony_ci This program is distributed in the hope that it will be useful, but 13141cc406Sopenharmony_ci WITHOUT ANY WARRANTY; without even the implied warranty of 14141cc406Sopenharmony_ci MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15141cc406Sopenharmony_ci General Public License for more details. 16141cc406Sopenharmony_ci 17141cc406Sopenharmony_ci You should have received a copy of the GNU General Public License 18141cc406Sopenharmony_ci along with this program. If not, see <https://www.gnu.org/licenses/>. 19141cc406Sopenharmony_ci*/ 20141cc406Sopenharmony_ci 21141cc406Sopenharmony_ci#define DEBUG_DECLARE_ONLY 22141cc406Sopenharmony_ci 23141cc406Sopenharmony_ci#include "low.h" 24141cc406Sopenharmony_ci 25141cc406Sopenharmony_cinamespace genesys { 26141cc406Sopenharmony_ci 27141cc406Sopenharmony_ciStaticInit<std::vector<Genesys_Motor>> s_motors; 28141cc406Sopenharmony_ci 29141cc406Sopenharmony_civoid genesys_init_motor_tables() 30141cc406Sopenharmony_ci{ 31141cc406Sopenharmony_ci s_motors.init(); 32141cc406Sopenharmony_ci 33141cc406Sopenharmony_ci MotorProfile profile; 34141cc406Sopenharmony_ci 35141cc406Sopenharmony_ci Genesys_Motor motor; 36141cc406Sopenharmony_ci motor.id = MotorId::UMAX; 37141cc406Sopenharmony_ci motor.base_ydpi = 2400; 38141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(11000, 3000, 128), StepType::FULL, 0}); 39141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(11000, 3000, 128), StepType::HALF, 0}); 40141cc406Sopenharmony_ci s_motors->push_back(std::move(motor)); 41141cc406Sopenharmony_ci 42141cc406Sopenharmony_ci 43141cc406Sopenharmony_ci motor = Genesys_Motor(); 44141cc406Sopenharmony_ci motor.id = MotorId::MD_5345; // MD5345/6228/6471 45141cc406Sopenharmony_ci motor.base_ydpi = 2400; 46141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(2000, 1375, 128), StepType::FULL, 0}); 47141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(2000, 1375, 128), StepType::HALF, 0}); 48141cc406Sopenharmony_ci s_motors->push_back(std::move(motor)); 49141cc406Sopenharmony_ci 50141cc406Sopenharmony_ci 51141cc406Sopenharmony_ci motor = Genesys_Motor(); 52141cc406Sopenharmony_ci motor.id = MotorId::ST24; 53141cc406Sopenharmony_ci motor.base_ydpi = 2400; 54141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(2289, 2100, 128), StepType::FULL, 0}); 55141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(2289, 2100, 128), StepType::HALF, 0}); 56141cc406Sopenharmony_ci s_motors->push_back(std::move(motor)); 57141cc406Sopenharmony_ci 58141cc406Sopenharmony_ci 59141cc406Sopenharmony_ci motor = Genesys_Motor(); 60141cc406Sopenharmony_ci motor.id = MotorId::HP3670; 61141cc406Sopenharmony_ci motor.base_ydpi = 1200; 62141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(11000, 3000, 128), StepType::FULL, 0}); 63141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(11000, 3000, 128), StepType::HALF, 0}); 64141cc406Sopenharmony_ci s_motors->push_back(std::move(motor)); 65141cc406Sopenharmony_ci 66141cc406Sopenharmony_ci 67141cc406Sopenharmony_ci motor = Genesys_Motor(); 68141cc406Sopenharmony_ci motor.id = MotorId::HP2400; 69141cc406Sopenharmony_ci motor.base_ydpi = 1200; 70141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(11000, 3000, 128), StepType::FULL, 0}); 71141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(11000, 3000, 128), StepType::HALF, 0}); 72141cc406Sopenharmony_ci s_motors->push_back(std::move(motor)); 73141cc406Sopenharmony_ci 74141cc406Sopenharmony_ci 75141cc406Sopenharmony_ci motor = Genesys_Motor(); 76141cc406Sopenharmony_ci motor.id = MotorId::HP2300; 77141cc406Sopenharmony_ci motor.base_ydpi = 1200; 78141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(3200, 1200, 128), StepType::FULL, 0}); 79141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(3200, 1200, 128), StepType::HALF, 0}); 80141cc406Sopenharmony_ci s_motors->push_back(std::move(motor)); 81141cc406Sopenharmony_ci 82141cc406Sopenharmony_ci 83141cc406Sopenharmony_ci motor = Genesys_Motor(); 84141cc406Sopenharmony_ci motor.id = MotorId::CANON_LIDE_35; 85141cc406Sopenharmony_ci motor.base_ydpi = 1200; 86141cc406Sopenharmony_ci 87141cc406Sopenharmony_ci profile = MotorProfile{MotorSlope::create_from_steps(3500, 1300, 150), StepType::HALF, 0}; 88141cc406Sopenharmony_ci profile.resolutions = { 75, 150, 200, 300, 600 }; 89141cc406Sopenharmony_ci motor.profiles.push_back(profile); 90141cc406Sopenharmony_ci 91141cc406Sopenharmony_ci profile = MotorProfile{MotorSlope::create_from_steps(3500, 1300, 150), StepType::QUARTER, 0}; 92141cc406Sopenharmony_ci profile.resolutions = { 1200, 2400 }; 93141cc406Sopenharmony_ci motor.profiles.push_back(profile); 94141cc406Sopenharmony_ci 95141cc406Sopenharmony_ci profile = MotorProfile{MotorSlope::create_from_steps(3500, 1400, 150), StepType::FULL, 0}; 96141cc406Sopenharmony_ci profile.resolutions = { 75, 150, 200, 300 }; 97141cc406Sopenharmony_ci motor.fast_profiles.push_back(profile); 98141cc406Sopenharmony_ci 99141cc406Sopenharmony_ci profile = MotorProfile{MotorSlope::create_from_steps(6000, 3000, 100), StepType::FULL, 0}; 100141cc406Sopenharmony_ci profile.resolutions = { 600, 1200, 2400 }; 101141cc406Sopenharmony_ci motor.fast_profiles.push_back(profile); 102141cc406Sopenharmony_ci 103141cc406Sopenharmony_ci s_motors->push_back(std::move(motor)); 104141cc406Sopenharmony_ci 105141cc406Sopenharmony_ci 106141cc406Sopenharmony_ci motor = Genesys_Motor(); 107141cc406Sopenharmony_ci motor.id = MotorId::CANON_LIDE_60; 108141cc406Sopenharmony_ci motor.base_ydpi = 1200; 109141cc406Sopenharmony_ci 110141cc406Sopenharmony_ci profile = MotorProfile{MotorSlope::create_from_steps(3500, 1400, 150), StepType::HALF, 0}; 111141cc406Sopenharmony_ci motor.profiles.push_back(profile); 112141cc406Sopenharmony_ci 113141cc406Sopenharmony_ci profile = MotorProfile{MotorSlope::create_from_steps(3500, 1400, 150), StepType::FULL, 0}; 114141cc406Sopenharmony_ci profile.resolutions = { 75, 150, 300 }; 115141cc406Sopenharmony_ci motor.fast_profiles.push_back(profile); 116141cc406Sopenharmony_ci 117141cc406Sopenharmony_ci profile = MotorProfile{MotorSlope::create_from_steps(6000, 3000, 100), StepType::FULL, 0}; 118141cc406Sopenharmony_ci profile.resolutions = { 600, 1200, 2400 }; 119141cc406Sopenharmony_ci motor.fast_profiles.push_back(profile); 120141cc406Sopenharmony_ci 121141cc406Sopenharmony_ci s_motors->push_back(std::move(motor)); 122141cc406Sopenharmony_ci 123141cc406Sopenharmony_ci 124141cc406Sopenharmony_ci motor = Genesys_Motor(); 125141cc406Sopenharmony_ci motor.id = MotorId::CANON_LIDE_90; 126141cc406Sopenharmony_ci motor.base_ydpi = 1200; 127141cc406Sopenharmony_ci profile = {MotorSlope::create_from_steps(8000, 3000, 200), StepType::FULL, 0}; 128141cc406Sopenharmony_ci profile.resolutions = { 150, 300 }; 129141cc406Sopenharmony_ci motor.profiles.push_back(profile); 130141cc406Sopenharmony_ci 131141cc406Sopenharmony_ci profile = {MotorSlope::create_from_steps(7000, 3000, 200), StepType::HALF, 0}; 132141cc406Sopenharmony_ci profile.resolutions = { 600, 1200 }; 133141cc406Sopenharmony_ci motor.profiles.push_back(profile); 134141cc406Sopenharmony_ci 135141cc406Sopenharmony_ci profile = {MotorSlope::create_from_steps(7000, 3000, 200), StepType::QUARTER, 0}; 136141cc406Sopenharmony_ci profile.resolutions = { 2400 }; 137141cc406Sopenharmony_ci motor.profiles.push_back(profile); 138141cc406Sopenharmony_ci s_motors->push_back(std::move(motor)); 139141cc406Sopenharmony_ci 140141cc406Sopenharmony_ci 141141cc406Sopenharmony_ci motor = Genesys_Motor(); 142141cc406Sopenharmony_ci motor.id = MotorId::XP200; 143141cc406Sopenharmony_ci motor.base_ydpi = 600; 144141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(3500, 1300, 60), StepType::FULL, 0}); 145141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(3500, 1300, 60), StepType::HALF, 0}); 146141cc406Sopenharmony_ci motor.fast_profiles.push_back({MotorSlope::create_from_steps(3500, 1300, 60), StepType::FULL, 0}); 147141cc406Sopenharmony_ci s_motors->push_back(std::move(motor)); 148141cc406Sopenharmony_ci 149141cc406Sopenharmony_ci 150141cc406Sopenharmony_ci motor = Genesys_Motor(); 151141cc406Sopenharmony_ci motor.id = MotorId::XP300; 152141cc406Sopenharmony_ci motor.base_ydpi = 300; 153141cc406Sopenharmony_ci // works best with GPIO10, GPIO14 off 154141cc406Sopenharmony_ci profile = MotorProfile{MotorSlope::create_from_steps(3700, 3700, 2), StepType::FULL, 0}; 155141cc406Sopenharmony_ci profile.resolutions = {}; // used during fast moves 156141cc406Sopenharmony_ci motor.profiles.push_back(profile); 157141cc406Sopenharmony_ci 158141cc406Sopenharmony_ci // FIXME: this motor profile is useless 159141cc406Sopenharmony_ci profile = MotorProfile{MotorSlope::create_from_steps(11000, 11000, 2), StepType::HALF, 0}; 160141cc406Sopenharmony_ci profile.resolutions = {75, 150, 300, 600}; 161141cc406Sopenharmony_ci motor.profiles.push_back(profile); 162141cc406Sopenharmony_ci 163141cc406Sopenharmony_ci profile = MotorProfile{MotorSlope::create_from_steps(3700, 3700, 2), StepType::FULL, 0}; 164141cc406Sopenharmony_ci motor.fast_profiles.push_back(profile); 165141cc406Sopenharmony_ci s_motors->push_back(std::move(motor)); 166141cc406Sopenharmony_ci 167141cc406Sopenharmony_ci 168141cc406Sopenharmony_ci motor = Genesys_Motor(); 169141cc406Sopenharmony_ci motor.id = MotorId::DP665; 170141cc406Sopenharmony_ci motor.base_ydpi = 750; 171141cc406Sopenharmony_ci 172141cc406Sopenharmony_ci profile = MotorProfile{MotorSlope::create_from_steps(3000, 2500, 10), StepType::FULL, 0}; 173141cc406Sopenharmony_ci profile.resolutions = {75, 150}; 174141cc406Sopenharmony_ci motor.profiles.push_back(profile); 175141cc406Sopenharmony_ci 176141cc406Sopenharmony_ci // FIXME: this motor profile is useless 177141cc406Sopenharmony_ci profile = MotorProfile{MotorSlope::create_from_steps(11000, 11000, 2), StepType::HALF, 0}; 178141cc406Sopenharmony_ci profile.resolutions = {300, 600, 1200}; 179141cc406Sopenharmony_ci motor.profiles.push_back(profile); 180141cc406Sopenharmony_ci 181141cc406Sopenharmony_ci profile = MotorProfile{MotorSlope::create_from_steps(3000, 2500, 10), StepType::FULL, 0}; 182141cc406Sopenharmony_ci motor.fast_profiles.push_back(profile); 183141cc406Sopenharmony_ci s_motors->push_back(std::move(motor)); 184141cc406Sopenharmony_ci 185141cc406Sopenharmony_ci 186141cc406Sopenharmony_ci motor = Genesys_Motor(); 187141cc406Sopenharmony_ci motor.id = MotorId::ROADWARRIOR; 188141cc406Sopenharmony_ci motor.base_ydpi = 750; 189141cc406Sopenharmony_ci 190141cc406Sopenharmony_ci profile = MotorProfile{MotorSlope::create_from_steps(3000, 2600, 10), StepType::FULL, 0}; 191141cc406Sopenharmony_ci profile.resolutions = {75, 150}; 192141cc406Sopenharmony_ci motor.profiles.push_back(profile); 193141cc406Sopenharmony_ci 194141cc406Sopenharmony_ci // FIXME: this motor profile is useless 195141cc406Sopenharmony_ci profile = MotorProfile{MotorSlope::create_from_steps(11000, 11000, 2), StepType::HALF, 0}; 196141cc406Sopenharmony_ci profile.resolutions = {300, 600, 1200}; 197141cc406Sopenharmony_ci motor.profiles.push_back(profile); 198141cc406Sopenharmony_ci 199141cc406Sopenharmony_ci profile = MotorProfile{MotorSlope::create_from_steps(3000, 2600, 10), StepType::FULL, 0}; 200141cc406Sopenharmony_ci motor.fast_profiles.push_back(profile); 201141cc406Sopenharmony_ci s_motors->push_back(std::move(motor)); 202141cc406Sopenharmony_ci 203141cc406Sopenharmony_ci 204141cc406Sopenharmony_ci motor = Genesys_Motor(); 205141cc406Sopenharmony_ci motor.id = MotorId::DSMOBILE_600; 206141cc406Sopenharmony_ci motor.base_ydpi = 750; 207141cc406Sopenharmony_ci 208141cc406Sopenharmony_ci profile = MotorProfile{MotorSlope::create_from_steps(6666, 3700, 8), StepType::FULL, 0}; 209141cc406Sopenharmony_ci profile.resolutions = {75, 150}; 210141cc406Sopenharmony_ci motor.profiles.push_back(profile); 211141cc406Sopenharmony_ci 212141cc406Sopenharmony_ci profile = MotorProfile{MotorSlope::create_from_steps(6666, 3700, 8), StepType::HALF, 0}; 213141cc406Sopenharmony_ci profile.resolutions = {300, 600, 1200}; 214141cc406Sopenharmony_ci motor.profiles.push_back(profile); 215141cc406Sopenharmony_ci 216141cc406Sopenharmony_ci profile = MotorProfile{MotorSlope::create_from_steps(6666, 3700, 8), StepType::FULL, 0}; 217141cc406Sopenharmony_ci motor.fast_profiles.push_back(profile); 218141cc406Sopenharmony_ci s_motors->push_back(std::move(motor)); 219141cc406Sopenharmony_ci 220141cc406Sopenharmony_ci 221141cc406Sopenharmony_ci motor = Genesys_Motor(); 222141cc406Sopenharmony_ci motor.id = MotorId::CANON_LIDE_100; 223141cc406Sopenharmony_ci motor.base_ydpi = 1200; 224141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(46876, 864, 255), 225141cc406Sopenharmony_ci StepType::HALF, 1432}); 226141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(46876, 864, 279), 227141cc406Sopenharmony_ci StepType::QUARTER, 2712}); 228141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(31680, 864, 247), 229141cc406Sopenharmony_ci StepType::EIGHTH, 5280}); 230141cc406Sopenharmony_ci s_motors->push_back(std::move(motor)); 231141cc406Sopenharmony_ci 232141cc406Sopenharmony_ci 233141cc406Sopenharmony_ci motor = Genesys_Motor(); 234141cc406Sopenharmony_ci motor.id = MotorId::CANON_LIDE_200; 235141cc406Sopenharmony_ci motor.base_ydpi = 1200; 236141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(46876, 864, 255), 237141cc406Sopenharmony_ci StepType::HALF, 1432}); 238141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(46876, 864, 279), 239141cc406Sopenharmony_ci StepType::QUARTER, 2712}); 240141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(31680, 864, 247), 241141cc406Sopenharmony_ci StepType::EIGHTH, 5280}); 242141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(31680, 864, 247), 243141cc406Sopenharmony_ci StepType::EIGHTH, 10416}); 244141cc406Sopenharmony_ci s_motors->push_back(std::move(motor)); 245141cc406Sopenharmony_ci 246141cc406Sopenharmony_ci 247141cc406Sopenharmony_ci motor = Genesys_Motor(); 248141cc406Sopenharmony_ci motor.id = MotorId::CANON_LIDE_700; 249141cc406Sopenharmony_ci motor.base_ydpi = 1200; 250141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(46876, 534, 255), 251141cc406Sopenharmony_ci StepType::HALF, 1424}); 252141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(46876, 534, 255), 253141cc406Sopenharmony_ci StepType::HALF, 1504}); 254141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(46876, 2022, 127), 255141cc406Sopenharmony_ci StepType::HALF, 2696}); 256141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(46876, 534, 255), 257141cc406Sopenharmony_ci StepType::HALF, 2848}); 258141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(46876, 15864, 2), 259141cc406Sopenharmony_ci StepType::EIGHTH, 10576}); 260141cc406Sopenharmony_ci s_motors->push_back(std::move(motor)); 261141cc406Sopenharmony_ci 262141cc406Sopenharmony_ci 263141cc406Sopenharmony_ci motor = Genesys_Motor(); 264141cc406Sopenharmony_ci motor.id = MotorId::KVSS080; 265141cc406Sopenharmony_ci motor.base_ydpi = 1200; 266141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(44444, 500, 489), 267141cc406Sopenharmony_ci StepType::HALF, 8000}); 268141cc406Sopenharmony_ci s_motors->push_back(std::move(motor)); 269141cc406Sopenharmony_ci 270141cc406Sopenharmony_ci 271141cc406Sopenharmony_ci motor = Genesys_Motor(); 272141cc406Sopenharmony_ci motor.id = MotorId::G4050; 273141cc406Sopenharmony_ci motor.base_ydpi = 2400; 274141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(7842, 320, 602), 275141cc406Sopenharmony_ci StepType::HALF, 8016}); 276141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(9422, 254, 1004), 277141cc406Sopenharmony_ci StepType::HALF, 15624}); 278141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(28032, 2238, 604), 279141cc406Sopenharmony_ci StepType::HALF, 56064}); 280141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(42752, 1706, 610), 281141cc406Sopenharmony_ci StepType::QUARTER, 42752}); 282141cc406Sopenharmony_ci s_motors->push_back(std::move(motor)); 283141cc406Sopenharmony_ci 284141cc406Sopenharmony_ci 285141cc406Sopenharmony_ci motor = Genesys_Motor(); 286141cc406Sopenharmony_ci motor.id = MotorId::CANON_4400F; 287141cc406Sopenharmony_ci motor.base_ydpi = 2400; 288141cc406Sopenharmony_ci 289141cc406Sopenharmony_ci profile = MotorProfile(); 290141cc406Sopenharmony_ci profile.slope = MotorSlope::create_from_steps(28597 * 2, 727 * 2, 200); 291141cc406Sopenharmony_ci profile.step_type = StepType::QUARTER; 292141cc406Sopenharmony_ci profile.motor_vref = 1; 293141cc406Sopenharmony_ci profile.resolutions = { 300, 600 }; 294141cc406Sopenharmony_ci motor.profiles.push_back(std::move(profile)); 295141cc406Sopenharmony_ci 296141cc406Sopenharmony_ci profile = MotorProfile(); 297141cc406Sopenharmony_ci profile.slope = MotorSlope::create_from_steps(28597 * 2, 727 * 2, 200); 298141cc406Sopenharmony_ci profile.step_type = StepType::QUARTER; 299141cc406Sopenharmony_ci profile.motor_vref = 0; 300141cc406Sopenharmony_ci profile.resolutions = { 1200, 2400, 4800, 9600 }; 301141cc406Sopenharmony_ci motor.profiles.push_back(std::move(profile)); 302141cc406Sopenharmony_ci 303141cc406Sopenharmony_ci profile = MotorProfile(); 304141cc406Sopenharmony_ci profile.slope = MotorSlope::create_from_steps(28597 * 2, 279 * 2, 1000); 305141cc406Sopenharmony_ci profile.step_type = StepType::QUARTER; 306141cc406Sopenharmony_ci profile.motor_vref = 0; 307141cc406Sopenharmony_ci motor.fast_profiles.push_back(std::move(profile)); 308141cc406Sopenharmony_ci 309141cc406Sopenharmony_ci s_motors->push_back(std::move(motor)); 310141cc406Sopenharmony_ci 311141cc406Sopenharmony_ci 312141cc406Sopenharmony_ci motor = Genesys_Motor(); 313141cc406Sopenharmony_ci motor.id = MotorId::CANON_5600F; 314141cc406Sopenharmony_ci motor.base_ydpi = 2400; 315141cc406Sopenharmony_ci 316141cc406Sopenharmony_ci // FIXME: real limit is 134, but for some reason the motor can't acquire that speed. 317141cc406Sopenharmony_ci profile = MotorProfile(); 318141cc406Sopenharmony_ci profile.slope = MotorSlope::create_from_steps(2500 * 2, 134 * 2, 1000); 319141cc406Sopenharmony_ci profile.step_type = StepType::HALF; 320141cc406Sopenharmony_ci profile.motor_vref = 0; 321141cc406Sopenharmony_ci profile.resolutions = { 75, 150 }; 322141cc406Sopenharmony_ci motor.profiles.push_back(std::move(profile)); 323141cc406Sopenharmony_ci 324141cc406Sopenharmony_ci profile = MotorProfile(); 325141cc406Sopenharmony_ci profile.slope = MotorSlope::create_from_steps(2500 * 2, 200 * 2, 1000); 326141cc406Sopenharmony_ci profile.step_type = StepType::QUARTER; 327141cc406Sopenharmony_ci profile.motor_vref = 0; 328141cc406Sopenharmony_ci profile.resolutions = { 300, 600, 1200, 2400, 4800 }; 329141cc406Sopenharmony_ci motor.profiles.push_back(std::move(profile)); 330141cc406Sopenharmony_ci 331141cc406Sopenharmony_ci profile = MotorProfile(); 332141cc406Sopenharmony_ci profile.slope = MotorSlope::create_from_steps(2500 * 2, 200 * 2, 1000); 333141cc406Sopenharmony_ci profile.step_type = StepType::QUARTER; 334141cc406Sopenharmony_ci profile.motor_vref = 0; 335141cc406Sopenharmony_ci motor.fast_profiles.push_back(std::move(profile)); 336141cc406Sopenharmony_ci 337141cc406Sopenharmony_ci s_motors->push_back(std::move(motor)); 338141cc406Sopenharmony_ci 339141cc406Sopenharmony_ci 340141cc406Sopenharmony_ci motor = Genesys_Motor(); 341141cc406Sopenharmony_ci motor.id = MotorId::CANON_8400F; 342141cc406Sopenharmony_ci motor.base_ydpi = 1600; 343141cc406Sopenharmony_ci 344141cc406Sopenharmony_ci profile = MotorProfile(); 345141cc406Sopenharmony_ci profile.slope = MotorSlope::create_from_steps(20202 * 4, 333 * 4, 100); 346141cc406Sopenharmony_ci profile.step_type = StepType::QUARTER; 347141cc406Sopenharmony_ci profile.motor_vref = 0; 348141cc406Sopenharmony_ci profile.resolutions = VALUE_FILTER_ANY; 349141cc406Sopenharmony_ci profile.scan_methods = { ScanMethod::FLATBED }; 350141cc406Sopenharmony_ci motor.profiles.push_back(std::move(profile)); 351141cc406Sopenharmony_ci 352141cc406Sopenharmony_ci profile = MotorProfile(); 353141cc406Sopenharmony_ci profile.slope = MotorSlope::create_from_steps(65535 * 4, 333 * 4, 100); 354141cc406Sopenharmony_ci profile.step_type = StepType::QUARTER; 355141cc406Sopenharmony_ci profile.motor_vref = 2; 356141cc406Sopenharmony_ci profile.resolutions = VALUE_FILTER_ANY; 357141cc406Sopenharmony_ci profile.scan_methods = { ScanMethod::TRANSPARENCY, ScanMethod::TRANSPARENCY_INFRARED }; 358141cc406Sopenharmony_ci motor.profiles.push_back(std::move(profile)); 359141cc406Sopenharmony_ci 360141cc406Sopenharmony_ci profile = MotorProfile(); 361141cc406Sopenharmony_ci profile.slope = MotorSlope::create_from_steps(65535 * 4, 333 * 4, 200); 362141cc406Sopenharmony_ci profile.step_type = StepType::QUARTER; 363141cc406Sopenharmony_ci profile.motor_vref = 2; 364141cc406Sopenharmony_ci profile.resolutions = VALUE_FILTER_ANY; 365141cc406Sopenharmony_ci profile.scan_methods = VALUE_FILTER_ANY; 366141cc406Sopenharmony_ci motor.fast_profiles.push_back(std::move(profile)); 367141cc406Sopenharmony_ci 368141cc406Sopenharmony_ci s_motors->push_back(std::move(motor)); 369141cc406Sopenharmony_ci 370141cc406Sopenharmony_ci 371141cc406Sopenharmony_ci motor = Genesys_Motor(); 372141cc406Sopenharmony_ci motor.id = MotorId::CANON_8600F; 373141cc406Sopenharmony_ci motor.base_ydpi = 2400; 374141cc406Sopenharmony_ci 375141cc406Sopenharmony_ci profile = MotorProfile(); 376141cc406Sopenharmony_ci profile.slope = MotorSlope::create_from_steps(54612, 1500, 219); 377141cc406Sopenharmony_ci profile.step_type = StepType::QUARTER; 378141cc406Sopenharmony_ci profile.motor_vref = 3; 379141cc406Sopenharmony_ci profile.resolutions = { 300, 600 }; 380141cc406Sopenharmony_ci profile.scan_methods = { ScanMethod::FLATBED }; 381141cc406Sopenharmony_ci motor.profiles.push_back(std::move(profile)); 382141cc406Sopenharmony_ci 383141cc406Sopenharmony_ci profile = MotorProfile(); 384141cc406Sopenharmony_ci profile.slope = MotorSlope::create_from_steps(54612, 1500, 219); 385141cc406Sopenharmony_ci profile.step_type = StepType::QUARTER; 386141cc406Sopenharmony_ci profile.motor_vref = 2; 387141cc406Sopenharmony_ci profile.resolutions = { 1200, 2400 }; 388141cc406Sopenharmony_ci profile.scan_methods = { ScanMethod::FLATBED }; 389141cc406Sopenharmony_ci motor.profiles.push_back(std::move(profile)); 390141cc406Sopenharmony_ci 391141cc406Sopenharmony_ci profile = MotorProfile(); 392141cc406Sopenharmony_ci profile.slope = MotorSlope::create_from_steps(54612, 1500, 219); 393141cc406Sopenharmony_ci profile.step_type = StepType::QUARTER; 394141cc406Sopenharmony_ci profile.motor_vref = 2; 395141cc406Sopenharmony_ci profile.resolutions = { 4800 }; 396141cc406Sopenharmony_ci profile.scan_methods = { ScanMethod::FLATBED }; 397141cc406Sopenharmony_ci motor.profiles.push_back(std::move(profile)); 398141cc406Sopenharmony_ci 399141cc406Sopenharmony_ci profile = MotorProfile(); 400141cc406Sopenharmony_ci profile.slope = MotorSlope::create_from_steps(54612, 1500, 219); 401141cc406Sopenharmony_ci profile.step_type = StepType::QUARTER; 402141cc406Sopenharmony_ci profile.motor_vref = 2; 403141cc406Sopenharmony_ci profile.resolutions = { 300, 600 }; 404141cc406Sopenharmony_ci profile.scan_methods = { ScanMethod::TRANSPARENCY, 405141cc406Sopenharmony_ci ScanMethod::TRANSPARENCY_INFRARED }; 406141cc406Sopenharmony_ci motor.profiles.push_back(std::move(profile)); 407141cc406Sopenharmony_ci 408141cc406Sopenharmony_ci profile = MotorProfile(); 409141cc406Sopenharmony_ci profile.slope = MotorSlope::create_from_steps(54612, 1500, 219); 410141cc406Sopenharmony_ci profile.step_type = StepType::QUARTER; 411141cc406Sopenharmony_ci profile.motor_vref = 1; 412141cc406Sopenharmony_ci profile.resolutions = { 1200, 2400 }; 413141cc406Sopenharmony_ci profile.scan_methods = { ScanMethod::TRANSPARENCY, 414141cc406Sopenharmony_ci ScanMethod::TRANSPARENCY_INFRARED }; 415141cc406Sopenharmony_ci motor.profiles.push_back(std::move(profile)); 416141cc406Sopenharmony_ci 417141cc406Sopenharmony_ci profile = MotorProfile(); 418141cc406Sopenharmony_ci profile.slope = MotorSlope::create_from_steps(54612, 1500, 219); 419141cc406Sopenharmony_ci profile.step_type = StepType::QUARTER; 420141cc406Sopenharmony_ci profile.motor_vref = 0; 421141cc406Sopenharmony_ci profile.resolutions = { 4800 }; 422141cc406Sopenharmony_ci profile.scan_methods = { ScanMethod::TRANSPARENCY, 423141cc406Sopenharmony_ci ScanMethod::TRANSPARENCY_INFRARED }; 424141cc406Sopenharmony_ci motor.profiles.push_back(std::move(profile)); 425141cc406Sopenharmony_ci 426141cc406Sopenharmony_ci profile = MotorProfile(); 427141cc406Sopenharmony_ci profile.slope = MotorSlope::create_from_steps(59240, 582, 1020); 428141cc406Sopenharmony_ci profile.step_type = StepType::QUARTER; 429141cc406Sopenharmony_ci profile.motor_vref = 2; 430141cc406Sopenharmony_ci motor.fast_profiles.push_back(std::move(profile)); 431141cc406Sopenharmony_ci 432141cc406Sopenharmony_ci s_motors->push_back(std::move(motor)); 433141cc406Sopenharmony_ci 434141cc406Sopenharmony_ci 435141cc406Sopenharmony_ci motor = Genesys_Motor(); 436141cc406Sopenharmony_ci motor.id = MotorId::CANON_LIDE_110; 437141cc406Sopenharmony_ci motor.base_ydpi = 4800; 438141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(62496, 335, 255), 439141cc406Sopenharmony_ci StepType::FULL, 2768}); 440141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(62496, 335, 469), 441141cc406Sopenharmony_ci StepType::HALF, 5360}); 442141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(62496, 2632, 3), 443141cc406Sopenharmony_ci StepType::HALF, 10528}); 444141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(62496, 10432, 3), 445141cc406Sopenharmony_ci StepType::QUARTER, 20864}); 446141cc406Sopenharmony_ci s_motors->push_back(std::move(motor)); 447141cc406Sopenharmony_ci 448141cc406Sopenharmony_ci 449141cc406Sopenharmony_ci motor = Genesys_Motor(); 450141cc406Sopenharmony_ci motor.id = MotorId::CANON_LIDE_120; 451141cc406Sopenharmony_ci motor.base_ydpi = 4800; 452141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(62496, 864, 127), 453141cc406Sopenharmony_ci StepType::FULL, 4608}); 454141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(62496, 1338, 63), 455141cc406Sopenharmony_ci StepType::HALF, 5360}); 456141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(62464, 2632, 3), 457141cc406Sopenharmony_ci StepType::QUARTER, 10528}); 458141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(62592, 10432, 5), 459141cc406Sopenharmony_ci StepType::QUARTER, 20864}); 460141cc406Sopenharmony_ci s_motors->push_back(std::move(motor)); 461141cc406Sopenharmony_ci 462141cc406Sopenharmony_ci 463141cc406Sopenharmony_ci motor = Genesys_Motor(); 464141cc406Sopenharmony_ci motor.id = MotorId::CANON_LIDE_210; 465141cc406Sopenharmony_ci motor.base_ydpi = 4800; 466141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(62496, 335, 255), 467141cc406Sopenharmony_ci StepType::FULL, 2768}); 468141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(62496, 335, 469), 469141cc406Sopenharmony_ci StepType::HALF, 5360}); 470141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(62496, 2632, 3), 471141cc406Sopenharmony_ci StepType::HALF, 10528}); 472141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(62496, 10432, 4), 473141cc406Sopenharmony_ci StepType::QUARTER, 20864}); 474141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(62496, 10432, 4), 475141cc406Sopenharmony_ci StepType::EIGHTH, 41536}); 476141cc406Sopenharmony_ci s_motors->push_back(std::move(motor)); 477141cc406Sopenharmony_ci 478141cc406Sopenharmony_ci 479141cc406Sopenharmony_ci motor = Genesys_Motor(); 480141cc406Sopenharmony_ci motor.id = MotorId::PLUSTEK_OPTICPRO_3600; 481141cc406Sopenharmony_ci motor.base_ydpi = 1200; 482141cc406Sopenharmony_ci 483141cc406Sopenharmony_ci profile = MotorProfile{MotorSlope::create_from_steps(3500, 1300, 60), StepType::FULL, 0}; 484141cc406Sopenharmony_ci profile.resolutions = {75, 100, 150, 200}; 485141cc406Sopenharmony_ci motor.profiles.push_back(profile); 486141cc406Sopenharmony_ci 487141cc406Sopenharmony_ci // FIXME: this motor profile is almost useless 488141cc406Sopenharmony_ci profile = MotorProfile{MotorSlope::create_from_steps(3500, 3250, 60), StepType::HALF, 0}; 489141cc406Sopenharmony_ci profile.resolutions = {300, 400, 600, 1200}; 490141cc406Sopenharmony_ci motor.profiles.push_back(profile); 491141cc406Sopenharmony_ci 492141cc406Sopenharmony_ci profile = MotorProfile{MotorSlope::create_from_steps(3500, 1300, 60), StepType::FULL, 0}; 493141cc406Sopenharmony_ci motor.fast_profiles.push_back(profile); 494141cc406Sopenharmony_ci s_motors->push_back(std::move(motor)); 495141cc406Sopenharmony_ci 496141cc406Sopenharmony_ci 497141cc406Sopenharmony_ci motor = Genesys_Motor(); 498141cc406Sopenharmony_ci motor.id = MotorId::PLUSTEK_OPTICFILM_7200; 499141cc406Sopenharmony_ci motor.base_ydpi = 3600; 500141cc406Sopenharmony_ci 501141cc406Sopenharmony_ci profile = MotorProfile(); 502141cc406Sopenharmony_ci profile.slope = MotorSlope::create_from_steps(20000 * 2, 600 * 2, 200); 503141cc406Sopenharmony_ci profile.step_type = StepType::HALF; 504141cc406Sopenharmony_ci profile.motor_vref = 0; 505141cc406Sopenharmony_ci motor.profiles.push_back(std::move(profile)); 506141cc406Sopenharmony_ci 507141cc406Sopenharmony_ci s_motors->push_back(std::move(motor)); 508141cc406Sopenharmony_ci 509141cc406Sopenharmony_ci 510141cc406Sopenharmony_ci motor = Genesys_Motor(); 511141cc406Sopenharmony_ci motor.id = MotorId::PLUSTEK_OPTICFILM_7200I; 512141cc406Sopenharmony_ci motor.base_ydpi = 3600; 513141cc406Sopenharmony_ci 514141cc406Sopenharmony_ci profile = MotorProfile(); 515141cc406Sopenharmony_ci profile.slope = MotorSlope::create_from_steps(34722 * 2, 454 * 2, 40); 516141cc406Sopenharmony_ci profile.step_type = StepType::HALF; 517141cc406Sopenharmony_ci profile.motor_vref = 3; 518141cc406Sopenharmony_ci motor.profiles.push_back(std::move(profile)); 519141cc406Sopenharmony_ci 520141cc406Sopenharmony_ci profile = MotorProfile(); 521141cc406Sopenharmony_ci profile.slope = MotorSlope::create_from_steps(34722 * 2, 454 * 2, 40); 522141cc406Sopenharmony_ci profile.step_type = StepType::HALF; 523141cc406Sopenharmony_ci profile.motor_vref = 0; 524141cc406Sopenharmony_ci motor.fast_profiles.push_back(std::move(profile)); 525141cc406Sopenharmony_ci 526141cc406Sopenharmony_ci s_motors->push_back(std::move(motor)); 527141cc406Sopenharmony_ci 528141cc406Sopenharmony_ci 529141cc406Sopenharmony_ci motor = Genesys_Motor(); 530141cc406Sopenharmony_ci motor.id = MotorId::PLUSTEK_OPTICFILM_7300; 531141cc406Sopenharmony_ci motor.base_ydpi = 3600; 532141cc406Sopenharmony_ci 533141cc406Sopenharmony_ci profile = MotorProfile(); 534141cc406Sopenharmony_ci profile.slope = MotorSlope::create_from_steps(56818 * 4, 454 * 4, 30); 535141cc406Sopenharmony_ci profile.step_type = StepType::QUARTER; 536141cc406Sopenharmony_ci profile.motor_vref = 3; 537141cc406Sopenharmony_ci motor.profiles.push_back(std::move(profile)); 538141cc406Sopenharmony_ci 539141cc406Sopenharmony_ci profile = MotorProfile(); 540141cc406Sopenharmony_ci profile.slope = MotorSlope::create_from_steps(56818 * 4, 454 * 4, 30); 541141cc406Sopenharmony_ci profile.step_type = StepType::QUARTER; 542141cc406Sopenharmony_ci profile.motor_vref = 0; 543141cc406Sopenharmony_ci motor.fast_profiles.push_back(std::move(profile)); 544141cc406Sopenharmony_ci 545141cc406Sopenharmony_ci s_motors->push_back(std::move(motor)); 546141cc406Sopenharmony_ci 547141cc406Sopenharmony_ci 548141cc406Sopenharmony_ci motor = Genesys_Motor(); 549141cc406Sopenharmony_ci motor.id = MotorId::PLUSTEK_OPTICFILM_7400; 550141cc406Sopenharmony_ci motor.base_ydpi = 3600; 551141cc406Sopenharmony_ci 552141cc406Sopenharmony_ci profile = MotorProfile(); 553141cc406Sopenharmony_ci profile.slope = MotorSlope::create_from_steps(64102 * 4, 400 * 4, 30); 554141cc406Sopenharmony_ci profile.step_type = StepType::QUARTER; 555141cc406Sopenharmony_ci profile.motor_vref = 3; 556141cc406Sopenharmony_ci motor.profiles.push_back(profile); 557141cc406Sopenharmony_ci motor.fast_profiles.push_back(profile); 558141cc406Sopenharmony_ci s_motors->push_back(std::move(motor)); 559141cc406Sopenharmony_ci 560141cc406Sopenharmony_ci 561141cc406Sopenharmony_ci motor = Genesys_Motor(); 562141cc406Sopenharmony_ci motor.id = MotorId::PLUSTEK_OPTICFILM_7500I; 563141cc406Sopenharmony_ci motor.base_ydpi = 3600; 564141cc406Sopenharmony_ci 565141cc406Sopenharmony_ci profile = MotorProfile(); 566141cc406Sopenharmony_ci profile.slope = MotorSlope::create_from_steps(56818 * 4, 454 * 4, 30); 567141cc406Sopenharmony_ci profile.step_type = StepType::QUARTER; 568141cc406Sopenharmony_ci profile.motor_vref = 3; 569141cc406Sopenharmony_ci motor.profiles.push_back(std::move(profile)); 570141cc406Sopenharmony_ci 571141cc406Sopenharmony_ci profile = MotorProfile(); 572141cc406Sopenharmony_ci profile.slope = MotorSlope::create_from_steps(56818 * 4, 454 * 4, 30); 573141cc406Sopenharmony_ci profile.step_type = StepType::QUARTER; 574141cc406Sopenharmony_ci profile.motor_vref = 0; 575141cc406Sopenharmony_ci motor.fast_profiles.push_back(std::move(profile)); 576141cc406Sopenharmony_ci 577141cc406Sopenharmony_ci s_motors->push_back(std::move(motor)); 578141cc406Sopenharmony_ci 579141cc406Sopenharmony_ci 580141cc406Sopenharmony_ci motor = Genesys_Motor(); 581141cc406Sopenharmony_ci motor.id = MotorId::PLUSTEK_OPTICFILM_8200I; 582141cc406Sopenharmony_ci motor.base_ydpi = 3600; 583141cc406Sopenharmony_ci 584141cc406Sopenharmony_ci profile = MotorProfile(); 585141cc406Sopenharmony_ci profile.slope = MotorSlope::create_from_steps(64102 * 4, 400 * 4, 100); 586141cc406Sopenharmony_ci profile.step_type = StepType::QUARTER; 587141cc406Sopenharmony_ci profile.motor_vref = 3; 588141cc406Sopenharmony_ci motor.profiles.push_back(profile); 589141cc406Sopenharmony_ci motor.fast_profiles.push_back(profile); 590141cc406Sopenharmony_ci s_motors->push_back(std::move(motor)); 591141cc406Sopenharmony_ci 592141cc406Sopenharmony_ci 593141cc406Sopenharmony_ci motor = Genesys_Motor(); 594141cc406Sopenharmony_ci motor.id = MotorId::IMG101; 595141cc406Sopenharmony_ci motor.base_ydpi = 600; 596141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(22000, 1000, 1017), 597141cc406Sopenharmony_ci StepType::HALF, 11000}); 598141cc406Sopenharmony_ci s_motors->push_back(std::move(motor)); 599141cc406Sopenharmony_ci 600141cc406Sopenharmony_ci 601141cc406Sopenharmony_ci motor = Genesys_Motor(); 602141cc406Sopenharmony_ci motor.id = MotorId::PLUSTEK_OPTICBOOK_3800; 603141cc406Sopenharmony_ci motor.base_ydpi = 600; 604141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(22000, 1000, 1017), 605141cc406Sopenharmony_ci StepType::HALF, 11000}); 606141cc406Sopenharmony_ci s_motors->push_back(std::move(motor)); 607141cc406Sopenharmony_ci 608141cc406Sopenharmony_ci 609141cc406Sopenharmony_ci motor = Genesys_Motor(); 610141cc406Sopenharmony_ci motor.id = MotorId::CANON_LIDE_80; 611141cc406Sopenharmony_ci motor.base_ydpi = 2400; 612141cc406Sopenharmony_ci motor.profiles.push_back({MotorSlope::create_from_steps(9560, 1912, 31), StepType::FULL, 0}); 613141cc406Sopenharmony_ci s_motors->push_back(std::move(motor)); 614141cc406Sopenharmony_ci} 615141cc406Sopenharmony_ci 616141cc406Sopenharmony_ci} // namespace genesys 617