aboutsummaryrefslogtreecommitdiff
path: root/modules/qmk/hello_world
diff options
context:
space:
mode:
Diffstat (limited to 'modules/qmk/hello_world')
-rw-r--r--modules/qmk/hello_world/hello_world.c33
-rw-r--r--modules/qmk/hello_world/introspection.c10
-rw-r--r--modules/qmk/hello_world/introspection.h10
-rw-r--r--modules/qmk/hello_world/qmk_module.json15
-rw-r--r--modules/qmk/hello_world/rules.mk2
5 files changed, 70 insertions, 0 deletions
diff --git a/modules/qmk/hello_world/hello_world.c b/modules/qmk/hello_world/hello_world.c
new file mode 100644
index 0000000000..dcabfc60ea
--- /dev/null
+++ b/modules/qmk/hello_world/hello_world.c
@@ -0,0 +1,33 @@
+// Copyright 2025 Nick Brassel (@tzarc)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#include QMK_KEYBOARD_H
+
+#include "introspection.h"
+
+ASSERT_COMMUNITY_MODULES_MIN_API_VERSION(1, 0, 0);
+
+uint32_t delayed_hello_world(uint32_t trigger_time, void *cb_arg) {
+ dprintf("Hello, world! I'm a QMK based keyboard! The keymap array size is %d bytes.\n", (int)hello_world_introspection().total_size);
+ return 0;
+}
+
+void keyboard_post_init_hello_world(void) {
+ keyboard_post_init_hello_world_kb();
+ defer_exec(10000, delayed_hello_world, NULL);
+}
+
+bool process_record_hello_world(uint16_t keycode, keyrecord_t *record) {
+ if (!process_record_hello_world_kb(keycode, record)) {
+ return false;
+ }
+
+ switch (keycode) {
+ case COMMUNITY_MODULE_HELLO:
+ if (record->event.pressed) {
+ SEND_STRING("Hello there.");
+ break;
+ }
+ }
+
+ return true;
+}
diff --git a/modules/qmk/hello_world/introspection.c b/modules/qmk/hello_world/introspection.c
new file mode 100644
index 0000000000..2c32a074f5
--- /dev/null
+++ b/modules/qmk/hello_world/introspection.c
@@ -0,0 +1,10 @@
+// Copyright 2025 Nick Brassel (@tzarc)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+hello_world_introspection_t hello_world_introspection(void) {
+ hello_world_introspection_t introspection = {
+ .total_size = sizeof(keymaps),
+ .layer_count = sizeof(keymaps) / sizeof(keymaps[0]),
+ };
+ return introspection;
+}
diff --git a/modules/qmk/hello_world/introspection.h b/modules/qmk/hello_world/introspection.h
new file mode 100644
index 0000000000..fd3d7f24a0
--- /dev/null
+++ b/modules/qmk/hello_world/introspection.h
@@ -0,0 +1,10 @@
+// Copyright 2025 Nick Brassel (@tzarc)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#include QMK_KEYBOARD_H
+
+typedef struct hello_world_introspection_t {
+ int16_t total_size;
+ int16_t layer_count;
+} hello_world_introspection_t;
+
+hello_world_introspection_t hello_world_introspection(void);
diff --git a/modules/qmk/hello_world/qmk_module.json b/modules/qmk/hello_world/qmk_module.json
new file mode 100644
index 0000000000..bbd00f3fcc
--- /dev/null
+++ b/modules/qmk/hello_world/qmk_module.json
@@ -0,0 +1,15 @@
+{
+ "module_name": "Hello World",
+ "maintainer": "QMK Maintainers",
+ "license": "GPL-2.0-or-later",
+ "features": {
+ "console": true,
+ "deferred_exec": true
+ },
+ "keycodes": [
+ {
+ "key": "COMMUNITY_MODULE_HELLO",
+ "aliases": ["CM_HELO"]
+ }
+ ]
+}
diff --git a/modules/qmk/hello_world/rules.mk b/modules/qmk/hello_world/rules.mk
new file mode 100644
index 0000000000..91806fb1e3
--- /dev/null
+++ b/modules/qmk/hello_world/rules.mk
@@ -0,0 +1,2 @@
+# Just a simple rules.mk which tests that they work from a community module.
+$(shell $(QMK_BIN) hello -n "from QMK's hello world community module")