summaryrefslogtreecommitdiffstats
path: root/keyboards/converter/xmk/xmk_shell.c
diff options
context:
space:
mode:
authorManna Harbour <51143715+manna-harbour@users.noreply.github.com>2022-12-19 20:52:03 +1100
committerGitHub <noreply@github.com>2022-12-19 20:52:03 +1100
commit5922751b173740e4375b2dfd1a48ff9762c9d943 (patch)
treeddbbccf462b0a4c41d512b181d8b7031cf6cd4ee /keyboards/converter/xmk/xmk_shell.c
parentd27d6f0485ccaaa852d5405ad88ebee6d850d33c (diff)
[Keyboard] Add converter/xmk (#18433)
Diffstat (limited to 'keyboards/converter/xmk/xmk_shell.c')
-rw-r--r--keyboards/converter/xmk/xmk_shell.c59
1 files changed, 59 insertions, 0 deletions
diff --git a/keyboards/converter/xmk/xmk_shell.c b/keyboards/converter/xmk/xmk_shell.c
new file mode 100644
index 0000000000..d8f146316e
--- /dev/null
+++ b/keyboards/converter/xmk/xmk_shell.c
@@ -0,0 +1,59 @@
+// Copyright 2022 Manna Harbour (@manna-harbour)
+// https://github.com/manna-harbour/xmk
+
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+#include <stdio.h>
+#include <string.h>
+
+#include "xmk_matrix.h"
+
+#define XMK_SHELL_LINE_LEN 64
+
+#define XMK_SHELL_KEY "key "
+#define XMK_SHELL_KEY_PRESS "press "
+#define XMK_SHELL_KEY_RELEASE "release "
+#define XMK_SHELL_BOOT "boot"
+#define XMK_SHELL_RESET "reset"
+
+void xmk_shell(char *line) {
+ dprintf("xmk_shell: line: '%s'\n", line);
+ if (strncmp(line, XMK_SHELL_KEY, strlen(XMK_SHELL_KEY)) == 0) {
+ dprintf("xmk_shell: XMK_SHELL_KEY\n");
+ if (strncmp(line + strlen(XMK_SHELL_KEY), XMK_SHELL_KEY_PRESS, strlen(XMK_SHELL_KEY_PRESS)) == 0) {
+ uint8_t key = strtol(line + strlen(XMK_SHELL_KEY) + strlen(XMK_SHELL_KEY_PRESS), NULL, 10);
+ dprintf("xmk_shell: XMK_SHELL_KEY_PRESS: key: %u\n", key);
+ xmk_matrix_key(true, key);
+ } else if (strncmp(line + strlen(XMK_SHELL_KEY), XMK_SHELL_KEY_RELEASE, strlen(XMK_SHELL_KEY_RELEASE)) == 0) {
+ uint8_t key = strtol(line + strlen(XMK_SHELL_KEY) + strlen(XMK_SHELL_KEY_RELEASE), NULL, 10);
+ dprintf("xmk_shell: XMK_SHELL_KEY_RELEASE: key: %u\n", key);
+ xmk_matrix_key(false, key);
+ }
+ } else if (strcmp(line, XMK_SHELL_BOOT) == 0) {
+ dprintf("xmk_shell: XMK_SHELL_BOOT\n");
+ reset_keyboard();
+ } else if (strcmp(line, XMK_SHELL_RESET) == 0) {
+ dprintf("xmk_shell: XMK_SHELL_RESET\n");
+ soft_reset_keyboard();
+ }
+}
+
+void virtser_recv(const uint8_t ch) {
+ static char line[XMK_SHELL_LINE_LEN];
+ static uint8_t line_index = 0;
+ if (ch == '\r') {
+ dprintf("virtser_recv: i: %3u, ch: %3u '\\r' \n", line_index, ch);
+ line[line_index] = '\0';
+ xmk_shell(line);
+ line_index = 0;
+ } else if (ch == '\n') {
+ dprintf("virtser_recv: i: %3u, ch: %3u '\\n' \n", line_index, ch);
+ } else {
+ dprintf("virtser_recv: i: %3u, ch: %3u '%c'\n", line_index, ch, ch);
+ if (line_index < (XMK_SHELL_LINE_LEN - 1)) {
+ line[line_index] = ch;
+ line_index++;
+ }
+ }
+}