summaryrefslogtreecommitdiff
path: root/include/sane/sane.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/sane/sane.h')
-rw-r--r--include/sane/sane.h248
1 files changed, 248 insertions, 0 deletions
diff --git a/include/sane/sane.h b/include/sane/sane.h
new file mode 100644
index 0000000..5320b4a
--- /dev/null
+++ b/include/sane/sane.h
@@ -0,0 +1,248 @@
+/* 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 */