summaryrefslogtreecommitdiff
path: root/chips/lk201.h
diff options
context:
space:
mode:
Diffstat (limited to 'chips/lk201.h')
-rw-r--r--chips/lk201.h241
1 files changed, 241 insertions, 0 deletions
diff --git a/chips/lk201.h b/chips/lk201.h
new file mode 100644
index 0000000..5c7bbba
--- /dev/null
+++ b/chips/lk201.h
@@ -0,0 +1,241 @@
+/*
+ * Mach Operating System
+ * Copyright (c) 1991,1990 Carnegie Mellon University
+ * All Rights Reserved.
+ *
+ * Permission to use, copy, modify and distribute this software and its
+ * documentation is hereby granted, provided that both the copyright
+ * notice and this permission notice appear in all copies of the
+ * software, derivative works or modified versions, and any portions
+ * thereof, and that both notices appear in supporting documentation.
+ *
+ * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
+ * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
+ * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
+ *
+ * Carnegie Mellon requests users of this software to return to
+ *
+ * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
+ * School of Computer Science
+ * Carnegie Mellon University
+ * Pittsburgh PA 15213-3890
+ *
+ * any improvements or extensions that they make and grant Carnegie Mellon
+ * the rights to redistribute these changes.
+ */
+/*
+ * File: lk201.h
+ * Author: Alessandro Forin, Carnegie Mellon University
+ * Date: 9/90
+ *
+ * Definitions for the LK201 Keyboard Driver
+ */
+
+/*
+ * KeyCodes generated by the LK201 board
+ * (labels as in the lk201-AA USA model)
+ */
+
+#define LK_MINCODE 0x56
+ /* Function keys */
+#define LK_F1 0x56 /* div 10 */
+#define LK_F2 0x57
+#define LK_F3 0x58
+#define LK_F4 0x59
+#define LK_F5 0x5a
+#define LK_F6 0x64 /* div 11 */
+#define LK_F7 0x65
+#define LK_F8 0x66
+#define LK_F9 0x67
+#define LK_F10 0x68
+#define LK_F11 0x71 /* div 12 */
+#define LK_ESC LK_F11
+#define LK_F12 0x72
+#define LK_BS LK_F12
+#define LK_F13 0x73
+#define LK_LF LK_F13
+#define LK_F14 0x74
+#define LK_HELP 0x7c /* div 13 */
+#define LK_DO 0x7d
+#define LK_F17 0x80 /* div 14 */
+#define LK_F18 0x81
+#define LK_F19 0x82
+#define LK_F20 0x83
+ /* Editing keys */
+#define LK_FIND 0x8a /* div 9 */
+#define LK_INSERT 0x8b
+#define LK_REMOVE 0x8c
+#define LK_SELECT 0x8d
+#define LK_PREV_SCREEN 0x8e
+#define LK_NEXT_SCREEN 0x8f
+ /* Numeric keypad */
+#define LK_KP_0 0x92 /* div 2 */
+#define LK_KP_DOT 0x94
+#define LK_KP_ENTER 0x95
+#define LK_KP_1 0x96
+#define LK_KP_2 0x97
+#define LK_KP_3 0x98
+#define LK_KP_4 0x99
+#define LK_KP_5 0x9a
+#define LK_KP_6 0x9b
+#define LK_KP_COMMA 0x9c
+#define LK_KP_7 0x9d
+#define LK_KP_8 0x9e
+#define LK_KP_9 0x9f
+#define LK_KP_MINUS 0xa0
+#define LK_KP_PF1 0xa1
+#define LK_KP_PF2 0xa2
+#define LK_KP_PF3 0xa3
+#define LK_KP_PF4 0xa4
+ /* Cursor keys */
+#define LK_LEFT 0xa7 /* div 7 */
+#define LK_RIGHT 0xa8
+#define LK_DOWN 0xa9 /* div 8 */
+#define LK_UP 0xaa
+ /* Shift & Co. */
+#define LK_R_SHIFT 0xab /* lk401 */
+#define LK_L_ALT 0xac /* lk401 */
+#define LK_R_COMPOSE 0xad /* lk401 */
+#define LK_SHIFT 0xae /* div 6 */
+#define LK_CNTRL 0xaf
+#define LK_LOCK 0xb0 /* div 5 */
+#define LK_ALT 0xb1
+#define LK_R_ALT 0xb2 /* lk401 */
+ /* Special codes */
+#define LK_ALLUP 0xb3
+#define LK_REPEAT 0xb4
+#define LK_OUTPUT_ERR 0xb5
+#define LK_INPUT_ERR 0xb6
+#define LK_KDBLOCK_ACK 0xb7
+#define LK_TESTMODE_ACK 0xb8
+#define LK_PFX_KEYDOWN 0xb9
+#define LK_MODECHG_ACK 0xba
+ /* Delete & Co. */
+#define LK_DEL 0xbc /* div 3 */
+#define LK_RETURN 0xbd /* div 4 */
+#define LK_TAB 0xbe
+ /* Graphic keys */
+
+#define LK_TILDE 0xbf /* div 2 */
+#define LK_1 0xc0
+#define LK_Q 0xc1
+#define LK_A 0xc2
+#define LK_Z 0xc3
+#define LK_2 0xc5
+#define LK_W 0xc6
+#define LK_S 0xc7
+#define LK_X 0xc8
+#define LK_LESSGRT 0xc9
+#define LK_3 0xcb
+#define LK_E 0xcc
+#define LK_D 0xcd
+#define LK_C 0xce
+#define LK_4 0xd0
+#define LK_R 0xd1
+#define LK_F 0xd2
+#define LK_V 0xd3
+#define LK_SP 0xd4
+#define LK_5 0xd6
+#define LK_T 0xd7
+#define LK_G 0xd8
+#define LK_B 0xd9
+#define LK_6 0xdb
+#define LK_Y 0xdc
+#define LK_H 0xdd
+#define LK_N 0xde
+#define LK_7 0xe0 /* div 1 */
+#define LK_U 0xe1
+#define LK_J 0xe2
+#define LK_M 0xe3
+#define LK_8 0xe5
+#define LK_I 0xe6
+#define LK_K 0xe7
+#define LK_DQUOTE 0xe8
+#define LK_9 0xea
+#define LK_O 0xeb
+#define LK_L 0xec
+#define LK_DOT 0xed
+#define LK_0 0xef
+#define LK_P 0xf0
+#define LK_COLON 0xf2
+#define LK_QMARK 0xf3
+#define LK_PLUS 0xf5
+#define LK_RBRACKET 0xf6
+#define LK_VBAR 0xf7
+#define LK_MINUS 0xf9
+#define LK_LBRACKET 0xfa
+#define LK_COMMA 0xfb
+
+
+/*
+ * Commands to the keyboard processor
+ */
+
+#define LK_PARAM 0x80 /* start/end parameter list */
+
+#define LK_CMD_RESUME 0x8b
+#define LK_CMD_INHIBIT 0xb9
+#define LK_CMD_LEDS_ON 0x13 /* 1 param: led bitmask */
+#define LK_CMD_LEDS_OFF 0x11 /* 1 param: led bitmask */
+#define LK_CMD_DIS_KEYCLK 0x99
+#define LK_CMD_ENB_KEYCLK 0x1b /* 1 param: volume */
+#define LK_CMD_DIS_CTLCLK 0xb9
+#define LK_CMD_ENB_CTLCLK 0xbb
+#define LK_CMD_SOUND_CLK 0x9f
+#define LK_CMD_DIS_BELL 0xa1
+#define LK_CMD_ENB_BELL 0x23 /* 1 param: volume */
+#define LK_CMD_BELL 0xa7
+#define LK_CMD_TMP_NORPT 0xc1
+#define LK_CMD_ENB_RPT 0xe3
+#define LK_CMD_DIS_RPT 0xe1
+#define LK_CMD_RPT_TO_DOWN 0xd9
+#define LK_CMD_REQ_ID 0xab
+#define LK_CMD_POWER_UP 0xfd
+#define LK_CMD_TEST_MODE 0xcb
+#define LK_CMD_SET_DEFAULTS 0xd3
+
+/* there are 4 leds, represent them in the low 4 bits of a byte */
+#define LK_PARAM_LED_MASK(ledbmap) (LK_PARAM|(ledbmap))
+
+/* max volume is 0, lowest is 0x7 */
+#define LK_PARAM_VOLUME(v) (LK_PARAM|((v)&0x7))
+
+/* mode set command(s) details */
+#define LK_MODE_DOWN 0x0
+#define LK_MODE_RPT_DOWN 0x2
+#define LK_MODE_DOWN_UP 0x6
+#define LK_CMD_MODE(m,div) (LK_PARAM|(div<<3)|m)
+
+
+/*
+ * Keyboard set_status codes and arguments
+ */
+
+/* Send a command packet to the lk201 */
+typedef struct {
+ unsigned char len; /* how many params */
+ unsigned char command; /* cmd to lk201 */
+ unsigned char params[2]; /* extra params */
+} lk201_cmd_t;
+#define LK201_SEND_CMD _IOW('q', 5, lk201_cmd_t)/* keybd. per. cmd */
+
+/* Control rotation of lk201 leds */
+#define LK201_LED_PATTERN _IOW('q', 119, int) /* cylon, ... */
+# define LED_COUNT 1 /* led counter */
+# define LED_ROTATE 2 /* led rotate */
+# define LED_CYLON 3 /* led cylon mode */
+
+#define LK201_LED_INTERVAL _IOW('q', 120, int) /* refresh interval */
+# define LED_OFF 0 /* no led movement */
+
+/* Map the caps-lock key to act as the control key (skinny-fingers) */
+#define LK201_mapLOCKtoCNTRL _IOW('q', 121, int) /* 1 or 0 */
+
+/* Remap a lk201 keycode to a different (ASCII) translation */
+typedef struct {
+ unsigned char in_keyval;
+ unsigned char shifted;
+ unsigned char out_keyval;
+ unsigned char meta;
+} KeyMap;
+#define LK201_REMAP_KEY _IOW('q', 122, KeyMap) /* 1 or 0 */