keyboard.h (3914B)
1 /* 2 MNT Reform 2.0 Keyboard Firmware 3 See keyboard.c for Copyright 4 SPDX-License-Identifier: MIT 5 */ 6 7 #ifndef _KEYBOARD_H_ 8 #define _KEYBOARD_H_ 9 10 #include <avr/io.h> 11 #include <avr/wdt.h> 12 #include <avr/power.h> 13 #include <avr/interrupt.h> 14 #include <stdbool.h> 15 #include <string.h> 16 17 #include "Config/LUFAConfig.h" 18 #include "descriptors.h" 19 #include <LUFA/Drivers/USB/USB.h> 20 #include <LUFA/Platform/Platform.h> 21 22 // some GPIO macros 23 #define output_low(port,pin) port &= ~(1<<pin) 24 #define output_high(port,pin) port |= (1<<pin) 25 #define set_input(portdir,pin) portdir &= ~(1<<pin) 26 #define set_output(portdir,pin) portdir |= (1<<pin) 27 28 // Reuse existing key codes 29 #define HID_KEYBOARD_SC_MEDIA_BRIGHTNESS_DOWN HID_KEYBOARD_SC_MEDIA_RELOAD 30 #define HID_KEYBOARD_SC_MEDIA_BRIGHTNESS_UP HID_KEYBOARD_SC_MEDIA_CALCULATOR 31 32 // Top row, left to right 33 #define MATRIX_DEFAULT_ROW_1 \ 34 KEY_ESCAPE,\ 35 KEY_F1,\ 36 KEY_F2,\ 37 KEY_F3,\ 38 KEY_F4,\ 39 KEY_F5,\ 40 KEY_F6,\ 41 KEY_F7,\ 42 KEY_F8,\ 43 KEY_F9,\ 44 KEY_F10,\ 45 KEY_F11,\ 46 KEY_F12,\ 47 KEY_CIRCLE 48 49 // Second row 50 #define MATRIX_DEFAULT_ROW_2 \ 51 KEY_GRAVE_ACCENT_AND_TILDE,\ 52 KEY_1,\ 53 KEY_2,\ 54 KEY_3,\ 55 KEY_4,\ 56 KEY_5,\ 57 KEY_6,\ 58 KEY_7,\ 59 KEY_8,\ 60 KEY_9,\ 61 KEY_0,\ 62 KEY_MINUS_AND_UNDERSCORE,\ 63 KEY_EQUAL_AND_PLUS,\ 64 KEY_BACKSPACE 65 66 // Third row 67 #define MATRIX_DEFAULT_ROW_3 \ 68 KEY_TAB,\ 69 KEY_Q,\ 70 KEY_W,\ 71 KEY_E,\ 72 KEY_R,\ 73 KEY_T,\ 74 KEY_Y,\ 75 KEY_U,\ 76 KEY_I,\ 77 KEY_O,\ 78 KEY_P,\ 79 KEY_OPENING_BRACKET_AND_OPENING_BRACE,\ 80 KEY_CLOSING_BRACKET_AND_CLOSING_BRACE,\ 81 KEY_BACKSLASH_AND_PIPE 82 83 // Fourth row 84 #define MATRIX_DEFAULT_ROW_4 \ 85 HID_KEYBOARD_SC_LEFT_CONTROL,\ 86 HID_KEYBOARD_SC_APPLICATION,\ 87 KEY_A,\ 88 KEY_S,\ 89 KEY_D,\ 90 KEY_F,\ 91 KEY_G,\ 92 KEY_H,\ 93 KEY_J,\ 94 KEY_K,\ 95 KEY_L,\ 96 KEY_SEMICOLON_AND_COLON,\ 97 KEY_APOSTROPHE_AND_QUOTE,\ 98 KEY_ENTER 99 100 // Fifth row 101 #define MATRIX_DEFAULT_ROW_5 \ 102 HID_KEYBOARD_SC_LEFT_SHIFT,\ 103 HID_KEYBOARD_SC_NON_US_BACKSLASH_AND_PIPE,\ 104 KEY_Z,\ 105 KEY_X,\ 106 KEY_C,\ 107 KEY_V,\ 108 KEY_B,\ 109 KEY_N,\ 110 KEY_M,\ 111 HID_KEYBOARD_SC_COMMA_AND_LESS_THAN_SIGN,\ 112 HID_KEYBOARD_SC_DOT_AND_GREATER_THAN_SIGN,\ 113 KEY_SLASH_AND_QUESTION_MARK,\ 114 HID_KEYBOARD_SC_UP_ARROW,\ 115 HID_KEYBOARD_SC_RIGHT_SHIFT 116 117 // Sixth row 118 #define MATRIX_DEFAULT_ROW_6 \ 119 HID_KEYBOARD_SC_EXECUTE,\ 120 HID_KEYBOARD_SC_LEFT_GUI,\ 121 HID_KEYBOARD_SC_RIGHT_CONTROL,\ 122 KEY_SPACE,\ 123 HID_KEYBOARD_SC_LEFT_ALT,\ 124 HID_KEYBOARD_SC_RIGHT_ALT,\ 125 KEY_SPACE,\ 126 HID_KEYBOARD_SC_PAGE_UP,\ 127 HID_KEYBOARD_SC_PAGE_DOWN,\ 128 HID_KEYBOARD_SC_LEFT_ARROW,\ 129 HID_KEYBOARD_SC_DOWN_ARROW,\ 130 HID_KEYBOARD_SC_RIGHT_ARROW 131 132 // MediaController USB Report 133 typedef struct 134 { 135 unsigned BrightnessDown : 1; 136 unsigned BrightnessUp : 1; 137 unsigned PreviousTrack : 1; 138 unsigned PlayPause : 1; 139 unsigned NextTrack : 1; 140 unsigned Mute : 1; 141 unsigned VolumeDown : 1; 142 unsigned VolumeUp : 1; 143 } ATTR_PACKED USB_MediaReport_Data_t; 144 145 void setup_hardware(void); 146 void reset_keyboard_state(void); 147 148 // LUFA USB handlers 149 void EVENT_USB_Device_Connect(void); 150 void EVENT_USB_Device_Disconnect(void); 151 void EVENT_USB_Device_ConfigurationChanged(void); 152 void EVENT_USB_Device_ControlRequest(void); 153 void EVENT_USB_Device_StartOfFrame(void); 154 155 bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, 156 uint8_t* const ReportID, 157 const uint8_t ReportType, 158 void* ReportData, 159 uint16_t* const ReportSize); 160 161 void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, 162 const uint8_t ReportID, 163 const uint8_t ReportType, 164 const void* ReportData, 165 const uint16_t ReportSize); 166 167 #endif