| 
									
										
										
										
											2010-04-14 05:02:07 +00:00
										 |  |  | /* sane - Scanner Access Now Easy.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-12 07:11:20 +00:00
										 |  |  |    Copyright (C) 2010-2013 Stéphane Voltz <stef.dev@free.fr> | 
					
						
							| 
									
										
										
										
											2010-04-14 05:02:07 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |    This file is part of the SANE package. | 
					
						
							| 
									
										
										
										
											2013-12-16 04:45:31 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-04-14 05:02:07 +00:00
										 |  |  |    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. | 
					
						
							| 
									
										
										
										
											2013-12-16 04:45:31 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-04-14 05:02:07 +00:00
										 |  |  |    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. | 
					
						
							| 
									
										
										
										
											2013-12-16 04:45:31 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-04-14 05:02:07 +00:00
										 |  |  |    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. | 
					
						
							| 
									
										
										
										
											2013-12-16 04:45:31 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-04-14 05:02:07 +00:00
										 |  |  |    As a special exception, the authors of SANE give permission for | 
					
						
							|  |  |  |    additional uses of the libraries contained in this release of SANE. | 
					
						
							| 
									
										
										
										
											2013-12-16 04:45:31 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-04-14 05:02:07 +00:00
										 |  |  |    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. | 
					
						
							| 
									
										
										
										
											2013-12-16 04:45:31 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-04-14 05:02:07 +00:00
										 |  |  |    This exception does not, however, invalidate any other reasons why | 
					
						
							|  |  |  |    the executable file might be covered by the GNU General Public | 
					
						
							|  |  |  |    License. | 
					
						
							| 
									
										
										
										
											2013-12-16 04:45:31 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-04-14 05:02:07 +00:00
										 |  |  |    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. | 
					
						
							| 
									
										
										
										
											2013-12-16 04:45:31 +00:00
										 |  |  |    If you do not wish that, delete this exception notice. | 
					
						
							| 
									
										
										
										
											2010-04-14 05:02:07 +00:00
										 |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-16 08:36:02 +00:00
										 |  |  | #ifndef BACKEND_GENESYS_GL847_H
 | 
					
						
							|  |  |  | #define BACKEND_GENESYS_GL847_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-04-14 05:02:07 +00:00
										 |  |  | #include "genesys.h"
 | 
					
						
							| 
									
										
										
										
											2019-10-01 05:42:08 +00:00
										 |  |  | #include "command_set.h"
 | 
					
						
							| 
									
										
										
										
											2013-01-28 21:04:37 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-02 09:01:28 +00:00
										 |  |  | namespace genesys { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-02 07:33:45 +00:00
										 |  |  | /** @brief moves the slider to steps at motor base dpi
 | 
					
						
							|  |  |  |  * @param dev device to work on | 
					
						
							|  |  |  |  * @param steps number of steps to move | 
					
						
							|  |  |  |  * */ | 
					
						
							| 
									
										
										
										
											2019-07-20 08:02:00 +00:00
										 |  |  | static void gl847_feed(Genesys_Device* dev, unsigned int steps); | 
					
						
							| 
									
										
										
										
											2011-11-02 07:33:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-05-05 05:01:58 +00:00
										 |  |  | typedef struct | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2019-09-30 10:52:02 +00:00
										 |  |  |     GpioId gpio_id; | 
					
						
							| 
									
										
										
										
											2012-05-14 20:22:59 +00:00
										 |  |  |   uint8_t r6b; | 
					
						
							|  |  |  |   uint8_t r6c; | 
					
						
							|  |  |  |   uint8_t r6d; | 
					
						
							|  |  |  |   uint8_t r6e; | 
					
						
							|  |  |  |   uint8_t r6f; | 
					
						
							|  |  |  |   uint8_t ra6; | 
					
						
							|  |  |  |   uint8_t ra7; | 
					
						
							|  |  |  |   uint8_t ra8; | 
					
						
							|  |  |  |   uint8_t ra9; | 
					
						
							|  |  |  | } Gpio_Profile; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static Gpio_Profile gpios[]={ | 
					
						
							| 
									
										
										
										
											2019-09-30 10:52:07 +00:00
										 |  |  |     { GpioId::CANON_LIDE_200, 0x02, 0xf9, 0x20, 0xff, 0x00, 0x04, 0x04, 0x00, 0x00}, | 
					
						
							|  |  |  |     { GpioId::CANON_LIDE_700F, 0x06, 0xdb, 0xff, 0xff, 0x80, 0x15, 0x07, 0x20, 0x10}, | 
					
						
							| 
									
										
										
										
											2019-09-30 10:52:02 +00:00
										 |  |  |     { GpioId::UNKNOWN, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, | 
					
						
							| 
									
										
										
										
											2012-05-14 20:22:59 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef struct | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   uint8_t dramsel; | 
					
						
							| 
									
										
										
										
											2010-05-05 05:01:58 +00:00
										 |  |  |   uint8_t rd0; | 
					
						
							|  |  |  |   uint8_t rd1; | 
					
						
							|  |  |  |   uint8_t rd2; | 
					
						
							|  |  |  |   uint8_t re0; | 
					
						
							|  |  |  |   uint8_t re1; | 
					
						
							|  |  |  |   uint8_t re2; | 
					
						
							|  |  |  |   uint8_t re3; | 
					
						
							|  |  |  |   uint8_t re4; | 
					
						
							|  |  |  |   uint8_t re5; | 
					
						
							|  |  |  |   uint8_t re6; | 
					
						
							|  |  |  |   uint8_t re7; | 
					
						
							|  |  |  | } Memory_layout; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static Memory_layout layouts[]={ | 
					
						
							|  |  |  | 	/* LIDE 100 */ | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2012-05-14 20:22:59 +00:00
										 |  |  |                 0x29, | 
					
						
							| 
									
										
										
										
											2010-05-05 05:01:58 +00:00
										 |  |  | 		0x0a, 0x15, 0x20, | 
					
						
							|  |  |  | 		0x00, 0xac, 0x02, 0x55, 0x02, 0x56, 0x03, 0xff | 
					
						
							|  |  |  | 	}, | 
					
						
							|  |  |  | 	/* LIDE 200 */ | 
					
						
							| 
									
										
										
										
											2010-12-28 20:01:46 +00:00
										 |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2012-05-14 20:22:59 +00:00
										 |  |  |                 0x29, | 
					
						
							| 
									
										
										
										
											2010-12-28 20:01:46 +00:00
										 |  |  | 		0x0a, 0x1f, 0x34, | 
					
						
							|  |  |  | 		0x01, 0x24, 0x02, 0x91, 0x02, 0x92, 0x03, 0xff | 
					
						
							|  |  |  | 	}, | 
					
						
							|  |  |  | 	/* 5600F */ | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2012-05-14 20:22:59 +00:00
										 |  |  |                 0x29, | 
					
						
							| 
									
										
										
										
											2010-12-28 20:01:46 +00:00
										 |  |  | 		0x0a, 0x1f, 0x34, | 
					
						
							|  |  |  | 		0x01, 0x24, 0x02, 0x91, 0x02, 0x92, 0x03, 0xff | 
					
						
							|  |  |  | 	}, | 
					
						
							|  |  |  | 	/* LIDE 700F */ | 
					
						
							| 
									
										
										
										
											2010-05-05 05:01:58 +00:00
										 |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2012-05-14 20:22:59 +00:00
										 |  |  |                 0x2a, | 
					
						
							|  |  |  | 		0x0a, 0x33, 0x5c, | 
					
						
							|  |  |  | 		0x02, 0x14, 0x09, 0x09, 0x09, 0x0a, 0x0f, 0xff | 
					
						
							| 
									
										
										
										
											2010-05-05 05:01:58 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2019-09-16 08:36:02 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-05 06:01:31 +00:00
										 |  |  | class CommandSetGl847 : public CommandSet | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | public: | 
					
						
							| 
									
										
										
										
											2019-10-01 05:18:44 +00:00
										 |  |  |     ~CommandSetGl847() override = default; | 
					
						
							| 
									
										
										
										
											2019-10-05 06:01:31 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     bool needs_home_before_init_regs_for_scan(Genesys_Device* dev) const override; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     void init(Genesys_Device* dev) const override; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     void init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor& sensor, | 
					
						
							|  |  |  |                               Genesys_Register_Set* regs, int* channels, | 
					
						
							|  |  |  |                               int* total_size) const override; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     void init_regs_for_coarse_calibration(Genesys_Device* dev, const Genesys_Sensor& sensor, | 
					
						
							|  |  |  |                                           Genesys_Register_Set& regs) const override; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     void init_regs_for_shading(Genesys_Device* dev, const Genesys_Sensor& sensor, | 
					
						
							|  |  |  |                                Genesys_Register_Set& regs) const override; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     void init_regs_for_scan(Genesys_Device* dev, const Genesys_Sensor& sensor) const override; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     bool get_gain4_bit(Genesys_Register_Set * reg) const override; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     bool test_buffer_empty_bit(std::uint8_t val) const override; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     void set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t set) const override; | 
					
						
							|  |  |  |     void set_powersaving(Genesys_Device* dev, int delay) const override; | 
					
						
							|  |  |  |     void save_power(Genesys_Device* dev, bool enable) const override; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     void begin_scan(Genesys_Device* dev, const Genesys_Sensor& sensor, | 
					
						
							|  |  |  |                     Genesys_Register_Set* regs, bool start_motor) const override; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     void end_scan(Genesys_Device* dev, Genesys_Register_Set* regs, bool check_stop) const override; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     void send_gamma_table(Genesys_Device* dev, const Genesys_Sensor& sensor) const override; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     void search_start_position(Genesys_Device* dev) const override; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     void offset_calibration(Genesys_Device* dev, const Genesys_Sensor& sensor, | 
					
						
							|  |  |  |                             Genesys_Register_Set& regs) const override; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     void coarse_gain_calibration(Genesys_Device* dev, const Genesys_Sensor& sensor, | 
					
						
							|  |  |  |                                  Genesys_Register_Set& regs, int dpi) const override; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     SensorExposure led_calibration(Genesys_Device* dev, const Genesys_Sensor& sensor, | 
					
						
							|  |  |  |                                    Genesys_Register_Set& regs) const override; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     void wait_for_motor_stop(Genesys_Device* dev) const override; | 
					
						
							|  |  |  |     void slow_back_home(Genesys_Device* dev, bool wait_until_home) const override; | 
					
						
							|  |  |  |     void rewind(Genesys_Device* dev) const override; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     bool has_rewind() const override { return false; } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     void bulk_write_data(Genesys_Device* dev, uint8_t addr, uint8_t* data, | 
					
						
							|  |  |  |                          size_t len) const override; | 
					
						
							|  |  |  |     void bulk_read_data(Genesys_Device * dev, uint8_t addr, uint8_t * data, | 
					
						
							|  |  |  |                         size_t len) const override; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     void update_hardware_sensors(struct Genesys_Scanner* s) const override; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     void load_document(Genesys_Device* dev) const override; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     void detect_document_end(Genesys_Device* dev) const override; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     void eject_document(Genesys_Device* dev) const override; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     void search_strip(Genesys_Device* dev, const Genesys_Sensor& sensor, | 
					
						
							|  |  |  |                       bool forward, bool black) const override; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     bool is_compatible_calibration(Genesys_Device* dev, const Genesys_Sensor& sensor, | 
					
						
							|  |  |  |                                    Genesys_Calibration_Cache* cache, | 
					
						
							|  |  |  |                                    bool for_overwrite) const override; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     void move_to_ta(Genesys_Device* dev) const override; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     void send_shading_data(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t* data, | 
					
						
							|  |  |  |                            int size) const override; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     void calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor) const override; | 
					
						
							|  |  |  |     void asic_boot(Genesys_Device* dev, bool cold) const override; | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2019-09-16 08:36:02 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-02 09:01:28 +00:00
										 |  |  | } // namespace genesys
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-16 08:36:02 +00:00
										 |  |  | #endif // BACKEND_GENESYS_GL847_H
 |