// Autogenerated C header file for HID Keyboard
#ifndef _JACDAC_SPEC_HID_KEYBOARD_H
#define _JACDAC_SPEC_HID_KEYBOARD_H 1

#define JD_SERVICE_CLASS_HID_KEYBOARD  0x18b05b6a

// enum Selector (uint16_t)
#define JD_HID_KEYBOARD_SELECTOR_NONE 0x0
#define JD_HID_KEYBOARD_SELECTOR_ERROR_ROLL_OVER 0x1
#define JD_HID_KEYBOARD_SELECTOR_POST_FAIL 0x2
#define JD_HID_KEYBOARD_SELECTOR_ERROR_UNDEFINED 0x3
#define JD_HID_KEYBOARD_SELECTOR_A 0x4
#define JD_HID_KEYBOARD_SELECTOR_B 0x5
#define JD_HID_KEYBOARD_SELECTOR_C 0x6
#define JD_HID_KEYBOARD_SELECTOR_D 0x7
#define JD_HID_KEYBOARD_SELECTOR_E 0x8
#define JD_HID_KEYBOARD_SELECTOR_F 0x9
#define JD_HID_KEYBOARD_SELECTOR_G 0xa
#define JD_HID_KEYBOARD_SELECTOR_H 0xb
#define JD_HID_KEYBOARD_SELECTOR_I 0xc
#define JD_HID_KEYBOARD_SELECTOR_J 0xd
#define JD_HID_KEYBOARD_SELECTOR_K 0xe
#define JD_HID_KEYBOARD_SELECTOR_L 0xf
#define JD_HID_KEYBOARD_SELECTOR_M 0x10
#define JD_HID_KEYBOARD_SELECTOR_N 0x11
#define JD_HID_KEYBOARD_SELECTOR_O 0x12
#define JD_HID_KEYBOARD_SELECTOR_P 0x13
#define JD_HID_KEYBOARD_SELECTOR_Q 0x14
#define JD_HID_KEYBOARD_SELECTOR_R 0x15
#define JD_HID_KEYBOARD_SELECTOR_S 0x16
#define JD_HID_KEYBOARD_SELECTOR_T 0x17
#define JD_HID_KEYBOARD_SELECTOR_U 0x18
#define JD_HID_KEYBOARD_SELECTOR_V 0x19
#define JD_HID_KEYBOARD_SELECTOR_W 0x1a
#define JD_HID_KEYBOARD_SELECTOR_X 0x1b
#define JD_HID_KEYBOARD_SELECTOR_Y 0x1c
#define JD_HID_KEYBOARD_SELECTOR_Z 0x1d
#define JD_HID_KEYBOARD_SELECTOR__1 0x1e
#define JD_HID_KEYBOARD_SELECTOR__2 0x1f
#define JD_HID_KEYBOARD_SELECTOR__3 0x20
#define JD_HID_KEYBOARD_SELECTOR__4 0x21
#define JD_HID_KEYBOARD_SELECTOR__5 0x22
#define JD_HID_KEYBOARD_SELECTOR__6 0x23
#define JD_HID_KEYBOARD_SELECTOR__7 0x24
#define JD_HID_KEYBOARD_SELECTOR__8 0x25
#define JD_HID_KEYBOARD_SELECTOR__9 0x26
#define JD_HID_KEYBOARD_SELECTOR__0 0x27
#define JD_HID_KEYBOARD_SELECTOR_RETURN 0x28
#define JD_HID_KEYBOARD_SELECTOR_ESCAPE 0x29
#define JD_HID_KEYBOARD_SELECTOR_BACKSPACE 0x2a
#define JD_HID_KEYBOARD_SELECTOR_TAB 0x2b
#define JD_HID_KEYBOARD_SELECTOR_SPACEBAR 0x2c
#define JD_HID_KEYBOARD_SELECTOR_MINUS 0x2d
#define JD_HID_KEYBOARD_SELECTOR_EQUALS 0x2e
#define JD_HID_KEYBOARD_SELECTOR_LEFT_SQUARE_BRACKET 0x2f
#define JD_HID_KEYBOARD_SELECTOR_RIGHT_SQUARE_BRACKET 0x30
#define JD_HID_KEYBOARD_SELECTOR_BACKSLASH 0x31
#define JD_HID_KEYBOARD_SELECTOR_NON_US_HASH 0x32
#define JD_HID_KEYBOARD_SELECTOR_SEMICOLON 0x33
#define JD_HID_KEYBOARD_SELECTOR_QUOTE 0x34
#define JD_HID_KEYBOARD_SELECTOR_GRAVE_ACCENT 0x35
#define JD_HID_KEYBOARD_SELECTOR_COMMA 0x36
#define JD_HID_KEYBOARD_SELECTOR_PERIOD 0x37
#define JD_HID_KEYBOARD_SELECTOR_SLASH 0x38
#define JD_HID_KEYBOARD_SELECTOR_CAPS_LOCK 0x39
#define JD_HID_KEYBOARD_SELECTOR_F1 0x3a
#define JD_HID_KEYBOARD_SELECTOR_F2 0x3b
#define JD_HID_KEYBOARD_SELECTOR_F3 0x3c
#define JD_HID_KEYBOARD_SELECTOR_F4 0x3d
#define JD_HID_KEYBOARD_SELECTOR_F5 0x3e
#define JD_HID_KEYBOARD_SELECTOR_F6 0x3f
#define JD_HID_KEYBOARD_SELECTOR_F7 0x40
#define JD_HID_KEYBOARD_SELECTOR_F8 0x41
#define JD_HID_KEYBOARD_SELECTOR_F9 0x42
#define JD_HID_KEYBOARD_SELECTOR_F10 0x43
#define JD_HID_KEYBOARD_SELECTOR_F11 0x44
#define JD_HID_KEYBOARD_SELECTOR_F12 0x45
#define JD_HID_KEYBOARD_SELECTOR_PRINT_SCREEN 0x46
#define JD_HID_KEYBOARD_SELECTOR_SCROLL_LOCK 0x47
#define JD_HID_KEYBOARD_SELECTOR_PAUSE 0x48
#define JD_HID_KEYBOARD_SELECTOR_INSERT 0x49
#define JD_HID_KEYBOARD_SELECTOR_HOME 0x4a
#define JD_HID_KEYBOARD_SELECTOR_PAGE_UP 0x4b
#define JD_HID_KEYBOARD_SELECTOR_DELETE 0x4c
#define JD_HID_KEYBOARD_SELECTOR_END 0x4d
#define JD_HID_KEYBOARD_SELECTOR_PAGE_DOWN 0x4e
#define JD_HID_KEYBOARD_SELECTOR_RIGHT_ARROW 0x4f
#define JD_HID_KEYBOARD_SELECTOR_LEFT_ARROW 0x50
#define JD_HID_KEYBOARD_SELECTOR_DOWN_ARROW 0x51
#define JD_HID_KEYBOARD_SELECTOR_UP_ARROW 0x52
#define JD_HID_KEYBOARD_SELECTOR_KEYPAD_NUM_LOCK 0x53
#define JD_HID_KEYBOARD_SELECTOR_KEYPAD_DIVIDE 0x54
#define JD_HID_KEYBOARD_SELECTOR_KEYPAD_MULTIPLY 0x55
#define JD_HID_KEYBOARD_SELECTOR_KEYPAD_ADD 0x56
#define JD_HID_KEYBOARD_SELECTOR_KEYPAD_SUBTRACE 0x57
#define JD_HID_KEYBOARD_SELECTOR_KEYPAD_RETURN 0x58
#define JD_HID_KEYBOARD_SELECTOR_KEYPAD1 0x59
#define JD_HID_KEYBOARD_SELECTOR_KEYPAD2 0x5a
#define JD_HID_KEYBOARD_SELECTOR_KEYPAD3 0x5b
#define JD_HID_KEYBOARD_SELECTOR_KEYPAD4 0x5c
#define JD_HID_KEYBOARD_SELECTOR_KEYPAD5 0x5d
#define JD_HID_KEYBOARD_SELECTOR_KEYPAD6 0x5e
#define JD_HID_KEYBOARD_SELECTOR_KEYPAD7 0x5f
#define JD_HID_KEYBOARD_SELECTOR_KEYPAD8 0x60
#define JD_HID_KEYBOARD_SELECTOR_KEYPAD9 0x61
#define JD_HID_KEYBOARD_SELECTOR_KEYPAD0 0x62
#define JD_HID_KEYBOARD_SELECTOR_KEYPAD_DECIMAL_POINT 0x63
#define JD_HID_KEYBOARD_SELECTOR_NON_US_BACKSLASH 0x64
#define JD_HID_KEYBOARD_SELECTOR_APPLICATION 0x65
#define JD_HID_KEYBOARD_SELECTOR_POWER 0x66
#define JD_HID_KEYBOARD_SELECTOR_KEYPAD_EQUALS 0x67
#define JD_HID_KEYBOARD_SELECTOR_F13 0x68
#define JD_HID_KEYBOARD_SELECTOR_F14 0x69
#define JD_HID_KEYBOARD_SELECTOR_F15 0x6a
#define JD_HID_KEYBOARD_SELECTOR_F16 0x6b
#define JD_HID_KEYBOARD_SELECTOR_F17 0x6c
#define JD_HID_KEYBOARD_SELECTOR_F18 0x6d
#define JD_HID_KEYBOARD_SELECTOR_F19 0x6e
#define JD_HID_KEYBOARD_SELECTOR_F20 0x6f
#define JD_HID_KEYBOARD_SELECTOR_F21 0x70
#define JD_HID_KEYBOARD_SELECTOR_F22 0x71
#define JD_HID_KEYBOARD_SELECTOR_F23 0x72
#define JD_HID_KEYBOARD_SELECTOR_F24 0x73
#define JD_HID_KEYBOARD_SELECTOR_EXECUTE 0x74
#define JD_HID_KEYBOARD_SELECTOR_HELP 0x75
#define JD_HID_KEYBOARD_SELECTOR_MENU 0x76
#define JD_HID_KEYBOARD_SELECTOR_SELECT 0x77
#define JD_HID_KEYBOARD_SELECTOR_STOP 0x78
#define JD_HID_KEYBOARD_SELECTOR_AGAIN 0x79
#define JD_HID_KEYBOARD_SELECTOR_UNDO 0x7a
#define JD_HID_KEYBOARD_SELECTOR_CUT 0x7b
#define JD_HID_KEYBOARD_SELECTOR_COPY 0x7c
#define JD_HID_KEYBOARD_SELECTOR_PASTE 0x7d
#define JD_HID_KEYBOARD_SELECTOR_FIND 0x7e
#define JD_HID_KEYBOARD_SELECTOR_MUTE 0x7f
#define JD_HID_KEYBOARD_SELECTOR_VOLUME_UP 0x80
#define JD_HID_KEYBOARD_SELECTOR_VOLUME_DOWN 0x81

