Lines Matching refs:ss
85 /* scanjet_attach: attach special functions to ss */
87 scanjet_attach(struct ss_softc *ss, struct scsipibus_attach_args *sa)
91 SC_DEBUG(ss->sc_periph, SCSIPI_DB1, ("scanjet_attach: start\n"));
92 ss->sio.scan_scanner_type = 0;
94 printf("%s: ", device_xname(ss->sc_dev));
98 ss->sio.scan_scanner_type = HP_SCANJET_IIC;
101 ss->sio.scan_scanner_type = HP_SCANJET_IIC;
104 ss->sio.scan_scanner_type = HP_SCANJET_IIC;
107 ss->sio.scan_scanner_type = HP_SCANJET_IIC;
110 ss->sio.scan_scanner_type = HP_SCANJET_IIC;
113 ss->sio.scan_scanner_type = HP_SCANJET_IIC;
117 SC_DEBUG(ss->sc_periph, SCSIPI_DB1,
119 ss->sio.scan_scanner_type));
122 ss->special = &scanjet_special;
125 ss->sio.scan_width = 1200;
126 ss->sio.scan_height = 1200;
127 ss->sio.scan_x_resolution = 100;
128 ss->sio.scan_y_resolution = 100;
129 ss->sio.scan_x_origin = 0;
130 ss->sio.scan_y_origin = 0;
131 ss->sio.scan_brightness = 128;
132 ss->sio.scan_contrast = 128;
133 ss->sio.scan_quality = 100;
134 ss->sio.scan_image_mode = SIM_GRAYSCALE;
136 error = scanjet_set_window(ss);
141 error = scanjet_compute_sizes(ss);
150 scanjet_get_params(struct ss_softc *ss)
161 scanjet_set_params(struct ss_softc *ss, struct scan_io *sio)
169 if (ss->flags & SSF_TRIGGERED) {
170 error = scanjet_rewind_scanner(ss);
201 sio->scan_scanner_type = ss->sio.scan_scanner_type;
202 memcpy(&ss->sio, sio, sizeof(struct scan_io));
204 error = scanjet_set_window(ss);
206 uprintf("%s: set_window failed\n", device_xname(ss->sc_dev));
209 error = scanjet_compute_sizes(ss);
211 uprintf("%s: compute_sizes failed\n", device_xname(ss->sc_dev));
223 scanjet_trigger_scanner(struct ss_softc *ss)
228 error = scanjet_set_window(ss);
230 uprintf("%s: set_window failed\n", device_xname(ss->sc_dev));
233 error = scanjet_compute_sizes(ss);
235 uprintf("%s: compute_sizes failed\n", device_xname(ss->sc_dev));
241 error = scanjet_ctl_write(ss, escape_codes, strlen(escape_codes));
244 device_xname(ss->sc_dev));
251 scanjet_read(struct ss_softc *ss, struct buf *bp)
255 struct scsipi_periph *periph = ss->sc_periph;
279 callout_reset(&ss->sc_callout, hz / 2, ssrestart, periph);
283 if (bufq_get(ss->buf_queue) != bp)
286 bufq_get(ss->buf_queue);
291 ss->sio.scan_window_size -= bp->b_bcount;
293 if (ss->sio.scan_window_size < 0)
294 ss->sio.scan_window_size = 0;
302 scanjet_ctl_write(struct ss_softc *ss, char *tbuf, u_int size)
308 if ((ss->flags & SSF_AUTOCONF) != 0)
315 return scsipi_command(ss->sc_periph,
323 scanjet_ctl_read(struct ss_softc *ss, char *tbuf, u_int size)
329 if ((ss->flags & SSF_AUTOCONF) != 0)
336 return scsipi_command(ss->sc_periph,
363 scanjet_set_window(struct ss_softc *ss)
370 p += snprintf(p, ep - p, "\033*f%ldP", ss->sio.scan_width / 4);
371 p += snprintf(p, ep - p, "\033*f%ldQ", ss->sio.scan_height / 4);
372 p += snprintf(p, ep - p, "\033*f%ldX", ss->sio.scan_x_origin / 4);
373 p += snprintf(p, ep - p, "\033*f%ldY", ss->sio.scan_y_origin / 4);
374 p += snprintf(p, ep - p, "\033*a%dR", ss->sio.scan_x_resolution);
375 p += snprintf(p, ep - p, "\033*a%dS", ss->sio.scan_y_resolution);
377 switch (ss->sio.scan_image_mode) {
379 ss->sio.scan_bits_per_pixel = 1;
388 ss->sio.scan_bits_per_pixel = 1;
397 ss->sio.scan_bits_per_pixel = 8;
406 ss->sio.scan_bits_per_pixel = 24;
419 p += snprintf(p, ep - p, "\033*a%dG", ss->sio.scan_bits_per_pixel);
421 (int)(ss->sio.scan_brightness) - 128);
423 (int)(ss->sio.scan_contrast) - 128);
425 return scanjet_ctl_write(ss, escape_codes, p - escape_codes);
429 scanjet_compute_sizes(struct ss_softc *ss)
444 ss->sio.scan_width = (ss->sio.scan_width + 3) & 0xfffffffc;
445 ss->sio.scan_height = (ss->sio.scan_height + 3) & 0xfffffffc;
447 switch (ss->sio.scan_image_mode) {
459 error = scanjet_ctl_write(ss, escape_codes, strlen(escape_codes));
461 uprintf(wfail, device_xname(ss->sc_dev));
464 error = scanjet_ctl_read(ss, response, 20);
466 uprintf(rfail, device_xname(ss->sc_dev));
471 uprintf(dfail, device_xname(ss->sc_dev));
474 ss->sio.scan_pixels_per_line = strtoul(p + 1, NULL, 10);
475 if (ss->sio.scan_image_mode < SIM_GRAYSCALE)
476 ss->sio.scan_pixels_per_line *= 8;
480 error = scanjet_ctl_write(ss, escape_codes, strlen(escape_codes));
482 uprintf(wfail, device_xname(ss->sc_dev));
485 error = scanjet_ctl_read(ss, response, 20);
487 uprintf(rfail, device_xname(ss->sc_dev));
492 uprintf(dfail, device_xname(ss->sc_dev));
495 ss->sio.scan_lines = strtoul(p + 1, NULL, 10);
497 ss->sio.scan_window_size = ss->sio.scan_lines *
498 ((ss->sio.scan_pixels_per_line * ss->sio.scan_bits_per_pixel) / 8);