sane-project-backends/backend/escl/escl.h

147 wiersze
3.9 KiB
C

/* sane - Scanner Access Now Easy.
Copyright (C) 2019 Touboul Nathane
Copyright (C) 2019 Thierry HUCHARD <thierry@ordissimo.com>
This file is part of the SANE package.
SANE is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 3 of the License, or (at your
option) any later version.
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. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with sane; see the file COPYING. If not, write to the Free
Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
This file implements a SANE backend for eSCL scanners. */
#ifndef __ESCL_H__
#define __ESCL_H__
#include "../include/sane/config.h"
#if !(HAVE_LIBCURL && defined(WITH_AVAHI) && defined(HAVE_LIBXML2))
#error "The escl backend requires libcurl, libavahi and libxml2"
#endif
#ifndef HAVE_LIBJPEG
/* FIXME: Make JPEG support optional.
Support for PNG and PDF is to be added later but currently only
JPEG is supported. Absence of JPEG support makes the backend a
no-op at present.
*/
#error "The escl backend currently requires libjpeg"
#endif
#include "../include/sane/sane.h"
#include <stdio.h>
#ifndef BACKEND_NAME
#define BACKEND_NAME escl
#endif
#define ESCL_CONFIG_FILE "escl.conf"
typedef struct {
int p1_0;
int p2_0;
int p3_3;
int DocumentType;
int p4_0;
int p5_0;
int p6_1;
int reserve[11];
} ESCL_SCANOPTS;
typedef struct ESCL_Device {
struct ESCL_Device *next;
char *model_name;
int port_nb;
char *ip_address;
char *type;
} ESCL_Device;
typedef struct capabilities
{
int height;
int width;
int pos_x;
int pos_y;
SANE_String default_color;
SANE_String_Const default_format;
SANE_Int default_resolution;
int MinWidth;
int MaxWidth;
int MinHeight;
int MaxHeight;
int MaxScanRegions;
SANE_String_Const *ColorModes;
int ColorModesSize;
SANE_String_Const *ContentTypes;
int ContentTypesSize;
SANE_String_Const *DocumentFormats;
int DocumentFormatsSize;
SANE_Int *SupportedResolutions;
int SupportedResolutionsSize;
SANE_String_Const *SupportedIntents;
int SupportedIntentsSize;
SANE_String_Const SupportedIntentDefault;
int MaxOpticalXResolution;
int RiskyLeftMargin;
int RiskyRightMargin;
int RiskyTopMargin;
int RiskyBottomMargin;
FILE *tmp;
int format_ext;
} capabilities_t;
typedef struct {
int XRes;
int YRes;
int Left;
int Top;
int Right;
int Bottom;
int ScanMode;
int ScanMethod;
ESCL_SCANOPTS opts;
} ESCL_ScanParam;
enum
{
OPT_NUM_OPTS = 0,
OPT_MODE_GROUP,
OPT_MODE,
OPT_RESOLUTION,
OPT_PREVIEW,
OPT_GRAY_PREVIEW,
OPT_GEOMETRY_GROUP,
OPT_TL_X,
OPT_TL_Y,
OPT_BR_X,
OPT_BR_Y,
NUM_OPTIONS
};
ESCL_Device *escl_devices(SANE_Status *status);
SANE_Status escl_device_add(int port_nb, const char *model_name, char *ip_address, char *type);
SANE_Status escl_status(SANE_String_Const name);
capabilities_t *escl_capabilities(SANE_String_Const name, SANE_Status *status);
char *escl_newjob(capabilities_t *scanner, SANE_String_Const name, SANE_Status *status);
SANE_Status escl_scan(capabilities_t *scanner, SANE_String_Const name, char *result);
void escl_scanner(SANE_String_Const name, char *result);
#endif