summaryrefslogtreecommitdiffstats
path: root/quantum
diff options
context:
space:
mode:
Diffstat (limited to 'quantum')
-rw-r--r--quantum/audio/audio.c4
-rw-r--r--quantum/audio/audio.h11
-rw-r--r--quantum/keymap_common.c8
-rw-r--r--quantum/keymap_common.h33
-rw-r--r--quantum/keymap_midi.h10
-rw-r--r--quantum/matrix.c17
-rw-r--r--quantum/quantum.mk5
-rw-r--r--quantum/tools/README.md4
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.