summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
Diffstat (limited to 'common')
-rw-r--r--common/action.c7
-rw-r--r--common/action_code.h14
-rw-r--r--common/keyboard.c25
-rw-r--r--common/keymap.c2
4 files changed, 37 insertions, 11 deletions
diff --git a/common/action.c b/common/action.c
index ec8eeae7bc..1f15bd0918 100644
--- a/common/action.c
+++ b/common/action.c
@@ -518,7 +518,12 @@ bool is_tap_key(keypos_t key)
case ACT_RMODS_TAP:
case ACT_LAYER_TAP:
case ACT_LAYER_TAP_EXT:
- return true;
+ switch (action.layer_tap.code) {
+ case 0x00 ... 0xdf:
+ case OP_TAP_TOGGLE:
+ return true;
+ }
+ return false;
case ACT_MACRO:
case ACT_FUNCTION:
if (action.func.opt & FUNC_TAP) { return true; }
diff --git a/common/action_code.h b/common/action_code.h
index bc40e2c6fb..32ef07216d 100644
--- a/common/action_code.h
+++ b/common/action_code.h
@@ -70,13 +70,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
* 1001|oopp|BBBB BBBB 8-bit Bitwise Operation???
*
* ACT_LAYER_TAP(101x):
- * 101E|LLLL| keycode On/Off with tap key
- * 101E|LLLL|1110 mods On/Off with modifiers(0xE0-EF)
- * 101E|LLLL|1111 0000 Invert with tap toggle(0xF0)
- * 101E|LLLL|1111 0001 On/Off
- * 101E|LLLL|1111 0010 Off/On
- * 101E|LLLL|1111 0011 Set/Clear
- * 101E|LLLL|1111 xxxx Reserved(0xF4-FF)
+ * 101E|LLLL| keycode On/Off with tap key (0x00-DF)[TAP]
+ * 101E|LLLL|1110 mods On/Off with modifiers (0xE0-EF)[NOT TAP]
+ * 101E|LLLL|1111 0000 Invert with tap toggle (0xF0) [TAP]
+ * 101E|LLLL|1111 0001 On/Off (0xF1) [NOT TAP]
+ * 101E|LLLL|1111 0010 Off/On (0xF2) [NOT TAP]
+ * 101E|LLLL|1111 0011 Set/Clear (0xF3) [NOT TAP]
+ * 101E|LLLL|1111 xxxx Reserved (0xF4-FF)
* ELLLL: layer 0-31(E: extra bit for layer 16-31)
*
*
diff --git a/common/keyboard.c b/common/keyboard.c
index 1e3fb510a4..b03b124d76 100644
--- a/common/keyboard.c
+++ b/common/keyboard.c
@@ -39,6 +39,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifdef SERIAL_MOUSE_ENABLE
#include "serial_mouse.h"
#endif
+#ifdef ADB_MOUSE_ENABLE
+#include "adb.h"
+#endif
#ifdef MATRIX_HAS_GHOST
@@ -69,6 +72,9 @@ void keyboard_init(void)
#ifdef SERIAL_MOUSE_ENABLE
serial_mouse_init();
#endif
+#ifdef ADB_MOUSE_ENABLE
+ adb_mouse_init();
+#endif
#ifdef BOOTMAGIC_ENABLE
@@ -87,6 +93,9 @@ void keyboard_init(void)
void keyboard_task(void)
{
static matrix_row_t matrix_prev[MATRIX_ROWS];
+#ifdef MATRIX_HAS_GHOST
+ static matrix_row_t matrix_ghost[MATRIX_ROWS];
+#endif
static uint8_t led_status = 0;
matrix_row_t matrix_row = 0;
matrix_row_t matrix_change = 0;
@@ -96,13 +105,21 @@ void keyboard_task(void)
matrix_row = matrix_get_row(r);
matrix_change = matrix_row ^ matrix_prev[r];
if (matrix_change) {
- if (debug_matrix) matrix_print();
#ifdef MATRIX_HAS_GHOST
if (has_ghost_in_row(r)) {
- matrix_prev[r] = matrix_row;
+ /* Keep track of whether ghosted status has changed for
+ * debugging. But don't update matrix_prev until un-ghosted, or
+ * the last key would be lost.
+ */
+ if (debug_matrix && matrix_ghost[r] != matrix_row) {
+ matrix_print();
+ }
+ matrix_ghost[r] = matrix_row;
continue;
}
+ matrix_ghost[r] = matrix_row;
#endif
+ if (debug_matrix) matrix_print();
for (uint8_t c = 0; c < MATRIX_COLS; c++) {
if (matrix_change & ((matrix_row_t)1<<c)) {
action_exec((keyevent_t){
@@ -136,6 +153,10 @@ MATRIX_LOOP_END:
serial_mouse_task();
#endif
+#ifdef ADB_MOUSE_ENABLE
+ adb_mouse_task();
+#endif
+
// update LED
if (led_status != host_keyboard_leds()) {
led_status = host_keyboard_leds();
diff --git a/common/keymap.c b/common/keymap.c
index 4c0b61b8c1..9f4fab5216 100644
--- a/common/keymap.c
+++ b/common/keymap.c
@@ -131,7 +131,7 @@ static action_t keycode_to_action(uint8_t keycode)
case KC_SYSTEM_POWER ... KC_SYSTEM_WAKE:
action.code = ACTION_USAGE_SYSTEM(KEYCODE2SYSTEM(keycode));
break;
- case KC_AUDIO_MUTE ... KC_WWW_FAVORITES:
+ case KC_AUDIO_MUTE ... KC_MEDIA_REWIND:
action.code = ACTION_USAGE_CONSUMER(KEYCODE2CONSUMER(keycode));
break;
case KC_MS_UP ... KC_MS_ACCEL2: