summaryrefslogtreecommitdiff
path: root/backend/kvs20xx_cmd.h
diff options
context:
space:
mode:
Diffstat (limited to 'backend/kvs20xx_cmd.h')
-rw-r--r--backend/kvs20xx_cmd.h128
1 files changed, 128 insertions, 0 deletions
diff --git a/backend/kvs20xx_cmd.h b/backend/kvs20xx_cmd.h
new file mode 100644
index 0000000..c18b754
--- /dev/null
+++ b/backend/kvs20xx_cmd.h
@@ -0,0 +1,128 @@
+#ifndef __KVS20XX_CMD_H
+#define __KVS20XX_CMD_H
+
+/*
+ Copyright (C) 2008, Panasonic Russia Ltd.
+ Copyright (C) 2010, m. allan noah
+*/
+/*
+ Panasonic KV-S20xx USB-SCSI scanners.
+*/
+
+#define COMMAND_BLOCK 1
+#define DATA_BLOCK 2
+#define RESPONSE_BLOCK 3
+
+#define COMMAND_CODE 0x9000
+#define DATA_CODE 0xb000
+#define RESPONSE_CODE 0xa000
+#define STATUS_SIZE 4
+
+struct bulk_header
+{
+ u32 length;
+ u16 type;
+ u16 code;
+ u32 transaction_id;
+};
+
+#define TEST_UNIT_READY 0x00
+#define INQUIRY 0x12
+#define SET_WINDOW 0x24
+#define SCAN 0x1B
+#define SEND_10 0x2A
+#define READ_10 0x28
+#define REQUEST_SENSE 0x03
+#define GET_BUFFER_STATUS 0x34
+#define SET_TIMEOUT 0xE1
+#define GET_ADJUST_DATA 0xE0
+#define GOOD 0
+#define CHECK_CONDITION 2
+
+typedef enum
+{
+ CMD_NONE = 0,
+ CMD_IN = 0x81, /* scanner to pc */
+ CMD_OUT = 0x02 /* pc to scanner */
+} CMD_DIRECTION; /* equals to endpoint address */
+
+#define RESPONSE_SIZE 0x12
+#define MAX_CMD_SIZE 12
+struct cmd
+{
+ unsigned char cmd[MAX_CMD_SIZE];
+ int cmd_size;
+ void *data;
+ int data_size;
+ int dir;
+};
+struct response
+{
+ int status;
+ unsigned char data[RESPONSE_SIZE];
+};
+
+#define END_OF_MEDIUM (1<<6)
+#define INCORRECT_LENGTH_INDICATOR (1<<5)
+static const struct
+{
+ unsigned sense, asc, ascq;
+ SANE_Status st;
+} s_errors[] =
+{
+ {
+ 0, 0, 0, SANE_STATUS_GOOD},
+ {
+ 2, 0, 0, SANE_STATUS_DEVICE_BUSY},
+ {
+ 2, 4, 1, SANE_STATUS_DEVICE_BUSY},
+ {
+ 2, 4, 0x80, SANE_STATUS_COVER_OPEN},
+ {
+ 2, 4, 0x81, SANE_STATUS_COVER_OPEN},
+ {
+ 2, 4, 0x82, SANE_STATUS_COVER_OPEN},
+ {
+ 2, 4, 0x83, SANE_STATUS_COVER_OPEN},
+ {
+ 2, 4, 0x84, SANE_STATUS_COVER_OPEN},
+ {
+ 2, 0x80, 1, SANE_STATUS_CANCELLED},
+ {
+ 2, 0x80, 2, SANE_STATUS_CANCELLED},
+ {
+ 3, 0x3a, 0, SANE_STATUS_NO_DOCS},
+ {
+ 3, 0x80, 1, SANE_STATUS_JAMMED},
+ {
+ 3, 0x80, 2, SANE_STATUS_JAMMED},
+ {
+ 3, 0x80, 3, SANE_STATUS_JAMMED},
+ {
+ 3, 0x80, 4, SANE_STATUS_JAMMED},
+ {
+ 3, 0x80, 5, SANE_STATUS_JAMMED},
+ {
+ 3, 0x80, 6, SANE_STATUS_JAMMED},
+ {
+ 3, 0x80, 7, SANE_STATUS_JAMMED},
+ {
+ 3, 0x80, 8, SANE_STATUS_JAMMED},
+ {
+3, 0x80, 9, SANE_STATUS_JAMMED},};
+
+SANE_Status kvs20xx_scan (struct scanner *s);
+SANE_Status kvs20xx_test_unit_ready (struct scanner *s);
+SANE_Status kvs20xx_set_timeout (struct scanner *s, int timeout);
+SANE_Status kvs20xx_set_window (struct scanner *s, int wnd_id);
+SANE_Status kvs20xx_reset_window (struct scanner *s);
+SANE_Status kvs20xx_read_picture_element (struct scanner *s, unsigned side,
+ SANE_Parameters * p);
+SANE_Status kvs20xx_read_image_data (struct scanner *s, unsigned page,
+ unsigned side, void *buf,
+ unsigned max_size, unsigned *size);
+SANE_Status kvs20xx_document_exist (struct scanner *s);
+SANE_Status get_adjust_data (struct scanner *s, unsigned *dummy_length);
+SANE_Status kvs20xx_sense_handler (int fd, u_char * sense_buffer, void *arg);
+
+#endif /*__KVS20XX_CMD_H*/