Lines Matching refs:pss
54 static SANE_Status download_firmware(SnapScan_Scanner * pss);
55 static SANE_Status wait_scanner_ready (SnapScan_Scanner * pss);
105 SnapScan_Scanner *pss = (SnapScan_Scanner *) arg;
116 if (pss)
118 pss->asi1 = result[18];
119 pss->asi2 = result[19];
205 if (pss)
207 pss->sense_str = sense_str;
208 pss->as_str = as_str;
214 static SANE_Status open_scanner (SnapScan_Scanner *pss)
218 if (!pss->opens)
220 if(pss->pdev->bus == SCSI)
222 status = sanei_scsi_open (pss->devname, &(pss->fd),
223 sense_handler, (void *) pss);
227 status = snapscani_usb_open (pss->devname, &(pss->fd),
228 sense_handler, (void *) pss);
237 pss->opens++;
241 static void close_scanner (SnapScan_Scanner *pss)
246 if (pss->opens)
248 pss->opens--;
249 if (!pss->opens)
251 if(pss->pdev->bus == SCSI)
253 sanei_scsi_close (pss->fd);
255 else if(pss->pdev->bus == USB)
257 snapscani_usb_close (pss->fd);
260 DBG(DL_INFO, "%s: handles left: %d\n,",me, pss->opens);
439 static SANE_Status inquiry (SnapScan_Scanner *pss)
444 switch (pss->pdev->model)
448 if (pss->firmware_loaded)
449 pss->read_bytes = INQUIRY_RET_LEN_EPSON;
451 pss->read_bytes = INQUIRY_RET_LEN;
455 pss->read_bytes = INQUIRY_RET_LEN_5000;
458 pss->read_bytes = INQUIRY_RET_LEN;
462 zero_buf (pss->cmd, MAX_SCSI_CMD_LEN);
463 pss->cmd[0] = INQUIRY;
464 pss->cmd[4] = pss->read_bytes;
466 status = snapscan_cmd (pss->pdev->bus,
467 pss->fd,
468 pss->cmd,
470 pss->buf,
471 &pss->read_bytes);
477 exptime[0] = (char) (pss->buf[INQUIRY_EXPTIME1] + '0');
478 exptime[2] = (char) (pss->buf[INQUIRY_EXPTIME2] + '0');
479 pss->ms_per_line = atof (exptime)*(float) pss->buf[INQUIRY_SCAN_SPEED];
481 DBG (DL_DATA_TRACE, "%s: ms per line: %f\n", me, pss->ms_per_line);
484 switch (pss->pdev->model)
488 pss->chroma_offset[R_CHAN] =
489 pss->chroma_offset[G_CHAN] =
490 pss->chroma_offset[B_CHAN] = 0;
491 pss->chroma = 0;
495 if (pss->firmware_loaded)
497 snapscani_debug_data(tmpstr, pss->buf+120, 19);
499 pss->hconfig_epson = pss->buf[INQUIRY_EPSON_HCFG];
506 signed char g = (pss->buf[INQUIRY_G2R_DIFF] & 0x80) ? -(pss->buf[INQUIRY_G2R_DIFF] & 0x7F) : pss->buf[INQUIRY_G2R_DIFF];
507 signed char b = (pss->buf[INQUIRY_B2R_DIFF] & 0x80) ? -(pss->buf[INQUIRY_B2R_DIFF] & 0x7F) : pss->buf[INQUIRY_B2R_DIFF];
508 DBG (DL_DATA_TRACE, "%s: G2R_DIFF: %d\n", me, pss->buf[INQUIRY_G2R_DIFF]);
509 DBG (DL_DATA_TRACE, "%s: B2R_DIFF: %d\n", me, pss->buf[INQUIRY_B2R_DIFF]);
515 pss->chroma_offset[R_CHAN] = r_off;
516 pss->chroma_offset[G_CHAN] = g_off;
517 pss->chroma_offset[B_CHAN] = b_off;
518 pss->chroma = MAX(MAX(r_off, g_off), b_off);
521 me, pss->chroma,
522 pss->chroma_offset[R_CHAN],
523 pss->chroma_offset[G_CHAN],
524 pss->chroma_offset[B_CHAN]);
529 pss->actual_res =
530 u_char_to_u_short (pss->buf + INQUIRY_OPT_RES);
532 pss->pixels_per_line =
533 u_char_to_u_short (pss->buf + INQUIRY_PIX_PER_LINE);
534 pss->bytes_per_line =
535 u_char_to_u_short (pss->buf + INQUIRY_BYTE_PER_LINE);
536 if ((pss->pdev->model == PERFECTION2480) || (pss->pdev->model == PERFECTION3490))
537 pss->bytes_per_line += pss->buf[INQUIRY_BYTE_PER_LINE_MSB] << 16;
538 pss->lines =
539 u_char_to_u_short (pss->buf + INQUIRY_NUM_LINES) - pss->chroma;
541 if (pss->lines)
542 pss->buf_sz = (pss->phys_buf_sz/pss->bytes_per_line)*pss->bytes_per_line;
544 pss->buf_sz = 0;
545 pss->bytes_remaining = pss->bytes_per_line * (pss->lines + pss->chroma);
546 pss->expected_read_bytes = 0;
547 pss->read_bytes = 0;
548 pss->hwst = pss->buf[INQUIRY_HWST];
549 if ((pss->pdev->bus == USB) && !(pss->hwst & 0x02))
551 pss->firmware_loaded = SANE_TRUE;
553 pss->hconfig = pss->buf[INQUIRY_HCFG];
554 switch (pss->pdev->model)
562 pss->bpp = 14;
566 pss->bpp = 12;
569 pss->bpp = 8;
570 if (pss->hconfig & HCFG_ADC)
571 pss->bpp = 10;
577 pss->hconfig);
581 (u_long) pss->bpp);
585 (u_long) pss->pixels_per_line);
589 (u_long) pss->bytes_per_line);
593 (u_long) pss->lines);
597 (u_long) pss->buf_sz,
598 (u_long) (pss->lines ? pss->buf_sz / pss->lines : 0));
602 (u_long) pss->bytes_remaining);
607 static SANE_Status test_unit_ready (SnapScan_Scanner *pss)
614 status = snapscan_cmd (pss->pdev->bus, pss->fd, cmd, sizeof (cmd), NULL, NULL);
619 static void reserve_unit (SnapScan_Scanner *pss)
626 status = snapscan_cmd (pss->pdev->bus, pss->fd, cmd, sizeof (cmd), NULL, NULL);
636 static void release_unit (SnapScan_Scanner *pss)
643 status = snapscan_cmd (pss->pdev->bus, pss->fd, cmd, sizeof (cmd), NULL, NULL);
688 static SANE_Status send (SnapScan_Scanner *pss, u_char dtc, u_char dtcq)
696 zero_buf (pss->buf, SEND_LENGTH);
771 tl = calibration_line_length(pss);
779 pss->buf[0] = SEND;
780 pss->buf[2] = dtc;
781 pss->buf[5] = dtcq;
782 pss->buf[7] = (tl >> 8) & 0xff;
783 pss->buf[8] = tl & 0xff;
785 status = snapscan_cmd (pss->pdev->bus, pss->fd, pss->buf, SEND_LENGTH + tl,
792 static SANE_Status send_calibration_5150(SnapScan_Scanner *pss)
805 pss->pdev->bus, pss->fd, buf, SEND_LENGTH + length, NULL, NULL);
847 static SANE_Status prepare_set_window (SnapScan_Scanner *pss)
853 zero_buf (pss->cmd, MAX_SCSI_CMD_LEN);
856 pc = pss->cmd;
868 u_short_to_u_charp (pss->res, pc + SET_WINDOW_P_XRES);
869 u_short_to_u_charp (pss->res, pc + SET_WINDOW_P_YRES);
870 DBG (DL_CALL_TRACE, "%s Resolution: %d\n", me, pss->res);
874 (u_char) (255.0*(pss->threshold / 100.0));
878 SnapScan_Mode mode = pss->mode;
879 pss->bpp_scan = pss->val[OPT_BIT_DEPTH].w;
881 if (pss->preview)
883 mode = pss->preview_mode;
884 if (pss->pdev->model != SCANWIT2720S)
885 pss->bpp_scan = 8;
895 if (pss->halftone)
899 pss->bpp_scan = 1;
905 if (pss->halftone)
909 pss->bpp_scan = 1;
915 pc[SET_WINDOW_P_BITS_PER_PIX] = pss->bpp_scan;
916 DBG (DL_INFO, "%s: bits-per-pixel set to %d\n", me, (int) pss->bpp_scan);
919 pc[SET_WINDOW_P_PADDING_TYPE] = 0x00 /*| (pss->negative ? 0x00 : 0x80) */ ;
930 if(pss->pdev->model != ACER300F
932 pss->pdev->model != SNAPSCAN310
934 pss->pdev->model != PRISA310
936 pss->pdev->model != PRISA610
939 if (pss->mode != MD_LINEART)
952 static SANE_Status set_window (SnapScan_Scanner *pss)
961 status = prepare_set_window(pss);
964 pc = pss->cmd;
972 switch (pss->pdev->model)
977 pos_factor = (pss->res > 600) ? 1200 : 600;
981 pos_factor = (pss->res > 800) ? 1600 : 800;
984 pos_factor = (pss->res > 1200) ? 2400 : 1200;
987 pos_factor = (pss->res > 1600) ? 3200 : 1600;
990 pos_factor = pss->actual_res;
995 check_range(&(pss->brx), pss->pdev->x_range);
996 check_range(&(pss->bry), pss->pdev->y_range);
999 (int) (pos_factor*IN_PER_MM*SANE_UNFIX(pss->tlx));
1001 (int) (pos_factor*IN_PER_MM*SANE_UNFIX(pss->tly));
1003 (int) (pos_factor*IN_PER_MM*SANE_UNFIX(pss->brx));
1005 (int) (pos_factor*IN_PER_MM*SANE_UNFIX(pss->bry));
1026 if (pss->preview) {
1032 if (!pss->highquality) {
1035 if ((pss->pdev->model == PERFECTION2480) || (pss->pdev->model == PERFECTION3490)) {
1038 if (pss->source == SRC_TPO) {
1041 if (pss->source == SRC_ADF) {
1048 status = snapscan_cmd (pss->pdev->bus, pss->fd, pss->cmd,
1052 wait_scanner_ready (pss);
1084 static SANE_Status set_frame (SnapScan_Scanner *pss, SANE_Byte frame_no)
1091 zero_buf (pss->cmd, MAX_SCSI_CMD_LEN);
1092 pss->cmd[0] = OBJECT_POSITION;
1093 pss->cmd[1] = 2; /* Absolute position used here to select the frame */
1094 pss->cmd[4] = frame_no;
1096 status = snapscan_cmd (pss->pdev->bus, pss->fd, pss->cmd, SET_FRAME_LEN, NULL, NULL);
1102 static SANE_Status set_focus (SnapScan_Scanner *pss, SANE_Int focus)
1108 zero_buf (pss->cmd, MAX_SCSI_CMD_LEN);
1109 pss->cmd[0] = OBJECT_POSITION;
1110 pss->cmd[1] = 4; /* Rotate object but here it sets the focus point */
1111 pss->cmd[3] = (focus >> 8) & 0xFF;
1112 pss->cmd[4] = focus & 0xFF;
1113 status = snapscan_cmd (pss->pdev->bus, pss->fd, pss->cmd, SET_FRAME_LEN, NULL, NULL);
1144 static SANE_Status scan (SnapScan_Scanner *pss)
1150 zero_buf (pss->cmd, MAX_SCSI_CMD_LEN);
1151 pss->cmd[0] = SCAN;
1152 status = snapscan_cmd (pss->pdev->bus, pss->fd, pss->cmd, SCAN_LEN, NULL, NULL);
1162 /* number of bytes expected must be in pss->expected_read_bytes */
1163 static SANE_Status scsi_read (SnapScan_Scanner *pss, u_char read_type)
1169 zero_buf (pss->cmd, MAX_SCSI_CMD_LEN);
1170 pss->cmd[0] = READ;
1171 pss->cmd[2] = read_type;
1172 if (read_type == READ_TRANSTIME && pss->pdev->model == PERFECTION2480)
1173 pss->cmd[5] = 1;
1175 u_int_to_u_char3p (pss->expected_read_bytes, pss->cmd + 6);
1177 pss->read_bytes = pss->expected_read_bytes;
1179 status = snapscan_cmd (pss->pdev->bus, pss->fd, pss->cmd,
1180 READ_LEN, pss->buf, &pss->read_bytes);
1185 static SANE_Status get_focus (SnapScan_Scanner *pss)
1193 copy = *pss;
1229 pss->focus = max_focus_point;
1240 static SANE_Status request_sense (SnapScan_Scanner *pss)
1251 status = snapscan_cmd (pss->pdev->bus, pss->fd, cmd, sizeof (cmd),
1260 status = sense_handler (pss->fd, data, (void *) pss);
1266 static SANE_Status send_diagnostic (SnapScan_Scanner *pss)
1272 if (pss->pdev->model == PRISA620
1274 pss->pdev->model == PRISA610
1276 pss->pdev->model == SNAPSCAN1236
1278 pss->pdev->model == SCANWIT2720S
1280 pss->pdev->model == ARCUS1200)
1286 status = snapscan_cmd (pss->pdev->bus, pss->fd, cmd, sizeof (cmd), NULL, NULL);
1291 static SANE_Status wait_scanner_ready (SnapScan_Scanner *pss)
1304 status = test_unit_ready (pss);
1312 int delay = pss->asi1;
1354 static SANE_Status calibrate_epson (SnapScan_Scanner *pss)
1360 int pixels_per_line = pss->actual_res * 17/4;
1373 if (pss->bpp_scan == 16)
1379 if (is_colour_mode(actual_mode(pss))) {
1382 if (pss->res >= (SANE_Int)pss->actual_res) {
1407 if (pss->source == SRC_TPO) {
1421 zero_buf (pss->cmd, MAX_SCSI_CMD_LEN);
1422 pss->cmd[0] = READ;
1423 pss->cmd[2] = dtc;
1424 pss->cmd[5] = cal_lines;
1430 u_int_to_u_char3p (expected_read_bytes, pss->cmd + 6);
1433 status = snapscan_cmd (pss->pdev->bus, pss->fd, pss->cmd,
1475 pbuf = pss->buf + SEND_LENGTH;
1476 if (is_colour_mode(actual_mode(pss))) {
1493 zero_buf (pss->buf, SEND_LENGTH);
1494 pss->buf[0] = SEND;
1495 pss->buf[2] = dtc;
1497 u_int_to_u_char3p (tl, pss->buf + 6);
1498 status = snapscan_cmd (pss->pdev->bus, pss->fd, pss->buf, SEND_LENGTH + tl,
1513 static SANE_Status read_calibration_data (SnapScan_Scanner *pss, void *buf, u_char num_lines)
1517 size_t expected_read_bytes = num_lines * calibration_line_length(pss);
1521 zero_buf (pss->cmd, MAX_SCSI_CMD_LEN);
1522 pss->cmd[0] = READ;
1523 pss->cmd[2] = READ_CALIBRATION;
1524 pss->cmd[5] = num_lines;
1525 u_int_to_u_char3p (expected_read_bytes, pss->cmd + 6);
1528 status = snapscan_cmd (pss->pdev->bus, pss->fd, pss->cmd,
1540 static SANE_Status calibrate (SnapScan_Scanner *pss)
1547 int line_length = calibration_line_length(pss);
1549 if ((pss->pdev->model == PERFECTION2480) ||
1550 (pss->pdev->model == PERFECTION3490)) {
1551 return calibrate_epson (pss);
1554 if (pss->pdev->model == PRISA5150)
1556 return send_calibration_5150(pss);
1562 int num_lines = pss->phys_buf_sz / line_length;
1579 status = read_calibration_data(pss, buf, num_lines);
1587 pss->buf[c + SEND_LENGTH] = sum / num_lines;
1590 status = send (pss, DTC_CALIBRATION, 1);
1597 static SANE_Status download_firmware(SnapScan_Scanner * pss)
1608 bModelNo =*(pss->buf + INQUIRY_HWMI);
1612 if (pss->pdev->firmware_filename) {
1613 firmware = pss->pdev->firmware_filename;
1637 switch (pss->pdev->model)
1702 pss->pdev->bus, pss->fd, pCDB, bufLength+cdbLength, NULL, NULL);
1703 pss->firmware_loaded = SANE_TRUE;