// enum Modifiers (uint8_t)
#define JD_HID_KEYBOARD_MODIFIERS_NONE 0x0
#define JD_HID_KEYBOARD_MODIFIERS_LEFT_CONTROL 0x1
#define JD_HID_KEYBOARD_MODIFIERS_LEFT_SHIFT 0x2
#define JD_HID_KEYBOARD_MODIFIERS_LEFT_ALT 0x4
#define JD_HID_KEYBOARD_MODIFIERS_LEFT_GUI 0x8
#define JD_HID_KEYBOARD_MODIFIERS_RIGHT_CONTROL 0x10
#define JD_HID_KEYBOARD_MODIFIERS_RIGHT_SHIFT 0x20
#define JD_HID_KEYBOARD_MODIFIERS_RIGHT_ALT 0x40
#define JD_HID_KEYBOARD_MODIFIERS_RIGHT_GUI 0x80

// enum Action (uint8_t)
#define JD_HID_KEYBOARD_ACTION_PRESS 0x0
#define JD_HID_KEYBOARD_ACTION_UP 0x1
#define JD_HID_KEYBOARD_ACTION_DOWN 0x2

/**
 * Presses a key or a sequence of keys down.
 */
#define JD_HID_KEYBOARD_CMD_KEY 0x80
typedef struct jd_hid_keyboard_key {
    uint16_t selector;  // Selector
    uint8_t modifiers;  // Modifiers
    uint8_t action;  // Action
} jd_hid_keyboard_key_t;


/**
 * No args. Clears all pressed keys.
 */
#define JD_HID_KEYBOARD_CMD_CLEAR 0x81

#endif
