123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- /*
- * This file is part of the UCB release of Plan 9. It is subject to the license
- * terms in the LICENSE file found in the top-level directory of this
- * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
- * part of the UCB release of Plan 9, including this file, may be copied,
- * modified, propagated, or distributed except according to the terms contained
- * in the LICENSE file.
- */
- /*
- * USB keyboard/mouse constants
- */
- typedef struct Chain Chain;
- typedef struct HidInterface HidInterface;
- typedef struct HidRepTempl HidRepTempl;
- enum {
- Stack = 32 * 1024,
- /* HID class subclass protocol ids */
- PtrCSP = 0x020103, /* mouse.boot.hid */
- KbdCSP = 0x010103, /* keyboard.boot.hid */
- /* Requests */
- Getproto = 0x03,
- Setidle = 0x0a,
- Setproto = 0x0b,
- /* protocols for SET_PROTO request */
- Bootproto = 0,
- Reportproto = 1,
- };
- enum {
- /* keyboard modifier bits */
- Mlctrl = 0,
- Mlshift = 1,
- Mlalt = 2,
- Mlgui = 3,
- Mrctrl = 4,
- Mrshift = 5,
- Mralt = 6,
- Mrgui = 7,
- /* masks for byte[0] */
- Mctrl = 1<<Mlctrl | 1<<Mrctrl,
- Mshift = 1<<Mlshift | 1<<Mrshift,
- Malt = 1<<Mlalt | 1<<Mralt,
- Mcompose = 1<<Mlalt,
- Maltgr = 1<<Mralt,
- Mgui = 1<<Mlgui | 1<<Mrgui,
- MaxAcc = 3, /* max. ptr acceleration */
- PtrMask= 0xf, /* 4 buttons: should allow for more. */
- };
- /*
- * Plan 9 keyboard driver constants.
- */
- enum {
- /* Scan codes (see kbd.c) */
- SCesc1 = 0xe0, /* first of a 2-character sequence */
- SCesc2 = 0xe1,
- SClshift = 0x2a,
- SCrshift = 0x36,
- SCctrl = 0x1d,
- SCcompose = 0x38,
- Keyup = 0x80, /* flag bit */
- Keymask = 0x7f, /* regular scan code bits */
- };
- int kbmain(Dev *d, int argc, char*argv[]);
- enum{
- MaxChLen = 64, /* bytes */
- };
- struct Chain {
- int b; /* offset start in bits, (first full) */
- int e; /* offset end in bits (first empty) */
- u8 buf[MaxChLen];
- };
- #define MSK(nbits) ((1UL << (nbits)) - 1)
- #define IsCut(bbits, ebits) (((ebits)/8 - (bbits)/8) > 0)
- enum {
- KindPad = 0,
- KindButtons,
- KindX,
- KindY,
- KindWheel,
- MaxVals = 16,
- MaxIfc = 8,
- };
- struct HidInterface {
- u32 v[MaxVals]; /* one ulong per val should be enough */
- u8 kind[MaxVals];
- int nbits;
- int count;
- };
- struct HidRepTempl{
- int id; /* id which may not be present */
- u32 sz; /* in bytes */
- int nifcs;
- HidInterface ifcs[MaxIfc];
- };
- enum {
- /* report types */
- HidReportApp = 0x01,
- HidTypeUsgPg = 0x05,
- HidPgButts = 0x09,
- HidTypeRepSz = 0x75,
- HidTypeCnt = 0x95,
- HidCollection = 0xa1,
- HidTypeUsg = 0x09,
- HidPtr = 0x01,
- HidX = 0x30,
- HidY = 0x31,
- HidZ = 0x32,
- HidWheel = 0x38,
- HidInput = 0x81,
- HidReportId = 0x85,
- HidReportIdPtr = 0x01,
- HidEnd = 0xc0,
- };
- void dumpreport(HidRepTempl *templ);
- int hidifcval(HidRepTempl *templ, int kind, int n);
- int parsereport(HidRepTempl *templ, Chain *rep);
- int parsereportdesc(HidRepTempl *temp, u8 *repdesc, int repsz);
|