home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / ddkx86v1.zip / DDKX86 / H / VKBDPDD.H < prev    next >
Text File  |  1995-04-14  |  16KB  |  484 lines

  1. /*DDK*************************************************************************/
  2. /*                                                                           */
  3. /* COPYRIGHT (C) Microsoft Corporation, 1989                                 */
  4. /* COPYRIGHT    Copyright (C) 1995 IBM Corporation                           */
  5. /*                                                                           */
  6. /*    The following IBM OS/2 WARP source code is provided to you solely for  */
  7. /*    the purpose of assisting you in your development of OS/2 WARP device   */
  8. /*    drivers. You may use this code in accordance with the IBM License      */
  9. /*    Agreement provided in the IBM Device Driver Source Kit for OS/2. This  */
  10. /*    Copyright statement may not be removed.                                */
  11. /*                                                                           */
  12. /*****************************************************************************/
  13. /*static char *SCCSID = "@(#)vkbdpdd.h  6.12 92/01/11";*/
  14. /***    vkbdpdd.h
  15.  *
  16.  *      SCCSID = @(#)vkbdpdd.h  6.12 92/01/11
  17.  *
  18.  *      Keyboard PDD/VDD shared structures/constants
  19.  *
  20.  *      MODIFICATION HISTORY
  21.  *          11/21/88 MTS        Created.
  22.  */
  23.  
  24. // KBD PDD component definitions
  25.  
  26. #define KBD_NAME                "KBD$"
  27.  
  28.  
  29. /***    PDD function commands
  30.  *
  31.  *  Format:
  32.  *      (*fpfnPKVDDProc)(PKBDCMD_*, f16p1, f16p2);
  33.  *
  34.  *  PKBDCMD_REGISTER:
  35.  *      f16p1 == segment of 16:32 VDD entry point
  36.  *      f16p2 ==  offset of 16:32 VDD entry point
  37.  *
  38.  *  PKBDCMD_DEREGISTER:
  39.  *      f16p1 == F16PNULL
  40.  *      f16p2 == F16PNULL
  41.  *
  42.  *  PKBDCMD_VDMCREATED:
  43.  *      f16p1 -> KSGID      (see packet below)
  44.  *      f16p2 == F16PNULL
  45.  *
  46.  *  PKBDCMD_QUERYID:
  47.  *      f16p1 == F16PNULL
  48.  *      f16p2 -> KID        (see packet below)
  49.  *
  50.  *  PKBDCMD_QUERYINHIBIT:
  51.  *      f16p1 == F16PNULL
  52.  *      f16p2 -> KINH       (see packet below)
  53.  *
  54.  *  PKBDCMD_SETLEDS:
  55.  *      f16p1 -> KLEDS      (see packet below)
  56.  *      f16p2 == F16PNULL
  57.  *
  58.  *  PKBDCMD_SETREPEATRATE:
  59.  *      f16p1 -> KRPT       (see packet below)
  60.  *      f16p2 == F16PNULL
  61.  *
  62.  *  PKBDCMD_TRANSLATE:
  63.  *      f16p1 -> KXLT       (see packet below)
  64.  *      f16p2 == F16PNULL
  65.  *
  66.  *  PKBDCMD_VDMTERMINTED:
  67.  *      f16p1 -> KSGID      (see packet below)
  68.  *      f16p2 == F16PNULL
  69.  *
  70.  *  PKBDCMD_FOCUS:
  71.  *      f16p1 -> KFOCUS     (see packet below)
  72.  *      f16p2 == F16PNULL
  73.  *
  74.  *  PKBDCMD_QUERYREVXLATE:
  75.  *      f16p1 -> KQRX       (see packet below)
  76.  *      f16p2 == F16PNULL
  77.  */
  78.  
  79. #define PKBDCMD_REGISTER        PDDCMD_REGISTER      // register VDD
  80. #define PKBDCMD_DEREGISTER      (PKBDCMD_REGISTER+1) // de-register VDD
  81. #define PKBDCMD_VDMCREATED      (PKBDCMD_REGISTER+2) // notify VDM is created
  82. #define PKBDCMD_QUERYID         (PKBDCMD_REGISTER+3) // query physical kbd ID
  83. #define PKBDCMD_QUERYINHIBIT    (PKBDCMD_REGISTER+4) // query inhibit state
  84. #define PKBDCMD_SETLEDS         (PKBDCMD_REGISTER+5) // set physical LEDs
  85. #define PKBDCMD_SETREPEATRATE   (PKBDCMD_REGISTER+6) // set physical repeat rate
  86. #define PKBDCMD_TRANSLATE       (PKBDCMD_REGISTER+7) // translate a scan code
  87. #define PKBDCMD_VDMTERMINATED   (PKBDCMD_REGISTER+8) // notify VDM termination
  88. #define PKBDCMD_KFOCUS          (PKBDCMD_REGISTER+9) /* notify of focus change    */
  89. #define PKBDCMD_QUERYREVXLATE   (PKBDCMD_REGISTER+10)// query reverse xlate table
  90. #define PKBDCMD_HOTKEY          (PKBDCMD_REGISTER+11)// DCR 1195 notify of Hot Key setting
  91.  
  92.  
  93. typedef struct ksgid_s {
  94.     USHORT  ksgid_len;                  // length of packet (4)
  95.     SGID    ksgid_sgid;                 // screen group ID
  96. } KSGID;
  97.  
  98. typedef KSGID *PKSGID;
  99.  
  100. //c-begin
  101. #define KSGID_PKT_LEN   sizeof(KSGID)
  102. //c-end
  103. //masm-begin
  104. //KSGID_PKT_LEN EQU     SIZE ksgid_s
  105. //masm-end
  106.  
  107.  
  108. typedef struct kid_s {
  109.     USHORT kid_len;                     // length of packet (4)
  110.     USHORT kid_ID;                      // keyboard ID
  111. } KID;
  112.  
  113. typedef KID *PKID;
  114.  
  115. //c-begin
  116. #define KID_PKT_LEN     sizeof(KID)
  117. //c-end
  118. //masm-begin
  119. //KID_PKT_LEN   EQU     SIZE kid_s
  120. //masm-end
  121.  
  122.  
  123. typedef struct kinh_s {
  124.     USHORT kinh_len;                    // length of packet (3)
  125.     BBOOL  kinh_fInhibited;             // TRUE if inhibited, FALSE if not
  126. } KINH;
  127.  
  128. typedef KINH *PKINH;
  129.  
  130. //c-begin
  131. #define KINH_PKT_LEN    sizeof(KINH)
  132. //c-end
  133. //masm-begin
  134. //KINH_PKT_LEN  EQU     SIZE kinh_s
  135. //masm-end
  136.  
  137.  
  138. typedef struct kled_s {
  139.     USHORT kled_len;                    // length of packet (4)
  140.     USHORT kled_fsLEDs;                 // bit0:SCROLL; bit1:NUM; bit2:CAPS
  141. } KLEDS;
  142.  
  143. typedef KLEDS *PKLEDS;
  144.  
  145. //c-begin
  146. #define KLEDS_PKT_LEN   sizeof(KLEDS)
  147. //c-end
  148. //masm-begin
  149. //KLEDS_PKT_LEN EQU     SIZE kled_s
  150. //masm-end
  151.  
  152. // DCR 1195
  153. typedef struct khotkey_s {
  154.     USHORT khk_len;
  155.     USHORT khk_action;
  156.     ULONG khk_hotkeys;
  157. } KHOTKEYS;
  158.  
  159. typedef KHOTKEYS *PKHOTKEYS;
  160.  
  161. //c-begin
  162. #define KHOTKEYS_PKT_LEN   sizeof(KHOTKEYS)
  163. //c-end
  164. //masm-begin
  165. //KHOTKEYS_PKT_LEN EQU     SIZE khotkey_s
  166. //masm-end
  167.  
  168.  
  169. typedef struct krpt_s {
  170.     USHORT krpt_len;                    // length of packet (6)
  171.     USHORT krpt_usDelay;                // delay, in ms. (0 implies default)
  172.     USHORT krpt_usRate;                 // rate, in cps (0 implies default)
  173. } KRPT;
  174.  
  175. typedef KRPT *PKRPT;
  176.  
  177. //c-begin
  178. #define KRPT_PKT_LEN    sizeof(KRPT)
  179. //c-end
  180. //masm-begin
  181. //KRPT_PKT_LEN  EQU     SIZE krpt_s
  182. //masm-end
  183.  
  184.  
  185. typedef struct kkey_s {
  186.     UCHAR  key_len;                     // length of packet (14)     //54113
  187.     UCHAR  key_chOrgScan;               // original scan code        //54113
  188.     UCHAR  key_chChar;                  // ASCII code (output)
  189.     UCHAR  key_chScan;                  // scan code (input)
  190.     UCHAR  key_fbStatus;                // (output, normally KEYSTATUS_FINAL)
  191.     UCHAR  key_bNLSShift;               // (reserved, set to zero on input)
  192.     USHORT key_fsState;                 // shift states (input/output)
  193.     ULONG  key_time;                    // timestamp (ignored)
  194.     USHORT key_fsDDFlags;               // device driver/monitor flags (output)
  195. } KKEY;
  196.  
  197. typedef KKEY *PKKEY;
  198. typedef KKEY FAR16 *F16PKKEY;
  199.  
  200. //c-begin
  201. #define KKEY_PKT_LEN    sizeof(KKEY)
  202. //c-end
  203. //masm-begin
  204. //KKEY_PKT_LEN  EQU     SIZE kkey_s
  205. //masm-end
  206.  
  207.  
  208. typedef struct kxf_s {
  209.     USHORT kxf_len;                     // length of packet (9)
  210.     UCHAR  kxf_fbXlate;                 // translation flags
  211.     UCHAR  kxf_fbKey;                   // key flags
  212.     UCHAR  kxf_fbSpec;                  // multi-keypacket events
  213.     UCHAR  kxf_fbMode;                  // input mode
  214.     UCHAR  kxf_fbAltNum;                // Alt-keypad accumulator
  215.     USHORT kxf_fsHotKey;                // interrupt-time "hot key" shift state
  216.     UCHAR  kxf_fbAccent;                // DCR 1546 Extended Accent use
  217. } KXF;
  218.  
  219. typedef KXF *PKXF;
  220. typedef KXF FAR16 *F16PKXF;
  221.  
  222. //c-begin
  223. #define KXF_PKT_LEN     sizeof(KXF)
  224. //c-end
  225. //masm-begin
  226. //KXF_PKT_LEN   EQU     SIZE kxf_s
  227. //masm-end
  228.  
  229.  
  230. typedef struct kxlt_s {
  231.     USHORT   kxlt_len;                  // length of packet (16)
  232.     F16PKKEY kxlt_f16pKey1;             // pointer to key pkt 1
  233.     F16PKKEY kxlt_f16pKey2;             // pointer to key pkt 2
  234.     F16PKXF  kxlt_f16pKxf;              // pointer to translation flags pkt
  235.     USHORT   kxlt_usCodePage;           // codepage to use
  236. } KXLT;
  237.  
  238. typedef KXLT *PKXLT;
  239.  
  240. //c-begin
  241. #define KXLT_PKT_LEN    sizeof(KXLT)
  242. //c-end
  243. //masm-begin
  244. //KXLT_PKT_LEN  EQU     SIZE kxlt_s
  245. //masm-end
  246.  
  247. typedef struct kfocus_s {
  248.     USHORT kf_len;                    // length of packet (4)
  249.     USHORT kf_fsFocus;                // TRUE (set) FALSE (free) focus
  250. } KFOCUS;
  251.  
  252. typedef KFOCUS *PKFOCUS;
  253.  
  254. //c-begin
  255. #define KFOCUS_PKT_LEN sizeof(KFOCUS)
  256. //c-end
  257. //masm-begin
  258. //KFOCUS_PKT_LEN EQU   SIZE kfocus_s
  259. //masm-end
  260.  
  261. typedef struct rxentry_s {
  262.     UCHAR   rx_chScan;
  263.     UCHAR   rx_fbRXFlags;
  264. } RXENTRY;
  265.  
  266. typedef RXENTRY *PRX;
  267. typedef RXENTRY FAR16 *F16PRX;
  268.  
  269. typedef struct shentry_s {
  270.     USHORT  sh_fsShift;
  271.     UCHAR   sh_scanShift;
  272.     UCHAR   sh_scanPrefix;
  273. } SHENTRY;
  274.  
  275. typedef SHENTRY *PSH;
  276. typedef SHENTRY FAR16 *F16PSH;
  277.  
  278. //c-begin
  279. #define SHENTRY_SIZE sizeof(SHENTRY)
  280. //c-end
  281. //masm-begin
  282. //SHENTRY_SIZE  EQU     SIZE shentry_s
  283. //masm-end
  284.  
  285. typedef UCHAR *PNUM;
  286. typedef UCHAR FAR16 *F16PNUM;
  287.  
  288. #define NUM_RXENTRIES   256     //max. entries in rev. xlate table
  289. #define NUM_SHENTRIES   6       //max. entries in shift table
  290. #define NUM_NUMENTRIES  10      //max. entries in num scan table
  291.  
  292. typedef RXENTRY RXTABLE[NUM_RXENTRIES];
  293. typedef SHENTRY SHTABLE[NUM_SHENTRIES];
  294. typedef UCHAR   NUMTABLE[NUM_NUMENTRIES];
  295.  
  296. // RXFlags equates
  297.  
  298. #define RXFLAGS_NONKEY          0
  299. #define RXFLAGS_LOWCASE         1
  300. #define RXFLAGS_UPCASE          2
  301. #define RXFLAGS_NOSHIFT         3
  302. #define RXFLAGS_SHIFT           4
  303. #define RXFLAGS_CTRL            5
  304.  
  305. // Shift Table indexes
  306.  
  307. #define SHINDX_LSHIFT   0
  308. #define SHINDX_LCTRL    1
  309. #define SHINDX_LALT     2
  310. #define SHINDX_RSHIFT   3
  311. #define SHINDX_RCTRL    4
  312. #define SHINDX_RALT     5
  313.  
  314. typedef struct kqrx_s {
  315.     USHORT  kqrx_len;                   //length of packet (18)
  316.     USHORT  kqrx_usCodePage;            //code page number
  317.     USHORT  kqrx_hCodePage;             //codepage table handle
  318.     F16PRX  kqrx_f16pRXTable;           //pointer to rev. xlate table
  319.     F16PSH  kqrx_f16pShTable;           //pointer to shift table
  320.     F16PNUM kqrx_f16pNumTable;          //pointer to table for num pad scans
  321. } KQRX;
  322.  
  323. typedef KQRX *PKQRX;
  324.  
  325. //c-begin
  326. #define KQRX_PKT_LEN sizeof(KQRX)
  327. //c-end
  328. //masm-begin
  329. //KQRX_PKT_LEN  EQU     SIZE kqrx_s
  330. //masm-end
  331.  
  332.  
  333. /***    VDD function commands
  334.  *
  335.  *  Format:
  336.  *      (*fpfnVKPDDProc)(VKBDCMD_*, f16p1, f16p2);
  337.  *
  338.  *  VKBDCMD_INTEVENT:
  339.  *      f16p1 -> KINT       (see packet below)
  340.  *      f16p2 == NULL
  341.  *
  342.  *  VKBDCMD_CPCHANGED:
  343.  *      f16p1 -> KCPC       (see packet below)
  344.  *      f16p2 == NULL
  345.  *
  346.  *  VKBDCMD_HOTPLUG
  347.  *      f16p1 -> KHP        (see packet below)
  348.  *      f16p2 == NULL
  349.  */
  350.  
  351. #define VKBDCMD_INTEVENT        0x01    // to notify of a scan code
  352. #define VKBDCMD_CPCHANGED       0x02    // to notify of a codepage changed
  353. #define VKBDCMD_HOTPLUG         0x03    // to notify of a hot plug occurance
  354.  
  355. typedef struct kint_s {
  356.     USHORT kint_len;                    // length of packet
  357.     USHORT kint_chScan;                 // scan code
  358.     USHORT kint_usSGID;                 // screen group ID
  359. } KINT;
  360.  
  361. typedef KINT *PKINT;
  362.  
  363. //c-begin
  364. #define KINT_PKT_LEN    sizeof(KINT)
  365. //c-end
  366. //masm-begin
  367. //KINT_PKT_LEN  EQU     SIZE kint_s
  368. //masm-end
  369.  
  370. typedef struct kcpc_s {
  371.     USHORT kcpc_len;                    // length of packet
  372.     USHORT kcpc_usCodePage;             // code page being changed
  373.     USHORT kcpc_hCodePage;              // code page handle
  374. } KCPC;
  375.  
  376. typedef KCPC *PKCPC;
  377.  
  378. //c-begin
  379. #define KCPC_PKT_LEN    sizeof(KCPC)
  380. //c-end
  381. //masm-begin
  382. //KCPC_PKT_LEN  EQU     SIZE kcpc_s
  383. //masm-end
  384.  
  385. typedef struct khp_s {
  386.     USHORT khp_len;                     // length of packet
  387.     USHORT khp_usKbdHWID;               // current keyboard hw ID
  388. } KHP;
  389.  
  390. typedef KHP *PKHP;
  391.  
  392. //c-begin
  393. #define KHP_PKT_LEN    sizeof(KHP)
  394. //c-end
  395. //masm-begin
  396. //KHP_PKT_LEN  EQU     SIZE khp_s
  397. //masm-end
  398.  
  399.  
  400. // Flags for various fields in the XLTPKT structure
  401.  
  402. #define KEYSTATUS_FINAL         0x40    // key is final
  403.  
  404. #define KEYSTATE_RIGHTSHIFT     BIOSKFLAG_RIGHTSHIFT
  405. #define KEYSTATE_LEFTSHIFT      BIOSKFLAG_LEFTSHIFT
  406. #define KEYSTATE_EITHERCTRL     BIOSKFLAG_CTRL
  407. #define KEYSTATE_EITHERALT      BIOSKFLAG_ALT
  408. #define KEYSTATE_SCROLLLOCK     BIOSKFLAG_SCROLLLOCK
  409. #define KEYSTATE_NUMLOCK        BIOSKFLAG_NUMLOCK
  410. #define KEYSTATE_CAPSLOCK       BIOSKFLAG_CAPSLOCK
  411. #define KEYSTATE_INSERT         BIOSKFLAG_INSERT
  412. #define KEYSTATE_LEDMASK        (KEYSTATE_SCROLLLOCK + \
  413.                                  KEYSTATE_NUMLOCK    + \
  414.                                  KEYSTATE_CAPSLOCK)
  415.  
  416. #define KEYSTATE_LEFTCTRL       (BIOSKFLAG1_LEFTCTRL   * 0x0100)
  417. #define KEYSTATE_LEFTALT        (BIOSKFLAG1_LEFTALT    * 0x0100)
  418. #define KEYSTATE_RIGHTCTRL      (BIOSKFLAG3_RIGHTCTRL  * 0x0100)
  419. #define KEYSTATE_RIGHTALT       (BIOSKFLAG3_RIGHTALT   * 0x0100)
  420. #define KEYSTATE_SCROLLDOWN     (BIOSKFLAG1_SCROLLDOWN * 0x0100)
  421. #define KEYSTATE_NUMDOWN        (BIOSKFLAG1_NUMDOWN    * 0x0100)
  422. #define KEYSTATE_CAPSDOWN       (BIOSKFLAG1_CAPSDOWN   * 0x0100)
  423. #define KEYSTATE_SYSREQDOWN     (BIOSKFLAG1_SYSSHIFT   * 0x2000)
  424.  
  425. #define KEYSTATE_LRSHIFTS       (KEYSTATE_LEFTSHIFT + KEYSTATE_RIGHTSHIFT + \
  426.                                  KEYSTATE_LEFTCTRL  + KEYSTATE_RIGHTCTRL  + \
  427.                                  KEYSTATE_LEFTALT   + KEYSTATE_RIGHTALT)
  428.  
  429. #define KEYSTATE_ALLSHIFTS      (KEYSTATE_LRSHIFTS + \
  430.                                  KEYSTATE_EITHERCTRL + KEYSTATE_EITHERALT)
  431.  
  432. #define KEYFLAGS_NORMAL         0x0000  // any normal key
  433. #define KEYFLAGS_ACK            0x0001  // eg, SCAN_ACK
  434. #define KEYFLAGS_SECPREFIX      0x0002  // eg, 0E0h, 0E1h
  435. #define KEYFLAGS_OVERRUN        0x0003  // eg, SCAN_OVERRUN
  436. #define KEYFLAGS_RESEND         0x0004  // eg, SCAN_RESEND
  437. #define KEYFLAGS_REBOOT         0x0005  // never returned (PDD reboots)
  438. #define KEYFLAGS_DUMP           0x0006  // eg, Ctrl-Alt-NumLock (ignore)
  439. #define KEYFLAGS_SHIFT          0x0007  // eg, Shift, Ctrl, CapsLock, etc.
  440. #define KEYFLAGS_PAUSE          0x0008  // eg, Pause or Ctrl-Numlock
  441. #define KEYFLAGS_PSPAUSE        0x0009  // never returned (we're in RAW mode)
  442. #define KEYFLAGS_WAKEUP         0x000A  // only after PAUSE, never PSPAUSE
  443. #define KEYFLAGS_BADACCENT      0x000B  // eg, unaccentable key
  444. #define KEYFLAGS_HOTKEY         0x000C  //
  445. #define KEYFLAGS_READPEEK       0x000D  //
  446. #define KEYFLAGS_ACCENT         0x0010  //
  447. #define KEYFLAGS_BREAK          0x0011  // eg, Ctrl-Break
  448. #define KEYFLAGS_PSBREAK        0x0012  // never returned (we're in RAW mode)
  449. #define KEYFLAGS_PRTSC          0x0013  // eg, PrtSc
  450. #define KEYFLAGS_PRTECHO        0x0014  // eg, Ctrl-PrtSc
  451. #define KEYFLAGS_PSPRTECHO      0x0015  // never returned (we're in RAW mode)
  452. #define KEYFLAGS_PRTFLUSH       0x0016  // eg, Ctrl-Alt-PrtSc
  453. #define KEYFLAGS_SYSREQ         0x0017  // eg, SysReq
  454. #define KEYFLAGS_UNDEFINED      0x003F  // undefined (we map ignored keys here)
  455. #define KEYFLAGS_TYPEMASK       0x003F  // key type mask
  456.  
  457. #define KEYFLAGS_RELEASED       0x0040  // this was a release, not a press
  458. #define KEYFLAGS_SECONDARY      0x0080  // key was preceded by SECPREFIX
  459. #define KEYFLAGS_MULTIMAKE      0x0100  // ie, repeat of a "toggle" key
  460. #define KEYFLAGS_USEDACCENT     0x0200  // key translated using previous accent
  461.  
  462. // Flags for various fields in the KXF structure
  463.  
  464. #define KXFXLATE_ACCENTMASK     0x07    // previous accent # saved here
  465. #define KXFXLATE_SGPAUSED       0x08    // session currently paused
  466. #define KXFXLATE_USECHAR3       0x10    // use CHAR3 as index into accent tbl
  467. #define KXFXLATE_CTRLEMULATED   0x20    // CTRL key emulated by enhanced kbd
  468. #define KXFXLATE_E1PREFIX       0x40    // E1 prefix just seen
  469. #define KXFXLATE_ACCENTINDEX3   0x80    // chr3 of XlateTable index accent table
  470.  
  471. #define KXFKEY_DUMPKEYONCE      0x01    // dump key sequence has been hit once
  472. #define KXFKEY_PRTSCDOWN        0x02    // PrtSc is down now
  473. #define KXFKEY_SECPREFIX        0x04    // E0 or E1 prefix just seen
  474. #define KXFKEY_NORMALALTDOWN    0x08    // normal Alt down (not AltGraph)
  475.  
  476. #define KXFSPEC_ALT2PAC         0x01    // alt-pad: use two xlation key packets
  477. #define KXFSPEC_E02PAC          0x02    // E0: use two xlation key packets
  478. #define KXFSPEC_ACCENT2PAC      0x04    // accent: use two xlation key packets
  479. #define KXFSPEC_ACCENT1PAC      0x08    // accent: use one xlation key packets
  480. #define KXFSPEC_USE2PAC         0x80    // use two xlation key packets
  481.  
  482. #define KXFMODE_SHIFTREPORT     0x01    // not needed for VDM support
  483. #define KXFMODE_BINARY          0x80    // set for normal VDM translation
  484.