123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 |
- /*----------------------------------------------------------------------------s
- NAME
- PKTDEF.H
- PURPOSE
- Used to help construct a Wintab PACKETDATA definition the application
- uses to specify what data to receive in a Wintab data packet
- COPYRIGHT
- This file is Copyright (c) Wacom Company, Ltd. 2020 All Rights Reserved
- with portions copyright 1991-1998 by LCS/Telegraphics.
- The text and information contained in this file may be freely used,
- copied, or distributed without compensation or licensing restrictions.
- ---------------------------------------------------------------------------- */
- #pragma once
- /*------------------------------------------------------------------------------
- How to use pktdef.h:
- 1. Include wintab.h
- 2. if using just one packet format:
- a. Define PACKETDATA and PACKETMODE as or'ed combinations of WTPKT bits
- (use the PK_* identifiers).
- b. Include pktdef.h.
- c. The generated structure typedef will be called PACKET. Use PACKETDATA
- and PACKETMODE to fill in the LOGCONTEXT structure.
- 3. If using multiple packet formats, for each one:
- a. Define PACKETNAME. Its text value will be a prefix for this packet's
- parameters and names.
- b. Define <PACKETNAME>PACKETDATA and <PACKETNAME>PACKETMODE similar to
- 2.a. above.
- c. Include pktdef.h.
- d. The generated structure typedef will be called
- <PACKETNAME>PACKET. Compare with 2.c. above and example #2 below.
- 4. If using extension data for extensions that report thier data in the packet,
- do the following additional steps for each extension:
- a. Before including pktdef.h, define <PACKETNAME>PACKET<EXTENSION>
- as either PKEXT_ABSOLUTE or PKEXT_RELATIVE.
- b. The generated structure typedef will contain a field for the
- extension data.
- c. Scan the WTI_EXTENSION categories to find the extension's
- packet mask bit.
- d. OR the packet mask bit with <PACKETNAME>PACKETDATA and use the
- result in the lcPktData field of the LOGCONTEXT structure.
- e. If <PACKETNAME>PACKET<EXTENSION> was PKEXT_RELATIVE, OR the
- packet mask bit with <PACKETNAME>PACKETMODE and use the result
- in the lcPktMode field of the LOGCONTEXT structure.
- 5. If using extension data for extensions that report thier data in the extensions packet,
- do the following additional steps for each extension:
- a. Before including pktdef.h, define <PACKETNAME>PACKET<EXTENSION> as PKEXT_ABSOLUTE.
- b. The generated extension structure typedef will contain a field for the
- extension data.
- c. Call WTExtSet to activate the extention. Use the context id in the WT_PACKETEXT
- message to retrieve the extension data <PACKETNAME>PACKETEXT.
- Example #1. -- single packet format
- #include <wintab.h>
- #define PACKETDATA PK_X | PK_Y | PK_BUTTONS /@ x, y, buttons @/
- #define PACKETMODE PK_BUTTONS /@ buttons relative mode @/
- #include <pktdef.h>
- ...
- lc.lcPktData = PACKETDATA;
- lc.lcPktMode = PACKETMODE;
- Example #2. -- multiple formats
- #include <wintab.h>
- #define PACKETNAME MOE
- #define MOEPACKETDATA PK_X | PK_Y | PK_BUTTONS /@ x, y, buttons @/
- #define MOEPACKETMODE PK_BUTTONS /@ buttons relative mode @/
- #include <pktdef.h>
- #define PACKETNAME LARRY
- #define LARRYPACKETDATA PK_Y | PK_Z | PK_BUTTONS /@ y, z, buttons @/
- #define LARRYPACKETMODE PK_BUTTONS /@ buttons relative mode @/
- #include <pktdef.h>
- #define PACKETNAME CURLY
- #define CURLYPACKETDATA PK_X | PK_Z | PK_BUTTONS /@ x, z, buttons @/
- #define CURLYPACKETMODE PK_BUTTONS /@ buttons relative mode @/
- #include <pktdef.h>
- ...
- lcMOE.lcPktData = MOEPACKETDATA;
- lcMOE.lcPktMode = MOEPACKETMODE;
- ...
- lcLARRY.lcPktData = LARRYPACKETDATA;
- lcLARRY.lcPktMode = LARRYPACKETMODE;
- ...
- lcCURLY.lcPktData = CURLYPACKETDATA;
- lcCURLY.lcPktMode = CURLYPACKETMODE;
- Example #3. -- extension packet data "XFOO".
- #include <wintab.h>
- #define PACKETDATA PK_X | PK_Y | PK_BUTTONS /@ x, y, buttons @/
- #define PACKETMODE PK_BUTTONS /@ buttons relative mode @/
- #define PACKETXFOO PKEXT_ABSOLUTE /@ XFOO absolute mode @/
- #include <pktdef.h>
- ...
- UINT ScanExts(UINT wTag)
- {
- UINT i;
- UINT wScanTag;
- /@ scan for wTag's info category. @/
- for (i = 0; WTInfo(WTI_EXTENSIONS + i, EXT_TAG, &wScanTag); i++) {
- if (wTag == wScanTag) {
- /@ return category offset from WTI_EXTENSIONS. @/
- return i;
- }
- }
- /@ return error code. @/
- return 0xFFFF;
- }
- ...
- lc.lcPktData = PACKETDATA;
- lc.lcPktMode = PACKETMODE;
- #ifdef PACKETXFOO
- categoryXFOO = ScanExts(WTX_XFOO);
- WTInfo(WTI_EXTENSIONS + categoryXFOO, EXT_MASK, &maskXFOO);
- lc.lcPktData |= maskXFOO;
- #if PACKETXFOO == PKEXT_RELATIVE
- lc.lcPktMode |= maskXFOO;
- #endif
- #endif
- WTOpen(hWnd, &lc, TRUE);
- ------------------------------------------------------------------------------*/
- #ifdef __cplusplus
- extern "C" {
- #endif /* __cplusplus */
- #ifndef PACKETNAME
- /* if no packet name prefix */
- #define __PFX(x) x
- #define __IFX(x,y) x ## y
- #else
- /* add prefixes and infixes to packet format names */
- #define __PFX(x) __PFX2(PACKETNAME,x)
- #define __PFX2(p,x) __PFX3(p,x)
- #define __PFX3(p,x) p ## x
- #define __IFX(x,y) __IFX2(x,PACKETNAME,y)
- #define __IFX2(x,i,y) __IFX3(x,i,y)
- #define __IFX3(x,i,y) x ## i ## y
- #endif
- #define __SFX2(x,s) __SFX3(x,s)
- #define __SFX3(x,s) x ## s
- #define __TAG __IFX(tag,PACKET)
- #define __TYPES __PFX(PACKET), * __IFX(P,PACKET), NEAR * __IFX(NP,PACKET), FAR * __IFX(LP,PACKET)
- #define __TAGE __IFX(tag,PACKETEXT)
- #define __TYPESE __PFX(PACKETEXT), * __IFX(P,PACKETEXT), NEAR * __IFX(NP,PACKETEXT), FAR * __IFX(LP,PACKETEXT)
- #define __DATA (__PFX(PACKETDATA))
- #define __MODE (__PFX(PACKETMODE))
- #define __EXT(x) __SFX2(__PFX(PACKET),x)
- typedef struct __TAG {
- #if (__DATA & PK_CONTEXT)
- HCTX pkContext;
- #endif
- #if (__DATA & PK_STATUS)
- UINT pkStatus;
- #endif
- #if (__DATA & PK_TIME)
- DWORD pkTime;
- #endif
- #if (__DATA & PK_CHANGED)
- WTPKT pkChanged;
- #endif
- #if (__DATA & PK_SERIAL_NUMBER)
- UINT pkSerialNumber;
- #endif
- #if (__DATA & PK_CURSOR)
- UINT pkCursor;
- #endif
- #if (__DATA & PK_BUTTONS)
- DWORD pkButtons;
- #endif
- #if (__DATA & PK_X)
- LONG pkX;
- #endif
- #if (__DATA & PK_Y)
- LONG pkY;
- #endif
- #if (__DATA & PK_Z)
- LONG pkZ;
- #endif
- #if (__DATA & PK_NORMAL_PRESSURE)
- #if (__MODE & PK_NORMAL_PRESSURE)
- /* relative */
- int pkNormalPressure;
- #else
- /* absolute */
- UINT pkNormalPressure;
- #endif
- #endif
- #if (__DATA & PK_TANGENT_PRESSURE)
- #if (__MODE & PK_TANGENT_PRESSURE)
- /* relative */
- int pkTangentPressure;
- #else
- /* absolute */
- UINT pkTangentPressure;
- #endif
- #endif
- #if (__DATA & PK_ORIENTATION)
- ORIENTATION pkOrientation;
- #endif
- #if (__DATA & PK_ROTATION)
- ROTATION pkRotation; /* 1.1 */
- #endif
- #ifndef NOWTEXTENSIONS
- /* extensions begin here. */
- #if (__EXT(FKEYS) == PKEXT_RELATIVE) || (__EXT(FKEYS) == PKEXT_ABSOLUTE)
- UINT pkFKeys;
- #endif
- #if (__EXT(TILT) == PKEXT_RELATIVE) || (__EXT(TILT) == PKEXT_ABSOLUTE)
- TILT pkTilt;
- #endif
- #endif
- } __TYPES;
- #ifndef NOWTEXTENSIONS
- typedef struct __TAGE {
- EXTENSIONBASE pkBase;
- #if (__EXT(EXPKEYS) == PKEXT_RELATIVE) || (__EXT(EXPKEYS) == PKEXT_ABSOLUTE)
- EXPKEYSDATA pkExpKeys; /* 1.4 */
- #endif
- #if (__EXT(TOUCHSTRIP) == PKEXT_RELATIVE) || (__EXT(TOUCHSTRIP) == PKEXT_ABSOLUTE)
- SLIDERDATA pkTouchStrip; /* 1.4 */
- #endif
- #if (__EXT(TOUCHRING) == PKEXT_RELATIVE) || (__EXT(TOUCHRING) == PKEXT_ABSOLUTE)
- SLIDERDATA pkTouchRing; /* 1.4 */
- #endif
- } __TYPESE;
- #endif
- #undef PACKETNAME
- #undef __TAG
- #undef __TAGE
- #undef __TAG2
- #undef __TYPES
- #undef __TYPESE
- #undef __TYPES2
- #undef __DATA
- #undef __MODE
- #undef __PFX
- #undef __PFX2
- #undef __PFX3
- #undef __IFX
- #undef __IFX2
- #undef __IFX3
- #undef __SFX2
- #undef __SFX3
- #ifdef __cplusplus
- }
- #endif /* __cplusplus */
|