1 // Copyright 2022 The ChromiumOS Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #[derive(Debug, Clone, Copy)] 6 pub struct MapEntry { 7 pub linux_keycode: u16, 8 pub xkb: u32, 9 pub win: u32, 10 pub mac: u32, 11 } 12 13 // Based on Chromium's chromium/chromium/ui/events/keycodes/dom/keycode_converter_data.inc. 14 #[cfg_attr(windows, allow(dead_code))] 15 pub const KEYCODE_MAP: [MapEntry; 104] = [ 16 MapEntry { 17 linux_keycode: 30, 18 xkb: 0x0026, 19 win: 0x001e, 20 mac: 0x0000, 21 }, 22 MapEntry { 23 linux_keycode: 48, 24 xkb: 0x0038, 25 win: 0x0030, 26 mac: 0x000b, 27 }, 28 MapEntry { 29 linux_keycode: 46, 30 xkb: 0x0036, 31 win: 0x002e, 32 mac: 0x0008, 33 }, 34 MapEntry { 35 linux_keycode: 32, 36 xkb: 0x0028, 37 win: 0x0020, 38 mac: 0x0002, 39 }, 40 MapEntry { 41 linux_keycode: 18, 42 xkb: 0x001a, 43 win: 0x0012, 44 mac: 0x000e, 45 }, 46 MapEntry { 47 linux_keycode: 33, 48 xkb: 0x0029, 49 win: 0x0021, 50 mac: 0x0003, 51 }, 52 MapEntry { 53 linux_keycode: 34, 54 xkb: 0x002a, 55 win: 0x0022, 56 mac: 0x0005, 57 }, 58 MapEntry { 59 linux_keycode: 35, 60 xkb: 0x002b, 61 win: 0x0023, 62 mac: 0x0004, 63 }, 64 MapEntry { 65 linux_keycode: 23, 66 xkb: 0x001f, 67 win: 0x0017, 68 mac: 0x0022, 69 }, 70 MapEntry { 71 linux_keycode: 36, 72 xkb: 0x002c, 73 win: 0x0024, 74 mac: 0x0026, 75 }, 76 MapEntry { 77 linux_keycode: 37, 78 xkb: 0x002d, 79 win: 0x0025, 80 mac: 0x0028, 81 }, 82 MapEntry { 83 linux_keycode: 38, 84 xkb: 0x002e, 85 win: 0x0026, 86 mac: 0x0025, 87 }, 88 MapEntry { 89 linux_keycode: 50, 90 xkb: 0x003a, 91 win: 0x0032, 92 mac: 0x002e, 93 }, 94 MapEntry { 95 linux_keycode: 49, 96 xkb: 0x0039, 97 win: 0x0031, 98 mac: 0x002d, 99 }, 100 MapEntry { 101 linux_keycode: 24, 102 xkb: 0x0020, 103 win: 0x0018, 104 mac: 0x001f, 105 }, 106 MapEntry { 107 linux_keycode: 25, 108 xkb: 0x0021, 109 win: 0x0019, 110 mac: 0x0023, 111 }, 112 MapEntry { 113 linux_keycode: 16, 114 xkb: 0x0018, 115 win: 0x0010, 116 mac: 0x000c, 117 }, 118 MapEntry { 119 linux_keycode: 19, 120 xkb: 0x001b, 121 win: 0x0013, 122 mac: 0x000f, 123 }, 124 MapEntry { 125 linux_keycode: 31, 126 xkb: 0x0027, 127 win: 0x001f, 128 mac: 0x0001, 129 }, 130 MapEntry { 131 linux_keycode: 20, 132 xkb: 0x001c, 133 win: 0x0014, 134 mac: 0x0011, 135 }, 136 MapEntry { 137 linux_keycode: 22, 138 xkb: 0x001e, 139 win: 0x0016, 140 mac: 0x0020, 141 }, 142 MapEntry { 143 linux_keycode: 47, 144 xkb: 0x0037, 145 win: 0x002f, 146 mac: 0x0009, 147 }, 148 MapEntry { 149 linux_keycode: 17, 150 xkb: 0x0019, 151 win: 0x0011, 152 mac: 0x000d, 153 }, 154 MapEntry { 155 linux_keycode: 45, 156 xkb: 0x0035, 157 win: 0x002d, 158 mac: 0x0007, 159 }, 160 MapEntry { 161 linux_keycode: 21, 162 xkb: 0x001d, 163 win: 0x0015, 164 mac: 0x0010, 165 }, 166 MapEntry { 167 linux_keycode: 44, 168 xkb: 0x0034, 169 win: 0x002c, 170 mac: 0x0006, 171 }, 172 MapEntry { 173 linux_keycode: 2, 174 xkb: 0x000a, 175 win: 0x0002, 176 mac: 0x0012, 177 }, 178 MapEntry { 179 linux_keycode: 3, 180 xkb: 0x000b, 181 win: 0x0003, 182 mac: 0x0013, 183 }, 184 MapEntry { 185 linux_keycode: 4, 186 xkb: 0x000c, 187 win: 0x0004, 188 mac: 0x0014, 189 }, 190 MapEntry { 191 linux_keycode: 5, 192 xkb: 0x000d, 193 win: 0x0005, 194 mac: 0x0015, 195 }, 196 MapEntry { 197 linux_keycode: 6, 198 xkb: 0x000e, 199 win: 0x0006, 200 mac: 0x0017, 201 }, 202 MapEntry { 203 linux_keycode: 7, 204 xkb: 0x000f, 205 win: 0x0007, 206 mac: 0x0016, 207 }, 208 MapEntry { 209 linux_keycode: 8, 210 xkb: 0x0010, 211 win: 0x0008, 212 mac: 0x001a, 213 }, 214 MapEntry { 215 linux_keycode: 9, 216 xkb: 0x0011, 217 win: 0x0009, 218 mac: 0x001c, 219 }, 220 MapEntry { 221 linux_keycode: 10, 222 xkb: 0x0012, 223 win: 0x000a, 224 mac: 0x0019, 225 }, 226 MapEntry { 227 linux_keycode: 11, 228 xkb: 0x0013, 229 win: 0x000b, 230 mac: 0x001d, 231 }, 232 MapEntry { 233 linux_keycode: 28, 234 xkb: 0x0024, 235 win: 0x001c, 236 mac: 0x0024, 237 }, 238 MapEntry { 239 linux_keycode: 1, 240 xkb: 0x0009, 241 win: 0x0001, 242 mac: 0x0035, 243 }, 244 MapEntry { 245 linux_keycode: 14, 246 xkb: 0x0016, 247 win: 0x000e, 248 mac: 0x0033, 249 }, 250 MapEntry { 251 linux_keycode: 15, 252 xkb: 0x0017, 253 win: 0x000f, 254 mac: 0x0030, 255 }, 256 MapEntry { 257 linux_keycode: 57, 258 xkb: 0x0041, 259 win: 0x0039, 260 mac: 0x0031, 261 }, 262 MapEntry { 263 linux_keycode: 12, 264 xkb: 0x0014, 265 win: 0x000c, 266 mac: 0x001b, 267 }, 268 MapEntry { 269 linux_keycode: 13, 270 xkb: 0x0015, 271 win: 0x000d, 272 mac: 0x0018, 273 }, 274 MapEntry { 275 linux_keycode: 26, 276 xkb: 0x0022, 277 win: 0x001a, 278 mac: 0x0021, 279 }, 280 MapEntry { 281 linux_keycode: 27, 282 xkb: 0x0023, 283 win: 0x001b, 284 mac: 0x001e, 285 }, 286 MapEntry { 287 linux_keycode: 43, 288 xkb: 0x0033, 289 win: 0x002b, 290 mac: 0x002a, 291 }, 292 MapEntry { 293 linux_keycode: 39, 294 xkb: 0x002f, 295 win: 0x0027, 296 mac: 0x0029, 297 }, 298 MapEntry { 299 linux_keycode: 40, 300 xkb: 0x0030, 301 win: 0x0028, 302 mac: 0x0027, 303 }, 304 MapEntry { 305 linux_keycode: 41, 306 xkb: 0x0031, 307 win: 0x0029, 308 mac: 0x0032, 309 }, 310 MapEntry { 311 linux_keycode: 51, 312 xkb: 0x003b, 313 win: 0x0033, 314 mac: 0x002b, 315 }, 316 MapEntry { 317 linux_keycode: 52, 318 xkb: 0x003c, 319 win: 0x0034, 320 mac: 0x002f, 321 }, 322 MapEntry { 323 linux_keycode: 53, 324 xkb: 0x003d, 325 win: 0x0035, 326 mac: 0x002c, 327 }, 328 MapEntry { 329 linux_keycode: 58, 330 xkb: 0x0042, 331 win: 0x003a, 332 mac: 0x0039, 333 }, 334 MapEntry { 335 linux_keycode: 119, 336 xkb: 0x007f, 337 win: 0x0045, 338 mac: 0xffff, 339 }, 340 MapEntry { 341 linux_keycode: 110, 342 xkb: 0x0076, 343 win: 0xe052, 344 mac: 0x0072, 345 }, 346 MapEntry { 347 linux_keycode: 102, 348 xkb: 0x006e, 349 win: 0xe047, 350 mac: 0x0073, 351 }, 352 MapEntry { 353 linux_keycode: 104, 354 xkb: 0x0070, 355 win: 0xe049, 356 mac: 0x0074, 357 }, 358 MapEntry { 359 linux_keycode: 111, 360 xkb: 0x0077, 361 win: 0xe053, 362 mac: 0x0075, 363 }, 364 MapEntry { 365 linux_keycode: 107, 366 xkb: 0x0073, 367 win: 0xe04f, 368 mac: 0x0077, 369 }, 370 MapEntry { 371 linux_keycode: 109, 372 xkb: 0x0075, 373 win: 0xe051, 374 mac: 0x0079, 375 }, 376 MapEntry { 377 linux_keycode: 106, 378 xkb: 0x0072, 379 win: 0xe04d, 380 mac: 0x007c, 381 }, 382 MapEntry { 383 linux_keycode: 105, 384 xkb: 0x0071, 385 win: 0xe04b, 386 mac: 0x007b, 387 }, 388 MapEntry { 389 linux_keycode: 108, 390 xkb: 0x0074, 391 win: 0xe050, 392 mac: 0x007d, 393 }, 394 MapEntry { 395 linux_keycode: 103, 396 xkb: 0x006f, 397 win: 0xe048, 398 mac: 0x007e, 399 }, 400 MapEntry { 401 linux_keycode: 69, 402 xkb: 0x004d, 403 win: 0xe045, 404 mac: 0x0047, 405 }, 406 MapEntry { 407 linux_keycode: 98, 408 xkb: 0x006a, 409 win: 0xe035, 410 mac: 0x004b, 411 }, 412 MapEntry { 413 linux_keycode: 78, 414 xkb: 0x0056, 415 win: 0x004e, 416 mac: 0x0045, 417 }, 418 MapEntry { 419 linux_keycode: 28, 420 xkb: 0x0068, 421 win: 0xe01c, 422 mac: 0x004c, 423 }, 424 MapEntry { 425 linux_keycode: 79, 426 xkb: 0x0057, 427 win: 0x004f, 428 mac: 0x0053, 429 }, 430 MapEntry { 431 linux_keycode: 80, 432 xkb: 0x0058, 433 win: 0x0050, 434 mac: 0x0054, 435 }, 436 MapEntry { 437 linux_keycode: 81, 438 xkb: 0x0059, 439 win: 0x0051, 440 mac: 0x0055, 441 }, 442 MapEntry { 443 linux_keycode: 75, 444 xkb: 0x0053, 445 win: 0x004b, 446 mac: 0x0056, 447 }, 448 MapEntry { 449 linux_keycode: 76, 450 xkb: 0x0054, 451 win: 0x004c, 452 mac: 0x0057, 453 }, 454 MapEntry { 455 linux_keycode: 77, 456 xkb: 0x0055, 457 win: 0x004d, 458 mac: 0x0058, 459 }, 460 MapEntry { 461 linux_keycode: 71, 462 xkb: 0x004f, 463 win: 0x0047, 464 mac: 0x0059, 465 }, 466 MapEntry { 467 linux_keycode: 72, 468 xkb: 0x0050, 469 win: 0x0048, 470 mac: 0x005b, 471 }, 472 MapEntry { 473 linux_keycode: 73, 474 xkb: 0x0051, 475 win: 0x0049, 476 mac: 0x005c, 477 }, 478 MapEntry { 479 linux_keycode: 82, 480 xkb: 0x005a, 481 win: 0x0052, 482 mac: 0x0052, 483 }, 484 MapEntry { 485 linux_keycode: 116, 486 xkb: 0x007c, 487 win: 0xe05e, 488 mac: 0xffff, 489 }, 490 MapEntry { 491 linux_keycode: 121, 492 xkb: 0x0081, 493 win: 0x007e, 494 mac: 0x005f, 495 }, 496 MapEntry { 497 linux_keycode: 29, 498 xkb: 0x0025, 499 win: 0x001d, 500 mac: 0x003b, 501 }, 502 MapEntry { 503 linux_keycode: 42, 504 xkb: 0x0032, 505 win: 0x002a, 506 mac: 0x0038, 507 }, 508 MapEntry { 509 linux_keycode: 56, 510 xkb: 0x0040, 511 win: 0x0038, 512 mac: 0x003a, 513 }, 514 MapEntry { 515 linux_keycode: 125, 516 xkb: 0x0085, 517 win: 0xe05b, 518 mac: 0x0037, 519 }, 520 MapEntry { 521 linux_keycode: 97, 522 xkb: 0x0069, 523 win: 0xe01d, 524 mac: 0x003e, 525 }, 526 MapEntry { 527 linux_keycode: 54, 528 xkb: 0x003e, 529 win: 0x0036, 530 mac: 0x003c, 531 }, 532 MapEntry { 533 linux_keycode: 100, 534 xkb: 0x006c, 535 win: 0xe038, 536 mac: 0x003d, 537 }, 538 MapEntry { 539 linux_keycode: 126, 540 xkb: 0x0086, 541 win: 0xe05c, 542 mac: 0x0036, 543 }, 544 MapEntry { 545 linux_keycode: 55, 546 xkb: 0x003f, 547 win: 0x0037, 548 mac: 0x0043, 549 }, 550 MapEntry { 551 linux_keycode: 83, 552 xkb: 0x005b, 553 win: 0x0053, 554 mac: 0x0041, 555 }, 556 MapEntry { 557 linux_keycode: 74, 558 xkb: 0x0052, 559 win: 0x004a, 560 mac: 0x004e, 561 }, 562 MapEntry { 563 linux_keycode: 59, 564 xkb: 0x0043, 565 win: 0x003b, 566 mac: 0x007a, 567 }, 568 MapEntry { 569 linux_keycode: 60, 570 xkb: 0x0044, 571 win: 0x003c, 572 mac: 0x0078, 573 }, 574 MapEntry { 575 linux_keycode: 61, 576 xkb: 0x0045, 577 win: 0x003d, 578 mac: 0x0063, 579 }, 580 MapEntry { 581 linux_keycode: 62, 582 xkb: 0x0046, 583 win: 0x003e, 584 mac: 0x0076, 585 }, 586 MapEntry { 587 linux_keycode: 63, 588 xkb: 0x0047, 589 win: 0x003f, 590 mac: 0x0060, 591 }, 592 MapEntry { 593 linux_keycode: 64, 594 xkb: 0x0048, 595 win: 0x0040, 596 mac: 0x0061, 597 }, 598 MapEntry { 599 linux_keycode: 65, 600 xkb: 0x0049, 601 win: 0x0041, 602 mac: 0x0062, 603 }, 604 MapEntry { 605 linux_keycode: 66, 606 xkb: 0x004a, 607 win: 0x0042, 608 mac: 0x0064, 609 }, 610 MapEntry { 611 linux_keycode: 67, 612 xkb: 0x004b, 613 win: 0x0043, 614 mac: 0x0065, 615 }, 616 MapEntry { 617 linux_keycode: 68, 618 xkb: 0x004c, 619 win: 0x0044, 620 mac: 0x006d, 621 }, 622 MapEntry { 623 linux_keycode: 87, 624 xkb: 0x005f, 625 win: 0x0057, 626 mac: 0x0067, 627 }, 628 MapEntry { 629 linux_keycode: 88, 630 xkb: 0x0060, 631 win: 0x0058, 632 mac: 0x006f, 633 }, 634 MapEntry { 635 linux_keycode: 117, 636 xkb: 0x007d, 637 win: 0x0059, 638 mac: 0x0051, 639 }, 640 ]; 641