[BACK]Return to qduser.h CVS log [TXT][DIR] Up to [local] / sys / arch / vax / qbus

Annotation of sys/arch/vax/qbus/qduser.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: qduser.h,v 1.4 2006/01/17 20:26:16 miod Exp $ */
                      2: /*     $NetBSD: qduser.h,v 1.1 1998/03/21 10:02:39 ragge Exp $ */
                      3: /*-
                      4:  * Copyright (c) 1982, 1986 The Regents of the University of California.
                      5:  * All rights reserved.
                      6:  *
                      7:  * Redistribution and use in source and binary forms, with or without
                      8:  * modification, are permitted provided that the following conditions
                      9:  * are met:
                     10:  * 1. Redistributions of source code must retain the above copyright
                     11:  *    notice, this list of conditions and the following disclaimer.
                     12:  * 2. Redistributions in binary form must reproduce the above copyright
                     13:  *    notice, this list of conditions and the following disclaimer in the
                     14:  *    documentation and/or other materials provided with the distribution.
                     15:  * 3. Neither the name of the University nor the names of its contributors
                     16:  *    may be used to endorse or promote products derived from this software
                     17:  *    without specific prior written permission.
                     18:  *
                     19:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
                     20:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     21:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     22:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
                     23:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     24:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     25:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     26:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     27:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     28:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     29:  * SUCH DAMAGE.
                     30:  *
                     31:  *     @(#)qduser.h    7.1 (Berkeley) 5/9/91
                     32:  */
                     33:
                     34: /* derived from: @(#)qduser.h  6.1     (ULTRIX)        11/24/87       */
                     35: /************************************************************************
                     36:  *                                                                     *
                     37:  *                     Copyright (c) 1986 by                           *
                     38:  *             Digital Equipment Corporation, Maynard, MA              *
                     39:  *                     All rights reserved.                            *
                     40:  *                                                                     *
                     41:  *   This software is furnished under a license and may be used and    *
                     42:  *   copied  only  in accordance with the terms of such license and    *
                     43:  *   with the  inclusion  of  the  above  copyright  notice.   This    *
                     44:  *   software  or  any  other copies thereof may not be provided or    *
                     45:  *   otherwise made available to any other person.  No title to and    *
                     46:  *   ownership of the software is hereby transferred.                  *
                     47:  *                                                                     *
                     48:  *   The information in this software is subject to change  without    *
                     49:  *   notice  and should not be construed as a commitment by Digital    *
                     50:  *   Equipment Corporation.                                            *
                     51:  *                                                                     *
                     52:  *   Digital assumes no responsibility for the use  or  reliability    *
                     53:  *   of its software on equipment which is not supplied by Digital.    *
                     54:  *                                                                     *
                     55:  ************************************************************************/
                     56:
                     57: /***************************************************************************
                     58: *
                     59: *      QDUSER...
                     60: *      This file defines values shared between the driver and a client
                     61: *
                     62: ***************************************************************************/
                     63:
                     64: /***************************************************************************
                     65: *      revision history:
                     66: ****************************************************************************
                     67: *
                     68: * 21 jul 86  ram    fixed define of CURSOR_MIN_Y
                     69: * 25 nov 85  longo  added macro and bit defines for DMA error flags
                     70: * 11 nov 85  longo  renamed _vs_eventqueue to "qdinput" struct
                     71: * 23 oct 85  longo  added more defines to the DMA stuff
                     72: * 17 oct 85  longo  changed "struct rgb" chars to be unsigned
                     73: * 16 oct 85  longo  added new TABLET support definitions
                     74: * 15 oct 85  longo  re-wrote DMA queue access macros
                     75: * 08 oct 85  longo  added status flag manipulation macros to DMA stuff
                     76: * 02 oct 85  longo  added support for color map write buffer loading
                     77: * 26 sep 85  longo  removed adder sertup params from DMA request struct
                     78: * 23 sep 85  longo  added DMA queue access macros
                     79: * 30 aug 85  longo  fixed crock in "qdiobuf" struct compile-time sizing. Also
                     80: *                  removed DMAcontrol struct from DMA buffer for field test
                     81: * 26 aug 85  longo  put in conditional include of "qevent.h" for user prg's
                     82: * 18 jul 85  longo  changed semantics so that head is tail and tail is head
                     83: * 12 jul 85  longo  moved "mouse_report" struct and defs over to qd_data.c
                     84: * 11 jul 85  longo  added device coordinate to gate array cursor coordinate
                     85: *                  transformation macros
                     86: * 03 jul 85  longo  changed kernel typdef's for data types to long-hand
                     87: * 10 may 85  longo  created
                     88: *
                     89: ***************************************************************************/
                     90:
                     91: #include <vax/uba/qevent.h>
                     92:
                     93: /*---------------------
                     94: * QDSS device map */
                     95:
                     96:        struct qdmap {                  /* map of register blocks in QDSS */
                     97:
                     98:            char *template;
                     99:            char *adder;
                    100:            char *dga;
                    101:            char *duart;
                    102:            char *memcsr;
                    103:            char *red;
                    104:            char *blue;
                    105:            char *green;
                    106:        };
                    107:
                    108: /*--------------------------------------------
                    109: * DGA CSR bit definitions and register map */
                    110:
                    111: #define DMADONE                0x8000          /* DMA done status */
                    112: #define SET_DONE_FIFO  0x4000          /* set DMADONE when FIFO empty.. */
                    113:                                        /* ..AND count = 0 */
                    114:
                    115: #define PTOB_ENB       0x0600          /* host-to-bitmap DMA xfer */
                    116: #define BTOP_ENB       0x0400          /* bitmap-to-host DMA xfer */
                    117: #define DL_ENB         0x0200          /* display list DMA xfer */
                    118: #define HALT           0x0000          /* halt DGA */
                    119:
                    120: #define BYTE_DMA       0x0100          /* byte/word DMA xfer */
                    121:
                    122: #define DMA_ERR                0x0080          /* DMA error bits */
                    123: #define PARITY_ERR     0x0040          /* memory parity error in DMA */
                    124: #define BUS_ERR                0x0020          /* bus timeout error in DMA */
                    125:
                    126: #define GLOBAL_IE      0x0004          /* global interrupt enable */
                    127: #define DMA_IE         0x0002          /* DMA interrupt enable */
                    128: #define CURS_ENB       0x0001          /* cursor enable */
                    129:
                    130: /* QDSS memcsr bit definitions */
                    131:
                    132: #define        UNBLANK                 0x0020
                    133: #define SYNC_ON                        0x0008
                    134:
                    135:        struct dga {
                    136:
                    137:            unsigned short csr;
                    138:            unsigned short adrs_lo;     /* destination address of bitmap to */
                    139:            unsigned short adrs_hi;     /*   host DMA */
                    140:            unsigned short bytcnt_lo;   /* byte length of requested DMA */
                    141:            unsigned short bytcnt_hi;   /* (WO = bytcnt) (RO = fifo count) */
                    142:            unsigned short fifo;        /* FIFO register */
                    143:            unsigned short x_cursor;    /* cursor position registers */
                    144:            unsigned short y_cursor;
                    145:            unsigned short ivr;         /* interrupt vector register */
                    146:            unsigned short memadr;      /* memory base address register */
                    147:        };
                    148:
                    149: /*-------------------------------------------------------------------------
                    150: * macros to transform device coordinates to hardware cursor coordinates */
                    151:
                    152: #define CURS_MIN_X     232     /* device coordinate x = 0 */
                    153: #define CURS_MIN_Y     16      /* device coordinate y = 0 */
                    154:
                    155: #define TRANX(x) ( -(((int)(x)+CURS_MIN_X) & ~0x0003) | \
                    156:                   (((int)(x)+CURS_MIN_X) & 0x0003) )
                    157:
                    158: #define TRANY(y) ( -((y)+CURS_MIN_Y) )
                    159:
                    160: /*********************************************************************
                    161: *
                    162: *      EVENT QUEUE DEFINITIONS
                    163: *
                    164: **********************************************************************
                    165: * most of the event queue definitions are found in "qevent.h".  But a
                    166: * few things not found there are here.  */
                    167:
                    168: /* The event queue header */
                    169:
                    170: struct qdinput {
                    171:
                    172:            struct _vs_eventqueue header;  /* event queue ring handling */
                    173:
                    174:            /* for VS100 and QVSS compatibility reasons, additions to this
                    175:            *  structure must be made below this point.  */
                    176:
                    177:            struct _vs_cursor curs_pos; /* current mouse position */
                    178:            struct _vs_box curs_box;    /* cursor reporting box */
                    179:
                    180:        };
                    181:
                    182: /* vse_key field.  definitions for mouse buttons */
                    183:
                    184: #define VSE_LEFT_BUTTON                0
                    185: #define VSE_MIDDLE_BUTTON      1
                    186: #define VSE_RIGHT_BUTTON       2
                    187:
                    188: /* vse_key field.  definitions for mouse buttons */
                    189:
                    190: #define VSE_T_LEFT_BUTTON      0
                    191: #define VSE_T_FRONT_BUTTON     1
                    192: #define VSE_T_RIGHT_BUTTON     2
                    193: #define VSE_T_BACK_BUTTON      4
                    194:
                    195: #define VSE_T_BARREL_BUTTON    VSE_T_LEFT_BUTTON
                    196: #define VSE_T_TIP_BUTTON       VSE_T_FRONT_BUTTON
                    197:
                    198: /*--------------------------------------------------------------------------
                    199: *   These are the macros to be used for loading and extracting from the event
                    200: * queue.  It is presumed that the macro user will only use the access macros
                    201: * if the event queue is non-empty ( ISEMPTY(eq) == FALSE ), and that the
                    202: * driver will only load the event queue after checking that it is not full
                    203: * ( ISFULL(eq) == FALSE ).  ("eq" is a pointer to the event queue header.)
                    204: *
                    205: *   Before an event access session for a particular event, the macro users
                    206: * must use the xxxBEGIN macro, and the xxxEND macro after an event is through
                    207: * with.  As seen below, the xxxBEGIN and xxxEND macros maintain the event
                    208: * queue access mechanism.
                    209: *
                    210: * First, the macros to be used by the event queue reader
                    211: */
                    212:
                    213: #define ISEMPTY(eq)      ((eq)->header.head == (eq)->header.tail)
                    214: #define GETBEGIN(eq)     (&(eq)->header.events[(eq)->header.head])
                    215:
                    216: #define GET_X(event)     ((event)->vse_x)           /* get x position */
                    217: #define GET_Y(event)     ((event)->vse_y)           /* get y position */
                    218: #define GET_TIME(event)          ((event)->vse_time)        /* get time */
                    219: #define GET_TYPE(event)          ((event)->vse_type)        /* get entry type */
                    220: #define GET_KEY(event)   ((event)->vse_key)         /* get keycode */
                    221: #define GET_DIR(event)   ((event)->vse_direction)     /* get direction */
                    222: #define GET_DEVICE(event) ((event)->vse_device)        /* get device */
                    223:
                    224: #define GETEND(eq)        (++(eq)->header.head >= (eq)->header.size ? \
                    225:                           (eq)->header.head = 0 : 0 )
                    226:
                    227: /*------------------------------------------------
                    228: * macros to be used by the event queue loader  */
                    229:
                    230:        /* ISFULL yields TRUE if queue is full */
                    231:
                    232: #define ISFULL(eq)     ((eq)->header.tail+1 == (eq)->header.head ||   \
                    233:                         ((eq)->header.tail+1 == (eq)->header.size &&  \
                    234:                          (eq)->header.head == 0))
                    235:
                    236:        /* get address of the billet for NEXT event */
                    237:
                    238: #define PUTBEGIN(eq)   (&(eq)->header.events[(eq)->header.tail])
                    239:
                    240: #define PUT_X(event, value)    ((event)->vse_x = value)    /* put X pos */
                    241: #define PUT_Y(event, value)    ((event)->vse_y = value)    /* put Y pos */
                    242: #define PUT_TIME(event, value) ((event)->vse_time = value)   /* put time */
                    243: #define PUT_TYPE(event, value) ((event)->vse_type = value) /* put type */
                    244: #define PUT_KEY(event, value)  ((event)->vse_key = value) /* put input key */
                    245: #define PUT_DIR(event, value)  ((event)->vse_direction = value) /* put dir */
                    246: #define PUT_DEVICE(event, value) ((event)->vse_device = value)   /* put dev */
                    247:
                    248: #define PUTEND(eq)     (++(eq)->header.tail >= (eq)->header.size ?  \
                    249:                        (eq)->header.tail = 0 : 0)
                    250:
                    251: /******************************************************************
                    252: *
                    253: *      DMA I/O DEFINITIONS
                    254: *
                    255: ******************************************************************/
                    256:
                    257: /*---------------------------------------------------------------------
                    258: * The DMA request queue is implemented as a ring buffer of "DMAreq"
                    259:   structures.  The queue is accessed using ring indices located in the
                    260:   "DMAreq_header" structure.  Access is implemented using access macros
                    261:   similar to the event queue access macros above.  */
                    262:
                    263:        struct DMAreq {
                    264:
                    265:            short DMAtype;              /* DMA type code (for QDSS) */
                    266:            short DMAdone;              /* DMA done parameter */
                    267:            char  *bufp;                /* virtual adrs of buffer */
                    268:            int   length;               /* transfer buffer length */
                    269:        };
                    270:
                    271: /* DMA type command codes */
                    272:
                    273: #define DISPLIST       1       /* display list DMA */
                    274: #define PTOB           2       /* 1 plane Qbus to bitmap DMA */
                    275: #define BTOP           3       /* 1 plane bitmap to Qbus DMA */
                    276:
                    277: /* DMA done notification code */
                    278:
                    279: #define FIFO_EMPTY     0x01    /* DONE when FIFO becomes empty */
                    280: #define COUNT_ZERO     0x02    /* DONE when count becomes zero */
                    281: #define WORD_PACK      0x04    /* program the gate array for word packing */
                    282: #define BYTE_PACK      0x08    /* program gate array for byte packing */
                    283: #define REQUEST_DONE   0x100   /* clear when driver has processed request */
                    284: #define HARD_ERROR     0x200   /* DMA hardware error occurred */
                    285:
                    286: /* DMA request queue is a ring buffer of request structures */
                    287:
                    288:        struct DMAreq_header {
                    289:
                    290:            int QBAreg;             /* cookie Qbus map reg for this buffer */
                    291:            short status;           /* master DMA status word */
                    292:            int shared_size;        /* size of shared memory in bytes */
                    293:            struct DMAreq *DMAreq;  /* start address of request queue */
                    294:            int used;               /* # of queue entries currently used */
                    295:            int size;               /* # of "DMAreq"'s in the request queue */
                    296:            int oldest;             /* index to oldest queue'd request */
                    297:            int newest;             /* index to newest queue'd request */
                    298:        };
                    299:
                    300: /* bit definitions for DMAstatus word in DMAreq_header */
                    301:
                    302: #define        DMA_ACTIVE      0x0004          /* DMA in progress */
                    303: #define DMA_ERROR      0x0080          /* DMA hardware error */
                    304: #define DMA_IGNORE     0x0002          /* flag to ignore this interrupt */
                    305:
                    306: /*------------------------------------------
                    307: * macros for DMA request queue fiddling  */
                    308:
                    309:        /* DMA status set/check macros */
                    310:
                    311: #define DMA_SETACTIVE(header)   ((header)->status |= DMA_ACTIVE)
                    312: #define DMA_CLRACTIVE(header)  ((header)->status &= ~DMA_ACTIVE)
                    313: #define DMA_ISACTIVE(header)    ((header)->status & DMA_ACTIVE)
                    314:
                    315: #define DMA_SETERROR(header)    ((header)->status |= DMA_ERROR)
                    316: #define DMA_CLRERROR(header)    ((header)->status &= ~DMA_ERROR)
                    317: #define DMA_ISERROR(header)     ((header)->status & DMA_ERROR)
                    318:
                    319: #define DMA_SETIGNORE(header)  ((header)->status |= DMA_IGNORE)
                    320: #define DMA_CLRIGNORE(header)   ((header)->status &= ~DMA_IGNORE)
                    321: #define DMA_ISIGNORE(header)    ((header)->status & DMA_IGNORE)
                    322:
                    323:        /* yields TRUE if queue is empty (ISEMPTY) or full (ISFULL) */
                    324:
                    325: #define DMA_ISEMPTY(header)    ((header)->used == 0)
                    326: #define DMA_ISFULL(header)     ((header)->used >= (header)->size)
                    327:
                    328:        /* returns address of the billet for next (PUT)
                    329:         * or oldest (GET) request */
                    330:
                    331: #define DMA_PUTBEGIN(header)   (&(header)->DMAreq[(header)->newest])
                    332: #define DMA_GETBEGIN(header)   (&(header)->DMAreq[(header)->oldest])
                    333:
                    334:        /* does queue access pointer maintenance */
                    335:
                    336: #define DMA_GETEND(header)      (++(header)->oldest >= (header)->size    \
                    337:                                  ? (header)->oldest = 0 : 0);           \
                    338:                                --(header)->used;
                    339:
                    340: #define DMA_PUTEND(header)             (++(header)->newest >= (header)->size    \
                    341:                                  ? (header)->newest = 0 : 0);           \
                    342:                                ++(header)->used;
                    343:
                    344: /******************************************************************
                    345: *
                    346: *      COLOR MAP WRITE BUFFER DEFINITIONS
                    347: *
                    348: ******************************************************************/
                    349:
                    350:        struct rgb {
                    351:
                    352:            unsigned char offset;       /* color map address for load */
                    353:            unsigned char red;          /* data for red map */
                    354:            unsigned char green;        /* data for green map */
                    355:            unsigned char blue;         /* data for blue map */
                    356:        };
                    357:
                    358:        struct color_buf {
                    359:
                    360:            char status;                /* load request/service status */
                    361:            short count;                /* number of entries to br loaded */
                    362:            struct rgb rgb[256];
                    363:        };
                    364:
                    365: #define LOAD_COLOR_MAP 0x0001
                    366:
                    367: /******************************************************************
                    368: *
                    369: *      SCROLL ASSIST DEFINITIONS
                    370: *
                    371: ******************************************************************/
                    372:
                    373:        struct scroll {
                    374:
                    375:            short status;
                    376:            short viper_constant;
                    377:            short y_scroll_constant;
                    378:            short y_offset;
                    379:            short x_index_pending;
                    380:            short y_index_pending;
                    381:        };
                    382:
                    383: #define LOAD_REGS      0x0001
                    384: #define LOAD_INDEX     0x0002
                    385:
                    386: /******************************************************************
                    387: *
                    388: *      MOUSE/TABLET/KBD PROGRAMMING DEFINITIONS
                    389: *
                    390: ******************************************************************/
                    391:
                    392: /*-----------------------------------
                    393: * LK201 programmming definitions  */
                    394:
                    395: #define LK_UPDOWN      0x86            /* bits for setting lk201 modes */
                    396: #define LK_AUTODOWN    0x82
                    397: #define LK_DOWN        0x80
                    398: #define LK_DEFAULTS    0xD3            /* reset (some) default settings */
                    399: #define LK_AR_ENABLE   0xE3            /* global auto repeat enable */
                    400: #define LK_CL_ENABLE   0x1B            /* keyclick enable */
                    401: #define LK_KBD_ENABLE  0x8B            /* keyboard enable */
                    402: #define LK_BELL_ENABLE         0x23            /* the bell */
                    403: #define LK_RING_BELL   0xA7            /* ring keyboard bell */
                    404:
                    405: #define LK_LED_ENABLE  0x13            /* light led */
                    406: #define LK_LED_DISABLE         0x11            /* turn off led */
                    407: #define LED_1          0x81            /* led bits */
                    408: #define LED_2          0x82
                    409: #define LED_3          0x84
                    410: #define LED_4          0x88
                    411: #define LED_ALL        0x8F
                    412: #define LK_LED_HOLD    LED_4
                    413: #define LK_LED_LOCK    LED_3
                    414: #define LK_LED_COMPOSE LED_2
                    415: #define LK_LED_WAIT    LED_1
                    416:
                    417: #define LK_KDOWN_ERROR 0x3D            /* key down on powerup error */
                    418: #define LK_POWER_ERROR         0x3E            /* keyboard failure on powerup test */
                    419: #define LK_OUTPUT_ERROR        0xB5            /* keystrokes lost during inhibit */
                    420: #define LK_INPUT_ERROR         0xB6            /* garbage command to keyboard */
                    421: #define LK_LOWEST      0x56            /* lowest significant keycode */
                    422: #define LK_DIV6_START  0xAD            /* start of div 6 */
                    423: #define LK_DIV5_END    0xB2            /* end of div 5 */
                    424:
                    425: #define LAST_PARAM     0x80            /* "no more params" bit */
                    426:
                    427:        struct prgkbd {
                    428:
                    429:            short cmd;                  /* LK201 command opcode */
                    430:            short param1;               /* 1st cmd parameter (can be null) */
                    431:            short param2;               /* 2nd cmd parameter (can be null) */
                    432:        };
                    433:
                    434: /*-------------------------
                    435: * "special" LK-201 keys */
                    436:
                    437: #define SHIFT          174
                    438: #define LOCK           176
                    439: #define REPEAT         180
                    440: #define CNTRL          175
                    441: #define ALLUP          179
                    442:
                    443: /*--------------------------------
                    444: * cursor programming structure */
                    445:
                    446:        struct prg_cursor {
                    447:
                    448:            unsigned short acc_factor;  /* cursor aceleration factor */
                    449:            unsigned short threshold;   /* threshold to trigger acc at */
                    450:        };
                    451:
                    452: /*---------------------
                    453: * mouse definitions */
                    454:
                    455: #define INC_STREAM_MODE        'R'             /* stream mode reports (55 hz) */
                    456: #define PROMPT_MODE    'D'             /* report when prompted */
                    457: #define REQUEST_POS    'P'             /* request position report */
                    458: #define SELF_TEST      'T'             /* request self test */
                    459:
                    460: #define MOUSE_ID       0x2             /* mouse ID in lo 4 bits */
                    461:
                    462: #define START_FRAME    0x80            /* start of report frame bit */
                    463: #define X_SIGN         0x10            /* position sign bits */
                    464: #define Y_SIGN         0x08
                    465:
                    466: #define RIGHT_BUTTON   0x01            /* mouse buttons */
                    467: #define MIDDLE_BUTTON  0x02
                    468: #define LEFT_BUTTON    0x04
                    469:
                    470:        /* mouse report structure definition */
                    471:
                    472:        struct mouse_report {
                    473:
                    474:            char state;         /* buttons and sign bits */
                    475:            short dx;           /* delta X since last change */
                    476:            short dy;           /* delta Y since last change */
                    477:            char bytcnt;        /* mouse report byte count */
                    478:        };
                    479:
                    480: /*-----------------------------------------
                    481: * tablet command/interface definitions  */
                    482:
                    483: #define T_STREAM       'R'             /* continuous stream report mode */
                    484: #define T_POINT                'D'             /* enter report-on-request mode */
                    485: #define T_REQUEST      'P'             /* request position report */
                    486:
                    487: #define T_BAUD         'B'             /* increase baud to 9600 from 4800 */
                    488: #define T_RATE_55      'K'             /* report rate: 55/sec */
                    489: #define T_RATE_72      'L'             /* report rate: 72/sec */
                    490: #define T_RATE_120     'M'             /* report rate: 120/sec (9600 only) */
                    491:
                    492: #define T_TEST         SELF_TEST       /* do self test */
                    493:
                    494: #define TABLET_ID      0x4             /* tablet ID in lo 4 bits */
                    495:
                    496: #define T_START_FRAME  0x80            /* start of report frame bit */
                    497: #define T_PROXIMITY    0x01            /* state pointer in proximity */
                    498:
                    499: #define T_LEFT_BUTTON  0x02            /* puck buttons */
                    500: #define T_FRONT_BUTTON 0x04
                    501: #define T_RIGHT_BUTTON 0x08
                    502: #define T_BACK_BUTTON  0x10
                    503:
                    504: #define T_BARREL_BUTTON T_LEFT_BUTTON          /* stylus buttons */
                    505: #define T_TIP_BUTTON   T_FRONT_BUTTON
                    506:

CVSweb