Răsfoiți Sursa

[Core] Added `add_oneshot_mods` & `del_oneshot_mods` (#10549)

* Added `add_oneshot_mods` & `del_oneshot_mods`

Deleted undefined and unused prototypes:
- void oneshot_enable(void)
- void oneshot_disable(void)
- void oneshot_toggle(void)

Reordered the oneshot functions to follow the same order as other mod
functions, that is to say : get, add, del, set, clear

* Stricter conditions on add_oneshot_mods & del_oneshot_mods

Prevent extending the one shot timer if the called add_oneshot_mods or del_oneshot_mods do not change anything to the current one shot mod state.

Co-authored-by: David Kosorin <david@kosorin.net>

Co-authored-by: David Kosorin <david@kosorin.net>
precondition 5 ani în urmă
părinte
comite
3dcb0463ad
2 a modificat fișierele cu 29 adăugiri și 9 ștergeri
  1. 26 5
      tmk_core/common/action_util.c
  2. 3 4
      tmk_core/common/action_util.h

+ 26 - 5
tmk_core/common/action_util.c

@@ -290,6 +290,32 @@ void set_macro_mods(uint8_t mods) { macro_mods = mods; }
 void clear_macro_mods(void) { macro_mods = 0; }
 
 #ifndef NO_ACTION_ONESHOT
+/** \brief get oneshot mods
+ *
+ * FIXME: needs doc
+ */
+uint8_t get_oneshot_mods(void) { return oneshot_mods; }
+
+void add_oneshot_mods(uint8_t mods) {
+    if ((oneshot_mods & mods) != mods) {
+#    if (defined(ONESHOT_TIMEOUT) && (ONESHOT_TIMEOUT > 0))
+        oneshot_time = timer_read();
+#    endif
+        oneshot_mods |= mods;
+        oneshot_mods_changed_kb(mods);
+    }
+}
+
+void del_oneshot_mods(uint8_t mods) {
+    if (oneshot_mods & mods) {
+        oneshot_mods &= ~mods;
+#    if (defined(ONESHOT_TIMEOUT) && (ONESHOT_TIMEOUT > 0))
+        oneshot_time = oneshot_mods ? timer_read() : 0;
+#    endif
+        oneshot_mods_changed_kb(oneshot_mods);
+    }
+}
+
 /** \brief set oneshot mods
  *
  * FIXME: needs doc
@@ -316,11 +342,6 @@ void clear_oneshot_mods(void) {
         oneshot_mods_changed_kb(oneshot_mods);
     }
 }
-/** \brief get oneshot mods
- *
- * FIXME: needs doc
- */
-uint8_t get_oneshot_mods(void) { return oneshot_mods; }
 #endif
 
 /** \brief Called when the one shot modifiers have been changed.

+ 3 - 4
tmk_core/common/action_util.h

@@ -57,12 +57,11 @@ void    set_macro_mods(uint8_t mods);
 void    clear_macro_mods(void);
 
 /* oneshot modifier */
-void    set_oneshot_mods(uint8_t mods);
 uint8_t get_oneshot_mods(void);
+void    add_oneshot_mods(uint8_t mods);
+void    del_oneshot_mods(uint8_t mods);
+void    set_oneshot_mods(uint8_t mods);
 void    clear_oneshot_mods(void);
-void    oneshot_toggle(void);
-void    oneshot_enable(void);
-void    oneshot_disable(void);
 bool    has_oneshot_mods_timed_out(void);
 
 uint8_t get_oneshot_locked_mods(void);