| /* sane - Scanner Access Now Easy. |
| Copyright (C) 1997-1999 David Mosberger-Tang and Andreas Beck |
| This file is part of the SANE package. |
| |
| This file is in the public domain. You may use and modify it as |
| you see fit, as long as this copyright message is included and |
| that there is an indication as to what modifications have been |
| made (if any). |
| |
| SANE is distributed in the hope that it will be useful, but WITHOUT |
| ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| FITNESS FOR A PARTICULAR PURPOSE. |
| |
| This file declares SANE application interface. See the SANE |
| standard for a detailed explanation of the interface. */ |
| #ifndef sane_h |
| #define sane_h |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| /* |
| * SANE types and defines |
| */ |
| |
| #define SANE_CURRENT_MAJOR 1 |
| #define SANE_CURRENT_MINOR 0 |
| |
| #define SANE_VERSION_CODE(major, minor, build) \ |
| ( (((SANE_Word) (major) & 0xff) << 24) \ |
| | (((SANE_Word) (minor) & 0xff) << 16) \ |
| | (((SANE_Word) (build) & 0xffff) << 0)) |
| |
| #define SANE_VERSION_MAJOR(code) ((((SANE_Word)(code)) >> 24) & 0xff) |
| #define SANE_VERSION_MINOR(code) ((((SANE_Word)(code)) >> 16) & 0xff) |
| #define SANE_VERSION_BUILD(code) ((((SANE_Word)(code)) >> 0) & 0xffff) |
| |
| #define SANE_FALSE 0 |
| #define SANE_TRUE 1 |
| |
| typedef unsigned char SANE_Byte; |
| typedef int SANE_Word; |
| typedef SANE_Word SANE_Bool; |
| typedef SANE_Word SANE_Int; |
| typedef char SANE_Char; |
| typedef SANE_Char *SANE_String; |
| typedef const SANE_Char *SANE_String_Const; |
| typedef void *SANE_Handle; |
| typedef SANE_Word SANE_Fixed; |
| |
| #define SANE_FIXED_SCALE_SHIFT 16 |
| #define SANE_FIX(v) ((SANE_Word) ((v) * (1 << SANE_FIXED_SCALE_SHIFT))) |
| #define SANE_UNFIX(v) ((double)(v) / (1 << SANE_FIXED_SCALE_SHIFT)) |
| |
| typedef enum |
| { |
| SANE_STATUS_GOOD = 0, /* everything A-OK */ |
| SANE_STATUS_UNSUPPORTED, /* operation is not supported */ |
| SANE_STATUS_CANCELLED, /* operation was cancelled */ |
| SANE_STATUS_DEVICE_BUSY, /* device is busy; try again later */ |
| SANE_STATUS_INVAL, /* data is invalid (includes no dev at open) */ |
| SANE_STATUS_EOF, /* no more data available (end-of-file) */ |
| SANE_STATUS_JAMMED, /* document feeder jammed */ |
| SANE_STATUS_NO_DOCS, /* document feeder out of documents */ |
| SANE_STATUS_COVER_OPEN, /* scanner cover is open */ |
| SANE_STATUS_IO_ERROR, /* error during device I/O */ |
| SANE_STATUS_NO_MEM, /* out of memory */ |
| SANE_STATUS_ACCESS_DENIED /* access to resource has been denied */ |
| } |
| SANE_Status; |
| |
| /* following are for later sane version, older frontends wont support */ |
| #if 0 |
| #define SANE_STATUS_WARMING_UP 12 /* lamp not ready, please retry */ |
| #define SANE_STATUS_HW_LOCKED 13 /* scanner mechanism locked for transport */ |
| #endif |
| |
| typedef enum |
| { |
| SANE_TYPE_BOOL = 0, |
| SANE_TYPE_INT, |
| SANE_TYPE_FIXED, |
| SANE_TYPE_STRING, |
| SANE_TYPE_BUTTON, |
| SANE_TYPE_GROUP |
| } |
| SANE_Value_Type; |
| |
| typedef enum |
| { |
| SANE_UNIT_NONE = 0, /* the value is unit-less (e.g., # of scans) */ |
| SANE_UNIT_PIXEL, /* value is number of pixels */ |
| SANE_UNIT_BIT, /* value is number of bits */ |
| SANE_UNIT_MM, /* value is millimeters */ |
| SANE_UNIT_DPI, /* value is resolution in dots/inch */ |
| SANE_UNIT_PERCENT, /* value is a percentage */ |
| SANE_UNIT_MICROSECOND /* value is micro seconds */ |
| } |
| SANE_Unit; |
| |
| typedef struct |
| { |
| SANE_String_Const name; /* unique device name */ |
| SANE_String_Const vendor; /* device vendor string */ |
| SANE_String_Const model; /* device model name */ |
| SANE_String_Const type; /* device type (e.g., "flatbed scanner") */ |
| } |
| SANE_Device; |
| |
| #define SANE_CAP_SOFT_SELECT (1 << 0) |
| #define SANE_CAP_HARD_SELECT (1 << 1) |
| #define SANE_CAP_SOFT_DETECT (1 << 2) |
| #define SANE_CAP_EMULATED (1 << 3) |
| #define SANE_CAP_AUTOMATIC (1 << 4) |
| #define SANE_CAP_INACTIVE (1 << 5) |
| #define SANE_CAP_ADVANCED (1 << 6) |
| |
| #define SANE_OPTION_IS_ACTIVE(cap) (((cap) & SANE_CAP_INACTIVE) == 0) |
| #define SANE_OPTION_IS_SETTABLE(cap) (((cap) & SANE_CAP_SOFT_SELECT) != 0) |
| |
| #define SANE_INFO_INEXACT (1 << 0) |
| #define SANE_INFO_RELOAD_OPTIONS (1 << 1) |
| #define SANE_INFO_RELOAD_PARAMS (1 << 2) |
| |
| typedef enum |
| { |
| SANE_CONSTRAINT_NONE = 0, |
| SANE_CONSTRAINT_RANGE, |
| SANE_CONSTRAINT_WORD_LIST, |
| SANE_CONSTRAINT_STRING_LIST |
| } |
| SANE_Constraint_Type; |
| |
| typedef struct |
| { |
| SANE_Word min; /* minimum (element) value */ |
| SANE_Word max; /* maximum (element) value */ |
| SANE_Word quant; /* quantization value (0 if none) */ |
| } |
| SANE_Range; |
| |
| typedef struct |
| { |
| SANE_String_Const name; /* name of this option (command-line name) */ |
| SANE_String_Const title; /* title of this option (single-line) */ |
| SANE_String_Const desc; /* description of this option (multi-line) */ |
| SANE_Value_Type type; /* how are values interpreted? */ |
| SANE_Unit unit; /* what is the (physical) unit? */ |
| SANE_Int size; |
| SANE_Int cap; /* capabilities */ |
| |
| SANE_Constraint_Type constraint_type; |
| union |
| { |
| const SANE_String_Const *string_list; /* NULL-terminated list */ |
| const SANE_Word *word_list; /* first element is list-length */ |
| const SANE_Range *range; |
| } |
| constraint; |
| } |
| SANE_Option_Descriptor; |
| |
| typedef enum |
| { |
| SANE_ACTION_GET_VALUE = 0, |
| SANE_ACTION_SET_VALUE, |
| SANE_ACTION_SET_AUTO |
| } |
| SANE_Action; |
| |
| typedef enum |
| { |
| SANE_FRAME_GRAY, /* band covering human visual range */ |
| SANE_FRAME_RGB, /* pixel-interleaved red/green/blue bands */ |
| SANE_FRAME_RED, /* red band only */ |
| SANE_FRAME_GREEN, /* green band only */ |
| SANE_FRAME_BLUE /* blue band only */ |
| } |
| SANE_Frame; |
| |
| /* push remaining types down to match existing backends */ |
| /* these are to be exposed in a later version of SANE */ |
| /* most front-ends will require updates to understand them */ |
| #if 0 |
| #define SANE_FRAME_TEXT 0x0A /* backend specific textual data */ |
| #define SANE_FRAME_JPEG 0x0B /* complete baseline JPEG file */ |
| #define SANE_FRAME_G31D 0x0C /* CCITT Group 3 1-D Compressed (MH) */ |
| #define SANE_FRAME_G32D 0x0D /* CCITT Group 3 2-D Compressed (MR) */ |
| #define SANE_FRAME_G42D 0x0E /* CCITT Group 4 2-D Compressed (MMR) */ |
| |
| #define SANE_FRAME_IR 0x0F /* bare infrared channel */ |
| #define SANE_FRAME_RGBI 0x10 /* red+green+blue+infrared */ |
| #define SANE_FRAME_GRAYI 0x11 /* gray+infrared */ |
| #define SANE_FRAME_XML 0x12 /* undefined schema */ |
| #endif |
| |
| typedef struct |
| { |
| SANE_Frame format; |
| SANE_Bool last_frame; |
| SANE_Int bytes_per_line; |
| SANE_Int pixels_per_line; |
| SANE_Int lines; |
| SANE_Int depth; |
| } |
| SANE_Parameters; |
| |
| struct SANE_Auth_Data; |
| |
| #define SANE_MAX_USERNAME_LEN 128 |
| #define SANE_MAX_PASSWORD_LEN 128 |
| |
| typedef void (*SANE_Auth_Callback) (SANE_String_Const resource, |
| SANE_Char *username, |
| SANE_Char *password); |
| |
| extern SANE_Status sane_init (SANE_Int * version_code, |
| SANE_Auth_Callback authorize); |
| extern void sane_exit (void); |
| extern SANE_Status sane_get_devices (const SANE_Device *** device_list, |
| SANE_Bool local_only); |
| extern SANE_Status sane_open (SANE_String_Const devicename, |
| SANE_Handle * handle); |
| extern void sane_close (SANE_Handle handle); |
| extern const SANE_Option_Descriptor * |
| sane_get_option_descriptor (SANE_Handle handle, SANE_Int option); |
| extern SANE_Status sane_control_option (SANE_Handle handle, SANE_Int option, |
| SANE_Action action, void *value, |
| SANE_Int * info); |
| extern SANE_Status sane_get_parameters (SANE_Handle handle, |
| SANE_Parameters * params); |
| extern SANE_Status sane_start (SANE_Handle handle); |
| extern SANE_Status sane_read (SANE_Handle handle, SANE_Byte * data, |
| SANE_Int max_length, SANE_Int * length); |
| extern void sane_cancel (SANE_Handle handle); |
| extern SANE_Status sane_set_io_mode (SANE_Handle handle, |
| SANE_Bool non_blocking); |
| extern SANE_Status sane_get_select_fd (SANE_Handle handle, |
| SANE_Int * fd); |
| extern SANE_String_Const sane_strstatus (SANE_Status status); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| |
| #endif /* sane_h */ |