reform

MNT Reform: Open Source Portable Computer
Log (Feed) | Files | Refs (Tags) | README

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