From 75018e1ad0381ff538a6fa64cc10efda82d413df Mon Sep 17 00:00:00 2001 From: Oliver Rauch Date: Mon, 15 Mar 2004 20:42:19 +0000 Subject: [PATCH] backend/umax: bugfix for sense_handler and do_calibration --- ChangeLog | 3 +++ backend/umax-scsidef.h | 2 +- backend/umax.c | 11 ++++++++--- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index c92fe7e1f..dfbbfc3f2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2004-03-15 Oliver Rauch + * backend/umax: bugfix for sense_handler and do_calibration + 2004-03-15 Stéphane Voltz * backend/umax_pp_low.c backend/umax_pp_low.h backend/umax_pp_mid.c diff --git a/backend/umax-scsidef.h b/backend/umax-scsidef.h index de1d0d23e..f192e2cb7 100644 --- a/backend/umax-scsidef.h +++ b/backend/umax-scsidef.h @@ -933,7 +933,7 @@ static scsiblk request_sense = { request_senseC, sizeof(request_senseC) }; #define get_RS_scanner_error_code(b) b[0x15] #define get_RS_SCC_condition_code(b) b[0x17] -#define get_RS_SCC_calibration_width(b) getnbyte(b+0x18, 4) +#define get_RS_SCC_calibration_bytesperline(b) getnbyte(b+0x18, 4) #define get_RS_SCC_calibration_lines(b) getnbyte(b+0x1c, 2) #define get_RS_SCC_calibration_bytespp(b) b[0x1e] diff --git a/backend/umax.c b/backend/umax.c index a5c49a569..8fd0a2d74 100644 --- a/backend/umax.c +++ b/backend/umax.c @@ -49,7 +49,7 @@ /* --------------------------------------------------------------------------------------------------------- */ -#define BUILD 43 +#define BUILD 44 /* --------------------------------------------------------------------------------------------------------- */ @@ -888,6 +888,11 @@ static SANE_Status sense_handler(int scsi_fd, unsigned char *result, void *arg) DBG(DBG_sense, "check condition sense: %s\n", sense_str[sensekey]); + /* when we reach here then we have no valid data in buffer[0] */ + /* but it may be helpful to have the result data in buffer[0] */ + memset(dev->buffer[0], 0, rs_return_block_size); /* clear sense data buffer */ + memcpy(dev->buffer[0], result, len+1); /* copy sense data to buffer */ + if (len > 0x15) { int scanner_error = get_RS_scanner_error_code(result); @@ -2455,11 +2460,11 @@ static SANE_Status umax_do_calibration(Umax_Device *dev) DBG(DBG_info,"driver is doing calibration\n"); - memset(dev->buffer[0], 0, rs_return_block_size); /* clear sense data buffer */ if (umax_execute_request_sense) { DBG(DBG_info,"request sense call is enabled\n"); + memset(dev->buffer[0], 0, rs_return_block_size); /* clear sense data buffer */ umax_do_request_sense(dev); /* new request-sense call to get all data */ } else @@ -2543,9 +2548,9 @@ static SANE_Status umax_do_calibration(Umax_Device *dev) } else { - width = get_RS_SCC_calibration_width(dev->buffer[0]); lines = get_RS_SCC_calibration_lines(dev->buffer[0]); bytespp = get_RS_SCC_calibration_bytespp(dev->buffer[0]); + width = get_RS_SCC_calibration_bytesperline(dev->buffer[0]) / bytespp; } if (dev->calibration_bytespp > 0) /* correct bytespp if necessary and driver knows about it or user did select it */