Files
hkkb-layout-web/internal/hhkb/scancode.go
2026-05-27 18:50:35 +09:00

40 lines
1.7 KiB
Go

package hhkb
import "fmt"
// scancodeName maps USB HID keyboard usage ids to short labels. 0x01 is the
// HHKB Fn key, which the firmware handles internally rather than reporting.
var scancodeName = map[byte]string{
0x00: "--", 0x01: "Fn",
0x04: "A", 0x05: "B", 0x06: "C", 0x07: "D", 0x08: "E", 0x09: "F",
0x0a: "G", 0x0b: "H", 0x0c: "I", 0x0d: "J", 0x0e: "K", 0x0f: "L",
0x10: "M", 0x11: "N", 0x12: "O", 0x13: "P", 0x14: "Q", 0x15: "R",
0x16: "S", 0x17: "T", 0x18: "U", 0x19: "V", 0x1a: "W", 0x1b: "X",
0x1c: "Y", 0x1d: "Z",
0x1e: "1", 0x1f: "2", 0x20: "3", 0x21: "4", 0x22: "5",
0x23: "6", 0x24: "7", 0x25: "8", 0x26: "9", 0x27: "0",
0x28: "Enter", 0x29: "Esc", 0x2a: "Bksp", 0x2b: "Tab", 0x2c: "Space",
0x2d: "-", 0x2e: "=", 0x2f: "[", 0x30: "]", 0x31: "\\",
0x33: ";", 0x34: "'", 0x35: "`", 0x36: ",", 0x37: ".", 0x38: "/",
0x39: "Caps",
0x3a: "F1", 0x3b: "F2", 0x3c: "F3", 0x3d: "F4", 0x3e: "F5", 0x3f: "F6",
0x40: "F7", 0x41: "F8", 0x42: "F9", 0x43: "F10", 0x44: "F11", 0x45: "F12",
0x46: "PrtSc", 0x47: "ScrLk", 0x48: "Pause",
0x49: "Ins", 0x4a: "Home", 0x4b: "PgUp", 0x4c: "Del", 0x4d: "End", 0x4e: "PgDn",
0x4f: "Right", 0x50: "Left", 0x51: "Down", 0x52: "Up",
0xe0: "LCtrl", 0xe1: "LShift", 0xe2: "LAlt", 0xe3: "LGUI",
0xe4: "RCtrl", 0xe5: "RShift", 0xe6: "RAlt", 0xe7: "RGUI",
0x53: "Numlk", 0x54: "KP/", 0x55: "KP*", 0x56: "KP-", 0x57: "KP+", 0x58: "KPEnt",
0x66: "Power",
// HHKB media keys (sent via the consumer interface; values are HHKB-internal).
0xe8: "Vol-", 0xe9: "Vol+", 0xea: "Mute", 0xeb: "Play",
}
// KeyName returns a label for a scancode, falling back to hex for unknowns.
func KeyName(code byte) string {
if name, ok := scancodeName[code]; ok {
return name
}
return fmt.Sprintf("0x%02x", code)
}