• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef __KVS20XX_CMD_H
2 #define __KVS20XX_CMD_H
3 
4 /*
5    Copyright (C) 2008, Panasonic Russia Ltd.
6    Copyright (C) 2010, m. allan noah
7 */
8 /*
9    Panasonic KV-S20xx USB-SCSI scanners.
10 */
11 
12 #ifdef HAVE_SYS_TYPES_H
13 #include <sys/types.h>
14 #endif
15 
16 #define COMMAND_BLOCK	1
17 #define DATA_BLOCK	2
18 #define RESPONSE_BLOCK	3
19 
20 #define COMMAND_CODE	0x9000
21 #define DATA_CODE	0xb000
22 #define RESPONSE_CODE	0xa000
23 #define STATUS_SIZE 4
24 
25 struct bulk_header
26 {
27   u32 length;
28   u16 type;
29   u16 code;
30   u32 transaction_id;
31 };
32 
33 #define TEST_UNIT_READY        0x00
34 #define INQUIRY                0x12
35 #define SET_WINDOW             0x24
36 #define SCAN                   0x1B
37 #define SEND_10                0x2A
38 #define READ_10                0x28
39 #define REQUEST_SENSE          0x03
40 #define GET_BUFFER_STATUS      0x34
41 #define SET_TIMEOUT	    0xE1
42 #define GET_ADJUST_DATA	    0xE0
43 #define GOOD 0
44 #define CHECK_CONDITION 2
45 
46 typedef enum
47 {
48   CMD_NONE = 0,
49   CMD_IN = 0x81,		/* scanner to pc */
50   CMD_OUT = 0x02		/* pc to scanner */
51 } CMD_DIRECTION;		/* equals to endpoint address */
52 
53 #define RESPONSE_SIZE	0x12
54 #define MAX_CMD_SIZE	12
55 struct cmd
56 {
57   unsigned char cmd[MAX_CMD_SIZE];
58   int cmd_size;
59   void *data;
60   int data_size;
61   int dir;
62 };
63 struct response
64 {
65   int status;
66   unsigned char data[RESPONSE_SIZE];
67 };
68 
69 #define END_OF_MEDIUM			(1<<6)
70 #define INCORRECT_LENGTH_INDICATOR	(1<<5)
71 static const struct
72 {
73   unsigned sense, asc, ascq;
74   SANE_Status st;
75 } s_errors[] =
76 {
77   {
78   0, 0, 0, SANE_STATUS_GOOD},
79   {
80   2, 0, 0, SANE_STATUS_DEVICE_BUSY},
81   {
82   2, 4, 1, SANE_STATUS_DEVICE_BUSY},
83   {
84   2, 4, 0x80, SANE_STATUS_COVER_OPEN},
85   {
86   2, 4, 0x81, SANE_STATUS_COVER_OPEN},
87   {
88   2, 4, 0x82, SANE_STATUS_COVER_OPEN},
89   {
90   2, 4, 0x83, SANE_STATUS_COVER_OPEN},
91   {
92   2, 4, 0x84, SANE_STATUS_COVER_OPEN},
93   {
94   2, 0x80, 1, SANE_STATUS_CANCELLED},
95   {
96   2, 0x80, 2, SANE_STATUS_CANCELLED},
97   {
98   3, 0x3a, 0, SANE_STATUS_NO_DOCS},
99   {
100   3, 0x80, 1, SANE_STATUS_JAMMED},
101   {
102   3, 0x80, 2, SANE_STATUS_JAMMED},
103   {
104   3, 0x80, 3, SANE_STATUS_JAMMED},
105   {
106   3, 0x80, 4, SANE_STATUS_JAMMED},
107   {
108   3, 0x80, 5, SANE_STATUS_JAMMED},
109   {
110   3, 0x80, 6, SANE_STATUS_JAMMED},
111   {
112   3, 0x80, 7, SANE_STATUS_JAMMED},
113   {
114   3, 0x80, 8, SANE_STATUS_JAMMED},
115   {
116 3, 0x80, 9, SANE_STATUS_JAMMED},};
117 
118 SANE_Status kvs20xx_scan (struct scanner *s);
119 SANE_Status kvs20xx_test_unit_ready (struct scanner *s);
120 SANE_Status kvs20xx_set_timeout (struct scanner *s, int timeout);
121 SANE_Status kvs20xx_set_window (struct scanner *s, int wnd_id);
122 SANE_Status kvs20xx_reset_window (struct scanner *s);
123 SANE_Status kvs20xx_read_picture_element (struct scanner *s, unsigned side,
124 					  SANE_Parameters * p);
125 SANE_Status kvs20xx_read_image_data (struct scanner *s, unsigned page,
126 				     unsigned side, void *buf,
127 				     unsigned max_size, unsigned *size);
128 SANE_Status kvs20xx_document_exist (struct scanner *s);
129 SANE_Status get_adjust_data (struct scanner *s, unsigned *dummy_length);
130 SANE_Status kvs20xx_sense_handler (int fd, u_char * sense_buffer, void *arg);
131 
132 #endif /*__KVS20XX_CMD_H*/
133