1 /*
2  *	Commands to the keyboard processor
3  */
4 
5 #define LK_PARAM		0x80	/* start/end parameter list */
6 
7 #define LK_CMD_RESUME		0x8b	/* resume transmission to the host */
8 #define LK_CMD_INHIBIT		0x89	/* stop transmission to the host */
9 #define LK_CMD_LEDS_ON		0x13	/* light LEDs */
10 					/* 1st param: led bitmask */
11 #define LK_CMD_LEDS_OFF		0x11	/* turn off LEDs */
12 					/* 1st param: led bitmask */
13 #define LK_CMD_DIS_KEYCLK	0x99	/* disable the keyclick */
14 #define LK_CMD_ENB_KEYCLK	0x1b	/* enable the keyclick */
15 					/* 1st param: volume */
16 #define LK_CMD_DIS_CTLCLK	0xb9	/* disable the Ctrl keyclick */
17 #define LK_CMD_ENB_CTLCLK	0xbb	/* enable the Ctrl keyclick */
18 #define LK_CMD_SOUND_CLK	0x9f	/* emit a keyclick */
19 #define LK_CMD_DIS_BELL		0xa1	/* disable the bell */
20 #define LK_CMD_ENB_BELL		0x23	/* enable the bell */
21 					/* 1st param: volume */
22 #define LK_CMD_BELL		0xa7	/* emit a bell */
23 #define LK_CMD_TMP_NORPT	0xd1	/* disable typematic */
24 					/* for the currently pressed key */
25 #define LK_CMD_ENB_RPT		0xe3	/* enable typematic */
26 					/* for RPT_DOWN groups */
27 #define LK_CMD_DIS_RPT		0xe1	/* disable typematic */
28 					/* for RPT_DOWN groups */
29 #define LK_CMD_RPT_TO_DOWN	0xd9	/* set RPT_DOWN groups to DOWN */
30 #define LK_CMD_REQ_ID		0xab	/* request the keyboard ID */
31 #define LK_CMD_POWER_UP		0xfd	/* init power-up sequence */
32 #define LK_CMD_TEST_MODE	0xcb	/* enter the factory test mode */
33 #define LK_CMD_TEST_EXIT	0x80	/* exit the factory test mode */
34 #define LK_CMD_SET_DEFAULTS	0xd3	/* set power-up defaults */
35 
36 #define LK_CMD_MODE(m,div)	(LK_PARAM|(((div)&0xf)<<3)|(((m)&0x3)<<1))
37 					/* select the repeat mode */
38 					/* for the selected key group */
39 #define LK_CMD_MODE_AR(m,div)	((((div)&0xf)<<3)|(((m)&0x3)<<1))
40 					/* select the repeat mode */
41 					/* and the repeat register */
42 					/* for the selected key group */
43 					/* 1st param: register number */
44 #define LK_CMD_RPT_RATE(r)	(0x78|(((r)&0x3)<<1))
45 					/* set the delay and repeat rate */
46 					/* for the selected repeat register */
47 					/* 1st param: initial delay */
48 					/* 2nd param: repeat rate */
49 
50 /* there are 4 leds, represent them in the low 4 bits of a byte */
51 #define LK_PARAM_LED_MASK(ledbmap)	(LK_PARAM|((ledbmap)&0xf))
52 #define LK_LED_WAIT		0x1	/* Wait LED */
53 #define LK_LED_COMP		0x2	/* Compose LED */
54 #define LK_LED_LOCK		0x4	/* Lock LED */
55 #define LK_LED_HOLD		0x8	/* Hold Screen LED */
56 
57 /* max volume is 0, lowest is 0x7 */
58 #define LK_PARAM_VOLUME(v)		(LK_PARAM|((v)&0x7))
59 
60 /* mode set command details, div is a key group number */
61 #define LK_MODE_DOWN		0x0	/* make only */
62 #define LK_MODE_RPT_DOWN	0x1	/* make and typematic */
63 #define LK_MODE_DOWN_UP		0x3	/* make and release */
64 
65 /* there are 4 repeat registers */
66 #define LK_PARAM_AR(r)		(LK_PARAM|((v)&0x3))
67 
68 /*
69  * Mappings between key groups and keycodes are as follows:
70  *
71  *  1: 0xbf - 0xff -- alphanumeric,
72  *  2: 0x91 - 0xa5 -- numeric keypad,
73  *  3: 0xbc        -- Backspace,
74  *  4: 0xbd - 0xbe -- Tab, Return,
75  *  5: 0xb0 - 0xb2 -- Lock, Compose Character,
76  *  6: 0xad - 0xaf -- Ctrl, Shift,
77  *  7: 0xa6 - 0xa8 -- Left Arrow, Right Arrow,
78  *  8: 0xa9 - 0xac -- Up Arrow, Down Arrow, Right Shift,
79  *  9: 0x88 - 0x90 -- editor keypad,
80  * 10: 0x56 - 0x62 -- F1 - F5,
81  * 11: 0x63 - 0x6e -- F6 - F10,
82  * 12: 0x6f - 0x7a -- F11 - F14,
83  * 13: 0x7b - 0x7d -- Help, Do,
84  * 14: 0x7e - 0x87 -- F17 - F20.
85  *
86  * Notes:
87  * 1. Codes in the 0x00 - 0x40 range are reserved.
88  * 2. The assignment of the 0x41 - 0x55 range is undiscovered, probably 10.
89  */
90 
91 /* delay is 5 - 630 ms; 0x00 and 0x7f are reserved */
92 #define LK_PARAM_DELAY(t)	((t)&0x7f)
93 
94 /* rate is 12 - 127 Hz; 0x00 - 0x0b and 0x7d (power-up!) are reserved */
95 #define LK_PARAM_RATE(r)	(LK_PARAM|((r)&0x7f))
96 
97 #define LK_SHIFT 1<<0
98 #define LK_CTRL 1<<1
99 #define LK_LOCK 1<<2
100 #define LK_COMP 1<<3
101 
102 #define LK_KEY_SHIFT		0xae
103 #define LK_KEY_CTRL		0xaf
104 #define LK_KEY_LOCK		0xb0
105 #define LK_KEY_COMP		0xb1
106 
107 #define LK_KEY_RELEASE		0xb3	/* all keys released */
108 #define LK_KEY_REPEAT		0xb4	/* repeat the last key */
109 
110 /* status responses */
111 #define LK_STAT_RESUME_ERR	0xb5	/* keystrokes lost while inhibited */
112 #define LK_STAT_ERROR		0xb6	/* an invalid command received */
113 #define LK_STAT_INHIBIT_ACK	0xb7	/* transmission inhibited */
114 #define LK_STAT_TEST_ACK	0xb8	/* the factory test mode entered */
115 #define LK_STAT_MODE_KEYDOWN	0xb9	/* a key is down on a change */
116 					/* to the DOWN_UP mode; */
117 					/* the keycode follows */
118 #define LK_STAT_MODE_ACK	0xba	/* the mode command succeeded */
119 
120 #define LK_STAT_PWRUP_ID	0x01	/* the power-up response start mark */
121 #define LK_STAT_PWRUP_OK	0x00	/* the power-up self test OK */
122 #define LK_STAT_PWRUP_KDOWN	0x3d	/* a key was down during the test */
123 #define LK_STAT_PWRUP_ERROR	0x3e	/* keyboard self test failure */
124 
125 extern unsigned char scancodeRemap[256];
126