~ruther/qmk_firmware

ac333016eb5aeb555357751c8d05d62abe944daa — jels 3 years ago a809435
Add ATmega32u2 Support to HHKB (#17298)

A keyboards/hhkb/ansi/32u2/rules.mk => keyboards/hhkb/ansi/32u2/rules.mk +5 -0
@@ 0,0 1,5 @@
# MCU name
MCU = atmega32u2

CONSOLE_ENABLE = no   # Console for debug
COMMAND_ENABLE = no   # Commands for debug and configuration

M keyboards/hhkb/ansi/hhkb_avr.h => keyboards/hhkb/ansi/hhkb_avr.h +54 -0
@@ 78,6 78,60 @@ static inline void KEY_SELECT(uint8_t ROW, uint8_t COL)

}

#elif defined(__AVR_ATmega32U2__)
/*
 * For TMK HHKB alt controller(ATMega32U4)
 *
 * row:     PB0-2
 * col:     PB3-5,6
 * key:     PD3(pull-uped)
 * prev:    PB7
 * power:   PD4(L:off/H:on)
 * row-ext: PC6,7 for HHKB JP(active low)
 */
static inline void KEY_ENABLE(void) { (PORTB &= ~(1<<6)); }
static inline void KEY_UNABLE(void) { (PORTB |=  (1<<6)); }
static inline bool KEY_STATE(void) { return (PIND & (1<<3)); }
static inline void KEY_PREV_ON(void) { (PORTB |=  (1<<7)); }
static inline void KEY_PREV_OFF(void) { (PORTB &= ~(1<<7)); }
#ifdef HHKB_POWER_SAVING
static inline void KEY_POWER_ON(void) {
    DDRB = 0xFF; PORTB = 0x40;          // change pins output
    DDRD |= (1<<4); PORTD |= (1<<4);    // MOS FET switch on
    /* Without this wait you will miss or get false key events. */
    _delay_ms(5);                       // wait for powering up
}
static inline void KEY_POWER_OFF(void) {
    /* input with pull-up consumes less than without it when pin is open. */
    DDRB = 0x00; PORTB = 0xFF;          // change pins input with pull-up
    DDRD |= (1<<4); PORTD &= ~(1<<4);   // MOS FET switch off
}
static inline bool KEY_POWER_STATE(void) { return PORTD & (1<<4); }
#else
static inline void KEY_POWER_ON(void) {}
static inline void KEY_POWER_OFF(void) {}
static inline bool KEY_POWER_STATE(void) { return true; }
#endif
static inline void KEY_INIT(void)
{
    /* row,col,prev: output */
    DDRB  = 0xFF;
    PORTB = 0x40;   // unable
    /* key: input with pull-up */
    DDRD  &= ~0x80;
    PORTD |=  0x80;

    KEY_UNABLE();
    KEY_PREV_OFF();

    KEY_POWER_OFF();
}
static inline void KEY_SELECT(uint8_t ROW, uint8_t COL)
{
    PORTB = (PORTB & 0xC0) | (((COL) & 0x07)<<3) | ((ROW) & 0x07);

}


#elif defined(__AVR_AT90USB1286__)
/*

M keyboards/hhkb/ansi/rules.mk => keyboards/hhkb/ansi/rules.mk +2 -2
@@ 14,9 14,9 @@ CONSOLE_ENABLE = yes   # Console for debug
COMMAND_ENABLE = yes   # Commands for debug and configuration
CUSTOM_MATRIX = yes    # Custom matrix file for the HHKB
NKRO_ENABLE = no            # Enable N-Key Rollover
# BACKLIGHT_ENABLE = yes  # Enable keyboard backlight functionality
BACKLIGHT_ENABLE = no  # Enable keyboard backlight functionality

# HHKB_RN42_ENABLE = yes  # Enable support for hasu's BT alt controller -- code borrowed from tmk source tree.
HHKB_RN42_ENABLE = no  # Enable support for hasu's BT alt controller -- code borrowed from tmk source tree.

# Either uncomment the HHKB_RN42_ENABLE line above, or run make enabling the
# feature. Be sure to clean any existing build before trying to enable rn42