diff options
Diffstat (limited to 'quantum')
| -rw-r--r-- | quantum/audio/audio.c | 4 | ||||
| -rw-r--r-- | quantum/audio/audio.h | 11 | ||||
| -rw-r--r-- | quantum/keymap_common.c | 8 | ||||
| -rw-r--r-- | quantum/keymap_common.h | 33 | ||||
| -rw-r--r-- | quantum/keymap_midi.h | 10 | ||||
| -rw-r--r-- | quantum/matrix.c | 17 | ||||
| -rw-r--r-- | quantum/quantum.mk | 5 | ||||
| -rw-r--r-- | quantum/tools/README.md | 4 | 
8 files changed, 73 insertions, 19 deletions
diff --git a/quantum/audio/audio.c b/quantum/audio/audio.c index 3a7f0f5567..27b64f8c96 100644 --- a/quantum/audio/audio.c +++ b/quantum/audio/audio.c @@ -374,6 +374,10 @@ bool is_playing_notes(void) {  	return playing_notes;  } +bool is_audio_on(void) { +    return (audio_config.enable != 0); +} +  void audio_toggle(void) {      audio_config.enable ^= 1;      eeconfig_update_audio(audio_config.raw); diff --git a/quantum/audio/audio.h b/quantum/audio/audio.h index 3d706587ab..4ba879bbb1 100644 --- a/quantum/audio/audio.h +++ b/quantum/audio/audio.h @@ -25,6 +25,7 @@ typedef union {      };  } audio_config_t; +bool is_audio_on(void);  void audio_toggle(void);  void audio_on(void);  void audio_off(void); @@ -71,11 +72,11 @@ void stop_note(float freq);  void stop_all_notes(void);  void play_notes(float (*np)[][2], uint16_t n_count, bool n_repeat, float n_rest); -#define SCALE (int []){ 0 + (12*0), 2 + (12*0), 4 + (12*0), 5 + (12*0), 7 + (12*0), 9 + (12*0), 11 + (12*0), \ -						0 + (12*1), 2 + (12*1), 4 + (12*1), 5 + (12*1), 7 + (12*1), 9 + (12*1), 11 + (12*1), \ -						0 + (12*2), 2 + (12*2), 4 + (12*2), 5 + (12*2), 7 + (12*2), 9 + (12*2), 11 + (12*2), \ -						0 + (12*3), 2 + (12*3), 4 + (12*3), 5 + (12*3), 7 + (12*3), 9 + (12*3), 11 + (12*3), \ -						0 + (12*4), 2 + (12*4), 4 + (12*4), 5 + (12*4), 7 + (12*4), 9 + (12*4), 11 + (12*4), } +#define SCALE (int8_t []){ 0 + (12*0), 2 + (12*0), 4 + (12*0), 5 + (12*0), 7 + (12*0), 9 + (12*0), 11 + (12*0), \ +                           0 + (12*1), 2 + (12*1), 4 + (12*1), 5 + (12*1), 7 + (12*1), 9 + (12*1), 11 + (12*1), \ +                           0 + (12*2), 2 + (12*2), 4 + (12*2), 5 + (12*2), 7 + (12*2), 9 + (12*2), 11 + (12*2), \ +                           0 + (12*3), 2 + (12*3), 4 + (12*3), 5 + (12*3), 7 + (12*3), 9 + (12*3), 11 + (12*3), \ +                           0 + (12*4), 2 + (12*4), 4 + (12*4), 5 + (12*4), 7 + (12*4), 9 + (12*4), 11 + (12*4), }  // These macros are used to allow play_notes to play an array of indeterminate  // length. This works around the limitation of C's sizeof operation on pointers. diff --git a/quantum/keymap_common.c b/quantum/keymap_common.c index 5e78d1157d..8f00f9cc32 100644 --- a/quantum/keymap_common.c +++ b/quantum/keymap_common.c @@ -272,6 +272,14 @@ static action_t keycode_to_action(uint16_t keycode)                  // Set default layer                  int layer = keycode & 0xFF;                  action.code = ACTION_LAYER_TOGGLE(layer); +            } else if (type == 0x5) { +                // OSL(layer) - One-shot layer +                int layer = keycode & 0xFF; +                action.code = ACTION_LAYER_ONESHOT(layer); +            } else if (type == 0x6) { +                // OSM(mod) - One-shot mod +                int mod = keycode & 0xFF; +                action.code = ACTION_MODS_ONESHOT(mod);              }              break;      #ifdef MIDI_ENABLE diff --git a/quantum/keymap_common.h b/quantum/keymap_common.h index 0ede0296b9..322fda498a 100644 --- a/quantum/keymap_common.h +++ b/quantum/keymap_common.h @@ -67,6 +67,9 @@ extern const uint16_t fn_actions[];  #define MEH(kc) kc  | 0x0700  #define LCAG(kc) kc  | 0x0D00 // Modifier Ctrl Alt and GUI +#define MOD_HYPR 0xf +#define MOD_MEH 0x7 +  #define RCTL(kc) kc | 0x1100  #define RSFT(kc) kc | 0x1200  #define RALT(kc) kc | 0x1400 @@ -84,8 +87,11 @@ extern const uint16_t fn_actions[];  #define KC_EXCLAIM  KC_EXLM  #define KC_AT   LSFT(KC_2)      // @ + +  #define KC_HASH LSFT(KC_3)      // # +  #define KC_DLR  LSFT(KC_4)      // $  #define KC_DOLLAR   KC_DLR @@ -107,22 +113,43 @@ extern const uint16_t fn_actions[];  #define KC_RPRN LSFT(KC_0)      // )  #define KC_RIGHT_PAREN  KC_RPRN +  #define KC_UNDS LSFT(KC_MINS)   // _  #define KC_UNDERSCORE   KC_UNDS  #define KC_PLUS LSFT(KC_EQL)    // + +  #define KC_LCBR LSFT(KC_LBRC)   // {  #define KC_LEFT_CURLY_BRACE KC_LCBR  #define KC_RCBR LSFT(KC_RBRC)   // }  #define KC_RIGHT_CURLY_BRACE    KC_RCBR +#define KC_LABK LSFT(KC_COMM)   // < +#define KC_LEFT_ANGLE_BRACKET   KC_LABK + +#define KC_RABK LSFT(KC_DOT)    // > +#define KC_RIGHT_ANGLE_BRACKET  KC_RABK +  #define KC_COLN LSFT(KC_SCLN)   // :  #define KC_COLON    KC_COLN  #define KC_PIPE LSFT(KC_BSLS)   // | +#define KC_LT LSFT(KC_COMM)     // < + + +#define KC_GT LSFT(KC_DOT)      // > + + +#define KC_QUES LSFT(KC_SLSH)   // ? +#define KC_QUESTION KC_QUES + + +#define KC_DQT LSFT(KC_QUOT)   // " +#define KC_DOUBLE_QUOTE KC_DQT +  #define KC_DELT KC_DELETE // Del key (four letter code)  // Alias for function layers than expand past FN31 @@ -205,6 +232,12 @@ extern const uint16_t fn_actions[];  // Toggle to layer - 256 layer max  #define TG(layer) (layer | 0x5400) +// One-shot layer - 256 layer max +#define OSL(layer) (layer | 0x5500) + +// One-shot mod +#define OSM(layer) (layer | 0x5600) +  // M-od, T-ap - 256 keycode max  #define MT(mod, kc) (kc | 0x7000 | ((mod & 0xF) << 8))  #define CTL_T(kc) MT(0x1, kc) diff --git a/quantum/keymap_midi.h b/quantum/keymap_midi.h index 795f26380e..3a2bf3afff 100644 --- a/quantum/keymap_midi.h +++ b/quantum/keymap_midi.h @@ -25,11 +25,11 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #define CHNL(note, channel) (note + (channel << 8)) -#define SCALE (int []){ 0 + (12*0), 2 + (12*0), 4 + (12*0), 5 + (12*0), 7 + (12*0), 9 + (12*0), 11 + (12*0), \ -						0 + (12*1), 2 + (12*1), 4 + (12*1), 5 + (12*1), 7 + (12*1), 9 + (12*1), 11 + (12*1), \ -						0 + (12*2), 2 + (12*2), 4 + (12*2), 5 + (12*2), 7 + (12*2), 9 + (12*2), 11 + (12*2), \ -						0 + (12*3), 2 + (12*3), 4 + (12*3), 5 + (12*3), 7 + (12*3), 9 + (12*3), 11 + (12*3), \ -						0 + (12*4), 2 + (12*4), 4 + (12*4), 5 + (12*4), 7 + (12*4), 9 + (12*4), 11 + (12*4), } +#define SCALE (int8_t []){ 0 + (12*0), 2 + (12*0), 4 + (12*0), 5 + (12*0), 7 + (12*0), 9 + (12*0), 11 + (12*0), \ +                           0 + (12*1), 2 + (12*1), 4 + (12*1), 5 + (12*1), 7 + (12*1), 9 + (12*1), 11 + (12*1), \ +                           0 + (12*2), 2 + (12*2), 4 + (12*2), 5 + (12*2), 7 + (12*2), 9 + (12*2), 11 + (12*2), \ +                           0 + (12*3), 2 + (12*3), 4 + (12*3), 5 + (12*3), 7 + (12*3), 9 + (12*3), 11 + (12*3), \ +                           0 + (12*4), 2 + (12*4), 4 + (12*4), 5 + (12*4), 7 + (12*4), 9 + (12*4), 11 + (12*4), }  #define N_CN1  (0x600C + (12 * -1) + 0 )  #define N_CN1S (0x600C + (12 * -1) + 1 ) diff --git a/quantum/matrix.c b/quantum/matrix.c index 2dab6ae941..7d70f728d4 100644 --- a/quantum/matrix.c +++ b/quantum/matrix.c @@ -42,6 +42,13 @@ static matrix_row_t matrix_debouncing[MATRIX_ROWS];      static matrix_row_t matrix_reversed_debouncing[MATRIX_COLS];  #endif + +#if MATRIX_COLS > 16 +    #define SHIFTER 1UL +#else +    #define SHIFTER 1 +#endif +  static matrix_row_t read_cols(void);  static void init_cols(void);  static void unselect_rows(void); @@ -235,15 +242,15 @@ static matrix_row_t read_cols(void)  #endif          if ((col & 0xF0) == 0x20) {  -            result |= (PINB&(1<<(col & 0x0F)) ? 0 : (1<<x));  +            result |= (PINB&(1<<(col & 0x0F)) ? 0 : (SHIFTER<<x));           } else if ((col & 0xF0) == 0x30) {  -            result |= (PINC&(1<<(col & 0x0F)) ? 0 : (1<<x));  +            result |= (PINC&(1<<(col & 0x0F)) ? 0 : (SHIFTER<<x));           } else if ((col & 0xF0) == 0x40) {  -            result |= (PIND&(1<<(col & 0x0F)) ? 0 : (1<<x));  +            result |= (PIND&(1<<(col & 0x0F)) ? 0 : (SHIFTER<<x));           } else if ((col & 0xF0) == 0x50) {  -            result |= (PINE&(1<<(col & 0x0F)) ? 0 : (1<<x));  +            result |= (PINE&(1<<(col & 0x0F)) ? 0 : (SHIFTER<<x));           } else if ((col & 0xF0) == 0x60) {  -            result |= (PINF&(1<<(col & 0x0F)) ? 0 : (1<<x));  +            result |= (PINF&(1<<(col & 0x0F)) ? 0 : (SHIFTER<<x));           }       }      return result; diff --git a/quantum/quantum.mk b/quantum/quantum.mk index 4a076eca4d..5f4c2f0450 100644 --- a/quantum/quantum.mk +++ b/quantum/quantum.mk @@ -28,8 +28,9 @@ ifeq ($(strip $(MIDI_ENABLE)), yes)  endif  ifeq ($(strip $(AUDIO_ENABLE)), yes) -	SRC += $(QUANTUM_DIR)/audio/audio.c $(QUANTUM_DIR)/audio/voices.c -	SRC += $(QUANTUM_DIR)/audio/audio.c $(QUANTUM_DIR)/audio/luts.c +    SRC += $(QUANTUM_DIR)/audio/audio.c +    SRC += $(QUANTUM_DIR)/audio/voices.c +    SRC += $(QUANTUM_DIR)/audio/luts.c  endif  ifeq ($(strip $(UNICODE_ENABLE)), yes) diff --git a/quantum/tools/README.md b/quantum/tools/README.md index 0702144238..5f355256de 100644 --- a/quantum/tools/README.md +++ b/quantum/tools/README.md @@ -1,6 +1,6 @@  `eeprom_reset.hex` is to reset the eeprom on the Atmega32u4, like this:      dfu-programmer atmega32u4 erase -    dfu-programmer atmega32u4 flash --eeprom eeprom-reset.bin +    dfu-programmer atmega32u4 flash --eeprom eeprom_reset.hex - You'll need to reflash afterwards, because DFU requires the flash to be erased before messing with the eeprom.
\ No newline at end of file + You'll need to reflash afterwards, because DFU requires the flash to be erased before messing with the eeprom.  | 
