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 22typedef 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 29typedef 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 40static inline int 41getbitfield (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 59typedef enum 60{ 61 KV_SUCCESS = 0, 62 KV_FAILED = 1, 63 KV_CHK_CONDITION = 2 64} KV_STATUS; 65 66typedef 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