genesys: Store segment order as a std::vector

merge-requests/134/head
Povilas Kanapickas 2019-08-17 11:02:35 +03:00
rodzic 4a9738b719
commit ba546d5370
8 zmienionych plików z 74 dodań i 93 usunięć

Wyświetl plik

@ -3501,7 +3501,7 @@ static void genesys_fill_segmented_buffer(Genesys_Device* dev, uint8_t* work_buf
k=count+(i*dev->segnb)/8;
for (n=0;n<dev->segnb;n++) {
work_buffer_dst[k] = work_buffer_dst[k] << 1;
if ((dev->oe_buffer.get_read_pos()[dev->cur + dev->skip + dev->dist*dev->order[n]])&(128>>i)) {
if ((dev->oe_buffer.get_read_pos()[dev->cur + dev->skip + dev->dist*dev->segment_order[n]])&(128>>i)) {
work_buffer_dst[k] |= 1;
}
}
@ -3515,7 +3515,7 @@ static void genesys_fill_segmented_buffer(Genesys_Device* dev, uint8_t* work_buf
if (depth==8) {
while (dev->cur < dev->len && count < size) {
for (n=0;n<dev->segnb;n++) {
work_buffer_dst[count+n] = dev->oe_buffer.get_read_pos()[dev->cur + dev->skip + dev->dist*dev->order[n]];
work_buffer_dst[count+n] = dev->oe_buffer.get_read_pos()[dev->cur + dev->skip + dev->dist*dev->segment_order[n]];
}
/* update counter and pointer */
count += dev->segnb;
@ -3525,8 +3525,8 @@ static void genesys_fill_segmented_buffer(Genesys_Device* dev, uint8_t* work_buf
if (depth==16) {
while (dev->cur < dev->len && count < size) {
for (n=0;n<dev->segnb;n++) {
work_buffer_dst[count+n*2] = dev->oe_buffer.get_read_pos()[dev->cur + dev->skip + dev->dist*dev->order[n]];
work_buffer_dst[count+n*2+1] = dev->oe_buffer.get_read_pos()[dev->cur + dev->skip + dev->dist*dev->order[n] + 1];
work_buffer_dst[count+n*2] = dev->oe_buffer.get_read_pos()[dev->cur + dev->skip + dev->dist*dev->segment_order[n]];
work_buffer_dst[count+n*2+1] = dev->oe_buffer.get_read_pos()[dev->cur + dev->skip + dev->dist*dev->segment_order[n] + 1];
}
/* update counter and pointer */
count += dev->segnb*2;

Wyświetl plik

@ -314,7 +314,7 @@ struct Genesys_Device
size_t skip = 0;
// array describing the order of the sub-segments of the sensor
size_t* order = nullptr;
std::vector<unsigned> segment_order;
// buffer to handle even/odd data
Genesys_Buffer oe_buffer = {};

Wyświetl plik

@ -101,14 +101,14 @@ gl124_test_motor_flag_bit (SANE_Byte val)
* @param ccd_size_divisor flag to signal half ccd mode
* @return a pointer to a Sensor_Profile struct
*/
static Sensor_Profile* get_sensor_profile(int sensor_type, int dpi, unsigned ccd_size_divisor)
static SensorProfileGl124* get_sensor_profile(int sensor_type, int dpi, unsigned ccd_size_divisor)
{
unsigned int i;
int idx;
i=0;
idx=-1;
while(i<sizeof(sensors)/sizeof(Sensor_Profile))
while(i<sizeof(sensors)/sizeof(SensorProfileGl124))
{
/* exact match */
if (sensors[i].sensor_type == sensor_type && sensors[i].dpi == dpi &&
@ -818,8 +818,8 @@ static void gl124_setup_sensor(Genesys_Device * dev,
}
// set EXPDUMMY and CKxMAP
Sensor_Profile* sensor_profile = get_sensor_profile(dev->model->ccd_type, dpihw,
ccd_size_divisor);
SensorProfileGl124* sensor_profile = get_sensor_profile(dev->model->ccd_type, dpihw,
ccd_size_divisor);
regs->set8(0x18, sensor_profile->reg18);
regs->set8(0x20, sensor_profile->reg20);
@ -863,8 +863,7 @@ static void gl124_setup_sensor(Genesys_Device * dev,
regs->set24(REG_CK3MAP, sensor_profile->ck3map);
regs->set24(REG_CK4MAP, sensor_profile->ck4map);
/* order of the sub-segments */
dev->order=sensor_profile->order;
dev->segment_order = sensor_profile->order;
}
/** @brief setup optical related registers
@ -1383,8 +1382,8 @@ gl124_calculate_current_setup (Genesys_Device * dev, const Genesys_Sensor& senso
// compute hw dpi for sensor
dpihw = sensor.get_register_hwdpi(used_res);
Sensor_Profile* sensor_profile = get_sensor_profile(dev->model->ccd_type, dpihw,
ccd_size_divisor);
SensorProfileGl124* sensor_profile = get_sensor_profile(dev->model->ccd_type, dpihw,
ccd_size_divisor);
dev->segnb=sensor_profile->reg98 & 0x0f;
/* stagger */
@ -2312,8 +2311,8 @@ static void gl124_led_calibration(Genesys_Device* dev, Genesys_Sensor& sensor,
unsigned ccd_size_divisor = compute_ccd_size_divisor(sensor, dev->settings.xres);
resolution /= ccd_size_divisor;
Sensor_Profile* sensor_profile = get_sensor_profile(dev->model->ccd_type, dpihw,
ccd_size_divisor);
SensorProfileGl124* sensor_profile = get_sensor_profile(dev->model->ccd_type, dpihw,
ccd_size_divisor);
num_pixels = (sensor.sensor_pixels*resolution)/sensor.optical_res;
/* initial calibration reg values */

Wyświetl plik

@ -369,7 +369,7 @@ static Memory_layout layouts[]={
* - sensor hardware dpi
* - half ccd mode
*/
struct Sensor_Profile
struct SensorProfileGl124
{
int sensor_type; /**> sensor id */
int dpi; /**> maximum dpi for which data are valid */
@ -384,7 +384,7 @@ struct Sensor_Profile
int expr; /**> initial red exposure */
int expg; /**> initial green exposure */
int expb; /**> initial blue exposure */
size_t *order; /**> order of sub-segments */
std::vector<unsigned> order; // order of sub-segments
uint8_t reg18; /**> register 0x18 value */
uint8_t reg20; /**> register 0x20 value */
uint8_t reg61; /**> register 0x61 value */
@ -393,37 +393,34 @@ struct Sensor_Profile
uint8_t reg70; /**> register 0x70 value */
};
static size_t order_01[]={0,1};
static size_t order_0213[]={0,2,1,3};
/** @brief database of sensor profiles
* database of sensor profiles giving for each sensor and a given resolution, the period, and timings
* to setup the sensor for the scan.
*/
static Sensor_Profile sensors[]={
static SensorProfileGl124 sensors[]={
/* LiDE 110 */
{CIS_CANONLIDE110, 600, 2, 2768, 0x1e, 0x9f, 0x55, 2584, 154, 101, 388, 574, 393, NULL , 0x00, 0x0c, 0x20, 0x21, 0x00, 0x00},
{CIS_CANONLIDE110, 600, 1, 5360, 0x1e, 0x9f, 0x55, 5168, 163, 101, 388, 574, 393, NULL , 0x00, 0x0a, 0x20, 0x21, 0x00, 0x00},
{CIS_CANONLIDE110, 1200, 1, 10528, 0x1e, 0x9f, 0x55, 5168, 163, 101, 388, 574, 393, order_01 , 0x00, 0x08, 0x20, 0x22, 0x00, 0x00},
{CIS_CANONLIDE110, 2400, 1, 20864, 0x1e, 0x9f, 0x55, 5168, 163, 4679, 6839, 8401, 6859, order_0213, 0x00, 0x06, 0x20, 0x24, 0x00, 0x00},
{CIS_CANONLIDE110, 600, 2, 2768, 0x1e, 0x9f, 0x55, 2584, 154, 101, 388, 574, 393, {} , 0x00, 0x0c, 0x20, 0x21, 0x00, 0x00},
{CIS_CANONLIDE110, 600, 1, 5360, 0x1e, 0x9f, 0x55, 5168, 163, 101, 388, 574, 393, {} , 0x00, 0x0a, 0x20, 0x21, 0x00, 0x00},
{CIS_CANONLIDE110, 1200, 1, 10528, 0x1e, 0x9f, 0x55, 5168, 163, 101, 388, 574, 393, {0, 1} , 0x00, 0x08, 0x20, 0x22, 0x00, 0x00},
{CIS_CANONLIDE110, 2400, 1, 20864, 0x1e, 0x9f, 0x55, 5168, 163, 4679, 6839, 8401, 6859, {0, 2, 1, 3}, 0x00, 0x06, 0x20, 0x24, 0x00, 0x00},
/* LiDE 120 */
{CIS_CANONLIDE120, 600, 2, 4608, 0x0f, 0x00, 0x55, 2552, 112, 94, 894, 1044, 994, NULL , 0x00, 0x02, 0x20, 0x21, 0x15, 0x00},
{CIS_CANONLIDE120, 600, 1, 5360, 0x0f, 0x00, 0x55, 5104, 139, 94, 1644, 1994, 1844, NULL , 0x00, 0x02, 0x20, 0x21, 0x11, 0x1f},
{CIS_CANONLIDE120, 1200, 1, 10528, 0x0f, 0x00, 0x55,10208, 192, 94, 3194, 3794, 3594, NULL , 0x00, 0x02, 0x20, 0x21, 0x15, 0x1f},
{CIS_CANONLIDE120, 2400, 1, 20864, 0x0f, 0x00, 0x55,20416, 298, 94, 6244, 7544, 7094, NULL , 0x00, 0x02, 0x20, 0x21, 0x11, 0x00},
{CIS_CANONLIDE120, 600, 2, 4608, 0x0f, 0x00, 0x55, 2552, 112, 94, 894, 1044, 994, {} , 0x00, 0x02, 0x20, 0x21, 0x15, 0x00},
{CIS_CANONLIDE120, 600, 1, 5360, 0x0f, 0x00, 0x55, 5104, 139, 94, 1644, 1994, 1844, {} , 0x00, 0x02, 0x20, 0x21, 0x11, 0x1f},
{CIS_CANONLIDE120, 1200, 1, 10528, 0x0f, 0x00, 0x55,10208, 192, 94, 3194, 3794, 3594, {} , 0x00, 0x02, 0x20, 0x21, 0x15, 0x1f},
{CIS_CANONLIDE120, 2400, 1, 20864, 0x0f, 0x00, 0x55,20416, 298, 94, 6244, 7544, 7094, {} , 0x00, 0x02, 0x20, 0x21, 0x11, 0x00},
/* LiDE 210 */
{CIS_CANONLIDE210, 600, 2, 2768, 0x1e, 0x9f, 0x55, 2584, 154, 101, 388, 574, 393, NULL , 0x00, 0x0c, 0x20, 0x21, 0x00, 0x00},
{CIS_CANONLIDE210, 600, 1, 5360, 0x1e, 0x9f, 0x55, 5168, 163, 101, 388, 574, 393, NULL , 0x00, 0x0a, 0x20, 0x21, 0x00, 0x00},
{CIS_CANONLIDE210, 1200, 1, 10528, 0x1e, 0x9f, 0x55, 5168, 163, 101, 388, 574, 393, order_01 , 0x00, 0x08, 0x20, 0x22, 0x00, 0x00},
{CIS_CANONLIDE210, 2400, 1, 20864, 0x1e, 0x9f, 0x55, 5168, 163, 4679, 6839, 8401, 6859, order_0213, 0x00, 0x06, 0x20, 0x24, 0x00, 0x00},
{CIS_CANONLIDE210, 600, 2, 2768, 0x1e, 0x9f, 0x55, 2584, 154, 101, 388, 574, 393, {} , 0x00, 0x0c, 0x20, 0x21, 0x00, 0x00},
{CIS_CANONLIDE210, 600, 1, 5360, 0x1e, 0x9f, 0x55, 5168, 163, 101, 388, 574, 393, {} , 0x00, 0x0a, 0x20, 0x21, 0x00, 0x00},
{CIS_CANONLIDE210, 1200, 1, 10528, 0x1e, 0x9f, 0x55, 5168, 163, 101, 388, 574, 393, {0, 1} , 0x00, 0x08, 0x20, 0x22, 0x00, 0x00},
{CIS_CANONLIDE210, 2400, 1, 20864, 0x1e, 0x9f, 0x55, 5168, 163, 4679, 6839, 8401, 6859, {0, 2, 1, 3}, 0x00, 0x06, 0x20, 0x24, 0x00, 0x00},
/* LiDE 220 */
{CIS_CANONLIDE220, 600, 2, 2768, 0x0f, 0x9f, 0x55, 2584, 154, 101, 388, 574, 393, NULL , 0x00, 0x0c, 0x20, 0x21, 0x00, 0x00},
{CIS_CANONLIDE220, 600, 1, 5360, 0x0f, 0x9f, 0x55, 5168, 163, 101, 388, 574, 393, NULL , 0x00, 0x0a, 0x20, 0x21, 0x00, 0x00},
{CIS_CANONLIDE220, 1200, 1, 10528, 0x0f, 0x9f, 0x55, 5168, 163, 101, 388, 574, 393, order_01 , 0x00, 0x08, 0x20, 0x22, 0x00, 0x00},
{CIS_CANONLIDE220, 2400, 1, 20864, 0x0f, 0x9f, 0x55, 5168, 163, 4679, 6839, 8401, 6859, order_0213, 0x00, 0x06, 0x20, 0x24, 0x00, 0x00},
{CIS_CANONLIDE220, 600, 2, 2768, 0x0f, 0x9f, 0x55, 2584, 154, 101, 388, 574, 393, {} , 0x00, 0x0c, 0x20, 0x21, 0x00, 0x00},
{CIS_CANONLIDE220, 600, 1, 5360, 0x0f, 0x9f, 0x55, 5168, 163, 101, 388, 574, 393, {} , 0x00, 0x0a, 0x20, 0x21, 0x00, 0x00},
{CIS_CANONLIDE220, 1200, 1, 10528, 0x0f, 0x9f, 0x55, 5168, 163, 101, 388, 574, 393, {0, 1} , 0x00, 0x08, 0x20, 0x22, 0x00, 0x00},
{CIS_CANONLIDE220, 2400, 1, 20864, 0x0f, 0x9f, 0x55, 5168, 163, 4679, 6839, 8401, 6859, {0, 2, 1, 3}, 0x00, 0x06, 0x20, 0x24, 0x00, 0x00},
};

Wyświetl plik

@ -154,14 +154,14 @@ gl846_get_step_multiplier (Genesys_Register_Set * regs)
* @param dpi hardware dpi for the scan
* @return a pointer to a Sensor_Profile struct
*/
static Sensor_Profile *get_sensor_profile(int sensor_type, int dpi)
static SensorProfileGl846 *get_sensor_profile(int sensor_type, int dpi)
{
unsigned int i;
int idx;
i=0;
idx=-1;
while(i<sizeof(sensors)/sizeof(Sensor_Profile))
while(i<sizeof(sensors)/sizeof(SensorProfileGl846))
{
/* exact match */
if(sensors[i].sensor_type==sensor_type && sensors[i].dpi==dpi)
@ -203,7 +203,7 @@ static Sensor_Profile *get_sensor_profile(int sensor_type, int dpi)
*/
static int gl846_compute_exposure(Genesys_Device *dev, int xres)
{
Sensor_Profile* sensor_profile=get_sensor_profile(dev->model->ccd_type, xres);
SensorProfileGl846* sensor_profile=get_sensor_profile(dev->model->ccd_type, xres);
return sensor_profile->exposure;
}
@ -228,7 +228,7 @@ static void gl846_setup_sensor(Genesys_Device * dev, const Genesys_Sensor& senso
// set EXPDUMMY and CKxMAP
dpihw = sensor.get_register_hwdpi(dpi);
Sensor_Profile* sensor_profile = get_sensor_profile(dev->model->ccd_type, dpihw);
SensorProfileGl846* sensor_profile = get_sensor_profile(dev->model->ccd_type, dpihw);
regs->set8(REG_EXPDMY, (uint8_t)((sensor_profile->expdummy) & 0xff));
@ -258,8 +258,7 @@ static void gl846_setup_sensor(Genesys_Device * dev, const Genesys_Sensor& senso
regs->set24(REG_CK3MAP, sensor_profile->ck3map);
regs->set24(REG_CK4MAP, sensor_profile->ck4map);
/* order of the sub-segments */
dev->order=sensor_profile->order;
dev->segment_order = sensor_profile->order;
r = sanei_genesys_get_address (regs, 0x17);
r->value = sensor_profile->r17;
@ -779,7 +778,7 @@ static void gl846_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
DBG(DBG_io2, "%s: dpihw=%d (factor=%d)\n", __func__, dpihw, factor);
/* sensor parameters */
Sensor_Profile* sensor_profile = get_sensor_profile(dev->model->ccd_type, dpihw);
SensorProfileGl846* sensor_profile = get_sensor_profile(dev->model->ccd_type, dpihw);
gl846_setup_sensor(dev, sensor, reg, dpihw);
dpiset = used_res * ccd_pixels_per_system_pixel ;
@ -1985,7 +1984,7 @@ static void gl846_led_calibration(Genesys_Device* dev, Genesys_Sensor& sensor,
channels = 3;
depth=16;
used_res = sensor.get_register_hwdpi(dev->settings.xres);
Sensor_Profile* sensor_profile = get_sensor_profile(dev->model->ccd_type, used_res);
SensorProfileGl846* sensor_profile = get_sensor_profile(dev->model->ccd_type, used_res);
num_pixels = (sensor.sensor_pixels*used_res)/sensor.optical_res;
/* initial calibration reg values */

Wyświetl plik

@ -440,7 +440,7 @@ static Memory_layout layouts[]={
* this structure describes the sensor settings to use for a given
* exposure.
*/
typedef struct {
struct SensorProfileGl846 {
int sensor_type; /**> sensor id */
int dpi; /**> maximum dpi for which data are valid */
int exposure; /**> exposure */
@ -452,19 +452,14 @@ typedef struct {
int expr; /**> initial red exposure */
int expg; /**> initial green exposure */
int expb; /**> initial blue exposure */
size_t *order; /**> order of sub-segments */
std::vector<unsigned> order; // order of sub-segments
uint8_t r17; /**> TG width */
} Sensor_Profile;
/**
* order of the scanned pixel
*/
static size_t order_01[]={0,1};
};
/**
* database of sensor profiles
*/
static Sensor_Profile sensors[]={
{CCD_IMG101, 1200, 11000, 60, 159, 85, 5136, 255, 0, 0, 0, order_01 , 0x13},
{CCD_PLUSTEK3800, 1200, 11000, 60, 159, 85, 5136, 255, 0, 0, 0, order_01 , 0x13},
static SensorProfileGl846 sensors[]={
{CCD_IMG101, 1200, 11000, 60, 159, 85, 5136, 255, 0, 0, 0, {0, 1}, 0x13},
{CCD_PLUSTEK3800, 1200, 11000, 60, 159, 85, 5136, 255, 0, 0, 0, {0, 1}, 0x13},
};

Wyświetl plik

@ -149,15 +149,14 @@ gl847_get_step_multiplier (Genesys_Register_Set * regs)
* @param dpi hardware dpi for the scan
* @return a pointer to a Sensor_Profile struct
*/
static Sensor_Profile *get_sensor_profile(int sensor_type, int dpi)
static SensorProfileGl847 *get_sensor_profile(int sensor_type, int dpi)
{
unsigned int i;
int idx;
i=0;
idx=-1;
while(i<sizeof(sensors)/sizeof(Sensor_Profile))
{
while (i < sizeof(sensors)/sizeof(SensorProfileGl847)) {
/* exact match */
if(sensors[i].sensor_type==sensor_type && sensors[i].dpi==dpi)
{
@ -198,7 +197,7 @@ static Sensor_Profile *get_sensor_profile(int sensor_type, int dpi)
*/
static int gl847_compute_exposure(Genesys_Device *dev, int xres)
{
Sensor_Profile* sensor_profile=get_sensor_profile(dev->model->ccd_type, xres);
SensorProfileGl847* sensor_profile=get_sensor_profile(dev->model->ccd_type, xres);
return sensor_profile->exposure;
}
@ -225,7 +224,7 @@ static void gl847_setup_sensor(Genesys_Device * dev, const Genesys_Sensor& senso
// set EXPDUMMY and CKxMAP
dpihw = sensor.get_register_hwdpi(dpi);
Sensor_Profile* sensor_profile=get_sensor_profile(dev->model->ccd_type, dpihw);
SensorProfileGl847* sensor_profile = get_sensor_profile(dev->model->ccd_type, dpihw);
regs->set8(REG_EXPDMY, (uint8_t)((sensor_profile->expdummy) & 0xff));
@ -255,8 +254,7 @@ static void gl847_setup_sensor(Genesys_Device * dev, const Genesys_Sensor& senso
regs->set24(REG_CK3MAP,sensor_profile->ck3map);
regs->set24(REG_CK4MAP,sensor_profile->ck4map);
/* order of the sub-segments */
dev->order=sensor_profile->order;
dev->segment_order = sensor_profile->order;
r = sanei_genesys_get_address (regs, 0x17);
r->value = sensor_profile->r17;
@ -800,7 +798,7 @@ static void gl847_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
DBG(DBG_io2, "%s: dpihw=%d (factor=%d)\n", __func__, dpihw, factor);
/* sensor parameters */
Sensor_Profile* sensor_profile=get_sensor_profile(dev->model->ccd_type, dpihw);
SensorProfileGl847* sensor_profile = get_sensor_profile(dev->model->ccd_type, dpihw);
gl847_setup_sensor(dev, sensor, reg, dpihw);
dpiset = used_res * ccd_pixels_per_system_pixel;
@ -2041,7 +2039,7 @@ static void gl847_led_calibration(Genesys_Device* dev, Genesys_Sensor& sensor,
channels = 3;
depth=16;
used_res = sensor.get_register_hwdpi(dev->settings.xres);
Sensor_Profile* sensor_profile=get_sensor_profile(dev->model->ccd_type, used_res);
SensorProfileGl847* sensor_profile=get_sensor_profile(dev->model->ccd_type, used_res);
num_pixels = (sensor.sensor_pixels*used_res)/sensor.optical_res;
/* initial calibration reg values */

Wyświetl plik

@ -408,7 +408,7 @@ static Memory_layout layouts[]={
* this structure describes the sensor settings to use for a given
* exposure.
*/
typedef struct {
struct SensorProfileGl847 {
int sensor_type; /**> sensor id */
int dpi; /**> maximum dpi for which data are valid */
int exposure; /**> exposure */
@ -420,42 +420,35 @@ typedef struct {
int expr; /**> initial red exposure */
int expg; /**> initial green exposure */
int expb; /**> initial blue exposure */
size_t *order; /**> order of sub-segments */
std::vector<unsigned> order; // order of sub-segments
uint8_t r17; /**> TG width */
} Sensor_Profile;
static size_t order_01[]={0,1};
static size_t order_0213[]={0,2,1,3};
static size_t order_0246[]={0,2,4,6,1,3,5,7};
static size_t new_order[]={0,1,2,3};
static size_t order_0145[]={0,1,4,5,2,3,6,7};
};
/**
* database of sensor profiles
*/
static Sensor_Profile sensors[]={
{CIS_CANONLIDE100, 200, 2848, 60, 159, 85, 5136, 255, 410, 275, 203, NULL , 0x0a},
{CIS_CANONLIDE100, 300, 1424, 60, 159, 85, 5136, 255, 410, 275, 203, NULL , 0x0a},
{CIS_CANONLIDE100, 600, 1432, 60, 159, 85, 5136, 255, 410, 275, 203, NULL , 0x0a},
{CIS_CANONLIDE100, 1200, 2712, 60, 159, 85, 5136, 255, 746, 478, 353, order_01 , 0x08},
{CIS_CANONLIDE100, 2400, 5280, 60, 159, 85, 5136, 255, 1417, 909, 643, order_0213, 0x06},
static SensorProfileGl847 sensors[]={
{CIS_CANONLIDE100, 200, 2848, 60, 159, 85, 5136, 255, 410, 275, 203, {} , 0x0a},
{CIS_CANONLIDE100, 300, 1424, 60, 159, 85, 5136, 255, 410, 275, 203, {} , 0x0a},
{CIS_CANONLIDE100, 600, 1432, 60, 159, 85, 5136, 255, 410, 275, 203, {} , 0x0a},
{CIS_CANONLIDE100, 1200, 2712, 60, 159, 85, 5136, 255, 746, 478, 353, {0, 1} , 0x08},
{CIS_CANONLIDE100, 2400, 5280, 60, 159, 85, 5136, 255, 1417, 909, 643, {0, 2, 1, 3}, 0x06},
/*
{CIS_CANONLIDE200, 150, 2848, 240, 636, 340, 5144, 0, 255, 637, 637, 637},
{CIS_CANONLIDE200, 300, 1424, 240, 636, 340, 5144, 0, 255, 637, 637, 637},
*/
{CIS_CANONLIDE200, 200, 2848, 60, 159, 85, 5136, 255, 410, 275, 203, NULL , 0x0a},
{CIS_CANONLIDE200, 300, 1424, 60, 159, 85, 5136, 255, 410, 275, 203, NULL , 0x0a},
{CIS_CANONLIDE200, 600, 1432, 60, 159, 85, 5136, 255, 410, 275, 203, NULL , 0x0a},
{CIS_CANONLIDE200, 1200, 2712, 60, 159, 85, 5136, 255, 746, 478, 353, order_01 , 0x08},
{CIS_CANONLIDE200, 2400, 5280, 60, 159, 85, 5136, 255, 1417, 909, 643, order_0213, 0x06},
{CIS_CANONLIDE200, 4800, 10416, 60, 159, 85, 5136, 255, 2692, 1728, 1221, order_0246, 0x04},
{CIS_CANONLIDE200, 200, 2848, 60, 159, 85, 5136, 255, 410, 275, 203, {} , 0x0a},
{CIS_CANONLIDE200, 300, 1424, 60, 159, 85, 5136, 255, 410, 275, 203, {} , 0x0a},
{CIS_CANONLIDE200, 600, 1432, 60, 159, 85, 5136, 255, 410, 275, 203, {} , 0x0a},
{CIS_CANONLIDE200, 1200, 2712, 60, 159, 85, 5136, 255, 746, 478, 353, {0, 1} , 0x08},
{CIS_CANONLIDE200, 2400, 5280, 60, 159, 85, 5136, 255, 1417, 909, 643, {0, 2, 1, 3}, 0x06},
{CIS_CANONLIDE200, 4800, 10416, 60, 159, 85, 5136, 255, 2692, 1728, 1221, {0, 2, 4, 6, 1, 3, 5, 7}, 0x04},
/* LiDE 700F */
{CIS_CANONLIDE700, 150, 2848, 135, 249, 85, 5187, 255, 465, 310, 239, NULL , 0x0c},
{CIS_CANONLIDE700, 300, 1424, 135, 249, 85, 5187, 255, 465, 310, 239, NULL , 0x0c},
{CIS_CANONLIDE700, 600, 1504, 135, 249, 85, 5187, 255, 465, 310, 239, NULL , 0x0c},
{CIS_CANONLIDE700, 1200, 2696, 135, 249, 85, 5187, 255, 1464, 844, 555, order_01 , 0x0a},
{CIS_CANONLIDE700, 2400, 10576, 135, 249, 85, 5187, 255, 2798, 1558, 972, new_order , 0x08},
{CIS_CANONLIDE700, 4800, 10576, 135, 249, 85, 5187, 255, 2798, 1558, 972, order_0145, 0x06},
{CIS_CANONLIDE700, 150, 2848, 135, 249, 85, 5187, 255, 465, 310, 239, {} , 0x0c},
{CIS_CANONLIDE700, 300, 1424, 135, 249, 85, 5187, 255, 465, 310, 239, {} , 0x0c},
{CIS_CANONLIDE700, 600, 1504, 135, 249, 85, 5187, 255, 465, 310, 239, {} , 0x0c},
{CIS_CANONLIDE700, 1200, 2696, 135, 249, 85, 5187, 255, 1464, 844, 555, {0, 1} , 0x0a},
{CIS_CANONLIDE700, 2400, 10576, 135, 249, 85, 5187, 255, 2798, 1558, 972, {0, 1, 2, 3}, 0x08},
{CIS_CANONLIDE700, 4800, 10576, 135, 249, 85, 5187, 255, 2798, 1558, 972, {0, 1, 4, 5, 2, 3, 6, 7}, 0x06},
};