| 
									
										
										
										
											2010-06-09 20:31:00 +00:00
										 |  |  | #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. | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-15 03:35:00 +00:00
										 |  |  | #ifdef HAVE_SYS_TYPES_H
 | 
					
						
							|  |  |  | #include <sys/types.h>
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-06-09 20:31:00 +00:00
										 |  |  | #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},}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-08 02:56:14 +00:00
										 |  |  | SANE_Status kvs20xx_scan (struct scanner *s); | 
					
						
							| 
									
										
										
										
											2012-08-08 02:01:35 +00:00
										 |  |  | 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); | 
					
						
							| 
									
										
										
										
											2010-06-09 20:31:00 +00:00
										 |  |  | SANE_Status get_adjust_data (struct scanner *s, unsigned *dummy_length); | 
					
						
							| 
									
										
										
										
											2012-08-08 02:01:35 +00:00
										 |  |  | SANE_Status kvs20xx_sense_handler (int fd, u_char * sense_buffer, void *arg); | 
					
						
							| 
									
										
										
										
											2010-06-09 20:31:00 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #endif /*__KVS20XX_CMD_H*/
 |