Browse Source

Merge remote-tracking branch 'origin/develop' into xap

QMK Bot 2 years ago
parent
commit
900abbf874

+ 2 - 0
data/mappings/info_config.hjson

@@ -17,6 +17,8 @@
     "APA102_DI_PIN": {"info_key": "apa102.data_pin"},
 
     // Audio
+    "AUDIO_DEFAULT_ON": {"info_key": "audio.default.on", "value_type": "bool"},
+    "AUDIO_DEFAULT_CLICKY_ON": {"info_key": "audio.default.clicky", "value_type": "bool"},
     "AUDIO_VOICES": {"info_key": "audio.voices", "value_type": "bool"},
     "SENDSTRING_BELL": {"info_key": "audio.macro_beep", "value_type": "bool"},
 

+ 8 - 0
data/schemas/keyboard.jsonschema

@@ -123,6 +123,14 @@
             "type": "object",
             "additionalProperties": false,
             "properties": {
+                "default": {
+                    "type": "object",
+                    "additionalProperties": false,
+                    "properties": {
+                        "on": {"type": "boolean"},
+                        "clicky": {"type": "boolean"}
+                    }
+                },
                 "macro_beep": {"type": "boolean"},
                 "pins": {"$ref": "qmk.definitions.v1#/mcu_pin_array"},
                 "voices": {"type": "boolean"}

+ 1 - 1
docs/feature_tap_dance.md

@@ -173,7 +173,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 
     switch (keycode) {
         case TD(CT_CLN):  // list all tap dance keycodes with tap-hold configurations
-            action = &tap_dance_actions[TD_INDEX(keycode)];
+            action = &tap_dance_actions[QK_TAP_DANCE_GET_INDEX(keycode)];
             if (!record->event.pressed && action->state.count && !action->state.finished) {
                 tap_dance_tap_hold_t *tap_hold = (tap_dance_tap_hold_t *)action->user_data;
                 tap_code16(tap_hold->tap);

+ 7 - 0
docs/reference_info_json.md

@@ -111,6 +111,13 @@ Configures the [APA102](apa102_driver.md) driver.
 Configures the [Audio](feature_audio.md) feature.
 
 * `audio`
+    * `default`
+        * `on`
+            * The default audio enabled state.
+            * Default: `true`
+        * `clicky`
+            * The default audio clicky enabled state.
+            * Default: `true`
     * `macro_beep`
         * Play a short beep for `\a` (ASCII `BEL`) characters in Send String macros.
         * Default: `false`

+ 22 - 15
quantum/audio/audio.c

@@ -17,6 +17,7 @@
 #include "audio.h"
 #include "eeconfig.h"
 #include "timer.h"
+#include "debug.h"
 #include "wait.h"
 #include "util.h"
 
@@ -62,6 +63,13 @@
  * the internal state of the audio system does its calculations with the later - ms
  */
 
+#ifndef AUDIO_DEFAULT_ON
+#    define AUDIO_DEFAULT_ON true
+#endif
+#ifndef AUDIO_DEFAULT_CLICKY_ON
+#    define AUDIO_DEFAULT_CLICKY_ON true
+#endif
+
 #ifndef AUDIO_TONE_STACKSIZE
 #    define AUDIO_TONE_STACKSIZE 8
 #endif
@@ -117,32 +125,31 @@ void eeconfig_update_audio_current(void) {
     eeconfig_update_audio(audio_config.raw);
 }
 
+void eeconfig_update_audio_default(void) {
+    audio_config.valid         = true;
+    audio_config.enable        = AUDIO_DEFAULT_ON;
+    audio_config.clicky_enable = AUDIO_DEFAULT_CLICKY_ON;
+    eeconfig_update_audio(audio_config.raw);
+}
+
 void audio_init(void) {
     if (audio_initialized) {
         return;
     }
 
-    // Check EEPROM
-#ifdef EEPROM_ENABLE
-    if (!eeconfig_is_enabled()) {
-        eeconfig_init();
-    }
     audio_config.raw = eeconfig_read_audio();
-#else // EEPROM settings
-    audio_config.enable        = true;
-#    ifdef AUDIO_CLICKY_ON
-    audio_config.clicky_enable = true;
-#    endif
-#endif // EEPROM settings
+    if (!audio_config.valid) {
+        dprintf("audio_init audio_config.valid = 0. Write default values to EEPROM.\n");
+        eeconfig_update_audio_default();
+    }
 
     for (uint8_t i = 0; i < AUDIO_TONE_STACKSIZE; i++) {
         tones[i] = (musical_tone_t){.time_started = 0, .pitch = -1.0f, .duration = 0};
     }
 
-    if (!audio_initialized) {
-        audio_driver_initialize();
-        audio_initialized = true;
-    }
+    audio_driver_initialize();
+    audio_initialized = true;
+
     stop_all_notes();
 #ifndef AUDIO_INIT_DELAY
     audio_startup();

+ 2 - 1
quantum/audio/audio.h

@@ -33,7 +33,8 @@ typedef union {
     struct {
         bool    enable : 1;
         bool    clicky_enable : 1;
-        uint8_t level : 6;
+        bool    valid : 1;
+        uint8_t reserved : 5;
     };
 } audio_config_t;
 

+ 1 - 1
quantum/eeconfig.c

@@ -58,7 +58,7 @@ void eeconfig_init_quantum(void) {
     // Enable oneshot and autocorrect by default: 0b0001 0100 0000 0000
     eeprom_update_word(EECONFIG_KEYMAP, 0x1400);
     eeprom_update_byte(EECONFIG_BACKLIGHT, 0);
-    eeprom_update_byte(EECONFIG_AUDIO, 0xFF); // On by default
+    eeprom_update_byte(EECONFIG_AUDIO, 0);
     eeprom_update_dword(EECONFIG_RGBLIGHT, 0);
     eeprom_update_byte(EECONFIG_RGBLIGHT_EXTENDED, 0);
     eeprom_update_byte(EECONFIG_UNUSED, 0);

+ 3 - 3
quantum/process_keycode/process_tap_dance.c

@@ -133,7 +133,7 @@ bool preprocess_tap_dance(uint16_t keycode, keyrecord_t *record) {
 
     if (!active_td || keycode == active_td) return false;
 
-    action                             = &tap_dance_actions[TD_INDEX(active_td)];
+    action                             = &tap_dance_actions[QK_TAP_DANCE_GET_INDEX(active_td)];
     action->state.interrupted          = true;
     action->state.interrupting_keycode = keycode;
     process_tap_dance_action_on_dance_finished(action);
@@ -154,7 +154,7 @@ bool process_tap_dance(uint16_t keycode, keyrecord_t *record) {
 
     switch (keycode) {
         case QK_TAP_DANCE ... QK_TAP_DANCE_MAX:
-            action = &tap_dance_actions[TD_INDEX(keycode)];
+            action = &tap_dance_actions[QK_TAP_DANCE_GET_INDEX(keycode)];
 
             action->state.pressed = record->event.pressed;
             if (record->event.pressed) {
@@ -182,7 +182,7 @@ void tap_dance_task(void) {
 
     if (!active_td || timer_elapsed(last_tap_time) <= GET_TAPPING_TERM(active_td, &(keyrecord_t){})) return;
 
-    action = &tap_dance_actions[TD_INDEX(active_td)];
+    action = &tap_dance_actions[QK_TAP_DANCE_GET_INDEX(active_td)];
     if (!action->state.interrupted) {
         process_tap_dance_action_on_dance_finished(action);
     }

+ 2 - 2
quantum/process_keycode/process_tap_dance.h

@@ -19,6 +19,7 @@
 #include <stdint.h>
 #include <stdbool.h>
 #include "action.h"
+#include "quantum_keycodes.h"
 
 typedef struct {
     uint16_t interrupting_keycode;
@@ -74,8 +75,7 @@ typedef struct {
 #define ACTION_TAP_DANCE_FN_ADVANCED_WITH_RELEASE(user_fn_on_each_tap, user_fn_on_each_release, user_fn_on_dance_finished, user_fn_on_dance_reset) \
     { .fn = {user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_dance_reset, user_fn_on_each_release}, .user_data = NULL, }
 
-#define TD(n) (QK_TAP_DANCE | TD_INDEX(n))
-#define TD_INDEX(code) ((code)&0xFF)
+#define TD_INDEX(code) QK_TAP_DANCE_GET_INDEX(code)
 #define TAP_DANCE_KEYCODE(state) TD(((tap_dance_action_t *)state) - tap_dance_actions)
 
 extern tap_dance_action_t tap_dance_actions[];

+ 4 - 0
quantum/quantum_keycodes.h

@@ -190,6 +190,10 @@
 #define SH_T(kc) (QK_SWAP_HANDS | ((kc)&0xFF))
 #define QK_SWAP_HANDS_GET_TAP_KEYCODE(kc) ((kc)&0xFF)
 
+// Tap dance
+#define TD(i) (QK_TAP_DANCE | ((i)&0xFF))
+#define QK_TAP_DANCE_GET_INDEX(kc) ((kc)&0xFF)
+
 // MIDI aliases
 #define MIDI_TONE_MIN QK_MIDI_NOTE_C_0
 #define MIDI_TONE_MAX QK_MIDI_NOTE_B_5

+ 1 - 1
tests/tap_dance/examples.c

@@ -83,7 +83,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 
     switch (keycode) {
         case TD(CT_CLN):
-            action = &tap_dance_actions[TD_INDEX(keycode)];
+            action = &tap_dance_actions[QK_TAP_DANCE_GET_INDEX(keycode)];
             if (!record->event.pressed && action->state.count && !action->state.finished) {
                 tap_dance_tap_hold_t *tap_hold = (tap_dance_tap_hold_t *)action->user_data;
                 tap_code16(tap_hold->tap);