kopia lustrzana https://gitlab.com/sane-project/backends
canon_dr backend v36
- initial support for DR-3080 and DR-5060 - add code to clamp scan width to an arbitrary byte width boundary - add code to prevent setting of brightness/threshold/contrast - don't send dropout color command on non-color scannersmerge-requests/1/head
rodzic
d5850b4991
commit
6130047b10
|
@ -255,6 +255,11 @@
|
||||||
- cleanup #includes and copyright
|
- cleanup #includes and copyright
|
||||||
- add SANE_I18N to static strings
|
- add SANE_I18N to static strings
|
||||||
- don't fail if scsi buffer is too small
|
- don't fail if scsi buffer is too small
|
||||||
|
v36 2011-01-03, MAN
|
||||||
|
- initial support for DR-3080 and DR-5060
|
||||||
|
- add code to clamp scan width to an arbitrary byte width boundary
|
||||||
|
- add code to prevent setting of brightness/threshold/contrast
|
||||||
|
- don't send dropout color command on non-color scanners
|
||||||
|
|
||||||
SANE FLOW DIAGRAM
|
SANE FLOW DIAGRAM
|
||||||
|
|
||||||
|
@ -303,7 +308,7 @@
|
||||||
#include "canon_dr.h"
|
#include "canon_dr.h"
|
||||||
|
|
||||||
#define DEBUG 1
|
#define DEBUG 1
|
||||||
#define BUILD 35
|
#define BUILD 36
|
||||||
|
|
||||||
/* values for SANE_DEBUG_CANON_DR env var:
|
/* values for SANE_DEBUG_CANON_DR env var:
|
||||||
- errors 5
|
- errors 5
|
||||||
|
@ -1104,6 +1109,7 @@ init_model (struct scanner *s)
|
||||||
|
|
||||||
s->always_op = 1;
|
s->always_op = 1;
|
||||||
s->has_df = 1;
|
s->has_df = 1;
|
||||||
|
s->has_btc = 1;
|
||||||
s->has_counter = 1;
|
s->has_counter = 1;
|
||||||
s->has_adf = 1;
|
s->has_adf = 1;
|
||||||
s->has_duplex = 1;
|
s->has_duplex = 1;
|
||||||
|
@ -1114,6 +1120,7 @@ init_model (struct scanner *s)
|
||||||
s->contrast_steps = 255;
|
s->contrast_steps = 255;
|
||||||
s->threshold_steps = 255;
|
s->threshold_steps = 255;
|
||||||
|
|
||||||
|
s->Bpl_mod = 1;
|
||||||
s->bg_color = 0xee;
|
s->bg_color = 0xee;
|
||||||
|
|
||||||
/* assume these are same as adf, override below */
|
/* assume these are same as adf, override below */
|
||||||
|
@ -1200,6 +1207,19 @@ init_model (struct scanner *s)
|
||||||
s->can_monochrome=0;
|
s->can_monochrome=0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else if (strstr (s->model_name,"DR-3080")){
|
||||||
|
s->can_write_panel = 0;
|
||||||
|
s->has_df = 0;
|
||||||
|
s->has_btc = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (strstr (s->model_name,"DR-5060F")){
|
||||||
|
s->can_write_panel = 0;
|
||||||
|
s->has_df = 0;
|
||||||
|
s->has_btc = 0;
|
||||||
|
s->Bpl_mod = 32;
|
||||||
|
}
|
||||||
|
|
||||||
DBG (10, "init_model: finish\n");
|
DBG (10, "init_model: finish\n");
|
||||||
|
|
||||||
return SANE_STATUS_GOOD;
|
return SANE_STATUS_GOOD;
|
||||||
|
@ -2744,6 +2764,11 @@ ssm_do (struct scanner *s)
|
||||||
|
|
||||||
DBG (10, "ssm_do: start\n");
|
DBG (10, "ssm_do: start\n");
|
||||||
|
|
||||||
|
if(!s->can_color){
|
||||||
|
DBG (10, "ssm_do: unsupported, finishing\n");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
memset(cmd,0,cmdLen);
|
memset(cmd,0,cmdLen);
|
||||||
set_SCSI_opcode(cmd, SET_SCAN_MODE_code);
|
set_SCSI_opcode(cmd, SET_SCAN_MODE_code);
|
||||||
set_SSM_pf(cmd, 1);
|
set_SSM_pf(cmd, 1);
|
||||||
|
@ -3001,6 +3026,9 @@ update_params(struct scanner *s, int calib)
|
||||||
else if (s->u.mode == MODE_GRAYSCALE) {
|
else if (s->u.mode == MODE_GRAYSCALE) {
|
||||||
s->u.format = SANE_FRAME_GRAY;
|
s->u.format = SANE_FRAME_GRAY;
|
||||||
s->u.bpp = 8;
|
s->u.bpp = 8;
|
||||||
|
|
||||||
|
/* round down to boundary for some scanners */
|
||||||
|
s->u.width -= s->u.width % s->Bpl_mod;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
s->u.format = SANE_FRAME_GRAY;
|
s->u.format = SANE_FRAME_GRAY;
|
||||||
|
@ -3090,6 +3118,10 @@ update_params(struct scanner *s, int calib)
|
||||||
if(s->s.mode < MODE_GRAYSCALE){
|
if(s->s.mode < MODE_GRAYSCALE){
|
||||||
s->s.width -= s->s.width % 8;
|
s->s.width -= s->s.width % 8;
|
||||||
}
|
}
|
||||||
|
if(s->s.mode == MODE_GRAYSCALE){
|
||||||
|
/* round down to boundary for some scanners */
|
||||||
|
s->s.width -= s->s.width % s->Bpl_mod;
|
||||||
|
}
|
||||||
|
|
||||||
s->s.valid_width = s->s.width;
|
s->s.valid_width = s->s.width;
|
||||||
s->s.valid_Bpl = s->s.valid_width * s->s.bpp / 8;
|
s->s.valid_Bpl = s->s.valid_width * s->s.bpp / 8;
|
||||||
|
@ -3606,15 +3638,17 @@ set_window (struct scanner *s)
|
||||||
|
|
||||||
set_WD_length (desc1, s->s.height * 1200/s->s.dpi_y);
|
set_WD_length (desc1, s->s.height * 1200/s->s.dpi_y);
|
||||||
|
|
||||||
/*convert our common -127 to +127 range into HW's range
|
if(s->has_btc){
|
||||||
*FIXME: this code assumes hardware range of 0-255 */
|
/*convert our common -127 to +127 range into HW's range
|
||||||
set_WD_brightness (desc1, s->brightness+128);
|
*FIXME: this code assumes hardware range of 0-255 */
|
||||||
|
set_WD_brightness (desc1, s->brightness+128);
|
||||||
set_WD_threshold (desc1, s->threshold);
|
|
||||||
|
set_WD_threshold (desc1, s->threshold);
|
||||||
/*convert our common -127 to +127 range into HW's range
|
|
||||||
*FIXME: this code assumes hardware range of 0-255 */
|
/*convert our common -127 to +127 range into HW's range
|
||||||
set_WD_contrast (desc1, s->contrast+128);
|
*FIXME: this code assumes hardware range of 0-255 */
|
||||||
|
set_WD_contrast (desc1, s->contrast+128);
|
||||||
|
}
|
||||||
|
|
||||||
set_WD_composition (desc1, s->s.mode);
|
set_WD_composition (desc1, s->s.mode);
|
||||||
|
|
||||||
|
|
|
@ -153,6 +153,7 @@ struct scanner
|
||||||
int brightness_steps;
|
int brightness_steps;
|
||||||
int threshold_steps;
|
int threshold_steps;
|
||||||
int contrast_steps;
|
int contrast_steps;
|
||||||
|
int Bpl_mod; /* modulus of scanline byte width */
|
||||||
|
|
||||||
/* the scan size in 1/1200th inches, NOT basic_units or sane units */
|
/* the scan size in 1/1200th inches, NOT basic_units or sane units */
|
||||||
int min_x;
|
int min_x;
|
||||||
|
@ -175,6 +176,7 @@ struct scanner
|
||||||
int has_comp_JPEG;
|
int has_comp_JPEG;
|
||||||
int has_buffer;
|
int has_buffer;
|
||||||
int has_df;
|
int has_df;
|
||||||
|
int has_btc;
|
||||||
int can_write_panel;
|
int can_write_panel;
|
||||||
int rgb_format; /* meaning unknown */
|
int rgb_format; /* meaning unknown */
|
||||||
int padding; /* meaning unknown */
|
int padding; /* meaning unknown */
|
||||||
|
|
|
@ -133,13 +133,13 @@
|
||||||
:model "DR-3080C"
|
:model "DR-3080C"
|
||||||
:interface "SCSI"
|
:interface "SCSI"
|
||||||
:status :untested
|
:status :untested
|
||||||
:comment "Please test!"
|
:comment "Almost works, need to investigate traces from windows driver"
|
||||||
|
|
||||||
:model "DR-3080CII"
|
:model "DR-3080CII"
|
||||||
:interface "USB SCSI"
|
:interface "USB SCSI"
|
||||||
:usbid "0x04a9" "0x1609"
|
:usbid "0x04a9" "0x1609"
|
||||||
:status :untested
|
:status :untested
|
||||||
:comment "Please test!"
|
:comment "Almost works, need to investigate traces from windows driver"
|
||||||
|
|
||||||
:model "DR-4010C"
|
:model "DR-4010C"
|
||||||
:interface "USB"
|
:interface "USB"
|
||||||
|
@ -172,8 +172,8 @@
|
||||||
|
|
||||||
:model "DR-5060F"
|
:model "DR-5060F"
|
||||||
:interface "SCSI"
|
:interface "SCSI"
|
||||||
:status :untested
|
:status :basic
|
||||||
:comment "Please test!"
|
:comment "Grayscale works"
|
||||||
|
|
||||||
:model "DR-5080C"
|
:model "DR-5080C"
|
||||||
:interface "SCSI"
|
:interface "SCSI"
|
||||||
|
|
Ładowanie…
Reference in New Issue