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 */
23 static void
setbitfield(unsigned char *pageaddr, int mask, int shift, int val)24 setbitfield (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 */
32 static int
getbitfield(unsigned char *pageaddr, int mask, int shift)33 getbitfield (unsigned char *pageaddr, int mask, int shift)
34 {
35 return ((*pageaddr >> shift) & mask);
36 }
37
38 /* ------------------------------------------------------------------------- */
39
40 static int
getnbyte(unsigned char *pnt, int nbytes)41 getnbyte (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 */
57 static void
58 putnbyte (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