home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / linux / hil.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  18.4 KB  |  484 lines

  1. #ifndef _HIL_H_
  2. #define _HIL_H_
  3.  
  4. /*
  5.  * Hewlett Packard Human Interface Loop (HP-HIL) Protocol -- header.
  6.  *
  7.  * Copyright (c) 2001 Brian S. Julin
  8.  * All rights reserved.
  9.  *
  10.  * Redistribution and use in source and binary forms, with or without
  11.  * modification, are permitted provided that the following conditions
  12.  * are met:
  13.  * 1. Redistributions of source code must retain the above copyright
  14.  *    notice, this list of conditions, and the following disclaimer,
  15.  *    without modification.
  16.  * 2. The name of the author may not be used to endorse or promote products
  17.  *    derived from this software without specific prior written permission.
  18.  *
  19.  * Alternatively, this software may be distributed under the terms of the
  20.  * GNU General Public License ("GPL").
  21.  *
  22.  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
  23.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  24.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  25.  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
  26.  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  27.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  28.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  29.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  30.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  31.  *
  32.  * References:
  33.  * HP-HIL Technical Reference Manual.  Hewlett Packard Product No. 45918A
  34.  *
  35.  * A note of thanks to HP for providing and shipping reference materials
  36.  * free of charge to help in the development of HIL support for Linux.
  37.  *
  38.  */
  39.  
  40. #include <asm/types.h>
  41.  
  42. /* Physical constants relevant to raw loop/device timing. 
  43.  */ 
  44.  
  45. #define HIL_CLOCK        8MHZ
  46. #define HIL_EK1_CLOCK        30HZ
  47. #define HIL_EK2_CLOCK        60HZ
  48.  
  49. #define HIL_TIMEOUT_DEV         5    /* ms */
  50. #define HIL_TIMEOUT_DEVS    10    /* ms */
  51. #define HIL_TIMEOUT_NORESP    10    /* ms */
  52. #define HIL_TIMEOUT_DEVS_DATA    16    /* ms */
  53. #define HIL_TIMEOUT_SELFTEST    200    /* ms */
  54.  
  55.  
  56. /* Actual wire line coding.  These will only be useful if someone is 
  57.  * implementing a software MLC to run HIL devices on a non-parisc machine.
  58.  */
  59.  
  60. #define HIL_WIRE_PACKET_LEN    15
  61. enum hil_wire_bitpos {
  62.     HIL_WIRE_START        = 0,
  63.     HIL_WIRE_ADDR2,
  64.     HIL_WIRE_ADDR1,
  65.     HIL_WIRE_ADDR0,
  66.     HIL_WIRE_COMMAND,
  67.     HIL_WIRE_DATA7,
  68.     HIL_WIRE_DATA6,
  69.     HIL_WIRE_DATA5,
  70.     HIL_WIRE_DATA4,
  71.     HIL_WIRE_DATA3,
  72.     HIL_WIRE_DATA2,
  73.     HIL_WIRE_DATA1,
  74.     HIL_WIRE_DATA0,
  75.     HIL_WIRE_PARITY,
  76.     HIL_WIRE_STOP
  77. };
  78.  
  79. /* HP documentation uses these bit positions to refer to commands;
  80.  * we will call these "packets".
  81.  */
  82. enum hil_pkt_bitpos {
  83.     HIL_PKT_CMD        = 0x00000800,
  84.     HIL_PKT_ADDR2        = 0x00000400,
  85.     HIL_PKT_ADDR1        = 0x00000200,
  86.     HIL_PKT_ADDR0        = 0x00000100,
  87.     HIL_PKT_ADDR_MASK    = 0x00000700,
  88.     HIL_PKT_ADDR_SHIFT    = 8,
  89.     HIL_PKT_DATA7        = 0x00000080,
  90.     HIL_PKT_DATA6        = 0x00000040,
  91.     HIL_PKT_DATA5        = 0x00000020,
  92.     HIL_PKT_DATA4        = 0x00000010,
  93.     HIL_PKT_DATA3        = 0x00000008,
  94.     HIL_PKT_DATA2        = 0x00000004,
  95.     HIL_PKT_DATA1        = 0x00000002,
  96.     HIL_PKT_DATA0        = 0x00000001,
  97.     HIL_PKT_DATA_MASK    = 0x000000FF,
  98.     HIL_PKT_DATA_SHIFT    = 0
  99. };
  100.  
  101. /* The HIL MLC also has several error/status/control bits.  We extend the 
  102.  * "packet" to include these when direct access to the MLC is available,
  103.  * or emulate them in cases where they are not available. 
  104.  *
  105.  * This way the device driver knows that the underlying MLC driver
  106.  * has had to deal with loop errors.
  107.  */
  108. enum hil_error_bitpos {
  109.     HIL_ERR_OB    = 0x00000800, /* MLC is busy sending an auto-poll, 
  110.                      or we have filled up the output 
  111.                      buffer and must wait. */
  112.     HIL_ERR_INT    = 0x00010000, /* A normal interrupt has occurred. */
  113.     HIL_ERR_NMI    = 0x00020000, /* An NMI has occurred. */
  114.     HIL_ERR_LERR    = 0x00040000, /* A poll didn't come back. */
  115.     HIL_ERR_PERR    = 0x01000000, /* There was a Parity Error. */
  116.     HIL_ERR_FERR    = 0x02000000, /* There was a Framing Error. */
  117.     HIL_ERR_FOF    = 0x04000000  /* Input FIFO Overflowed. */
  118. };
  119.  
  120. enum hil_control_bitpos {
  121.     HIL_CTRL_TEST    = 0x00010000,
  122.     HIL_CTRL_IPF    = 0x00040000,
  123.     HIL_CTRL_APE    = 0x02000000
  124. };
  125.  
  126. /* Bits 30,31 are unused, we use them to control write behavior. */
  127. #define HIL_DO_ALTER_CTRL  0x40000000 /* Write MSW of packet to control 
  128.                                           before writing LSW to loop */
  129. #define HIL_CTRL_ONLY      0xc0000000 /* *Only* alter the control registers */
  130.  
  131. /* This gives us a 32-bit "packet" 
  132.  */
  133. typedef u32 hil_packet;
  134.  
  135.  
  136. /* HIL Loop commands 
  137.  */
  138. enum hil_command {
  139.     HIL_CMD_IFC    = 0x00,    /* Interface Clear */
  140.     HIL_CMD_EPT    = 0x01,    /* Enter Pass-Thru Mode */
  141.     HIL_CMD_ELB    = 0x02,    /* Enter Loop-Back Mode */
  142.     HIL_CMD_IDD    = 0x03,    /* Identify and Describe */
  143.     HIL_CMD_DSR    = 0x04,    /* Device Soft Reset */
  144.     HIL_CMD_PST    = 0x05,    /* Perform Self Test */
  145.     HIL_CMD_RRG    = 0x06,    /* Read Register */
  146.     HIL_CMD_WRG    = 0x07,    /* Write Register */
  147.     HIL_CMD_ACF    = 0x08,    /* Auto Configure */
  148.     HIL_CMDID_ACF    = 0x07,    /* Auto Configure bits with incremented ID */
  149.     HIL_CMD_POL    = 0x10,    /* Poll */
  150.     HIL_CMDCT_POL    = 0x0f,    /* Poll command bits with item count  */
  151.     HIL_CMD_RPL    = 0x20,    /* RePoll */
  152.     HIL_CMDCT_RPL    = 0x0f,    /* RePoll command bits with item count */
  153.     HIL_CMD_RNM    = 0x30,    /* Report Name */
  154.     HIL_CMD_RST    = 0x31,    /* Report Status */
  155.     HIL_CMD_EXD    = 0x32,    /* Extended Describe */
  156.     HIL_CMD_RSC    = 0x33,    /* Report Security Code */
  157.  
  158.     /* 0x34 to 0x3c reserved for future use  */
  159.  
  160.     HIL_CMD_DKA    = 0x3d,    /* Disable Keyswitch Autorepeat */
  161.     HIL_CMD_EK1    = 0x3e,    /* Enable Keyswitch Autorepeat 1 */
  162.     HIL_CMD_EK2    = 0x3f,    /* Enable Keyswitch Autorepeat 2 */
  163.     HIL_CMD_PR1    = 0x40,    /* Prompt1 */  
  164.     HIL_CMD_PR2    = 0x41,    /* Prompt2 */
  165.     HIL_CMD_PR3    = 0x42,    /* Prompt3 */
  166.     HIL_CMD_PR4    = 0x43,    /* Prompt4 */
  167.     HIL_CMD_PR5    = 0x44,    /* Prompt5 */
  168.     HIL_CMD_PR6    = 0x45,    /* Prompt6 */
  169.     HIL_CMD_PR7    = 0x46,    /* Prompt7 */
  170.     HIL_CMD_PRM    = 0x47,    /* Prompt (General Purpose) */
  171.     HIL_CMD_AK1    = 0x48,    /* Acknowlege1 */  
  172.     HIL_CMD_AK2    = 0x49,    /* Acknowlege2 */
  173.     HIL_CMD_AK3    = 0x4a,    /* Acknowlege3 */
  174.     HIL_CMD_AK4    = 0x4b,    /* Acknowlege4 */
  175.     HIL_CMD_AK5    = 0x4c,    /* Acknowlege5 */
  176.     HIL_CMD_AK6    = 0x4d,    /* Acknowlege6 */
  177.     HIL_CMD_AK7    = 0x4e,    /* Acknowlege7 */
  178.     HIL_CMD_ACK    = 0x4f,    /* Acknowlege (General Purpose) */
  179.  
  180.     /* 0x50 to 0x78 reserved for future use  */
  181.     /* 0x80 to 0xEF device-specific commands */
  182.     /* 0xf0 to 0xf9 reserved for future use  */
  183.  
  184.     HIL_CMD_RIO    = 0xfa,    /* Register I/O Error */
  185.     HIL_CMD_SHR    = 0xfb,    /* System Hard Reset */
  186.     HIL_CMD_TER    = 0xfc,    /* Transmission Error */
  187.     HIL_CMD_CAE    = 0xfd,    /* Configuration Address Error */
  188.     HIL_CMD_DHR    = 0xfe,    /* Device Hard Reset */
  189.  
  190.     /* 0xff is prohibited from use. */
  191. };
  192.  
  193.  
  194. /* 
  195.  * Response "records" to HIL commands
  196.  */
  197.  
  198. /* Device ID byte 
  199.  */
  200. #define HIL_IDD_DID_TYPE_MASK        0xe0    /* Primary type bits */
  201. #define HIL_IDD_DID_TYPE_KB_INTEGRAL    0xa0    /* Integral keyboard */
  202. #define HIL_IDD_DID_TYPE_KB_ITF        0xc0    /* ITD keyboard */
  203. #define HIL_IDD_DID_TYPE_KB_RSVD    0xe0    /* Reserved keyboard type */
  204. #define HIL_IDD_DID_TYPE_KB_LANG_MASK    0x1f    /* Keyboard locale bits */
  205. #define HIL_IDD_DID_KBLANG_USE_ESD    0x00    /* Use ESD Locale instead */
  206. #define HIL_IDD_DID_TYPE_ABS        0x80    /* Absolute Positioners */
  207. #define HIL_IDD_DID_ABS_RSVD1_MASK    0xf8    /* Reserved */
  208. #define HIL_IDD_DID_ABS_RSVD1        0x98
  209. #define HIL_IDD_DID_ABS_TABLET_MASK    0xf8    /* Tablets and digitizers */
  210. #define HIL_IDD_DID_ABS_TABLET        0x90
  211. #define HIL_IDD_DID_ABS_TSCREEN_MASK    0xfc    /* Touch screens */
  212. #define HIL_IDD_DID_ABS_TSCREEN        0x8c
  213. #define HIL_IDD_DID_ABS_RSVD2_MASK    0xfc    /* Reserved */
  214. #define HIL_IDD_DID_ABS_RSVD2        0x88
  215. #define HIL_IDD_DID_ABS_RSVD3_MASK    0xfc    /* Reserved */
  216. #define HIL_IDD_DID_ABS_RSVD3        0x80
  217. #define HIL_IDD_DID_TYPE_REL        0x60    /* Relative Positioners */
  218. #define HIL_IDD_DID_REL_RSVD1_MASK    0xf0    /* Reserved */
  219. #define HIL_IDD_DID_REL_RSVD1        0x70
  220. #define HIL_IDD_DID_REL_RSVD2_MASK    0xfc    /* Reserved */
  221. #define HIL_IDD_DID_REL_RSVD2        0x6c
  222. #define HIL_IDD_DID_REL_MOUSE_MASK    0xfc    /* Mouse */
  223. #define HIL_IDD_DID_REL_MOUSE        0x68
  224. #define HIL_IDD_DID_REL_QUAD_MASK    0xf8    /* Other Quadrature Devices */
  225. #define HIL_IDD_DID_REL_QUAD        0x60
  226. #define HIL_IDD_DID_TYPE_CHAR        0x40    /* Character Entry */
  227. #define HIL_IDD_DID_CHAR_BARCODE_MASK    0xfc    /* Barcode Reader */
  228. #define HIL_IDD_DID_CHAR_BARCODE    0x5c
  229. #define HIL_IDD_DID_CHAR_RSVD1_MASK    0xfc    /* Reserved */
  230. #define HIL_IDD_DID_CHAR_RSVD1        0x58
  231. #define HIL_IDD_DID_CHAR_RSVD2_MASK    0xf8    /* Reserved */
  232. #define HIL_IDD_DID_CHAR_RSVD2        0x50
  233. #define HIL_IDD_DID_CHAR_RSVD3_MASK    0xf0    /* Reserved */
  234. #define HIL_IDD_DID_CHAR_RSVD3        0x40
  235. #define HIL_IDD_DID_TYPE_OTHER        0x20    /* Miscellaneous */
  236. #define HIL_IDD_DID_OTHER_RSVD1_MASK    0xf0    /* Reserved */
  237. #define HIL_IDD_DID_OTHER_RSVD1        0x30
  238. #define HIL_IDD_DID_OTHER_BARCODE_MASK    0xfc    /* Tone Generator */
  239. #define HIL_IDD_DID_OTHER_BARCODE    0x2c
  240. #define HIL_IDD_DID_OTHER_RSVD2_MASK    0xfc    /* Reserved */
  241. #define HIL_IDD_DID_OTHER_RSVD2        0x28
  242. #define HIL_IDD_DID_OTHER_RSVD3_MASK    0xf8    /* Reserved */
  243. #define HIL_IDD_DID_OTHER_RSVD3        0x20
  244. #define HIL_IDD_DID_TYPE_KEYPAD        0x00    /* Vectra Keyboard */
  245.  
  246. /* IDD record header 
  247.  */
  248. #define HIL_IDD_HEADER_AXSET_MASK    0x03    /* Number of axis in a set */
  249. #define HIL_IDD_HEADER_RSC        0x04    /* Supports RSC command */
  250. #define HIL_IDD_HEADER_EXD        0x08    /* Supports EXD command */
  251. #define HIL_IDD_HEADER_IOD        0x10    /* IOD byte to follow */
  252. #define HIL_IDD_HEADER_16BIT        0x20    /* 16 (vs. 8) bit resolution */
  253. #define HIL_IDD_HEADER_ABS        0x40    /* Reports Absolute Position */
  254. #define HIL_IDD_HEADER_2X_AXIS        0x80    /* Two sets of 1-3 axis */
  255.  
  256. /* I/O Descriptor
  257.  */
  258. #define HIL_IDD_IOD_NBUTTON_MASK    0x07    /* Number of buttons */
  259. #define HIL_IDD_IOD_PROXIMITY        0x08    /* Proximity in/out events */
  260. #define HIL_IDD_IOD_PROMPT_MASK        0x70    /* Number of prompts/acks */
  261. #define HIL_IDD_IOD_PROMPT_SHIFT    4
  262. #define HIL_IDD_IOD_PROMPT        0x80    /* Generic prompt/ack */
  263.  
  264. #define HIL_IDD_NUM_AXES_PER_SET(header_packet) \
  265. ((header_packet) & HIL_IDD_HEADER_AXSET_MASK)
  266.  
  267. #define HIL_IDD_NUM_AXSETS(header_packet) \
  268. (2 - !((header_packet) & HIL_IDD_HEADER_2X_AXIS))
  269.  
  270. #define HIL_IDD_LEN(header_packet) \
  271. ((4 - !(header_packet & HIL_IDD_HEADER_IOD) -            \
  272.   2 * !(HIL_IDD_NUM_AXES_PER_SET(header_packet))) +        \
  273.   2 * HIL_IDD_NUM_AXES_PER_SET(header_packet) *            \
  274.  !!((header_packet) & HIL_IDD_HEADER_ABS))
  275.  
  276. /* The following HIL_IDD_* macros assume you have an array of 
  277.  * packets and/or unpacked 8-bit data in the order that they 
  278.  * were received.
  279.  */
  280.  
  281. #define HIL_IDD_AXIS_COUNTS_PER_M(header_ptr) \
  282. (!(HIL_IDD_NUM_AXSETS(*(header_ptr))) ? -1 :            \
  283. (((*(header_ptr + 1) & HIL_PKT_DATA_MASK) +            \
  284.   ((*(header_ptr + 2) & HIL_PKT_DATA_MASK)) << 8)        \
  285. * ((*(header_ptr) & HIL_IDD_HEADER_16BIT) ? 100 : 1)))
  286.  
  287. #define HIL_IDD_AXIS_MAX(header_ptr, __axnum) \
  288. ((!(*(header_ptr) & HIL_IDD_HEADER_ABS) ||            \
  289.   (HIL_IDD_NUM_AXES_PER_SET(*(header_ptr)) <= __axnum)) ? 0 :    \
  290.  ((HIL_PKT_DATA_MASK & *((header_ptr) + 3 + 2 * __axnum)) +    \
  291.   ((HIL_PKT_DATA_MASK & *((header_ptr) + 4 + 2 * __axnum)) << 8)))
  292.  
  293. #define HIL_IDD_IOD(header_ptr) \
  294. (*(header_ptr + HIL_IDD_LEN((*header_ptr)) - 1))
  295.  
  296. #define HIL_IDD_HAS_GEN_PROMPT(header_ptr) \
  297. ((*header_ptr & HIL_IDD_HEADER_IOD) &&                \
  298.  (HIL_IDD_IOD(header_ptr) & HIL_IDD_IOD_PROMPT))
  299.  
  300. #define HIL_IDD_HAS_GEN_PROXIMITY(header_ptr) \
  301. ((*header_ptr & HIL_IDD_HEADER_IOD) &&                \
  302.  (HIL_IDD_IOD(header_ptr) & HIL_IDD_IOD_PROXIMITY))
  303.  
  304. #define HIL_IDD_NUM_BUTTONS(header_ptr) \
  305. ((*header_ptr & HIL_IDD_HEADER_IOD) ?                \
  306.  (HIL_IDD_IOD(header_ptr) & HIL_IDD_IOD_NBUTTON_MASK) : 0)
  307.  
  308. #define HIL_IDD_NUM_PROMPTS(header_ptr) \
  309. ((*header_ptr & HIL_IDD_HEADER_IOD) ?                \
  310.  ((HIL_IDD_IOD(header_ptr) & HIL_IDD_IOD_NPROMPT_MASK)        \
  311.   >> HIL_IDD_IOD_PROMPT_SHIFT) : 0)
  312.  
  313. /* The response to HIL EXD commands -- the "extended describe record" */
  314. #define    HIL_EXD_HEADER_WRG        0x03    /* Supports type2 WRG */
  315. #define HIL_EXD_HEADER_WRG_TYPE1    0x01    /* Supports type1 WRG */
  316. #define    HIL_EXD_HEADER_WRG_TYPE2    0x02    /* Supports type2 WRG */
  317. #define    HIL_EXD_HEADER_RRG        0x04    /* Supports RRG command */
  318. #define    HIL_EXD_HEADER_RNM        0x10    /* Supports RNM command */
  319. #define HIL_EXD_HEADER_RST        0x20    /* Supports RST command */
  320. #define HIL_EXD_HEADER_LOCALE        0x40    /* Contains locale code */
  321.  
  322. #define HIL_EXD_NUM_RRG(header_ptr) \
  323. ((*header_ptr & HIL_EXD_HEADER_RRG) ? \
  324.  (*(header_ptr + 1) & HIL_PKT_DATA_MASK) : 0)
  325.  
  326. #define HIL_EXD_NUM_WWG(header_ptr) \
  327. ((*header_ptr & HIL_EXD_HEADER_WRG) ?                \
  328.  (*(header_ptr + 2 - !(*header_ptr & HIL_EXD_HEADER_RRG)) &    \
  329.     HIL_PKT_DATA_MASK) : 0)
  330.  
  331. #define HIL_EXD_LEN(header_ptr) \
  332. (!!(*header_ptr & HIL_EXD_HEADER_RRG) +                \
  333.  !!(*header_ptr & HIL_EXD_HEADER_WRG) +                \
  334.  !!(*header_ptr & HIL_EXD_HEADER_LOCALE) +            \
  335.  2 * !!(*header_ptr & HIL_EXD_HEADER_WRG_TYPE2) + 1)
  336.  
  337. #define HIL_EXD_LOCALE(header_ptr) \
  338. (!(*header_ptr & HIL_EXD_HEADER_LOCALE) ? -1 :            \
  339.  (*(header_ptr + HIL_EXD_LEN(header_ptr) - 1) & HIL_PKT_DATA_MASK))
  340.  
  341. #define HIL_EXD_WRG_TYPE2_LEN(header_ptr) \
  342. (!(*header_ptr & HIL_EXD_HEADER_WRG_TYPE2) ? -1    :            \
  343.  (*(header_ptr + HIL_EXD_LEN(header_ptr) - 2 -                      \
  344.     !!(*header_ptr & HIL_EXD_HEADER_LOCALE)) & HIL_PKT_DATA_MASK) +    \
  345.  ((*(header_ptr + HIL_EXD_LEN(header_ptr) - 1 -                \
  346.      !!(*header_ptr & HIL_EXD_HEADER_LOCALE)) & HIL_PKT_DATA_MASK) << 8))
  347.  
  348. /* Device locale codes. */ 
  349.  
  350. /* Last defined locale code.  Everything above this is "Reserved",
  351.    and note that this same table applies to the Device ID Byte where 
  352.    keyboards may have a nationality code which is only 5 bits. */
  353. #define HIL_LOCALE_MAX 0x1f
  354.  
  355. /* Map to hopefully useful strings.  I was trying to make these look
  356.    like locale.aliases strings do; maybe that isn't the right table to
  357.    emulate.  In either case, I didn't have much to work on. */
  358. #define HIL_LOCALE_MAP \
  359. "",            /* 0x00 Reserved */        \
  360. "",            /* 0x01 Reserved */        \
  361. "",            /* 0x02 Reserved */        \
  362. "swiss.french",        /* 0x03 Swiss/French */        \
  363. "portuguese",        /* 0x04 Portuguese */        \
  364. "arabic",        /* 0x05 Arabic */        \
  365. "hebrew",        /* 0x06 Hebrew */        \
  366. "english.canadian",    /* 0x07 Canadian English */    \
  367. "turkish",        /* 0x08 Turkish */        \
  368. "greek",        /* 0x09 Greek */        \
  369. "thai",            /* 0x0a Thai (Thailand) */    \
  370. "italian",        /* 0x0b Italian */        \
  371. "korean",        /* 0x0c Hangul (Korea) */    \
  372. "dutch",        /* 0x0d Dutch */        \
  373. "swedish",        /* 0x0e Swedish */        \
  374. "german",        /* 0x0f German */        \
  375. "chinese",        /* 0x10 Chinese-PRC */        \
  376. "chinese",        /* 0x11 Chinese-ROC */        \
  377. "swiss.french",        /* 0x12 Swiss/French II */    \
  378. "spanish",        /* 0x13 Spanish */        \
  379. "swiss.german",        /* 0x14 Swiss/German II */    \
  380. "flemish",        /* 0x15 Belgian (Flemish) */    \
  381. "finnish",        /* 0x16 Finnish    */        \
  382. "english.uk",        /* 0x17 United Kingdom */    \
  383. "french.canadian",    /* 0x18 French/Canadian */    \
  384. "swiss.german",        /* 0x19 Swiss/German */        \
  385. "norwegian",        /* 0x1a Norwegian */        \
  386. "french",        /* 0x1b French */        \
  387. "danish",        /* 0x1c Danish */        \
  388. "japanese",        /* 0x1d Katakana */        \
  389. "spanish",        /* 0x1e Latin American/Spanish*/\
  390. "english.us"        /* 0x1f United States */    \
  391.  
  392.  
  393. /* HIL keycodes */
  394. #define HIL_KEYCODES_SET1_TBLSIZE 128
  395. #define HIL_KEYCODES_SET1     \
  396.    KEY_5,        KEY_RESERVED,    KEY_RIGHTALT,    KEY_LEFTALT,    \
  397.    KEY_RIGHTSHIFT,    KEY_LEFTSHIFT,    KEY_LEFTCTRL,    KEY_SYSRQ,    \
  398.    KEY_KP4,        KEY_KP8,    KEY_KP5,    KEY_KP9,    \
  399.    KEY_KP6,        KEY_KP7,    KEY_KPCOMMA,    KEY_KPENTER,    \
  400.    KEY_KP1,        KEY_KPSLASH,    KEY_KP2,    KEY_KPPLUS,    \
  401.    KEY_KP3,        KEY_KPASTERISK,    KEY_KP0,    KEY_KPMINUS,    \
  402.    KEY_B,        KEY_V,        KEY_C,        KEY_X,        \
  403.    KEY_Z,        KEY_RESERVED,    KEY_RESERVED,   KEY_ESC,    \
  404.    KEY_6,        KEY_F10,    KEY_3,        KEY_F11,    \
  405.    KEY_KPDOT,        KEY_F9,        KEY_TAB /*KP*/,    KEY_F12,    \
  406.    KEY_H,        KEY_G,        KEY_F,        KEY_D,        \
  407.    KEY_S,        KEY_A,        KEY_RESERVED,    KEY_CAPSLOCK,    \
  408.    KEY_U,        KEY_Y,        KEY_T,        KEY_R,        \
  409.    KEY_E,        KEY_W,        KEY_Q,        KEY_TAB,    \
  410.    KEY_7,        KEY_6,        KEY_5,        KEY_4,        \
  411.    KEY_3,        KEY_2,        KEY_1,        KEY_GRAVE,    \
  412.    KEY_F13,        KEY_F14,    KEY_F15,    KEY_F16,    \
  413.    KEY_F17,        KEY_F18,    KEY_F19,    KEY_F20,    \
  414.    KEY_MENU,        KEY_F4,        KEY_F3,        KEY_F2,        \
  415.    KEY_F1,        KEY_VOLUMEUP,    KEY_STOP,    KEY_SENDFILE,    \
  416.    KEY_SYSRQ,        KEY_F5,        KEY_F6,        KEY_F7,        \
  417.    KEY_F8,        KEY_VOLUMEDOWN,    KEY_DEL_EOL,    KEY_DEL_EOS,    \
  418.    KEY_8,        KEY_9,        KEY_0,        KEY_MINUS,    \
  419.    KEY_EQUAL,        KEY_BACKSPACE,    KEY_INS_LINE,    KEY_DEL_LINE,    \
  420.    KEY_I,        KEY_O,        KEY_P,        KEY_LEFTBRACE,    \
  421.    KEY_RIGHTBRACE,    KEY_BACKSLASH,    KEY_INSERT,    KEY_DELETE,    \
  422.    KEY_J,        KEY_K,        KEY_L,        KEY_SEMICOLON,    \
  423.    KEY_APOSTROPHE,    KEY_ENTER,    KEY_HOME,    KEY_PAGEUP,    \
  424.    KEY_M,        KEY_COMMA,    KEY_DOT,    KEY_SLASH,    \
  425.    KEY_BACKSLASH,    KEY_SELECT,    KEY_102ND,    KEY_PAGEDOWN,    \
  426.    KEY_N,        KEY_SPACE,    KEY_NEXT,    KEY_RESERVED,    \
  427.    KEY_LEFT,        KEY_DOWN,    KEY_UP,        KEY_RIGHT
  428.  
  429.  
  430. #define HIL_KEYCODES_SET3_TBLSIZE 128
  431. #define HIL_KEYCODES_SET3     \
  432.   KEY_RESERVED,    KEY_ESC,    KEY_1,        KEY_2,            \
  433.   KEY_3,    KEY_4,        KEY_5,        KEY_6,            \
  434.   KEY_7,    KEY_8,        KEY_9,        KEY_0,            \
  435.   KEY_MINUS,    KEY_EQUAL,    KEY_BACKSPACE,    KEY_TAB,        \
  436.   KEY_Q,    KEY_W,        KEY_E,        KEY_R,            \
  437.   KEY_T,    KEY_Y,        KEY_U,        KEY_I,            \
  438.   KEY_O,    KEY_P,        KEY_LEFTBRACE,    KEY_RIGHTBRACE,        \
  439.   KEY_ENTER,    KEY_LEFTCTRL,    KEY_A,        KEY_S,            \
  440.   KEY_D,    KEY_F,        KEY_G,        KEY_H,            \
  441.   KEY_J,    KEY_K,        KEY_L,        KEY_SEMICOLON,        \
  442.   KEY_APOSTROPHE,KEY_GRAVE,    KEY_LEFTSHIFT,    KEY_BACKSLASH,        \
  443.   KEY_Z,    KEY_X,        KEY_C,        KEY_V,            \
  444.   KEY_B,    KEY_N,        KEY_M,        KEY_COMMA,        \
  445.   KEY_DOT,    KEY_SLASH,    KEY_RIGHTSHIFT,    KEY_KPASTERISK,        \
  446.   KEY_LEFTALT,    KEY_SPACE,    KEY_CAPSLOCK,    KEY_F1,            \
  447.   KEY_F2,    KEY_F3,        KEY_F4,        KEY_F5,            \
  448.   KEY_F6,    KEY_F7,        KEY_F8,        KEY_F9,            \
  449.   KEY_F10,    KEY_NUMLOCK,    KEY_SCROLLLOCK,    KEY_KP7,        \
  450.   KEY_KP8,    KEY_KP9,    KEY_KPMINUS,    KEY_KP4,        \
  451.   KEY_KP5,    KEY_KP6,    KEY_KPPLUS,    KEY_KP1,        \
  452.   KEY_KP2,    KEY_KP3,    KEY_KP0,    KEY_KPDOT,        \
  453.   KEY_SYSRQ,    KEY_RESERVED,    KEY_RESERVED,    KEY_RESERVED,        \
  454.   KEY_RESERVED,    KEY_RESERVED,    KEY_RESERVED,    KEY_RESERVED,        \
  455.   KEY_RESERVED,    KEY_RESERVED,    KEY_RESERVED,    KEY_RESERVED,        \
  456.   KEY_UP,    KEY_LEFT,    KEY_DOWN,    KEY_RIGHT,        \
  457.   KEY_HOME,    KEY_PAGEUP,    KEY_END,    KEY_PAGEDOWN,        \
  458.   KEY_INSERT,    KEY_DELETE,    KEY_102ND,    KEY_RESERVED,        \
  459.   KEY_RESERVED,    KEY_RESERVED,    KEY_RESERVED,    KEY_RESERVED,        \
  460.   KEY_F1,    KEY_F2,        KEY_F3,        KEY_F4,            \
  461.   KEY_F5,    KEY_F6,        KEY_F7,        KEY_F8,            \
  462.   KEY_RESERVED,    KEY_RESERVED,    KEY_RESERVED,    KEY_RESERVED,        \
  463.   KEY_RESERVED,    KEY_RESERVED,    KEY_RESERVED,    KEY_RESERVED
  464.  
  465.  
  466. /* Response to POL command, the "poll record header" */
  467.  
  468. #define HIL_POL_NUM_AXES_MASK    0x03    /* Number of axis reported */
  469. #define HIL_POL_CTS        0x04    /* Device ready to receive data */
  470. #define HIL_POL_STATUS_PENDING    0x08    /* Device has status to report */
  471. #define HIL_POL_CHARTYPE_MASK    0x70    /* Type of character data to follow */
  472. #define HIL_POL_CHARTYPE_NONE    0x00    /* No character data to follow */
  473. #define HIL_POL_CHARTYPE_RSVD1    0x10    /* Reserved Set 1 */
  474. #define HIL_POL_CHARTYPE_ASCII    0x20    /* U.S. ASCII */
  475. #define HIL_POL_CHARTYPE_BINARY    0x30    /* Binary data */
  476. #define HIL_POL_CHARTYPE_SET1    0x40    /* Keycode Set 1 */
  477. #define HIL_POL_CHARTYPE_RSVD2    0x50    /* Reserved Set 2 */
  478. #define HIL_POL_CHARTYPE_SET2    0x60    /* Keycode Set 2 */
  479. #define HIL_POL_CHARTYPE_SET3    0x70    /* Keycode Set 3 */
  480. #define HIL_POL_AXIS_ALT    0x80    /* Data is from axis set 2 */
  481.  
  482.  
  483. #endif /* _HIL_H_ */
  484.