summaryrefslogtreecommitdiff
path: root/backend/mustek.c
diff options
context:
space:
mode:
authorJörg Frings-Fürst <debian@jff.email>2023-02-12 17:35:53 +0100
committerJörg Frings-Fürst <debian@jff.email>2023-02-12 17:35:53 +0100
commit84357741a6a6e6430f199b2c3f7498e0e97da9ad (patch)
tree23e8d66ede9506b94c76fb36910ca3c7dd15c74e /backend/mustek.c
parent302276dc1b90cfc972fb726ca94a23b18f4b0088 (diff)
New upstream version 1.2.1upstream/1.2.1upstream
Diffstat (limited to 'backend/mustek.c')
-rw-r--r--backend/mustek.c95
1 files changed, 38 insertions, 57 deletions
diff --git a/backend/mustek.c b/backend/mustek.c
index 4d77fb5..bad118a 100644
--- a/backend/mustek.c
+++ b/backend/mustek.c
@@ -198,15 +198,6 @@ static const SANE_Byte scsi_inquiry[] = {
static const SANE_Byte scsi_test_unit_ready[] = {
MUSTEK_SCSI_TEST_UNIT_READY, 0x00, 0x00, 0x00, 0x00, 0x00
};
-/* Remove #ifdef and this comment when this SCSI command is used for
- something. Keeping this definition around so we don't loose info
- about the protocol.
- */
-#ifdef ENABLE_MUSTEK_SCSI_AREA_AND_WINDOWS
-static const SANE_Byte scsi_area_and_windows[] = {
- MUSTEK_SCSI_AREA_AND_WINDOWS, 0x00, 0x00, 0x00, 0x09, 0x00
-};
-#endif
static const SANE_Byte scsi_request_sense[] = {
MUSTEK_SCSI_REQUEST_SENSE, 0x00, 0x00, 0x00, 0x04, 0x00
};
@@ -219,28 +210,16 @@ static const SANE_Byte scsi_ccd_distance[] = {
static const SANE_Byte scsi_get_image_status[] = {
MUSTEK_SCSI_GET_IMAGE_STATUS, 0x00, 0x00, 0x00, 0x06, 0x00
};
-static const SANE_Byte scsi_set_window[] = {
- MUSTEK_SCSI_SET_WINDOW, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00
-};
static const SANE_Byte scsi_get_window[] = {
MUSTEK_SCSI_GET_WINDOW, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00
};
-static const SANE_Byte scsi_read_data[] = {
- MUSTEK_SCSI_READ_DATA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-};
-static const SANE_Byte scsi_send_data[] = {
- MUSTEK_SCSI_SEND_DATA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-};
-/* Remove #ifdef and this comment when this SCSI command is used for
- something. Keeping this definition around so we don't loose info
- about the protocol.
- */
-#ifdef ENABLE_MUSTEK_SCSI_LOOKUP_TABLE
-static const SANE_Byte scsi_lookup_table[] = {
- MUSTEK_SCSI_LOOKUP_TABLE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00
-};
-#endif
+
+/* Sizes for fixed-length, non-vendor-specific CDB formats (others are 0) */
+#define CDB_SIZE(opcode) ((opcode) < 0x20 ? 6 : \
+ (opcode) < 0x60 ? 10 : \
+ (opcode) < 0x80 ? 0 : \
+ (opcode) < 0xa0 ? 16 : \
+ (opcode) < 0xc0 ? 12 : 0)
/* prototypes */
static SANE_Status area_and_windows (Mustek_Scanner * s);
@@ -1994,7 +1973,7 @@ set_window_se (Mustek_Scanner * s, SANE_Int lamp)
/* setup SCSI command (except length): */
memset (cmd, 0, sizeof (cmd));
cmd[0] = MUSTEK_SCSI_SET_WINDOW;
- cp = cmd + sizeof (scsi_set_window); /* skip command block */
+ cp = cmd + CDB_SIZE (MUSTEK_SCSI_SET_WINDOW); /* skip command block */
if (s->mode & MUSTEK_MODE_COLOR)
{
@@ -2093,7 +2072,7 @@ set_window_se (Mustek_Scanner * s, SANE_Int lamp)
*cp++ = 0;
cp += 5; /* skip reserved bytes */
- cmd[8] = cp - cmd - sizeof (scsi_set_window);
+ cmd[8] = cp - cmd - CDB_SIZE (MUSTEK_SCSI_SET_WINDOW);
return dev_cmd (s, cmd, (cp - cmd), 0, 0);
}
@@ -2111,7 +2090,7 @@ set_window_pro (Mustek_Scanner * s)
else
cmd[8] = 0x0a;
- cp = cmd + sizeof (scsi_set_window); /* skip command block */
+ cp = cmd + CDB_SIZE (MUSTEK_SCSI_SET_WINDOW); /* skip command block */
*cp++ = 0; /* what's this? */
pixels_per_mm = SANE_UNFIX (s->hw->dpi_range.max) / MM_PER_INCH;
@@ -2174,7 +2153,7 @@ get_calibration_lines_pro (Mustek_Scanner * s)
for (line = 0; line < s->hw->cal.lines; line++)
{
- status = dev_cmd (s, cmd, sizeof (scsi_read_data),
+ status = dev_cmd (s, cmd, CDB_SIZE (MUSTEK_SCSI_READ_DATA),
s->hw->cal.buffer + line * len, &len);
if ((status != SANE_STATUS_GOOD)
@@ -2199,17 +2178,17 @@ send_calibration_lines_pro (Mustek_Scanner * s)
DBG (5, "send_calibration_lines_pro\n");
buf_size = s->hw->cal.bytes / 2;
- cmd1 = (SANE_Byte *) malloc (buf_size + sizeof (scsi_send_data));
- cmd2 = (SANE_Byte *) malloc (buf_size + sizeof (scsi_send_data));
+ cmd1 = (SANE_Byte *) malloc (buf_size + CDB_SIZE (MUSTEK_SCSI_SEND_DATA));
+ cmd2 = (SANE_Byte *) malloc (buf_size + CDB_SIZE (MUSTEK_SCSI_SEND_DATA));
if (!cmd1 || !cmd2)
{
- DBG (1, "send_calibration_lines_pro: failed to malloc %ld bytes for "
+ DBG (1, "send_calibration_lines_pro: failed to malloc %zu bytes for "
"sending lines\n",
- (long int) (buf_size + sizeof (scsi_send_data)));
+ buf_size + CDB_SIZE (MUSTEK_SCSI_SEND_DATA));
return SANE_STATUS_NO_MEM;
}
- memset (cmd1, 0, sizeof (scsi_send_data));
- memset (cmd2, 0, sizeof (scsi_send_data));
+ memset (cmd1, 0, CDB_SIZE (MUSTEK_SCSI_SEND_DATA));
+ memset (cmd2, 0, CDB_SIZE (MUSTEK_SCSI_SEND_DATA));
cmd1[0] = cmd2[0] = MUSTEK_SCSI_SEND_DATA;
cmd1[6] = cmd2[6] = (buf_size >> 16) & 0xff;
@@ -2236,21 +2215,21 @@ send_calibration_lines_pro (Mustek_Scanner * s)
calibration_word = (1024 * 65536 / calibration_word) - 1024;
if (calibration_word > 1023)
calibration_word = 1023;
- *(cmd1 + sizeof (scsi_send_data) + (buf_size / 3) * color + column)
- = calibration_word & 0xff;
- *(cmd2 + sizeof (scsi_send_data) + (buf_size / 3) * color + column)
- = (calibration_word >> 8) & 0xff;
+ *(cmd1 + CDB_SIZE (MUSTEK_SCSI_SEND_DATA) + (buf_size / 3) * color
+ + column) = calibration_word & 0xff;
+ *(cmd2 + CDB_SIZE (MUSTEK_SCSI_SEND_DATA) + (buf_size / 3) * color
+ + column) = (calibration_word >> 8) & 0xff;
}
}
- status = dev_cmd (s, cmd1, buf_size + sizeof (scsi_send_data), 0, 0);
+ status = dev_cmd (s, cmd1, buf_size + CDB_SIZE (MUSTEK_SCSI_SEND_DATA), 0, 0);
if (status != SANE_STATUS_GOOD)
{
DBG (1, "send_calibration_lines_pro: send failed\n");
return status;
}
- status = dev_cmd (s, cmd2, buf_size + sizeof (scsi_send_data), 0, 0);
+ status = dev_cmd (s, cmd2, buf_size + CDB_SIZE (MUSTEK_SCSI_SEND_DATA), 0, 0);
if (status != SANE_STATUS_GOOD)
{
DBG (1, "send_calibration_lines_pro: send failed\n");
@@ -2328,7 +2307,8 @@ get_calibration_lines_se (Mustek_Scanner * s)
cmd[7] = (lines >> 8) & 0xff;
cmd[8] = (lines >> 0) & 0xff;
len = lines * bytes_per_color;
- status = dev_cmd (s, cmd, sizeof (scsi_read_data), s->hw->cal.buffer, &len);
+ status = dev_cmd (s, cmd, CDB_SIZE (MUSTEK_SCSI_READ_DATA),
+ s->hw->cal.buffer, &len);
if ((status != SANE_STATUS_GOOD)
|| (len != (unsigned int) (lines * bytes_per_color)))
{
@@ -2361,15 +2341,15 @@ send_calibration_lines_se (Mustek_Scanner * s, SANE_Word color)
DBG (5, "send_calibration_lines_se: %d bytes, color: %d\n",
bytes_per_color, color + 1);
- cmd = (SANE_Byte *) malloc (buf_size + sizeof (scsi_send_data));
+ cmd = (SANE_Byte *) malloc (buf_size + CDB_SIZE (MUSTEK_SCSI_SEND_DATA));
if (!cmd)
{
- DBG (1, "send_calibration_lines_se: failed to malloc %ld bytes for "
+ DBG (1, "send_calibration_lines_se: failed to malloc %zu bytes for "
"sending lines\n",
- (long int) (buf_size + sizeof (scsi_send_data)));
+ buf_size + CDB_SIZE (MUSTEK_SCSI_SEND_DATA));
return SANE_STATUS_NO_MEM;
}
- memset (cmd, 0, sizeof (scsi_send_data));
+ memset (cmd, 0, CDB_SIZE (MUSTEK_SCSI_SEND_DATA));
for (column = 0; column < bytes_per_color; column++)
{
@@ -2386,7 +2366,7 @@ send_calibration_lines_se (Mustek_Scanner * s, SANE_Word color)
cali_word = 256 * s->hw->cal.lines * 255 / cali_word - 256;
if (cali_word > 255)
cali_word = 255;
- *(cmd + sizeof (scsi_send_data) + column) = cali_word;
+ *(cmd + CDB_SIZE (MUSTEK_SCSI_SEND_DATA) + column) = cali_word;
}
cmd[0] = MUSTEK_SCSI_SEND_DATA;
@@ -2395,7 +2375,7 @@ send_calibration_lines_se (Mustek_Scanner * s, SANE_Word color)
cmd[7] = (buf_size >> 8) & 0xff;
cmd[8] = (buf_size >> 0) & 0xff;
- status = dev_cmd (s, cmd, buf_size + sizeof (scsi_send_data), 0, 0);
+ status = dev_cmd (s, cmd, buf_size + CDB_SIZE (MUSTEK_SCSI_SEND_DATA), 0, 0);
if (status != SANE_STATUS_GOOD)
{
DBG (1, "send_calibration_lines_se: send failed\n");
@@ -2457,14 +2437,15 @@ send_gamma_table_se (Mustek_Scanner * s)
SANE_Int i, j;
# define CLIP(x) ((x) < 0 ? 0 : ((x) > 255 ? 255 : (x)))
- memset (gamma, 0, sizeof (scsi_send_data));
+ memset (gamma, 0, CDB_SIZE (MUSTEK_SCSI_SEND_DATA));
gamma[0] = MUSTEK_SCSI_SEND_DATA;
gamma[2] = 0x03; /* indicates gamma table */
if ((s->mode & MUSTEK_MODE_GRAY) || (s->mode & MUSTEK_MODE_COLOR))
{
- if (s->hw->gamma_length + sizeof (scsi_send_data) > sizeof (gamma))
+ if ((size_t) s->hw->gamma_length + CDB_SIZE (MUSTEK_SCSI_SEND_DATA)
+ > sizeof (gamma))
return SANE_STATUS_NO_MEM;
gamma[7] = (s->hw->gamma_length >> 8) & 0xff;
gamma[8] = (s->hw->gamma_length >> 0) & 0xff;
@@ -2491,7 +2472,7 @@ send_gamma_table_se (Mustek_Scanner * s)
val_a = MAX (2 * val_b - val_a, 0);
/* Interpolate first entries from 256 entry table */
- cp = gamma + sizeof (scsi_send_data);
+ cp = gamma + CDB_SIZE (MUSTEK_SCSI_SEND_DATA);
for (j = 0; j < factor; j++)
*cp++ = CLIP (((factor - j) * val_a + j * val_b
+ factor / 2) / factor);
@@ -2518,7 +2499,7 @@ send_gamma_table_se (Mustek_Scanner * s)
DBG (5, "send_gamma_table_se: sending table for color %d\n",
gamma[6]);
- status = dev_cmd (s, gamma, sizeof (scsi_send_data)
+ status = dev_cmd (s, gamma, CDB_SIZE (MUSTEK_SCSI_SEND_DATA)
+ s->hw->gamma_length, 0, 0);
++color;
}
@@ -2535,7 +2516,7 @@ send_gamma_table_se (Mustek_Scanner * s)
DBG (5, "send_gamma_table_se: sending lineart threshold %2X\n",
gamma[8]);
- return dev_cmd (s, gamma, sizeof (scsi_send_data), 0, 0);
+ return dev_cmd (s, gamma, CDB_SIZE (MUSTEK_SCSI_SEND_DATA), 0, 0);
}
}
@@ -4656,7 +4637,7 @@ output_data (Mustek_Scanner * s, FILE * fp,
SANE_Int y, num_lines;
DBG (5, "output_data: data=%p, lpb=%d, bpl=%d, extra=%p\n",
- data, lines_per_buffer, bpl, extra);
+ (void *) data, lines_per_buffer, bpl, (void *) extra);
/* convert to pixel-interleaved format: */
if ((s->mode & MUSTEK_MODE_COLOR)