Specifications.
[pintos-anon] / specs / kbd / scancodes-1.html
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
2 <HTML>
3 <HEAD>
4  <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
5  <TITLE>Keyboard scancodes: Keyboard scancodes</TITLE>
6  <LINK HREF="scancodes-2.html" REL=next>
7
8  <LINK HREF="scancodes.html#toc1" REL=contents>
9 </HEAD>
10 <BODY>
11 <A HREF="scancodes-2.html">Next</A>
12 Previous
13 <A HREF="scancodes.html#toc1">Contents</A>
14 <HR>
15 <H2><A NAME="s1">1. Keyboard scancodes</A></H2>
16
17 <P>The data from a keyboard comes mainly in the form of scancodes,
18 produced by key presses or used in the protocol with the computer.
19 (
20 <A HREF="scancodes-9.html#scancodesets">Different codes</A> are used by the keyboard
21 firmware internally, and there also exist several
22 <A HREF="scancodes-9.html#scancodesets">sets of scancodes</A>.
23 Here in this section we only talk about the default codes - those from
24 translated scancode set 2. Less common modes are discussed
25 <A HREF="scancodes-9.html#scancodesets">below</A>.)
26 Each key press and key release produces between 0 and 6 scancodes.
27 <P>
28 <H2><A NAME="ss1.1">1.1 Key release</A>
29 </H2>
30
31 <P>Below I'll only mention the scancode for key press (`make').
32 The scancode for key release (`break') is obtained from it
33 by setting the high order bit (adding 0x80 = 128).
34 Thus, Esc press produces scancode <B>01</B>, Esc release
35 scancode <B>81</B> (hex).
36 For sequences things are similar: Keypad-/ gives <B>e0</B> <B>35</B>
37 when pressed, <B>e0</B> <B>b5</B> when released. Most keyboards will
38 repeat the make code (key down code) when the key repeats. Some will also
39 fake Shift down and Shift up events during the repeat.
40 <P>The keys PrtSc/SysRq and Pause/Break are special.
41 The former produces scancode <B>e0</B> <B>2a</B> <B>e0</B> <B>37</B>
42 when no modifier key is pressed simultaneously, <B>e0</B> <B>37</B>
43 together with Shift or Ctrl, but <B>54</B> together with (left or right) Alt.
44 (And one gets the expected sequences upon release. But see
45 <A HREF="scancodes-5.html#mtek">below</A>.)
46 The latter produces scancode sequence
47 <B>e1</B> <B>1d</B> <B>45</B> <B>e1</B> <B>9d</B> <B>c5</B>
48 when pressed (without modifier) and nothing at all upon release.
49 However, together with (left or right) Ctrl, one gets
50 <B>e0</B> <B>46</B> <B>e0</B> <B>c6</B>,
51 and again nothing at release. It does not repeat.
52 <P>See 
53 <A HREF="#dellnoup">below</A> for a report on keys
54 with a different behaviour.
55 <P>There are many reports of laptops with badly debounced key-up events.
56 Thus, unexpected key-up events should probably be regarded as not
57 unusual, and be ignored. Another source of key-up events without
58 preceding key-down can be the 
59 <A HREF="#fakeshifts">fake shift</A>.
60 <P>
61 <H2><A NAME="ss1.2">1.2 Protocol scancodes</A>
62 </H2>
63
64 <P>Most scancodes indicate a key press or release.
65 Some are used in the communication protocol.
66 <P>
67 <P>
68 <CENTER><TABLE BORDER><TR><TD>
69 <B>00</B> </TD><TD> Keyboard error - see <B>ff</B> </TD></TR><TR><TD>
70 <B>aa</B> </TD><TD> BAT (Basic Assurance Test) OK </TD></TR><TR><TD>
71 <B>ee</B> </TD><TD> Result of echo command </TD></TR><TR><TD>
72 <B>f1</B> </TD><TD> Some keyboards, as reply to command <B>a4</B>:Password not installed </TD></TR><TR><TD>
73 <B>fa</B> </TD><TD> Acknowledge from kbd </TD></TR><TR><TD>
74 <B>fc</B> </TD><TD> BAT error or Mouse transmit error </TD></TR><TR><TD>
75 <B>fd</B> </TD><TD> Internal failure </TD></TR><TR><TD>
76 <B>fe</B> </TD><TD> Keyboard fails to ack, please resend </TD></TR><TR><TD>
77 <B>ff</B> </TD><TD> Keyboard error </TD></TR><TR><TD>
78
79 </TD></TR></TABLE></CENTER>
80 <P>Three common causes for keyboard error are:
81 (i) several keys pressed simultaneously,
82 (ii) keyboard buffer overflow,
83 (iii) parity error on the serial line used by keyboard
84 and keyboard controller for communication.
85 The error reported is <B>ff</B> in
86 <A HREF="scancodes-9.html#scancodesets">scancode mode</A> 1,
87 and <B>00</B> in scancode modes 2 and 3.
88 If translation is on, both <B>00</B> and <B>ff</B>
89 are translated as <B>ff</B>.
90 <P>Usually these codes have the protocol meaning. However,
91 they also occur as actual scancodes, especially when
92 prefixed by <B>e0</B>.
93 <P>
94 <H2><A NAME="ss1.3">1.3 Escape scancodes</A>
95 </H2>
96
97 <P>The codes <B>e0</B> and <B>e1</B> introduce scancode sequences,
98 and are not usually used as isolated scancodes themselves
99 (but see 
100 <A HREF="scancodes-6.html#e0_as_key">below</A>).
101 <P>(The prefix <B>e0</B> was originally used for the grey duplicates
102 of keys on the original PC/XT keyboard. These days <B>e0</B> is
103 just used to expand code space. The prefix <B>e1</B> used for
104 Pause/Break indicated that this key sends the make/break sequence
105 at make time, and does nothing upon release.)
106 <P>This, and the above, means that the values
107 <B>00</B>, <B>60</B>, <B>61</B>, <B>6e</B>, <B>71</B>,
108 <B>7a</B>, <B>7c</B>, <B>7e</B>, <B>7f</B>
109 are unavailable to signify key presses (on a default keyboard).
110 Nevertheless they also occur as scancodes, see for example the
111 <A HREF="scancodes-2.html#telerate">Telerate</A> and
112 <A HREF="scancodes-5.html#safeway23">Safeway SW23</A> keyboards below.
113 <P>Also other prefixes occur, see 
114 <A HREF="scancodes-5.html#prefix_80">below</A>.
115 <P>
116 <A HREF="scancodes-9.html#logiteche2">Logitech</A> uses an <B>e2</B> prefix
117 for the codes sent by a pointing device integrated on the keyboard.
118 <P>
119 <P>
120 <H2><A NAME="ss1.4">1.4 Ordinary scancodes</A>
121 </H2>
122
123 <P>The scancodes in translated scancode set 2 are given in hex.
124 Between parentheses the keycap on a US keyboard.
125 The scancodes are given in order, grouped according
126 to groups of keys that are usually found next to each other.
127 <P><B>00</B> is normally an error code
128 <P><B>01</B> (Esc)
129 <P><B>02</B> (1!), <B>03</B> (2@), <B>04</B> (3#), <B>05</B> (4$),
130 <B>06</B> (5%E), <B>07</B> (6^), <B>08</B> (7&amp;),
131 <B>09</B> (8*), <B>0a</B> (9(), <B>0b</B> (0)), <B>0c</B> (-_),
132 <B>0d</B> (=+), <B>0e</B> (Backspace)
133 <P><B>0f</B> (Tab), <B>10</B> (Q), <B>11</B> (W), <B>12</B> (E),
134 <B>13</B> (R), <B>14</B> (T), <B>15</B> (Y),
135 <B>16</B> (U), <B>17</B> (I), <B>18</B> (O),
136 <B>19</B> (P), <B>1a</B> ([{), <B>1b</B> (]})
137 <P><B>1c</B> (Enter)
138 <P><B>1d</B> (LCtrl)
139 <P><B>1e</B> (A), <B>1f</B> (S), <B>20</B> (D), <B>21</B> (F),
140 <B>22</B> (G), <B>23</B> (H), <B>24</B> (J), <B>25</B> (K),
141 <B>26</B> (L), <B>27</B> (;:), <B>28</B> ('")
142 <P><B>29</B> (`~)
143 <P><B>2a</B> (LShift)
144 <P><B>2b</B> (\|), on a 102-key keyboard
145 <P><B>2c</B> (Z), <B>2d</B> (X), <B>2e</B> (C), <B>2f</B> (V),
146 <B>30</B> (B), <B>31</B> (N), <B>32</B> (M), <B>33</B> (,&lt;),
147 <B>34</B> (.&gt;), <B>35</B> (/?), <B>36</B> (RShift)
148 <P><B>37</B> (Keypad-*) or (*/PrtScn) on a 83/84-key keyboard
149 <P><B>38</B> (LAlt), <B>39</B> (Space bar),
150 <P><B>3a</B> (CapsLock)
151 <P><B>3b</B> (F1), <B>3c</B> (F2), <B>3d</B> (F3), <B>3e</B> (F4),
152 <B>3f</B> (F5), <B>40</B> (F6), <B>41</B> (F7),
153 <B>42</B> (F8), <B>43</B> (F9), <B>44</B> (F10)
154 <P><B>45</B> (NumLock)
155 <P><B>46</B> (ScrollLock)
156 <P><B>47</B> (Keypad-7/Home), <B>48</B> (Keypad-8/Up),
157 <B>49</B> (Keypad-9/PgUp)
158 <P><B>4a</B> (Keypad--)
159 <P><B>4b</B> (Keypad-4/Left), <B>4c</B> (Keypad-5),
160 <B>4d</B> (Keypad-6/Right), <B>4e</B> (Keypad-+)
161 <P><B>4f</B> (Keypad-1/End), <B>50</B> (Keypad-2/Down),
162 <B>51</B> (Keypad-3/PgDn)
163 <P><B>52</B> (Keypad-0/Ins), <B>53</B> (Keypad-./Del)
164 <P><B>54</B> (Alt-SysRq) on a 84+ key keyboard
165 <P><B>55</B> is less common; occurs e.g. as F11 on a Cherry G80-0777 keyboard,
166 as F12 on a Telerate keyboard,
167 as PF1 on a Focus 9000 keyboard, and as FN on an IBM ThinkPad.
168 <P><B>56</B> mostly on non-US keyboards. It is often an unlabelled key
169 <A HREF="laser.jpg">to the left</A>
170 or 
171 <A HREF="toshiba.jpg">to the right</A>
172 of the left Alt key.<BR>
173 <FIGURE>
174 <EPS FILE="absent">
175 <IMG SRC="laser-s.jpg">
176 </FIGURE>
177
178 <FIGURE>
179 <EPS FILE="absent">
180 <IMG SRC="toshiba-s.jpg">
181 </FIGURE>
182 <P><B>57</B> (F11), <B>58</B> (F12) both on a 101+ key keyboard
183 <P><B>59</B>-<B>5a</B>-...-<B>7f</B> are less common.
184 Assignment is essentially random.
185 Scancodes <B>55</B>-<B>59</B> occur as F11-F15 on the
186 <A HREF="scancodes-2.html#cherry80">Cherry G80-0777</A> keyboard.
187 Scancodes <B>59</B>-<B>5c</B> occur on the
188 <A HREF="scancodes-5.html#RC930">RC930</A> keyboard.
189 X calls <B>5d</B> `KEY_Begin'.
190 Scancodes <B>61</B>-<B>64</B> occur on a
191 <A HREF="scancodes-2.html#telerate">Telerate</A> keyboard.
192 Scancodes <B>55</B>, <B>6d</B>, <B>6f</B>, <B>73</B>, <B>74</B>,
193 <B>77</B>, <B>78</B>, <B>79</B>, <B>7a</B>, <B>7b</B>,
194 <B>7c</B>, <B>7e</B> occur on the
195 <A HREF="scancodes-5.html#focus">Focus 9000</A> keyboard.
196 Scancodes <B>65</B>, <B>67</B>, <B>69</B>, <B>6b</B>
197 occur on a 
198 <A HREF="scancodes-5.html#armada">Compaq Armada</A> keyboard.
199 Scancodes <B>66</B>-<B>68</B>, <B>73</B> occur on the
200 <A HREF="scancodes-5.html#cherry81">Cherry G81-3000</A> keyboard.
201 Scancodes <B>70</B>, <B>73</B>, <B>79</B>, <B>7b</B>, <B>7d</B>
202 occur on a 
203 <A HREF="scancodes-7.html#japanese">Japanese 86/106 keyboard</A>.
204 <P>Scancodes <B>f1</B> and <B>f2</B> occur on 
205 <A HREF="scancodes-8.html#korean">Korean keyboards</A>.
206 <P>
207 <H2><A NAME="ss1.5">1.5 Escaped scancodes</A>
208 </H2>
209
210 <P>Apart from the Pause/Break key, that has an escaped sequence starting
211 with <B>e1</B>, the escape used is <B>e0</B>. Often, the codes
212 are chosen in such a way that something meaningful happens when
213 the receiver just discards the <B>e0</B>.
214 <P>
215 <CENTER><TABLE BORDER><TR><TD>
216 <B>e0</B> <B>1c</B> (Keypad Enter) </TD><TD></TD><TD> <B>1c</B> (Enter) </TD></TR><TR><TD>
217 <B>e0</B> <B>1d</B> (RCtrl) </TD><TD></TD><TD> <B>1d</B> (LCtrl) </TD></TR><TR><TD>
218 <B>e0</B> <B>2a</B> (fake LShift) </TD><TD></TD><TD> <B>2a</B> (LShift) </TD></TR><TR><TD>
219 <B>e0</B> <B>35</B> (Keypad-/) </TD><TD></TD><TD> <B>35</B> (/?) </TD></TR><TR><TD>
220 <B>e0</B> <B>36</B> (fake RShift) </TD><TD></TD><TD> <B>36</B> (RShift) </TD></TR><TR><TD>
221 <B>e0</B> <B>37</B> (Ctrl-PrtScn) </TD><TD></TD><TD> <B>37</B> (*/PrtScn) </TD></TR><TR><TD>
222 <B>e0</B> <B>38</B> (RAlt) </TD><TD></TD><TD> <B>38</B> (LAlt) </TD></TR><TR><TD>
223 <B>e0</B> <B>46</B> (Ctrl-Break) </TD><TD></TD><TD> <B>46</B> (ScrollLock) </TD></TR><TR><TD>
224 <B>e0</B> <B>47</B> (Grey Home) </TD><TD></TD><TD> <B>47</B> (Keypad-7/Home) </TD></TR><TR><TD>
225 <B>e0</B> <B>48</B> (Grey Up) </TD><TD></TD><TD> <B>48</B> (Keypad-8/UpArrow) </TD></TR><TR><TD>
226 <B>e0</B> <B>49</B> (Grey PgUp) </TD><TD></TD><TD> <B>49</B> (Keypad-9/PgUp) </TD></TR><TR><TD>
227 <B>e0</B> <B>4b</B> (Grey Left) </TD><TD></TD><TD> <B>4b</B> (Keypad-4/Left) </TD></TR><TR><TD>
228 <B>e0</B> <B>4d</B> (Grey Right) </TD><TD></TD><TD> <B>4d</B> (Keypad-6/Right) </TD></TR><TR><TD>
229 <B>e0</B> <B>4f</B> (Grey End) </TD><TD></TD><TD> <B>4f</B> (Keypad-1/End) </TD></TR><TR><TD>
230 <B>e0</B> <B>50</B> (Grey Down) </TD><TD></TD><TD> <B>50</B> (Keypad-2/DownArrow) </TD></TR><TR><TD>
231 <B>e0</B> <B>51</B> (Grey PgDn) </TD><TD></TD><TD> <B>51</B> (Keypad-3/PgDn) </TD></TR><TR><TD>
232 <B>e0</B> <B>52</B> (Grey Insert) </TD><TD></TD><TD> <B>52</B> (Keypad-0/Ins) </TD></TR><TR><TD>
233 <B>e0</B> <B>53</B> (Grey Delete) </TD><TD></TD><TD> <B>53</B> (Keypad-./Del) </TD></TR><TR><TD>
234
235 </TD></TR></TABLE></CENTER>
236 <P>These escaped scancodes occur only on 101+ key keyboards.
237 The 
238 <A HREF="scancodes-5.html#microsoft">Microsoft keyboard</A> adds
239 <P>
240 <CENTER><TABLE BORDER><TR><TD>
241 <B>e0</B> <B>5b</B> (LeftWindow) </TD></TR><TR><TD>
242 <B>e0</B> <B>5c</B> (RightWindow) </TD></TR><TR><TD>
243 <B>e0</B> <B>5d</B> (Menu) </TD></TR><TR><TD>
244
245 </TD></TR></TABLE></CENTER>
246 <P>Other escaped scancodes occur - see below under the individual keyboards.
247 <P>
248 <H2><A NAME="fakeshifts"></A> <A NAME="ss1.6">1.6 Fake shifts</A>
249 </H2>
250
251 <P>The ten grey keys Insert, Home, PgUp, Delete, End, PgDn,
252 Up, Left, Down, Right are supposed to function regardless
253 of the state of Shift and NumLock keys. But for an old AT keyboard
254 the keypad keys would produce digits when Numlock was on or Shift
255 was down. Therefore, in order to fool old programs,
256 fake scancodes are sent: when LShift is down, and Insert is
257 pressed, <B>e0</B> <B>aa</B> <B>e0</B> <B>52</B> is sent;
258 upon release of Insert <B>e0</B> <B>d2</B> <B>e0</B> <B>2a</B>
259 is sent. In other words, a fake LShift-up and
260 fake LShift-down are inserted.
261 <P>If the Shift key is released earlier than the repeated key,
262 then a real Shift-up code occurs (without preceding fake Shift-down)
263 so that a program ignoring <B>e0</B> would see one more Shift-up
264 than Shift-down.
265 <P>When NumLock is on, no fake Shifts are sent when Shift was down,
266 but fake Shifts are sent when Shift was not down. Thus,
267 with Numlock, if Insert is pressed,
268 <B>e0</B> <B>2a</B> <B>e0</B> <B>52</B> is sent
269 and upon release <B>e0</B> <B>d2</B> <B>e0</B> <B>aa</B> is sent.
270 The keyboard maintains a private NumLock mode, toggled when
271 NumLock is pressed, and set when the NumLock LED is set.
272 <P>In the same way, when Shift is down, the Grey-/ key produces
273 fake Shift-up and fake Shift-down sequences. However, it does
274 not react to the state of NumLock. The purpose of course is to
275 fool programs that identify Grey-/ with ordinary /, so that they
276 don't treat Shift-Grey-/ like Shift-/, i.e., ?.
277 <P>On a Toshiba notebook, the three Windows keys are treated like
278 the group of ten keys mentioned, and get fake shifts when
279 (left or right) Shift is down. They do not react to NumLock.
280 <P>
281 <H2><A NAME="ss1.7">1.7 Added non-fake shifts</A>
282 </H2>
283
284 <P>On my 121-key 
285 <A HREF="scancodes-5.html#nokia">Nokia Data</A> keyboard there are
286 function keys F1, ..., F24, where F1, ..., F12 send the expected codes
287 <B>3b</B>, ..., <B>58</B>, and F13, ..., F24 send the same codes
288 together with the LShift code <B>2a</B>.
289 Thus, F13 gives <B>2a</B> <B>3b</B> on press,
290 and <B>bb</B> <B>aa</B> on release.
291 Similarly, there are keys with added LCtrl code <B>1d</B>.
292 But there are also keys with added fake shifts <B>e0 2a</B>.
293 <P>
294 <A HREF="http://www.delorie.com/djgpp/doc/rbinter/it/06/0.html">Delorie</A>
295 reports that <I>the "Preh Commander AT" keyboard with additional F11-F22 keys
296 treats F11-F20 as Shift-F1..Shift-F10 and F21/F22 as Ctrl-F1/Ctrl-F2; the
297 Eagle PC-2 keyboard with F11-F24 keys treats those additional keys
298 in the same way</I>.
299 <P>
300 <H2><A NAME="ss1.8">1.8 Turbo Mode</A>
301 </H2>
302
303 <P>On some motherboards the LCtrl-LAlt-GreyPlus and LCtrl-LAlt-GreyMinus
304 switch Turbo mode on/off, respectively. For these, the motherboard
305 may generate the same scancode sequence when the Turbo button is
306 pushed: Turbo Switch (High->Low):
307 <B>1d</B> <B>38</B> <B>4a</B> <B>ce</B> <B>b8</B> <B>9d</B>
308 and Turbo Switch (Low->High):
309 <B>1d</B> <B>38</B> <B>4e</B> <B>ce</B> <B>b8</B> <B>9d</B>.
310 <P>Other peculiar combinations in this style include
311 LCtrl-LAlt-LShift-GreyMinus and LCtrl-LAlt-LShift-GreyPlus to turn
312 system cache off/on.
313 <P>If Green PC system power saving mode is enabled in AMIBIOS Setup,
314 the AMI MegaKey keyboard controller recognizes the combinations
315 Ctrl-Alt-\ (put the system into immediate power down mode),
316 Ctrl-Alt-[ (disable the Green PC power savings mode temporarily),
317 Ctrl-Alt-] (enables the Green PC power down mode).
318 <P>Thio Yu Jin &lt;<CODE>jin@singmail.com</CODE>&gt; complains that on his Toshiba 4010CDS
319 the Ctrl-Alt-Shift-T key combination brings up the Toshiba user manual.
320 (04 Mar 1999 - not April 1.)
321 <P>
322 <P>
323 <H2><A NAME="power"></A> <A NAME="ss1.9">1.9 Power Saving</A>
324 </H2>
325
326 <P>
327 <A HREF="http://www.microsoft.com/hwdev/tech/input/Scancode.asp">Microsoft</A> recommends: "i8042-based keyboards should deploy the
328 following scan codes for power management buttons, i.e., POWER and SLEEP
329 buttons:
330 <P>
331 <CENTER><TABLE BORDER><TR><TD>
332 </TD><TD> Set-1 make/break </TD><TD> Set-2 make/break </TD></TR><TR><TD>
333 </TD></TR><TR><TD>
334 Power </TD><TD> <B>e0</B> <B>5e</B> / <B>e0</B> <B>de</B> </TD><TD><B>e0</B> <B>37</B> / <B>e0</B> <B>f0</B> <B>37</B> </TD></TR><TR><TD>
335 Sleep </TD><TD> <B>e0</B> <B>5f</B> / <B>e0</B> <B>df</B> </TD><TD><B>e0</B> <B>3f</B> / <B>e0</B> <B>f0</B> <B>3f</B> </TD></TR><TR><TD>
336 Wake </TD><TD> <B>e0</B> <B>63</B> / <B>e0</B> <B>e3</B> </TD><TD><B>e0</B> <B>5e</B> / <B>e0</B> <B>f0</B> <B>5e</B> </TD></TR><TR><TD>
337
338 </TD></TR></TABLE></CENTER>
339 <P>The Power, Sleep, and Wake event scan codes are the i8042 equivalents
340 to the System Power Down, System Sleep, and System Wake Up HID usages".
341 <P>Many keyboards have Power/Sleep/Wake keys that have to be
342 activated by a fourth key (unlabeled, or labeled FN): pressing
343 one of these four keys does not produce any scancodes, but
344 when the FN key is pressed simultaneously, the Power/Sleep/Wake
345 keys give the codes listed above.
346 <P>
347 <P>
348 <H2><A NAME="ss1.10">1.10 Initializing special keyboards</A>
349 </H2>
350
351 <P>Many keyboards have more keys and buttons than the standard ones.
352 Sometimes these additional keys produce scancode combinations
353 that were unused before. But on other keyboard such additional
354 keys do not produce any code at all, until some initializing
355 action is taken.
356 <P>Sometimes that action consists of writing some bytes to keyboard
357 registers. See, for example, the
358 <A HREF="scancodes-5.html#rapidinit">IBM Rapid Access keyboard</A>, and the
359 <A HREF="scancodes-5.html#omnibookinit">Omnibook keyboard</A>.
360 <P>
361 <H2><A NAME="LEDmanip"></A> <A NAME="ss1.11">1.11 Manipulating extra LEDs</A>
362 </H2>
363
364 <P>Some keyboards have additional LEDs, and in a few cases we know
365 how to manipulate those.
366 <P>The 
367 <A HREF="scancodes-5.html#chicony">Chicony keyboard</A> needs command sequences
368 <B>eb</B> <B>00</B> <I>xy</I>, with
369 <I>xy</I> = <B>01</B> for the Moon LED and
370 <I>xy</I> = <B>02</B> for the zzZ LED.
371 <P>The 
372 <A HREF="scancodes-5.html#EZButton">IBM EZ Button keyboard</A> needs
373 command sequences <B>eb</B> <B>00</B> <I>xy</I>, with
374 <I>xy</I> = <B>01</B> for the Msg LED,
375 <I>xy</I> = <B>02</B> for the CD LED,
376 <I>xy</I> = <B>04</B> for the Power LED,
377 <I>xy</I> = <B>10</B> for the Talk LED, and
378 <I>xy</I> = <B>20</B> for the Message Waiting LED.
379 <P>The 
380 <A HREF="scancodes-5.html#ibmrapidaccess">IBM Rapid Access keyboard</A> needs
381 command sequences <B>eb</B> <B>00</B> <I>xy</I>, with
382 <I>xy</I> = <B>04</B> for the Suspend LED and
383 <I>xy</I> = <B>20</B> for the Mute LED.
384 <P>The 
385 <A HREF="scancodes-5.html#ibmrapidaccessii">IBM Rapid Access keyboard II</A> needs
386 the command sequences <B>eb</B> <B>71</B> and <B>eb</B> <B>70</B>
387 to switch the Standby LED on and off.
388 <P>The 
389 <A HREF="scancodes-5.html#logitechinternet">Logitech Internet Keyboard</A>
390 has an additional amber LED. It is turned on by sending <B>eb</B>,
391 and then blinks about once a second. It is turned off again by <B>ec</B>.
392 <P>
393 <H2><A NAME="ss1.12">1.12 The laptop FN key</A>
394 </H2>
395
396 <P>Laptops have no room for all nonsensical keys one usually find
397 on a regular keyboard. So, the number pad and other keys are
398 folded into the main part of the keyboard. A key without label,
399 or labelled FN is often used to modify the meaning of other keys.
400 This FN does not produce scancodes itself, it only modifies the
401 scancodes produced by other keys.
402 <P>
403 <A NAME="dellnoup"></A> 
404 Neil Brown reports about his Dell Latitude D800 laptop that it has
405 five key combinations that do not produce proper break codes.
406 The five combinations FN+F2, FN+F3, FN+F10, FN+Down, FN+Up
407 (labelled Wireless, Brighter, Darker, Battery, CDEject)
408 produce make codes <B>e0</B> <B>08</B>, <B>e0</B> <B>07</B>,
409 <B>e0</B> <B>09</B>, <B>e0</B> <B>05</B>, <B>e0</B> <B>06</B>,
410 respectively. The first three do not produce any break code.
411 The last two have a break code that is identical to the make code.
412 <P>
413 <HR>
414 <A HREF="scancodes-2.html">Next</A>
415 Previous
416 <A HREF="scancodes.html#toc1">Contents</A>
417 </BODY>
418 </HTML>