Lines Matching refs:dev
3 Copyright (C) 2010-2013 Stéphane Voltz <stef.dev@free.fr>
34 static void gl842_init_registers(Genesys_Device& dev)
42 dev.reg.clear();
44 if (dev.model->model_id == ModelId::PLUSTEK_OPTICFILM_7200) {
45 dev.reg.init_reg(0x01, 0x00);
46 dev.reg.init_reg(0x02, 0x78);
47 dev.reg.init_reg(0x03, 0xbf);
48 dev.reg.init_reg(0x04, 0x22);
49 dev.reg.init_reg(0x05, 0x48);
51 dev.reg.init_reg(0x06, 0xb8);
53 dev.reg.init_reg(0x07, 0x00);
54 dev.reg.init_reg(0x08, 0x00);
55 dev.reg.init_reg(0x09, 0x00);
56 dev.reg.init_reg(0x0a, 0x00);
57 dev.reg.init_reg(0x0d, 0x01);
58 } else if (dev.model->model_id == ModelId::CANON_LIDE_90) {
59 dev.reg.init_reg(0x01, 0x82);
60 dev.reg.init_reg(0x02, 0x10);
61 dev.reg.init_reg(0x03, 0x60);
62 dev.reg.init_reg(0x04, 0x10);
63 dev.reg.init_reg(0x05, 0x8c);
65 dev.reg.init_reg(0x06, 0x18);
67 //dev.reg.init_reg(0x07, 0x00);
68 dev.reg.init_reg(0x08, 0x00);
69 dev.reg.init_reg(0x09, 0x21);
70 dev.reg.init_reg(0x0a, 0x00);
71 dev.reg.init_reg(0x0d, 0x00);
74 dev.reg.init_reg(0x10, 0x00); // exposure, overwritten in scanner_setup_sensor() below
75 dev.reg.init_reg(0x11, 0x00); // exposure, overwritten in scanner_setup_sensor() below
76 dev.reg.init_reg(0x12, 0x00); // exposure, overwritten in scanner_setup_sensor() below
77 dev.reg.init_reg(0x13, 0x00); // exposure, overwritten in scanner_setup_sensor() below
78 dev.reg.init_reg(0x14, 0x00); // exposure, overwritten in scanner_setup_sensor() below
79 dev.reg.init_reg(0x15, 0x00); // exposure, overwritten in scanner_setup_sensor() below
82 dev.reg.init_reg(0x16, 0x00); // SENSOR_DEF
83 dev.reg.init_reg(0x17, 0x00); // SENSOR_DEF
84 dev.reg.init_reg(0x18, 0x00); // SENSOR_DEF
87 dev.reg.init_reg(0x19, 0x00); // SENSOR_DEF
90 dev.reg.init_reg(0x1a, 0x00); // SENSOR_DEF
91 if (dev.model->model_id == ModelId::PLUSTEK_OPTICFILM_7200) {
92 dev.reg.init_reg(0x1b, 0x00); // SENSOR_DEF
94 dev.reg.init_reg(0x1c, 0x00); // SENSOR_DEF
95 dev.reg.init_reg(0x1d, 0x00); // SENSOR_DEF
96 dev.reg.init_reg(0x1e, 0x10); // WDTIME, LINESEL: setup during sensor and motor setup
98 if (dev.model->model_id == ModelId::PLUSTEK_OPTICFILM_7200) {
99 dev.reg.init_reg(0x1f, 0x01);
100 dev.reg.init_reg(0x20, 0x27); // BUFSEL: buffer full condition
101 } else if (dev.model->model_id == ModelId::CANON_LIDE_90) {
102 dev.reg.init_reg(0x1f, 0x02);
103 dev.reg.init_reg(0x20, 0x02); // BUFSEL: buffer full condition
106 dev.reg.init_reg(0x21, 0x10); // STEPNO: set during motor setup
107 dev.reg.init_reg(0x22, 0x10); // FWDSTEP: set during motor setup
108 dev.reg.init_reg(0x23, 0x10); // BWDSTEP: set during motor setup
109 dev.reg.init_reg(0x24, 0x10); // FASTNO: set during motor setup
110 dev.reg.init_reg(0x25, 0x00); // LINCNT: set during motor setup
111 dev.reg.init_reg(0x26, 0x00); // LINCNT: set during motor setup
112 dev.reg.init_reg(0x27, 0x00); // LINCNT: set during motor setup
114 dev.reg.init_reg(0x29, 0xff); // LAMPPWM
116 dev.reg.init_reg(0x2c, 0x02); // DPISET: set during sensor setup
117 dev.reg.init_reg(0x2d, 0x58); // DPISET: set during sensor setup
119 dev.reg.init_reg(0x2e, 0x80); // BWHI: black/white low threshdold
120 dev.reg.init_reg(0x2f, 0x80); // BWLOW: black/white low threshold
122 dev.reg.init_reg(0x30, 0x00); // STRPIXEL: set during sensor setup
123 dev.reg.init_reg(0x31, 0x49); // STRPIXEL: set during sensor setup
124 dev.reg.init_reg(0x32, 0x53); // ENDPIXEL: set during sensor setup
125 dev.reg.init_reg(0x33, 0xb9); // ENDPIXEL: set during sensor setup
127 dev.reg.init_reg(0x34, 0x13); // DUMMY: SENSOR_DEF
128 dev.reg.init_reg(0x35, 0x00); // MAXWD: set during scan setup
129 dev.reg.init_reg(0x36, 0x40); // MAXWD: set during scan setup
130 dev.reg.init_reg(0x37, 0x00); // MAXWD: set during scan setup
131 dev.reg.init_reg(0x38, 0x2a); // LPERIOD: SENSOR_DEF
132 dev.reg.init_reg(0x39, 0xf8); // LPERIOD: SENSOR_DEF
133 dev.reg.init_reg(0x3d, 0x00); // FEEDL: set during motor setup
134 dev.reg.init_reg(0x3e, 0x00); // FEEDL: set during motor setup
135 dev.reg.init_reg(0x3f, 0x01); // FEEDL: set during motor setup
137 dev.reg.init_reg(0x52, 0x00); // SENSOR_DEF
138 dev.reg.init_reg(0x53, 0x00); // SENSOR_DEF
139 dev.reg.init_reg(0x54, 0x00); // SENSOR_DEF
140 dev.reg.init_reg(0x55, 0x00); // SENSOR_DEF
141 dev.reg.init_reg(0x56, 0x00); // SENSOR_DEF
142 dev.reg.init_reg(0x57, 0x00); // SENSOR_DEF
143 dev.reg.init_reg(0x58, 0x00); // SENSOR_DEF
144 dev.reg.init_reg(0x59, 0x00); // SENSOR_DEF
145 dev.reg.init_reg(0x5a, 0x00); // SENSOR_DEF
147 if (dev.model->model_id == ModelId::PLUSTEK_OPTICFILM_7200) {
148 dev.reg.init_reg(0x5e, 0x01); // DECSEL, STOPTIM
149 } else if (dev.model->model_id == ModelId::CANON_LIDE_90) {
150 dev.reg.init_reg(0x5e, 0x41); // DECSEL, STOPTIM
151 dev.reg.init_reg(0x5d, 0x20);
153 dev.reg.init_reg(0x5f, 0x10); // FMOVDEC: set during motor setup
155 dev.reg.init_reg(0x60, 0x00); // Z1MOD: overwritten during motor setup
156 dev.reg.init_reg(0x61, 0x00); // Z1MOD: overwritten during motor setup
157 dev.reg.init_reg(0x62, 0x00); // Z1MOD: overwritten during motor setup
158 dev.reg.init_reg(0x63, 0x00); // Z2MOD: overwritten during motor setup
159 dev.reg.init_reg(0x64, 0x00); // Z2MOD: overwritten during motor setup
160 dev.reg.init_reg(0x65, 0x00); // Z2MOD: overwritten during motor setup
162 if (dev.model->model_id == ModelId::PLUSTEK_OPTICFILM_7200) {
163 dev.reg.init_reg(0x67, 0x7f); // STEPSEL, MTRPWM: partially overwritten during motor setup
164 dev.reg.init_reg(0x68, 0x7f); // FSTPSEL, FASTPWM: partially overwritten during motor setup
165 } else if (dev.model->model_id == ModelId::CANON_LIDE_90) {
166 dev.reg.init_reg(0x66, 0x00); // PHFREQ
167 dev.reg.init_reg(0x67, 0x40); // STEPSEL, MTRPWM: partially overwritten during motor setup
168 dev.reg.init_reg(0x68, 0x40); // FSTPSEL, FASTPWM: partially overwritten during motor setup
170 dev.reg.init_reg(0x69, 0x10); // FSHDEC: overwritten during motor setup
171 dev.reg.init_reg(0x6a, 0x10); // FMOVNO: overwritten during motor setup
175 dev.reg.init_reg(0x70, 0x00); // SENSOR_DEF
176 dev.reg.init_reg(0x71, 0x00); // SENSOR_DEF
177 dev.reg.init_reg(0x72, 0x00); // SENSOR_DEF
178 dev.reg.init_reg(0x73, 0x00); // SENSOR_DEF
179 dev.reg.init_reg(0x74, 0x00); // SENSOR_DEF
180 dev.reg.init_reg(0x75, 0x00); // SENSOR_DEF
181 dev.reg.init_reg(0x76, 0x00); // SENSOR_DEF
182 dev.reg.init_reg(0x77, 0x00); // SENSOR_DEF
183 dev.reg.init_reg(0x78, 0x00); // SENSOR_DEF
184 dev.reg.init_reg(0x79, 0x00); // SENSOR_DEF
185 dev.reg.init_reg(0x7a, 0x00); // SENSOR_DEF
186 dev.reg.init_reg(0x7b, 0x00); // SENSOR_DEF
187 dev.reg.init_reg(0x7c, 0x00); // SENSOR_DEF
188 dev.reg.init_reg(0x7d, 0x00); // SENSOR_DEF
192 dev.reg.init_reg(0x7f, 0x00); // SENSOR_DEF
196 dev.reg.init_reg(0x80, 0x00); // MOTOR_PROFILE
198 if (dev.model->model_id == ModelId::PLUSTEK_OPTICFILM_7200) {
199 dev.reg.init_reg(0x81, 0x00);
200 dev.reg.init_reg(0x82, 0x00);
201 dev.reg.init_reg(0x83, 0x00);
202 dev.reg.init_reg(0x84, 0x00);
203 dev.reg.init_reg(0x85, 0x00);
204 dev.reg.init_reg(0x86, 0x00);
205 dev.reg.init_reg(0x87, 0x00);
206 } else if (dev.model->model_id == ModelId::CANON_LIDE_90) {
207 dev.reg.init_reg(0x7e, 0x00);
208 dev.reg.init_reg(0x81, 0x00);
209 dev.reg.init_reg(0x82, 0x0f);
210 dev.reg.init_reg(0x83, 0x00);
211 dev.reg.init_reg(0x84, 0x0e);
212 dev.reg.init_reg(0x85, 0x00);
213 dev.reg.init_reg(0x86, 0x0d);
214 dev.reg.init_reg(0x87, 0x00);
215 dev.reg.init_reg(0x88, 0x00);
216 dev.reg.init_reg(0x89, 0x00);
219 const auto& sensor = sanei_genesys_find_sensor_any(&dev);
220 sanei_genesys_set_dpihw(dev.reg, sensor.register_dpihw);
222 scanner_setup_sensor(dev, sensor, dev.reg);
226 void CommandSetGl842::set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor,
235 dev->frontend = dev->frontend_initial;
240 std::uint8_t fe_type = dev->interface->read_register(REG_0x04) & REG_0x04_FESET;
241 if (fe_type == 2 || dev->model->model_id == ModelId::CANON_LIDE_90) {
242 for (const auto& reg : dev->frontend.regs) {
243 dev->interface->write_fe_register(reg.address, reg.value);
252 dev->interface->write_fe_register(i, dev->frontend.regs.get_value(0x00 + i));
255 dev->interface->write_fe_register(reg.address, reg.value);
259 dev->interface->write_fe_register(0x20 + i, dev->frontend.get_offset(i));
263 dev->interface->write_fe_register(0x28 + i, dev->frontend.get_gain(i));
267 static void gl842_init_motor_regs_scan(Genesys_Device* dev,
290 if (has_flag(dev->model->flags, ModelFlag::DISABLE_FAST_FEEDING)) {
327 auto scan_table = create_slope_table(dev->model->asic_type, dev->motor, scan_yres, exposure,
330 scanner_send_slope_table(dev, sensor, SCAN_TABLE, scan_table.table);
331 scanner_send_slope_table(dev, sensor, BACKTRACK_TABLE, scan_table.table);
332 scanner_send_slope_table(dev, sensor, STOP_TABLE, scan_table.table);
339 const auto* fast_profile = get_motor_profile_ptr(dev->motor.fast_profiles, 0, session);
344 auto fast_table = create_slope_table_fastest(dev->model->asic_type, step_multiplier,
347 scanner_send_slope_table(dev, sensor, FAST_TABLE, fast_table.table);
348 scanner_send_slope_table(dev, sensor, HOME_TABLE, fast_table.table);
410 static void gl842_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sensor& sensor,
416 scanner_setup_sensor(*dev, sensor, *reg);
418 dev->cmd_set->set_fe(dev, sensor, AFE_SET);
421 regs_set_optical_off(dev->model->asic_type, *reg);
423 has_flag(dev->model->flags, ModelFlag::DISABLE_SHADING_CALIBRATION) ||
440 if (dev->model->model_id == ModelId::CANON_8600F) {
448 sanei_genesys_set_lamp_power(dev, sensor, *reg,
483 switch (dev->frontend.layout.type) {
494 static_cast<unsigned>(dev->frontend.layout.type));
500 const auto& dpihw_sensor = sanei_genesys_find_sensor(dev, session.output_resolution,
516 if (dev->model->is_cis) {
528 void CommandSetGl842::init_regs_for_scan_session(Genesys_Device* dev, const Genesys_Sensor& sensor,
543 if (dev->model->is_cis) {
554 if (dev->model->model_id == ModelId::CANON_LIDE_90) {
557 const auto& motor_profile = get_motor_profile(dev->motor.profiles, exposure, session);
560 gl842_init_optical_regs_scan(dev, sensor, reg, exposure, session);
561 gl842_init_motor_regs_scan(dev, sensor, session, reg, motor_profile, exposure, slope_dpi,
565 setup_image_pipeline(*dev, session);
567 dev->read_active = true;
569 dev->session = session;
571 dev->total_bytes_read = 0;
572 dev->total_bytes_to_read = (size_t)session.output_line_bytes_requested * (size_t)session.params.lines;
575 ScanSession CommandSetGl842::calculate_scan_session(const Genesys_Device* dev,
590 if (!dev->ignore_offsets) {
591 move = dev->model->y_offset_ta - dev->model->y_offset_sensor_to_ta;
595 if (!dev->ignore_offsets) {
596 move = dev->model->y_offset;
602 int move_dpi = dev->motor.base_ydpi;
609 start = dev->model->x_offset_ta;
611 start = dev->model->x_offset;
633 compute_session(dev, session, sensor);
638 void CommandSetGl842::save_power(Genesys_Device* dev, bool enable) const
640 (void) dev;
644 void CommandSetGl842::set_powersaving(Genesys_Device* dev, int delay /* in minutes */) const
646 (void) dev;
650 void CommandSetGl842::eject_document(Genesys_Device* dev) const
652 (void) dev;
657 void CommandSetGl842::load_document(Genesys_Device* dev) const
660 (void) dev;
663 void CommandSetGl842::detect_document_end(Genesys_Device* dev) const
666 (void) dev;
671 void CommandSetGl842::begin_scan(Genesys_Device* dev, const Genesys_Sensor& sensor,
678 !has_flag(dev->model->flags, ModelFlag::TA_NO_SECONDARY_LAMP))
680 dev->cmd_set->set_xpa_lamp_power(*dev, true);
682 if (reg->state.is_xpa_on && !has_flag(dev->model->flags, ModelFlag::UTA_NO_SECONDARY_MOTOR)) {
683 dev->cmd_set->set_motor_mode(*dev, *reg, MotorMode::PRIMARY_AND_SECONDARY);
686 if (dev->model->model_id == ModelId::CANON_LIDE_90) {
687 if (has_flag(dev->session.params.flags, ScanFlag::REVERSE)) {
688 dev->interface->write_register(REG_0x6B, 0x01);
689 dev->interface->write_register(REG_0x6C, 0x02);
691 dev->interface->write_register(REG_0x6B, 0x03);
692 switch (dev->session.params.xres) {
693 case 150: dev->interface->write_register(REG_0x6C, 0x74); break;
694 case 300: dev->interface->write_register(REG_0x6C, 0x38); break;
695 case 600: dev->interface->write_register(REG_0x6C, 0x1c); break;
696 case 1200: dev->interface->write_register(REG_0x6C, 0x2c); break;
697 case 2400: dev->interface->write_register(REG_0x6C, 0x0c); break;
702 dev->interface->sleep_ms(100);
705 scanner_clear_scan_and_feed_counts(*dev);
708 std::uint8_t val = dev->interface->read_register(REG_0x01);
710 dev->interface->write_register(REG_0x01, val);
712 scanner_start_action(*dev, start_motor);
717 dev->advance_head_pos_by_session(ScanHeadId::PRIMARY);
723 dev->advance_head_pos_by_session(ScanHeadId::PRIMARY);
724 dev->advance_head_pos_by_session(ScanHeadId::SECONDARY);
730 dev->advance_head_pos_by_session(ScanHeadId::SECONDARY);
737 void CommandSetGl842::end_scan(Genesys_Device* dev, Genesys_Register_Set* reg,
743 dev->cmd_set->set_xpa_lamp_power(*dev, false);
746 if (!dev->model->is_sheetfed) {
747 scanner_stop_action(*dev);
751 void CommandSetGl842::move_back_home(Genesys_Device* dev, bool wait_until_home) const
753 scanner_move_back_home(*dev, wait_until_home);
756 void CommandSetGl842::init_regs_for_shading(Genesys_Device* dev, const Genesys_Sensor& sensor,
763 if (dev->settings.scan_method == ScanMethod::TRANSPARENCY ||
764 dev->settings.scan_method == ScanMethod::TRANSPARENCY_INFRARED)
766 calib_size_mm = dev->model->y_size_calib_ta_mm;
768 calib_size_mm = dev->model->y_size_calib_mm;
774 const auto& calib_sensor = sanei_genesys_find_sensor(dev, resolution, channels,
775 dev->settings.scan_method);
780 if (should_calibrate_only_active_area(*dev, dev->settings)) {
781 float offset = dev->model->x_offset_ta;
783 offset = static_cast<float>((offset * dev->settings.xres) / MM_PER_INCH);
785 float size = dev->model->x_size_ta;
786 size = static_cast<float>((size * dev->settings.xres) / MM_PER_INCH);
792 calib_pixels = dev->model->x_size_calib_mm * resolution / MM_PER_INCH;
799 if (dev->settings.scan_method == ScanMethod::TRANSPARENCY ||
800 dev->settings.scan_method == ScanMethod::TRANSPARENCY_INFRARED)
804 move = static_cast<int>(dev->model->y_offset_calib_white_ta -
805 dev->model->y_offset_sensor_to_ta);
808 move = static_cast<int>(dev->model->y_offset_calib_white);
823 session.params.scan_method = dev->settings.scan_method;
824 session.params.scan_mode = dev->settings.scan_mode;
825 session.params.color_filter = dev->settings.color_filter;
826 session.params.contrast_adjustment = dev->settings.contrast;
827 session.params.brightness_adjustment = dev->settings.brightness;
829 compute_session(dev, session, calib_sensor);
831 init_regs_for_scan_session(dev, calib_sensor, ®s, session);
833 dev->calib_session = session;
836 void CommandSetGl842::send_gamma_table(Genesys_Device* dev, const Genesys_Sensor& sensor) const
840 if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7200)
847 std::vector<std::uint16_t> rgamma = get_gamma_table(dev, sensor, GENESYS_RED);
848 std::vector<std::uint16_t> ggamma = get_gamma_table(dev, sensor, GENESYS_GREEN);
849 std::vector<std::uint16_t> bgamma = get_gamma_table(dev, sensor, GENESYS_BLUE);
861 dev->interface->write_gamma(0x28, 0x0000, gamma.data(), size * 2 * 3);
864 SensorExposure CommandSetGl842::led_calibration(Genesys_Device* dev, const Genesys_Sensor& sensor,
867 return scanner_led_calibration(*dev, sensor, regs);
870 void CommandSetGl842::offset_calibration(Genesys_Device* dev, const Genesys_Sensor& sensor,
873 scanner_offset_calibration(*dev, sensor, regs);
876 void CommandSetGl842::coarse_gain_calibration(Genesys_Device* dev, const Genesys_Sensor& sensor,
879 scanner_coarse_gain_calibration(*dev, sensor, regs, dpi);
882 void CommandSetGl842::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor& sensor,
889 unsigned resolution = dev->model->get_resolution_settings(dev->settings.scan_method)
892 const auto& calib_sensor = sanei_genesys_find_sensor(dev, resolution, channels,
893 dev->settings.scan_method);
894 unsigned num_pixels = dev->model->x_size_calib_mm * resolution / MM_PER_INCH / 2;
896 *reg = dev->reg;
903 if (dev->settings.scan_method == ScanMethod::TRANSPARENCY ||
904 dev->settings.scan_method == ScanMethod::TRANSPARENCY_INFRARED)
916 session.params.depth = dev->model->bpp_color_values.front();
918 session.params.scan_method = dev->settings.scan_method;
920 session.params.color_filter = dev->settings.color_filter;
925 compute_session(dev, session, calib_sensor);
927 init_regs_for_scan_session(dev, calib_sensor, reg, session);
932 static void gl842_init_gpio(Genesys_Device* dev)
935 apply_registers_ordered(dev->gpo.regs, { 0x6e, 0x6f }, [&](const GenesysRegisterSetting& reg)
937 dev->interface->write_register(reg.address, reg.value);
941 void CommandSetGl842::asic_boot(Genesys_Device* dev, bool cold) const
946 dev->interface->write_register(0x0e, 0x01);
947 dev->interface->write_register(0x0e, 0x00);
951 gl842_init_registers(*dev);
952 dev->interface->write_registers(dev->reg);
954 if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7200) {
962 dev->interface->write_buffer(0x3c, 0x010a00, data, 32);
965 if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7200) {
966 dev->interface->write_0x8c(0x10, 0x94);
968 if (dev->model->model_id == ModelId::CANON_LIDE_90) {
969 dev->interface->write_0x8c(0x10, 0xd4);
973 dev->interface->write_register(REG_0x2A, 0x00);
974 dev->interface->write_register(REG_0x2B, 0x00);
977 gl842_init_gpio(dev);
978 dev->interface->sleep_ms(100);
981 void CommandSetGl842::init(Genesys_Device* dev) const
986 sanei_genesys_asic_init(dev);
995 void CommandSetGl842::update_home_sensor_gpio(Genesys_Device& dev) const
998 if (dev.model->model_id == ModelId::CANON_LIDE_90) {
999 std::uint8_t val = dev.interface->read_register(REG_0x6C);
1001 dev.interface->write_register(REG_0x6C, val);
1009 void CommandSetGl842::send_shading_data(Genesys_Device* dev, const Genesys_Sensor& sensor,
1017 if (dev->reg.get8(REG_0x01) & REG_0x01_SHDAREA) {
1018 offset = dev->session.params.startx * sensor.shading_resolution /
1019 dev->session.params.xres;
1021 length = dev->session.output_pixels * sensor.shading_resolution /
1022 dev->session.params.xres;
1033 dev->interface->record_key_value("shading_offset", std::to_string(offset));
1034 dev->interface->record_key_value("shading_length", std::to_string(length));
1053 dev->interface->write_buffer(0x3c, 0, final_data.data(), count);
1056 bool CommandSetGl842::needs_home_before_init_regs_for_scan(Genesys_Device* dev) const
1058 (void) dev;
1062 void CommandSetGl842::wait_for_motor_stop(Genesys_Device* dev) const
1064 (void) dev;