/* sane - Scanner Access Now Easy. Copyright (C) 2019 Povilas Kanapickas This file is part of the SANE package. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, the authors of SANE give permission for additional uses of the libraries contained in this release of SANE. The exception is that, if you link a SANE library with other files to produce an executable, this does not by itself cause the resulting executable to be covered by the GNU General Public License. Your use of that executable is in no way restricted on account of linking the SANE library code into it. This exception does not, however, invalidate any other reasons why the executable file might be covered by the GNU General Public License. If you submit changes to SANE to the maintainers to be included in a subsequent release, you agree by submitting the changes that those changes may be distributed with this exception intact. If you write modifications of your own for SANE, it is your choice whether to permit this exception to apply to your modifications. If you do not wish that, delete this exception notice. */ #define DEBUG_DECLARE_ONLY #include "low.h" namespace genesys { // This file contains reference motor slope tables. // The tables are directly extracted from USB logs, with a termination value of 0 static uint32_t kvss080[] = { 44444, 34188, 32520, 29630, 26666, 24242, 22222, 19048, 16666, 15686, 14814, 14034, 12402, 11110, 8888, 7618, 6666, 5926, 5228, 4678, 4172, 3682, 3336, 3074, 2866, 2702, 2566, 2450, 2352, 2266, 2188, 2118, 2056, 2002, 1950, 1904, 1860, 1820, 1784, 1748, 1716, 1684, 1656, 1628, 1600, 1576, 1552, 1528, 1506, 1486, 1466, 1446, 1428, 1410, 1394, 1376, 1360, 1346, 1330, 1316, 1302, 1288, 1276, 1264, 1250, 1238, 1228, 1216, 1206, 1194, 1184, 1174, 1164, 1154, 1146, 1136, 1128, 1120, 1110, 1102, 1094, 1088, 1080, 1072, 1064, 1058, 1050, 1044, 1038, 1030, 1024, 1018, 1012, 1006, 1000, 994, 988, 984, 978, 972, 968, 962, 958, 952, 948, 942, 938, 934, 928, 924, 920, 916, 912, 908, 904, 900, 896, 892, 888, 884, 882, 878, 874, 870, 868, 864, 860, 858, 854, 850, 848, 844, 842, 838, 836, 832, 830, 826, 824, 822, 820, 816, 814, 812, 808, 806, 804, 802, 800, 796, 794, 792, 790, 788, 786, 784, 782, 778, 776, 774, 772, 770, 768, 766, 764, 762, 760, 758, 756, 754, 752, 750, 750, 748, 746, 744, 742, 740, 738, 736, 734, 734, 732, 730, 728, 726, 724, 724, 722, 720, 718, 716, 716, 714, 712, 710, 710, 708, 706, 704, 704, 702, 700, 698, 698, 696, 694, 694, 692, 690, 690, 688, 686, 686, 684, 682, 682, 680, 678, 678, 676, 674, 674, 672, 672, 670, 668, 668, 666, 666, 664, 662, 662, 660, 660, 658, 656, 656, 654, 654, 652, 652, 650, 650, 648, 646, 646, 644, 644, 642, 642, 640, 640, 638, 638, 636, 636, 636, 634, 634, 632, 632, 630, 630, 628, 628, 626, 626, 624, 624, 624, 622, 622, 620, 620, 618, 618, 618, 616, 616, 614, 614, 612, 612, 612, 610, 610, 608, 608, 608, 606, 606, 606, 604, 604, 602, 602, 602, 600, 600, 600, 598, 598, 596, 596, 596, 594, 594, 594, 592, 592, 592, 590, 590, 590, 588, 588, 588, 586, 586, 586, 584, 584, 584, 582, 582, 582, 590, 590, 590, 588, 588, 588, 586, 586, 586, 584, 584, 584, 582, 582, 582, 580, 580, 580, 578, 578, 578, 576, 576, 576, 576, 574, 574, 574, 572, 572, 572, 570, 570, 570, 568, 568, 568, 568, 566, 566, 566, 564, 564, 564, 562, 562, 562, 562, 560, 560, 560, 558, 558, 558, 558, 556, 556, 556, 554, 554, 554, 552, 552, 552, 552, 550, 550, 550, 548, 548, 548, 548, 546, 546, 546, 546, 544, 544, 544, 542, 542, 542, 542, 540, 540, 540, 538, 538, 538, 538, 536, 536, 536, 536, 534, 534, 534, 534, 532, 532, 532, 530, 530, 530, 530, 528, 528, 528, 528, 526, 526, 526, 526, 524, 524, 524, 524, 522, 522, 522, 522, 520, 520, 520, 520, 518, 518, 518, 516, 516, 516, 516, 514, 514, 514, 514, 514, 512, 512, 512, 512, 510, 510, 510, 510, 508, 508, 508, 508, 506, 506, 506, 506, 504, 504, 504, 504, 502, 502, 502, 502, 500, 500, 500, 500, 0 }; static uint32_t g4050_fast[] = { 7842, 5898, 4384, 4258, 4152, 4052, 3956, 3864, 3786, 3714, 3632, 3564, 3498, 3444, 3384, 3324, 3276, 3228, 3174, 3128, 3086, 3044, 3002, 2968, 2930, 2892, 2860, 2824, 2794, 2760, 2732, 2704, 2676, 2650, 2618, 2594, 2568, 2548, 2524, 2500, 2478, 2454, 2436, 2414, 2392, 2376, 2354, 2338, 2318, 2302, 2282, 2266, 2252, 2232, 2218, 2202, 2188, 2174, 2160, 2142, 2128, 2116, 2102, 2088, 2076, 2062, 2054, 2040, 2028, 2020, 2014, 2008, 2004, 2002, 2002, 2002, 1946, 1882, 1826, 1770, 1716, 1662, 1612, 1568, 1526, 1488, 1454, 1422, 1390, 1362, 1336, 1310, 1288, 1264, 1242, 1222, 1204, 1184, 1166, 1150, 1134, 1118, 1104, 1090, 1076, 1064, 1050, 1038, 1026, 1016, 1004, 994, 984, 972, 964, 954, 944, 936, 928, 920, 910, 902, 896, 888, 880, 874, 866, 860, 854, 848, 840, 834, 828, 822, 816, 812, 806, 800, 796, 790, 784, 780, 776, 770, 766, 760, 756, 752, 748, 744, 740, 736, 732, 728, 724, 720, 716, 712, 708, 704, 702, 698, 694, 690, 688, 684, 682, 678, 674, 672, 668, 666, 662, 660, 656, 654, 650, 648, 646, 644, 640, 638, 636, 632, 630, 628, 624, 622, 620, 618, 616, 614, 610, 608, 606, 604, 602, 600, 598, 596, 594, 592, 590, 588, 586, 584, 582, 580, 578, 576, 574, 572, 570, 568, 566, 564, 564, 562, 560, 558, 556, 554, 552, 552, 550, 548, 546, 546, 544, 542, 540, 538, 538, 536, 534, 532, 532, 530, 528, 528, 526, 524, 522, 522, 520, 518, 518, 516, 514, 514, 512, 512, 510, 508, 508, 506, 504, 504, 502, 502, 500, 498, 498, 496, 496, 494, 494, 492, 490, 490, 488, 488, 486, 486, 484, 484, 482, 480, 480, 478, 478, 476, 476, 474, 474, 472, 472, 470, 470, 468, 468, 468, 466, 466, 464, 464, 462, 462, 460, 460, 458, 458, 456, 456, 456, 454, 454, 452, 452, 450, 450, 450, 448, 448, 446, 446, 444, 444, 444, 442, 442, 440, 440, 440, 438, 438, 438, 436, 436, 434, 434, 434, 432, 432, 432, 430, 430, 428, 428, 428, 426, 426, 426, 424, 424, 424, 422, 422, 422, 420, 420, 420, 418, 418, 418, 416, 416, 416, 414, 414, 414, 412, 412, 412, 410, 410, 410, 408, 408, 408, 406, 406, 406, 404, 404, 404, 404, 402, 402, 402, 400, 400, 400, 400, 398, 398, 398, 396, 396, 396, 396, 394, 394, 394, 392, 392, 392, 392, 390, 390, 390, 388, 388, 388, 388, 386, 386, 386, 386, 384, 384, 384, 384, 382, 382, 382, 382, 380, 380, 380, 380, 378, 378, 378, 378, 376, 376, 376, 376, 376, 374, 374, 374, 374, 374, 372, 372, 372, 372, 372, 370, 370, 370, 370, 370, 368, 368, 368, 368, 368, 366, 366, 366, 366, 366, 364, 364, 364, 364, 364, 364, 362, 362, 362, 362, 362, 360, 360, 360, 360, 360, 360, 358, 358, 358, 358, 358, 358, 356, 356, 356, 356, 356, 356, 354, 354, 354, 354, 354, 352, 352, 352, 352, 352, 352, 350, 350, 350, 350, 350, 350, 350, 348, 348, 348, 348, 348, 348, 346, 346, 346, 346, 346, 346, 344, 344, 344, 344, 344, 344, 344, 342, 342, 342, 342, 342, 342, 340, 340, 340, 340, 340, 340, 340, 338, 338, 338, 338, 338, 338, 338, 336, 336, 336, 336, 336, 336, 336, 334, 334, 334, 334, 334, 334, 334, 332, 332, 332, 332, 332, 332, 332, 332, 330, 330, 330, 330, 330, 330, 330, 328, 328, 328, 328, 328, 328, 328, 328, 326, 326, 326, 326, 326, 326, 326, 324, 324, 324, 324, 324, 324, 324, 324, 322, 322, 322, 322, 322, 322, 322, 322, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 0 }; static uint32_t g4050_high[] = { 28032, 28032, 28032, 28032, 28032, 28032, 28032, 28032, 27668, 27024, 26479, 25975, 25402, 24926, 24465, 24087, 23667, 23248, 22912, 22576, 22198, 21877, 21583, 21289, 20996, 20758, 20492, 20226, 20002, 19751, 19541, 19303, 19107, 18911, 18715, 18534, 18310, 18142, 17960, 17820, 17652, 17485, 17331, 17163, 17037, 16883, 16729, 16617, 16463, 16352, 16212, 16100, 15960, 15848, 15750, 15610, 15512, 15400, 15302, 15204, 15107, 14981, 14883, 14799, 14701, 14603, 14519, 14421, 14365, 14267, 14183, 14127, 14085, 14043, 14016, 14002, 14002, 14002, 13610, 13162, 12771, 12379, 12001, 11624, 11274, 10966, 10672, 10407, 10169, 9945, 9721, 9525, 9344, 9162, 9008, 8840, 8686, 8546, 8420, 8280, 8155, 8043, 7931, 7819, 7721, 7623, 7525, 7441, 7343, 7259, 7175, 7105, 7021, 6952, 6882, 6798, 6742, 6672, 6602, 6546, 6490, 6434, 6364, 6308, 6266, 6210, 6154, 6112, 6056, 6014, 5972, 5930, 5874, 5833, 5791, 5749, 5707, 5679, 5637, 5595, 5567, 5525, 5483, 5455, 5427, 5385, 5357, 5315, 5287, 5259, 5231, 5203, 5175, 5147, 5119, 5091, 5063, 5035, 5007, 4979, 4951, 4923, 4909, 4881, 4853, 4825, 4811, 4783, 4769, 4741, 4713, 4699, 4672, 4658, 4630, 4616, 4588, 4574, 4546, 4532, 4518, 4504, 4476, 4462, 4448, 4420, 4406, 4392, 4364, 4350, 4336, 4322, 4308, 4294, 4266, 4252, 4238, 4224, 4210, 4196, 4182, 4168, 4154, 4140, 4126, 4112, 4098, 4084, 4070, 4056, 4042, 4028, 4014, 4000, 3986, 3972, 3958, 3944, 3944, 3930, 3916, 3902, 3888, 3874, 3860, 3860, 3846, 3832, 3818, 3818, 3804, 3790, 3776, 3762, 3762, 3748, 3734, 3720, 3720, 3706, 3692, 3692, 3678, 3664, 3650, 3650, 3636, 3622, 3622, 3608, 3594, 3594, 3580, 3580, 3566, 3552, 3552, 3538, 3524, 3524, 3510, 3510, 3497, 3483, 3483, 3469, 3469, 3455, 3455, 3441, 3427, 3427, 3413, 3413, 3399, 3399, 3385, 3385, 3371, 3357, 3357, 3343, 3343, 3329, 3329, 3315, 3315, 3301, 3301, 3287, 3287, 3273, 3273, 3273, 3259, 3259, 3245, 3245, 3231, 3231, 3217, 3217, 3203, 3203, 3189, 3189, 3189, 3175, 3175, 3161, 3161, 3147, 3147, 3147, 3133, 3133, 3119, 3119, 3105, 3105, 3105, 3091, 3091, 3077, 3077, 3077, 3063, 3063, 3063, 3049, 3049, 3035, 3035, 3035, 3021, 3021, 3021, 3007, 3007, 2993, 2993, 2993, 2979, 2979, 2979, 2965, 2965, 2965, 2951, 2951, 2951, 2937, 2937, 2937, 2923, 2923, 2923, 2909, 2909, 2909, 2895, 2895, 2895, 2881, 2881, 2881, 2867, 2867, 2867, 2853, 2853, 2853, 2839, 2839, 2839, 2825, 2825, 2825, 2825, 2811, 2811, 2811, 2797, 2797, 2797, 2797, 2783, 2783, 2783, 2769, 2769, 2769, 2769, 2755, 2755, 2755, 2741, 2741, 2741, 2741, 2727, 2727, 2727, 2713, 2713, 2713, 2713, 2699, 2699, 2699, 2699, 2685, 2685, 2685, 2685, 2671, 2671, 2671, 2671, 2657, 2657, 2657, 2657, 2643, 2643, 2643, 2643, 2629, 2629, 2629, 2629, 2629, 2615, 2615, 2615, 2615, 2615, 2601, 2601, 2601, 2601, 2601, 2587, 2587, 2587, 2587, 2587, 2573, 2573, 2573, 2573, 2573, 2559, 2559, 2559, 2559, 2559, 2545, 2545, 2545, 2545, 2545, 2545, 2531, 2531, 2531, 2531, 2531, 2517, 2517, 2517, 2517, 2517, 2517, 2503, 2503, 2503, 2503, 2503, 2503, 2489, 2489, 2489, 2489, 2489, 2489, 2475, 2475, 2475, 2475, 2475, 2461, 2461, 2461, 2461, 2461, 2461, 2447, 2447, 2447, 2447, 2447, 2447, 2447, 2433, 2433, 2433, 2433, 2433, 2433, 2419, 2419, 2419, 2419, 2419, 2419, 2405, 2405, 2405, 2405, 2405, 2405, 2405, 2391, 2391, 2391, 2391, 2391, 2391, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2336, 2336, 2336, 2336, 2336, 2336, 2336, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2308, 2308, 2308, 2308, 2308, 2308, 2308, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 0 }; static uint32_t g4050_max[] = { 42752, 42752, 42752, 42752, 42752, 42752, 42752, 42752, 41824, 31456, 23381, 22709, 22144, 21610, 21098, 20608, 20192, 19808, 19370, 19008, 18656, 18368, 18048, 17728, 17472, 17216, 16928, 16682, 16458, 16234, 16010, 15829, 15626, 15424, 15253, 15061, 14901, 14720, 14570, 14421, 14272, 14133, 13962, 13834, 13696, 13589, 13461, 13333, 13216, 13088, 12992, 12874, 12757, 12672, 12554, 12469, 12362, 12277, 12170, 12085, 12010, 11904, 11829, 11744, 11669, 11594, 11520, 11424, 11349, 11285, 11210, 11136, 11072, 10997, 10954, 10880, 10816, 10773, 10741, 10709, 10688, 10677, 10677, 10677, 10378, 10037, 9738, 9440, 9152, 8864, 8597, 8362, 8138, 7936, 7754, 7584, 7413, 7264, 7125, 6986, 6869, 6741, 6624, 6517, 6421, 6314, 6218, 6133, 6048, 5962, 5888, 5813, 5738, 5674, 5600, 5536, 5472, 5418, 5354, 5301, 5248, 5184, 5141, 5088, 5034, 4992, 4949, 4906, 4853, 4810, 4778, 4736, 4693, 4661, 4618, 4586, 4554, 4522, 4480, 4448, 4416, 4384, 4352, 4330, 4298, 4266, 4245, 4213, 4181, 4160, 4138, 4106, 4085, 4053, 4032, 4010, 3989, 3968, 3946, 3925, 3904, 3882, 3861, 3840, 3818, 3797, 3776, 3754, 3744, 3722, 3701, 3680, 3669, 3648, 3637, 3616, 3594, 3584, 3562, 3552, 3530, 3520, 3498, 3488, 3466, 3456, 3445, 3434, 3413, 3402, 3392, 3370, 3360, 3349, 3328, 3317, 3306, 3296, 3285, 3274, 3253, 3242, 3232, 3221, 3210, 3200, 3189, 3178, 3168, 3157, 3146, 3136, 3125, 3114, 3104, 3093, 3082, 3072, 3061, 3050, 3040, 3029, 3018, 3008, 3008, 2997, 2986, 2976, 2965, 2954, 2944, 2944, 2933, 2922, 2912, 2912, 2901, 2890, 2880, 2869, 2869, 2858, 2848, 2837, 2837, 2826, 2816, 2816, 2805, 2794, 2784, 2784, 2773, 2762, 2762, 2752, 2741, 2741, 2730, 2730, 2720, 2709, 2709, 2698, 2688, 2688, 2677, 2677, 2666, 2656, 2656, 2645, 2645, 2634, 2634, 2624, 2613, 2613, 2602, 2602, 2592, 2592, 2581, 2581, 2570, 2560, 2560, 2549, 2549, 2538, 2538, 2528, 2528, 2517, 2517, 2506, 2506, 2496, 2496, 2496, 2485, 2485, 2474, 2474, 2464, 2464, 2453, 2453, 2442, 2442, 2432, 2432, 2432, 2421, 2421, 2410, 2410, 2400, 2400, 2400, 2389, 2389, 2378, 2378, 2368, 2368, 2368, 2357, 2357, 2346, 2346, 2346, 2336, 2336, 2336, 2325, 2325, 2314, 2314, 2314, 2304, 2304, 2304, 2293, 2293, 2282, 2282, 2282, 2272, 2272, 2272, 2261, 2261, 2261, 2250, 2250, 2250, 2240, 2240, 2240, 2229, 2229, 2229, 2218, 2218, 2218, 2208, 2208, 2208, 2197, 2197, 2197, 2186, 2186, 2186, 2176, 2176, 2176, 2165, 2165, 2165, 2154, 2154, 2154, 2154, 2144, 2144, 2144, 2133, 2133, 2133, 2133, 2122, 2122, 2122, 2112, 2112, 2112, 2112, 2101, 2101, 2101, 2090, 2090, 2090, 2090, 2080, 2080, 2080, 2069, 2069, 2069, 2069, 2058, 2058, 2058, 2058, 2048, 2048, 2048, 2048, 2037, 2037, 2037, 2037, 2026, 2026, 2026, 2026, 2016, 2016, 2016, 2016, 2005, 2005, 2005, 2005, 2005, 1994, 1994, 1994, 1994, 1994, 1984, 1984, 1984, 1984, 1984, 1973, 1973, 1973, 1973, 1973, 1962, 1962, 1962, 1962, 1962, 1952, 1952, 1952, 1952, 1952, 1941, 1941, 1941, 1941, 1941, 1941, 1930, 1930, 1930, 1930, 1930, 1920, 1920, 1920, 1920, 1920, 1920, 1909, 1909, 1909, 1909, 1909, 1909, 1898, 1898, 1898, 1898, 1898, 1898, 1888, 1888, 1888, 1888, 1888, 1877, 1877, 1877, 1877, 1877, 1877, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1856, 1856, 1856, 1856, 1856, 1856, 1845, 1845, 1845, 1845, 1845, 1845, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1824, 1824, 1824, 1824, 1824, 1824, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 0 }; static uint32_t g4050_xpa[] = { 9422, 5978, 4736, 4028, 3560, 3220, 2914, 2756, 2588, 2448, 2328, 2224, 2132, 2052, 1978, 1914, 1854, 1800, 1752, 1706, 1664, 1626, 1588, 1554, 1522, 1492, 1464, 1438, 1412, 1388, 1366, 1344, 1324, 1304, 1284, 1268, 1250, 1232, 1218, 1202, 1188, 1172, 1160, 1146, 1134, 1120, 1110, 1098, 1086, 1076, 1066, 1056, 1046, 1036, 1026, 1018, 1008, 1000, 992, 984, 976, 968, 960, 952, 946, 938, 932, 924, 918, 912, 906, 898, 892, 888, 882, 876, 870, 864, 860, 854, 848, 844, 838, 834, 828, 824, 820, 814, 810, 806, 802, 798, 794, 790, 786, 782, 778, 774, 770, 766, 762, 758, 754, 752, 748, 744, 740, 738, 734, 730, 728, 724, 722, 718, 716, 712, 710, 706, 704, 700, 698, 696, 692, 690, 686, 684, 682, 678, 676, 674, 672, 668, 666, 664, 662, 660, 656, 654, 652, 650, 648, 646, 644, 642, 638, 636, 634, 632, 630, 628, 626, 624, 622, 620, 618, 616, 614, 612, 612, 610, 608, 606, 604, 602, 600, 598, 596, 594, 594, 592, 590, 588, 586, 584, 584, 582, 580, 578, 576, 576, 574, 572, 570, 570, 568, 566, 564, 564, 562, 560, 560, 558, 556, 554, 554, 552, 550, 550, 548, 546, 546, 544, 542, 542, 540, 540, 538, 536, 536, 534, 532, 532, 530, 530, 528, 526, 526, 524, 524, 522, 522, 520, 518, 518, 516, 516, 514, 514, 512, 512, 510, 508, 508, 506, 506, 504, 504, 502, 502, 500, 500, 498, 498, 496, 496, 494, 494, 492, 492, 492, 490, 490, 488, 488, 486, 486, 484, 484, 482, 482, 480, 480, 480, 478, 478, 476, 476, 474, 474, 474, 472, 472, 470, 470, 468, 468, 468, 466, 466, 464, 464, 464, 462, 462, 462, 460, 460, 458, 458, 458, 456, 456, 454, 454, 454, 452, 452, 452, 450, 450, 450, 448, 448, 446, 446, 446, 444, 444, 444, 442, 442, 442, 440, 440, 440, 438, 438, 438, 436, 436, 436, 434, 434, 434, 432, 432, 432, 430, 430, 430, 430, 428, 428, 428, 426, 426, 426, 424, 424, 424, 424, 422, 422, 422, 420, 420, 420, 418, 418, 418, 418, 416, 416, 416, 414, 414, 414, 414, 412, 412, 412, 412, 410, 410, 410, 408, 408, 408, 408, 406, 406, 406, 406, 404, 404, 404, 404, 402, 402, 402, 402, 400, 400, 400, 400, 398, 398, 398, 398, 396, 396, 396, 396, 394, 394, 394, 394, 392, 392, 392, 392, 392, 390, 390, 390, 390, 388, 388, 388, 388, 386, 386, 386, 386, 386, 384, 384, 384, 384, 384, 382, 382, 382, 382, 380, 380, 380, 380, 380, 378, 378, 378, 378, 378, 376, 376, 376, 376, 376, 374, 374, 374, 374, 374, 372, 372, 372, 372, 372, 370, 370, 370, 370, 370, 368, 368, 368, 368, 368, 366, 366, 366, 366, 366, 364, 364, 364, 364, 364, 364, 362, 362, 362, 362, 362, 360, 360, 360, 360, 360, 360, 358, 358, 358, 358, 358, 358, 356, 356, 356, 356, 356, 354, 354, 354, 354, 354, 354, 352, 352, 352, 352, 352, 352, 350, 350, 350, 350, 350, 350, 350, 348, 348, 348, 348, 348, 348, 346, 346, 346, 346, 346, 346, 344, 344, 344, 344, 344, 344, 344, 342, 342, 342, 342, 342, 342, 340, 340, 340, 340, 340, 340, 340, 338, 338, 338, 338, 338, 338, 338, 336, 336, 336, 336, 336, 336, 336, 334, 334, 334, 334, 334, 334, 334, 332, 332, 332, 332, 332, 332, 332, 330, 330, 330, 330, 330, 330, 330, 330, 328, 328, 328, 328, 328, 328, 328, 326, 326, 326, 326, 326, 326, 326, 326, 324, 324, 324, 324, 324, 324, 324, 324, 322, 322, 322, 322, 322, 322, 322, 322, 320, 320, 320, 320, 320, 320, 320, 320, 318, 318, 318, 318, 318, 318, 318, 318, 318, 316, 316, 316, 316, 316, 316, 316, 316, 314, 314, 314, 314, 314, 314, 314, 314, 314, 312, 312, 312, 312, 312, 312, 312, 312, 312, 310, 310, 310, 310, 310, 310, 310, 310, 310, 308, 308, 308, 308, 308, 308, 308, 308, 308, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 304, 304, 304, 304, 304, 304, 304, 304, 304, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 0 }; static uint32_t cs4400f_fast[] = { 49152, 49152, 31144, 23652, 19538, 16822, 14908, 13442, 12288, 11356, 10590, 9922, 9362, 8886, 8456, 8064, 7728, 7418, 7148, 6882, 6664, 6446, 6252, 6060, 5890, 5740, 5586, 5450, 5322, 5198, 5080, 4968, 4868, 4766, 4674, 4584, 4500, 4418, 4338, 4262, 4194, 4122, 4058, 3996, 3932, 3874, 3816, 3766, 3712, 3662, 3610, 3566, 3518, 3474, 3430, 3388, 3350, 3310, 3272, 3236, 3200, 3164, 3130, 3096, 3062, 3032, 3000, 2972, 2942, 2914, 2884, 2858, 2832, 2806, 2780, 2756, 2732, 2708, 2686, 2662, 2640, 2618, 2596, 2576, 2554, 2536, 2516, 2496, 2478, 2458, 2440, 2422, 2404, 2388, 2370, 2354, 2338, 2320, 2306, 2290, 2276, 2258, 2244, 2230, 2216, 2202, 2188, 2174, 2162, 2148, 2134, 2122, 2108, 2096, 2084, 2072, 2060, 2048, 2036, 2026, 2014, 2002, 1992, 1982, 1970, 1960, 1950, 1940, 1928, 1920, 1908, 1900, 1890, 1880, 1872, 1862, 1852, 1844, 1834, 1826, 1818, 1808, 1800, 1792, 1784, 1776, 1768, 1760, 1752, 1742, 1736, 1728, 1720, 1712, 1704, 1698, 1690, 1684, 1676, 1670, 1662, 1656, 1648, 1642, 1634, 1628, 1622, 1616, 1608, 1602, 1596, 1590, 1584, 1578, 1572, 1566, 1560, 1554, 1548, 1542, 1536, 1532, 1526, 1520, 1514, 1508, 1504, 1498, 1492, 1488, 1482, 1478, 1472, 1466, 1462, 1456, 1452, 1446, 1442, 1438, 1432, 1428, 1424, 1418, 1414, 1410, 1404, 1400, 1396, 1390, 1386, 1382, 1378, 1374, 1370, 1364, 1360, 1356, 1352, 1348, 1344, 1340, 1336, 1332, 1328, 1324, 1320, 1316, 1312, 1308, 1304, 1302, 1298, 1294, 1290, 1286, 1282, 1278, 1276, 1272, 1268, 1264, 1262, 1258, 1254, 1250, 1248, 1244, 1240, 1238, 1234, 1230, 1228, 1224, 1222, 1218, 1214, 1212, 1208, 1206, 1202, 1200, 1196, 1194, 1190, 1186, 1184, 1182, 1178, 1176, 1172, 1170, 1166, 1164, 1162, 1158, 1156, 1152, 1150, 1148, 1144, 1142, 1138, 1136, 1134, 1130, 1128, 1126, 1122, 1120, 1118, 1116, 1112, 1110, 1108, 1106, 1102, 1100, 1098, 1096, 1092, 1090, 1088, 1086, 1082, 1080, 1078, 1076, 1074, 1072, 1068, 1066, 1064, 1062, 1060, 1058, 1056, 1054, 1052, 1048, 1046, 1044, 1042, 1040, 1038, 1036, 1034, 1032, 1030, 1028, 1026, 1024, 1022, 1020, 1018, 1016, 1014, 1012, 1010, 1008, 1006, 1004, 1002, 1000, 998, 996, 994, 992, 990, 988, 986, 984, 982, 980, 978, 976, 974, 972, 972, 970, 968, 966, 964, 962, 960, 958, 956, 956, 954, 952, 950, 948, 946, 944, 944, 942, 940, 938, 936, 934, 934, 932, 930, 928, 926, 926, 924, 922, 920, 918, 918, 916, 914, 912, 912, 910, 908, 906, 904, 904, 902, 900, 898, 898, 896, 894, 892, 892, 890, 888, 888, 886, 884, 882, 882, 880, 878, 878, 876, 874, 874, 872, 870, 868, 868, 866, 864, 864, 862, 860, 860, 858, 856, 856, 854, 852, 852, 850, 848, 848, 846, 846, 844, 842, 842, 840, 838, 838, 836, 834, 834, 832, 832, 830, 828, 828, 826, 826, 824, 822, 822, 820, 820, 818, 816, 816, 814, 814, 812, 812, 810, 808, 808, 806, 806, 804, 802, 802, 800, 800, 798, 798, 796, 796, 794, 792, 792, 790, 790, 788, 788, 786, 786, 784, 784, 782, 782, 780, 780, 778, 778, 776, 774, 774, 772, 772, 770, 770, 768, 768, 766, 766, 764, 764, 762, 762, 760, 760, 758, 758, 758, 756, 756, 754, 754, 752, 752, 750, 750, 748, 748, 746, 746, 744, 744, 742, 742, 740, 740, 738, 738, 738, 736, 736, 734, 734, 732, 732, 730, 730, 730, 728, 728, 726, 726, 724, 724, 722, 722, 722, 720, 720, 718, 718, 718, 716, 716, 714, 714, 712, 712, 712, 710, 710, 708, 708, 708, 706, 706, 704, 704, 702, 702, 702, 700, 700, 698, 698, 698, 696, 696, 694, 694, 694, 692, 692, 692, 690, 690, 688, 688, 688, 686, 686, 684, 684, 684, 682, 682, 682, 680, 680, 680, 678, 678, 676, 676, 676, 674, 674, 674, 672, 672, 670, 670, 670, 668, 668, 668, 666, 666, 666, 664, 664, 664, 662, 662, 660, 660, 660, 658, 658, 658, 656, 656, 656, 654, 654, 654, 652, 652, 652, 650, 650, 650, 648, 648, 648, 646, 646, 646, 644, 644, 644, 642, 642, 642, 640, 640, 640, 640, 638, 638, 638, 636, 636, 636, 634, 634, 634, 632, 632, 632, 630, 630, 630, 630, 628, 628, 628, 626, 626, 626, 624, 624, 624, 624, 622, 622, 622, 620, 620, 620, 618, 618, 618, 618, 616, 616, 616, 614, 614, 614, 614, 612, 612, 612, 610, 610, 610, 610, 608, 608, 608, 606, 606, 606, 606, 604, 604, 604, 604, 602, 602, 602, 600, 600, 600, 600, 598, 598, 598, 598, 596, 596, 596, 594, 594, 594, 594, 592, 592, 592, 592, 590, 590, 590, 590, 588, 588, 588, 586, 586, 586, 586, 584, 584, 584, 584, 582, 582, 582, 582, 580, 580, 580, 580, 578, 578, 578, 578, 576, 576, 576, 576, 574, 574, 574, 574, 574, 572, 572, 572, 572, 570, 570, 570, 570, 568, 568, 568, 568, 566, 566, 566, 566, 564, 564, 564, 564, 564, 562, 562, 562, 562, 560, 560, 560, 560, 558, 558, 558, 558, 558, 556, 556, 556, 556, 554, 554, 554, 554, 554, 552, 552, 552, 552, 550, 550, 550, 550, 550, 548, 548, 548, 548, 546, 546, 546, 546, 546, 544, 544, 544, 544, 544, 542, 542, 542, 542, 540, 540, 540, 540, 540, 538, 538, 538, 538, 538, 536, 536, 536, 536, 536, 534, 534, 534, 534, 534, 532, 532, 532, 532, 532, 530, 530, 530, 530, 530, 528, 528, 528, 528, 528, 526, 526, 526, 526, 526, 524, 524, 524, 524, 524, 522, 522, 522, 522, 522, 520, 520, 520, 520, 520, 520, 518, 518, 518, 518, 518, 516, 516, 516, 516, 516, 514, 514, 514, 514, 514, 514, 512, 512, 512, 512, 512, 510, 510, 510, 510, 510, 510, 508, 508, 508, 508, 508, 506, 506, 506, 506, 506, 506, 504, 504, 504, 504, 504, 502, 502, 502, 502, 502, 502, 500, 500, 500, 500, 500, 500, 498, 498, 498, 498, 498, 498, 496, 496, 496, 496, 496, 496, 494, 494, 494, 494, 494, 494, 492, 492, 492, 492, 492, 492, 490, 490, 490, 490, 490, 490, 488, 488, 488, 488, 488, 488, 486, 486, 486, 486, 486, 486, 484, 484, 484, 484, 484, 484, 484, 0, 0, 0, 0, 0 }; static uint32_t cs8400f_fast[] = { 8743, 8205, 7017, 6201, 4938, 4016, 3371, 2966, 2682, 2469, 2296, 2159, 2041, 1942, 1857, 1782, 1716, 1656, 1602, 1554, 1510, 1470, 1432, 1398, 1366, 1336, 1309, 1282, 1258, 1235, 1213, 1193, 1173, 1154, 1137, 1120, 1104, 1089, 1074, 1060, 1047, 1034, 1022, 1010, 998, 987, 976, 966, 956, 946, 937, 928, 919, 911, 902, 894, 887, 879, 872, 864, 858, 851, 844, 838, 832, 825, 819, 814, 808, 802, 797, 792, 786, 781, 776, 771, 766, 762, 757, 753, 748, 744, 740, 736, 731, 728, 724, 720, 716, 712, 709, 705, 701, 698, 695, 691, 688, 685, 682, 679, 675, 672, 669, 666, 664, 661, 658, 655, 652, 650, 647, 644, 642, 639, 637, 634, 632, 629, 627, 625, 622, 620, 618, 616, 613, 611, 609, 607, 605, 603, 601, 599, 597, 595, 593, 591, 589, 587, 585, 583, 581, 580, 578, 576, 574, 573, 571, 569, 567, 566, 564, 563, 561, 559, 558, 556, 555, 553, 552, 550, 549, 547, 546, 544, 543, 542, 540, 539, 537, 536, 535, 533, 532, 531, 529, 528, 527, 526, 524, 523, 522, 521, 519, 518, 517, 516, 515, 514, 512, 511, 510, 509, 508, 507, 506, 505, 504, 502, 501, 500, 499, 498, 497, 496, 495, 494, 493, 492, 491, 490, 489, 488, 488, 487, 486, 485, 484, 483, 482, 481, 480, 479, 478, 477, 477, 476, 475, 474, 473, 472, 472, 471, 470, 469, 468, 467, 467, 466, 465, 464, 464, 463, 462, 461, 460, 460, 459, 458, 457, 457, 456, 455, 454, 454, 453, 452, 452, 451, 450, 449, 449, 448, 448, 447, 446, 446, 445, 444, 444, 443, 442, 442, 441, 440, 440, 439, 438, 438, 437, 437, 436, 435, 435, 434, 434, 433, 432, 432, 431, 431, 430, 429, 429, 428, 428, 427, 427, 426, 425, 425, 424, 424, 423, 423, 422, 422, 421, 421, 420, 420, 419, 419, 418, 417, 417, 416, 416, 416, 415, 414, 414, 414, 413, 412, 412, 412, 411, 411, 410, 410, 409, 409, 408, 408, 407, 407, 406, 406, 406, 405, 405, 404, 404, 403, 403, 402, 402, 402, 401, 401, 400, 400, 399, 399, 398, 398, 398, 397, 397, 396, 396, 396, 395, 395, 394, 394, 394, 393, 393, 392, 392, 392, 391, 391, 391, 390, 390, 389, 389, 389, 388, 388, 387, 387, 387, 386, 386, 385, 385, 385, 384, 384, 384, 383, 383, 383, 382, 382, 382, 381, 381, 381, 380, 380, 380, 379, 379, 379, 378, 378, 378, 377, 377, 377, 376, 376, 376, 375, 375, 375, 374, 374, 374, 373, 373, 373, 372, 372, 372, 371, 371, 371, 370, 370, 370, 370, 369, 369, 369, 368, 368, 368, 368, 367, 367, 367, 367, 366, 366, 366, 365, 365, 365, 365, 364, 364, 364, 363, 363, 363, 363, 362, 362, 362, 362, 361, 361, 361, 360, 360, 360, 360, 359, 359, 359, 358, 358, 358, 358, 357, 357, 357, 356, 356, 356, 356, 355, 355, 355, 355, 354, 354, 354, 354, 354, 353, 353, 353, 353, 352, 352, 352, 352, 352, 351, 351, 351, 351, 350, 350, 350, 350, 350, 349, 349, 349, 349, 348, 348, 348, 348, 348, 347, 347, 347, 347, 346, 346, 346, 346, 346, 345, 345, 345, 345, 344, 344, 344, 344, 344, 343, 343, 343, 343, 342, 342, 342, 342, 342, 341, 341, 341, 341, 340, 340, 340, 340, 340, 339, 339, 339, 339, 338, 338, 338, 338, 338, 337, 337, 337, 337, 337, 337, 336, 336, 336, 336, 336, 336, 335, 335, 335, 335, 335, 335, 334, 334, 334, 334, 334, 334, 333, 333, 333, 333, 333, 333, 332, 332, 332, 332, 332, 332, 331, 331, 331, 331, 331, 331, 330, 330, 330, 330, 330, 330, 329, 329, 329, 329, 329, 329, 328, 328, 328, 328, 328, 328, 327, 327, 327, 327, 327, 327, 326, 326, 326, 326, 326, 326, 325, 325, 325, 325, 325, 325, 324, 324, 324, 324, 324, 324, 323, 323, 323, 323, 323, 323, 322, 322, 322, 322, 322, 322, 321, 321, 321, 321, 321, 321, 320, 320, 320, 320, 320, 320, 319, 319, 319, 319, 319, 319, 318, 318, 318, 318, 318, 318, 317, 317, 317, 317, 317, 317, 316, 316, 316, 316, 316, 316, 315, 315, 315, 315, 315, 315, 314, 314, 314, 314, 314, 314, 313, 313, 313, 313, 313, 313, 312, 312, 312, 312, 312, 312, 311, 311, 311, 311, 311, 311, 310, 310, 310, 310, 310, 310, 309, 309, 309, 309, 309, 309, 308, 308, 308, 308, 308, 308, 307, 307, 307, 307, 307, 307, 306, 306, 306, 306, 306, 306, 305, 305, 305, 305, 305, 305, 304, 304, 304, 304, 304, 304, 303, 303, 303, 303, 303, 303, 302, 302, 302, 302, 302, 302, 302, 301, 301, 301, 301, 301, 301, 301, 301, 301, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 0, 0, 0, 0, 0 }; static uint32_t motor_speeds_cs8600f[] = { 54612, 54612, 34604, 26280, 21708, 18688, 16564, 14936, 13652, 12616, 11768, 11024, 10400, 9872, 9392, 8960, 8584, 8240, 7940, 7648, 7404, 7160, 6948, 6732, 6544, 6376, 6208, 6056, 5912, 5776, 5644, 5520, 5408, 5292, 5192, 5092, 5000, 4908, 4820, 4736, 4660, 4580, 4508, 4440, 4368, 4304, 4240, 4184, 4124, 4068, 4012, 3960, 3908, 3860, 3808, 3764, 3720, 3676, 3636, 3592, 3552, 3516, 3476, 3440, 3400, 3368, 3332, 3300, 3268, 3236, 3204, 3176, 3148, 3116, 3088, 3060, 3036, 3008, 2984, 2956, 2932, 2908, 2884, 2860, 2836, 2816, 2796, 2772, 2752, 2732, 2708, 2692, 2672, 2652, 2632, 2616, 2596, 2576, 2560, 2544, 2528, 2508, 2492, 2476, 2460, 2444, 2432, 2416, 2400, 2384, 2372, 2356, 2344, 2328, 2316, 2304, 2288, 2276, 2260, 2252, 2236, 2224, 2212, 2200, 2188, 2176, 2164, 2156, 2144, 2132, 2120, 2108, 2100, 2088, 2080, 2068, 2056, 2048, 2036, 2028, 2020, 2008, 2000, 1988, 1980, 1972, 1964, 1952, 1944, 1936, 1928, 1920, 1912, 1900, 1892, 1884, 1876, 1868, 1860, 1856, 1848, 1840, 1832, 1824, 1816, 1808, 1800, 1796, 1788, 1780, 1772, 1764, 1760, 1752, 1744, 1740, 1732, 1724, 1720, 1712, 1708, 1700, 1692, 1688, 1680, 1676, 1668, 1664, 1656, 1652, 1644, 1640, 1636, 1628, 1624, 1616, 1612, 1608, 1600, 1596, 1592, 1584, 1580, 1576, 1568, 1564, 1560, 1556, 1548, 1544, 1540, 1536, 1528, 1524, 1520, 1516, 1512, 1508, 1500, 0 }; static uint32_t motor_speeds_plustek_7200i_1[] = { 11000, 11000, 0 }; static uint32_t motor_speeds_plustek_7200i_2[] = { 15880, 15880, 0 }; static std::uint32_t motor_speeds_plustek_7300_1[] = { 31250, 3105, 2266, 1883, 1653, 1512, 1512, 0 }; static std::uint32_t motor_speeds_plustek_7500i_1[] = { 31250, 3105, 2266, 1883, 1653, 1512, 1512, 0 }; static std::uint32_t motor_speeds_plustek_7500i_2[] = { 31250, 3105, 2266, 1883, 1653, 1493, 1375, 1375, 0 }; /* TODO: 1800 dpi: 31250, 3105, 3025, 3025 3600 dpi: 31250, 6050, 6050 7200 dpi: 31250, 12100, 12100 isrd: 1800 dpi: 31250, 3105, 2750, 2750 3600 dpi: 31250, 5500, 5500, 7200 dpi: 31250, 11000, 11000, */ Motor_Profile gl843_motor_profiles[] = { { MotorId::KVSS080, 8000, StepType::HALF, kvss080 }, { MotorId::G4050, 8016, StepType::HALF, g4050_fast }, { MotorId::G4050, 11640, StepType::HALF, cs4400f_fast }, { MotorId::G4050, 15624, StepType::HALF, g4050_xpa }, { MotorId::G4050, 42752, StepType::QUARTER, g4050_max }, { MotorId::G4050, 56064, StepType::HALF, g4050_high }, { MotorId::CANON_8400F, 50000, StepType::QUARTER, cs8400f_fast }, { MotorId::CANON_8600F, 0x59d8, StepType::QUARTER, motor_speeds_cs8600f }, // FIXME: if the exposure is lower then we'll select another motor { MotorId::PLUSTEK_OPTICFILM_7200I, 0x19c8, StepType::HALF, motor_speeds_plustek_7200i_1}, { MotorId::PLUSTEK_OPTICFILM_7200I, 0x2538, StepType::HALF, motor_speeds_plustek_7200i_2}, { MotorId::PLUSTEK_OPTICFILM_7300, 0x2f44, StepType::QUARTER, motor_speeds_plustek_7300_1}, { MotorId::PLUSTEK_OPTICFILM_7500I, 0x2f44, StepType::QUARTER, motor_speeds_plustek_7500i_1}, { MotorId::PLUSTEK_OPTICFILM_7500I, 0x2af8, StepType::QUARTER, motor_speeds_plustek_7500i_2}, { MotorId::UNKNOWN, 0, StepType::FULL, nullptr }, }; /* base motor slopes in full step unit */ /* target=((exposure * dpi) / base_dpi)>>step_type; */ static uint32_t img101_high[] = { 22000, 22000, 22000, 18450, 15974, 14284, 13054, 12076, 11286, 10660, 10100, 9632, 9224, 8864, 8532, 8250, 7986, 7750, 7530, 7330, 7142, 6972, 6810, 6656, 6518, 6384, 6264, 6150, 6038, 5930, 5834, 5732, 5642, 5560, 5476, 5398, 5324, 5252, 5180, 5112, 5050, 4990, 4926, 4868, 4816, 4760, 4708, 4658, 4608, 4562, 4516, 4472, 4428, 4384, 4344, 4306, 4266, 4230, 4194, 4156, 4122, 4088, 4054, 4022, 3990, 3960, 3930, 3900, 3872, 3842, 3816, 3790, 3762, 3736, 3710, 3686, 3662, 3638, 3614, 3590, 3570, 3548, 3526, 3506, 3484, 3462, 3442, 3424, 3402, 3384, 3366, 3346, 3328, 3310, 3292, 3276, 3258, 3242, 3224, 3208, 3192, 3176, 3162, 3146, 3130, 3114, 3100, 3086, 3072, 3058, 3044, 3030, 3016, 3002, 2990, 2976, 2964, 2950, 2938, 2926, 2914, 2902, 2890, 2878, 2866, 2854, 2844, 2832, 2820, 2810, 2800, 2790, 2778, 2768, 2756, 2748, 2738, 2726, 2716, 2708, 2698, 2688, 2678, 2668, 2660, 2650, 2642, 2632, 2624, 2616, 2606, 2598, 2588, 2580, 2572, 2564, 2556, 2548, 2540, 2530, 2522, 2516, 2508, 2500, 2492, 2486, 2476, 2470, 2462, 2454, 2448, 2440, 2434, 2426, 2420, 2412, 2406, 2400, 2392, 2386, 2378, 2372, 2366, 2360, 2354, 2346, 2340, 2334, 2328, 2322, 2314, 2310, 2304, 2296, 2292, 2286, 2280, 2274, 2268, 2262, 2256, 2252, 2246, 2240, 2234, 2230, 2224, 2218, 2214, 2208, 2202, 2196, 2192, 2188, 2182, 2176, 2172, 2166, 2162, 2156, 2152, 2146, 2142, 2136, 2132, 2128, 2124, 2118, 2114, 2108, 2104, 2100, 2096, 2092, 2086, 2082, 2078, 2072, 2068, 2064, 2060, 2056, 2052, 2048, 2044, 2038, 2034, 2030, 2026, 2022, 2018, 2014, 2010, 2006, 2002, 1998, 1994, 1990, 1988, 1984, 1980, 1976, 1972, 1968, 1964, 1960, 1956, 1952, 1950, 1946, 1942, 1938, 1934, 1932, 1928, 1924, 1920, 1918, 1914, 1910, 1908, 1904, 1900, 1898, 1894, 1890, 1888, 1884, 1880, 1878, 1874, 1870, 1868, 1864, 1862, 1858, 1854, 1852, 1848, 1846, 1842, 1840, 1836, 1834, 1830, 1828, 1824, 1822, 1818, 1816, 1812, 1810, 1806, 1804, 1800, 1798, 1794, 1792, 1790, 1786, 1784, 1780, 1778, 1776, 1772, 1770, 1768, 1764, 1762, 1758, 1756, 1754, 1752, 1748, 1746, 1744, 1740, 1738, 1736, 1734, 1730, 1728, 1726, 1724, 1720, 1718, 1716, 1714, 1710, 1708, 1706, 1704, 1700, 1698, 1696, 1694, 1692, 1688, 1686, 1684, 1682, 1680, 1676, 1674, 1672, 1670, 1668, 1666, 1664, 1662, 1660, 1656, 1654, 1652, 1650, 1648, 1646, 1644, 1642, 1638, 1636, 1634, 1632, 1630, 1628, 1626, 1624, 1622, 1620, 1618, 1616, 1614, 1612, 1610, 1608, 1606, 1604, 1602, 1600, 1598, 1596, 1594, 1592, 1590, 1588, 1586, 1584, 1582, 1580, 1578, 1576, 1574, 1572, 1570, 1568, 1566, 1564, 1562, 1560, 1558, 1556, 1556, 1554, 1552, 1550, 1548, 1546, 1544, 1542, 1540, 1538, 1536, 1536, 1534, 1532, 1530, 1528, 1526, 1524, 1522, 1522, 1520, 1518, 1516, 1514, 1512, 1510, 1510, 1508, 1506, 1504, 1502, 1500, 1500, 1498, 1496, 1494, 1492, 1490, 1490, 1488, 1486, 1484, 1482, 1482, 1480, 1478, 1476, 1474, 1474, 1472, 1470, 1468, 1466, 1466, 1464, 1462, 1460, 1460, 1458, 1456, 1454, 1454, 1452, 1450, 1448, 1448, 1446, 1444, 1442, 1442, 1440, 1438, 1438, 1436, 1434, 1432, 1432, 1430, 1428, 1426, 1426, 1424, 1422, 1422, 1420, 1418, 1418, 1416, 1414, 1412, 1412, 1410, 1408, 1408, 1406, 1404, 1404, 1402, 1400, 1400, 1398, 1396, 1394, 1394, 1392, 1390, 1390, 1388, 1388, 1386, 1384, 1384, 1382, 1380, 1380, 1378, 1376, 1376, 1374, 1374, 1372, 1370, 1370, 1368, 1366, 1366, 1364, 1362, 1362, 1360, 1360, 1358, 1356, 1356, 1354, 1352, 1352, 1350, 1350, 1348, 1348, 1346, 1344, 1344, 1342, 1340, 1340, 1338, 1338, 1336, 1336, 1334, 1332, 1332, 1330, 1330, 1328, 1328, 1326, 1324, 1324, 1322, 1322, 1320, 1318, 1318, 1316, 1316, 1314, 1314, 1312, 1310, 1310, 1308, 1308, 1306, 1306, 1304, 1304, 1302, 1302, 1300, 1300, 1298, 1298, 1296, 1294, 1294, 1292, 1292, 1290, 1290, 1288, 1288, 1286, 1286, 1284, 1284, 1282, 1282, 1280, 1280, 1278, 1278, 1276, 1276, 1274, 1272, 1272, 1270, 1270, 1270, 1268, 1268, 1266, 1264, 1264, 1262, 1262, 1260, 1260, 1260, 1258, 1258, 1256, 1254, 1254, 1254, 1252, 1252, 1250, 1250, 1248, 1248, 1246, 1246, 1244, 1244, 1242, 1242, 1240, 1240, 1238, 1238, 1236, 1236, 1236, 1234, 1234, 1232, 1232, 1230, 1230, 1228, 1228, 1226, 1226, 1226, 1224, 1224, 1222, 1222, 1220, 1220, 1218, 1218, 1218, 1216, 1216, 1214, 1214, 1212, 1212, 1210, 1210, 1210, 1208, 1208, 1206, 1206, 1204, 1204, 1204, 1202, 1202, 1200, 1200, 1198, 1198, 1198, 1196, 1196, 1194, 1194, 1192, 1192, 1192, 1190, 1190, 1188, 1188, 1188, 1186, 1186, 1184, 1184, 1182, 1182, 1182, 1180, 1180, 1180, 1178, 1178, 1176, 1176, 1174, 1174, 1174, 1172, 1172, 1172, 1170, 1170, 1168, 1168, 1168, 1166, 1166, 1164, 1164, 1164, 1162, 1162, 1160, 1160, 1160, 1158, 1158, 1156, 1156, 1156, 1154, 1154, 1154, 1152, 1152, 1152, 1150, 1150, 1148, 1148, 1148, 1146, 1146, 1146, 1144, 1144, 1142, 1142, 1142, 1140, 1140, 1140, 1138, 1138, 1136, 1136, 1136, 1134, 1134, 1134, 1132, 1132, 1132, 1130, 1130, 1130, 1128, 1128, 1126, 1126, 1126, 1124, 1124, 1124, 1122, 1122, 1122, 1120, 1120, 1120, 1118, 1118, 1118, 1116, 1116, 1116, 1114, 1114, 1114, 1112, 1112, 1112, 1110, 1110, 1110, 1108, 1108, 1108, 1106, 1106, 1106, 1104, 1104, 1104, 1102, 1102, 1102, 1100, 1100, 1100, 1098, 1098, 1098, 1096, 1096, 1096, 1094, 1094, 1094, 1092, 1092, 1092, 1090, 1090, 1090, 1088, 1088, 1088, 1086, 1086, 1086, 1086, 1084, 1084, 1084, 1082, 1082, 1082, 1080, 1080, 1080, 1078, 1078, 1078, 1078, 1076, 1076, 1076, 1074, 1074, 1074, 1072, 1072, 1072, 1072, 1070, 1070, 1070, 1068, 1068, 1068, 1066, 1066, 1066, 1064, 1064, 1064, 1064, 1062, 1062, 1062, 1060, 1060, 1060, 1058, 1058, 1058, 1058, 1056, 1056, 1056, 1054, 1054, 1054, 1054, 1052, 1052, 1052, 1050, 1050, 1050, 1050, 1048, 1048, 1048, 1046, 1046, 1046, 1046, 1044, 1044, 1044, 1044, 1042, 1042, 1042, 1040, 1040, 1040, 1040, 1038, 1038, 1038, 1036, 1036, 1036, 1036, 1034, 1034, 1034, 1034, 1032, 1032, 1032, 1030, 1030, 1030, 1030, 1028, 1028, 1028, 1028, 1026, 1026, 1026, 1026, 1024, 1024, 1024, 1022, 1022, 1022, 1022, 1020, 1020, 1020, 1020, 1018, 1018, 1018, 1018, 1016, 1016, 1016, 1016, 1014, 1014, 1014, 1014, 1012, 1012, 1012, 1012, 1010, 1010, 1010, 1010, 1008, 1008, 1008, 1008, 1006, 1006, 1006, 1006, 1004, 1004, 1004, 1004, 1002, 1002, 1002, 1002, 1000, 1000, 1000, 1000, 0 }; /** * database of motor profiles */ Motor_Profile gl846_motor_profiles[] = { { MotorId::IMG101, 11000, StepType::HALF, img101_high}, { MotorId::PLUSTEK_OPTICBOOK_3800, 11000, StepType::HALF, img101_high}, { MotorId::UNKNOWN, 0, StepType::FULL, nullptr }, }; /* base motor sopes in full step unit */ /* target=((exposure * dpi) / base_dpi)>>step_type; */ static uint32_t lide200_base[] = { 46876, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2336, 2329, 2322, 2314, 2307, 2300, 2292, 2285, 2278, 2271, 2263, 2256, 2249, 2241, 2234, 2227, 2219, 2212, 2205, 2198, 2190, 2183, 2176, 2168, 2161, 2154, 2146, 2139, 2132, 2125, 2117, 2110, 2103, 2095, 2088, 2081, 2073, 2066, 2059, 2052, 2044, 2037, 2030, 2022, 2015, 2008, 2001, 1993, 1986, 1979, 1971, 1964, 1957, 1949, 1942, 1935, 1928, 1920, 1913, 1906, 1898, 1891, 1884, 1876, 1869, 1862, 1855, 1847, 1840, 1833, 1825, 1818, 1811, 1803, 1796, 1789, 1782, 1774, 1767, 1760, 1752, 1745, 1738, 1731, 1723, 1716, 1709, 1701, 1694, 1687, 1679, 1672, 1665, 1658, 1650, 1643, 1636, 1628, 1621, 1614, 1606, 1599, 1592, 1585, 1577, 1570, 1563, 1555, 1548, 1541, 1533, 1526, 1519, 1512, 1504, 1497, 1490, 1482, 1475, 1468, 1461, 1453, 1446, 1439, 1431, 1424, 1417, 1409, 1402, 1395, 1388, 1380, 1373, 1366, 1358, 1351, 1344, 1336, 1329, 1322, 1315, 1307, 1300, 1293, 1285, 1278, 1271, 1263, 1256, 1249, 1242, 1234, 1227, 1220, 1212, 1205, 1198, 1191, 1183, 1176, 1169, 1161, 1154, 1147, 1139, 1132, 1125, 1118, 1110, 1103, 1096, 1088, 1081, 1074, 1066, 1059, 1052, 1045, 1037, 1030, 1023, 1015, 1008, 1001, 993, 986, 979, 972, 964, 957, 950, 942, 935, 928, 921, 913, 906, 899, 891, 884, 877, 869, 862, 855, 848, 840, 833, 826, 818, 811, 804, 796, 789, 782, 775, 767, 760, 753, 745, 738, 731, 723, 716, 709, 702, 694, 687, 680, 672, 665, 658, 651, 643, 636, 629, 621, 614, 607, 599, 592, 585, 578, 570, 563, 556, 534, 534, 0 }; static uint32_t lide200_medium[] = { 46876, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 2343, 2336, 2329, 2322, 2314, 2307, 2300, 2292, 2285, 2278, 2271, 2263, 2256, 2249, 2241, 2234, 2227, 2219, 2212, 2205, 2198, 2190, 2183, 2176, 2168, 2161, 2154, 2146, 2139, 2132, 2125, 2117, 2110, 2103, 2095, 2088, 2081, 2073, 2066, 2059, 2052, 2044, 2037, 2030, 2022, 2015, 2008, 2001, 1993, 1986, 1979, 1971, 1964, 1957, 1949, 1942, 1935, 1928, 1920, 1913, 1906, 1898, 1891, 1884, 1876, 1869, 1862, 1855, 1847, 1840, 1833, 1825, 1818, 1811, 1803, 1796, 1789, 1782, 1774, 1767, 1760, 1752, 1745, 1738, 1731, 1723, 1716, 1709, 1701, 1694, 1687, 1679, 1672, 1665, 1658, 1650, 1643, 1636, 1628, 1621, 1614, 1606, 1599, 1592, 1585, 1577, 1570, 1563, 1555, 1548, 1541, 1533, 1526, 1519, 1512, 1504, 1497, 1490, 1482, 1475, 1468, 1461, 1453, 1446, 1439, 1431, 1424, 1417, 1409, 1402, 1395, 1388, 1380, 1373, 1366, 1358, 1351, 1344, 1336, 1329, 1322, 1315, 1307, 1300, 1293, 1285, 1278, 1271, 1263, 1256, 1249, 1242, 1234, 1227, 1220, 1212, 1205, 1198, 1191, 1183, 1176, 1169, 1161, 1154, 1147, 1139, 1132, 1125, 1118, 1110, 1103, 1096, 1088, 1081, 1074, 1066, 1059, 1052, 1045, 1037, 1030, 1023, 1015, 1008, 1001, 993, 986, 979, 972, 964, 957, 950, 942, 935, 928, 921, 913, 906, 899, 891, 884, 877, 869, 862, 855, 848, 840, 833, 826, 818, 811, 804, 796, 789, 782, 775, 767, 760, 753, 745, 738, 731, 723, 716, 709, 702, 694, 687, 680, 672, 665, 658, 651, 643, 636, 629, 621, 614, 607, 599, 592, 585, 578, 570, 563, 556, 534, 534, 0 }; static uint32_t lide200_high[] = { 31680, 31680, 31680, 31680, 31680, 31680, 31680, 31680, 31680, 31680, 31680, 31680, 31680, 31680, 31680, 31680, 31680, 2219, 2212, 2205, 2198, 2190, 2183, 2176, 2168, 2161, 2154, 2146, 2139, 2132, 2125, 2117, 2110, 2103, 2095, 2088, 2081, 2073, 2066, 2059, 2052, 2044, 2037, 2030, 2022, 2015, 2008, 2001, 1993, 1986, 1979, 1971, 1964, 1957, 1949, 1942, 1935, 1928, 1920, 1913, 1906, 1898, 1891, 1884, 1876, 1869, 1862, 1855, 1847, 1840, 1833, 1825, 1818, 1811, 1803, 1796, 1789, 1782, 1774, 1767, 1760, 1752, 1745, 1738, 1731, 1723, 1716, 1709, 1701, 1694, 1687, 1679, 1672, 1665, 1658, 1650, 1643, 1636, 1628, 1621, 1614, 1606, 1599, 1592, 1585, 1577, 1570, 1563, 1555, 1548, 1541, 1533, 1526, 1519, 1512, 1504, 1497, 1490, 1482, 1475, 1468, 1461, 1453, 1446, 1439, 1431, 1424, 1417, 1409, 1402, 1395, 1388, 1380, 1373, 1366, 1358, 1351, 1344, 1336, 1329, 1322, 1315, 1307, 1300, 1293, 1285, 1278, 1271, 1263, 1256, 1249, 1242, 1234, 1227, 1220, 1212, 1205, 1198, 1191, 1183, 1176, 1169, 1161, 1154, 1147, 1139, 1132, 1125, 1118, 1110, 1103, 1096, 1088, 1081, 1074, 1066, 1059, 1052, 1045, 1037, 1030, 1023, 1015, 1008, 1001, 993, 986, 979, 972, 964, 957, 950, 942, 935, 928, 921, 913, 906, 899, 891, 884, 877, 869, 862, 855, 848, 840, 833, 826, 818, 811, 804, 796, 789, 782, 775, 767, 760, 753, 745, 738, 731, 723, 716, 709, 702, 694, 687, 680, 672, 665, 658, 651, 643, 636, 629, 621, 614, 607, 599, 592, 585, 578, 570, 563, 556, 534, 534, 0 }; static uint32_t lide700_medium[] = { 46876, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2302, 2286, 2274, 2266, 2258, 2252, 2244, 2240, 2234, 2228, 2224, 2218, 2216, 2210, 2208, 2202, 2200, 2194, 2192, 2190, 2186, 2182, 2180, 2176, 2174, 2172, 2170, 2166, 2162, 2160, 2156, 2154, 2152, 2150, 2150, 2146, 2144, 2142, 2140, 2136, 2134, 2132, 2130, 2130, 2128, 2124, 2122, 2120, 2120, 2118, 2116, 2112, 2112, 2110, 2108, 2106, 2106, 2104, 2102, 2102, 2098, 2096, 2094, 2094, 2092, 2090, 2090, 2086, 2084, 2084, 2082, 2082, 2080, 2078, 2078, 2076, 2074, 2074, 2070, 2070, 2068, 2066, 2066, 2064, 2064, 2062, 2062, 2060, 2058, 2058, 2054, 2054, 2052, 2052, 2050, 2050, 2048, 2048, 2046, 2046, 2044, 2042, 2042, 2040, 2040, 2038, 2038, 2034, 2034, 2032, 2032, 2030, 2030, 2028, 2028, 2026, 2026, 2022, 2022 }; static uint32_t lide700_high[] = { 46876, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864, 15864 }; /* 5190 trop * 5186 pas assez */ /* static uint32_t lide200_max[] = { 124992, 124992, 124992, 124992, 124992, 124992, 124992, 124992, 124992, 124992, 124992, 124992, 124992, 124992, 124992, 124992, 124992, 2219,2212,2205,2198,2190,2183,2176,2168,2161,2154,2146,2139,2132,2125,2117,2110,2103,2095,2088,2081,2073,2066,2059,2052,2044,2037,2030,2022,2015,2008,2001,1993,1986,1979,1971,1964,1957,1949,1942,1935,1928,1920,1913,1906,1898,1891,1884,1876,1869,1862,1855,1847,1840,1833,1825,1818,1811,1803,1796,1789,1782,1774,1767,1760,1752,1745,1738,1731,1723,1716,1709,1701,1694,1687,1679,1672,1665,1658,1650,1643,1636,1628,1621,1614,1606,1599,1592,1585,1577,1570,1563,1555,1548,1541,1533,1526,1519,1512,1504,1497,1490,1482,1475,1468,1461,1453,1446,1439,1431,1424,1417,1409,1402,1395,1388,1380,1373,1366,1358,1351,1344,1336,1329,1322,1315,1307,1300,1293,1285,1278,1271,1263,1256,1249,1242,1234,1227,1220,1212,1205,1198,1191,1183,1176,1169,1161,1154,1147,1139,1132,1125,1118,1110,1103,1096,1088,1081,1074,1066,1059,1052,1045,1037,1030,1023,1015,1008,1001,993,986,979,972,964,957,950,942,935,928,921,913,906,899,891,884,877,869,862,855,848,840,833,826,818,811,804,796,789,782,775,767,760,753,745,738,731,723,716,709,702,694,687,680,672,665,658,651,643,636,629,621,614,607,599,592,585,578,570,563,556,534,534, 0}; */ /** * database of motor profiles */ Motor_Profile gl847_motor_profiles[] = { { MotorId::CANON_LIDE_100, 2848, StepType::HALF , lide200_base }, { MotorId::CANON_LIDE_100, 1424, StepType::HALF , lide200_base }, { MotorId::CANON_LIDE_100, 1432, StepType::HALF , lide200_base }, { MotorId::CANON_LIDE_100, 2712, StepType::QUARTER, lide200_medium }, { MotorId::CANON_LIDE_100, 5280, StepType::EIGHTH , lide200_high }, { MotorId::CANON_LIDE_200, 2848, StepType::HALF , lide200_base }, { MotorId::CANON_LIDE_200, 1424, StepType::HALF , lide200_base }, { MotorId::CANON_LIDE_200, 1432, StepType::HALF , lide200_base }, { MotorId::CANON_LIDE_200, 2712, StepType::QUARTER, lide200_medium }, { MotorId::CANON_LIDE_200, 5280, StepType::EIGHTH , lide200_high }, { MotorId::CANON_LIDE_200, 10416, StepType::EIGHTH , lide200_high }, { MotorId::CANON_LIDE_700, 2848, StepType::HALF , lide200_base }, { MotorId::CANON_LIDE_700, 1424, StepType::HALF , lide200_base }, { MotorId::CANON_LIDE_700, 1504, StepType::HALF , lide200_base }, { MotorId::CANON_LIDE_700, 2696, StepType::HALF , lide700_medium }, /* 2696 , 2838 */ { MotorId::CANON_LIDE_700, 10576, StepType::EIGHTH, lide700_high }, { MotorId::UNKNOWN, 0, StepType::FULL, nullptr }, }; static uint32_t lide210_fast[] = { 62496, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2051, 1432, 1372, 1323, 1280, 1246, 1216, 1188, 1163, 1142, 1121, 1101, 1084, 1068, 1051, 1036, 1020, 1007, 995, 983, 971, 959, 949, 938, 929, 917, 908, 900, 891, 882, 874, 866, 857, 849, 843, 835, 829, 821, 816, 808, 802, 795, 789, 784, 778, 773, 765, 760, 755, 749, 744, 739, 734, 731, 726, 721, 716, 711, 707, 702, 698, 693, 690, 685, 682, 677, 672, 669, 665, 662, 657, 654, 650, 647, 644, 639, 637, 632, 629, 626, 622, 619, 617, 614, 610, 607, 604, 601, 599, 595, 592, 589, 587, 584, 581, 579, 576, 572, 570, 567, 564, 562, 559, 557, 554, 552, 549, 547, 544, 542, 539, 538, 536, 533, 531, 529, 526, 524, 522, 519, 518, 516, 513, 511, 509, 506, 505, 503, 501, 498, 497, 495, 493, 491, 490, 487, 485, 483, 482, 480, 477, 476, 474, 472, 470, 469, 467, 465, 464, 462, 460, 458, 456, 455, 453, 451, 450, 448, 447, 445, 444, 442, 440, 439, 437, 436, 434, 433, 431, 430, 428, 427, 425, 423, 422, 420, 419, 417, 417, 415, 414, 413, 411, 410, 408, 407, 405, 404, 402, 401, 400, 399, 398, 396, 395, 393, 392, 391, 390, 389, 387, 386, 385, 383, 382, 381, 380, 379, 377, 376, 375, 374, 373, 371, 370, 369, 368, 367, 366, 364, 363, 363, 361, 360, 359, 358, 357, 356, 355, 353, 352, 352, 350, 349, 348, 347, 346, 345, 344, 343, 342, 341, 340, 339, 338, 335, 335, 0 }; static uint32_t lide110_ok[] = { 62496, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2051, 1961, 1901, 1852, 1809, 1775, 1745, 1717, 1692, 1671, 1650, 1630, 1613, 1597, 1580, 1565, 1549, 1536, 1524, 1512, 1500, 1488, 1478, 1467, 1458, 1446, 1437, 1429, 1420, 1411, 1403, 1395, 1386, 1378, 1372, 1364, 1358, 1350, 1345, 1337, 1331, 1324, 1318, 1313, 1307, 1302, 1294, 1289, 1284, 1278, 1273, 1268, 1263, 1260, 1255, 1250, 1245, 1240, 1236, 1231, 1227, 1222, 1219, 1214, 1211, 1206, 1201, 1198, 1194, 1191, 1186, 1183, 1179, 1176, 1173, 1168, 1166, 1161, 1158, 1155, 1151, 1148, 1146, 1143, 1139, 1136, 1133, 1130, 1128, 1124, 1121, 1118, 1116, 1113, 1110, 1108, 1105, 1101, 1099, 1096, 1093, 1091, 1088, 1086, 1083, 1081, 1078, 1076, 1073, 1071, 1068, 1067, 1065, 1062, 1060, 1058, 1055, 1053, 1051, 1048, 1047, 1045, 1042, 1040, 1038, 1035, 1034, 1032, 1030, 1027, 1026, 1024, 1022, 1020, 1019, 1016, 1014, 1012, 1011, 1009, 1006, 1005, 1003, 1001, 999, 998, 996, 994, 993, 991, 989, 987, 985, 984, 982, 980, 979, 977, 976, 974, 973, 971, 969, 968, 966, 965, 963, 962, 960, 959, 957, 956, 954, 952, 951, 949, 948, 946, 946, 944, 943, 942, 940, 939, 937, 936, 934, 933, 931, 930, 929, 928, 927, 925, 924, 922, 921, 920, 919, 918, 916, 915, 914, 912, 911, 910, 909, 908, 906, 905, 904, 903, 902, 900, 899, 898, 897, 896, 895, 893, 892, 892, 890, 889, 888, 887, 886, 885, 884, 882, 881, 881, 879, 878, 877, 876, 875, 874, 873, 872, 871, 870, 869, 868, 867, 864, 857, 849, 843, 835, 829, 821, 816, 808, 802, 795, 789, 784, 778, 773, 765, 760, 755, 749, 744, 739, 734, 731, 726, 721, 716, 711, 707, 702, 698, 693, 690, 685, 682, 677, 672, 669, 665, 662, 657, 654, 650, 647, 644, 639, 637, 632, 629, 626, 622, 619, 617, 614, 610, 607, 604, 601, 599, 595, 592, 589, 587, 584, 581, 579, 576, 572, 570, 567, 564, 562, 559, 557, 554, 552, 549, 547, 544, 542, 539, 538, 536, 533, 531, 529, 526, 524, 522, 519, 518, 516, 513, 511, 509, 506, 505, 503, 501, 498, 497, 495, 493, 491, 490, 487, 485, 483, 482, 480, 477, 476, 474, 472, 470, 469, 467, 465, 464, 462, 460, 458, 456, 455, 453, 451, 450, 448, 447, 445, 444, 442, 440, 439, 437, 436, 434, 433, 431, 430, 428, 427, 425, 423, 422, 420, 419, 417, 417, 415, 414, 413, 411, 410, 408, 407, 405, 404, 402, 401, 400, 399, 398, 396, 395, 393, 392, 391, 390, 389, 387, 386, 385, 383, 382, 381, 380, 379, 377, 376, 375, 374, 373, 371, 370, 369, 368, 367, 366, 364, 363, 363, 361, 360, 359, 358, 357, 356, 355, 353, 352, 352, 350, 349, 348, 347, 346, 345, 344, 343, 342, 341, 340, 339, 338, 335, 335, 0 }; static uint32_t lide120_fast[] = { 62496, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 1957, 1845, 1768, 1710, 1665, 1624, 1588, 1557, 1529, 1504, 1481, 1458, 1440, 1420, 1403, 1386, 1370, 1356, 1343, 1329, 1316, 1303, 1293, 1280, 1270, 1260, 1250, 1241, 1231, 1222, 1214, 1206, 1197, 1189, 1182, 1174, 1167, 1160, 1153, 1147, 1140, 1133, 1128, 1121, 1116, 1110, 1104, 1099, 1093, 1088, 1082, 1077, 1072, 1067, 1062, 1058, 1053, 1049, 1045, 1040, 1035, 1032, 1027, 1023, 1020, 1015, 1012, 1008, 1004, 1000, 997, 993, 989, 985, 982, 979, 975, 972, 969, 966, 963, 959, 956, 953, 950, 947, 945, 942, 939, 936, 933, 930, 928, 925, 922, 920, 917, 914, 911, 909, 907, 904, 902, 899, 897, 895, 892, 890, 888, 886, 883, 881, 879, 876, 874, 872, 870, 864, 864, 0 }; static uint32_t lide120_ok[] = { 62496, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2286, 2264, 2248, 2232, 2221, 2211, 2205, 2195, 2190, 2180, 2175, 2170, 2160, 2155, 2150, 2145, 2140, 2135, 2130, 2125, 2121, 2116, 2111, 2106, 2106, 2102, 2097, 2092, 2087, 2087, 2083, 2078, 2074, 2074, 2069, 2064, 2064, 2060, 2055, 2055, 2051, 2051, 2046, 2042, 2042, 2038, 2038, 2033, 2029, 2029, 2024, 2024, 2020, 2010, 2010, 670*2, 0 }; static uint32_t lide110_slow[] = { 62496, 7896, 2632, 0 }; static uint32_t lide120_slow[] = { 62464, 7896, 2632, 0 }; static uint32_t lide110_max[] = { 62496, 31296, 10432, 0 }; static uint32_t lide120_max[] = { 62592, 62592, 41728, 31296, 10432, 0 }; static uint32_t lide210_max[] = { 62496, 31296, 20864, 10432, 0 }; // NEXT LPERIOD=PREVIOUS*2-192 Motor_Profile gl124_motor_profiles[] = { { MotorId::CANON_LIDE_110, 2768, StepType::FULL, lide210_fast }, { MotorId::CANON_LIDE_110, 5360, StepType::HALF, lide110_ok }, { MotorId::CANON_LIDE_110, 10528, StepType::HALF, lide110_slow }, { MotorId::CANON_LIDE_110, 20864, StepType::QUARTER, lide110_max }, { MotorId::CANON_LIDE_120, 4608, StepType::FULL, lide120_fast }, { MotorId::CANON_LIDE_120, 5360, StepType::HALF, lide120_ok }, { MotorId::CANON_LIDE_120, 10528, StepType::QUARTER, lide120_slow }, { MotorId::CANON_LIDE_120, 20864, StepType::QUARTER, lide120_max }, { MotorId::CANON_LIDE_210, 2768, StepType::FULL, lide210_fast }, { MotorId::CANON_LIDE_210, 5360, StepType::HALF, lide110_ok }, { MotorId::CANON_LIDE_210, 10528, StepType::HALF, lide110_slow }, { MotorId::CANON_LIDE_210, 20864, StepType::QUARTER, lide210_max }, { MotorId::UNKNOWN, 0, StepType::FULL, nullptr }, }; } // namespace genesys