OSDN Git Service

Initial lollipop-x86 porting
[android-x86/device-generic-common.git] / wacom / wactablet.h
diff --git a/wacom/wactablet.h b/wacom/wactablet.h
new file mode 100644 (file)
index 0000000..9dce960
--- /dev/null
@@ -0,0 +1,328 @@
+/*****************************************************************************
+** wactablet.h
+**
+** Copyright (C) 2002 - 2004 - John E. Joganic
+** Copyright (C) 2003 - 2008 - Ping Cheng
+**
+** 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.
+**
+****************************************************************************/
+
+#ifndef __LINUXWACOM_WACTABLET_H
+#define __LINUXWACOM_WACTABLET_H
+
+#include <stdarg.h>
+#include <sys/time.h>
+
+#define WACOMVENDOR_UNKNOWN     0x0000
+#define WACOMVENDOR_WACOM       0x056A
+#define WACOMVENDOR_TPC         0xFFFFFF01
+
+#define WACOMCLASS_SERIAL       0x0001
+#define WACOMCLASS_USB          0x0002
+
+#define WACOMDEVICE_UNKNOWN     0x0000
+#define WACOMDEVICE_ARTPAD      0x0001
+#define WACOMDEVICE_ARTPADII    0x0002
+#define WACOMDEVICE_DIGITIZER   0x0003
+#define WACOMDEVICE_DIGITIZERII 0x0004
+#define WACOMDEVICE_PENPARTNER  0x0005
+#define WACOMDEVICE_GRAPHIRE    0x0006
+#define WACOMDEVICE_GRAPHIRE2   0x0007
+#define WACOMDEVICE_GRAPHIRE3   0x0008
+#define WACOMDEVICE_GRAPHIRE4   0x0009
+#define WACOMDEVICE_INTUOS      0x000A
+#define WACOMDEVICE_INTUOS2     0x000B
+#define WACOMDEVICE_CINTIQ      0x000C
+#define WACOMDEVICE_PTU         0x000D
+#define WACOMDEVICE_VOLITO      0x000E
+#define WACOMDEVICE_VOLITO2     0x000F
+#define WACOMDEVICE_TPC         0x0010
+#define WACOMDEVICE_INTUOS3     0x0011
+#define WACOMDEVICE_CINTIQV5    0x0012
+#define WACOMDEVICE_MO          0x0013
+
+typedef struct _WACOMMODEL WACOMMODEL;
+struct _WACOMMODEL
+{
+       unsigned int uClass;
+       unsigned int uVendor;
+       unsigned int uDevice;
+       unsigned int uSubType;
+};
+
+#define WACOMTOOLTYPE_NONE      0x00
+#define WACOMTOOLTYPE_PEN       0x01
+#define WACOMTOOLTYPE_PENCIL    0x02
+#define WACOMTOOLTYPE_BRUSH     0x03
+#define WACOMTOOLTYPE_ERASER    0x04
+#define WACOMTOOLTYPE_AIRBRUSH  0x05
+#define WACOMTOOLTYPE_MOUSE     0x06
+#define WACOMTOOLTYPE_LENS      0x07
+#define WACOMTOOLTYPE_PAD       0x08
+#define WACOMTOOLTYPE_TOUCH    0x09
+#define WACOMTOOLTYPE_MAX       0x0A
+
+#define WACOMBUTTON_LEFT        0
+#define WACOMBUTTON_MIDDLE      1
+#define WACOMBUTTON_RIGHT       2
+#define WACOMBUTTON_EXTRA       3
+#define WACOMBUTTON_SIDE        4
+#define WACOMBUTTON_TOUCH       5
+#define WACOMBUTTON_STYLUS      6
+#define WACOMBUTTON_STYLUS2     7
+#define WACOMBUTTON_BT0         8
+#define WACOMBUTTON_BT1         9
+#define WACOMBUTTON_BT2         10
+#define WACOMBUTTON_BT3         11
+#define WACOMBUTTON_BT4         12
+#define WACOMBUTTON_BT5         13
+#define WACOMBUTTON_BT6         14
+#define WACOMBUTTON_BT7         15
+#define WACOMBUTTON_BT8         16
+#define WACOMBUTTON_BT9         17
+#define WACOMBUTTON_BT10        18
+#define WACOMBUTTON_BT11        19
+#define WACOMBUTTON_BT12        20
+#define WACOMBUTTON_BT13        21
+#define WACOMBUTTON_BT14        22
+#define WACOMBUTTON_BT15        23
+#define WACOMBUTTON_BT16        24
+#define WACOMBUTTON_BT17        25
+#define WACOMBUTTON_BT18        26
+#define WACOMBUTTON_BT19        27
+#define WACOMBUTTON_BT20        28
+#define WACOMBUTTON_BT21        29
+#define WACOMBUTTON_BT22        30
+#define WACOMBUTTON_BT23        31
+#define WACOMBUTTON_MAX         32
+
+#define WACOMFIELD_TOOLTYPE     0
+#define WACOMFIELD_SERIAL       1
+#define WACOMFIELD_PROXIMITY    2
+#define WACOMFIELD_BUTTONS      3
+#define WACOMFIELD_POSITION_X   4
+#define WACOMFIELD_POSITION_Y   5
+#define WACOMFIELD_ROTATION_Z   6
+#define WACOMFIELD_DISTANCE    7
+#define WACOMFIELD_PRESSURE    8
+#define WACOMFIELD_TILT_X       9
+#define WACOMFIELD_TILT_Y       10
+#define WACOMFIELD_ABSWHEEL     11
+#define WACOMFIELD_RELWHEEL     12
+#define WACOMFIELD_THROTTLE     13
+#define WACOMFIELD_MAX          14
+
+typedef struct
+{
+       int nValue;
+       int nMin;
+       int nMax;
+       int nReserved;
+} WACOMVALUE;
+
+typedef struct
+{
+       unsigned int uValueCnt;     /* This MUST be set to WACOMFIELD_MAX. */
+       unsigned int uValid;        /* Bit mask of WACOMFIELD_xxx bits. */
+       WACOMVALUE values[WACOMFIELD_MAX];
+} WACOMSTATE;
+
+#define WACOMSTATE_INIT { WACOMFIELD_MAX }
+
+typedef struct
+{
+       const char* pszName;
+       const char* pszDesc;
+       unsigned int uDeviceClass;
+} WACOMCLASSREC;
+
+typedef struct
+{
+       const char* pszName;
+       const char* pszDesc;
+       const char* pszVendorName;
+       const char* pszVendorDesc;
+       const char* pszClass;
+       WACOMMODEL model;
+} WACOMDEVICEREC;
+
+typedef enum
+{
+       WACOMLOGLEVEL_NONE,
+       WACOMLOGLEVEL_CRITICAL,
+       WACOMLOGLEVEL_ERROR,
+       WACOMLOGLEVEL_WARN,
+       WACOMLOGLEVEL_INFO,
+       WACOMLOGLEVEL_DEBUG,
+       WACOMLOGLEVEL_TRACE,
+       WACOMLOGLEVEL_MAX
+} WACOMLOGLEVEL;
+
+typedef void (*WACOMLOGFUNC)(struct timeval tv, WACOMLOGLEVEL level,
+       const char* pszLog);
+
+/*****************************************************************************
+** Public structures
+*****************************************************************************/
+
+typedef struct { int __unused; } *WACOMENGINE;
+typedef struct { int __unused; } *WACOMTABLET;
+
+/*****************************************************************************
+** Public API
+*****************************************************************************/
+
+       WACOMENGINE WacomInitEngine(void);
+       /* Initialize the tablet engine */
+
+       void WacomTermEngine(WACOMENGINE hEngine);
+       /* Shutdown the tablet engine */
+
+       void WacomSetLogFunc(WACOMENGINE hEngine, WACOMLOGFUNC pfnLog);
+       void WacomSetLogLevel(WACOMENGINE hEngine, WACOMLOGLEVEL level);
+       void WacomLogV(WACOMENGINE hEngine, WACOMLOGLEVEL level,
+                       const char* pszFmt, va_list args);
+       void WacomLog(WACOMENGINE hEngine, WACOMLOGLEVEL level,
+                       const char* pszFmt, ...);
+       /* Logging functions. Default log function does nothing. */
+
+       int WacomGetSupportedClassList(WACOMCLASSREC** ppList, int* pnSize);
+       /* Returns 0 on success.  Pointer to class record list is returned to
+        * ppList, and size of list to pnSize.  Use WacomFreeList to release. */
+
+       int WacomGetSupportedDeviceList(unsigned int uDeviceClass,
+                       WACOMDEVICEREC** ppList, int* pnSize);
+       /* Returns 0 on success.  If device class is specified, only devices
+        * of the request type are returned.  A value of 0 will return all
+        * devices for all classes.  Pointer to device record list is returned to
+        * ppList, and size of list to pnSize.  Use WacomFreeList to release. */
+
+       void WacomFreeList(void* pvList);
+       /* Releases list memory. */
+
+       int WacomCopyState(WACOMSTATE* pDest, WACOMSTATE* pSrc);
+       /* Returns 0 on success.  Copies tablet state structures.
+        * Source and destination structures must be properly initialized,
+        * particularly the uValueCnt field must be set WACOMFIELD_MAX.
+        * Returns 0 on success. */
+
+       unsigned int WacomGetClassFromName(const char* pszName);
+       /* Returns the device class for a given name. Returns 0, if unknown. */
+
+       unsigned int WacomGetDeviceFromName(const char* pszName,
+                       unsigned int uDeviceClass);
+       /* Returns the device type for a given device name.  If the
+        * device class is specified, only that class will be searched.
+        * Returns 0, if unknown. */
+
+       WACOMTABLET WacomOpenTablet(WACOMENGINE hEngine,
+               const char* pszDevice, WACOMMODEL* pModel);
+       /* Returns tablet handle on success, NULL otherwise.
+        * pszDevice is pathname to device.  Model may be NULL; if any model
+        * parameters are 0, detection is automatic. */
+
+       void WacomCloseTablet(WACOMTABLET hTablet);
+       /* Releases all resource associated with tablet and closes device. */
+
+       WACOMMODEL WacomGetModel(WACOMTABLET hTablet);
+       /* Returns model (vendor, class, and device) of specified tablet. */
+
+       const char* WacomGetVendorName(WACOMTABLET hTablet);
+       /* Returns vendor name as human-readable string.  String is valid as
+        * long as tablet handle is valid and does not need to be freed. */
+
+       const char* WacomGetClassName(WACOMTABLET hTablet);
+       /* Returns class name as human-readable string.  String is valid as
+        * long as tablet handle is valid and does not need to be freed. */
+
+       const char* WacomGetDeviceName(WACOMTABLET hTablet);
+       /* Returns device name as human-readable string.  String is valid as
+        * long as tablet handle is valid and does not need to be freed. */
+
+       const char* WacomGetSubTypeName(WACOMTABLET hTablet);
+       /* Returns subtype name as human-readable string.  This is typically
+        * the model number (eg. ABC-1234).  String is valid as long as tablet
+        * handle is valid and does not need to be freed. */
+
+       const char* WacomGetModelName(WACOMTABLET hTablet);
+       /* Returns model name as human-readable string.  This is typically
+        * the full model name (eg. FooCo FooModel 9x12).  String is valid as
+        * long as tablet handle is valid and does not need to be freed. */
+
+       int WacomGetROMVersion(WACOMTABLET hTablet, int* pnMajor, int* pnMinor,
+                       int* pnRelease);
+       /* Returns 0 on success.  ROM version of the tablet firmware is returned
+        * in major, minor, and release values.  If the caller needs to
+        * distinguish between ROM versions to work around a bug, please consider
+        * submitting a patch to this library.  All tablets should appear
+        * equivalent through this interface. This call is provided for
+        * information purposes. */
+
+       int WacomGetCapabilities(WACOMTABLET hTablet);
+       /* Returns bitmask of valid fields.  Use (1 << WACOMFIELD_xxx) to
+        * translate field identifiers to bit positions.  This API will only
+        * support 32 capabilities. */
+
+       int WacomGetState(WACOMTABLET hTablet, WACOMSTATE* pState);
+       /* Returns 0 on success.  Tablet state is copied to specified structure.
+        * Data is only a snapshot of the device and may not accurately reflect
+        * the position of any specific tool. This is particularly true of
+        * multi-tool mode tablets.  NOTE: pState must point to an initialized
+        * structure; the uValueCnt field must be correctly set to
+        * WACOMFIELD_MAX. */
+
+       int WacomGetFileDescriptor(WACOMTABLET hTablet);
+       /* Returns the file descriptor of the tablet or -1 on error. */
+
+       int WacomReadRaw(WACOMTABLET hTablet, unsigned char* puchData,
+                       unsigned int uSize);
+       /* Returns number of bytes read, typically a single packet.  Call will
+        * block.  uSize should be the maximum size of the given data buffer. */
+
+       int WacomParseData(WACOMTABLET hTablet, const unsigned char* puchData,
+                       unsigned int uLength, WACOMSTATE* pState);
+       /* Updates the tablet state from a given packet.  If pState is specified,
+        * the tablet state is copied to the given structure.  This structure
+        * must be correctly initialized; the uValueCnt member must be set to
+        * WACOMFIELD_MAX. Returns 0 on success. */
+
+/*****************************************************************************
+** Private structures
+*****************************************************************************/
+
+typedef struct _WACOMTABLET_PRIV WACOMTABLET_PRIV;
+
+struct _WACOMTABLET_PRIV
+{
+       void (*Close)(WACOMTABLET_PRIV* pTablet);
+       WACOMMODEL (*GetModel)(WACOMTABLET_PRIV* pTablet);
+       const char* (*GetVendorName)(WACOMTABLET_PRIV* pTablet);
+       const char* (*GetClassName)(WACOMTABLET_PRIV* pTablet);
+       const char* (*GetDeviceName)(WACOMTABLET_PRIV* pTablet);
+       const char* (*GetSubTypeName)(WACOMTABLET_PRIV* pTablet);
+       const char* (*GetModelName)(WACOMTABLET_PRIV* pTablet);
+       int (*GetROMVer)(WACOMTABLET_PRIV* pTablet, int* pnMajor, int* pnMinor,
+               int* pnRelease);
+       int (*GetCaps)(WACOMTABLET_PRIV* pTablet);
+       int (*GetState)(WACOMTABLET_PRIV* pTablet, WACOMSTATE* pState);
+       int (*GetFD)(WACOMTABLET_PRIV* pTablet);
+       int (*ReadRaw)(WACOMTABLET_PRIV* pTablet, unsigned char* puchData,
+                       unsigned int uSize);
+       int (*ParseData)(WACOMTABLET_PRIV* pTablet, const unsigned char* puchData,
+                       unsigned int uLength, WACOMSTATE* pState);
+};
+
+#endif /* __LINUXWACOM_WACTABLET_H */