summary refs log tree commit diff
path: root/quantum
diff options
context:
space:
mode:
authorStephan Bösebeck <sb@caluga.de>2016-05-11 22:05:19 +0200
committerStephan Bösebeck <sb@caluga.de>2016-05-11 22:05:19 +0200
commitd09d2da1c25b377b0f68ea83706903344c240ae1 (patch)
treedc3e88ef91206ccc251af32543a01ec2e7a7c208 /quantum
parent2e02886a1ec6d92c07f1edd13d4e68af1e861991 (diff)
parent5845eb05b53ea685c9622abf011870ab4ce84f39 (diff)
Merge branch 'master' of https://github.com/jackhumbert/qmk_firmware
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.