kopia lustrzana https://gitlab.com/sane-project/backends
Add many new inquiry and mode select values
rodzic
7269ff0158
commit
3a3ff4b05f
|
@ -125,7 +125,7 @@ putnbyte (unsigned char *pnt, unsigned int value, unsigned int nbytes)
|
|||
#define INQUIRY_len 6
|
||||
|
||||
#define INQUIRY_std_len 96
|
||||
#define INQUIRY_vpd_len 104
|
||||
#define INQUIRY_vpd_len 204 /* unlikely maximum value */
|
||||
|
||||
#define set_IN_evpd(icb, val) setbitfield(icb + 1, 1, 0, val)
|
||||
#define set_IN_page_code(icb, val) icb[0x02]=val
|
||||
|
@ -273,7 +273,7 @@ putnbyte (unsigned char *pnt, unsigned int value, unsigned int nbytes)
|
|||
#define get_IN_ipc_diffusion(in) getbitfield(in+0x59, 1, 6)
|
||||
#define get_IN_ipc_ipc3(in) getbitfield(in+0x59, 1, 5)
|
||||
#define get_IN_ipc_rotation(in) getbitfield(in+0x59, 1, 4)
|
||||
#define get_IN_ipc_hybrid_clip_deskew(in) getbitfield(in+0x59, 1, 3)
|
||||
#define get_IN_ipc_hybrid_crop_deskew(in) getbitfield(in+0x59, 1, 3)
|
||||
#define get_IN_ipc_ipc2_byte67(in) getbitfield(in+0x59, 1, 0)
|
||||
|
||||
#define get_IN_compression_MH(in) getbitfield(in+0x5a, 1, 7)
|
||||
|
@ -327,9 +327,45 @@ putnbyte (unsigned char *pnt, unsigned int value, unsigned int nbytes)
|
|||
#define get_IN_dropout_white(in) getbitfield(in+0x6a, 1, 7)
|
||||
|
||||
#define get_IN_skew_check(in) getbitfield(in+0x6d, 1, 7)
|
||||
#define get_IN_new_fd_roll(in) getbitfield(in+0x6d, 1, 6)
|
||||
|
||||
#define get_IN_evpd_len(in) getnbyte(in + 0x6f, 1)
|
||||
|
||||
#define get_IN_paper_count(in) getbitfield(in+0x70, 1, 7)
|
||||
#define get_IN_paper_number(in) getbitfield(in+0x70, 1, 6)
|
||||
#define get_IN_ext_send_to(in) getbitfield(in+0x70, 1, 5)
|
||||
#define get_IN_staple_det(in) getbitfield(in+0x70, 1, 4)
|
||||
#define get_IN_pause_host(in) getbitfield(in+0x70, 1, 3)
|
||||
#define get_IN_pause_panel(in) getbitfield(in+0x70, 1, 2)
|
||||
#define get_IN_pause_conf(in) getbitfield(in+0x70, 1, 1)
|
||||
#define get_IN_hq_print(in) getbitfield(in+0x70, 1, 0)
|
||||
|
||||
#define get_IN_ext_GHS_len(in) getnbyte(in + 0x71, 1)
|
||||
|
||||
#define get_IN_smbc_func(in) getbitfield(in+0x72, 1, 7)
|
||||
#define get_IN_imprint_chk_b(in) getbitfield(in+0x72, 1, 6)
|
||||
#define get_IN_imprint_chk_f(in) getbitfield(in+0x72, 1, 5)
|
||||
#define get_IN_force_w_bg(in) getbitfield(in+0x72, 1, 4)
|
||||
#define get_IN_mf_recover_lvl(in) getbitfield(in+0x72, 0x0f, 0)
|
||||
|
||||
#define get_IN_first_read_time(in) getbitfield(in+0x73, 1, 7)
|
||||
#define get_IN_div_scanning(in) getbitfield(in+0x73, 1, 6)
|
||||
#define get_IN_start_job(in) getbitfield(in+0x73, 1, 5)
|
||||
#define get_IN_lifetime_log(in) getbitfield(in+0x73, 1, 4)
|
||||
#define get_IN_imff_save_rest(in) getbitfield(in+0x73, 1, 3)
|
||||
#define get_IN_wide_scsi_type(in) getbitfield(in+0x73, 0x07, 0)
|
||||
|
||||
#define get_IN_lut_hybrid_crop(in) getbitfield(in+0x74, 1, 7)
|
||||
#define get_IN_over_under_amt(in) getbitfield(in+0x74, 1, 6)
|
||||
#define get_IN_rgb_lut(in) getbitfield(in+0x74, 1, 5)
|
||||
#define get_IN_num_lut_dl(in) getbitfield(in+0x74, 0x0f, 0)
|
||||
|
||||
/*byte 75 is poorly documented*/
|
||||
|
||||
#define get_IN_sync_next_feed(in) getbitfield(in+0x76, 0x07, 0)
|
||||
|
||||
/* some scanners need evpd inquiry data manipulated */
|
||||
#define set_IN_page_length(in,val) in[0x04]=val
|
||||
#define set_IN_page_length(in,val) in[0x04]=val
|
||||
|
||||
/* ==================================================================== */
|
||||
/* page codes used by mode_sense and mode_select */
|
||||
|
@ -402,9 +438,21 @@ putnbyte (unsigned char *pnt, unsigned int value, unsigned int nbytes)
|
|||
#define set_MSEL_prepick(sb, val) setbitfield(sb + 0x02, 0x03, 6, val)
|
||||
|
||||
/*more automatic stuff with this one...*/
|
||||
#define set_MSEL_awd(sb, val) setbitfield(sb + 0x02, 0x01, 7, val)
|
||||
#define set_MSEL_ald(sb, val) setbitfield(sb + 0x03, 0x01, 7, val)
|
||||
#define set_MSEL_overscan(sb, val) setbitfield(sb + 0x05, 0x03, 6, val)
|
||||
#define set_MSEL_awd(sb, val) setbitfield(sb + 0x02, 0x01, 7, val)
|
||||
#define set_MSEL_w_wfill(sb, val) setbitfield(sb + 0x02, 0x01, 6, val)
|
||||
#define set_MSEL_req_driv_lut(sb, val) setbitfield(sb + 0x02, 0x01, 1, val)
|
||||
#define set_MSEL_req_driv_crop(sb, val) setbitfield(sb + 0x02, 0x01, 0, val)
|
||||
|
||||
#define set_MSEL_ald(sb, val) setbitfield(sb + 0x03, 0x01, 7, val)
|
||||
#define set_MSEL_l_wfill(sb, val) setbitfield(sb + 0x03, 0x01, 6, val)
|
||||
|
||||
#define set_MSEL_deskew(sb, val) setbitfield(sb + 0x04, 0x01, 7, val)
|
||||
|
||||
#define set_MSEL_overscan(sb, val) setbitfield(sb + 0x05, 0x02, 6, val)
|
||||
#define set_MSEL_overcrop(sb, val) setbitfield(sb + 0x05, 0x01, 5, val)
|
||||
#define set_MSEL_undercrop(sb, val) setbitfield(sb + 0x05, 0x01, 4, val)
|
||||
|
||||
#define set_MSEL_over_under_amt(sb, val) sb[0x06]=val
|
||||
|
||||
/*buffer, prepick, overscan use these*/
|
||||
#define MSEL_DEFAULT 0
|
||||
|
@ -513,8 +561,11 @@ putnbyte (unsigned char *pnt, unsigned int value, unsigned int nbytes)
|
|||
#define R_PSIZE_len 0x18
|
||||
#define get_PSIZE_num_x(in) getnbyte(in + 0x00, 4)
|
||||
#define get_PSIZE_num_y(in) getnbyte(in + 0x04, 4)
|
||||
#define get_PSIZE_paper_w(in) getnbyte(in + 0x08, 4)
|
||||
#define get_PSIZE_paper_l(in) getnbyte(in + 0x0C, 4)
|
||||
#define get_PSIZE_paper_w(in) getnbyte(in + 0x08, 4)
|
||||
#define get_PSIZE_paper_l(in) getnbyte(in + 0x0C, 4)
|
||||
#define get_PSIZE_req_driv_crop(in) getbitfield(in + 0x10, 1, 7)
|
||||
#define get_PSIZE_req_driv_lut(in) getbitfield(in + 0x10, 1, 6)
|
||||
#define get_PSIZE_req_driv_valid(in) getbitfield(in + 0x10, 1, 0)
|
||||
|
||||
/* ==================================================================== */
|
||||
/* SEND */
|
||||
|
|
|
@ -1515,6 +1515,11 @@ init_vpd (struct fujitsu *s)
|
|||
s->has_rotation = get_IN_ipc_rotation (in);
|
||||
DBG (15, " rotation: %d\n", s->has_rotation);
|
||||
|
||||
s->has_hybrid_crop_deskew = get_IN_ipc_hybrid_crop_deskew(in);
|
||||
DBG (15, " hybrid crop deskew: %d\n", s->has_hybrid_crop_deskew);
|
||||
|
||||
DBG (15, " ipc2 byte 67: %d\n", get_IN_ipc_ipc2_byte67(in));
|
||||
|
||||
/* compression modes */
|
||||
s->has_comp_MH = get_IN_compression_MH (in);
|
||||
DBG (15, " compression MH: %d\n", s->has_comp_MH);
|
||||
|
@ -1542,23 +1547,23 @@ init_vpd (struct fujitsu *s)
|
|||
DBG (15, " compression JPG3: %d\n", s->has_comp_JPG3);
|
||||
|
||||
/* FIXME: we dont store these? */
|
||||
DBG (15, " back endorser mech: %d\n", get_IN_endorser_b_mech(in));
|
||||
DBG (15, " back endorser stamp: %d\n", get_IN_endorser_b_stamp(in));
|
||||
DBG (15, " back endorser elec: %d\n", get_IN_endorser_b_elec(in));
|
||||
DBG (15, " endorser max id: %d\n", get_IN_endorser_max_id(in));
|
||||
DBG (15, " back endorser mech: %d\n", get_IN_endorser_b_mech(in));
|
||||
DBG (15, " back endorser stamp: %d\n", get_IN_endorser_b_stamp(in));
|
||||
DBG (15, " back endorser elec: %d\n", get_IN_endorser_b_elec(in));
|
||||
DBG (15, " endorser max id: %d\n", get_IN_endorser_max_id(in));
|
||||
|
||||
DBG (15, " front endorser mech: %d\n", get_IN_endorser_f_mech(in));
|
||||
DBG (15, " front endorser stamp: %d\n", get_IN_endorser_f_stamp(in));
|
||||
DBG (15, " front endorser elec: %d\n", get_IN_endorser_f_elec(in));
|
||||
DBG (15, " front endorser mech: %d\n", get_IN_endorser_f_mech(in));
|
||||
DBG (15, " front endorser stamp: %d\n", get_IN_endorser_f_stamp(in));
|
||||
DBG (15, " front endorser elec: %d\n", get_IN_endorser_f_elec(in));
|
||||
|
||||
s->endorser_type_b = get_IN_endorser_b_type(in);
|
||||
DBG (15, " back endorser type: %d\n", s->endorser_type_b);
|
||||
DBG (15, " back endorser type: %d\n", s->endorser_type_b);
|
||||
|
||||
s->endorser_type_f = get_IN_endorser_f_type(in);
|
||||
DBG (15, " back endorser type: %d\n", s->endorser_type_f);
|
||||
DBG (15, " back endorser type: %d\n", s->endorser_type_f);
|
||||
|
||||
/*not all scanners go this far*/
|
||||
if (get_IN_page_length (in) > 0x5f) {
|
||||
if (get_IN_page_length (in) >= 0x67-5) {
|
||||
DBG (15, " connection type: %d\n", get_IN_connection(in));
|
||||
|
||||
DBG (15, " endorser ext: %d\n", get_IN_endorser_type_ext(in));
|
||||
|
@ -1574,12 +1579,62 @@ init_vpd (struct fujitsu *s)
|
|||
DBG (15, " vertical overscan: %d\n", s->os_y_basic);
|
||||
}
|
||||
|
||||
if (get_IN_page_length (in) > 0x68) {
|
||||
/*lots of additional params here*/
|
||||
if (get_IN_page_length (in) >= 0x70-5) {
|
||||
DBG (15, " default bg adf b: %d\n", get_IN_default_bg_adf_b(in));
|
||||
DBG (15, " default bg adf f: %d\n", get_IN_default_bg_adf_f(in));
|
||||
DBG (15, " default bg fb: %d\n", get_IN_default_bg_fb(in));
|
||||
|
||||
DBG (15, " auto color: %d\n", get_IN_auto_color(in));
|
||||
DBG (15, " blank skip: %d\n", get_IN_blank_skip(in));
|
||||
DBG (15, " multi image: %d\n", get_IN_multi_image(in));
|
||||
DBG (15, " f b type indep: %d\n", get_IN_f_b_type_indep(in));
|
||||
DBG (15, " f b res indep: %d\n", get_IN_f_b_res_indep(in));
|
||||
|
||||
DBG (15, " dropout spec: %d\n", get_IN_dropout_spec(in));
|
||||
DBG (15, " dropout non: %d\n", get_IN_dropout_non(in));
|
||||
DBG (15, " dropout white: %d\n", get_IN_dropout_white(in));
|
||||
|
||||
DBG (15, " skew check: %d\n", get_IN_skew_check(in));
|
||||
DBG (15, " new feed roller: %d\n", get_IN_new_fd_roll(in));
|
||||
}
|
||||
|
||||
if (get_IN_page_length (in) > 0x70-5) {
|
||||
|
||||
DBG (15, " paper count: %d\n", get_IN_paper_count(in));
|
||||
DBG (15, " paper number: %d\n", get_IN_paper_number(in));
|
||||
DBG (15, " ext send to: %d\n", get_IN_ext_send_to(in));
|
||||
DBG (15, " staple det: %d\n", get_IN_staple_det(in));
|
||||
DBG (15, " pause host: %d\n", get_IN_pause_host(in));
|
||||
DBG (15, " pause panel: %d\n", get_IN_pause_panel(in));
|
||||
DBG (15, " pause conf: %d\n", get_IN_pause_conf(in));
|
||||
DBG (15, " hq print: %d\n", get_IN_hq_print(in));
|
||||
|
||||
DBG (15, " ext GHS len: %d\n", get_IN_ext_GHS_len(in));
|
||||
|
||||
DBG (15, " smbc func: %d\n", get_IN_smbc_func(in));
|
||||
DBG (15, " imprint chk b: %d\n", get_IN_imprint_chk_b(in));
|
||||
DBG (15, " imprint chk f: %d\n", get_IN_imprint_chk_f(in));
|
||||
DBG (15, " force w bg: %d\n", get_IN_force_w_bg(in));
|
||||
DBG (15, " mf recover lvl: %d\n", get_IN_mf_recover_lvl(in));
|
||||
|
||||
DBG (15, " first read time: %d\n", get_IN_first_read_time(in));
|
||||
DBG (15, " div scanning: %d\n", get_IN_div_scanning(in));
|
||||
DBG (15, " start job: %d\n", get_IN_start_job(in));
|
||||
DBG (15, " lifetime log: %d\n", get_IN_lifetime_log(in));
|
||||
DBG (15, " imff save rest: %d\n", get_IN_imff_save_rest(in));
|
||||
DBG (15, " wide scsi type: %d\n", get_IN_wide_scsi_type(in));
|
||||
|
||||
DBG (15, " lut hybrid crop: %d\n", get_IN_lut_hybrid_crop(in));
|
||||
DBG (15, " over under amt: %d\n", get_IN_over_under_amt(in));
|
||||
DBG (15, " rgb lut: %d\n", get_IN_rgb_lut(in));
|
||||
DBG (15, " num lut dl: %d\n", get_IN_num_lut_dl(in));
|
||||
|
||||
DBG (15, " sync next feed: %d\n", get_IN_sync_next_feed(in));
|
||||
}
|
||||
|
||||
ret = SANE_STATUS_GOOD;
|
||||
}
|
||||
|
||||
/*FIXME no vendor vpd, set some defaults? */
|
||||
else{
|
||||
DBG (5, "init_vpd: Your scanner supports only partial VPD?\n");
|
||||
|
@ -1630,7 +1685,7 @@ init_ms(struct fujitsu *s)
|
|||
set_SCSI_opcode(cmd, MODE_SENSE_code);
|
||||
set_MSEN_xfer_length (cmd, inLen);
|
||||
|
||||
DBG (35, "init_ms: autocolor )\n");
|
||||
DBG (35, "init_ms: autocolor\n");
|
||||
set_MSEN_pc(cmd, MS_pc_autocolor);
|
||||
ret = do_cmd (
|
||||
s, 1, 0,
|
||||
|
@ -6745,6 +6800,11 @@ get_pixelsize(struct fujitsu *s)
|
|||
|
||||
s->params.pixels_per_line = get_PSIZE_num_x(in);
|
||||
|
||||
if(get_PSIZE_req_driv_valid(in)){
|
||||
s->req_driv_crop = get_PSIZE_req_driv_valid(in);
|
||||
s->req_driv_crop = get_PSIZE_req_driv_valid(in);
|
||||
}
|
||||
|
||||
/* stupid trick. 3091/2 require reading extra lines,
|
||||
* because they have a gap between R G and B
|
||||
* we only want to report the shorter value to the frontend */
|
||||
|
|
|
@ -249,6 +249,7 @@ struct fujitsu
|
|||
int has_diffusion;
|
||||
int has_ipc3;
|
||||
int has_rotation;
|
||||
int has_hybrid_crop_deskew;
|
||||
|
||||
int has_comp_MH;
|
||||
int has_comp_MR;
|
||||
|
@ -518,6 +519,11 @@ struct fujitsu
|
|||
|
||||
unsigned char * buffers[2];
|
||||
|
||||
/* --------------------------------------------------------------------- */
|
||||
/*hardware feature bookkeeping*/
|
||||
int req_driv_crop;
|
||||
int req_driv_lut;
|
||||
|
||||
/* --------------------------------------------------------------------- */
|
||||
/* values used by the software enhancment code (deskew, crop, etc) */
|
||||
SANE_Status deskew_stat;
|
||||
|
|
Ładowanie…
Reference in New Issue