1 /*
2 Copyright (C) 2008, Panasonic Russia Ltd.
3 */
4 /* sane - Scanner Access Now Easy.
5 Panasonic KV-S1020C / KV-S1025C USB scanners.
6 */
7
8 #ifndef KVS1025_CMDS_H
9 #define KVS1025_CMDS_H
10
11 /* Commands supported by the KV-S1020C / KV-S1025C scanner. */
12 #define SCSI_TEST_UNIT_READY 0x00
13 #define SCSI_INQUIRY 0x12
14 #define SCSI_SET_WINDOW 0x24
15 #define SCSI_SCAN 0x1B
16 #define SCSI_SEND_10 0x2A
17 #define SCSI_READ_10 0x28
18 #define SCSI_REQUEST_SENSE 0x03
19 #define SCSI_GET_BUFFER_STATUS 0x34
20 #define SCSI_SET_TIMEOUT 0xE1
21
22 typedef enum
23 {
24 KV_CMD_NONE = 0,
25 KV_CMD_IN = 0x81, /* scanner to pc */
26 KV_CMD_OUT = 0x02 /* pc to scanner */
27 } KV_CMD_DIRECTION; /* equals to endpoint address */
28
29 typedef struct
30 {
31 KV_CMD_DIRECTION direction;
32 unsigned char cdb[12];
33 int cdb_size;
34 int data_size;
35 void *data;
36 } KV_CMD_HEADER, *PKV_CMD_HEADER;
37
38 #define KV_CMD_TIMEOUT 10000
39
40 static inline int
getbitfield(unsigned char * pageaddr,int mask,int shift)41 getbitfield (unsigned char *pageaddr, int mask, int shift)
42 {
43 return ((*pageaddr >> shift) & mask);
44 }
45
46 /* defines for request sense return block */
47 #define get_RS_information_valid(b) getbitfield(b + 0x00, 1, 7)
48 #define get_RS_error_code(b) getbitfield(b + 0x00, 0x7f, 0)
49 #define get_RS_filemark(b) getbitfield(b + 0x02, 1, 7)
50 #define get_RS_EOM(b) getbitfield(b + 0x02, 1, 6)
51 #define get_RS_ILI(b) getbitfield(b + 0x02, 1, 5)
52 #define get_RS_sense_key(b) getbitfield(b + 0x02, 0x0f, 0)
53 #define get_RS_information(b) getnbyte(b+0x03, 4)
54 #define get_RS_additional_length(b) b[0x07]
55 #define get_RS_ASC(b) b[0x0c]
56 #define get_RS_ASCQ(b) b[0x0d]
57 #define get_RS_SKSV(b) getbitfield(b+0x0f,1,7)
58
59 typedef enum
60 {
61 KV_SUCCESS = 0,
62 KV_FAILED = 1,
63 KV_CHK_CONDITION = 2
64 } KV_STATUS;
65
66 typedef struct
67 {
68 KV_STATUS status;
69 unsigned char reserved[16];
70 unsigned char sense[18];
71 } KV_CMD_RESPONSE, *PKV_CMD_RESPONSE;
72
73
74 #endif /*#ifndef KVS1025_CMDS_H */
75