diff options
| -rw-r--r-- | keyboards/atreus/Makefile | 1 | ||||
| -rw-r--r-- | keyboards/lets_split/Makefile | 3 | ||||
| -rw-r--r-- | keyboards/lets_split/config.h | 6 | ||||
| -rw-r--r-- | keyboards/lets_split/keymaps/default/keymap.c | 200 | ||||
| -rw-r--r-- | keyboards/lets_split/lets_split.c | 26 | ||||
| -rw-r--r-- | keyboards/lets_split/lets_split.h | 8 | ||||
| -rw-r--r-- | quantum/quantum.c | 2 | ||||
| -rw-r--r-- | tmk_core/common/avr/bootloader.c | 54 | 
8 files changed, 241 insertions, 59 deletions
| diff --git a/keyboards/atreus/Makefile b/keyboards/atreus/Makefile index 72b694faac..95ee1d4d7b 100644 --- a/keyboards/atreus/Makefile +++ b/keyboards/atreus/Makefile @@ -5,6 +5,7 @@ ifdef TEENSY2      ATRUES_UPLOAD_COMMAND = teensy_loader_cli -w -mmcu=$(MCU) $(TARGET).hex  else      OPT_DEFS += -DATREUS_ASTAR +    OPT_DEFS += -DCATERINA_BOOTLOADER      ATRUES_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \                              avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB)  endif diff --git a/keyboards/lets_split/Makefile b/keyboards/lets_split/Makefile index d8e283896e..b9f07636be 100644 --- a/keyboards/lets_split/Makefile +++ b/keyboards/lets_split/Makefile @@ -1,6 +1,7 @@  SRC += matrix.c \  	   i2c.c \ -	   split_util.c +	   split_util.c \ +	   serial.c  # MCU name  #MCU = at90usb1287 diff --git a/keyboards/lets_split/config.h b/keyboards/lets_split/config.h index 5937ca44e2..6f90997ab4 100644 --- a/keyboards/lets_split/config.h +++ b/keyboards/lets_split/config.h @@ -37,7 +37,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #define MATRIX_ROW_PINS { B5, B4, E6, D7 }  #define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3 } -#define USE_I2C +#define CATERINA_BOOTLOADER + +// #define USE_I2C  // #define EE_HANDS @@ -51,7 +53,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  //#define MATRIX_HAS_GHOST  /* number of backlight levels */ -#define BACKLIGHT_LEVELS 3 +// #define BACKLIGHT_LEVELS 3  /* Set 0 if debouncing isn't needed */  #define DEBOUNCING_DELAY 5 diff --git a/keyboards/lets_split/keymaps/default/keymap.c b/keyboards/lets_split/keymaps/default/keymap.c index 01e3593c22..0d2d94b672 100644 --- a/keyboards/lets_split/keymaps/default/keymap.c +++ b/keyboards/lets_split/keymaps/default/keymap.c @@ -1,11 +1,27 @@  #include "lets_split.h"  #include "action_layer.h" +#include "eeconfig.h" -#define BASE 0 +extern keymap_config_t keymap_config; -enum preonic_keycodes { -  KC_IDK = SAFE_RANGE, -  PM_RESET +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QWERTY 0 +#define _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _ADJUST 16 + +enum custom_keycodes { +  QWERTY = SAFE_RANGE, +  COLEMAK, +  DVORAK, +  LOWER, +  RAISE, +  ADJUST,  };  // Fillers to make layering more clear @@ -14,29 +30,185 @@ enum preonic_keycodes {  const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[BASE] = KEYMAP( -  KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,        KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC, \ -  KC_ESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,        KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, \ -  KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,        KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT, \ -  KC_IDK,  KC_LCTL, KC_LALT, KC_LGUI, PM_RESET,KC_SPC,      KC_SPC,  PM_RESET,KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT \ +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc  |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  |  "   | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt  | GUI  |Lower |Space |Space |Raise | Left | Down |  Up  |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = KEYMAP( \ +  KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC, \ +  KC_ESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, \ +  KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT , \ +  ADJUST,  KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT \ +), + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | Tab  |   Q  |   W  |   F  |   P  |   G  |   J  |   L  |   U  |   Y  |   ;  | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc  |   A  |   R  |   S  |   T  |   D  |   H  |   N  |   E  |   I  |   O  |  "   | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift|   Z  |   X  |   C  |   V  |   B  |   K  |   M  |   ,  |   .  |   /  |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt  | GUI  |Lower |Space |Space |Raise | Left | Down |  Up  |Right | + * `-----------------------------------------------------------------------------------' + */ +[_COLEMAK] = KEYMAP( \ +  KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_BSPC, \ +  KC_ESC,  KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT, \ +  KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT , \ +  ADJUST,  KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT \ +), + +/* Dvorak + * ,-----------------------------------------------------------------------------------. + * | Tab  |   "  |   ,  |   .  |   P  |   Y  |   F  |   G  |   C  |   R  |   L  | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc  |   A  |   O  |   E  |   U  |   I  |   D  |   H  |   T  |   N  |   S  |  /   | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift|   ;  |   Q  |   J  |   K  |   X  |   B  |   M  |   W  |   V  |   Z  |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt  | GUI  |Lower |Space |Space |Raise | Left | Down |  Up  |Right | + * `-----------------------------------------------------------------------------------' + */ +[_DVORAK] = KEYMAP( \ +  KC_TAB,  KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_BSPC, \ +  KC_ESC,  KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_SLSH, \ +  KC_LSFT, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    KC_ENT , \ +  ADJUST,  KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT \ +), + +/* Lower + * ,-----------------------------------------------------------------------------------. + * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |     |    \  |  |   | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |ISO ~ |ISO | |      |      |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = KEYMAP( \ +  KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \ +  KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ +  _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \ +  _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Raise + * ,-----------------------------------------------------------------------------------. + * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   -  |   =  |   [  |   ]  |  \   | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |ISO # |ISO / |      |      |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = KEYMAP( \ +  KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC, \ +  KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS, \ +  _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_NUHS, KC_NUBS, _______, _______, _______, \ +  _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * |      | Reset|      |      |      |      |      |      |      |      |      |  Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * |      |      |      |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|      |      | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * |      |      |      |      |      |      |      |      |      |      |      |      | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |      |      |      |      |      |             |      |      |      |      |      | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] =  KEYMAP( \ +  _______, RESET,   _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \ +  _______, _______, _______, AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, QWERTY,  COLEMAK, DVORAK,  _______, _______, \ +  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ +  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \  ) +  }; +#ifdef AUDIO_ENABLE +float tone_qwerty[][2]     = SONG(QWERTY_SOUND); +float tone_dvorak[][2]     = SONG(DVORAK_SOUND); +float tone_colemak[][2]    = SONG(COLEMAK_SOUND); +#endif + +void persistant_default_layer_set(uint16_t default_layer) { +  eeconfig_update_default_layer(default_layer); +  default_layer_set(default_layer); +} +  bool process_record_user(uint16_t keycode, keyrecord_t *record) {    switch (keycode) { -    case KC_IDK: +    case QWERTY: +      if (record->event.pressed) { +        #ifdef AUDIO_ENABLE +          PLAY_NOTE_ARRAY(tone_qwerty, false, 0); +        #endif +        persistant_default_layer_set(1UL<<_QWERTY); +      } +      return false; +      break; +    case COLEMAK: +      if (record->event.pressed) { +        #ifdef AUDIO_ENABLE +          PLAY_NOTE_ARRAY(tone_colemak, false, 0); +        #endif +        persistant_default_layer_set(1UL<<_COLEMAK); +      } +      return false; +      break; +    case DVORAK: +      if (record->event.pressed) { +        #ifdef AUDIO_ENABLE +          PLAY_NOTE_ARRAY(tone_dvorak, false, 0); +        #endif +        persistant_default_layer_set(1UL<<_DVORAK); +      } +      return false; +      break; +    case LOWER: +      if (record->event.pressed) { +        layer_on(_LOWER); +        update_tri_layer(_LOWER, _RAISE, _ADJUST); +      } else { +        layer_off(_LOWER); +        update_tri_layer(_LOWER, _RAISE, _ADJUST); +      } +      return false; +      break; +    case RAISE:        if (record->event.pressed) { -        SEND_STRING("IDK. "); +        layer_on(_RAISE); +        update_tri_layer(_LOWER, _RAISE, _ADJUST); +      } else { +        layer_off(_RAISE); +        update_tri_layer(_LOWER, _RAISE, _ADJUST);        }        return false;        break; -    case PM_RESET: +    case ADJUST:        if (record->event.pressed) { -        promicro_bootloader_jmp(true); +        layer_on(_ADJUST); +      } else { +        layer_off(_ADJUST);        }        return false;        break;    }    return true; -};
\ No newline at end of file +}
\ No newline at end of file diff --git a/keyboards/lets_split/lets_split.c b/keyboards/lets_split/lets_split.c index 1859dc20a7..574c116a75 100644 --- a/keyboards/lets_split/lets_split.c +++ b/keyboards/lets_split/lets_split.c @@ -23,26 +23,8 @@ void matrix_init_kb(void) {  	matrix_init_user();  }; -void promicro_bootloader_jmp(bool program) { - -    #ifdef AUDIO_ENABLE -        PLAY_NOTE_ARRAY(tone_goodbye, false, 0); -        _delay_ms(150); -        stop_all_notes(); -    #endif -     -    uint16_t *const bootKeyPtr = (uint16_t *)0x0800; - -    // Value used by Caterina bootloader use to determine whether to run the -    // sketch or the bootloader programmer. -    uint16_t bootKey = program ? 0x7777 : 0; - -    *bootKeyPtr = bootKey; - -    // setup watchdog timeout -    wdt_enable(WDTO_60MS); - -    while(1) {} // wait for watchdog timer to trigger +void shutdown_user(void) { +    PLAY_NOTE_ARRAY(tone_goodbye, false, 0); +    _delay_ms(150); +    stop_all_notes();  } - - diff --git a/keyboards/lets_split/lets_split.h b/keyboards/lets_split/lets_split.h index e59aed5921..fe7ae07679 100644 --- a/keyboards/lets_split/lets_split.h +++ b/keyboards/lets_split/lets_split.h @@ -1,5 +1,7 @@ +#ifndef LETS_SPLIT_H +#define LETS_SPLIT_H +  #include "quantum.h" -#include <avr/wdt.h>  void promicro_bootloader_jmp(bool program); @@ -18,4 +20,6 @@ void promicro_bootloader_jmp(bool program);  		{ k50, k51, k52, k53, k54, k55 }, \  		{ k60, k61, k62, k63, k64, k65 }, \  		{ k70, k71, k72, k73, k74, k75 } \ -	}
\ No newline at end of file +	} + +#endif
\ No newline at end of file diff --git a/quantum/quantum.c b/quantum/quantum.c index d59bd5a3f8..d8e43a4655 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -89,7 +89,7 @@ bool process_record_quantum(keyrecord_t *record) {            shutdown_user();          #endif          wait_ms(250); -        #ifdef ATREUS_ASTAR +        #ifdef CATERINA_BOOTLOADER              *(uint16_t *)0x0800 = 0x7777; // these two are a-star-specific          #endif          bootloader_jump(); diff --git a/tmk_core/common/avr/bootloader.c b/tmk_core/common/avr/bootloader.c index 7c744e8c79..fb9bf2d1c3 100644 --- a/tmk_core/common/avr/bootloader.c +++ b/tmk_core/common/avr/bootloader.c @@ -73,26 +73,46 @@ uint32_t reset_key  __attribute__ ((section (".noinit")));  /* initialize MCU status by watchdog reset */  void bootloader_jump(void) { -#ifdef PROTOCOL_LUFA -    USB_Disable(); -    cli(); -    _delay_ms(2000); -#endif +    #ifndef CATERINA_BOOTLOADER -#ifdef PROTOCOL_PJRC -    cli(); -    UDCON = 1; -    USBCON = (1<<FRZCLK); -    UCSR1B = 0; -    _delay_ms(5); -#endif +        #ifdef PROTOCOL_LUFA +            USB_Disable(); +            cli(); +            _delay_ms(2000); +        #endif -    // watchdog reset -    reset_key = BOOTLOADER_RESET_KEY; -    wdt_enable(WDTO_250MS); -    for (;;); -} +        #ifdef PROTOCOL_PJRC +            cli(); +            UDCON = 1; +            USBCON = (1<<FRZCLK); +            UCSR1B = 0; +            _delay_ms(5); +        #endif + +        // watchdog reset +        reset_key = BOOTLOADER_RESET_KEY; +        wdt_enable(WDTO_250MS); +        for (;;); + +    #else +        // this block may be optional +        // TODO: figure it out + +        uint16_t *const bootKeyPtr = (uint16_t *)0x0800; +        // Value used by Caterina bootloader use to determine whether to run the +        // sketch or the bootloader programmer. +        uint16_t bootKey = 0x7777; + +        *bootKeyPtr = bootKey; + +        // setup watchdog timeout +        wdt_enable(WDTO_60MS); + +        while(1) {} // wait for watchdog timer to trigger + +    #endif +}  /* this runs before main() */  void bootloader_jump_after_watchdog_reset(void) __attribute__ ((used, naked, section (".init3"))); | 
