summaryrefslogtreecommitdiffhomepage
path: root/src/blog/fw-ec/hybrid.diff.gsp
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2023-11-14 10:03:19 +0100
committerThomas Voss <mail@thomasvoss.com> 2023-11-14 10:08:19 +0100
commit234a47f69f0957bf3e3d268749b01e112d53bb6c (patch)
treeb6da59bc4d1bc9e93c0b0631042949bfd7ac02bc /src/blog/fw-ec/hybrid.diff.gsp
parent09e860d5a1e30901327aadb6bdfa0ee6afb00277 (diff)
Move /srp to /blog
Diffstat (limited to 'src/blog/fw-ec/hybrid.diff.gsp')
-rw-r--r--src/blog/fw-ec/hybrid.diff.gsp88
1 files changed, 88 insertions, 0 deletions
diff --git a/src/blog/fw-ec/hybrid.diff.gsp b/src/blog/fw-ec/hybrid.diff.gsp
new file mode 100644
index 0000000..dfd4518
--- /dev/null
+++ b/src/blog/fw-ec/hybrid.diff.gsp
@@ -0,0 +1,88 @@
+@span .diff-meta {-diff --git a/board/hx20/keyboard_customization.c b/board/hx20/keyboard_customization.c}
+@span .diff-meta {-index 9a5050a0f..2756f17ce 100644}
+@span .diff-meta {---- a/board/hx20/keyboard_customization.c}
+@span .diff-meta {-+++ b/board/hx20/keyboard_customization.c}
+@span .diff-loc {-\@\@ -22,12 +22,15 \@\@}
+ #define CPRINTS(format, args...) cprints(CC_KEYBOARD, format, ## args)
+ #define CPRINTF(format, args...) cprintf(CC_KEYBOARD, format, ## args)
+
+@span .diff-ins {-+/* The scancode for the caps-lock key, which is now a hybrid key */}
+@span .diff-ins {-+#define SCANCODE_CTRL_ESC 0x0101}
+@span .diff-ins {-+}
+ uint16_t scancode_set2[KEYBOARD_COLS_MAX][KEYBOARD_ROWS] = {
+ {0x0021, 0x007B, 0x0079, 0x0072, 0x007A, 0x0071, 0x0069, 0xe04A\},
+ {0xe071, 0xe070, 0x007D, 0xe01f, 0x006c, 0xe06c, 0xe07d, 0x0077\},
+ {0x0015, 0x0070, 0x00ff, 0x000D, 0x000E, 0x0016, 0x0067, 0x001c\},
+ {0xe011, 0x0011, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000\},
+@span .diff-del {-- {0xe05a, 0x0029, 0x0024, 0x000c, 0x0058, 0x0026, 0x0004, 0xe07a\},}
+@span .diff-ins {-+ {0xe05a, 0x0029, 0x0024, 0x000c, 0x0101, 0x0026, 0x0004, 0xe07a\},}
+ {0x0022, 0x001a, 0x0006, 0x0005, 0x001b, 0x001e, 0x001d, 0x0076\},
+ {0x002A, 0x0032, 0x0034, 0x002c, 0x002e, 0x0025, 0x002d, 0x002b\},
+ {0x003a, 0x0031, 0x0033, 0x0035, 0x0036, 0x003d, 0x003c, 0x003b\},
+@span .diff-loc {-\@\@ -497,6 +500,55 \@\@ int functional_hotkey(uint16_t *key_code, int8_t pressed)}
+ return EC_SUCCESS;
+ \}
+
+@span .diff-ins {-+int try_ctrl_esc(uint16_t *key_code, int8_t pressed) {}
+@span .diff-ins {-+ static enum {}
+@span .diff-ins {-+ NONE,}
+@span .diff-ins {-+ HELD,}
+@span .diff-ins {-+ CTRL}
+@span .diff-ins {-+ \} ctrl_esc_state;}
+@span .diff-ins {-+}
+@span .diff-ins {-+ if (*key_code == SCANCODE_CTRL_ESC) {}
+@span .diff-ins {-+ /* If we pressed the caps key, enter the HELD state. Otherwise,}
+@span .diff-ins {-+ * we are either releasing from the HELD state or the CTRL}
+@span .diff-ins {-+ * state. In both cases we should reset the state to NONE, but}
+@span .diff-ins {-+ * when releasing from the HELD state we want to send an ESC and}
+@span .diff-ins {-+ * when releasing from the CTRL state we want to end the CTRL.}
+@span .diff-ins {-+ *}
+@span .diff-ins {-+ * Also important to note is that even before we know if we’re}
+@span .diff-ins {-+ * going to be acting as ESC or CTRL, we need to send a press-}
+@span .diff-ins {-+ * event of the CTRL key because you can chord CTRL with mouse-}
+@span .diff-ins {-+ * clicks too, not just other keys.}
+@span .diff-ins {-+ */}
+@span .diff-ins {-+ if (pressed) {}
+@span .diff-ins {-+ ctrl_esc_state = HELD;}
+@span .diff-ins {-+ simulate_keyboard(SCANCODE_LEFT_CTRL, 1);}
+@span .diff-ins {-+ \} else if (ctrl_esc_state == HELD) {}
+@span .diff-ins {-+ ctrl_esc_state = NONE;}
+@span .diff-ins {-+ simulate_keyboard(SCANCODE_LEFT_CTRL, 0);}
+@span .diff-ins {-+ simulate_keyboard(SCANCODE_ESC, 1);}
+@span .diff-ins {-+ simulate_keyboard(SCANCODE_ESC, 0);}
+@span .diff-ins {-+ \} else if (ctrl_esc_state == CTRL) {}
+@span .diff-ins {-+ ctrl_esc_state = NONE;}
+@span .diff-ins {-+ simulate_keyboard(SCANCODE_LEFT_CTRL, 0);}
+@span .diff-ins {-+ \}}
+@span .diff-ins {-+}
+@span .diff-ins {-+ return EC_ERROR_UNIMPLEMENTED;}
+@span .diff-ins {-+ \}}
+@span .diff-ins {-+}
+@span .diff-ins {-+ /* If we get here then we are dealing with a key that isn’t the caps}
+@span .diff-ins {-+ * key. In that case we need to handle all 3 states. If the state is}
+@span .diff-ins {-+ * NONE then we can just exit from this function. If it’s HELD and we}
+@span .diff-ins {-+ * are pressing a key, then that’s a key-chord and we need to start a}
+@span .diff-ins {-+ * CTRL. Finally, if we are in the CTRL state, there is nothing to do.}
+@span .diff-ins {-+ */}
+@span .diff-ins {-+ if (ctrl_esc_state == HELD && pressed) {}
+@span .diff-ins {-+ ctrl_esc_state = CTRL;}
+@span .diff-ins {-+ simulate_keyboard(SCANCODE_LEFT_CTRL, 1);}
+@span .diff-ins {-+ \}}
+@span .diff-ins {-+}
+@span .diff-ins {-+ return EC_SUCCESS;}
+@span .diff-ins {-+\}}
+@span .diff-ins {-+}
+ enum ec_error_list keyboard_scancode_callback(uint16_t *make_code,
+ int8_t pressed)
+ {
+@span .diff-loc {-\@\@ -521,6 +573,10 \@\@ enum ec_error_list keyboard_scancode_callback(uint16_t *make_code,}
+ if (!pos_get_state())
+ return EC_SUCCESS;
+
+@span .diff-ins {-+ r = try_ctrl_esc(make_code, pressed);}
+@span .diff-ins {-+ if (r != EC_SUCCESS)}
+@span .diff-ins {-+ return r;}
+@span .diff-ins {-+}
+ r = hotkey_F1_F12(make_code, Fn_key, pressed);
+ if (r != EC_SUCCESS)
+ return r;