#pragma once #include namespace moon { enum KeyCode : u8 { // Function keys K_F1, K_F2, K_F3, K_F4, K_F5, K_F6, K_F7, K_F8, K_F9, K_F10, K_F11, K_F12, // System keys K_Esc, K_PrtScr, K_Pause, K_Super, K_Menu, // Modifier keys K_LeftShift, K_RightShift, K_LeftAlt, K_RightAlt, // or AltGr on some keyboards K_LeftControl, K_RightControl, // Navigation keys K_Tab, K_Home, K_End, K_PageUp, K_PageDown, K_RightArrow, K_LeftArrow, K_UpArrow, K_DownArrow, // Editing keys K_Backspace, K_Enter, K_Insert, K_Delete, K_KeypadEnter, // Lock keys K_ScrollLock, K_CapsLock, K_NumLock, // Keypad keys K_Keypad0, K_Keypad1, K_Keypad2, K_Keypad3, K_Keypad4, K_Keypad5, K_Keypad6, K_Keypad7, K_Keypad8, K_Keypad9, K_KeypadDot, K_KeypadPlus, K_KeypadMinus, K_KeypadMul, K_KeypadDiv, // Character keys (depending on keyboard layout), examples in US QWERTY K_CH00, // ` K_CH01, // 1 K_CH02, // 2 K_CH03, // 3 K_CH04, // 4 K_CH05, // 5 K_CH06, // 6 K_CH07, // 7 K_CH08, // 8 K_CH09, // 9 K_CH10, // 0 K_CH11, // - K_CH12, // = K_CH13, // Q K_CH14, // W K_CH15, // E K_CH16, // R K_CH17, // T K_CH18, // Y K_CH19, // U K_CH20, // I K_CH21, // O K_CH22, // P K_CH23, // [ K_CH24, // ] K_CH25, // A K_CH26, // S K_CH27, // D K_CH28, // F K_CH29, // G K_CH30, // H K_CH31, // J K_CH32, // K K_CH33, // L K_CH34, // ; K_CH35, // ' K_CH36, // # K_CH37, // Backslash K_CH38, // Z K_CH39, // X K_CH40, // C K_CH41, // V K_CH42, // B K_CH43, // N K_CH44, // M K_CH45, // , K_CH46, // . K_CH47, // / K_CH48, // Space // Unknown key K_Unknown, }; struct [[gnu::packed]] KeyboardPacket { u8 key; bool released; }; static_assert(sizeof(KeyboardPacket) == 2); }