summaryrefslogtreecommitdiff
path: root/src/xf86Calcomp.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/xf86Calcomp.h')
-rw-r--r--src/xf86Calcomp.h146
1 files changed, 146 insertions, 0 deletions
diff --git a/src/xf86Calcomp.h b/src/xf86Calcomp.h
new file mode 100644
index 0000000..a3787fc
--- /dev/null
+++ b/src/xf86Calcomp.h
@@ -0,0 +1,146 @@
+/*
+ * Copyright (c) 2000-2001 Martin Kroeker (mk@daveg.com)
+ * code derived from sample driver
+ * Copyright (c) 1998 Metro Link Incorporated
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+ * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Except as contained in this notice, the name of the Metro Link shall not be
+ * used in advertising or otherwise to promote the sale, use or other dealings
+ * in this Software without prior written authorization from Metro Link.
+ *
+ */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/input/calcomp/xf86Calcomp.h,v 1.2 2001/10/28 03:33:55 tsi Exp $ */
+
+#ifndef _CALCOMP_H_
+#define _CALCOMP_H_
+
+/******************************************************************************
+ * Definitions
+ * structs, typedefs, #defines, enums
+ *****************************************************************************/
+#define CALCOMP_PACKET_SIZE 5
+#define CALCOMP_INIT_CHECKSUM 0
+#define CALCOMP_BODY_LEN 6
+
+
+
+/*************************************************************************/
+#define SYSCALL(call) while(((call) == -1) && (errno == EINTR))
+
+#define DB_COMM_SETUP "\033%C1N81\r" /* Serial communication setup */
+#define DB_FIRMID "\033%__V\r" /* Request firmware ID string */
+#define DB_PRODID "\033%__p\r" /* Request product ID string */
+#define DB_CONFIG "\033%VS\r" /* Send configuration (max coords) */
+
+#define DB_ABSOLUTE "\033%IR\r" /* Absolute mode */
+#define DB_RELATIVE "\033%IT\r" /* Relative mode */
+
+#define DB_UPPER_ORIGIN "\033%L1\r" /* Origin upper left */
+#define DB_1000LPI "\033%JR1000,0\r" /* 1000 lines per inch */
+
+#define DB_PROMPT_MODE "\033%Q?\r" /* Prompt mode (untested!) */
+#define DB_STREAM_MODE "\033%IR\r" /* Stream mode */
+#define DB_XINCREMENT "\033%X1\r"
+#define DB_YINCREMENT "\033%Y1\r" /* Set increment to 1 */
+#define DB_BINARY_FMT "\033%^23\r" /* Calcomp binary mode */
+#define DB_PRESSURE_OFF "\033%VA0\r" /* Select button or pressure */
+#define DB_PRESSURE_ON "\033%VA1\r" /* reporting */
+#define DB_PROMPT "?" /* Prompt for current position */
+
+#define PHASING_BIT 0x80
+#define PROXIMITY_BIT 0x20
+#define BUTTON_BITS 0x7c
+#define COORD_BITS 0x7f
+#define tcflush(fd, n) xf86FlushInput((fd))
+#undef read
+#define read(a,b,c) xf86ReadSerial((a),(b),(c))
+#undef write
+#define write(a,b,c) xf86WriteSerial((a),(char*)(b),(c))
+#undef close
+#define close(a) xf86CloseSerial((a))
+
+/*************************************************************************/
+typedef enum
+{
+ CALCOMP_normal, /*CALCOMP_type,*/ CALCOMP_body, CALCOMP_checksum
+}
+CALCOMPState;
+
+#define WORD_ASSEMBLY(byte1, byte2) (((byte2) << 8) | (byte1))
+
+typedef struct _CALCOMPPrivateRec
+{
+ int min_x; /* Minimum x reported by calibration */
+ int max_x; /* Maximum x */
+ int min_y; /* Minimum y reported by calibration */
+ int max_y; /* Maximum y */
+ int min_z;
+ int max_z;
+ int button_threshold; /* Z > button threshold = button click */
+ int pressure; /* 0 or 1, do we need pressure info */
+ int axes;
+ int prox; /* Proximity */
+ int x,y; /* x,y values */
+ int buttons; /* button state */
+ Bool button_down; /* is the "button" currently down */
+ int button_number; /* which button to report */
+ int reporting_mode; /* TS_Raw or TS_Scaled */
+
+ int untouch_delay; /* Delay before reporting an untouch (in ms) */
+ int report_delay; /* Delay between touch report packets */
+
+ int screen_num; /* Screen associated with the device */
+ int screen_width; /* Width of the associated X screen */
+ int screen_height; /* Height of the screen */
+ XISBuffer *buffer;
+ unsigned char packet[CALCOMP_PACKET_SIZE]; /* packet being/just read */
+ int packeti; /* index into packet */
+ unsigned char checksum; /* Current checksum of data in assembly *
+ * buffer */
+ CALCOMPState lex_mode;
+}
+CALCOMPPrivateRec, *CALCOMPPrivatePtr;
+
+/******************************************************************************
+ * Declarations
+ *****************************************************************************/
+#ifdef XFree86LOADER
+static MODULESETUPPROTO( CalcompSetupProc );
+#endif
+/*static void TearDownProc (pointer p);*/
+static Bool DeviceControl (DeviceIntPtr, int);
+static Bool DeviceOn (DeviceIntPtr);
+static Bool DeviceOff (DeviceIntPtr);
+static Bool DeviceClose (DeviceIntPtr);
+static Bool DeviceInit (DeviceIntPtr);
+static void ReadInput (LocalDevicePtr);
+static void ControlProc (DeviceIntPtr, PtrCtrl *);
+static int ChangeControlProc (LocalDevicePtr, xDeviceCtl *);
+static void CloseProc (LocalDevicePtr);
+static int SwitchMode (ClientPtr, DeviceIntPtr, int);
+static Bool ConvertProc (LocalDevicePtr, int, int, int, int, int, int, int, int, int *, int *);
+static Bool QueryHardware (int , CALCOMPPrivatePtr);
+static Bool CALCOMPGetPacket (CALCOMPPrivatePtr priv);
+static char * xf86CalWriteAndRead(int, char *, char *, int , int );
+static InputInfoPtr CalcompPreInit(InputDriverPtr, IDevPtr, int) ;
+/*
+ * DO NOT PUT ANYTHING AFTER THIS ENDIF
+ */
+#endif