From 0e29f2138f9ac83f0c0daad300b1a81716330cbc Mon Sep 17 00:00:00 2001 From: Henning Geinitz Date: Sun, 3 Oct 2004 13:19:07 +0000 Subject: [PATCH] Fixed some warnings (bug #300823). Fixed Microtek Phantom C6 scanning on big endian platforms. Based on patch from Matijs van Zuijlen in Debian bug tracking system (#274523). --- ChangeLog | 5 ++++- backend/microtek2.c | 30 +++++++++++++++++++++++++----- backend/microtek2.h | 2 +- 3 files changed, 30 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index b61fa452b..6413ad32d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -16,7 +16,10 @@ doesn't work on 64 bit platforms as size_t is 64 bits there while the length of a data block is defined as 32 bits in the SANE network standard (bug #300837). - * backend/microtek2.c: Fixed some warnings (bug #300823). + * backend/microtek2.c backend/microtek2.h: Fixed some warnings + (bug #300823). Fixed Microtek Phantom C6 scanning on big endian + platforms. Based on patch from Matijs van Zuijlen in Debian bug + tracking system (#274523). 2004-10-02 Thomas Soumarmon diff --git a/backend/microtek2.c b/backend/microtek2.c index 7f4b03459..6d7ccf168 100644 --- a/backend/microtek2.c +++ b/backend/microtek2.c @@ -893,7 +893,7 @@ cancel_scan(Microtek2_Scanner *ms) /* READ IMAGE with a transferlength of 0 aborts a scan */ ms->transfer_length = 0; - status = scsi_read_image(ms, (u_int8_t *) NULL); + status = scsi_read_image(ms, (u_int8_t *) NULL, 1); if ( status != SANE_STATUS_GOOD ) { DBG(1, "cancel_scan: cancel failed: '%s'\n", sane_strstatus(status)); @@ -4668,12 +4668,14 @@ scsi_read_image_info(Microtek2_Scanner *ms) /*---------- scsi_read_image() -----------------------------------------------*/ static SANE_Status -scsi_read_image(Microtek2_Scanner *ms, u_int8_t *buffer) +scsi_read_image(Microtek2_Scanner *ms, u_int8_t *buffer, int bytes_per_pixel) { u_int8_t cmd[RI_CMD_L]; SANE_Bool endiantype; SANE_Status status; size_t size; + size_t i; + u_int8_t tmp; DBG(30, "scsi_read_image: ms=%p, buffer=%p\n", (void *) ms, buffer); @@ -4692,6 +4694,24 @@ scsi_read_image(Microtek2_Scanner *ms, u_int8_t *buffer) size = ms->transfer_length; status = sanei_scsi_cmd(ms->sfd, cmd, sizeof(cmd), buffer, &size); + if ( buffer && ( ms->dev->model_flags & MD_PHANTOM_C6 ) && endiantype ) + { + switch(bytes_per_pixel) + { + case 1: break; + case 2: + for ( i = 1; i < size; i += 2 ) + { + tmp = buffer[i-1]; + buffer[i-1] = buffer[i]; + buffer[i] = tmp; + } + break; + default: + DBG(1, "scsi_read_image: Unexpected bytes_per_pixel=%d\n", bytes_per_pixel); + } + } + if ( status != SANE_STATUS_GOOD ) DBG(1, "scsi_read_image: '%s'\n", sane_strstatus(status)); @@ -6098,7 +6118,7 @@ read_shading_image(Microtek2_Scanner *ms) #ifdef TESTBACKEND status = scsi_read_sh_d_image(ms, buf); #else - status = scsi_read_image(ms, buf); + status = scsi_read_image(ms, buf, md->shading_depth>8 ? 2 : 1); #endif if ( status != SANE_STATUS_GOOD ) { @@ -6239,7 +6259,7 @@ read_shading_image(Microtek2_Scanner *ms) #ifdef TESTBACKEND status = scsi_read_sh_w_image(ms, buf); #else - status = scsi_read_image(ms, buf); + status = scsi_read_image(ms, buf, md->shading_depth>8 ? 2 : 1); #endif if ( status != SANE_STATUS_GOOD ) return status; @@ -7148,7 +7168,7 @@ reader_process(void *data) ms->src_lines_to_read, ms->bpl, ms->real_bpl, ms->buf.src_buf); sigprocmask (SIG_BLOCK, &sigterm_set, 0); - status = scsi_read_image(ms, ms->buf.src_buf); + status = scsi_read_image(ms, ms->buf.src_buf, (ms->depth > 8) ? 2 : 1); sigprocmask (SIG_UNBLOCK, &sigterm_set, 0); if ( status != SANE_STATUS_GOOD ) return SANE_STATUS_IO_ERROR; diff --git a/backend/microtek2.h b/backend/microtek2.h index b07f5818b..8e1c8dbc1 100644 --- a/backend/microtek2.h +++ b/backend/microtek2.h @@ -1344,7 +1344,7 @@ scsi_read_control_bits(Microtek2_Scanner *); scsi_read_gamma(Microtek2_Scanner *); */ static SANE_Status -scsi_read_image(Microtek2_Scanner *, u_int8_t *); +scsi_read_image(Microtek2_Scanner *, u_int8_t *, int); static SANE_Status scsi_read_image_info(Microtek2_Scanner *);