sunkbdmap.c revision 1.2
1/* $OpenBSD: sunkbdmap.c,v 1.2 2009/01/11 18:59:54 miod Exp $ */ 2 3/* 4 * Copyright (c) 2002, 2003 Miodrag Vallat. 5 * Copyright (c) 2002 Jason L. Wright (jason@thought.net) 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 19 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 20 * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 21 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 22 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 23 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 25 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 26 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 27 * POSSIBILITY OF SUCH DAMAGE. 28 * 29 * Effort sponsored in part by the Defense Advanced Research Projects 30 * Agency (DARPA) and Air Force Research Laboratory, Air Force 31 * Materiel Command, USAF, under agreement number F30602-01-2-0537. 32 * 33 */ 34 35#include <sys/param.h> 36#include <sys/systm.h> 37#include <sys/device.h> 38#include <sys/kernel.h> 39#include <sys/timeout.h> 40 41#include <dev/wscons/wsconsio.h> 42#include <dev/wscons/wskbdvar.h> 43#include <dev/wscons/wsksymdef.h> 44#include <dev/wscons/wsksymvar.h> 45 46#include <dev/sun/sunkbdreg.h> 47#include <dev/sun/sunkbdvar.h> 48 49#ifdef WSDISPLAY_COMPAT_RAWKBD 50#include <dev/wscons/wskbdraw.h> 51 52/* 53 * Translate Sun keycodes to US keyboard XT scancodes, for proper 54 * X11-over-wsmux operation. 55 */ 56const u_int8_t sunkbd_rawmap[0x80] = { 57 RAWKEY_Null, 58 RAWKEY_L1, 59 RAWKEY_AudioLower, 60 RAWKEY_L2, 61 RAWKEY_AudioRaise, 62 RAWKEY_f1, 63 RAWKEY_f2, 64 RAWKEY_f10, 65 RAWKEY_f3, 66 RAWKEY_f11, 67 RAWKEY_f4, 68 RAWKEY_f12, 69 RAWKEY_f5, 70 RAWKEY_Alt_R, 71 RAWKEY_f6, 72 RAWKEY_Null, 73 RAWKEY_f7, 74 RAWKEY_f8, 75 RAWKEY_f9, 76 RAWKEY_Alt_L, 77 RAWKEY_Up, 78 RAWKEY_Pause, 79 RAWKEY_Print_Screen, 80 RAWKEY_Hold_Screen, 81 RAWKEY_Left, 82 RAWKEY_L3, 83 RAWKEY_L4, 84 RAWKEY_Down, 85 RAWKEY_Right, 86 RAWKEY_Escape, 87 RAWKEY_1, 88 RAWKEY_2, 89 RAWKEY_3, 90 RAWKEY_4, 91 RAWKEY_5, 92 RAWKEY_6, 93 RAWKEY_7, 94 RAWKEY_8, 95 RAWKEY_9, 96 RAWKEY_0, 97 RAWKEY_minus, 98 RAWKEY_equal, 99 RAWKEY_grave, 100 RAWKEY_BackSpace, 101 RAWKEY_Insert, 102 RAWKEY_KP_Equal, 103 RAWKEY_KP_Divide, 104 RAWKEY_KP_Multiply, 105 RAWKEY_Null, 106 RAWKEY_L5, 107 RAWKEY_KP_Delete, 108 RAWKEY_L6, 109 RAWKEY_Home, 110 RAWKEY_Tab, 111 RAWKEY_q, 112 RAWKEY_w, 113 RAWKEY_e, 114 RAWKEY_r, 115 RAWKEY_t, 116 RAWKEY_y, 117 RAWKEY_u, 118 RAWKEY_i, 119 RAWKEY_o, 120 RAWKEY_p, 121 RAWKEY_bracketleft, 122 RAWKEY_bracketright, 123 RAWKEY_Delete, 124 RAWKEY_Alt_R, 125 RAWKEY_KP_Home, 126 RAWKEY_KP_Up, 127 RAWKEY_KP_Prior, 128 RAWKEY_KP_Subtract, 129 RAWKEY_L7, 130 RAWKEY_L8, 131 RAWKEY_End, 132 RAWKEY_Null, 133 RAWKEY_Control_L, 134 RAWKEY_a, 135 RAWKEY_s, 136 RAWKEY_d, 137 RAWKEY_f, 138 RAWKEY_g, 139 RAWKEY_h, 140 RAWKEY_j, 141 RAWKEY_k, 142 RAWKEY_l, 143 RAWKEY_semicolon, 144 RAWKEY_apostrophe, 145 RAWKEY_backslash, 146 RAWKEY_Return, 147 RAWKEY_KP_Enter, 148 RAWKEY_KP_Left, 149 RAWKEY_KP_Begin, 150 RAWKEY_KP_Right, 151 RAWKEY_KP_Insert, 152 RAWKEY_L9, 153 RAWKEY_Prior, 154 RAWKEY_L10, 155 RAWKEY_Num_Lock, 156 RAWKEY_Shift_L, 157 RAWKEY_z, 158 RAWKEY_x, 159 RAWKEY_c, 160 RAWKEY_v, 161 RAWKEY_b, 162 RAWKEY_n, 163 RAWKEY_m, 164 RAWKEY_comma, 165 RAWKEY_period, 166 RAWKEY_slash, 167 RAWKEY_Shift_R, 168 RAWKEY_Null, /* KS_Linefeed on type 3/4 */ 169 RAWKEY_KP_End, 170 RAWKEY_KP_Down, 171 RAWKEY_KP_Next, 172 RAWKEY_Null, 173 RAWKEY_Null, 174 RAWKEY_Null, 175 RAWKEY_Help, 176 RAWKEY_Caps_Lock, 177 RAWKEY_Meta_L, 178 RAWKEY_space, 179 RAWKEY_Meta_R, 180 RAWKEY_Next, 181 RAWKEY_Null, 182 RAWKEY_KP_Add, 183 RAWKEY_Null, 184 RAWKEY_Null 185}; 186#endif 187 188#define KC(n) KS_KEYCODE(n) 189 190/* 000/021/022 US English type 4/5 keyboard */ 191const keysym_t sunkbd_keydesc_us[] = { 192 KC(0x01), KS_Cmd, 193 KC(0x02), KS_Cmd_BrightnessDown, 194 KC(0x03), KS_Again, 195 KC(0x04), KS_Cmd_BrightnessUp, 196 KC(0x05), KS_f1, 197 KC(0x06), KS_f2, 198 KC(0x07), KS_f10, 199 KC(0x08), KS_f3, 200 KC(0x09), KS_f11, 201 KC(0x0a), KS_f4, 202 KC(0x0b), KS_f12, 203 KC(0x0c), KS_f5, 204 KC(0x0d), KS_Alt_R, 205 KC(0x0e), KS_f6, 206 KC(0x10), KS_f7, 207 KC(0x11), KS_f8, 208 KC(0x12), KS_f9, 209 KC(0x13), KS_Alt_L, 210 KC(0x14), KS_Up, 211 KC(0x15), KS_Pause, 212 KC(0x16), KS_Print_Screen, 213 KC(0x17), KS_Hold_Screen, 214 KC(0x18), KS_Left, 215 KC(0x19), KS_Props, 216 KC(0x1a), KS_Undo, 217 KC(0x1b), KS_Down, 218 KC(0x1c), KS_Right, 219 KC(0x1d), KS_Escape, 220 KC(0x1e), KS_1, KS_exclam, 221 KC(0x1f), KS_2, KS_at, 222 KC(0x20), KS_3, KS_numbersign, 223 KC(0x21), KS_4, KS_dollar, 224 KC(0x22), KS_5, KS_percent, 225 KC(0x23), KS_6, KS_asciicircum, 226 KC(0x24), KS_7, KS_ampersand, 227 KC(0x25), KS_8, KS_asterisk, 228 KC(0x26), KS_9, KS_parenleft, 229 KC(0x27), KS_0, KS_parenright, 230 KC(0x28), KS_minus, KS_underscore, 231 KC(0x29), KS_equal, KS_plus, 232 KC(0x2a), KS_grave, KS_asciitilde, 233 KC(0x2b), KS_Delete, 234 KC(0x2c), KS_Insert, 235 KC(0x2d), KS_KP_Equal, 236 KC(0x2e), KS_KP_Divide, 237 KC(0x2f), KS_KP_Multiply, 238 KC(0x31), KS_Front, 239 KC(0x32), KS_KP_Delete, KS_KP_Decimal, 240 KC(0x33), KS_Copy, 241 KC(0x34), KS_Home, 242 KC(0x35), KS_Tab, 243 KC(0x36), KS_q, 244 KC(0x37), KS_w, 245 KC(0x38), KS_e, 246 KC(0x39), KS_r, 247 KC(0x3a), KS_t, 248 KC(0x3b), KS_y, 249 KC(0x3c), KS_u, 250 KC(0x3d), KS_i, 251 KC(0x3e), KS_o, 252 KC(0x3f), KS_p, 253 KC(0x40), KS_bracketleft, KS_braceleft, 254 KC(0x41), KS_bracketright,KS_braceright, 255 KC(0x42), KS_Delete, 256 KC(0x43), KS_Multi_key, 257 KC(0x44), KS_KP_Home, KS_KP_7, 258 KC(0x45), KS_KP_Up, KS_KP_8, 259 KC(0x46), KS_KP_Prior, KS_KP_9, 260 KC(0x47), KS_KP_Subtract, 261 KC(0x48), KS_Open, 262 KC(0x49), KS_Paste, 263 KC(0x4a), KS_End, 264 KC(0x4c), KS_Control_L, 265 KC(0x4d), KS_Cmd_Debugger, KS_a, 266 KC(0x4e), KS_s, 267 KC(0x4f), KS_d, 268 KC(0x50), KS_f, 269 KC(0x51), KS_g, 270 KC(0x52), KS_h, 271 KC(0x53), KS_j, 272 KC(0x54), KS_k, 273 KC(0x55), KS_l, 274 KC(0x56), KS_semicolon, KS_colon, 275 KC(0x57), KS_apostrophe, KS_quotedbl, 276 KC(0x58), KS_backslash, KS_bar, 277 KC(0x59), KS_Return, 278 KC(0x5a), KS_KP_Enter, 279 KC(0x5b), KS_KP_Left, KS_KP_4, 280 KC(0x5c), KS_KP_Begin, KS_KP_5, 281 KC(0x5d), KS_KP_Right, KS_KP_6, 282 KC(0x5e), KS_KP_Insert, KS_KP_0, 283 KC(0x5f), KS_Find, 284 KC(0x60), KS_Prior, 285 KC(0x61), KS_Cut, 286 KC(0x62), KS_Num_Lock, 287 KC(0x63), KS_Shift_L, 288 KC(0x64), KS_z, 289 KC(0x65), KS_x, 290 KC(0x66), KS_c, 291 KC(0x67), KS_v, 292 KC(0x68), KS_b, 293 KC(0x69), KS_n, 294 KC(0x6a), KS_m, 295 KC(0x6b), KS_comma, KS_less, 296 KC(0x6c), KS_period, KS_greater, 297 KC(0x6d), KS_slash, KS_question, 298 KC(0x6e), KS_Shift_R, 299 KC(0x6f), KS_Linefeed, 300 KC(0x70), KS_KP_End, KS_KP_1, 301 KC(0x71), KS_KP_Down, KS_KP_2, 302 KC(0x72), KS_KP_Next, KS_KP_3, 303 KC(0x76), KS_Help, 304 KC(0x77), KS_Caps_Lock, 305 KC(0x78), KS_Meta_L, 306 KC(0x79), KS_space, 307 KC(0x7a), KS_Meta_R, 308 KC(0x7b), KS_Next, 309 KC(0x7d), KS_KP_Add, 310}; 311 312/* 002 French/Belgian type 4 keyboard */ 313const keysym_t sunkbd_keydesc_befr[] = { 314 KC(0x0d), KS_Caps_Lock, 315 KC(0x0f), KS_bracketright,KS_braceright, KS_guillemotright, 316 KC(0x1e), KS_ampersand, KS_1, 317 KC(0x1f), KS_eacute, KS_2, KS_twosuperior, 318 KC(0x20), KS_quotedbl, KS_3, KS_threesuperior, 319 KC(0x21), KS_apostrophe, KS_4, 320 KC(0x22), KS_parenleft, KS_5, 321 KC(0x23), KS_section, KS_6, 322 KC(0x24), KS_egrave, KS_7, 323 KC(0x25), KS_exclam, KS_8, KS_sterling, 324 KC(0x26), KS_ccedilla, KS_9, KS_backslash, 325 KC(0x27), KS_agrave, KS_0, 326 KC(0x28), KS_parenright, KS_degree, KS_asciitilde, 327 KC(0x29), KS_minus, KS_underscore, KS_numbersign, 328 KC(0x2a), KS_asterisk, KS_bar, KS_currency, 329 KC(0x36), KS_a, 330 KC(0x37), KS_z, 331 KC(0x40), KS_dead_circumflex,KS_dead_diaeresis, 332 KC(0x41), KS_grave, KS_dollar, KS_at, 333 KC(0x4d), KS_Cmd_Debugger, KS_q, 334 KC(0x56), KS_m, KS_M, KS_mu, 335 KC(0x57), KS_ugrave, KS_percent, 336 KC(0x58), KS_bracketleft, KS_braceleft, KS_guillemotleft, 337 KC(0x64), KS_w, 338 KC(0x6a), KS_comma, KS_question, 339 KC(0x6b), KS_semicolon, KS_period, 340 KC(0x6c), KS_colon, KS_slash, 341 KC(0x6d), KS_equal, KS_plus, 342 KC(0x77), KS_Mode_switch, 343 KC(0x7c), KS_less, KS_greater, 344}; 345 346/* 023 French type 5 keyboard */ 347const keysym_t sunkbd5_keydesc_fr[] = { 348 KC(0x0d), KS_Mode_switch, 349 KC(0x1e), KS_ampersand, KS_1, 350 KC(0x1f), KS_eacute, KS_2, KS_asciitilde, 351 KC(0x20), KS_quotedbl, KS_3, KS_numbersign, 352 KC(0x21), KS_apostrophe, KS_4, KS_braceleft, 353 KC(0x22), KS_parenleft, KS_5, KS_bracketleft, 354 KC(0x23), KS_minus, KS_6, KS_bar, 355 KC(0x24), KS_egrave, KS_7, KS_grave, 356 KC(0x25), KS_underscore, KS_8, KS_backslash, 357 KC(0x26), KS_ccedilla, KS_9, KS_asciicircum, 358 KC(0x27), KS_agrave, KS_0, KS_at, 359 KC(0x28), KS_parenright, KS_degree, KS_bracketright, 360 KC(0x29), KS_equal, KS_plus, KS_braceright, 361 KC(0x2a), KS_twosuperior, 362 KC(0x36), KS_a, 363 KC(0x37), KS_z, 364 KC(0x40), KS_dead_circumflex,KS_dead_diaeresis, 365 KC(0x41), KS_dollar, KS_sterling, KS_currency, 366 KC(0x4d), KS_Cmd_Debugger, KS_q, 367 KC(0x56), KS_m, 368 KC(0x57), KS_ugrave, KS_percent, 369 KC(0x58), KS_asterisk, KS_mu, 370 KC(0x64), KS_w, 371 KC(0x6a), KS_comma, KS_question, 372 KC(0x6b), KS_semicolon, KS_period, 373 KC(0x6c), KS_colon, KS_slash, 374 KC(0x6d), KS_exclam, KS_section, 375 KC(0x7c), KS_less, KS_greater, 376}; 377 378/* 004 Danish type 4 keyboard */ 379const keysym_t sunkbd_keydesc_dk[] = { 380 KC(0x0d), KS_Multi_key, 381 KC(0x0f), KS_asciitilde, KS_asciicircum, 382 KC(0x1f), KS_2, KS_quotedbl, KS_at, 383 KC(0x20), KS_3, KS_numbersign, KS_sterling, 384 KC(0x21), KS_4, KS_currency, KS_dollar, 385 KC(0x23), KS_6, KS_ampersand, 386 KC(0x24), KS_7, KS_slash, KS_braceleft, 387 KC(0x25), KS_8, KS_parenleft, KS_bracketleft, 388 KC(0x26), KS_9, KS_parenright, KS_bracketright, 389 KC(0x27), KS_0, KS_equal, KS_braceright, 390 KC(0x28), KS_plus, KS_question, 391 KC(0x29), KS_dead_acute, KS_dead_grave, KS_bar, 392 KC(0x2a), KS_apostrophe, KS_asterisk, KS_grave, 393 KC(0x40), KS_aring, 394 KC(0x41), KS_dead_diaeresis,KS_dead_circumflex,KS_dead_tilde, 395 KC(0x43), KS_Mode_switch, 396 KC(0x4c), KS_Caps_Lock, 397 KC(0x56), KS_ae, 398 KC(0x57), KS_oslash, 399 KC(0x58), KS_onehalf, KS_section, 400 KC(0x6b), KS_comma, KS_semicolon, 401 KC(0x6c), KS_period, KS_colon, 402 KC(0x6d), KS_minus, KS_underscore, 403 KC(0x77), KS_Control_L, 404 KC(0x7c), KS_less, KS_greater, KS_backslash, 405}; 406 407/* 024 Danish type 5 keyboard */ 408const keysym_t sunkbd5_keydesc_dk[] = { 409 KC(0x0d), KS_Mode_switch, 410 KC(0x1f), KS_2, KS_quotedbl, KS_at, 411 KC(0x20), KS_3, KS_numbersign, KS_sterling, 412 KC(0x21), KS_4, KS_currency, KS_dollar, 413 KC(0x22), KS_5, KS_percent, KS_asciitilde, 414 KC(0x23), KS_6, KS_ampersand, KS_asciicircum, 415 KC(0x24), KS_7, KS_slash, KS_braceleft, 416 KC(0x25), KS_8, KS_parenleft, KS_bracketleft, 417 KC(0x26), KS_9, KS_parenright, KS_bracketright, 418 KC(0x27), KS_0, KS_equal, KS_braceright, 419 KC(0x28), KS_plus, KS_question, 420 KC(0x29), KS_dead_acute, KS_dead_grave, KS_bar, 421 KC(0x2a), KS_onehalf, KS_asterisk, KS_grave, 422 KC(0x40), KS_aring, 423 KC(0x41), KS_dead_diaeresis,KS_dead_circumflex,KS_dead_tilde, 424 KC(0x56), KS_ae, 425 KC(0x57), KS_oslash, 426 KC(0x58), KS_backslash, KS_asterisk, KS_grave, 427 KC(0x6b), KS_comma, KS_semicolon, 428 KC(0x6c), KS_period, KS_colon, 429 KC(0x6d), KS_minus, KS_underscore, 430 KC(0x7c), KS_less, KS_greater, KS_backslash, 431}; 432 433/* 005 German type 4 keyboard */ 434const keysym_t sunkbd_keydesc_de[] = { 435 KC(0x0d), KS_Alt_L, 436 KC(0x0f), KS_bracketright,KS_braceright, KS_guillemotright, 437 KC(0x13), KS_Mode_switch, 438 KC(0x1f), KS_2, KS_quotedbl, KS_twosuperior, 439 KC(0x20), KS_3, KS_section, KS_threesuperior, 440 KC(0x23), KS_6, KS_ampersand, 441 KC(0x24), KS_7, KS_slash, KS_degree, 442 KC(0x25), KS_8, KS_parenleft, KS_grave, 443 KC(0x26), KS_9, KS_parenright, KS_apostrophe, 444 KC(0x27), KS_0, KS_equal, KS_bar, 445 KC(0x28), KS_ssharp, KS_question, KS_backslash, 446 KC(0x29), KS_dead_acute, KS_dead_grave, 447 KC(0x2a), KS_numbersign, KS_asciicircum, KS_at, 448 KC(0x3b), KS_z, 449 KC(0x40), KS_udiaeresis, 450 KC(0x41), KS_plus, KS_multiply, KS_asciitilde, 451 KC(0x4c), KS_Caps_Lock, 452 KC(0x56), KS_odiaeresis, 453 KC(0x57), KS_adiaeresis, 454 KC(0x58), KS_bracketleft, KS_braceleft, KS_guillemotleft, 455 KC(0x64), KS_y, 456 KC(0x6a), KS_m, KS_M, KS_mu, 457 KC(0x6b), KS_comma, KS_semicolon, 458 KC(0x6c), KS_period, KS_colon, 459 KC(0x6d), KS_minus, KS_underscore, 460 KC(0x77), KS_Control_L, 461 KC(0x7c), KS_less, KS_greater, 462}; 463 464/* 025 German type 5 keyboard */ 465const keysym_t sunkbd5_keydesc_de[] = { 466 KC(0x0d), KS_Mode_switch, 467 KC(0x1f), KS_2, KS_quotedbl, KS_twosuperior, 468 KC(0x20), KS_3, KS_section, KS_threesuperior, 469 KC(0x23), KS_6, KS_ampersand, 470 KC(0x24), KS_7, KS_slash, KS_braceleft, 471 KC(0x25), KS_8, KS_parenleft, KS_bracketleft, 472 KC(0x26), KS_9, KS_parenright, KS_bracketright, 473 KC(0x27), KS_0, KS_equal, KS_braceright, 474 KC(0x28), KS_ssharp, KS_question, KS_backslash, 475 KC(0x29), KS_dead_acute, KS_dead_grave, 476 KC(0x2a), KS_asciicircum, KS_degree, 477 KC(0x36), KS_q, KS_Q, KS_at, 478 KC(0x3b), KS_z, 479 KC(0x40), KS_udiaeresis, 480 KC(0x41), KS_plus, KS_multiply, KS_asciitilde, 481 KC(0x56), KS_odiaeresis, 482 KC(0x57), KS_adiaeresis, 483 KC(0x58), KS_numbersign, KS_apostrophe, KS_grave, 484 KC(0x64), KS_y, 485 KC(0x6a), KS_m, KS_M, KS_mu, 486 KC(0x6b), KS_comma, KS_semicolon, 487 KC(0x6c), KS_period, KS_colon, 488 KC(0x6d), KS_minus, KS_underscore, 489 KC(0x7c), KS_less, KS_greater, KS_bar, 490}; 491 492/* 006 Italian type 4 keyboard */ 493const keysym_t sunkbd_keydesc_it[] = { 494 KC(0x0d), KS_Mode_switch, 495 KC(0x0f), KS_bracketright,KS_braceright, KS_guillemotright, 496 KC(0x1f), KS_2, KS_quotedbl, KS_twosuperior, 497 KC(0x20), KS_3, KS_sterling, KS_threesuperior, 498 KC(0x23), KS_6, KS_ampersand, KS_notsign, 499 KC(0x24), KS_7, KS_slash, 500 KC(0x25), KS_8, KS_parenleft, 501 KC(0x26), KS_9, KS_parenright, KS_backslash, 502 KC(0x27), KS_0, KS_equal, KS_bar, 503 KC(0x28), KS_apostrophe, KS_question, KS_grave, 504 KC(0x29), KS_igrave, KS_asciicircum, 505 KC(0x2a), KS_ugrave, KS_section, 506 KC(0x40), KS_egrave, KS_eacute, 507 KC(0x41), KS_plus, KS_asterisk, KS_asciitilde, 508 KC(0x4c), KS_Caps_Lock, 509 KC(0x56), KS_ograve, KS_ccedilla, KS_at, 510 KC(0x57), KS_agrave, KS_degree, KS_numbersign, 511 KC(0x58), KS_bracketleft, KS_braceleft, KS_guillemotleft, 512 KC(0x6b), KS_comma, KS_semicolon, 513 KC(0x6c), KS_period, KS_colon, 514 KC(0x6d), KS_minus, KS_underscore, 515 KC(0x77), KS_Control_L, 516 KC(0x7c), KS_less, KS_greater, 517}; 518 519/* 026 Italian type 5 keyboard */ 520const keysym_t sunkbd5_keydesc_it[] = { 521 KC(0x0d), KS_Mode_switch, 522 KC(0x1f), KS_2, KS_quotedbl, 523 KC(0x20), KS_3, KS_sterling, 524 KC(0x23), KS_6, KS_ampersand, 525 KC(0x24), KS_7, KS_slash, 526 KC(0x25), KS_8, KS_parenleft, KS_braceleft, 527 KC(0x26), KS_9, KS_parenright, KS_braceright, 528 KC(0x27), KS_0, KS_equal, 529 KC(0x28), KS_apostrophe, KS_question, KS_grave, 530 KC(0x29), KS_igrave, KS_asciicircum, 531 KC(0x2a), KS_backslash, KS_bar, 532 KC(0x40), KS_egrave, KS_eacute, KS_bracketleft, 533 KC(0x41), KS_plus, KS_asterisk, KS_bracketright, 534 KC(0x56), KS_ograve, KS_ccedilla, KS_at, 535 KC(0x57), KS_agrave, KS_degree, KS_numbersign, 536 KC(0x58), KS_ugrave, KS_section, KS_asciitilde, 537 KC(0x6b), KS_comma, KS_semicolon, 538 KC(0x6c), KS_period, KS_colon, 539 KC(0x6d), KS_minus, KS_underscore, 540 KC(0x7c), KS_less, KS_greater, 541}; 542 543/* 007 Dutch type 4 keyboard */ 544const keysym_t sunkbd_keydesc_nl[] = { 545 KC(0x0d), KS_Caps_Lock, 546 KC(0x0f), KS_backslash, KS_bar, 547 KC(0x1e), KS_1, KS_exclam, KS_onesuperior, 548 KC(0x1f), KS_2, KS_quotedbl, KS_twosuperior, 549 KC(0x20), KS_3, KS_numbersign, KS_threesuperior, 550 KC(0x21), KS_4, KS_dollar, KS_onequarter, 551 KC(0x22), KS_5, KS_percent, KS_onehalf, 552 KC(0x23), KS_6, KS_ampersand, KS_threequarters, 553 KC(0x24), KS_7, KS_underscore, KS_sterling, 554 KC(0x25), KS_8, KS_parenleft, KS_braceleft, 555 KC(0x26), KS_9, KS_parenright, KS_braceright, 556 KC(0x27), KS_0, KS_apostrophe, KS_grave, 557 KC(0x28), KS_slash, KS_question, 558 KC(0x29), KS_degree, KS_dead_tilde, KS_dead_abovering, 559 KC(0x2a), KS_less, KS_greater, 560 KC(0x40), KS_dead_diaeresis,KS_dead_circumflex, 561 KC(0x41), KS_asterisk, KS_brokenbar, KS_asciitilde, 562 KC(0x4e), KS_s, KS_S, KS_ssharp, 563 KC(0x56), KS_plus, KS_plusminus, 564 KC(0x57), KS_dead_acute, KS_dead_grave, 565 KC(0x58), KS_at, KS_section, KS_notsign, 566 KC(0x64), KS_z, KS_Z, KS_guillemotleft, 567 KC(0x65), KS_x, KS_X, KS_guillemotright, 568 KC(0x66), KS_c, KS_C, KS_cent, 569 KC(0x6a), KS_m, KS_M, KS_mu, 570 KC(0x6b), KS_comma, KS_semicolon, 571 KC(0x6c), KS_period, KS_colon, 572 KC(0x6d), KS_minus, KS_equal, 573 KC(0x77), KS_Mode_switch, 574 KC(0x7d), KS_bracketright,KS_bracketleft, 575}; 576 577/* 027 Dutch type 5 keyboard */ 578const keysym_t sunkbd5_keydesc_nl[] = { 579 KC(0x0d), KS_Mode_switch, 580 KC(0x1e), KS_1, KS_exclam, KS_onesuperior, 581 KC(0x1f), KS_2, KS_quotedbl, KS_twosuperior, 582 KC(0x20), KS_3, KS_numbersign, KS_threesuperior, 583 KC(0x21), KS_4, KS_dollar, KS_onequarter, 584 KC(0x22), KS_5, KS_percent, KS_onehalf, 585 KC(0x23), KS_6, KS_ampersand, KS_threequarters, 586 KC(0x24), KS_7, KS_underscore, KS_sterling, 587 KC(0x25), KS_8, KS_parenleft, KS_braceleft, 588 KC(0x26), KS_9, KS_parenright, KS_braceright, 589 KC(0x27), KS_0, KS_apostrophe, KS_grave, 590 KC(0x28), KS_slash, KS_question, KS_backslash, 591 KC(0x29), KS_degree, KS_dead_tilde, KS_dead_abovering, 592 KC(0x2a), KS_at, KS_section, KS_notsign, 593 KC(0x40), KS_dead_diaeresis,KS_dead_circumflex, 594 KC(0x41), KS_asterisk, KS_bar, KS_asciitilde, 595 KC(0x4e), KS_s, KS_S, KS_ssharp, 596 KC(0x56), KS_plus, KS_plusminus, 597 KC(0x57), KS_dead_acute, KS_dead_grave, 598 KC(0x58), KS_less, KS_greater, KS_asciicircum, 599 KC(0x64), KS_z, KS_Z, KS_guillemotleft, 600 KC(0x65), KS_x, KS_X, KS_guillemotright, 601 KC(0x66), KS_c, KS_C, KS_cent, 602 KC(0x6a), KS_m, KS_M, KS_mu, 603 KC(0x6b), KS_comma, KS_semicolon, 604 KC(0x6c), KS_period, KS_colon, KS_hyphen, 605 KC(0x6d), KS_minus, KS_equal, 606 KC(0x7d), KS_bracketright,KS_bracketleft, KS_brokenbar, 607}; 608 609/* 008 Norwegian type 4 keyboard */ 610const keysym_t sunkbd_keydesc_no[] = { 611 KC(0x0d), KS_Mode_switch, 612 KC(0x0f), KS_asciitilde, KS_asciicircum, 613 KC(0x1f), KS_2, KS_quotedbl, KS_at, 614 KC(0x20), KS_3, KS_numbersign, KS_sterling, 615 KC(0x21), KS_4, KS_currency, KS_dollar, 616 KC(0x23), KS_6, KS_ampersand, 617 KC(0x24), KS_7, KS_slash, KS_braceleft, 618 KC(0x25), KS_8, KS_parenleft, KS_bracketleft, 619 KC(0x26), KS_9, KS_parenright, KS_bracketright, 620 KC(0x27), KS_0, KS_equal, KS_braceright, 621 KC(0x28), KS_plus, KS_question, 622 KC(0x29), KS_backslash, KS_dead_grave, KS_dead_acute, 623 KC(0x2a), KS_apostrophe, KS_asterisk, KS_grave, 624 KC(0x40), KS_aring, 625 KC(0x41), KS_dead_diaeresis,KS_dead_circumflex,KS_dead_tilde, 626 KC(0x4c), KS_Caps_Lock, 627 KC(0x56), KS_oslash, 628 KC(0x57), KS_ae, 629 KC(0x58), KS_bar, KS_section, 630 KC(0x6b), KS_comma, KS_semicolon, 631 KC(0x6c), KS_period, KS_colon, 632 KC(0x6d), KS_minus, KS_underscore, 633 KC(0x77), KS_Control_L, 634 KC(0x7d), KS_less, KS_greater, 635}; 636 637/* 028 Norwegian type 5 keyboard */ 638const keysym_t sunkbd5_keydesc_no[] = { 639 KC(0x0d), KS_Mode_switch, 640 KC(0x1f), KS_2, KS_quotedbl, KS_at, 641 KC(0x20), KS_3, KS_numbersign, KS_sterling, 642 KC(0x21), KS_4, KS_currency, KS_dollar, 643 KC(0x22), KS_5, KS_percent, KS_asciitilde, 644 KC(0x23), KS_6, KS_ampersand, KS_asciicircum, 645 KC(0x24), KS_7, KS_slash, KS_braceleft, 646 KC(0x25), KS_8, KS_parenleft, KS_bracketleft, 647 KC(0x26), KS_9, KS_parenright, KS_bracketright, 648 KC(0x27), KS_0, KS_equal, KS_braceright, 649 KC(0x28), KS_plus, KS_question, 650 KC(0x29), KS_backslash, KS_dead_grave, KS_dead_acute, 651 KC(0x2a), KS_bar, KS_section, 652 KC(0x40), KS_aring, 653 KC(0x41), KS_dead_diaeresis,KS_dead_circumflex,KS_dead_tilde, 654 KC(0x56), KS_oslash, 655 KC(0x57), KS_ae, 656 KC(0x58), KS_apostrophe, KS_asterisk, KS_grave, 657 KC(0x6b), KS_comma, KS_semicolon, 658 KC(0x6c), KS_period, KS_colon, 659 KC(0x6d), KS_minus, KS_underscore, 660 KC(0x7d), KS_less, KS_greater, 661}; 662 663/* 009 Portuguese type 4 keyboard */ 664const keysym_t sunkbd_keydesc_pt[] = { 665 KC(0x0d), KS_Mode_switch, 666 KC(0x0f), KS_bracketright,KS_braceright, KS_guillemotright, 667 KC(0x1f), KS_2, KS_quotedbl, KS_at, 668 KC(0x20), KS_3, KS_numbersign, KS_sterling, 669 KC(0x21), KS_4, KS_dollar, KS_section, 670 KC(0x23), KS_6, KS_ampersand, KS_notsign, 671 KC(0x24), KS_7, KS_slash, 672 KC(0x25), KS_8, KS_parenleft, 673 KC(0x26), KS_9, KS_parenright, KS_backslash, 674 KC(0x27), KS_0, KS_equal, KS_bar, 675 KC(0x28), KS_apostrophe, KS_question, KS_grave, 676 KC(0x29), KS_exclamdown, KS_questiondown, 677 KC(0x2a), KS_dead_tilde, KS_dead_circumflex,KS_asciicircum, 678 KC(0x40), KS_dead_diaeresis,KS_asterisk, KS_plus, 679 KC(0x41), KS_dead_acute, KS_dead_grave, KS_asciitilde, 680 KC(0x4c), KS_Caps_Lock, 681 KC(0x56), KS_ccedilla, 682 KC(0x57), KS_masculine, KS_ordfeminine, 683 KC(0x58), KS_bracketleft, KS_braceleft, KS_guillemotleft, 684 KC(0x6b), KS_comma, KS_semicolon, 685 KC(0x6c), KS_period, KS_colon, 686 KC(0x6d), KS_minus, KS_underscore, 687 KC(0x77), KS_Control_L, 688 KC(0x7d), KS_less, KS_greater, 689}; 690 691/* 029 Portuguese type 4 keyboard */ 692const keysym_t sunkbd5_keydesc_pt[] = { 693 KC(0x0d), KS_Mode_switch, 694 KC(0x1f), KS_2, KS_quotedbl, KS_at, 695 KC(0x20), KS_3, KS_numbersign, KS_sterling, 696 KC(0x21), KS_4, KS_dollar, KS_section, 697 KC(0x22), KS_5, KS_percent, KS_asciitilde, 698 KC(0x23), KS_6, KS_ampersand, KS_asciicircum, 699 KC(0x24), KS_7, KS_slash, KS_braceleft, 700 KC(0x25), KS_8, KS_parenleft, KS_bracketleft, 701 KC(0x26), KS_9, KS_parenright, KS_bracketright, 702 KC(0x27), KS_0, KS_equal, KS_braceright, 703 KC(0x28), KS_apostrophe, KS_question, KS_grave, 704 KC(0x29), KS_guillemotleft,KS_guillemotright, 705 KC(0x2a), KS_backslash, KS_bar, 706 KC(0x40), KS_plus, KS_asterisk, KS_dead_diaeresis, 707 KC(0x41), KS_dead_acute, KS_dead_grave, 708 KC(0x56), KS_ccedilla, 709 KC(0x57), KS_masculine, KS_ordfeminine, 710 KC(0x58), KS_dead_tilde, KS_dead_circumflex, 711 KC(0x6b), KS_comma, KS_semicolon, 712 KC(0x6c), KS_period, KS_colon, 713 KC(0x6d), KS_minus, KS_underscore, 714 KC(0x7d), KS_less, KS_greater, 715}; 716 717/* 00a Spanish type 4 keyboard */ 718const keysym_t sunkbd_keydesc_es[] = { 719 KC(0x0d), KS_Mode_switch, 720 KC(0x0f), KS_bracketright,KS_braceright, KS_guillemotright, 721 KC(0x1f), KS_2, KS_quotedbl, KS_at, 722 KC(0x20), KS_3, KS_hyphen, KS_numbersign, 723 KC(0x22), KS_5, KS_percent, KS_degree, 724 KC(0x23), KS_6, KS_ampersand, KS_notsign, 725 KC(0x24), KS_7, KS_slash, 726 KC(0x25), KS_8, KS_parenleft, 727 KC(0x26), KS_9, KS_parenright, KS_backslash, 728 KC(0x27), KS_0, KS_equal, KS_bar, 729 KC(0x28), KS_apostrophe, KS_question, KS_grave, 730 KC(0x29), KS_exclamdown, KS_questiondown, 731 KC(0x2a), KS_ccedilla, 732 KC(0x3e), KS_o, KS_O, KS_masculine, 733 KC(0x40), KS_dead_grave, KS_dead_circumflex,KS_asciicircum, 734 KC(0x41), KS_plus, KS_asterisk, KS_asciitilde, 735 KC(0x4c), KS_Caps_Lock, 736 KC(0x4d), KS_a, KS_A, KS_ordfeminine, 737 KC(0x56), KS_ntilde, 738 KC(0x57), KS_dead_acute, KS_dead_diaeresis, 739 KC(0x58), KS_bracketleft, KS_braceleft, KS_guillemotleft, 740 KC(0x6b), KS_comma, KS_semicolon, 741 KC(0x6c), KS_period, KS_colon, 742 KC(0x6d), KS_minus, KS_underscore, 743 KC(0x77), KS_Control_L, 744 KC(0x7d), KS_less, KS_greater, 745}; 746 747/* 02a Spanish type 5 keyboard */ 748const keysym_t sunkbd5_keydesc_es[] = { 749 KC(0x0d), KS_Mode_switch, 750 KC(0x1e), KS_1, KS_exclam, KS_bar, 751 KC(0x1f), KS_2, KS_quotedbl, KS_at, 752 KC(0x20), KS_3, KS_hyphen, KS_numbersign, 753 KC(0x21), KS_4, KS_dollar, KS_asciicircum, 754 KC(0x22), KS_5, KS_percent, KS_asciitilde, 755 KC(0x23), KS_6, KS_ampersand, KS_notsign, 756 KC(0x24), KS_7, KS_slash, 757 KC(0x25), KS_8, KS_parenleft, 758 KC(0x26), KS_9, KS_parenright, 759 KC(0x27), KS_0, KS_equal, 760 KC(0x28), KS_apostrophe, KS_question, KS_grave, 761 KC(0x29), KS_exclamdown, KS_questiondown, 762 KC(0x2a), KS_masculine, KS_ordfeminine, KS_backslash, 763 KC(0x40), KS_dead_grave, KS_dead_circumflex,KS_bracketleft, 764 KC(0x41), KS_plus, KS_asterisk, KS_bracketright, 765 KC(0x56), KS_ntilde, 766 KC(0x57), KS_dead_acute, KS_dead_diaeresis,KS_braceleft, 767 KC(0x58), KS_ccedilla, KS_Ccedilla, KS_braceright, 768 KC(0x6b), KS_comma, KS_semicolon, 769 KC(0x6c), KS_period, KS_colon, 770 KC(0x6d), KS_minus, KS_underscore, 771 KC(0x7d), KS_less, KS_greater, 772}; 773 774/* 00b Swedish/Finnish type 4 keyboard */ 775const keysym_t sunkbd_keydesc_sv[] = { 776 KC(0x0d), KS_Multi_key, 777 KC(0x0f), KS_asciitilde, KS_asciicircum, 778 KC(0x1f), KS_2, KS_quotedbl, KS_at, 779 KC(0x20), KS_3, KS_numbersign, KS_sterling, 780 KC(0x21), KS_4, KS_currency, KS_dollar, 781 KC(0x23), KS_6, KS_ampersand, 782 KC(0x24), KS_7, KS_slash, KS_braceleft, 783 KC(0x25), KS_8, KS_parenleft, KS_bracketleft, 784 KC(0x26), KS_9, KS_parenright, KS_bracketright, 785 KC(0x27), KS_0, KS_equal, KS_braceright, 786 KC(0x28), KS_plus, KS_question, KS_backslash, 787 KC(0x29), KS_dead_acute, KS_dead_grave, 788 KC(0x2a), KS_apostrophe, KS_asterisk, KS_grave, 789 KC(0x40), KS_aring, 790 KC(0x41), KS_dead_diaeresis,KS_dead_circumflex,KS_dead_tilde, 791 KC(0x43), KS_Mode_switch, 792 KC(0x4c), KS_Caps_Lock, 793 KC(0x56), KS_odiaeresis, 794 KC(0x57), KS_adiaeresis, 795 KC(0x58), KS_section, KS_onehalf, 796 KC(0x6b), KS_comma, KS_semicolon, 797 KC(0x6c), KS_period, KS_colon, 798 KC(0x6d), KS_minus, KS_underscore, 799 KC(0x77), KS_Control_L, 800 KC(0x7c), KS_less, KS_greater, KS_bar, 801}; 802 803const keysym_t sunkbd_keydesc_sv_nodead[] = { 804 KC(0x29), KS_apostrophe, KS_grave, 805 KC(0x41), KS_diaeresis, KS_asciicircum, KS_asciitilde, 806}; 807 808/* 02b Swedish type 5 keyboard */ 809const keysym_t sunkbd5_keydesc_sv[] = { 810 KC(0x0d), KS_Mode_switch, 811 KC(0x0f), KS_asciitilde, KS_asciicircum, 812 KC(0x1f), KS_2, KS_quotedbl, KS_at, 813 KC(0x20), KS_3, KS_numbersign, KS_sterling, 814 KC(0x21), KS_4, KS_currency, KS_dollar, 815 KC(0x23), KS_6, KS_ampersand, 816 KC(0x24), KS_7, KS_slash, KS_braceleft, 817 KC(0x25), KS_8, KS_parenleft, KS_bracketleft, 818 KC(0x26), KS_9, KS_parenright, KS_bracketright, 819 KC(0x27), KS_0, KS_equal, KS_braceright, 820 KC(0x28), KS_plus, KS_question, KS_backslash, 821 KC(0x29), KS_dead_acute, KS_dead_grave, 822 KC(0x2a), KS_section, KS_onehalf, 823 KC(0x40), KS_aring, 824 KC(0x41), KS_dead_diaeresis,KS_dead_circumflex,KS_dead_tilde, 825 KC(0x43), KS_Multi_key, 826 KC(0x4c), KS_Control_L, 827 KC(0x56), KS_odiaeresis, 828 KC(0x57), KS_adiaeresis, 829 KC(0x58), KS_apostrophe, KS_asterisk, KS_grave, 830 KC(0x6b), KS_comma, KS_semicolon, 831 KC(0x6c), KS_period, KS_colon, 832 KC(0x6d), KS_minus, KS_underscore, 833 KC(0x77), KS_Caps_Lock, 834 KC(0x7c), KS_less, KS_greater, KS_bar, 835}; 836 837/* 00c Swiss-French type 4 keyboard */ 838const keysym_t sunkbd_keydesc_sf[] = { 839 KC(0x0d), KS_Multi_key, 840 KC(0x0f), KS_greater, KS_braceright, 841 KC(0x1e), KS_1, KS_plus, KS_exclam, 842 KC(0x1f), KS_2, KS_quotedbl, KS_at, 843 KC(0x20), KS_3, KS_asterisk, KS_numbersign, 844 KC(0x21), KS_4, KS_ccedilla, KS_cent, 845 KC(0x22), KS_5, KS_percent, KS_asciitilde, 846 KC(0x23), KS_6, KS_ampersand, KS_section, 847 KC(0x24), KS_7, KS_slash, KS_bar, 848 KC(0x25), KS_8, KS_parenleft, KS_degree, 849 KC(0x26), KS_9, KS_parenright, KS_backslash, 850 KC(0x27), KS_0, KS_equal, KS_asciicircum, 851 KC(0x28), KS_apostrophe, KS_question, KS_grave, 852 KC(0x29), KS_dead_circumflex,KS_dead_grave, 853 KC(0x2a), KS_dollar, KS_dead_tilde, KS_sterling, 854 KC(0x3b), KS_z, 855 KC(0x40), KS_egrave, KS_udiaeresis, 856 KC(0x41), KS_dead_diaeresis,KS_dead_acute, 857 KC(0x43), KS_Mode_switch, 858 KC(0x4c), KS_Caps_Lock, 859 KC(0x56), KS_eacute, KS_odiaeresis, 860 KC(0x57), KS_agrave, KS_adiaeresis, 861 KC(0x58), KS_less, KS_braceleft, 862 KC(0x64), KS_y, 863 KC(0x6a), KS_m, KS_M, KS_mu, 864 KC(0x6b), KS_comma, KS_semicolon, 865 KC(0x6c), KS_period, KS_colon, 866 KC(0x6d), KS_minus, KS_underscore, 867 KC(0x77), KS_Control_L, 868 KC(0x7c), KS_bracketright,KS_bracketleft, KS_backslash, 869}; 870 871/* 02c Swiss-French type 5 keyboard */ 872const keysym_t sunkbd5_keydesc_sf[] = { 873 KC(0x0d), KS_Mode_switch, 874 KC(0x1e), KS_1, KS_plus, KS_bar, 875 KC(0x1f), KS_2, KS_quotedbl, KS_at, 876 KC(0x20), KS_3, KS_asterisk, KS_numbersign, 877 KC(0x21), KS_4, KS_ccedilla, KS_asciicircum, 878 KC(0x22), KS_5, KS_percent, KS_asciitilde, 879 KC(0x23), KS_6, KS_ampersand, 880 KC(0x24), KS_7, KS_slash, 881 KC(0x25), KS_8, KS_parenleft, 882 KC(0x26), KS_9, KS_parenright, 883 KC(0x27), KS_0, KS_equal, KS_grave, 884 KC(0x28), KS_apostrophe, KS_question, KS_dead_acute, 885 KC(0x29), KS_dead_circumflex,KS_dead_grave,KS_dead_tilde, 886 KC(0x2a), KS_dollar, KS_degree, 887 KC(0x3b), KS_z, 888 KC(0x40), KS_egrave, KS_udiaeresis, KS_bracketleft, 889 KC(0x41), KS_dead_diaeresis,KS_exclam, KS_bracketright, 890 KC(0x56), KS_eacute, KS_odiaeresis, 891 KC(0x57), KS_agrave, KS_adiaeresis, KS_braceleft, 892 KC(0x58), KS_dollar, KS_sterling, KS_braceright, 893 KC(0x64), KS_y, 894 KC(0x6b), KS_comma, KS_semicolon, 895 KC(0x6c), KS_period, KS_colon, 896 KC(0x6d), KS_minus, KS_underscore, 897 KC(0x7c), KS_less, KS_greater, KS_backslash, 898}; 899 900/* 00d Swiss-German type 4 keyboard */ 901const keysym_t sunkbd_keydesc_sg[] = { 902 KC(0x0d), KS_Multi_key, 903 KC(0x0f), KS_greater, KS_braceright, 904 KC(0x1e), KS_1, KS_plus, KS_exclam, 905 KC(0x1f), KS_2, KS_quotedbl, KS_at, 906 KC(0x20), KS_3, KS_asterisk, KS_numbersign, 907 KC(0x21), KS_4, KS_ccedilla, KS_cent, 908 KC(0x22), KS_5, KS_percent, KS_asciitilde, 909 KC(0x23), KS_6, KS_ampersand, KS_section, 910 KC(0x24), KS_7, KS_slash, KS_bar, 911 KC(0x25), KS_8, KS_parenleft, KS_degree, 912 KC(0x26), KS_9, KS_parenright, KS_backslash, 913 KC(0x27), KS_0, KS_equal, KS_asciicircum, 914 KC(0x28), KS_apostrophe, KS_question, KS_grave, 915 KC(0x29), KS_dead_circumflex,KS_dead_grave, 916 KC(0x2a), KS_dollar, KS_dead_tilde, KS_sterling, 917 KC(0x3b), KS_z, 918 KC(0x40), KS_udiaeresis, KS_egrave, 919 KC(0x41), KS_dead_diaeresis,KS_dead_acute, 920 KC(0x43), KS_Mode_switch, 921 KC(0x4c), KS_Caps_Lock, 922 KC(0x56), KS_odiaeresis, KS_eacute, 923 KC(0x57), KS_adiaeresis, KS_agrave, 924 KC(0x58), KS_less, KS_braceleft, 925 KC(0x64), KS_y, 926 KC(0x6a), KS_m, KS_M, KS_mu, 927 KC(0x6b), KS_comma, KS_semicolon, 928 KC(0x6c), KS_period, KS_colon, 929 KC(0x6d), KS_minus, KS_underscore, 930 KC(0x77), KS_Control_L, 931 KC(0x7c), KS_bracketright,KS_bracketleft, KS_backslash, 932}; 933 934/* 02d Swiss-German type 5 keyboard */ 935const keysym_t sunkbd5_keydesc_sg[] = { 936 KC(0x0d), KS_Mode_switch, 937 KC(0x1e), KS_1, KS_plus, KS_bar, 938 KC(0x1f), KS_2, KS_quotedbl, KS_at, 939 KC(0x20), KS_3, KS_asterisk, KS_numbersign, 940 KC(0x21), KS_4, KS_ccedilla, KS_asciicircum, 941 KC(0x22), KS_5, KS_percent, KS_asciitilde, 942 KC(0x23), KS_6, KS_ampersand, 943 KC(0x24), KS_7, KS_slash, 944 KC(0x25), KS_8, KS_parenleft, 945 KC(0x26), KS_9, KS_parenright, 946 KC(0x27), KS_0, KS_equal, KS_grave, 947 KC(0x28), KS_apostrophe, KS_question, KS_dead_acute, 948 KC(0x29), KS_dead_circumflex,KS_dead_grave,KS_dead_tilde, 949 KC(0x2a), KS_dollar, KS_degree, 950 KC(0x3b), KS_z, 951 KC(0x40), KS_udiaeresis, KS_egrave, KS_bracketleft, 952 KC(0x41), KS_dead_diaeresis,KS_exclam, KS_bracketright, 953 KC(0x56), KS_odiaeresis, KS_eacute, 954 KC(0x57), KS_adiaeresis, KS_agrave, KS_braceleft, 955 KC(0x58), KS_dollar, KS_sterling, KS_braceright, 956 KC(0x64), KS_y, 957 KC(0x6b), KS_comma, KS_semicolon, 958 KC(0x6c), KS_period, KS_colon, 959 KC(0x6d), KS_minus, KS_underscore, 960 KC(0x7c), KS_less, KS_greater, KS_backslash, 961}; 962 963/* 00e UK English type 4 keyboard */ 964const keysym_t sunkbd_keydesc_uk[] = { 965 KC(0x1e), KS_1, KS_exclam, KS_bar, 966 KC(0x21), KS_3, KS_sterling, KS_numbersign, 967 KC(0x28), KS_minus, KS_underscore, KS_notsign, 968 KC(0x43), KS_Mode_switch, 969}; 970 971/* 02e UK English type 5 keyboard */ 972const keysym_t sunkbd5_keydesc_uk[] = { 973 KC(0x0d), KS_Mode_switch, 974 KC(0x1f), KS_2, KS_quotedbl, 975 KC(0x20), KS_3, KS_sterling, 976 KC(0x2a), KS_grave, KS_notsign, KS_brokenbar, 977 KC(0x57), KS_apostrophe, KS_at, 978 KC(0x58), KS_numbersign, KS_asciitilde, 979 KC(0x7c), KS_backslash, KS_bar, 980}; 981 982/* 031 Japan type 5 keyboard */ 983const keysym_t sunkbd5_keydesc_jp[] = { 984 KC(0x1f), KS_2, KS_quotedbl, 985 KC(0x23), KS_6, KS_ampersand, 986 KC(0x24), KS_7, KS_apostrophe, 987 KC(0x25), KS_8, KS_parenleft, 988 KC(0x26), KS_9, KS_parenright, 989 KC(0x27), KS_0, 990 KC(0x28), KS_minus, KS_equal, 991 KC(0x29), KS_asciicircum, KS_asciitilde, 992 KC(0x2a), KS_yen, KS_bar, 993 KC(0x40), KS_at, KS_grave, 994 KC(0x41), KS_bracketleft, KS_braceleft, 995 KC(0x56), KS_semicolon, KS_plus, 996 KC(0x57), KS_colon, KS_asterisk, 997 KC(0x58), KS_bracketright,KS_braceright, 998 KC(0x7c), KS_backslash, KS_underscore, 999}; 1000 1001#define KBD_MAP(name, base, map) \ 1002 { name, base, sizeof(map)/sizeof(keysym_t), map } 1003 1004/* Supported type 4 keyboard layouts */ 1005const struct wscons_keydesc sunkbd_keydesctab[] = { 1006 KBD_MAP(KB_US, 0, sunkbd_keydesc_us), 1007 KBD_MAP(KB_BE, KB_US, sunkbd_keydesc_befr), 1008 KBD_MAP(KB_DE, KB_US, sunkbd_keydesc_de), 1009 KBD_MAP(KB_DK, KB_US, sunkbd_keydesc_dk), 1010 KBD_MAP(KB_ES, KB_US, sunkbd_keydesc_es), 1011 KBD_MAP(KB_FR, KB_US, sunkbd_keydesc_befr), 1012 KBD_MAP(KB_IT, KB_US, sunkbd_keydesc_it), 1013 KBD_MAP(KB_NL, KB_US, sunkbd_keydesc_nl), 1014 KBD_MAP(KB_NO, KB_US, sunkbd_keydesc_no), 1015 KBD_MAP(KB_PT, KB_US, sunkbd_keydesc_pt), 1016 KBD_MAP(KB_SF, KB_US, sunkbd_keydesc_sf), 1017 KBD_MAP(KB_SG, KB_US, sunkbd_keydesc_sg), 1018 KBD_MAP(KB_SV, KB_US, sunkbd_keydesc_sv), 1019 KBD_MAP(KB_SV | KB_NODEAD, KB_SV, sunkbd_keydesc_sv_nodead), 1020 KBD_MAP(KB_UK, KB_US, sunkbd_keydesc_uk), 1021 {0, 0, 0, 0}, 1022}; 1023 1024/* Supported type 5 keyboard layouts */ 1025const struct wscons_keydesc sunkbd5_keydesctab[] = { 1026 KBD_MAP(KB_US, 0, sunkbd_keydesc_us), 1027 KBD_MAP(KB_DE, KB_US, sunkbd5_keydesc_de), 1028 KBD_MAP(KB_DK, KB_US, sunkbd5_keydesc_dk), 1029 KBD_MAP(KB_ES, KB_US, sunkbd5_keydesc_es), 1030 KBD_MAP(KB_FR, KB_US, sunkbd5_keydesc_fr), 1031 KBD_MAP(KB_IT, KB_US, sunkbd5_keydesc_it), 1032 KBD_MAP(KB_JP, KB_US, sunkbd5_keydesc_jp), 1033 KBD_MAP(KB_NL, KB_US, sunkbd5_keydesc_nl), 1034 KBD_MAP(KB_NO, KB_US, sunkbd5_keydesc_no), 1035 KBD_MAP(KB_PT, KB_US, sunkbd5_keydesc_pt), 1036 KBD_MAP(KB_SF, KB_US, sunkbd5_keydesc_sf), 1037 KBD_MAP(KB_SG, KB_US, sunkbd5_keydesc_sg), 1038 KBD_MAP(KB_SV, KB_US, sunkbd5_keydesc_sv), 1039 KBD_MAP(KB_SV | KB_NODEAD, KB_SV, sunkbd_keydesc_sv_nodead), 1040 KBD_MAP(KB_UK, KB_US, sunkbd5_keydesc_uk), 1041 {0, 0, 0, 0}, 1042}; 1043 1044/* 1045 * Keyboard layout to ID table 1046 * References: 1047 * Sun Type 5 Keyboard Supplement Installation Guide, May 1992 1048 * http://docs.sun.com/db/doc/806-6642/6jfipqu57?a=view 1049 * http://jp.sunsolve.sun.com/handbook_pub/Systems/SSVygr/INPUT_Compact1_Keyboard.html 1050 */ 1051const int sunkbd_layouts[MAXSUNLAYOUT] = { 1052 /* Type 4 layouts */ 1053 KB_US, /* 000 USA */ 1054 KB_US, /* 001 same as 000 */ 1055 KB_BE, /* 002 Belgium/French */ 1056 -1, /* 003 Canada */ 1057 KB_DK, /* 004 Denmark */ 1058 KB_DE, /* 005 Germany */ 1059 KB_IT, /* 006 Italy */ 1060 KB_NL, /* 007 The Netherlands */ 1061 KB_NO, /* 008 Norway */ 1062 KB_PT, /* 009 Portugal */ 1063 KB_ES, /* 00a Latin America/Spanish */ 1064 KB_SV, /* 00b Sweden */ 1065 KB_SF, /* 00c Switzerland/French */ 1066 KB_SG, /* 00d Switzerland/German */ 1067 KB_UK, /* 00e Great Britain */ 1068 -1, /* 00f unaffected */ 1069 -1, /* 010 Korea */ 1070 -1, /* 011 Taiwan */ 1071 -1, /* 012 unaffected */ 1072 -1, /* 013 unaffected */ 1073 -1, /* 014 VT220 */ 1074 -1, /* 015 VT220 Switzerland/French */ 1075 -1, /* 016 VT220 Switzerland/German */ 1076 -1, /* 017 VT220 Switzerland/Italian */ 1077 -1, /* 018 unaffected */ 1078 -1, /* 019 Belgium */ 1079 -1, /* 01a unaffected */ 1080 -1, /* 01b unaffected */ 1081 -1, /* 01c unaffected */ 1082 -1, /* 01d unaffected */ 1083 -1, /* 01e unaffected */ 1084 -1, /* 01f unaffected */ 1085 -1, /* 020 Japan */ 1086 1087 /* Type 5 layouts */ 1088 KB_US, /* 021 USA */ 1089 KB_US, /* 022 UNIX */ 1090 KB_FR, /* 023 France */ 1091 KB_DK, /* 024 Denmark */ 1092 KB_DE, /* 025 Germany */ 1093 KB_IT, /* 026 Italy */ 1094 KB_NL, /* 027 The Netherlands */ 1095 KB_NO, /* 028 Norway */ 1096 KB_PT, /* 029 Portugal */ 1097 KB_ES, /* 02a Spain */ 1098 KB_SV, /* 02b Sweden */ 1099 KB_SF, /* 02c Switzerland/French */ 1100 KB_SG, /* 02d Switzerland/German */ 1101 KB_UK, /* 02e Great Britain */ 1102 -1, /* 02f Korea */ 1103 -1, /* 030 Taiwan */ 1104 KB_JP, /* 031 Japan */ 1105 -1, /* 032 Canada/French */ 1106 -1, /* 033 Hungary */ 1107 -1, /* 034 Poland */ 1108 -1, /* 035 Czech */ 1109 -1, /* 036 Russia */ 1110 -1, /* 037 Latvia */ 1111 -1, /* 038 Turkey-Q5 */ 1112 -1, /* 039 Greece */ 1113 -1, /* 03a Arabic */ 1114 -1, /* 03b Lithuania */ 1115 -1, /* 03c Belgium */ 1116 -1, /* 03d unaffected */ 1117 -1, /* 03e Turkey-F5 */ 1118 -1, /* 03f Canada/French */ 1119 1120 /* Not affected range */ 1121 -1, /* 040 */ 1122 -1, /* 041 */ 1123 -1, /* 042 */ 1124 -1, /* 043 */ 1125 -1, /* 044 */ 1126 -1, /* 045 */ 1127 -1, /* 046 */ 1128 -1, /* 047 */ 1129 -1, /* 048 */ 1130 -1, /* 049 */ 1131 -1, /* 04a */ 1132 -1, /* 04b */ 1133 -1, /* 04c */ 1134 -1, /* 04d */ 1135 -1, /* 04e */ 1136 -1, /* 04f */ 1137 1138 /* ``Compact-1'' layouts */ 1139 KB_US, /* 050 USA */ 1140 KB_US, /* 051 UNIX */ 1141 KB_FR, /* 052 France */ 1142 KB_DK, /* 053 Denmark */ 1143 KB_DE, /* 054 Germany */ 1144 KB_IT, /* 055 Italy */ 1145 KB_NL, /* 056 The Netherlands */ 1146 KB_NO, /* 057 Norway */ 1147 KB_PT, /* 058 Portugal */ 1148 KB_ES, /* 059 Spain */ 1149 KB_SV, /* 05a Sweden */ 1150 KB_SF, /* 05b Switzerland/French */ 1151 KB_SG, /* 05c Switzerland/German */ 1152 KB_UK, /* 05d Great Britain */ 1153 -1, /* 05e Korea */ 1154 -1, /* 05f Taiwan */ 1155 KB_JP, /* 060 Japan */ 1156 -1, /* 061 Canada/French */ 1157}; 1158 1159struct wskbd_mapdata sunkbd_keymapdata = { 1160 sunkbd_keydesctab, 1161#ifdef SUNKBD_LAYOUT 1162 SUNKBD_LAYOUT, 1163#else 1164 KB_US, 1165#endif 1166}; 1167 1168struct wskbd_mapdata sunkbd5_keymapdata = { 1169 sunkbd5_keydesctab, 1170#ifdef SUNKBD5_LAYOUT 1171 SUNKBD5_LAYOUT, 1172#else 1173 KB_US, 1174#endif 1175}; 1176