summaryrefslogtreecommitdiff
path: root/backend/hpsj5s.h
diff options
context:
space:
mode:
Diffstat (limited to 'backend/hpsj5s.h')
-rw-r--r--backend/hpsj5s.h102
1 files changed, 102 insertions, 0 deletions
diff --git a/backend/hpsj5s.h b/backend/hpsj5s.h
new file mode 100644
index 0000000..0361acd
--- /dev/null
+++ b/backend/hpsj5s.h
@@ -0,0 +1,102 @@
+#ifndef __HPSJ5S_MIDDLE_LEVEL_API_HEADER__
+#define __HPSJ5S_MIDDLE_LEVEL_API_HEADER__
+
+
+#include <ieee1284.h>
+
+/*Scanner hardware registers*/
+#define REGISTER_FUNCTION_CODE 0x70 /*Here goes function code */
+#define REGISTER_FUNCTION_PARAMETER 0x60 /*Here goes function param */
+
+#define ADDRESS_RESULT 0x20 /*Here we get result */
+
+/*Scanner functions (not all - some of them I cann't identify)*/
+#define FUNCTION_SETUP_HARDWARE 0xA0
+
+/*Scanner hardware control flags:*/
+/*Set this flag and non-zero speed to start rotation*/
+#define FLAGS_HW_MOTOR_READY 0x1
+/*Set this flag to turn on lamp*/
+#define FLAGS_HW_LAMP_ON 0x2
+/*Set this flag to turn indicator lamp off*/
+#define FLAGS_HW_INDICATOR_OFF 0x4
+
+
+/*
+ Types:
+*/
+/*Color modes we support: 1-bit Drawing, 2-bit Halftone, 8-bit Gray Scale, 24-bt True Color*/
+typedef enum
+{ Drawing, Halftone, GrayScale, TrueColor }
+enumColorDepth;
+
+/*Middle-level API:*/
+
+static int OpenScanner (const char *scanner_path);
+
+static void CloseScanner (int handle);
+
+static int DetectScanner (void);
+
+static void StandByScanner (void);
+
+static void SwitchHardwareState (SANE_Byte mask, SANE_Byte invert_mask);
+
+static int CheckPaperPresent (void);
+
+static int ReleasePaper (void);
+
+static int PaperFeed (SANE_Word wLinesToFeed);
+
+static void TransferScanParameters (enumColorDepth enColor,
+ SANE_Word wResolution,
+ SANE_Word wCorrectedLength);
+
+static void TurnOnPaperPulling (enumColorDepth enColor,
+ SANE_Word wResolution);
+
+static void TurnOffPaperPulling (void);
+
+static SANE_Byte GetCalibration (void);
+
+static void CalibrateScanElements (void);
+
+/*Internal-use functions:*/
+
+static int OutputCheck (void);
+static int InputCheck (void);
+static int CallCheck (void);
+static void LoadingPaletteToScanner (void);
+
+/*Low level warappers:*/
+
+static void WriteAddress (SANE_Byte Address);
+
+static void WriteData (SANE_Byte Data);
+
+static void WriteScannerRegister (SANE_Byte Address, SANE_Byte Data);
+
+static void CallFunctionWithParameter (SANE_Byte Function,
+ SANE_Byte Parameter);
+
+static SANE_Byte CallFunctionWithRetVal (SANE_Byte Function);
+
+static SANE_Byte ReadDataByte (void);
+
+static void ReadDataBlock (SANE_Byte * Buffer, int lenght);
+
+/*Daisy chaining API: (should be moved to ieee1284 library in future)*/
+
+/*Deselect all devices in chain on this port.*/
+static void daisy_deselect_all (struct parport *port);
+
+/*Select device with number 'daisy' in 'mode'.*/
+static int daisy_select (struct parport *port, int daisy, int mode);
+
+/*Setup address for device in chain on this port*/
+static int assign_addr (struct parport *port, int daisy);
+
+/* Send a daisy-chain-style CPP command packet. */
+static int cpp_daisy (struct parport *port, int cmd);
+
+#endif