|
|
1.1 root 1: nnkkbb -- Device Driver
2:
3:
4: The COHERENT device-driver nnkkbb supports industry-standard 83-, 101-, and
5: 102-key AT-protocol keyboards attached as the computer console. Unlike kkbb,
6: the other COHERENT keyboard driver, nnkkbb lets you define both the layout of
7: the keyboard and the values returned by function keys. It also lets you
8: change layout and function-key bindings by using the special keyboard
9: mapping programs kept in directory /ccoonnff/kkbbdd. This directory contains the C
10: source code for the mapping tables, as well as a MMaakkeeffiillee that helps you
11: rebuild the mapping programs. See the Lexicon article kkeeyybbooaarrdd ttaabblleess for
12: details.
13:
14: _K_e_r_n_e_l _V_a_r_i_a_b_l_e_s
15: Please note that the COHERENT 286 kernel references variables with a
16: trailing underscore character; for example, aattppaarrmm_. The COHERENT 386
17: kernel, however, does _n_o_t use a trailing underscore; for example, aattppaarrmm.
18:
19: The following descriptions apply to both COHERENT 286 and COHERENT 386, but
20: the notation will be in the COHERENT-386 form.
21:
22: _I_n_t_e_r_n_a_l _S_t_r_u_c_t_u_r_e
23: The following paragraphs describe the internal structure of the nnkkbb driver.
24: This information is of interest mainly to persons who wish to study the
25: design of device drivers.
26:
27: nnkkbb understands the following ``shift'' and ``lock'' keys:
28:
29: ssccrroollll Scroll lock
30: nnuumm Keypad NUM lock
31: ccaappss Shift or CAPS lock
32: llaalltt Left ALT key
33: rraalltt Right ALT key
34: llsshhiifftt Left SHIFT key
35: rrsshhiifftt Right SHIFT key
36: llccttrrll Left CTRL key
37: rrccttrrll Right CTRL key
38: aallttggrr ALT Graphic key (non-US keyboards)
39:
40: nnkkbb records an internal shift state, as defined by the current positions of
41: the shift and lock keys. The shift state is a logical combination of
42: internal states SSHHIIFFTT, CCTTRRLL, AALLTT, and AALLTT_GGRR. The llsshhiifftt and rrsshhiifftt keys
43: combine to form the current SSHHIIFFTT state for non-alphabetic keys.
44: Alphabetic keys generally use the current state of the ccaappss lock key in
45: addition to llsshhiifftt and rrsshhiifftt. Numeric keys found on the keypad generally
46: use the state of the nnuumm lock key combined with llsshhiifftt and rrsshhiifftt. The two
47: ``control'' keys, llccttrrll and rrccttrrll, form the internal CCTTRRLL state. In a
48: similar manner, the two ``alt'' keys, llaalltt and rraalltt, form the internal AALLTT
49: state. Note that 102-key keyboards generally replace the rraalltt key with the
50: aallttggrr key, to allow access to the alternate graphics characters found on
51: some keyboards.
52:
53: nnkkbb lets you configure or read the internal mapping tables via the
54: following iiooccttll() requests, as defined in header file <ssggttttyy.hh>:
55:
56: TTIIOOCCGGEETTFF Get function key bindings
57: TTIIOOCCSSEETTFF Set function key bindings
58: TTIIOOCCGGEETTKKBBTTGet keyboard table bindings
59: TTIIOOCCSSEETTKKBBTTSet keyboard table bindings
60:
61: Requests TTIIOOCCGGEETTFF and TTIIOOCCSSEETTFF reference a data structure of type FFNNKKEEYY,
62: which is a ttyyppeeddeeff defined in header file <ssyyss/kkbb.hh>. Structure member
63: kk_ffnnvvaall is a character array that contains a series of contiguous function
64: key/value bindings; the end of the bindings is marked by manifest constant
65: DDEELLIIMM. You can use any value other than DDEELLIIMM as part of a function-key
66: binding. Structure member kk_nnffkkeeyyss indicates how many function keys have
67: associated entries in kk_ffnnvvaall. Function keys are numbered from zero through
68: kk_nnffkkeeyyss-1.
69:
70: _D_i_s_a_b_l_i_n_g <_C_t_r_l><_A_l_t><_D_e_l>
71: By convention, function-key 0, when enabled, causes the computer system to
72: reboot. This function key is usually bound to the key sequence
73: <ccttrrll><aalltt><ddeell>, but you can disable it by setting the value of driver-
74: variable KKBBBBOOOOTT to zero. To do so, use the following command:
75:
76: /conf/patch /coherent KBBOOT=0
77:
78: Requests TTIIOOCCGGEETTKKBBTT and TTIIOOCCSSEETTKKBBTT reference an array that contains
79: MMAAXX_KKEEYYSS occurrences of data structure KKBBTTBBLL, which is a ttyyppeeddeeff defined in
80: header file <ssyyss/kkbb.hh>. Structure member kk_kkeeyy contains the _s_c_a_n _c_o_d_e _s_e_t
81: _t_h_r_e_e code value for the desired key. Header file <ssyyss/kkbbssccaann.hh> contains
82: manifest (symbolic) constants of the form KK__n_n_n, which map AT keyboard
83: _p_h_y_s_i_c_a_l key number _n_n_n to the corresponding scan-code set-three value
84: generated by the keyboard. Note that the nnkkbb driver disables the scan-code
85: translation that the keyboard controller normally performs, as well as
86: setting the keyboard to scan code set three.
87:
88: Structure member kk_vvaall is a nine-element array that contains the key
89: mappings that correspond to the following index values and shift states:
90:
91: 00 BBAASSEE
92: 11 SSHHIIFFTT
93: 22 CCTTRRLL
94: 33 CCTTRRLL_SSHHIIFFTT
95: 44 AALLTT
96: 55 AALLTT_SSHHIIFFTT
97: 66 AALLTT_CCTTRRLL
98: 77 AALLTT_CCTTRRLL_SSHHIIFFTT
99: 88 AALLTT_GGRR
100:
101: Structure member kk_ffllaaggss contains mode information for the given key. One
102: field in kk_ffllaaggss indicates the _c_l_a_s_s of key. This sub-field lets you
103: specify whether a key is a ``shift'' key (as defined above), a special or
104: programmable ``function'' key, or a ``regular'' key. The following
105: symbolic constants specify the _c_l_a_s_s of key:
106:
107: SS The specified key is a ``shift'' or ``lock'' key. Note that all
108: entries in array kk_vvaall must be identical for a ``shift'' or ``lock''
109: key to work correctly.
110:
111: FF The specified key is a ``function'' or special key. The value of all
112: elements of array kk_vvaall must specify a function key number. See
113: header file <kkbb.hh> for a list of predefined function keys.
114:
115: OO The specified key is ``regular'' and requires no special processing.
116:
117: The next sub-field of kk_ffllaaggss specifies the _t_y_p_e of key, as specified in
118: the AT keyboard technical reference. The _t_y_p_e sub-field specifies under
119: what conditions a given key will generate an interrupt. The possible
120: choices are:
121:
122: MM Make: generate an interrupt only upon key ``make'' (i.e., when the key
123: is depressed). This mode is useful for keys which do not repeat.
124: Note that using this mode with ``shift'' keys stops you from
125: unshifting upon release of the key!
126:
127: TT Typematic: generate an interrupt when the key is depressed, and
128: generate subsequent key-depression interrupts while the key is
129: depressed. The rate at which interrupts are generated is specified by
130: the typematic rate of the keyboard. This type is usually associated
131: with a ``regular'' key.
132:
133: MMBB Make/Break: generate an interrupt when the key is depressed, and when
134: it is released. No additional interrupts are generated no matter how
135: long the key is depressed. This mode is used for ``shift'' keys.
136:
137: TTMMBB Typematic/Make/Break: generate an interrupt when the key is first
138: depressed; generate subsequent key depression interrupts while the key
139: remains depressed; and generate an interrupt when the key is released.
140:
141: The last sub-field of kk_ffllaaggss specifies the _l_o_c_k keys, if any, that affect
142: the specified key:
143:
144: CC The ccaappss lock key that affects this key. If the specified key is
145: depressed while ccaappss lock is active, it is equivalent to having used
146: either of the SHIFT keys with this key. When ccaappss lock is in effect,
147: use of either of the SHIFT keys temporarily toggles the state of the
148: ccaappss lock.
149:
150: NN The nnuumm lock key affects this key. If the specified key is depressed
151: while nnuumm lock is active, it is equivalent to having used either of
152: the SHIFT keys in conjunction with the specified key. When nnuumm lock
153: is in effect, use of either of the SHIFT keys temporarily toggles the
154: state of the nnuumm lock.
155:
156: _P_r_o_b_l_e_m_s _W_i_t_h _I_n_c_o_m_p_a_t_i_b_l_e _K_e_y_b_o_a_r_d_s
157: If you are experiencing problems with respect to key mappings, and you
158: installed one of the loadable keyboard mapping tables from the keyboard
159: selection menu, you may have an incompatible keyboard. Please note that
160: the COHERENT nnkkbb driver (and loadable tables) only work with well-
161: engineered keyboards, such as those built by IBM, Cherry, MicroSwitch, or
162: Keytronics; when used with a poorly engineered ``clone'' keyboard, it may
163: not work correctly.
164:
165: The preferred action is to replace the inferior keyboard with one made by
166: one of the above-named manufacturers. If, however, you wish to use an
167: inferior keyboard with COHERENT, your best bet is to re-install COHERENT
168: and select the kkbb driver instead of nnkkbb. kkbb is not loadable and supports
169: only the U.S., German, and French keyboard layouts.
170:
171: If you do not wish to replace your keyboard or re-install COHERENT, then
172: the following _m_a_y help you cope with your keyboard's problems.
173:
174: 11. If the shift or control keys seem to ``stick'' in the oonn or ddoowwnn
175: postition, you can try to fix the keyboard mapping table that
176: corresponds to your country. For example, if you selected the U.S.
177: keyboard mapping table during installation but find that the right shift
178: or control key seems to stay down after you press it for the first time,
179: edit file /ccoonnff/kkbbdd/uuss.cc. To fix the right shift key, change the line
180: that reads:
181:
182: {K_57,rshift,rshift,rshift,rshift,rshift,rshift,rshift,rshift,rshift, S|MB },
183: to:
184:
185: {K_57,none, none, none, none, none, none, none, none, none, O|MB },
186: To fix the right control key, change the line that reads
187:
188: {K_64, rctrl, rctrl, rctrl, rctrl, rctrl, rctrl, rctrl, rctrl, rctrl, S|MB },
189: to:
190:
191: {K_64,none, none, none, none, none, none, none, none, none, O|MB },
192: This makes these keys inoperative. This, of course, is less than
193: desirable, but it will at least prevent you from accidently forcing your
194: keyboard into a shift or control state from which you cannot exit.
195:
196: Once you modified the keyboard table, rebuild the keyboard executable
197: that corresponds to the modified table, as described above and in the
198: Lexicon article kkeeyybbooaarrdd ttaabblleess. Thereafter, you can enter the name of
199: the newly created executable and it will load the modified keyboard
200: table into the keyboard driver. This also happens automatically at boot
201: time.
202:
203: 22. If one or two keys are transposed, have no output, or output the
204: incorrect value, you must (a) figure out which key location is
205: incorrect, (b) decide what the correct value should be for all key
206: states, (c) edit the file in directory /ccoonnff/kkbbdd that corresponds to
207: your selection, (d) rebuild the keyboard table executable, and (e)
208: reload the keyboard table by invoking the newly created executable.
209:
210: As noted above, the easiest solution is to replace the keyboard.
211:
212: _S_e_e _A_l_s_o
213: ddeevviiccee ddrriivveerrss, ffnnkkeeyy, kkbb.hh, kkeeyybbooaarrdd ttaabblleess
214: _T_e_c_h_n_i_c_a_l _R_e_f_e_r_e_n_c_e _f_o_r _t_h_e _I_B_M _P_e_r_s_o_n_a_l _C_o_m_p_u_t_e_r _A_T, IBM Corporation,
215: 1984.
216: _M_u_l_t_i-_F_u_n_c_t_i_o_n _K_e_y_b_o_a_r_d_s: _L_a_y_o_u_t_s, Cherry Electrical Products Corp.
217:
218: _N_o_t_e_s
219: With release 3.2 of COHERENT, nnkkbb became the standard keyboard driver,
220: replacing the kkbb driver used in earlier releases. Please note that either
221: nnkkbb or kkbb can be linked into the COHERENT kernel, like most other COHERENT
222: device drivers. Neither driver is found in directory /ddrrvv; this directory
223: is reserved for loadable device drivers, such as those for the COM ports or
224: for the shared-memory driver. The COHERENT Device Driver Kit contains
225: tools and information to rebuild the COHERENT kernel, which is necessary if
226: you wish to switch keyboard drivers.
227:
228: The main difference between nnkkbb and kkbb is that nnkkbb uses a ``supplemental''
229: process to interpret keystrokes. This permits COHERENT users to switch
230: among flavors of international keyboards with a minimum of difficulty. As
231: noted above, the source code for these supplemental programs is kept in
232: directory /ccoonnff/kkbbdd. See the Lexicon article on kkeeyybbooaarrdd ttaabblleess for
233: details on how to modify, compile, and load one of these keyboard-
234: interpretation programs.
235:
236: Please note, finally, that if you attempt to use a keyboard interpreter
237: with kkbb, it will fail with an error message.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.