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