kopia lustrzana https://gitlab.com/sane-project/backends
276 wiersze
8.2 KiB
C
276 wiersze
8.2 KiB
C
#ifndef _HP5400_INTERNAL_H_
|
|
#define _HP5400_INTERNAL_H_
|
|
|
|
/* sane - Scanner Access Now Easy.
|
|
(C) 2003 Thomas Soumarmon <thomas.soumarmon@cogitae.net>
|
|
(c) 2003 Martijn van Oosterhout, kleptog@svana.org
|
|
(c) 2002 Bertrik Sikken, bertrik@zonnet.nl
|
|
|
|
This file is part of the SANE package.
|
|
|
|
This program 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 2 of the
|
|
License, or (at your option) any later version.
|
|
|
|
This program 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 this program; if not, write to the Free Software
|
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston,
|
|
MA 02111-1307, USA.
|
|
|
|
As a special exception, the authors of SANE give permission for
|
|
additional uses of the libraries contained in this release of SANE.
|
|
|
|
The exception is that, if you link a SANE library with other files
|
|
to produce an executable, this does not by itself cause the
|
|
resulting executable to be covered by the GNU General Public
|
|
License. Your use of that executable is in no way restricted on
|
|
account of linking the SANE library code into it.
|
|
|
|
This exception does not, however, invalidate any other reasons why
|
|
the executable file might be covered by the GNU General Public
|
|
License.
|
|
|
|
If you submit changes to SANE to the maintainers to be included in
|
|
a subsequent release, you agree by submitting the changes that
|
|
those changes may be distributed with this exception intact.
|
|
|
|
If you write modifications of your own for SANE, it is your choice
|
|
whether to permit this exception to apply to your modifications.
|
|
If you do not wish that, delete this exception notice.
|
|
|
|
HP5400/5470 Test util.
|
|
Currently is only able to read back the scanner version string,
|
|
but this basically demonstrates ability to communicate with the scanner.
|
|
|
|
Massively expanded. Can do calibration scan, upload gamma and calibration
|
|
tables and stores the results of a scan. - 19/02/2003 Martijn
|
|
*/
|
|
|
|
|
|
#ifdef __GNUC__
|
|
#define PACKED __attribute__ ((packed))
|
|
#else
|
|
#define PACKED
|
|
#endif
|
|
|
|
/* If this is enabled, a copy of the raw data from the scanner will be saved to
|
|
imagedebug.dat and the attempted conversion to imagedebug.ppm */
|
|
/* #define IMAGE_DEBUG */
|
|
|
|
/* If this is defined you get extra info on the calibration */
|
|
/* #define CALIB_DEBUG */
|
|
|
|
#define CMD_GETVERSION 0x1200
|
|
#define CMD_GETUITEXT 0xf00b
|
|
#define CMD_GETCMDID 0xc500
|
|
#define CMD_SCANREQUEST 0x2505 /* This is for previews */
|
|
#define CMD_SCANREQUEST2 0x2500 /* This is for real scans */
|
|
#define CMD_SCANRESPONSE 0x3400
|
|
|
|
/* Testing stuff to make it work */
|
|
#define CMD_SETDPI 0x1500 /* ??? */
|
|
#define CMD_STOPSCAN 0x1B01 /* 0x40 = lamp in on, 0x00 = lamp is off */
|
|
#define CMD_STARTSCAN 0x1B05 /* 0x40 = lamp in on, 0x00 = lamp is off */
|
|
#define CMD_UNKNOWN 0x2300 /* Send fixed string */
|
|
#define CMD_UNKNOWN2 0xD600 /* ??? Set to 0x04 */
|
|
#define CMD_UNKNOWN3 0xC000 /* ??? Set to 02 03 03 3C */
|
|
#define CMD_SETOFFSET 0xE700 /* two ints in network order. X-offset, Y-offset of full scan */
|
|
/* Given values seem to be 0x0054 (=4.57mm) and 0x0282 (=54.36mm) */
|
|
|
|
#define CMD_INITBULK1 0x0087 /* send 0x14 */
|
|
#define CMD_INITBULK2 0x0083 /* send 0x24 */
|
|
#define CMD_INITBULK3 0x0082 /* transfer length 0xf000 */
|
|
|
|
|
|
struct ScanRequest
|
|
{
|
|
u_int8_t x1; /* Set to 0x08 */
|
|
u_int16_t dpix, dpiy; /* Set to 75, 150 or 300 in network order */
|
|
u_int16_t offx, offy; /* Offset to scan, in 1/300th of dpi, in network order */
|
|
u_int16_t lenx, leny; /* Size of scan, in 1/300th of dpi, in network order */
|
|
u_int16_t flags1, flags2, flags3; /* Undetermined flag info */
|
|
/* Known combinations are:
|
|
1st calibration scan: 0x0000, 0x0010, 0x1820 = 24bpp
|
|
2nd calibration scan: 0x0000, 0x0010, 0x3020 = 48bpp ???
|
|
3rd calibration scan: 0x0000, 0x0010, 0x3024 = 48bpp ???
|
|
Preview scan: 0x0080, 0x0000, 0x18E8 = 8bpp
|
|
4th & 5th like 2nd and 3rd
|
|
B&W scan: 0x0080, 0x0040, 0x08E8 = 8bpp
|
|
6th & 7th like 2nd and 3rd
|
|
True colour scan 0x0080, 0x0040, 0x18E8 = 24bpp
|
|
*/
|
|
u_int8_t zero; /* Seems to always be zero */
|
|
u_int16_t gamma[3]; /* Set to 100 in network order. Gamma? */
|
|
u_int16_t pad[3]; /* Zero padding ot 32 bytes??? */
|
|
}
|
|
PACKED;
|
|
|
|
/* More known combos (All 24-bit):
|
|
300 x 300 light calibration: 0x0000, 0x0010, 0x1820
|
|
300 x 300 dark calibration: 0x0000, 0x0010, 0x3024
|
|
75 x 75 preview scan: 0x0080, 0x0000, 0x18E8
|
|
300 x 300 full scan: 0x0080, 0x0000, 0x18E8
|
|
600 x 300 light calibration: 0x0000, 0x0010, 0x3000
|
|
600 x 300 dark calibration: 0x0000, 0x0010, 0x3004
|
|
600 x 600 full scan: 0x0080, 0x0000, 0x18C8
|
|
1200 x 300 light calibration: 0x0000, 0x0010, 0x3000
|
|
1200 x 300 dark calibration: 0x0000, 0x0010, 0x3004
|
|
1200 x 1200 full scan: 0x0080, 0x0000, 0x18C8
|
|
2400 x 300 light calibration: 0x0000, 0x0010, 0x3000
|
|
2400 x 300 dark calibration: 0x0000, 0x0010, 0x3004
|
|
2400 x 2400 full scan: 0x0080, 0x0000, 0x18C0
|
|
*/
|
|
|
|
struct ScanResponse
|
|
{
|
|
u_int16_t x1; /* Usually 0x0000 or 0x4000 */
|
|
u_int32_t transfersize; /* Number of bytes to be transferred */
|
|
u_int32_t xsize; /* Shape of returned bitmap */
|
|
u_int16_t ysize; /* Why does the X get more bytes? */
|
|
u_int16_t pad[2]; /* Zero padding to 16 bytes??? */
|
|
}
|
|
PACKED;
|
|
|
|
HP5400_SANE_STATIC
|
|
int
|
|
InitScan2 (enum ScanType type, struct ScanRequest *req,
|
|
THWParams * pHWParams, struct ScanResponse *res,
|
|
int iColourOffset, int code);
|
|
|
|
HP5400_SANE_STATIC
|
|
void
|
|
FinishScan (THWParams * pHWParams);
|
|
|
|
HP5400_SANE_STATIC
|
|
int
|
|
WriteByte (int iHandle, int cmd, char data);
|
|
|
|
HP5400_SANE_STATIC
|
|
int
|
|
SetLamp (THWParams * pHWParams, int fLampOn);
|
|
|
|
HP5400_SANE_STATIC
|
|
int
|
|
WarmupLamp (int iHandle);
|
|
|
|
HP5400_SANE_STATIC
|
|
int
|
|
SetCalibration (int iHandle, int numPixels,
|
|
unsigned int *low_vals[3],
|
|
unsigned int *high_vals[3], int dpi);
|
|
|
|
HP5400_SANE_STATIC
|
|
void
|
|
WriteGammaCalibTable (int iHandle, const int *pabGammaR,
|
|
const int *pabGammaG,
|
|
const int *pabGammaB);
|
|
#ifdef STANDALONE
|
|
HP5400_SANE_STATIC
|
|
void
|
|
SetDefaultGamma (int iHandle);
|
|
#endif
|
|
|
|
HP5400_SANE_STATIC
|
|
void
|
|
CircBufferInit (int iHandle, TDataPipe * p, int iBytesPerLine,
|
|
int bpp, int iMisAlignment, int blksize,
|
|
int iTransferSize);
|
|
|
|
HP5400_SANE_STATIC
|
|
int
|
|
CircBufferGetLine (int iHandle, TDataPipe * p, void *pabLine);
|
|
|
|
HP5400_SANE_STATIC
|
|
void
|
|
CircBufferExit (TDataPipe * p);
|
|
|
|
#ifdef STANDALONE
|
|
HP5400_SANE_STATIC
|
|
void
|
|
DecodeImage (FILE * file, int planes, int bpp, int xsize, int ysize,
|
|
const char *filename);
|
|
|
|
HP5400_SANE_STATIC
|
|
int
|
|
hp5400_test_scan_response (struct ScanResponse *resp,
|
|
struct ScanRequest *req);
|
|
#endif
|
|
|
|
|
|
HP5400_SANE_STATIC
|
|
int
|
|
DoAverageScan (int iHandle, struct ScanRequest *req, int code,
|
|
unsigned int **array);
|
|
|
|
#ifdef STANDALONE
|
|
HP5400_SANE_STATIC
|
|
int
|
|
DoScan (int iHandle, struct ScanRequest *req, const char *filename, int code,
|
|
struct ScanResponse *res);
|
|
#endif
|
|
|
|
HP5400_SANE_STATIC
|
|
int
|
|
Calibrate (int iHandle, int dpi);
|
|
|
|
#ifdef STANDALONE
|
|
HP5400_SANE_STATIC
|
|
int
|
|
hp5400_scan (int iHandle, TScanParams * params, THWParams * pHWParams,
|
|
const char *filename);
|
|
|
|
HP5400_SANE_STATIC
|
|
int
|
|
PreviewScan (int iHandle);
|
|
|
|
HP5400_SANE_STATIC
|
|
int
|
|
InitScanner (int iHandle);
|
|
#endif
|
|
|
|
HP5400_SANE_STATIC
|
|
int
|
|
InitScan (enum ScanType scantype, TScanParams * pParams,
|
|
THWParams * pHWParams);
|
|
|
|
HP5400_SANE_STATIC
|
|
void
|
|
FinishScan (THWParams * pHWParams);
|
|
|
|
HP5400_SANE_STATIC
|
|
int
|
|
HP5400Open (THWParams * params, const char *filename);
|
|
|
|
HP5400_SANE_STATIC
|
|
void
|
|
HP5400Close (THWParams * params);
|
|
|
|
HP5400_SANE_STATIC
|
|
int
|
|
HP5400Detect (const char *filename,
|
|
int (*_ReportDevice) (TScannerModel * pModel,
|
|
const char *pszDeviceName));
|
|
|
|
|
|
HP5400_SANE_STATIC
|
|
int
|
|
InitHp5400_internal( void );
|
|
|
|
HP5400_SANE_STATIC
|
|
int
|
|
FreeHp5400_internal( void );
|
|
|
|
|
|
#ifdef STANDALONE
|
|
int
|
|
main (int argc, char *argv[]);
|
|
#endif
|
|
|
|
#endif
|