summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormarksard <38324387+marksard@users.noreply.github.com>2020-09-04 20:14:34 +0900
committerGitHub <noreply@github.com>2020-09-04 04:14:34 -0700
commit6e32dd123ff0ff49768f43c97bbc10836ff8a629 (patch)
tree02e1288b9873a41af13707447985d4318372b9d4
parent82a830196f5a71ced413af302ce4dd12ec034782 (diff)
[Keyboard] add rhymestone by marksard (#9708)
* Keyboard: add treeadstone48 * rename layout defines * Use of pragma once * move common include code * fixed info.json * change keymap layout from kc to normal * fix alpha revision keymap * fixed info.json * remove USE_Link_Time_Optimization * Add keyboard the Rhymestone * fixed by PR review * fixed by review * Update keyboards/rhymestone/readme.md fixed * Fixed possible changes to oled_write_P * Change the name of the layout definition * Update keyboards/rhymestone/info.json * Update keyboards/rhymestone/keymaps/default/keymap.c * Update keyboards/rhymestone/keymaps/default/keymap.c * Update keyboards/rhymestone/keymaps/default/keymap.c * Update keyboards/rhymestone/keymaps/default/keymap.c * Update keyboards/rhymestone/keymaps/switch_tester/keymap.c * Update keyboards/rhymestone/keymaps/switch_tester/keymap.c * Update keyboards/rhymestone/rev1/rev1.h * add empty rules.mk in rev1 * Update from other review * Update keyboards/rhymestone/rules.mk * fixed other review * move rhymestone to marksard directory * move rhymestone to marksard directory (Commit the necessary modifications) * remove
-rw-r--r--.vscode/settings.json3
-rw-r--r--keyboards/marksard/rhymestone/common/glcdfont.c233
-rw-r--r--keyboards/marksard/rhymestone/common/oled_helper.c87
-rw-r--r--keyboards/marksard/rhymestone/common/oled_helper.h32
-rw-r--r--keyboards/marksard/rhymestone/info.json213
-rw-r--r--keyboards/marksard/rhymestone/keymaps/default/config.h27
-rw-r--r--keyboards/marksard/rhymestone/keymaps/default/keymap.c226
-rw-r--r--keyboards/marksard/rhymestone/keymaps/default/rules.mk9
-rw-r--r--keyboards/marksard/rhymestone/keymaps/switch_tester/keymap.c76
-rw-r--r--keyboards/marksard/rhymestone/keymaps/switch_tester/readme.md3
-rw-r--r--keyboards/marksard/rhymestone/keymaps/switch_tester/rules.mk7
-rw-r--r--keyboards/marksard/rhymestone/readme.md18
-rw-r--r--keyboards/marksard/rhymestone/rev1/config.h152
-rw-r--r--keyboards/marksard/rhymestone/rev1/rev1.c108
-rw-r--r--keyboards/marksard/rhymestone/rev1/rev1.h89
-rw-r--r--keyboards/marksard/rhymestone/rev1/rules.mk0
-rw-r--r--keyboards/marksard/rhymestone/rules.mk27
17 files changed, 1309 insertions, 1 deletions
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 9aa546a787..775b3df172 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -16,7 +16,8 @@
"*.hpp": "cpp",
"xstddef": "c",
"type_traits": "c",
- "utility": "c"
+ "utility": "c",
+ "ranges": "c"
},
"[markdown]": {
"editor.trimAutoWhitespace": false,
diff --git a/keyboards/marksard/rhymestone/common/glcdfont.c b/keyboards/marksard/rhymestone/common/glcdfont.c
new file mode 100644
index 0000000000..d9438aa5a7
--- /dev/null
+++ b/keyboards/marksard/rhymestone/common/glcdfont.c
@@ -0,0 +1,233 @@
+// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0.
+// See gfxfont.h for newer custom bitmap font info.
+
+#include "progmem.h"
+
+// Standard ASCII 5x7 font
+
+static const unsigned char font[] PROGMEM = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00,
+ 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00,
+ 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00,
+ 0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00,
+ 0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00,
+ 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00,
+ 0x00, 0x18, 0x3C, 0x18, 0x00, 0x00,
+ 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00,
+ 0x00, 0x18, 0x24, 0x18, 0x00, 0x00,
+ 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00,
+ 0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00,
+ 0x26, 0x29, 0x79, 0x29, 0x26, 0x00,
+ 0x40, 0x7F, 0x05, 0x05, 0x07, 0x00,
+ 0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00,
+ 0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00,
+ 0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00,
+ 0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00,
+ 0x14, 0x22, 0x7F, 0x22, 0x14, 0x00,
+ 0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00,
+ 0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00,
+ 0x00, 0x66, 0x89, 0x95, 0x6A, 0x00,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x00,
+ 0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00,
+ 0x08, 0x04, 0x7E, 0x04, 0x08, 0x00,
+ 0x10, 0x20, 0x7E, 0x20, 0x10, 0x00,
+ 0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00,
+ 0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00,
+ 0x1E, 0x10, 0x10, 0x10, 0x10, 0x00,
+ 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00,
+ 0x30, 0x38, 0x3E, 0x38, 0x30, 0x00,
+ 0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
+ 0x00, 0x07, 0x00, 0x07, 0x00, 0x00,
+ 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00,
+ 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00,
+ 0x23, 0x13, 0x08, 0x64, 0x62, 0x00,
+ 0x36, 0x49, 0x56, 0x20, 0x50, 0x00,
+ 0x00, 0x08, 0x07, 0x03, 0x00, 0x00,
+ 0x00, 0x1C, 0x22, 0x41, 0x00, 0x00,
+ 0x00, 0x41, 0x22, 0x1C, 0x00, 0x00,
+ 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00,
+ 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00,
+ 0x00, 0x80, 0x70, 0x30, 0x00, 0x00,
+ 0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
+ 0x00, 0x00, 0x60, 0x60, 0x00, 0x00,
+ 0x20, 0x10, 0x08, 0x04, 0x02, 0x00,
+ 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00,
+ 0x00, 0x42, 0x7F, 0x40, 0x00, 0x00,
+ 0x72, 0x49, 0x49, 0x49, 0x46, 0x00,
+ 0x21, 0x41, 0x49, 0x4D, 0x33, 0x00,
+ 0x18, 0x14, 0x12, 0x7F, 0x10, 0x00,
+ 0x27, 0x45, 0x45, 0x45, 0x39, 0x00,
+ 0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00,
+ 0x41, 0x21, 0x11, 0x09, 0x07, 0x00,
+ 0x36, 0x49, 0x49, 0x49, 0x36, 0x00,
+ 0x46, 0x49, 0x49, 0x29, 0x1E, 0x00,
+ 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0x34, 0x00, 0x00, 0x00,
+ 0x00, 0x08, 0x14, 0x22, 0x41, 0x00,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x00,
+ 0x00, 0x41, 0x22, 0x14, 0x08, 0x00,
+ 0x02, 0x01, 0x59, 0x09, 0x06, 0x00,
+ 0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00,
+ 0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00,
+ 0x7F, 0x49, 0x49, 0x49, 0x36, 0x00,
+ 0x3E, 0x41, 0x41, 0x41, 0x22, 0x00,
+ 0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00,
+ 0x7F, 0x49, 0x49, 0x49, 0x41, 0x00,
+ 0x7F, 0x09, 0x09, 0x09, 0x01, 0x00,
+ 0x3E, 0x41, 0x41, 0x51, 0x73, 0x00,
+ 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00,
+ 0x00, 0x41, 0x7F, 0x41, 0x00, 0x00,
+ 0x20, 0x40, 0x41, 0x3F, 0x01, 0x00,
+ 0x7F, 0x08, 0x14, 0x22, 0x41, 0x00,
+ 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00,
+ 0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00,
+ 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00,
+ 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00,
+ 0x7F, 0x09, 0x09, 0x09, 0x06, 0x00,
+ 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00,
+ 0x7F, 0x09, 0x19, 0x29, 0x46, 0x00,
+ 0x26, 0x49, 0x49, 0x49, 0x32, 0x00,
+ 0x03, 0x01, 0x7F, 0x01, 0x03, 0x00,
+ 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00,
+ 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00,
+ 0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00,
+ 0x63, 0x14, 0x08, 0x14, 0x63, 0x00,
+ 0x03, 0x04, 0x78, 0x04, 0x03, 0x00,
+ 0x61, 0x59, 0x49, 0x4D, 0x43, 0x00,
+ 0x00, 0x7F, 0x41, 0x41, 0x41, 0x00,
+ 0x02, 0x04, 0x08, 0x10, 0x20, 0x00,
+ 0x00, 0x41, 0x41, 0x41, 0x7F, 0x00,
+ 0x04, 0x02, 0x01, 0x02, 0x04, 0x00,
+ 0x40, 0x40, 0x40, 0x40, 0x40, 0x00,
+ 0x00, 0x03, 0x07, 0x08, 0x00, 0x00,
+ 0x20, 0x54, 0x54, 0x78, 0x40, 0x00,
+ 0x7F, 0x28, 0x44, 0x44, 0x38, 0x00,
+ 0x38, 0x44, 0x44, 0x44, 0x28, 0x00,
+ 0x38, 0x44, 0x44, 0x28, 0x7F, 0x00,
+ 0x38, 0x54, 0x54, 0x54, 0x18, 0x00,
+ 0x00, 0x08, 0x7E, 0x09, 0x02, 0x00,
+ 0x18, 0x24, 0x24, 0x1C, 0x78, 0x00,
+ 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00,
+ 0x00, 0x44, 0x7D, 0x40, 0x00, 0x00,
+ 0x20, 0x40, 0x40, 0x3D, 0x00, 0x00,
+ 0x7F, 0x10, 0x28, 0x44, 0x00, 0x00,
+ 0x00, 0x41, 0x7F, 0x40, 0x00, 0x00,
+ 0x7C, 0x04, 0x78, 0x04, 0x78, 0x00,
+ 0x7C, 0x08, 0x04, 0x04, 0x78, 0x00,
+ 0x38, 0x44, 0x44, 0x44, 0x38, 0x00,
+ 0xFC, 0x18, 0x24, 0x24, 0x18, 0x00,
+ 0x18, 0x24, 0x24, 0x18, 0xFC, 0x00,
+ 0x7C, 0x08, 0x04, 0x04, 0x08, 0x00,
+ 0x48, 0x54, 0x54, 0x54, 0x24, 0x00,
+ 0x04, 0x04, 0x3F, 0x44, 0x24, 0x00,
+ 0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00,
+ 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00,
+ 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00,
+ 0x44, 0x28, 0x10, 0x28, 0x44, 0x00,
+ 0x4C, 0x10, 0x10, 0x10, 0x7C, 0x00,
+ 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00,
+ 0x00, 0x08, 0x36, 0x41, 0x00, 0x00,
+ 0x00, 0x00, 0x77, 0x00, 0x00, 0x00,
+ 0x00, 0x41, 0x36, 0x08, 0x00, 0x00,
+ 0x02, 0x01, 0x02, 0x04, 0x02, 0x00,
+ 0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00,
+ 0x00, 0x00, 0xD8, 0xDE, 0xDE, 0xDE,
+ 0x1E, 0x1E, 0x1E, 0x1E, 0xFE, 0xFE,
+ 0xFE, 0xFE, 0x00, 0xF0, 0xFF, 0xFF,
+ 0xFF, 0xE3, 0xE0, 0xE0, 0xE0, 0xE0,
+ 0xE0, 0xE0, 0x00, 0x80, 0xE0, 0xE0,
+ 0xE0, 0x00, 0x00, 0x00, 0x00, 0xE0,
+ 0xE0, 0xE0, 0xE0, 0x00, 0xE0, 0xE0,
+ 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
+ 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
+ 0xE0, 0xE0, 0xE0, 0x00, 0xC0, 0xE0,
+ 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
+ 0xE0, 0xE0, 0xE0, 0x00, 0x80, 0xE0,
+ 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
+ 0xE0, 0xE0, 0xE0, 0xE0, 0x00, 0xFC,
+ 0xFC, 0xFC, 0xFC, 0xE0, 0xE0, 0x80,
+ 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
+ 0xE0, 0xE0, 0xE0, 0xE0, 0xC0, 0x00,
+ 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
+ 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x80,
+ 0x00, 0xC0, 0xE0, 0xE0, 0xE0, 0xE0,
+ 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xFE, 0xFF, 0xFF, 0x7F, 0x0F,
+ 0x0E, 0x0E, 0xCE, 0xFF, 0xFF, 0xFF,
+ 0x7F, 0x80, 0xFE, 0xFF, 0xFF, 0x3F,
+ 0x01, 0x01, 0x01, 0x81, 0xFF, 0xFF,
+ 0xFF, 0x3F, 0xE0, 0xFF, 0xFF, 0xFF,
+ 0x8F, 0x80, 0x80, 0x80, 0xF8, 0xFF,
+ 0xFF, 0x7F, 0xC1, 0xFE, 0xFF, 0xFF,
+ 0x1F, 0x01, 0x01, 0xE1, 0xFF, 0xFF,
+ 0xFF, 0x0F, 0x01, 0x01, 0xF1, 0xFF,
+ 0xFF, 0xFF, 0x07, 0xFC, 0xFF, 0xFF,
+ 0xFF, 0x9D, 0x9D, 0x9D, 0x9D, 0x9F,
+ 0x9F, 0x9F, 0x1F, 0x80, 0x9F, 0x9F,
+ 0x9F, 0x9F, 0x9D, 0x9D, 0xDD, 0xFD,
+ 0xFD, 0xFD, 0x39, 0xC0, 0xFF, 0xFF,
+ 0xFF, 0x9F, 0x81, 0x01, 0xF1, 0xFF,
+ 0xFF, 0xFF, 0x87, 0x81, 0x81, 0x81,
+ 0xF9, 0xFF, 0xFF, 0xFF, 0x03, 0xFC,
+ 0xFF, 0xFF, 0x3F, 0x01, 0x01, 0x01,
+ 0x01, 0xFF, 0xFF, 0xFF, 0x7F, 0xC0,
+ 0xFF, 0xFF, 0xFF, 0x9F, 0x9D, 0x9D,
+ 0x9D, 0x9D, 0x9F, 0x9F, 0x1F, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x07, 0x07, 0x07, 0x07, 0x00, 0x00,
+ 0x00, 0x00, 0x07, 0x07, 0x07, 0x07,
+ 0x00, 0x07, 0x07, 0x07, 0x07, 0x00,
+ 0x00, 0x00, 0x00, 0x07, 0x07, 0x07,
+ 0x07, 0x60, 0x73, 0x77, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x7F, 0x7F, 0x7F,
+ 0x1F, 0x00, 0x07, 0x07, 0x07, 0x07,
+ 0x00, 0x00, 0x00, 0x07, 0x07, 0x07,
+ 0x03, 0x00, 0x00, 0x00, 0x07, 0x07,
+ 0x07, 0x01, 0x00, 0x07, 0x07, 0x07,
+ 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+ 0x07, 0x00, 0x00, 0x07, 0x07, 0x07,
+ 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+ 0x07, 0x03, 0x00, 0x03, 0x07, 0x07,
+ 0x07, 0x07, 0x07, 0x00, 0x03, 0x07,
+ 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+ 0x07, 0x07, 0x03, 0x00, 0x07, 0x07,
+ 0x07, 0x07, 0x00, 0x00, 0x00, 0x00,
+ 0x07, 0x07, 0x07, 0x07, 0x00, 0x03,
+ 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+ 0x07, 0x07, 0x07, 0x07, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
diff --git a/keyboards/marksard/rhymestone/common/oled_helper.c b/keyboards/marksard/rhymestone/common/oled_helper.c
new file mode 100644
index 0000000000..537650025c
--- /dev/null
+++ b/keyboards/marksard/rhymestone/common/oled_helper.c
@@ -0,0 +1,87 @@
+#ifdef OLED_DRIVER_ENABLE
+#include QMK_KEYBOARD_H
+#include <stdio.h>
+#include <string.h>
+
+void render_logo(void) {
+
+ static const char PROGMEM logo_buf[]={
+ 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
+ 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
+ 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,
+ 0};
+
+ oled_write_P(logo_buf, false);
+}
+
+void render_lock_status(void) {
+
+ // Host Keyboard LED Status
+ led_t led_state = host_keyboard_led_state();
+
+ oled_write_P(PSTR("Lock:"), false);
+ if (led_state.num_lock) {
+ oled_write_P(PSTR("Num "), false);
+ }
+ if (led_state.caps_lock) {
+ oled_write_P(PSTR("Caps "), false);
+ }
+ if (led_state.scroll_lock) {
+ oled_write_P(PSTR("Scrl"), false);
+ }
+
+ oled_write_P(PSTR("\n"), false);
+}
+
+static char keylog_buf[24] = "Key state ready.\n";
+const char code_to_name[60] = {
+ ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
+ 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
+ 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
+ '1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
+ 'R', 'E', 'B', 'T', ' ', '-', ' ', '@', ' ', ' ',
+ ' ', ';', ':', ' ', ',', '.', '/', ' ', ' ', ' '};
+
+void update_key_status(uint16_t keycode, keyrecord_t *record) {
+
+ if (!record->event.pressed) return;
+
+ char name = (keycode < 60) ? code_to_name[keycode] : ' ';
+ snprintf(keylog_buf, sizeof(keylog_buf) - 1, "Key:%dx%d %2x %c\n",
+ record->event.key.row, record->event.key.col,
+ (uint16_t)keycode, name);
+}
+
+void render_key_status(void) {
+
+ oled_write(keylog_buf, false);
+}
+
+#ifdef RGBLIGHT_ENABLE
+extern rgblight_config_t rgblight_config;
+
+static char led_buf[24] = "LED state ready.\n";
+rgblight_config_t rgblight_config_bak;
+void update_led_status(void) {
+
+ if (rgblight_config_bak.enable != rgblight_config.enable ||
+ rgblight_config_bak.mode != rgblight_config.mode ||
+ rgblight_config_bak.hue != rgblight_config.hue ||
+ rgblight_config_bak.sat != rgblight_config.sat ||
+ rgblight_config_bak.val != rgblight_config.val
+ ) {
+ snprintf(led_buf, sizeof(led_buf) - 1, "LED%c:%2d hsv:%2d %2d %2d\n",
+ rgblight_config.enable ? '*' : '.', (uint8_t)rgblight_config.mode,
+ (uint8_t)(rgblight_config.hue / RGBLIGHT_HUE_STEP),
+ (uint8_t)(rgblight_config.sat / RGBLIGHT_SAT_STEP),
+ (uint8_t)(rgblight_config.val / RGBLIGHT_VAL_STEP));
+ rgblight_config_bak = rgblight_config;
+ }
+}
+
+void render_led_status(void) {
+
+ oled_write(led_buf, false);
+}
+#endif
+#endif
diff --git a/keyboards/marksard/rhymestone/common/oled_helper.h b/keyboards/marksard/rhymestone/common/oled_helper.h
new file mode 100644
index 0000000000..02f7b94fa5
--- /dev/null
+++ b/keyboards/marksard/rhymestone/common/oled_helper.h
@@ -0,0 +1,32 @@
+#ifdef OLED_DRIVER_ENABLE
+
+void render_logo(void);
+void render_lock_status(void);
+void update_key_status(uint16_t keycode, keyrecord_t *record);
+void render_key_status(void);
+
+#define RENDER_LOGO() render_logo()
+#define RENDER_LOCK_STATUS() render_lock_status()
+#define UPDATE_KEY_STATUS(a, b) update_key_status(a, b)
+#define RENDER_KEY_STATUS() render_key_status()
+
+#ifdef RGBLIGHT_ENABLE
+ void update_led_status(void);
+ void render_led_status(void);
+ #define UPDATE_LED_STATUS() update_led_status()
+ #define RENDER_LED_STATUS() render_led_status()
+#else
+ #define UPDATE_LED_STATUS()
+ #define RENDER_LED_STATUS()
+#endif
+
+#else
+
+#define RENDER_LOGO()
+#define RENDER_LOCK_STATUS()
+#define UPDATE_KEY_STATUS(a, b)
+#define RENDER_KEY_STATUS()
+#define UPDATE_LED_STATUS()
+#define RENDER_LED_STATUS()
+
+#endif
diff --git a/keyboards/marksard/rhymestone/info.json b/keyboards/marksard/rhymestone/info.json
new file mode 100644
index 0000000000..2c1ba9b37c
--- /dev/null
+++ b/keyboards/marksard/rhymestone/info.json
@@ -0,0 +1,213 @@
+{
+ "keyboard_name": "Rhymestone",
+ "url": "https://github.com/marksard/Keyboards",
+ "maintainer": "marksard",
+ "width": 11,
+ "height": 4,
+ "layouts": {
+ "LAYOUT_ortho_4x10": {
+ "layout": [
+ {
+ "label": "Q",
+ "x": 0,
+ "y": 0
+ },
+ {
+ "label": "W",
+ "x": 1,
+ "y": 0
+ },
+ {
+ "label": "E",
+ "x": 2,
+ "y": 0
+ },
+ {
+ "label": "R",
+ "x": 3,
+ "y": 0
+ },
+ {
+ "label": "T",
+ "x": 4,
+ "y": 0
+ },
+ {
+ "label": "Y",
+ "x": 6,
+ "y": 0
+ },
+ {
+ "label": "U",
+ "x": 7,
+ "y": 0
+ },
+ {
+ "label": "I",
+ "x": 8,
+ "y": 0
+ },
+ {
+ "label": "O",
+ "x": 9,
+ "y": 0
+ },
+ {
+ "label": "P",
+ "x": 10,
+ "y": 0
+ },
+ {
+ "label": "A",
+ "x": 0,
+ "y": 1
+ },
+ {
+ "label": "S",
+ "x": 1,
+ "y": 1
+ },
+ {
+ "label": "D",
+ "x": 2,
+ "y": 1
+ },
+ {
+ "label": "F",
+ "x": 3,
+ "y": 1
+ },
+ {
+ "label": "G",
+ "x": 4,
+ "y": 1
+ },
+ {
+ "label": "H",
+ "x": 6,
+ "y": 1
+ },
+ {
+ "label": "J",
+ "x": 7,
+ "y": 1
+ },
+ {
+ "label": "K",
+ "x": 8,
+ "y": 1
+ },
+ {
+ "label": "L",
+ "x": 9,
+ "y": 1
+ },
+ {
+ "label": "Enter",
+ "x": 10,
+ "y": 1
+ },
+ {
+ "label": "Z",
+ "x": 0,
+ "y": 2
+ },
+ {
+ "label": "X",
+ "x": 1,
+ "y": 2
+ },
+ {
+ "label": "C",
+ "x": 2,
+ "y": 2
+ },
+ {
+ "label": "V",
+ "x": 3,
+ "y": 2
+ },
+ {
+ "label": "B",
+ "x": 4,
+ "y": 2
+ },
+ {
+ "label": "N",
+ "x": 6,
+ "y": 2
+ },
+ {
+ "label": "M",
+ "x": 7,
+ "y": 2
+ },
+ {
+ "label": ",",
+ "x": 8,
+ "y": 2
+ },
+ {
+ "label": ".",
+ "x": 9,
+ "y": 2
+ },
+ {
+ "label": "/",
+ "x": 10,
+ "y": 2
+ },
+ {
+ "label": "Ctrl",
+ "x": 0,
+ "y": 3
+ },
+ {
+ "label": "Win",
+ "x": 1,
+ "y": 3
+ },
+ {
+ "label": "Alt",
+ "x": 2,
+ "y": 3
+ },
+ {
+ "label": "Lower",
+ "x": 3,
+ "y": 3
+ },
+ {
+ "label": "backspace",
+ "x": 4,
+ "y": 3
+ },
+ {
+ "label": "space",
+ "x": 6,
+ "y": 3
+ },
+ {
+ "label": "Upper",
+ "x": 7,
+ "y": 3
+ },
+ {
+ "label": "Alt",
+ "x": 8,
+ "y": 3
+ },
+ {
+ "label": "App",
+ "x": 9,
+ "y": 3
+ },
+ {
+ "label": "Ctrl",
+ "x": 10,
+ "y": 3
+ }
+ ]
+ }
+ }
+}
diff --git a/keyboards/marksard/rhymestone/keymaps/default/config.h b/keyboards/marksard/rhymestone/keymaps/default/config.h
new file mode 100644
index 0000000000..95f2d039b2
--- /dev/null
+++ b/keyboards/marksard/rhymestone/keymaps/default/config.h
@@ -0,0 +1,27 @@
+/* Copyright 2020 marksard
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// place overrides here
+
+// If you use the HashTwenty(alpha), please enable USE_HASHTWENTY
+// #define USE_HASHTWENTY
+
+// If you plug in the USB on the right side, please enable MASTER_RIGHT
+// #define MASTER_RIGHT
+
+#define OLED_FONT_H "keyboards/rhymestone/common/glcdfont.c"
diff --git a/keyboards/marksard/rhymestone/keymaps/default/keymap.c b/keyboards/marksard/rhymestone/keymaps/default/keymap.c
new file mode 100644
index 0000000000..2d695f76b1
--- /dev/null
+++ b/keyboards/marksard/rhymestone/keymaps/default/keymap.c
@@ -0,0 +1,226 @@
+/* Copyright 2020 marksard
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+#include "./common/oled_helper.h"
+
+enum layer_number {
+ _BASE,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+};
+
+enum custom_keycodes {
+ LOWER = SAFE_RANGE,
+ RAISE,
+ ADJUST,
+ KANJI,
+ RGBRST
+};
+
+// Base layer mod tap
+#define KC_Z_SF LSFT_T(KC_Z)
+#define KC_SLSF RSFT_T(KC_SLSH)
+
+// Lower layer mod tap
+#define KC_11SF LSFT_T(KC_F11)
+#define KC_GRSF RSFT_T(KC_GRV)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT_ortho_4x10(
+ //,---------------------------------------------------------------------------------------------------.
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT,
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_Z_SF, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSF,
+ //`---------+---------+---------+---------+---------+---------+---------+---------+---------+---------'
+ KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_BSPC, KC_SPC, RAISE, KC_RGUI, KC_APP, KC_RCTL
+ //,---------------------------------------------------------------------------------------------------.
+ ),
+
+ [_LOWER] = LAYOUT_ortho_4x10(
+ //,---------------------------------------------------------------------------------------------------.
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, XXXXXXX, XXXXXXX, XXXXXXX, KC_SCLN, KC_QUOT,
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_11SF, KC_F12, KC_ESC, KC_TAB, KANJI, KC_DEL, XXXXXXX, XXXXXXX, KC_RO, KC_GRSF,
+ //`---------+---------+---------+---------+---------+---------+---------+---------+---------+---------'
+ _______, _______, _______, _______, KC_DEL, _______, _______, _______, _______, _______
+ //,---------------------------------------------------------------------------------------------------.
+ ),
+
+ [_RAISE] = LAYOUT_ortho_4x10(
+ //,---------------------------------------------------------------------------------------------------.
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_RSFT,
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MINS, KC_RO, KC_COMM, KC_DOT, KC_SLSF,
+ //`---------+---------+---------+---------+---------+---------+---------+---------+---------+---------'
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ //,---------------------------------------------------------------------------------------------------.
+ ),
+
+ [_ADJUST] = LAYOUT_ortho_4x10(
+ //,---------------------------------------------------------------------------------------------------.
+ RESET, RGBRST, AG_NORM, AG_SWAP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_INS, KC_PSCR,
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_NLCK,
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, KC_BTN1, KC_BTN2, XXXXXXX, XXXXXXX, XXXXXXX,
+ //`---------+---------+---------+---------+---------+---------+---------+---------+---------+---------'
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ //,---------------------------------------------------------------------------------------------------.
+ )
+};
+
+#define L_BASE _BASE
+#define L_LOWER (1<<_LOWER)
+#define L_RAISE (1<<_RAISE)
+#define L_ADJUST (1<<_ADJUST)
+#define L_ADJUST_TRI (L_ADJUST|L_RAISE|L_LOWER)
+
+#ifdef OLED_DRIVER_ENABLE
+#include <stdio.h>
+#include <string.h>
+
+typedef struct {
+ uint8_t state;
+ char name[8];
+}LAYER_DISPLAY_NAME;
+
+#define LAYER_DISPLAY_MAX 5
+const LAYER_DISPLAY_NAME layer_display_name[LAYER_DISPLAY_MAX] = {
+ {L_BASE, "Base"},
+ {L_BASE + 1, "Base"},
+ {L_LOWER, "Lower"},
+ {L_RAISE, "Raise"},
+ {L_ADJUST_TRI, "Adjust"}
+};
+
+static inline const char* get_leyer_status(void) {
+
+ for (uint8_t i = 0; i < LAYER_DISPLAY_MAX; ++i) {
+ if (layer_state == 0 && layer_display_name[i].state == default_layer_state) {
+
+ return layer_display_name[i].name;
+ } else if (layer_state != 0 && layer_display_name[i].state == layer_state) {
+
+ return layer_display_name[i].name;
+ }
+ }
+
+ return "?";
+}
+
+static char layer_status_buf[24] = "Layer state ready.\n";
+static inline void update_keymap_status(void) {
+
+ snprintf(layer_status_buf, sizeof(layer_status_buf) - 1, "OS:%s Layer:%s\n",
+ keymap_config.swap_lalt_lgui? "win" : "mac", get_leyer_status());
+}
+
+static inline void render_keymap_status(void) {
+
+ oled_write(layer_status_buf, false);
+}
+
+#define UPDATE_KEYMAP_STATUS() update_keymap_status()
+
+static inline void render_status(void) {
+
+ UPDATE_LED_STATUS();
+ RENDER_LED_STATUS();
+ render_keymap_status();
+ RENDER_LOCK_STATUS();
+ RENDER_KEY_STATUS();
+}
+
+oled_rotation_t oled_init_user(oled_rotation_t rotation) {
+
+ if (is_keyboard_master())
+ return OLED_ROTATION_180; // flips the display 180 degrees if offhand
+ return rotation;
+}
+
+void oled_task_user(void) {
+
+ if (is_keyboard_master()) {
+ render_status();
+ } else {
+ render_logo();
+ }
+}
+
+#else
+
+#define UPDATE_KEYMAP_STATUS()
+
+#endif
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+
+ UPDATE_KEY_STATUS(keycode, record);
+
+ bool result = false;
+ switch (keycode) {
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ } else {
+ layer_off(_LOWER);
+ }
+
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ } else {
+ layer_off(_RAISE);
+ }
+
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ break;
+ case KANJI:
+ if (record->event.pressed) {
+ if (keymap_config.swap_lalt_lgui == false) {
+ register_code(KC_LANG2);
+ } else {
+ register_code16(A(KC_GRV));
+ }
+ } else {
+ unregister_code(KC_LANG2);
+ }
+ break;
+ #ifdef RGBLIGHT_ENABLE
+ case RGBRST:
+ if (record->event.pressed) {
+ eeconfig_update_rgblight_default();
+ rgblight_enable();
+ }
+ break;
+ #endif
+ default:
+ result = true;
+ break;
+ }
+
+ UPDATE_KEYMAP_STATUS();
+ return result;
+}
diff --git a/keyboards/marksard/rhymestone/keymaps/default/rules.mk b/keyboards/marksard/rhymestone/keymaps/default/rules.mk
new file mode 100644
index 0000000000..c86cab8cce
--- /dev/null
+++ b/keyboards/marksard/rhymestone/keymaps/default/rules.mk
@@ -0,0 +1,9 @@
+MOUSEKEY_ENABLE = yes # Mouse keys
+TAP_DANCE_ENABLE = no
+
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+OLED_DRIVER_ENABLE = no
+LTO_ENABLE = yes
+
+# If you want to change the display of OLED, you need to change here
+SRC += ./common/oled_helper.c \
diff --git a/keyboards/marksard/rhymestone/keymaps/switch_tester/keymap.c b/keyboards/marksard/rhymestone/keymaps/switch_tester/keymap.c
new file mode 100644
index 0000000000..1d4e78af80
--- /dev/null
+++ b/keyboards/marksard/rhymestone/keymaps/switch_tester/keymap.c
@@ -0,0 +1,76 @@
+/* Copyright 2020 marksard
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ *