1#ifndef FUJITSU_SCSI_H 2#define FUJITSU_SCSI_H 3 4/* 5 * Part of SANE - Scanner Access Now Easy. 6 * 7 * Please see to opening comments in fujitsu.c 8 */ 9 10/****************************************************/ 11 12#define USB_COMMAND_CODE 0x43 13#define USB_COMMAND_LEN 0x1F 14#define USB_COMMAND_OFFSET 0x13 15#define USB_COMMAND_TIME 30000 16#define USB_DATA_TIME 30000 17#define USB_STATUS_CODE 0x53 18#define USB_STATUS_LEN 0x0D 19#define USB_STATUS_OFFSET 0x09 20#define USB_STATUS_TIME 30000 21 22/*static inline void */ 23static void 24setbitfield (unsigned char *pageaddr, int mask, int shift, int val) 25{ 26 *pageaddr = (*pageaddr & ~(mask << shift)) | ((val & mask) << shift); 27} 28 29/* ------------------------------------------------------------------------- */ 30 31/*static inline int */ 32static int 33getbitfield (unsigned char *pageaddr, int mask, int shift) 34{ 35 return ((*pageaddr >> shift) & mask); 36} 37 38/* ------------------------------------------------------------------------- */ 39 40static int 41getnbyte (unsigned char *pnt, int nbytes) 42{ 43 unsigned int result = 0; 44 int i; 45 46#ifdef DEBUG 47 assert (nbytes < 5); 48#endif 49 for (i = 0; i < nbytes; i++) 50 result = (result << 8) | (pnt[i] & 0xff); 51 return result; 52} 53 54/* ------------------------------------------------------------------------- */ 55 56/*static inline void */ 57static void 58putnbyte (unsigned char *pnt, unsigned int value, unsigned int nbytes) 59{ 60 int i; 61 62#ifdef DEBUG 63 assert (nbytes < 5); 64#endif 65 for (i = nbytes - 1; i >= 0; i--) 66 67 { 68 pnt[i] = value & 0xff; 69 value = value >> 8; 70 } 71} 72 73/* ==================================================================== */ 74/* SCSI commands */ 75 76#define set_SCSI_opcode(out, val) out[0]=val 77#define set_SCSI_lun(out, val) setbitfield(out + 1, 7, 5, val) 78 79/* ==================================================================== */ 80/* TEST_UNIT_READY */ 81#define TEST_UNIT_READY_code 0x00 82#define TEST_UNIT_READY_len 6 83 84/* ==================================================================== */ 85/* REQUEST_SENSE */ 86#define REQUEST_SENSE_code 0x03 87#define REQUEST_SENSE_len 6 88 89#define RS_return_size 0x12 90#define set_RS_return_size(icb,val) icb[0x04]=val 91 92/* defines for request sense return block */ 93#define get_RS_information_valid(b) getbitfield(b + 0x00, 1, 7) 94#define get_RS_error_code(b) getbitfield(b + 0x00, 0x7f, 0) 95#define get_RS_filemark(b) getbitfield(b + 0x02, 1, 7) 96#define get_RS_EOM(b) getbitfield(b + 0x02, 1, 6) 97#define get_RS_ILI(b) getbitfield(b + 0x02, 1, 5) 98#define get_RS_sense_key(b) getbitfield(b + 0x02, 0x0f, 0) 99#define get_RS_information(b) getnbyte(b+0x03, 4) /* normally 0 */ 100#define get_RS_additional_length(b) b[0x07] /* always 10 */ 101#define get_RS_ASC(b) b[0x0c] 102#define get_RS_ASCQ(b) b[0x0d] 103#define get_RS_SKSV(b) getbitfield(b+0x0f,1,7) /* valid=0 */ 104#define get_RS_SKSB(b) getnbyte(b+0x0f, 3) 105 106/* when RS is 0x05/0x26 bad bytes listed in sksb */ 107#define get_RS_offending_byte(b) getnbyte(b+0x10, 2) 108 109/* 3091 and 3092 use RS instead of ghs. RS must be 0x00/0x80 */ 110/* in ascq */ 111#define get_RS_adf_open(in) getbitfield(in+0x0d, 1, 7) 112#define get_RS_send_sw(in) getbitfield(in+0x0d, 1, 5) 113#define get_RS_scan_sw(in) getbitfield(in+0x0d, 1, 4) 114#define get_RS_duplex_sw(in) getbitfield(in+0x0d, 1, 2) 115#define get_RS_top(in) getbitfield(in+0x0d, 1, 1) 116#define get_RS_hopper(in) getbitfield(in+0x0d, 1, 0) 117 118/* in sksb */ 119#define get_RS_function(in) getbitfield(in+0x0f, 0x0f, 3) 120#define get_RS_density(in) getbitfield(in+0x0f, 0x07, 0) 121 122/* ==================================================================== */ 123/* INQUIRY */ 124#define INQUIRY_code 0x12 125#define INQUIRY_len 6 126 127#define INQUIRY_std_len 96 128#define INQUIRY_vpd_len 204 /* unlikely maximum value */ 129 130#define set_IN_evpd(icb, val) setbitfield(icb + 1, 1, 0, val) 131#define set_IN_page_code(icb, val) icb[0x02]=val 132#define set_IN_return_size(icb,val) icb[0x04]=val 133#define set_IN_length(out,n) out[0x04]=n-5 134 135#define get_IN_periph_qual(in) getbitfield(in, 0x07, 5) 136#define IN_periph_qual_lun 0x00 137#define IN_periph_qual_nolun 0x03 138#define get_IN_periph_devtype(in) getbitfield(in, 0x1f, 0) 139#define IN_periph_devtype_scanner 0x06 140#define IN_periph_devtype_unknown 0x1f 141#define get_IN_response_format(in) getbitfield(in + 0x03, 0x07, 0) 142#define IN_recognized 0x02 143#define get_IN_vendor(in, buf) snprintf(buf, 0x08 + 1, "%.*s", \ 144 0x08, (char *)in + 0x08) 145#define get_IN_product(in, buf) snprintf(buf, 0x10 + 1, "%.*s", \ 146 0x10, (char *)in + 0x10) 147#define get_IN_version(in, buf) snprintf(buf, 0x04 + 1, "%.*s", \ 148 0x04, (char *)in + 0x20) 149#define get_IN_color_offset(in) getnbyte (in+0x2A, 2) /* offset between colors */ 150 151/* these only in some scanners */ 152#define get_IN_long_gray(in) getbitfield(in+0x2C, 1, 1) 153#define get_IN_long_color(in) getbitfield(in+0x2C, 1, 0) 154 155#define get_IN_emulation(in) getbitfield(in+0x2D, 1, 6) 156#define get_IN_cmp_cga(in) getbitfield(in+0x2D, 1, 5) 157#define get_IN_bg_back(in) getbitfield(in+0x2D, 1, 3) 158#define get_IN_bg_front(in) getbitfield(in+0x2D, 1, 2) 159#define get_IN_bg_fb(in) getbitfield(in+0x2D, 1, 1) 160#define get_IN_has_back(in) getbitfield(in+0x2D, 1, 0) 161 162#define get_IN_duplex_offset(in) getnbyte (in+0x2E, 2) 163 164/* the VPD response */ 165#define get_IN_page_length(in) in[0x04] 166#define get_IN_basic_x_res(in) getnbyte(in + 0x05, 2) 167#define get_IN_basic_y_res(in) getnbyte(in + 0x07, 2) 168#define get_IN_step_x_res(in) getbitfield(in+0x09, 1, 0) 169#define get_IN_step_y_res(in) getbitfield(in+0x09, 1, 4) 170#define get_IN_max_x_res(in) getnbyte(in + 0x0a, 2) 171#define get_IN_max_y_res(in) getnbyte(in + 0x0c, 2) 172#define get_IN_min_x_res(in) getnbyte(in + 0x0e, 2) 173#define get_IN_min_y_res(in) getnbyte(in + 0x10, 2) 174#define get_IN_std_res_200(in) getbitfield(in+ 0x12, 1, 0) 175#define get_IN_std_res_180(in) getbitfield(in+ 0x12, 1, 1) 176#define get_IN_std_res_160(in) getbitfield(in+ 0x12, 1, 2) 177#define get_IN_std_res_150(in) getbitfield(in+ 0x12, 1, 3) 178#define get_IN_std_res_120(in) getbitfield(in+ 0x12, 1, 4) 179#define get_IN_std_res_100(in) getbitfield(in+ 0x12, 1, 5) 180#define get_IN_std_res_75(in) getbitfield(in+ 0x12, 1, 6) 181#define get_IN_std_res_60(in) getbitfield(in+ 0x12, 1, 7) 182#define get_IN_std_res_1200(in) getbitfield(in+ 0x13, 1, 0) 183#define get_IN_std_res_800(in) getbitfield(in+ 0x13, 1, 1) 184#define get_IN_std_res_600(in) getbitfield(in+ 0x13, 1, 2) 185#define get_IN_std_res_480(in) getbitfield(in+ 0x13, 1, 3) 186#define get_IN_std_res_400(in) getbitfield(in+ 0x13, 1, 4) 187#define get_IN_std_res_320(in) getbitfield(in+ 0x13, 1, 5) 188#define get_IN_std_res_300(in) getbitfield(in+ 0x13, 1, 6) 189#define get_IN_std_res_240(in) getbitfield(in+ 0x13, 1, 7) 190#define get_IN_window_width(in) getnbyte(in + 0x14, 4) 191#define get_IN_window_length(in) getnbyte(in + 0x18, 4) 192#define get_IN_overflow(in) getbitfield(in+0x1c, 1, 0) 193#define get_IN_monochrome(in) getbitfield(in+0x1c, 1, 1) 194#define get_IN_half_tone(in) getbitfield(in+0x1c, 1, 2) 195#define get_IN_multilevel(in) getbitfield(in+0x1c, 1, 3) 196#define get_IN_monochrome_rgb(in) getbitfield(in+0x1c, 1, 5) 197#define get_IN_half_tone_rgb(in) getbitfield(in+0x1c, 1, 6) 198#define get_IN_multilevel_rgb(in) getbitfield(in+0x1c, 1, 7) 199 200/* vendor unique section */ 201#define get_IN_adf(in) getbitfield(in+0x20, 1, 7) 202#define get_IN_flatbed(in) getbitfield(in+0x20, 1, 6) 203#define get_IN_transparency(in) getbitfield(in+0x20, 1, 5) 204#define get_IN_duplex(in) getbitfield(in+0x20, 1, 4) 205#define get_IN_endorser_b(in) getbitfield(in+0x20, 1, 3) 206#define get_IN_barcode(in) getbitfield(in+0x20, 1, 2) 207#define get_IN_operator_panel(in) getbitfield(in+0x20, 1, 1) 208#define get_IN_endorser_f(in) getbitfield(in+0x20, 1, 0) 209 210#define get_IN_mp_stacker(in) getbitfield(in+0x21, 1, 7) 211#define get_IN_prepick(in) getbitfield(in+0x21, 1, 6) 212#define get_IN_mf_detect(in) getbitfield(in+0x21, 1, 5) 213#define get_IN_paperprot(in) getbitfield(in+0x21, 1, 4) 214#define get_IN_adbits(in) getbitfield(in+0x21, 0x0f, 0) 215 216#define get_IN_buffer_bytes(in) getnbyte(in + 0x22, 4) 217 218/*supported scsi commands*/ 219#define get_IN_has_cmd_msen10(in) getbitfield(in+0x26, 1, 1) 220#define get_IN_has_cmd_msel10(in) getbitfield(in+0x26, 1, 0) 221 222#define get_IN_has_cmd_lsen(in) getbitfield(in+0x27, 1, 7) 223#define get_IN_has_cmd_lsel(in) getbitfield(in+0x27, 1, 6) 224#define get_IN_has_cmd_change(in) getbitfield(in+0x27, 1, 5) 225#define get_IN_has_cmd_rbuff(in) getbitfield(in+0x27, 1, 4) 226#define get_IN_has_cmd_wbuff(in) getbitfield(in+0x27, 1, 3) 227#define get_IN_has_cmd_cav(in) getbitfield(in+0x27, 1, 2) 228#define get_IN_has_cmd_comp(in) getbitfield(in+0x27, 1, 1) 229#define get_IN_has_cmd_gdbs(in) getbitfield(in+0x27, 1, 0) 230 231#define get_IN_has_cmd_op(in) getbitfield(in+0x28, 1, 7) 232#define get_IN_has_cmd_send(in) getbitfield(in+0x28, 1, 6) 233#define get_IN_has_cmd_read(in) getbitfield(in+0x28, 1, 5) 234#define get_IN_has_cmd_gwin(in) getbitfield(in+0x28, 1, 4) 235#define get_IN_has_cmd_swin(in) getbitfield(in+0x28, 1, 3) 236#define get_IN_has_cmd_sdiag(in) getbitfield(in+0x28, 1, 2) 237#define get_IN_has_cmd_rdiag(in) getbitfield(in+0x28, 1, 1) 238#define get_IN_has_cmd_scan(in) getbitfield(in+0x28, 1, 0) 239 240#define get_IN_has_cmd_msen6(in) getbitfield(in+0x29, 1, 7) 241#define get_IN_has_cmd_copy(in) getbitfield(in+0x29, 1, 6) 242#define get_IN_has_cmd_rel(in) getbitfield(in+0x29, 1, 5) 243#define get_IN_has_cmd_runit(in) getbitfield(in+0x29, 1, 4) 244#define get_IN_has_cmd_msel6(in) getbitfield(in+0x29, 1, 3) 245#define get_IN_has_cmd_inq(in) getbitfield(in+0x29, 1, 2) 246#define get_IN_has_cmd_rs(in) getbitfield(in+0x29, 1, 1) 247#define get_IN_has_cmd_tur(in) getbitfield(in+0x29, 1, 0) 248 249/* more stuff here? (vendor commands) */ 250#define get_IN_has_cmd_subwindow(in) getbitfield(in+0x2b, 1, 0) 251#define get_IN_has_cmd_endorser(in) getbitfield(in+0x2b, 1, 1) 252#define get_IN_has_cmd_hw_status(in) getbitfield(in+0x2b, 1, 2) 253#define get_IN_has_cmd_hw_status_2(in) getbitfield(in+0x2b, 1, 3) 254#define get_IN_has_cmd_hw_status_3(in) getbitfield(in+0x2b, 1, 4) 255#define get_IN_has_cmd_scanner_ctl(in) getbitfield(in+0x31, 1, 1) 256#define get_IN_has_cmd_device_restart(in) getbitfield(in+0x31, 1, 2) 257 258#define get_IN_brightness_steps(in) getnbyte(in+0x52, 1) 259#define get_IN_threshold_steps(in) getnbyte(in+0x53, 1) 260#define get_IN_contrast_steps(in) getnbyte(in+0x54, 1) 261 262#define get_IN_num_dither_internal(in) getbitfield(in+0x56, 15, 4) 263#define get_IN_num_dither_download(in) getbitfield(in+0x56, 15, 0) 264 265#define get_IN_num_gamma_internal(in) getbitfield(in+0x57, 15, 4) 266#define get_IN_num_gamma_download(in) getbitfield(in+0x57, 15, 0) 267 268#define get_IN_ipc_bw_rif(in) getbitfield(in+0x58, 1, 7) 269#define get_IN_ipc_dtc(in) getbitfield(in+0x58, 1, 6) 270#define get_IN_ipc_sdtc(in) getbitfield(in+0x58, 1, 5) 271#define get_IN_ipc_outline_extraction(in) getbitfield(in+0x58, 1, 4) 272#define get_IN_ipc_image_emphasis(in) getbitfield(in+0x58, 1, 3) 273#define get_IN_ipc_auto_separation(in) getbitfield(in+0x58, 1, 2) 274#define get_IN_ipc_mirroring(in) getbitfield(in+0x58, 1, 1) 275#define get_IN_ipc_wl_follow(in) getbitfield(in+0x58, 1, 0) 276 277#define get_IN_ipc_subwindow(in) getbitfield(in+0x59, 1, 7) 278#define get_IN_ipc_diffusion(in) getbitfield(in+0x59, 1, 6) 279#define get_IN_ipc_ipc3(in) getbitfield(in+0x59, 1, 5) 280#define get_IN_ipc_rotation(in) getbitfield(in+0x59, 1, 4) 281#define get_IN_ipc_hybrid_crop_deskew(in) getbitfield(in+0x59, 1, 3) 282#define get_IN_vpd_thru_byte_6f(in) getbitfield(in+0x59, 1, 0) 283 284#define get_IN_compression_MH(in) getbitfield(in+0x5a, 1, 7) 285#define get_IN_compression_MR(in) getbitfield(in+0x5a, 1, 6) 286#define get_IN_compression_MMR(in) getbitfield(in+0x5a, 1, 5) 287#define get_IN_compression_JBIG(in) getbitfield(in+0x5a, 1, 4) 288#define get_IN_compression_JPG_BASE(in) getbitfield(in+0x5a, 1, 3) 289#define get_IN_compression_JPG_EXT(in) getbitfield(in+0x5a, 1, 2) 290#define get_IN_compression_JPG_INDEP(in) getbitfield(in+0x5a, 1, 1) 291 292#define get_IN_compression_JPG_gray(in) getbitfield(in+0x5b, 3, 6) 293#define IN_comp_JPG_gray_unsup 1 294#define IN_comp_JPG_gray_color 2 295#define IN_comp_JPG_gray_gray 3 296#define get_IN_compression_JPG_YUV_422(in) getbitfield(in+0x5b, 1, 0) 297 298#define get_IN_endorser_b_mech(in) getbitfield(in+0x5c, 1, 7) 299#define get_IN_endorser_b_stamp(in) getbitfield(in+0x5c, 1, 6) 300#define get_IN_endorser_b_elec(in) getbitfield(in+0x5c, 1, 5) 301#define get_IN_endorser_max_id(in) getbitfield(in+0x5c, 0x0f, 0) 302 303#define get_IN_endorser_f_mech(in) getbitfield(in+0x5d, 1, 7) 304#define get_IN_endorser_f_stamp(in) getbitfield(in+0x5d, 1, 6) 305#define get_IN_endorser_f_elec(in) getbitfield(in+0x5d, 1, 5) 306#define get_IN_endorser_f_type(in) getbitfield(in+0x5d, 3, 2) 307#define get_IN_endorser_b_type(in) getbitfield(in+0x5d, 3, 0) 308 309#define get_IN_connection(in) getbitfield(in+0x62, 3, 0) 310 311#define get_IN_endorser_type_ext(in) getbitfield(in+0x63, 1, 4) 312#define get_IN_endorser_pre_back(in) getbitfield(in+0x63, 1, 3) 313#define get_IN_endorser_pre_front(in) getbitfield(in+0x63, 1, 2) 314#define get_IN_endorser_post_back(in) getbitfield(in+0x63, 1, 1) 315#define get_IN_endorser_post_front(in) getbitfield(in+0x63, 1, 0) 316 317#define get_IN_x_overscan_size(in) getnbyte(in + 0x64, 2) 318#define get_IN_y_overscan_size(in) getnbyte(in + 0x66, 2) 319 320#define get_IN_default_bg_adf_b(in) getbitfield(in+0x68, 1, 3) 321#define get_IN_default_bg_adf_f(in) getbitfield(in+0x68, 1, 2) 322#define get_IN_default_bg_fb(in) getbitfield(in+0x68, 1, 1) 323 324#define get_IN_auto_color(in) getbitfield(in+0x69, 1, 7) 325#define get_IN_blank_skip(in) getbitfield(in+0x69, 1, 6) 326#define get_IN_multi_image(in) getbitfield(in+0x69, 1, 5) 327#define get_IN_f_b_type_indep(in) getbitfield(in+0x69, 1, 4) 328#define get_IN_f_b_res_indep(in) getbitfield(in+0x69, 1, 3) 329 330#define get_IN_dropout_spec(in) getbitfield(in+0x6a, 1, 7) 331#define get_IN_dropout_non(in) getbitfield(in+0x6a, 1, 7) 332#define get_IN_dropout_white(in) getbitfield(in+0x6a, 1, 7) 333 334#define get_IN_skew_check(in) getbitfield(in+0x6d, 1, 7) 335#define get_IN_new_fd_roll(in) getbitfield(in+0x6d, 1, 6) 336#define get_IN_paper_prot_2(in) getbitfield(in+0x6d, 1, 1) 337 338#define get_IN_evpd_len(in) getnbyte(in + 0x6f, 1) 339 340#define get_IN_paper_count(in) getbitfield(in+0x70, 1, 7) 341#define get_IN_paper_number(in) getbitfield(in+0x70, 1, 6) 342#define get_IN_ext_send_to(in) getbitfield(in+0x70, 1, 5) 343#define get_IN_staple_det(in) getbitfield(in+0x70, 1, 4) 344#define get_IN_pause_host(in) getbitfield(in+0x70, 1, 3) 345#define get_IN_pause_panel(in) getbitfield(in+0x70, 1, 2) 346#define get_IN_pause_conf(in) getbitfield(in+0x70, 1, 1) 347#define get_IN_hq_print(in) getbitfield(in+0x70, 1, 0) 348 349#define get_IN_ext_GHS_len(in) getnbyte(in + 0x71, 1) 350 351#define get_IN_smbc_func(in) getbitfield(in+0x72, 1, 7) 352#define get_IN_imprint_chk_b(in) getbitfield(in+0x72, 1, 6) 353#define get_IN_imprint_chk_f(in) getbitfield(in+0x72, 1, 5) 354#define get_IN_force_w_bg(in) getbitfield(in+0x72, 1, 4) 355#define get_IN_mf_recover_lvl(in) getbitfield(in+0x72, 0x0f, 0) 356 357#define get_IN_first_read_time(in) getbitfield(in+0x73, 1, 7) 358#define get_IN_div_scanning(in) getbitfield(in+0x73, 1, 6) 359#define get_IN_start_job(in) getbitfield(in+0x73, 1, 5) 360#define get_IN_lifetime_log(in) getbitfield(in+0x73, 1, 4) 361#define get_IN_imff_save_rest(in) getbitfield(in+0x73, 1, 3) 362#define get_IN_wide_scsi_type(in) getbitfield(in+0x73, 0x07, 0) 363 364#define get_IN_lut_hybrid_crop(in) getbitfield(in+0x74, 1, 7) 365#define get_IN_over_under_amt(in) getbitfield(in+0x74, 1, 6) 366#define get_IN_rgb_lut(in) getbitfield(in+0x74, 1, 5) 367#define get_IN_num_lut_dl(in) getbitfield(in+0x74, 0x0f, 0) 368 369/*byte 75 is poorly documented*/ 370 371#define get_IN_erp_lot6_supp(in) getbitfield(in+0x76, 1, 7) 372#define get_IN_mode_change_jpeg(in) getbitfield(in+0x76, 1, 5) 373#define get_IN_mode_change_irdc(in) getbitfield(in+0x76, 1, 4) 374#define get_IN_mode_change_iomf(in) getbitfield(in+0x76, 1, 3) 375#define get_IN_sync_next_feed(in) getbitfield(in+0x76, 0x07, 0) 376 377#define get_IN_imp_func3(in) getbitfield(in+0x77, 1, 7) 378 379#define get_IN_reset_ms(in) getbitfield(in+0x78, 1, 7) 380#define get_IN_read_size(in) getbitfield(in+0x78, 1, 6) 381#define get_IN_start_end_ms(in) getbitfield(in+0x78, 1, 5) 382 383#define get_IN_battery(in) getbitfield(in+0x79, 1, 7) 384#define get_IN_battery_save(in) getbitfield(in+0x79, 1, 6) 385#define get_IN_op_reverse(in) getbitfield(in+0x79, 1, 1) 386 387#define get_IN_op_halt(in) getbitfield(in+0x7a, 1, 7) 388 389#define get_IN_return_path(in) getbitfield(in+0x7c, 1, 7) 390#define get_IN_energy_star3(in) getbitfield(in+0x7c, 1, 6) 391 392/* ==================================================================== */ 393/* page codes used by mode_sense and mode_select */ 394#define MS_pc_unk 0x2c /* Used by iX500 */ 395#define MS_pc_patch 0x2e /* Patch code scanning */ 396#define MS_pc_counter 0x2f /* Page number and counter reset */ 397#define MS_pc_autocolor 0x32 /* Automatic color detection */ 398#define MS_pc_prepick 0x33 /* Prepick next adf page */ 399#define MS_pc_sleep 0x34 /* Sleep mode */ 400#define MS_pc_duplex 0x35 /* ADF duplex transfer mode */ 401#define MS_pc_rand 0x36 /* All sorts of device controls */ 402#define MS_pc_bg 0x37 /* Backing switch control */ 403#define MS_pc_df 0x38 /* Double feed detection */ 404#define MS_pc_dropout 0x39 /* Drop out color */ 405#define MS_pc_buff 0x3a /* Scan buffer control */ 406#define MS_pc_auto 0x3c /* Auto paper size detection */ 407#define MS_pc_lamp 0x3d /* Lamp light timer set */ 408#define MS_pc_jobsep 0x3e /* Detect job separation sheet */ 409#define MS_pc_all 0x3f /* Only used with mode_sense */ 410 411/* ==================================================================== */ 412/* MODE_SELECT */ 413#define MODE_SELECT_code 0x15 414#define MODE_SELECT_len 6 415 416#define set_MSEL_pf(sb, val) setbitfield(sb + 1, 1, 4, val) 417#define set_MSEL_xferlen(sb, val) sb[0x04] = (unsigned char)val 418 419/* MS payloads are combined 4 byte header and 8 or 10 byte page 420 * there is also 'descriptor block' & 'vendor-specific block' 421 * but fujitsu seems not to use these */ 422/* 10 byte page only used by dropout? */ 423#define MSEL_header_len 4 424#define MSEL_data_min_len 8 425#define MSEL_data_max_len 10 426 427#define set_MSEL_pc(sb, val) sb[0x00]=val 428#define set_MSEL_page_len(sb, val) sb[0x01]=val 429 430#define set_MSEL_sleep_mode(sb, val) sb[0x02]=val 431 432#define set_MSEL_transfer_mode(sb, val) setbitfield(sb + 0x02, 0x01, 0, val) 433 434#define set_MSEL_bg_enable(sb, val) setbitfield(sb + 2, 1, 7, val) 435#define set_MSEL_bg_front(sb, val) setbitfield(sb + 2, 1, 5, val) 436#define set_MSEL_bg_back(sb, val) setbitfield(sb + 2, 1, 4, val) 437#define set_MSEL_bg_fb(sb, val) setbitfield(sb + 2, 1, 3, val) 438 439#define set_MSEL_df_enable(sb, val) setbitfield(sb + 2, 1, 7, val) 440#define set_MSEL_df_continue(sb, val) setbitfield(sb + 2, 1, 6, val) 441#define set_MSEL_df_skew(sb, val) setbitfield(sb + 2, 1, 5, val) 442#define set_MSEL_df_thickness(sb, val) setbitfield(sb + 2, 1, 4, val) 443#define set_MSEL_df_length(sb, val) setbitfield(sb + 2, 1, 3, val) 444#define set_MSEL_df_diff(sb, val) setbitfield(sb + 2, 3, 0, val) 445#define MSEL_df_diff_DEFAULT 0 446#define MSEL_df_diff_10MM 1 447#define MSEL_df_diff_15MM 2 448#define MSEL_df_diff_20MM 3 449#define set_MSEL_df_paperprot(sb, val) setbitfield(sb + 3, 3, 6, val) 450#define set_MSEL_df_stapledet(sb, val) setbitfield(sb + 3, 3, 4, val) 451#define set_MSEL_df_recovery(sb, val) setbitfield(sb + 3, 3, 2, val) 452#define set_MSEL_df_paperprot2(sb, val) setbitfield(sb + 5, 3, 6, val) 453 454#define set_MSEL_dropout_front(sb, val) setbitfield(sb + 0x02, 0x0f, 0, val) 455#define set_MSEL_dropout_back(sb, val) setbitfield(sb + 0x02, 0x0f, 4, val) 456#define MSEL_dropout_DEFAULT 0 457#define MSEL_dropout_GREEN 8 458#define MSEL_dropout_RED 9 459#define MSEL_dropout_BLUE 11 460#define MSEL_dropout_CUSTOM 12 461 462#define set_MSEL_buff_mode(sb, val) setbitfield(sb + 0x02, 0x03, 6, val) 463#define set_MSEL_buff_clear(sb, val) setbitfield(sb + 0x03, 0x03, 6, val) 464 465#define set_MSEL_prepick(sb, val) setbitfield(sb + 0x02, 0x03, 6, val) 466 467/*more automatic stuff with this one...*/ 468#define set_MSEL_awd(sb, val) setbitfield(sb + 0x02, 0x01, 7, val) 469#define set_MSEL_w_wfill(sb, val) setbitfield(sb + 0x02, 0x01, 6, val) 470#define set_MSEL_req_driv_lut(sb, val) setbitfield(sb + 0x02, 0x01, 1, val) 471#define set_MSEL_req_driv_crop(sb, val) setbitfield(sb + 0x02, 0x01, 0, val) 472 473#define set_MSEL_ald(sb, val) setbitfield(sb + 0x03, 0x01, 7, val) 474#define set_MSEL_l_wfill(sb, val) setbitfield(sb + 0x03, 0x01, 6, val) 475 476#define set_MSEL_deskew(sb, val) setbitfield(sb + 0x04, 0x01, 7, val) 477 478#define set_MSEL_overscan(sb, val) setbitfield(sb + 0x05, 0x03, 6, val) 479#define set_MSEL_overcrop(sb, val) setbitfield(sb + 0x05, 0x01, 5, val) 480#define set_MSEL_undercrop(sb, val) setbitfield(sb + 0x05, 0x01, 4, val) 481 482#define set_MSEL_over_under_amt(sb, val) sb[0x06]=val 483 484/*buffer, prepick, overscan and df use these*/ 485#define MSEL_DEFAULT 0 486#define MSEL_OFF 2 487#define MSEL_ON 3 488 489/* ==================================================================== */ 490/* RESERVE_UNIT */ 491#define RESERVE_UNIT_code 0x16 492#define RESERVE_UNIT_len 6 493 494/* ==================================================================== */ 495/* RELEASE_UNIT */ 496 497#define RELEASE_UNIT_code 0x17 498#define RELEASE_UNIT_len 6 499 500/* ==================================================================== */ 501/* MODE_SENSE */ 502#define MODE_SENSE_code 0x1a 503#define MODE_SENSE_len 6 504 505#define MODE_SENSE_data_len 0x14 506 507#define set_MSEN_DBD(b, val) setbitfield(b, 0x01, 3, (val?1:0)) 508#define set_MSEN_pc(sb, val) setbitfield(sb + 0x02, 0x3f, 0, val) 509#define set_MSEN_xfer_length(sb, val) sb[0x04] = (unsigned char)val 510#define get_MSEN_MUD(b) getnbyte(b+(0x04+((int)*(b+0x3)))+0x4,2) 511 512/* ==================================================================== */ 513/* SCAN */ 514#define SCAN_code 0x1b 515#define SCAN_len 6 516 517#define set_SC_xfer_length(sb, val) sb[0x04] = (unsigned char)val 518 519/* ==================================================================== */ 520/* READ_DIAGNOSTIC */ 521#define READ_DIAGNOSTIC_code 0x1c 522#define READ_DIAGNOSTIC_len 6 523 524#define set_RD_xferlen(in, len) putnbyte(in + 3, len, 2) 525 526/* for 'FIRST READ DATE \0YMD' */ 527#define RD_frd_len 10 528#define get_RD_date_status(in) in[0] 529#define RD_date_stored 0 530#define RD_date_not_stored 0xff 531 532/* for 'GET FIRST DATE ' */ 533#define RD_gfd_len 10 534#define get_RD_date_year(in) in[1] 535#define get_RD_date_month(in) in[2] 536#define get_RD_date_date(in) in[3] 537 538/* for 'GET DEVICE ID ' */ 539#define RD_gdi_len 10 540#define get_RD_id_serial(in) getnbyte (in, 4) 541 542/* ==================================================================== */ 543/* SEND_DIAGNOSTIC */ 544#define SEND_DIAGNOSTIC_code 0x1d 545#define SEND_DIAGNOSTIC_len 6 546 547#define set_SD_slftst(in, val) setbitfield(in + 1, 1, 2, val) 548#define set_SD_xferlen(in, len) putnbyte(in + 3, len, 2) 549 550#define SD_frd_string "FIRST READ DATE \0YMD" 551#define SD_frd_len 20 552#define set_SD_frd_year(in, b) putnbyte(in + 0x11, b, 1) 553#define set_SD_frd_month(in, b) putnbyte(in + 0x12, b, 1) 554#define set_SD_frd_date(in, b) putnbyte(in + 0x13, b, 1) 555 556#define SD_gfd_string "GET FIRST DATE " 557#define SD_gfd_len 16 558 559#define SD_gdi_string "GET DEVICE ID " 560#define SD_gdi_len 16 561 562#define SD_preread_string "SET PRE READMODE" 563#define SD_preread_stringlen 16 564#define SD_preread_len 32 565#define set_SD_preread_xres(in, b) putnbyte(in + 0x10, b, 2) 566#define set_SD_preread_yres(in, b) putnbyte(in + 0x12, b, 2) 567#define set_SD_preread_paper_width(sb, val) putnbyte(sb + 0x14, val, 4) 568#define set_SD_preread_paper_length(sb, val) putnbyte(sb + 0x18, val, 4) 569#define set_SD_preread_composition(sb, val) putnbyte(sb + 0x1c, val, 1) 570#define set_SD_preread_escan(sb, val) putnbyte(sb + 0x1d, val, 1) 571 572#define SD_powoff_string "SET POWOFF TIME " 573#define SD_powoff_stringlen 16 574#define SD_powoff_len 18 575#define set_SD_powoff_disable(in, val) setbitfield(in + 16, 1, 7, val) 576#define set_SD_powoff_interval(in, val) setbitfield(in + 16, 0x7f, 0, val) 577#define set_SD_powoff_notify(sb, val) putnbyte(sb + 0x17, val, 1) 578 579/* ==================================================================== */ 580/* SET_WINDOW */ 581#define SET_WINDOW_code 0x24 582#define SET_WINDOW_len 10 583 584#define set_SW_xferlen(sb, len) putnbyte(sb + 0x06, len, 3) 585 586#define SW_header_len 8 587#define SW_desc_len 64 588 589/* ==================================================================== */ 590/* GET_WINDOW */ 591#define GET_WINDOW_code 0x25 592#define GET_WINDOW_len 0 593 594/* ==================================================================== */ 595/* READ */ 596#define READ_code 0x28 597#define READ_len 10 598 599#define set_R_datatype_code(sb, val) sb[0x02] = val 600#define R_datatype_imagedata 0x00 601#define R_datatype_pixelsize 0x80 602#define R_datatype_papersize 0x81 603#define R_datatype_effective_id 0x82 604#define set_R_window_id(sb, val) sb[0x05] = val 605#define set_R_xfer_length(sb, val) putnbyte(sb + 0x06, val, 3) 606 607#define R_PSIZE_len 0x20 608#define get_PSIZE_num_x(in) getnbyte(in + 0x00, 4) 609#define get_PSIZE_num_y(in) getnbyte(in + 0x04, 4) 610#define get_PSIZE_paper_w(in) getnbyte(in + 0x08, 4) 611#define get_PSIZE_paper_l(in) getnbyte(in + 0x0C, 4) 612#define get_PSIZE_req_driv_crop(in) getbitfield(in + 0x10, 1, 7) 613#define get_PSIZE_req_driv_lut(in) getbitfield(in + 0x10, 1, 6) 614#define get_PSIZE_req_driv_valid(in) getbitfield(in + 0x10, 1, 0) 615 616#define R_PAPER_len 0x08 617#define get_PAPER_job_sep(in) getnbyte(in + 0x02, 1) 618#define get_PAPER_paper_w(in) getnbyte(in + 0x03, 1) 619 620/* ==================================================================== */ 621/* SEND */ 622#define SEND_code 0x2a 623#define SEND_len 10 624 625#define set_S_xfer_datatype(sb, val) sb[0x02] = (unsigned char)val 626#define S_datatype_halftone_mask 0x02 627#define S_datatype_gamma_function 0x03 628#define S_datatype_lut_data 0x83 629#define S_datatype_lut_dropout 0x84 630#define S_datatype_jpg_q_table 0x88 631#define S_datatype_endorser_data 0x90 632#define S_datatype_sendto_name 0xa0 633/*#define S_EX_datatype_lut 0x01 634#define S_EX_datatype_shading_data 0xa0 635#define S_user_reg_gamma 0xc0 636#define S_device_internal_info 0x03 637#define set_S_datatype_qual_upper(sb, val) sb[0x04] = (unsigned char)val 638#define S_DQ_none 0x00 639#define S_DQ_Rcomp 0x06 640#define S_DQ_Gcomp 0x07 641#define S_DQ_Bcomp 0x08 642#define S_DQ_Reg1 0x01 643#define S_DQ_Reg2 0x02 644#define S_DQ_Reg3 0x03*/ 645#define set_S_xfer_id(sb, val) putnbyte(sb + 4, val, 2) 646#define set_S_xfer_length(sb, val) putnbyte(sb + 6, val, 3) 647 648/*lut*/ 649#define S_lut_header_len 0x0a 650#define set_S_lut_order(sb, val) putnbyte(sb + 2, val, 1) 651#define S_lut_order_single 0x10 652#define set_S_lut_ssize(sb, val) putnbyte(sb + 4, val, 2) 653#define set_S_lut_dsize(sb, val) putnbyte(sb + 6, val, 2) 654#define S_lut_data_min_len 256 655#define S_lut_data_max_len 1024 656 657/*q-table*/ 658#define S_q_table_header_len 0x0a 659#define S_q_table_y_len 0x40 660#define set_S_q_table_y_len(sb, val) putnbyte(sb + 4, val, 2) 661#define S_q_table_uv_len 0x40 662#define set_S_q_table_uv_len(sb, val) putnbyte(sb + 6, val, 2) 663 664/*endorser*/ 665#define S_e_data_min_len 18 /*minimum 18 bytes no string bytes*/ 666#define S_e_data_max_len 98 /*maximum 18 bytes plus 80 string bytes*/ 667 668#define set_S_endorser_data_id(sb, val) sb[0] = val 669 670#define set_S_endorser_stamp(sb, val) setbitfield(sb + 0x01, 1, 7, val) 671#define set_S_endorser_elec(sb, val) setbitfield(sb + 0x01, 1, 6, val) 672#define set_S_endorser_decr(sb, val) setbitfield(sb + 0x01, 1, 5, val) 673#define S_e_decr_inc 0 674#define S_e_decr_dec 1 675#define set_S_endorser_lap24(sb, val) setbitfield(sb + 0x01, 1, 4, val) 676#define S_e_lap_24bit 1 677#define S_e_lap_16bit 0 678#define set_S_endorser_ctstep(sb, val) setbitfield(sb + 0x01, 0x03, 0, val) 679 680#define set_S_endorser_ulx(sb, val) putnbyte(sb + 0x02, val, 4) 681#define set_S_endorser_uly(sb, val) putnbyte(sb + 0x06, val, 4) 682 683#define set_S_endorser_font(sb, val) sb[0xa] = val 684#define S_e_font_horiz 0 685#define S_e_font_vert 1 686#define S_e_font_horiz_narrow 2 687#define set_S_endorser_size(sb, val) sb[0xb] = val 688 689#define set_S_endorser_revs(sb, val) setbitfield(sb + 0x0c, 0x01, 7, val) 690#define S_e_revs_fwd 0 691#define S_e_revs_rev 1 692#define set_S_endorser_bold(sb, val) setbitfield(sb + 0x0c, 0x01, 2, val) 693#define set_S_endorser_dirs(sb, val) setbitfield(sb + 0x0c, 0x03, 0, val) 694#define S_e_dir_left_right 0 695#define S_e_dir_top_bottom 1 696#define S_e_dir_right_left 2 697#define S_e_dir_bottom_top 3 698 699#define set_S_endorser_string_length(sb, len) sb[0x11] = len 700#define set_S_endorser_string(sb,val,len) memcpy(sb+0x12,val,(size_t)len) 701 702/* ==================================================================== */ 703/* OBJECT_POSITION */ 704#define OBJECT_POSITION_code 0x31 705#define OBJECT_POSITION_len 10 706 707#define set_OP_action(b,val) setbitfield(b+0x01, 0x07, 0, val) 708#define OP_Discharge 0x00 709#define OP_Feed 0x01 710#define OP_Halt 0x04 711 712/* ==================================================================== */ 713/* SET_SUBWINDOW */ 714#define SET_SUBWINDOW_code 0xc0 715#define SET_SUBWINDOW_len 0 716 717/* ==================================================================== */ 718/* ENDORSER */ 719#define ENDORSER_code 0xc1 720#define ENDORSER_len 10 721 722#define set_E_xferlen(sb, val) putnbyte(sb + 0x7, val, 2) 723 724/*endorser data*/ 725#define ED_min_len 4 726#define ED_max_len 6 727 728#define set_ED_endorser_data_id(sb, val) sb[0] = val 729 730/* enable/disable endorser printing*/ 731#define set_ED_stop(sb, val) setbitfield(sb + 0x01, 1, 7, val) 732#define ED_start 0 733#define ED_stop 1 734/* specifies the side of a document to be printed */ 735#define set_ED_side(sb, val) setbitfield(sb + 0x01, 1, 6, val) 736#define ED_front 0 737#define ED_back 1 738 739/* format of the counter 16/24 bit*/ 740#define set_ED_lap24(sb, val) setbitfield(sb + 0x01, 1, 5, val) 741#define ED_lap_16bit 0 742#define ED_lap_24bit 1 743 744/* initial count */ 745#define set_ED_initial_count_16(sb, val) putnbyte(sb + 0x02, val, 2) 746#define set_ED_initial_count_24(sb, val) putnbyte(sb + 0x03, val, 3) 747 748/* ==================================================================== */ 749/* GET_HW_STATUS*/ 750#define GET_HW_STATUS_code 0xc2 751#define GET_HW_STATUS_len 10 752 753#define set_GHS_allocation_length(sb, len) putnbyte(sb + 0x07, len, 2) 754 755#define GHS_data_len 12 756 757#define get_GHS_top(in) getbitfield(in+0x02, 1, 7) 758#define get_GHS_fedalm(in) getbitfield(in+0x02, 1, 5) 759#define get_GHS_adjalm(in) getbitfield(in+0x02, 1, 4) 760#define get_GHS_A3(in) getbitfield(in+0x02, 1, 3) 761#define get_GHS_B4(in) getbitfield(in+0x02, 1, 2) 762#define get_GHS_A4(in) getbitfield(in+0x02, 1, 1) 763#define get_GHS_B5(in) getbitfield(in+0x02, 1, 0) 764 765#define get_GHS_hopper(in) !getbitfield(in+0x03, 1, 7) 766#define get_GHS_omr(in) getbitfield(in+0x03, 1, 6) 767#define get_GHS_adf_open(in) getbitfield(in+0x03, 1, 5) 768#define get_GHS_imp_open(in) getbitfield(in+0x03, 1, 4) 769#define get_GHS_fb_open(in) getbitfield(in+0x03, 1, 3) 770#define get_GHS_paper_end(in) getbitfield(in+0x03, 1, 2) 771#define get_GHS_fb_on(in) getbitfield(in+0x03, 1, 1) 772#define get_GHS_exit(in) getbitfield(in+0x03, 1, 0) 773 774#define get_GHS_sleep(in) getbitfield(in+0x04, 1, 7) 775#define get_GHS_clean(in) getbitfield(in+0x04, 1, 6) 776#define get_GHS_scan_sw_long(in) getbitfield(in+0x04, 1, 5) 777#define get_GHS_hpos(in) getbitfield(in+0x04, 1, 4) 778#define get_GHS_send_sw(in) getbitfield(in+0x04, 1, 2) 779#define get_GHS_manual_feed(in) getbitfield(in+0x04, 1, 1) 780#define get_GHS_scan_sw(in) getbitfield(in+0x04, 1, 0) 781 782#define get_GHS_picalm(in) getbitfield(in+0x05, 1, 7) 783#define get_GHS_padalm(in) getbitfield(in+0x05, 1, 6) 784#define get_GHS_brkalm(in) getbitfield(in+0x05, 1, 5) 785#define get_GHS_sepalm(in) getbitfield(in+0x05, 1, 4) 786#define get_GHS_function(in) getbitfield(in+0x05, 0x0f, 0) 787 788#define get_GHS_ink_empty(in) getbitfield(in+0x06, 1, 7) 789#define get_GHS_consume(in) getbitfield(in+0x06, 1, 6) 790#define get_GHS_overskew(in) getbitfield(in+0x06, 1, 5) 791#define get_GHS_overthick(in) getbitfield(in+0x06, 1, 4) 792#define get_GHS_plen(in) getbitfield(in+0x06, 1, 3) 793#define get_GHS_ink_side(in) getbitfield(in+0x06, 1, 2) 794#define get_GHS_mf_to(in) getbitfield(in+0x06, 1, 1) 795#define get_GHS_double_feed(in) getbitfield(in+0x06, 1, 0) 796 797#define get_GHS_error_code(in) in[0x07] 798 799#define get_GHS_skew_angle(in) in[0x09] 800 801#define get_GHS_ink_remain(in) in[0x0a] 802 803#define get_GHS_lang_code(in) getnbyte(in+0x0c, 2) 804 805#define get_GHS_adjalm_fed(in) getbitfield(in+0x0e, 1, 7) 806#define get_GHS_non_sep(in) getbitfield(in+0x0e, 1, 4) 807#define get_GHS_ext_sendto(in) getbitfield(in+0x0e, 1, 2) 808#define get_GHS_rq_hldimg(in) getbitfield(in+0x0e, 1, 1) 809#define get_GHS_pacnt(in) getbitfield(in+0x0e, 1, 0) 810 811#define get_GHS_wifi_sw(in) getbitfield(in+0x10, 1, 7) 812#define get_GHS_w_use(in) getbitfield(in+0x10, 1, 6) 813#define get_GHS_w_use2(in) getbitfield(in+0x10, 1, 5) 814#define get_GHS_w_use3(in) getbitfield(in+0x10, 1, 4) 815#define get_GHS_w_use4(in) getbitfield(in+0x10, 1, 3) 816 817#define get_GHS_battery(in) getbitfield(in+0x11, 1, 7) 818#define get_GHS_btr_charge(in) getbitfield(in+0x11, 1, 6) 819#define get_GHS_btr_chg_tmp_stp(in) getbitfield(in+0x11, 1, 5) 820#define get_GHS_ibtr_ene_sav(in) getbitfield(in+0x11, 1, 4) 821#define get_GHS_fngr_caut(in) getbitfield(in+0x11, 1, 2) 822#define get_GHS_trnpg_l(in) getbitfield(in+0x11, 1, 1) 823#define get_GHS_trnpg_r(in) getbitfield(in+0x11, 1, 0) 824 825#define get_GHS_btr_power(in) in[0x12] 826 827/* ==================================================================== */ 828/* SCANNER_CONTROL */ 829#define SCANNER_CONTROL_code 0xf1 830#define SCANNER_CONTROL_len 10 831 832#define set_SC_ric(icb, val) setbitfield(icb + 1, 1, 4, val) 833#define set_SC_function_1(icb, val) setbitfield(icb + 1, 0xf, 0, val) 834#define set_SC_function_2(icb, val) icb[2] = (val >> 4) 835#define SC_function_adf 0x00 836#define SC_function_fb 0x01 837#define SC_function_fb_hs 0x02 838#define SC_function_lamp_off 0x03 839#define SC_function_cancel 0x04 840#define SC_function_lamp_on 0x05 841#define SC_function_lamp_normal 0x06 842#define SC_function_lamp_saving 0x07 843#define SC_function_panel 0x08 844#define SC_function_scan_complete 0x09 845#define SC_function_eject_complete 0x0a 846#define SC_function_manual_feed 0x0c 847#define SC_function_mfeed 0x0f 848#define SC_function_continuous 0x1f 849#define SC_function_rpath 0x2f 850 851/* used with SC_function_panel */ 852#define set_SC_led_eb(icb, val) setbitfield(icb + 5, 1, 7, val) 853#define set_SC_led(icb, val) setbitfield(icb + 5, 1, 6, val) 854#define set_SC_fcno_eb(icb, val) setbitfield(icb + 5, 1, 4, val) 855#define set_SC_fcno(icb, val) setbitfield(icb + 5, 0xf, 0, val) 856 857#define set_SC_ric_dtq(sb, val) sb[2] = val 858#define set_SC_ric_len(sb, val) putnbyte(sb + 0x06, val, 3) 859 860/* ==================================================================== */ 861/* window descriptor macros for SET_WINDOW and GET_WINDOW */ 862 863#define set_WPDB_wdblen(sb, len) putnbyte(sb + 0x06, len, 2) 864 865/* ==================================================================== */ 866 867 /* 0x00 - Window Identifier 868 * 0x00 for 3096 869 * 0x00 (front) or 0x80 (back) for 3091 870 */ 871#define set_WD_wid(sb, val) sb[0] = val 872#define WD_wid_front 0x00 873#define WD_wid_back 0x80 874 875 /* 0x01 - Reserved (bits 7-1), AUTO (bit 0) 876 * Use 0x00 for 3091, 3096 877 */ 878#define set_WD_auto(sb, val) setbitfield(sb + 0x01, 1, 0, val) 879#define get_WD_auto(sb) getbitfield(sb + 0x01, 1, 0) 880 881 /* 0x02,0x03 - X resolution in dpi 882 * 3091 supports 50-300 in steps of 1 883 * 3096 suppors 200,240,300,400; or 100-1600 in steps of 4 884 * if image processiong option installed 885 */ 886#define set_WD_Xres(sb, val) putnbyte(sb + 0x02, val, 2) 887#define get_WD_Xres(sb) getnbyte(sb + 0x02, 2) 888 889 /* 0x04,0x05 - X resolution in dpi 890 * 3091 supports 50-600 in steps of 1; 75,150,300,600 only 891 * in color mode 892 * 3096 suppors 200,240,300,400; or 100-1600 in steps of 4 893 * if image processiong option installed 894 */ 895#define set_WD_Yres(sb, val) putnbyte(sb + 0x04, val, 2) 896#define get_WD_Yres(sb) getnbyte(sb + 0x04, 2) 897 898 /* 0x06-0x09 - Upper Left X in 1/1200 inch 899 */ 900#define set_WD_ULX(sb, val) putnbyte(sb + 0x06, val, 4) 901#define get_WD_ULX(sb) getnbyte(sb + 0x06, 4) 902 903 /* 0x0a-0x0d - Upper Left Y in 1/1200 inch 904 */ 905#define set_WD_ULY(sb, val) putnbyte(sb + 0x0a, val, 4) 906#define get_WD_ULY(sb) getnbyte(sb + 0x0a, 4) 907 908 /* 0x0e-0x11 - Width in 1/1200 inch 909 * 3091 left+width max 10200 910 * 3096 left+width max 14592 911 * also limited to page size, see bytes 0x35ff. 912 */ 913#define set_WD_width(sb, val) putnbyte(sb + 0x0e, val, 4) 914#define get_WD_width(sb) getnbyte(sb + 0x0e, 4) 915 916 /* 0x12-0x15 - Height in 1/1200 inch 917 * 3091 top+height max 16832 918 * 3096 top+height max 20736, also if left+width>13199, 919 * top+height has to be less than 19843 920 */ 921#define set_WD_length(sb, val) putnbyte(sb + 0x12, val, 4) 922#define get_WD_length(sb) getnbyte(sb + 0x12, 4) 923 924 /* 0x16 - Brightness 925 * 3091 always use 0x00 926 * 3096 if in halftone mode, 8 levels supported (01-1F, 20-3F, 927 ..., E0-FF) 928 * use 0x00 for user defined dither pattern 929 */ 930#define set_WD_brightness(sb, val) sb[0x16] = val 931#define get_WD_brightness(sb) sb[0x16] 932 933 /* 0x17 - Threshold 934 * 3091 0x00 = use floating slice; 0x01..0xff fixed slice 935 * with 0x01=brightest, 0x80=medium, 0xff=darkest; 936 * only effective for line art mode. 937 * 3096 0x00 = use "simplified dynamic threshold", otherwise 938 * same as above but resolution is only 64 steps. 939 */ 940#define set_WD_threshold(sb, val) sb[0x17] = val 941#define get_WD_threshold(sb) sb[0x17] 942 943 /* 0x18 - Contrast 944 * 3091 - not supported, always use 0x00 945 * 3096 - the same 946 */ 947#define set_WD_contrast(sb, val) sb[0x18] = val 948#define get_WD_contrast(sb) sb[0x18] 949 950 /* 0x19 - Image Composition (color mode) 951 * 3091 - use 0x00 for line art, 0x01 for halftone, 952 * 0x02 for grayscale, 0x05 for color. 953 * 3096 - same but minus color. 954 */ 955#define set_WD_composition(sb, val) sb[0x19] = val 956#define get_WD_composition(sb) sb[0x19] 957#define WD_comp_LA 0 958#define WD_comp_HT 1 959#define WD_comp_GS 2 960#define WD_comp_CL 3 961#define WD_comp_CH 4 962#define WD_comp_CG 5 963 964 /* 0x1a - Depth 965 * 3091 - use 0x01 for b/w or 0x08 for gray/color 966 * 3096 - use 0x01 for b/w or 0x08 for gray 967 */ 968#define set_WD_bitsperpixel(sb, val) sb[0x1a] = val 969#define get_WD_bitsperpixel(sb) sb[0x1a] 970 971 /* 0x1b,0x1c - Halftone Pattern 972 * 3091 byte 1b: 00h default(=dither), 01h dither, 973 * 02h error dispersion 974 * 1c: 00 dark images, 01h dark text+images, 975 * 02h light images, 976 * 03h light text+images, 80h download pattern 977 * 3096: 1b unused; 1c bit 7=1: use downloadable pattern, 978 * bit 7=0: use builtin pattern; rest of byte 1b denotes 979 * pattern number, three builtin and five downloadable 980 * supported; higher numbers = error. 981 */ 982#define set_WD_ht_type(sb, val) sb[0x1b] = val 983#define get_WD_ht_type(sb) sb[0x1b] 984#define WD_ht_type_DEFAULT 0 985#define WD_ht_type_DITHER 1 986#define WD_ht_type_DIFFUSION 2 987 988#define set_WD_ht_pattern(sb, val) sb[0x1c] = val 989#define get_WD_ht_pattern(sb) sb[0x1c] 990 991 /* 0x1d - Reverse image, padding type 992 * 3091: bit 7=1: reverse black&white 993 * bits 0-2: padding type, must be 0 994 * 3096: the same; bit 7 must be set for gray and not 995 * set for b/w. 996 */ 997#define set_WD_rif(sb, val) setbitfield(sb + 0x1d, 1, 7, val) 998#define get_WD_rif(sb) getbitfield(sb + 0x1d, 1, 7) 999 1000 /* 0x1e,0x1f - Bit ordering 1001 * 3091 not supported, use 0x00 1002 * 3096 not supported, use 0x00 1003 */ 1004#define set_WD_bitorder(sb, val) putnbyte(sb + 0x1e, val, 2) 1005#define get_WD_bitorder(sb) getnbyte(sb + 0x1e, 2) 1006 1007 /* 0x20 - compression type 1008 * not supported on smaller models, use 0x00 1009 */ 1010#define set_WD_compress_type(sb, val) sb[0x20] = val 1011#define get_WD_compress_type(sb) sb[0x20] 1012#define WD_cmp_NONE 0 1013#define WD_cmp_MH 1 1014#define WD_cmp_MR 2 1015#define WD_cmp_MMR 3 1016#define WD_cmp_JBIG 0x80 1017#define WD_cmp_JPG1 0x81 1018#define WD_cmp_JPG2 0x82 1019#define WD_cmp_JPG3 0x83 1020 1021 1022 /* 0x21 - compression argument 1023 * specify "k" parameter with MR compress, 1024 * or with JPEG- Q param, 0-7 1025 */ 1026#define set_WD_compress_arg(sb, val) sb[0x21] = val 1027#define get_WD_compress_arg(sb) sb[0x21] 1028 1029 /* 0x22-0x27 - reserved */ 1030 1031 /* 0x28 - vendor unique id code, decides meaning of remaining bytes 1032 * 0xc1 = color mode (fi-series) 1033 * 0xc0 = weird mode (M3091 and M3092) 1034 * 0x00 = mono mode (other M-series and fi-series) 1035 */ 1036#define set_WD_vendor_id_code(sb, val) sb[0x28] = val 1037#define get_WD_vendor_id_code(sb) sb[0x28] 1038#define WD_VUID_MONO 0x00 1039#define WD_VUID_3091 0xc0 1040#define WD_VUID_COLOR 0xc1 1041 1042 /* 0x29 common gamma */ 1043#define set_WD_gamma(sb, val) sb[0x29] = val 1044#define get_WD_gamma(sb) sb[0x29] 1045#define WD_gamma_DEFAULT 0 1046#define WD_gamma_NORMAL 1 1047#define WD_gamma_SOFT 2 1048#define WD_gamma_SHARP 3 1049 1050/*==================================================================*/ 1051/* 0x2a-0x3F - vary based on vuid */ 1052 1053/*==================================================================*/ 1054/* vuid 0x00, mono params */ 1055 1056#define set_WD_outline(sb, val) setbitfield(sb + 0x2a, 1, 7, val) 1057#define get_WD_outline(sb) getbitfield(sb + 0x2a, 1, 7) 1058 1059#define set_WD_emphasis(sb, val) sb[0x2b] = val 1060#define get_WD_emphasis(sb) sb[0x2b] 1061 1062#define set_WD_separation(sb, val) setbitfield(sb + 0x2c, 1, 7, val) 1063#define get_WD_separation(sb) getbitfield(sb + 0x2c, 1, 7) 1064 1065#define set_WD_mirroring(sb, val) setbitfield(sb + 0x2d, 1, 7, val) 1066#define get_WD_mirroring(sb) getbitfield(sb + 0x2d, 1, 7) 1067 1068/* SDTC also called Auto-II mode?*/ 1069#define set_WD_variance(sb, val) sb[0x2e] = val 1070#define get_WD_variance(sb) sb[0x2e] 1071 1072/* DTC also called Auto-I mode?*/ 1073/*warning: filtering uses inverse logic*/ 1074#define set_WD_filtering(sb, val) setbitfield(sb + 0x2f, 1, 7, !val) 1075#define get_WD_filtering(sb) !getbitfield(sb + 0x2f, 1, 7) 1076 1077/*warning: smoothing uses inverse logic*/ 1078#define set_WD_smoothing(sb, val) setbitfield(sb + 0x2f, 3, 5, !val) 1079#define get_WD_smoothing(sb) !getbitfield(sb + 0x2f, 3, 5) 1080 1081#define set_WD_gamma_curve(sb, val) setbitfield(sb + 0x2f, 3, 3, val) 1082#define get_WD_gamma_curve(sb) getbitfield(sb + 0x2f, 3, 3) 1083 1084#define set_WD_threshold_curve(sb, val) setbitfield(sb + 0x2f, 7, 0, val) 1085#define get_WD_threshold_curve(sb) getbitfield(sb + 0x2f, 7, 0) 1086 1087/*warning: noise removal uses inverse logic*/ 1088#define set_WD_noise_removal(sb, val) setbitfield(sb + 0x30, 1, 5, !val) 1089#define get_WD_noise_removal(sb) !getbitfield(sb + 0x30, 1, 5) 1090 1091#define set_WD_matrix5x5(sb, val) setbitfield(sb + 0x30, 1, 4, val) 1092#define get_WD_matrix5x5(sb) getbitfield(sb + 0x30, 1, 4) 1093#define set_WD_matrix4x4(sb, val) setbitfield(sb + 0x30, 1, 3, val) 1094#define get_WD_matrix4x4(sb) getbitfield(sb + 0x30, 1, 3) 1095#define set_WD_matrix3x3(sb, val) setbitfield(sb + 0x30, 1, 2, val) 1096#define get_WD_matrix3x3(sb) getbitfield(sb + 0x30, 1, 2) 1097#define set_WD_matrix2x2(sb, val) setbitfield(sb + 0x30, 1, 1, val) 1098#define get_WD_matrix2x2(sb) getbitfield(sb + 0x30, 1, 1) 1099 1100#define set_WD_background(sb, val) setbitfield(sb + 0x30, 1, 0, val) 1101#define get_WD_background(sb) getbitfield(sb + 0x30, 1, 0) 1102#define WD_background_WHITE 0 1103#define WD_background_BLACK 1 1104 1105/*31 reserved*/ 1106 1107#define set_WD_wl_follow(sb, val) setbitfield(sb + 0x32, 3, 6, val) 1108#define get_WD_wl_follow(sb) getbitfield(sb + 0x32, 3, 6) 1109#define WD_wl_follow_DEFAULT 0 1110#define WD_wl_follow_ON 2 1111#define WD_wl_follow_OFF 3 1112 1113#define set_WD_subwindow_list(sb, val) putnbyte(sb + 0x33, val, 2) 1114#define get_WD_subwindow_list(sb) getnbyte(sb + 0x33, 2) 1115 1116/* 0x35-0x3d - paper size */ 1117#define set_WD_paper_selection(sb, val) setbitfield(sb + 0x35, 3, 6, val) 1118#define WD_paper_SEL_UNDEFINED 0 1119#define WD_paper_SEL_NON_STANDARD 3 1120 1121#define set_WD_paper_width_X(sb, val) putnbyte(sb + 0x36, val, 4) 1122#define get_WD_paper_width_X(sb) getnbyte(sb + 0x36, 4) 1123 1124#define set_WD_paper_length_Y(sb, val) putnbyte(sb+0x3a, val, 4) 1125#define get_WD_paper_length_Y(sb) getnbyte(sb+0x3a, 4) 1126 1127/* 3e switch ipc mode */ 1128#define set_WD_ipc_mode(sb, val) setbitfield(sb + 0x3e, 3, 6, val) 1129#define get_WD_ipc_mode(sb) getbitfield(sb + 0x3e, 3, 6) 1130#define WD_ipc_DEFAULT 0 1131#define WD_ipc_DTC 1 1132#define WD_ipc_SDTC 2 1133 1134/*3f reserved*/ 1135 1136/*==================================================================*/ 1137/* vuid 0xc1, color params */ 1138 1139#define set_WD_scanning_order(sb, val) sb[0x2a] = val 1140#define get_WD_scanning_order(sb) sb[0x2a] 1141#define WD_SCAN_ORDER_LINE 0 1142#define WD_SCAN_ORDER_DOT 1 1143#define WD_SCAN_ORDER_FACE 2 1144 1145#define set_WD_scanning_order_arg(sb, val) sb[0x2b] = val 1146#define get_WD_scanning_order_arg(sb) sb[0x2b] 1147#define WD_SCAN_ARG_RGB 0 1148#define WD_SCAN_ARG_RBG 1 1149#define WD_SCAN_ARG_GRB 2 1150#define WD_SCAN_ARG_GBR 3 1151#define WD_SCAN_ARG_BRG 4 1152#define WD_SCAN_ARG_BGR 5 1153 1154/*2c-2d reserved*/ 1155 1156/*like vuid 00, but in different location*/ 1157#define set_WD_c1_emphasis(sb, val) sb[0x2e] = val 1158#define get_WD_c1_emphasis(sb) sb[0x2e] 1159#define set_WD_c1_mirroring(sb, val) setbitfield(sb + 0x2f, 1, 7, val) 1160#define get_WD_c1_mirroring(sb) getbitfield(sb + 0x2f, 1, 7) 1161 1162/*30-31 reserved*/ 1163 1164/*32 wlf (see vuid 00)*/ 1165 1166/*33-34 reserved*/ 1167 1168/*35-3d paper size (see vuid 00)*/ 1169 1170/*3e-3f reserved*/ 1171 1172/*==================================================================*/ 1173/* vuid 0xc0, 3091/2 params */ 1174 1175/*2a-2b same as vuid 0xc1*/ 1176 1177#define set_WD_lamp_color(sb, val) sb[0x2d] = val 1178#define get_WD_lamp_color(sb) sb[0x2d] 1179#define WD_LAMP_DEFAULT 0x00 1180#define WD_LAMP_BLUE 0x01 1181#define WD_LAMP_RED 0x02 1182#define WD_LAMP_GREEN 0x04 1183 1184/*2e-31 reserved*/ 1185 1186#define set_WD_quality(sb, val) sb[0x32] = val 1187#define get_WD_quality(sb) sb[0x32] 1188#define WD_QUAL_NORMAL 0x00 1189#define WD_QUAL_HIGH 0x02 1190 1191/*33-34 reserved*/ 1192 1193/*35-3d paper size (see vuid 00)*/ 1194 1195/*3e-3f reserved*/ 1196 1197/*FIXME: more params here*/ 1198 1199/* ==================================================================== */ 1200 1201#endif 1202