From ce8dbc684704986c87ac9cbffc74d0bfa20b1175 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Voltz?= Date: Sun, 30 Jul 2006 14:56:48 +0000 Subject: [PATCH] - fixed gl646_bulk_write_register regarding data alignment on ARM arch. (bug #303681) --- ChangeLog | 5 +++++ backend/genesys_gl646.c | 19 +++++++++++++------ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index b105cf6dc..fd1ea104d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2006-07-30 Stephane Voltz + + * backend/genesys_gl646.c: use an intermediate char buffer + for register bulk write (bug #303681). + 2006-07-25 Henning Meier-Geinitz * tools/libtool-get-dll-ext: Fixed compilation problem with newer diff --git a/backend/genesys_gl646.c b/backend/genesys_gl646.c index e8981aba1..5098a0ecd 100644 --- a/backend/genesys_gl646.c +++ b/backend/genesys_gl646.c @@ -257,6 +257,7 @@ gl646_bulk_write_register (Genesys_Device * dev, { SANE_Status status; u_int8_t outdata[8]; + u_int8_t buffer[GENESYS_MAX_REGS * 2]; unsigned int i; /* handle differently sized register sets, reg[0x00] is the last one */ @@ -280,7 +281,7 @@ gl646_bulk_write_register (Genesys_Device * dev, status = sanei_usb_control_msg (dev->dn, REQUEST_TYPE_OUT, REQUEST_BUFFER, - VALUE_BUFFER, INDEX, sizeof (outdata), outdata); + VALUE_BUFFER, INDEX, sizeof(outdata), outdata); if (status != SANE_STATUS_GOOD) { DBG (DBG_error, @@ -288,8 +289,15 @@ gl646_bulk_write_register (Genesys_Device * dev, sane_strstatus (status)); return status; } - - status = sanei_usb_write_bulk (dev->dn, (u_int8_t *) reg, &size); + + /* copy registers and values in data buffer */ + for (i=0; idn, buffer, &size); if (status != SANE_STATUS_GOOD) { DBG (DBG_error, @@ -298,9 +306,8 @@ gl646_bulk_write_register (Genesys_Device * dev, return status; } - for (i = 0; i < size / 2; i++) - DBG (DBG_io2, "reg[0x%02x] = 0x%02x\n", ((u_int8_t *) reg)[2 * i], - ((u_int8_t *) reg)[2 * i + 1]); + for (i = 0; i < size ; i+=2) + DBG (DBG_io2, "reg[0x%02x] = 0x%02x\n", buffer[i], buffer[i + 1]); DBG (DBG_io, "gl646_bulk_write_register: wrote %d bytes\n", size); return status;