diff --git a/.github/actions/checkout-qmk_firmware/action.yml b/.github/actions/checkout-qmk_firmware/action.yml
index 4eb816b1a..19fce257f 100644
--- a/.github/actions/checkout-qmk_firmware/action.yml
+++ b/.github/actions/checkout-qmk_firmware/action.yml
@@ -2,7 +2,7 @@ name: 'Checkout QMK firmware'
inputs:
version:
- default: '0.22.3'
+ default: '0.22.14'
type: string
required: false
path:
diff --git a/bin/build-keyball-all.sh b/bin/build-keyball-all.sh
new file mode 100644
index 000000000..e36032324
--- /dev/null
+++ b/bin/build-keyball-all.sh
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+set -u
+
+id=$(date "+%Y%m%d_%H%M%S")
+logdir=tmp/build_log/${id}
+
+keyboards=()
+keyboards+=(keyball39)
+keyboards+=(keyball44)
+keyboards+=(keyball46)
+keyboards+=(keyball61)
+keyboards+=(one47)
+
+keymaps=()
+keymaps+=(test)
+keymaps+=(default)
+keymaps+=(via)
+
+mkdir -p ${logdir}
+
+for kb in "${keyboards[@]}" ; do
+ tmpmaps=(${keymaps[@]})
+ # Add special keymaps for keyball46
+ if [ $kb = keyball46 ] ; then
+ tmpmaps+=(test_Left test_Both)
+ tmpmaps+=(via_Left via_Both)
+ fi
+ for km in "${tmpmaps[@]}" ; do
+ ( make SKIP_GIT=yes KEEP_BIN=true COLOR=false "keyball/${kb}:${km}" 2>&1 | tee "${logdir}/${kb}-${km}.log" | LANG=C.utf-8 ts "[${kb}:${km}]" ) &
+ done
+done
+
+wait
+
+$(dirname "$0")/hexsize.sh keyball_*.hex | tee "${logdir}/size.tsv"
diff --git a/bin/compare-size.sh b/bin/compare-size.sh
new file mode 100644
index 000000000..75aade1c4
--- /dev/null
+++ b/bin/compare-size.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+set -u
+
+before=$1 ; shift
+after=$1 ; shift
+format=markdown
+
+sqlite3 ':memory:' \
+ ".mode tabs" \
+ ".import ${before} b" \
+ ".import ${after} a" \
+ ".mode ${format}" \
+ "select b.name as name, format('%,d', b.size) as before, format('%,d', a.size) as after, format('%+,d', a.size - b.size) as diff, case when a.size > 28672 then 'X' else '' end as oversized from b join a on a.name = b.name;" \
+ ".print ''" \
+ "select format('%+g', avg(a.size - b.size)) as 'avg(diff)' from b join a on a.name = b.name;"
+
diff --git a/bin/hexsize.sh b/bin/hexsize.sh
new file mode 100644
index 000000000..f55babfc3
--- /dev/null
+++ b/bin/hexsize.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+set -eu
+
+max=28672
+
+echo "name size diff check"
+for f in "$@" ; do
+ size=$(cut -c 2,3 "$f" | awk '{s+=strtonum("0x"$1)}END{print s}')
+ check=$(if [ $size -gt $max ] ; then echo "X" ; else echo "O" ; fi)
+ sign=$(if [ $size -gt $max ] ; then echo "+" ; else echo "" ; fi)
+ diff=$(expr $size - $max)
+ echo "$f $size $sign$diff $check"
+done
diff --git a/qmk_firmware/keyboards/keyball/keyball39/config.h b/qmk_firmware/keyboards/keyball/keyball39/config.h
index 0d3eb28bd..692c3aefd 100644
--- a/qmk_firmware/keyboards/keyball/keyball39/config.h
+++ b/qmk_firmware/keyboards/keyball/keyball39/config.h
@@ -58,7 +58,9 @@ along with this program. If not, see .
#endif
#ifndef OLED_FONT_H
-# define OLED_FONT_H "keyboards/keyball/lib/glcdfont.c"
+# define OLED_FONT_H "keyboards/keyball/lib/logofont/logofont.c"
+# define OLED_FONT_START 32
+# define OLED_FONT_END 195
#endif
#if !defined(LAYER_STATE_8BIT) && !defined(LAYER_STATE_16BIT) && !defined(LAYER_STATE_32BIT)
diff --git a/qmk_firmware/keyboards/keyball/keyball39/keymaps/default/config.h b/qmk_firmware/keyboards/keyball/keyball39/keymaps/default/config.h
index a05a1cc5b..ec062cf45 100644
--- a/qmk_firmware/keyboards/keyball/keyball39/keymaps/default/config.h
+++ b/qmk_firmware/keyboards/keyball/keyball39/keymaps/default/config.h
@@ -34,3 +34,6 @@ along with this program. If not, see .
#endif
#define TAP_CODE_DELAY 5
+
+#define POINTING_DEVICE_AUTO_MOUSE_ENABLE
+#define AUTO_MOUSE_DEFAULT_LAYER 1
diff --git a/qmk_firmware/keyboards/keyball/keyball39/keymaps/default/keymap.c b/qmk_firmware/keyboards/keyball/keyball39/keymaps/default/keymap.c
index 176cfd43d..57cc35cc5 100644
--- a/qmk_firmware/keyboards/keyball/keyball39/keymaps/default/keymap.c
+++ b/qmk_firmware/keyboards/keyball/keyball39/keymaps/default/keymap.c
@@ -45,7 +45,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
[3] = LAYOUT_universal(
- RGB_TOG , _______ , _______ , _______ , _______ , RGB_M_P , RGB_M_B , RGB_M_R , RGB_M_SW , RGB_M_SN ,
+ RGB_TOG , AML_TO , AML_I50 , AML_D50 , _______ , RGB_M_P , RGB_M_B , RGB_M_R , RGB_M_SW , RGB_M_SN ,
RGB_MOD , RGB_HUI , RGB_SAI , RGB_VAI , SCRL_DVI , RGB_M_K , RGB_M_X , RGB_M_G , RGB_M_T , RGB_M_TW ,
RGB_RMOD , RGB_HUD , RGB_SAD , RGB_VAD , SCRL_DVD , CPI_D1K , CPI_D100 , CPI_I100 , CPI_I1K , KBC_SAVE ,
QK_BOOT , KBC_RST , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , KBC_RST , QK_BOOT
diff --git a/qmk_firmware/keyboards/keyball/keyball39/keymaps/via/config.h b/qmk_firmware/keyboards/keyball/keyball39/keymaps/via/config.h
index cb9ccf9eb..9736eae89 100644
--- a/qmk_firmware/keyboards/keyball/keyball39/keymaps/via/config.h
+++ b/qmk_firmware/keyboards/keyball/keyball39/keymaps/via/config.h
@@ -21,11 +21,11 @@ along with this program. If not, see .
#pragma once
#ifdef RGBLIGHT_ENABLE
-# define RGBLIGHT_EFFECT_BREATHING
-# define RGBLIGHT_EFFECT_RAINBOW_MOOD
-# define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+//# define RGBLIGHT_EFFECT_BREATHING
+//# define RGBLIGHT_EFFECT_RAINBOW_MOOD
+//# define RGBLIGHT_EFFECT_RAINBOW_SWIRL
//# define RGBLIGHT_EFFECT_SNAKE
-# define RGBLIGHT_EFFECT_KNIGHT
+//# define RGBLIGHT_EFFECT_KNIGHT
//# define RGBLIGHT_EFFECT_CHRISTMAS
# define RGBLIGHT_EFFECT_STATIC_GRADIENT
//# define RGBLIGHT_EFFECT_RGB_TEST
@@ -34,3 +34,6 @@ along with this program. If not, see .
#endif
#define TAP_CODE_DELAY 5
+
+#define POINTING_DEVICE_AUTO_MOUSE_ENABLE
+#define AUTO_MOUSE_DEFAULT_LAYER 1
diff --git a/qmk_firmware/keyboards/keyball/keyball39/keymaps/via/keymap.c b/qmk_firmware/keyboards/keyball/keyball39/keymaps/via/keymap.c
index 6ec255b3a..cb44bc605 100644
--- a/qmk_firmware/keyboards/keyball/keyball39/keymaps/via/keymap.c
+++ b/qmk_firmware/keyboards/keyball/keyball39/keymaps/via/keymap.c
@@ -45,7 +45,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
[3] = LAYOUT_universal(
- RGB_TOG , _______ , _______ , _______ , _______ , RGB_M_P , RGB_M_B , RGB_M_R , RGB_M_SW , RGB_M_SN ,
+ RGB_TOG , AML_TO , AML_I50 , AML_D50 , _______ , RGB_M_P , RGB_M_B , RGB_M_R , RGB_M_SW , RGB_M_SN ,
RGB_MOD , RGB_HUI , RGB_SAI , RGB_VAI , SCRL_DVI , RGB_M_K , RGB_M_X , RGB_M_G , RGB_M_T , RGB_M_TW ,
RGB_RMOD , RGB_HUD , RGB_SAD , RGB_VAD , SCRL_DVD , CPI_D1K , CPI_D100 , CPI_I100 , CPI_I1K , KBC_SAVE ,
QK_BOOT , KBC_RST , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , KBC_RST , QK_BOOT
diff --git a/qmk_firmware/keyboards/keyball/keyball44/config.h b/qmk_firmware/keyboards/keyball/keyball44/config.h
index cd28e9341..edf569139 100644
--- a/qmk_firmware/keyboards/keyball/keyball44/config.h
+++ b/qmk_firmware/keyboards/keyball/keyball44/config.h
@@ -58,7 +58,9 @@ along with this program. If not, see .
#endif
#ifndef OLED_FONT_H
-# define OLED_FONT_H "keyboards/keyball/lib/glcdfont.c"
+# define OLED_FONT_H "keyboards/keyball/lib/logofont/logofont.c"
+# define OLED_FONT_START 32
+# define OLED_FONT_END 195
#endif
#if !defined(LAYER_STATE_8BIT) && !defined(LAYER_STATE_16BIT) && !defined(LAYER_STATE_32BIT)
diff --git a/qmk_firmware/keyboards/keyball/keyball44/keymaps/default/config.h b/qmk_firmware/keyboards/keyball/keyball44/keymaps/default/config.h
index a05a1cc5b..ec062cf45 100644
--- a/qmk_firmware/keyboards/keyball/keyball44/keymaps/default/config.h
+++ b/qmk_firmware/keyboards/keyball/keyball44/keymaps/default/config.h
@@ -34,3 +34,6 @@ along with this program. If not, see .
#endif
#define TAP_CODE_DELAY 5
+
+#define POINTING_DEVICE_AUTO_MOUSE_ENABLE
+#define AUTO_MOUSE_DEFAULT_LAYER 1
diff --git a/qmk_firmware/keyboards/keyball/keyball44/keymaps/default/keymap.c b/qmk_firmware/keyboards/keyball/keyball44/keymaps/default/keymap.c
index 3aca79bb7..c6314542d 100644
--- a/qmk_firmware/keyboards/keyball/keyball44/keymaps/default/keymap.c
+++ b/qmk_firmware/keyboards/keyball/keyball44/keymaps/default/keymap.c
@@ -45,7 +45,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
[3] = LAYOUT_universal(
- RGB_TOG , _______ , _______ , _______ , _______ , _______ , RGB_M_P , RGB_M_B , RGB_M_R , RGB_M_SW , RGB_M_SN , RGB_M_K ,
+ RGB_TOG , AML_TO , AML_I50 , AML_D50 , _______ , _______ , RGB_M_P , RGB_M_B , RGB_M_R , RGB_M_SW , RGB_M_SN , RGB_M_K ,
RGB_MOD , RGB_HUI , RGB_SAI , RGB_VAI , _______ , SCRL_DVI , RGB_M_X , RGB_M_G , RGB_M_T , RGB_M_TW , _______ , _______ ,
RGB_RMOD , RGB_HUD , RGB_SAD , RGB_VAD , _______ , SCRL_DVD , CPI_D1K , CPI_D100 , CPI_I100 , CPI_I1K , _______ , KBC_SAVE ,
QK_BOOT , KBC_RST , _______ , _______ , _______ , _______ , _______ , _______ , KBC_RST , QK_BOOT
diff --git a/qmk_firmware/keyboards/keyball/keyball44/keymaps/via/config.h b/qmk_firmware/keyboards/keyball/keyball44/keymaps/via/config.h
index cb9ccf9eb..9736eae89 100644
--- a/qmk_firmware/keyboards/keyball/keyball44/keymaps/via/config.h
+++ b/qmk_firmware/keyboards/keyball/keyball44/keymaps/via/config.h
@@ -21,11 +21,11 @@ along with this program. If not, see .
#pragma once
#ifdef RGBLIGHT_ENABLE
-# define RGBLIGHT_EFFECT_BREATHING
-# define RGBLIGHT_EFFECT_RAINBOW_MOOD
-# define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+//# define RGBLIGHT_EFFECT_BREATHING
+//# define RGBLIGHT_EFFECT_RAINBOW_MOOD
+//# define RGBLIGHT_EFFECT_RAINBOW_SWIRL
//# define RGBLIGHT_EFFECT_SNAKE
-# define RGBLIGHT_EFFECT_KNIGHT
+//# define RGBLIGHT_EFFECT_KNIGHT
//# define RGBLIGHT_EFFECT_CHRISTMAS
# define RGBLIGHT_EFFECT_STATIC_GRADIENT
//# define RGBLIGHT_EFFECT_RGB_TEST
@@ -34,3 +34,6 @@ along with this program. If not, see .
#endif
#define TAP_CODE_DELAY 5
+
+#define POINTING_DEVICE_AUTO_MOUSE_ENABLE
+#define AUTO_MOUSE_DEFAULT_LAYER 1
diff --git a/qmk_firmware/keyboards/keyball/keyball44/keymaps/via/keymap.c b/qmk_firmware/keyboards/keyball/keyball44/keymaps/via/keymap.c
index d13b48449..28bb0bf07 100644
--- a/qmk_firmware/keyboards/keyball/keyball44/keymaps/via/keymap.c
+++ b/qmk_firmware/keyboards/keyball/keyball44/keymaps/via/keymap.c
@@ -45,7 +45,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
[3] = LAYOUT_universal(
- RGB_TOG , _______ , _______ , _______ , _______ , _______ , RGB_M_P , RGB_M_B , RGB_M_R , RGB_M_SW , RGB_M_SN , RGB_M_K ,
+ RGB_TOG , AML_TO , AML_I50 , AML_D50 , _______ , _______ , RGB_M_P , RGB_M_B , RGB_M_R , RGB_M_SW , RGB_M_SN , RGB_M_K ,
RGB_MOD , RGB_HUI , RGB_SAI , RGB_VAI , _______ , SCRL_DVI , RGB_M_X , RGB_M_G , RGB_M_T , RGB_M_TW , _______ , _______ ,
RGB_RMOD , RGB_HUD , RGB_SAD , RGB_VAD , _______ , SCRL_DVD , CPI_D1K , CPI_D100 , CPI_I100 , CPI_I1K , _______ , KBC_SAVE ,
QK_BOOT , KBC_RST , _______ , _______ , _______ , _______ , _______ , _______ , KBC_RST , QK_BOOT
diff --git a/qmk_firmware/keyboards/keyball/keyball46/config.h b/qmk_firmware/keyboards/keyball/keyball46/config.h
index fda41a4f4..8a1c210fb 100644
--- a/qmk_firmware/keyboards/keyball/keyball46/config.h
+++ b/qmk_firmware/keyboards/keyball/keyball46/config.h
@@ -59,7 +59,9 @@ along with this program. If not, see .
#endif
#ifndef OLED_FONT_H
-# define OLED_FONT_H "keyboards/keyball/lib/glcdfont.c"
+# define OLED_FONT_H "keyboards/keyball/lib/logofont/logofont.c"
+# define OLED_FONT_START 32
+# define OLED_FONT_END 195
#endif
#if !defined(LAYER_STATE_8BIT) && !defined(LAYER_STATE_16BIT) && !defined(LAYER_STATE_32BIT)
diff --git a/qmk_firmware/keyboards/keyball/keyball46/keymaps/default/config.h b/qmk_firmware/keyboards/keyball/keyball46/keymaps/default/config.h
index 3c83e8bad..e44b0be85 100644
--- a/qmk_firmware/keyboards/keyball/keyball46/keymaps/default/config.h
+++ b/qmk_firmware/keyboards/keyball/keyball46/keymaps/default/config.h
@@ -37,3 +37,6 @@ along with this program. If not, see .
#define PRODUCT_ID 0x0005
#define TAP_CODE_DELAY 5
+
+#define POINTING_DEVICE_AUTO_MOUSE_ENABLE
+#define AUTO_MOUSE_DEFAULT_LAYER 1
diff --git a/qmk_firmware/keyboards/keyball/keyball46/keymaps/default/keymap.c b/qmk_firmware/keyboards/keyball/keyball46/keymaps/default/keymap.c
index ce187ed5f..bf9aa851d 100644
--- a/qmk_firmware/keyboards/keyball/keyball46/keymaps/default/keymap.c
+++ b/qmk_firmware/keyboards/keyball/keyball46/keymaps/default/keymap.c
@@ -86,7 +86,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BALL] = LAYOUT_right_ball(
//,-----------------------------------------------------. ,-----------------------------------------------------.
- RGB_TOG, _______, _______, _______, _______, _______, RGB_M_P, RGB_M_B, RGB_M_R,RGB_M_SW,RGB_M_SN, RGB_M_K,
+ RGB_TOG, AML_TO , AML_I50, AML_D50, _______, _______, RGB_M_P, RGB_M_B, RGB_M_R,RGB_M_SW,RGB_M_SN, RGB_M_K,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, _______, _______, RGB_M_X, RGB_M_G, RGB_M_T,RGB_M_TW, _______, _______,
//|--------+--------+--------+--------+--------+--------' |--------+--------+--------+--------+--------+--------|
diff --git a/qmk_firmware/keyboards/keyball/keyball46/keymaps/via/config.h b/qmk_firmware/keyboards/keyball/keyball46/keymaps/via/config.h
index 1d9f7ff79..8ed16be59 100644
--- a/qmk_firmware/keyboards/keyball/keyball46/keymaps/via/config.h
+++ b/qmk_firmware/keyboards/keyball/keyball46/keymaps/via/config.h
@@ -21,11 +21,11 @@ along with this program. If not, see .
#pragma once
#ifdef RGBLIGHT_ENABLE
-# define RGBLIGHT_EFFECT_BREATHING
-# define RGBLIGHT_EFFECT_RAINBOW_MOOD
-# define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+//# define RGBLIGHT_EFFECT_BREATHING
+//# define RGBLIGHT_EFFECT_RAINBOW_MOOD
+//# define RGBLIGHT_EFFECT_RAINBOW_SWIRL
//# define RGBLIGHT_EFFECT_SNAKE
-# define RGBLIGHT_EFFECT_KNIGHT
+//# define RGBLIGHT_EFFECT_KNIGHT
//# define RGBLIGHT_EFFECT_CHRISTMAS
# define RGBLIGHT_EFFECT_STATIC_GRADIENT
//# define RGBLIGHT_EFFECT_RGB_TEST
@@ -34,3 +34,6 @@ along with this program. If not, see .
#endif
#define TAP_CODE_DELAY 5
+
+#define POINTING_DEVICE_AUTO_MOUSE_ENABLE
+#define AUTO_MOUSE_DEFAULT_LAYER 1
diff --git a/qmk_firmware/keyboards/keyball/keyball46/keymaps/via/keymap.c b/qmk_firmware/keyboards/keyball/keyball46/keymaps/via/keymap.c
index ce187ed5f..bf9aa851d 100644
--- a/qmk_firmware/keyboards/keyball/keyball46/keymaps/via/keymap.c
+++ b/qmk_firmware/keyboards/keyball/keyball46/keymaps/via/keymap.c
@@ -86,7 +86,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BALL] = LAYOUT_right_ball(
//,-----------------------------------------------------. ,-----------------------------------------------------.
- RGB_TOG, _______, _______, _______, _______, _______, RGB_M_P, RGB_M_B, RGB_M_R,RGB_M_SW,RGB_M_SN, RGB_M_K,
+ RGB_TOG, AML_TO , AML_I50, AML_D50, _______, _______, RGB_M_P, RGB_M_B, RGB_M_R,RGB_M_SW,RGB_M_SN, RGB_M_K,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, _______, _______, RGB_M_X, RGB_M_G, RGB_M_T,RGB_M_TW, _______, _______,
//|--------+--------+--------+--------+--------+--------' |--------+--------+--------+--------+--------+--------|
diff --git a/qmk_firmware/keyboards/keyball/keyball46/keymaps/via_Both/config.h b/qmk_firmware/keyboards/keyball/keyball46/keymaps/via_Both/config.h
index be702e5bc..eedf25f42 100644
--- a/qmk_firmware/keyboards/keyball/keyball46/keymaps/via_Both/config.h
+++ b/qmk_firmware/keyboards/keyball/keyball46/keymaps/via_Both/config.h
@@ -21,11 +21,11 @@ along with this program. If not, see .
#pragma once
#ifdef RGBLIGHT_ENABLE
-# define RGBLIGHT_EFFECT_BREATHING
-# define RGBLIGHT_EFFECT_RAINBOW_MOOD
-# define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+//# define RGBLIGHT_EFFECT_BREATHING
+//# define RGBLIGHT_EFFECT_RAINBOW_MOOD
+//# define RGBLIGHT_EFFECT_RAINBOW_SWIRL
//# define RGBLIGHT_EFFECT_SNAKE
-# define RGBLIGHT_EFFECT_KNIGHT
+//# define RGBLIGHT_EFFECT_KNIGHT
//# define RGBLIGHT_EFFECT_CHRISTMAS
# define RGBLIGHT_EFFECT_STATIC_GRADIENT
//# define RGBLIGHT_EFFECT_RGB_TEST
@@ -37,3 +37,6 @@ along with this program. If not, see .
#define PRODUCT_ID 0x0003
#define TAP_CODE_DELAY 5
+
+#define POINTING_DEVICE_AUTO_MOUSE_ENABLE
+#define AUTO_MOUSE_DEFAULT_LAYER 1
diff --git a/qmk_firmware/keyboards/keyball/keyball46/keymaps/via_Both/keymap.c b/qmk_firmware/keyboards/keyball/keyball46/keymaps/via_Both/keymap.c
index ed7692254..6191773a0 100644
--- a/qmk_firmware/keyboards/keyball/keyball46/keymaps/via_Both/keymap.c
+++ b/qmk_firmware/keyboards/keyball/keyball46/keymaps/via_Both/keymap.c
@@ -86,7 +86,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BALL] = LAYOUT_double_balls(
//,-----------------------------------------------------. ,-----------------------------------------------------.
- RGB_TOG, _______, _______, _______, _______, _______, RGB_M_P, RGB_M_B, RGB_M_R,RGB_M_SW,RGB_M_SN, RGB_M_K,
+ RGB_TOG, AML_TO , AML_I50, AML_D50, _______, _______, RGB_M_P, RGB_M_B, RGB_M_R,RGB_M_SW,RGB_M_SN, RGB_M_K,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, _______, _______, RGB_M_X, RGB_M_G, RGB_M_T,RGB_M_TW, _______, _______,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
diff --git a/qmk_firmware/keyboards/keyball/keyball46/keymaps/via_Left/config.h b/qmk_firmware/keyboards/keyball/keyball46/keymaps/via_Left/config.h
index 4332f3ff8..30a67de66 100644
--- a/qmk_firmware/keyboards/keyball/keyball46/keymaps/via_Left/config.h
+++ b/qmk_firmware/keyboards/keyball/keyball46/keymaps/via_Left/config.h
@@ -21,11 +21,11 @@ along with this program. If not, see .
#pragma once
#ifdef RGBLIGHT_ENABLE
-# define RGBLIGHT_EFFECT_BREATHING
-# define RGBLIGHT_EFFECT_RAINBOW_MOOD
-# define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+//# define RGBLIGHT_EFFECT_BREATHING
+//# define RGBLIGHT_EFFECT_RAINBOW_MOOD
+//# define RGBLIGHT_EFFECT_RAINBOW_SWIRL
//# define RGBLIGHT_EFFECT_SNAKE
-# define RGBLIGHT_EFFECT_KNIGHT
+//# define RGBLIGHT_EFFECT_KNIGHT
//# define RGBLIGHT_EFFECT_CHRISTMAS
# define RGBLIGHT_EFFECT_STATIC_GRADIENT
//# define RGBLIGHT_EFFECT_RGB_TEST
@@ -37,3 +37,6 @@ along with this program. If not, see .
#define PRODUCT_ID 0x0002
#define TAP_CODE_DELAY 5
+
+#define POINTING_DEVICE_AUTO_MOUSE_ENABLE
+#define AUTO_MOUSE_DEFAULT_LAYER 1
diff --git a/qmk_firmware/keyboards/keyball/keyball46/keymaps/via_Left/keymap.c b/qmk_firmware/keyboards/keyball/keyball46/keymaps/via_Left/keymap.c
index f11561315..b94d7cc32 100644
--- a/qmk_firmware/keyboards/keyball/keyball46/keymaps/via_Left/keymap.c
+++ b/qmk_firmware/keyboards/keyball/keyball46/keymaps/via_Left/keymap.c
@@ -86,7 +86,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BALL] = LAYOUT_left_ball(
//,-----------------------------------------------------. ,-----------------------------------------------------.
- RGB_TOG, _______, _______, _______, _______, _______, RGB_M_P, RGB_M_B, RGB_M_R,RGB_M_SW,RGB_M_SN, RGB_M_K,
+ RGB_TOG, AML_TO , AML_I50, AML_D50, _______, _______, RGB_M_P, RGB_M_B, RGB_M_R,RGB_M_SW,RGB_M_SN, RGB_M_K,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, _______, _______, RGB_M_X, RGB_M_G, RGB_M_T,RGB_M_TW, _______, _______,
//|--------+--------+--------+--------+--------+--------| `--------+--------+--------+--------+--------+--------|
diff --git a/qmk_firmware/keyboards/keyball/keyball61/config.h b/qmk_firmware/keyboards/keyball/keyball61/config.h
index 1b148d5c6..7837197c7 100644
--- a/qmk_firmware/keyboards/keyball/keyball61/config.h
+++ b/qmk_firmware/keyboards/keyball/keyball61/config.h
@@ -57,7 +57,9 @@ along with this program. If not, see .
#endif
#ifndef OLED_FONT_H
-# define OLED_FONT_H "keyboards/keyball/lib/glcdfont.c"
+# define OLED_FONT_H "keyboards/keyball/lib/logofont/logofont.c"
+# define OLED_FONT_START 32
+# define OLED_FONT_END 195
#endif
#if !defined(LAYER_STATE_8BIT) && !defined(LAYER_STATE_16BIT) && !defined(LAYER_STATE_32BIT)
diff --git a/qmk_firmware/keyboards/keyball/keyball61/keymaps/default/config.h b/qmk_firmware/keyboards/keyball/keyball61/keymaps/default/config.h
index a05a1cc5b..71e241118 100644
--- a/qmk_firmware/keyboards/keyball/keyball61/keymaps/default/config.h
+++ b/qmk_firmware/keyboards/keyball/keyball61/keymaps/default/config.h
@@ -34,3 +34,6 @@ along with this program. If not, see .
#endif
#define TAP_CODE_DELAY 5
+
+#define POINTING_DEVICE_AUTO_MOUSE_ENABLE
+#define AUTO_MOUSE_DEFAULT_LAYER 2
diff --git a/qmk_firmware/keyboards/keyball/keyball61/keymaps/default/keymap.c b/qmk_firmware/keyboards/keyball/keyball61/keymaps/default/keymap.c
index b89085dc5..bf5663ad9 100644
--- a/qmk_firmware/keyboards/keyball/keyball61/keymaps/default/keymap.c
+++ b/qmk_firmware/keyboards/keyball/keyball61/keymaps/default/keymap.c
@@ -47,7 +47,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
[3] = LAYOUT_universal(
- RGB_TOG , _______ , _______ , _______ , _______ , _______ , RGB_M_P , RGB_M_B , RGB_M_R , RGB_M_SW , RGB_M_SN , RGB_M_K ,
+ RGB_TOG , AML_TO , AML_I50 , AML_D50 , _______ , _______ , RGB_M_P , RGB_M_B , RGB_M_R , RGB_M_SW , RGB_M_SN , RGB_M_K ,
RGB_MOD , RGB_HUI , RGB_SAI , RGB_VAI , _______ , _______ , RGB_M_X , RGB_M_G , RGB_M_T , RGB_M_TW , _______ , _______ ,
RGB_RMOD , RGB_HUD , RGB_SAD , RGB_VAD , _______ , _______ , CPI_D1K , CPI_D100 , CPI_I100 , CPI_I1K , KBC_SAVE , KBC_RST ,
_______ , _______ , SCRL_DVD , SCRL_DVI , SCRL_MO , SCRL_TO , EE_CLR , EE_CLR , KC_HOME , KC_PGDN , KC_PGUP , KC_END , _______ , _______ ,
diff --git a/qmk_firmware/keyboards/keyball/keyball61/keymaps/via/config.h b/qmk_firmware/keyboards/keyball/keyball61/keymaps/via/config.h
index cb9ccf9eb..d556beb39 100644
--- a/qmk_firmware/keyboards/keyball/keyball61/keymaps/via/config.h
+++ b/qmk_firmware/keyboards/keyball/keyball61/keymaps/via/config.h
@@ -21,11 +21,11 @@ along with this program. If not, see .
#pragma once
#ifdef RGBLIGHT_ENABLE
-# define RGBLIGHT_EFFECT_BREATHING
-# define RGBLIGHT_EFFECT_RAINBOW_MOOD
-# define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+//# define RGBLIGHT_EFFECT_BREATHING
+//# define RGBLIGHT_EFFECT_RAINBOW_MOOD
+//# define RGBLIGHT_EFFECT_RAINBOW_SWIRL
//# define RGBLIGHT_EFFECT_SNAKE
-# define RGBLIGHT_EFFECT_KNIGHT
+//# define RGBLIGHT_EFFECT_KNIGHT
//# define RGBLIGHT_EFFECT_CHRISTMAS
# define RGBLIGHT_EFFECT_STATIC_GRADIENT
//# define RGBLIGHT_EFFECT_RGB_TEST
@@ -34,3 +34,6 @@ along with this program. If not, see .
#endif
#define TAP_CODE_DELAY 5
+
+#define POINTING_DEVICE_AUTO_MOUSE_ENABLE
+#define AUTO_MOUSE_DEFAULT_LAYER 2
diff --git a/qmk_firmware/keyboards/keyball/keyball61/keymaps/via/keymap.c b/qmk_firmware/keyboards/keyball/keyball61/keymaps/via/keymap.c
index b89085dc5..bf5663ad9 100644
--- a/qmk_firmware/keyboards/keyball/keyball61/keymaps/via/keymap.c
+++ b/qmk_firmware/keyboards/keyball/keyball61/keymaps/via/keymap.c
@@ -47,7 +47,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
[3] = LAYOUT_universal(
- RGB_TOG , _______ , _______ , _______ , _______ , _______ , RGB_M_P , RGB_M_B , RGB_M_R , RGB_M_SW , RGB_M_SN , RGB_M_K ,
+ RGB_TOG , AML_TO , AML_I50 , AML_D50 , _______ , _______ , RGB_M_P , RGB_M_B , RGB_M_R , RGB_M_SW , RGB_M_SN , RGB_M_K ,
RGB_MOD , RGB_HUI , RGB_SAI , RGB_VAI , _______ , _______ , RGB_M_X , RGB_M_G , RGB_M_T , RGB_M_TW , _______ , _______ ,
RGB_RMOD , RGB_HUD , RGB_SAD , RGB_VAD , _______ , _______ , CPI_D1K , CPI_D100 , CPI_I100 , CPI_I1K , KBC_SAVE , KBC_RST ,
_______ , _______ , SCRL_DVD , SCRL_DVI , SCRL_MO , SCRL_TO , EE_CLR , EE_CLR , KC_HOME , KC_PGDN , KC_PGUP , KC_END , _______ , _______ ,
diff --git a/qmk_firmware/keyboards/keyball/lib/keyball/keyball.c b/qmk_firmware/keyboards/keyball/lib/keyball/keyball.c
index 2d8542963..5204efdbf 100644
--- a/qmk_firmware/keyboards/keyball/lib/keyball/keyball.c
+++ b/qmk_firmware/keyboards/keyball/lib/keyball/keyball.c
@@ -29,6 +29,14 @@ const uint8_t CPI_DEFAULT = KEYBALL_CPI_DEFAULT / 100;
const uint8_t CPI_MAX = pmw3360_MAXCPI + 1;
const uint8_t SCROLL_DIV_MAX = 7;
+const uint16_t AML_TIMEOUT_MIN = 100;
+const uint16_t AML_TIMEOUT_MAX = 1000;
+const uint16_t AML_TIMEOUT_QU = 50; // Quantization Unit
+
+static const char BL = '\xB0'; // Blank indicator character
+static const char LFSTR_ON[] PROGMEM = "\xB2\xB3";
+static const char LFSTR_OFF[] PROGMEM = "\xB4\xB5";
+
keyball_t keyball = {
.this_have_ball = false,
.that_enable = false,
@@ -43,7 +51,7 @@ keyball_t keyball = {
.scroll_mode = false,
.scroll_div = 0,
- .pressing_keys = {' ', ' ', ' ', 0},
+ .pressing_keys = { BL, BL, BL, BL, BL, BL, 0 },
};
//////////////////////////////////////////////////////////////////////////////
@@ -372,27 +380,42 @@ const char PROGMEM code_to_name[] = {
void keyball_oled_render_ballinfo(void) {
#ifdef OLED_ENABLE
// Format: `Ball:{mouse x}{mouse y}{mouse h}{mouse v}`
- // ` CPI{CPI} S{SCROLL_MODE} D{SCROLL_DIV}`
//
// Output example:
//
// Ball: -12 34 0 0
- //
- oled_write_P(PSTR("Ball:"), false);
+
+ // 1st line, "Ball" label, mouse x, y, h, and v.
+ oled_write_P(PSTR("Ball\xB1"), false);
oled_write(format_4d(keyball.last_mouse.x), false);
oled_write(format_4d(keyball.last_mouse.y), false);
oled_write(format_4d(keyball.last_mouse.h), false);
oled_write(format_4d(keyball.last_mouse.v), false);
- // CPI
- oled_write_P(PSTR(" CPI"), false);
+
+ // 2nd line, empty label and CPI
+ oled_write_P(PSTR(" \xB1\xBC\xBD"), false);
oled_write(format_4d(keyball_get_cpi()) + 1, false);
- oled_write_P(PSTR("00 S"), false);
- oled_write_char(keyball.scroll_mode ? '1' : '0', false);
- oled_write_P(PSTR(" D"), false);
+ oled_write_P(PSTR("00 "), false);
+
+ // indicate scroll mode: on/off
+ oled_write_P(PSTR("\xBE\xBF"), false);
+ if (keyball.scroll_mode) {
+ oled_write_P(LFSTR_ON, false);
+ } else {
+ oled_write_P(LFSTR_OFF, false);
+ }
+
+ // indicate scroll divider:
+ oled_write_P(PSTR(" \xC0\xC1"), false);
oled_write_char('0' + keyball_get_scroll_div(), false);
#endif
}
+void keyball_oled_render_ballsubinfo(void) {
+#ifdef OLED_ENABLE
+#endif
+}
+
void keyball_oled_render_keyinfo(void) {
#ifdef OLED_ENABLE
// Format: `Key : R{row} C{col} K{kc} {name}{name}{name}`
@@ -408,20 +431,23 @@ void keyball_oled_render_keyinfo(void) {
//
// Key : R2 C3 K06 abc
// Ball: 0 0 0 0
- //
- uint8_t keycode = keyball.last_kc;
- oled_write_P(PSTR("Key : R"), false);
+ // "Key" Label
+ oled_write_P(PSTR("Key \xB1"), false);
+
+ // Row and column
+ oled_write_char('\xB8', false);
oled_write_char(to_1x(keyball.last_pos.row), false);
- oled_write_P(PSTR(" C"), false);
+ oled_write_char('\xB9', false);
oled_write_char(to_1x(keyball.last_pos.col), false);
- oled_write_P(PSTR(" K"), false);
- oled_write_char(to_1x(keycode >> 4), false);
- oled_write_char(to_1x(keycode), false);
- oled_write_char(' ', false);
+ // Keycode
+ oled_write_P(PSTR("\xBA\xBB"), false);
+ oled_write_char(to_1x(keyball.last_kc >> 4), false);
+ oled_write_char(to_1x(keyball.last_kc), false);
- // Draw pressing keys.
+ // Pressing keys
+ oled_write_P(PSTR(" "), false);
oled_write(keyball.pressing_keys, false);
#endif
}
@@ -434,10 +460,25 @@ void keyball_oled_render_layerinfo(void) {
//
// Layer:-23------------
//
- oled_write_P(PSTR("Layer:"), false);
- for (uint8_t i = 1; i < 16; i++) {
- oled_write_char((layer_state_is(i) ? to_1x(i) : '_'), false);
+ oled_write_P(PSTR("L\xB6\xB7r\xB1"), false);
+ for (uint8_t i = 1; i < 8; i++) {
+ oled_write_char((layer_state_is(i) ? to_1x(i) : BL), false);
+ }
+ oled_write_char(' ', false);
+
+# ifdef POINTING_DEVICE_AUTO_MOUSE_ENABLE
+ oled_write_P(PSTR("\xC2\xC3"), false);
+ if (get_auto_mouse_enable()) {
+ oled_write_P(LFSTR_ON, false);
+ } else {
+ oled_write_P(LFSTR_OFF, false);
}
+
+ oled_write(format_4d(get_auto_mouse_timeout() / 10) + 1, false);
+ oled_write_char('0', false);
+# else
+ oled_write_P(PSTR("\xC2\xC3\xB4\xB5 ---"), false);
+# endif
#endif
}
@@ -496,6 +537,10 @@ void keyboard_post_init_kb(void) {
keyball_config_t c = {.raw = eeconfig_read_kb()};
keyball_set_cpi(c.cpi);
keyball_set_scroll_div(c.sdiv);
+#ifdef POINTING_DEVICE_AUTO_MOUSE_ENABLE
+ set_auto_mouse_enable(c.amle);
+ set_auto_mouse_timeout(c.amlto == 0 ? AUTO_MOUSE_TIME : (c.amlto + 1) * AML_TIMEOUT_QU);
+#endif
}
keyball_on_adjust_layout(KEYBALL_ADJUST_PENDING);
@@ -516,16 +561,16 @@ void housekeeping_task_kb(void) {
static void pressing_keys_update(uint16_t keycode, keyrecord_t *record) {
// Process only valid keycodes.
- if (keycode >= 4 || keycode < 57) {
+ if (keycode >= 4 && keycode < 57) {
char value = pgm_read_byte(code_to_name + keycode - 4);
- char where = ' ';
+ char where = BL;
if (!record->event.pressed) {
// Swap `value` and `where` when releasing.
where = value;
- value = ' ';
+ value = BL;
}
// Rewrite the last `where` of pressing_keys to `value` .
- for (int i = KEYBALL_OLED_MAX_PRESSING_KEYCODES - 1; i >= 0; i--) {
+ for (int i = 0; i < KEYBALL_OLED_MAX_PRESSING_KEYCODES; i++) {
if (keyball.pressing_keys[i] == where) {
keyball.pressing_keys[i] = value;
break;
@@ -576,8 +621,12 @@ bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
break;
case KBC_SAVE: {
keyball_config_t c = {
- .cpi = keyball.cpi_value,
- .sdiv = keyball.scroll_div,
+ .cpi = keyball.cpi_value,
+ .sdiv = keyball.scroll_div,
+#ifdef POINTING_DEVICE_AUTO_MOUSE_ENABLE
+ .amle = get_auto_mouse_enable(),
+ .amlto = (get_auto_mouse_timeout() / AML_TIMEOUT_QU) - 1,
+#endif
};
eeconfig_update_kb(c.raw);
} break;
@@ -605,6 +654,24 @@ bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
add_scroll_div(-1);
break;
+#ifdef POINTING_DEVICE_AUTO_MOUSE_ENABLE
+ case AML_TO:
+ set_auto_mouse_enable(!get_auto_mouse_enable());
+ break;
+ case AML_I50:
+ {
+ uint16_t v = get_auto_mouse_timeout() + 50;
+ set_auto_mouse_timeout(MIN(v, AML_TIMEOUT_MAX));
+ }
+ break;
+ case AML_D50:
+ {
+ uint16_t v = get_auto_mouse_timeout() - 50;
+ set_auto_mouse_timeout(MAX(v, AML_TIMEOUT_MIN));
+ }
+ break;
+#endif
+
default:
return true;
}
diff --git a/qmk_firmware/keyboards/keyball/lib/keyball/keyball.h b/qmk_firmware/keyboards/keyball/lib/keyball/keyball.h
index 9c6669e28..1b9be3abb 100644
--- a/qmk_firmware/keyboards/keyball/lib/keyball/keyball.h
+++ b/qmk_firmware/keyboards/keyball/lib/keyball/keyball.h
@@ -74,7 +74,7 @@ along with this program. If not, see .
# define KEYBALL_MODEL 44
#endif
-#define KEYBALL_OLED_MAX_PRESSING_KEYCODES 3
+#define KEYBALL_OLED_MAX_PRESSING_KEYCODES 6
//////////////////////////////////////////////////////////////////////////////
// Types
@@ -95,6 +95,12 @@ enum keyball_keycodes {
SCRL_DVI = QK_KB_8, // Increment scroll divider
SCRL_DVD = QK_KB_9, // Decrement scroll divider
+ // Auto mouse layer control keycodes.
+ // Only works when POINTING_DEVICE_AUTO_MOUSE_ENABLE is defined.
+ AML_TO = QK_KB_10, // Toggle automatic mouse layer
+ AML_I50 = QK_KB_11, // Increment automatic mouse layer timeout
+ AML_D50 = QK_KB_12, // Decrement automatic mouse layer timeout
+
// User customizable 32 keycodes.
KEYBALL_SAFE_RANGE = QK_USER_0,
};
@@ -103,7 +109,11 @@ typedef union {
uint32_t raw;
struct {
uint8_t cpi : 7;
- uint8_t sdiv : 3; // scroll divider
+ uint8_t sdiv : 3; // scroll divider
+#ifdef POINTING_DEVICE_AUTO_MOUSE_ENABLE
+ uint8_t amle : 1; // automatic mouse layer enabled
+ uint16_t amlto : 5; // automatic mouse layer timeout
+#endif
};
} keyball_config_t;
diff --git a/qmk_firmware/keyboards/keyball/lib/keyball/keycodes.md b/qmk_firmware/keyboards/keyball/lib/keyball/keycodes.md
index ab32f1584..24d7932f7 100644
--- a/qmk_firmware/keyboards/keyball/lib/keyball/keycodes.md
+++ b/qmk_firmware/keyboards/keyball/lib/keyball/keycodes.md
@@ -18,6 +18,9 @@
| `SCRL_MO` | `Kb 7` | `0x7e07` | Enable scroll mode when pressing |
| `SCRL_DVI` | `Kb 8` | `0x7e08` | Increase scroll divider (max D7 = 1/128) <- Most Scroll slow |
| `SCRL_DVD` | `Kb 9` | `0x7e09` | Decrease scroll divider (min 0 = 1/1) <- Most Scroll fast |
+| `AML_TO` | `Kb 10` | `0x7e0a` | Toggle automatic mouse layer |
+| `AML_I50` | `Kb 11` | `0x7e0b` | Increase 50ms automatic mouse layer timeout(max 15=950ms) |
+| `AML_D50` | `Kb 12` | `0x7e0c` | Decrease 50ms automatic mouse layer timeout(min 1=250ms) |
## 特殊キーコード
@@ -34,3 +37,7 @@
| `SCRL_MO` | `Kb 7` | `0x7e07` | キーを押している間、スクロールモードになります |
| `SCRL_DVI` | `Kb 8` | `0x7e08` | スクロール除数を1つ上げます(max D7 = 1/128)←最もスクロール遅い |
| `SCRL_DVD` | `Kb 9` | `0x7e09` | スクロール除数を1つ下げます(min D0 = 1/1)←最もスクロール速い |
+| `AML_TO` | `Kb 10` | `0x7e0a` | 自動マウスレイヤーをトグルします。 |
+| `AML_I50` | `Kb 11` | `0x7e0b` | 自動マウスレイヤーのタイムアウトを50msec増やします(max 15=950ms) |
+| `AML_D50` | `Kb 12` | `0x7e0c` | 自動マウスレイヤーのタイムアウトを50msec減らします(min 1=250ms) |
+
diff --git a/qmk_firmware/keyboards/keyball/lib/logofont/font.md b/qmk_firmware/keyboards/keyball/lib/logofont/font.md
new file mode 100644
index 000000000..6ab5464bf
--- /dev/null
+++ b/qmk_firmware/keyboards/keyball/lib/logofont/font.md
@@ -0,0 +1,213 @@
+
+## blank
+
+```
+00000000
+00000000
+00000000
+00000000
+00000000
+00000000
+```
+
+## vertical label separator
+
+```
+00000000
+00000000
+10101010
+00000000
+00000000
+00000000
+```
+
+## right half 'R'
+
+```
+00000000
+00000000
+01111111
+00001001
+01110110
+00000000
+```
+
+## right half 'C'
+
+```
+00000000
+00000000
+00111110
+01000001
+01000001
+00000000
+```
+
+### dot for blank indicator
+
+```
+00000000
+00010000
+00010000
+00010000
+00000000
+00000000
+```
+
+## "KC" in 2 chars, indicate "keycode"
+
+```
+00000000
+00000000
+00000000
+00000000
+01111111
+00001000
+01110111
+00000000
+00111110
+01000001
+01000001
+00000000
+```
+
+## "CPI" in 2 chars
+
+```
+00111110
+01000001
+01000001
+00000000
+01111111
+00001001
+00000110
+00000000
+01000001
+01111111
+01000001
+00000000
+```
+
+## "SCR" in 2 chars
+
+```
+01000110
+01001001
+00110001
+00000000
+00111110
+01000001
+01000001
+00000000
+01111111
+00001001
+01110110
+00000000
+```
+
+## "DIV" in 2 chars
+
+```
+01111111
+01000001
+00111110
+00000000
+01000001
+01111111
+01000001
+00000000
+00011111
+01100000
+00011111
+00000000
+```
+
+## "ON" in 2 chars with light background
+
+```
+00111110
+01100011
+01011101
+01011101
+01100011
+01111111
+01000001
+01111011
+01110111
+01000001
+00111110
+00000000
+```
+
+## "OFF" in 2 chars
+
+```
+00000000
+00011100
+00100010
+00100010
+00011100
+00000000
+00111110
+00001010
+00000000
+00111110
+00001010
+00000000
+```
+
+## "AML" in 2 chars
+
+```
+01111110
+00001001
+01111110
+00000000
+01111111
+00000110
+01111111
+00000000
+01111111
+01000000
+01000000
+00000000
+```
+
+## inactive "ON" in 2 chars
+
+(not use)
+
+```
+00000000
+00011100
+00100010
+00100010
+00011100
+00000000
+00111110
+00000100
+00001000
+00111110
+00000000
+00000000
+```
+
+## "aye" in 2 chars for "Layer"
+
+(not use)
+
+```
+01100100
+01010100
+01111000
+00000000
+01001100
+01010000
+00111100
+00000000
+00111000
+01010100
+01011000
+00000000
+```
+
diff --git a/qmk_firmware/keyboards/keyball/lib/logofont/logofont.c b/qmk_firmware/keyboards/keyball/lib/logofont/logofont.c
new file mode 100644
index 000000000..52fd960c3
--- /dev/null
+++ b/qmk_firmware/keyboards/keyball/lib/logofont/logofont.c
@@ -0,0 +1,234 @@
+// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0.
+// See gfxfont.h for newer custom bitmap font info.
+//
+// Modifictations:
+//
+// - KeyBall logo (0x80 ~ 0xBE)
+// - Special characters (0xC0 ~ 0xDF)
+
+#include "progmem.h"
+
+// Standard ASCII 5x7 font
+// clang-format off
+const unsigned char font[] PROGMEM = {
+
+ // 0x20
+ 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,
+
+ // 0x30
+ 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,
+
+ // 0x40
+ 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,
+
+ // 0x50
+ 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,
+
+ // 0x60
+ 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,
+
+ // 0x70
+ 0x7C, 0x18, 0x24, 0x24, 0x18, 0x00,
+ 0x18, 0x24, 0x24, 0x18, 0x7C, 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, 0x90, 0x90, 0x90, 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,
+
+ // Logo 1/3 (0x80 ~ 0x8F)
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xC0, 0xF0, 0xF8, 0x8C, 0x86, 0xC6,
+ 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFE, 0xFC, 0xFC, 0xF8, 0xE0,
+ 0x80, 0x00, 0x00, 0x00, 0xF0, 0xF0,
+ 0xF0, 0x00, 0x00, 0xC0, 0xE0, 0xF0,
+ 0x70, 0x70, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xF8, 0xF8, 0xF8, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xF8, 0xF8,
+ 0xF8, 0x00, 0x00, 0xF8, 0xF8, 0xF8,
+
+ // Logo 2/3 (0x90 ~ 0x9F)
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+ 0xE0, 0x70, 0x78, 0x68, 0x6C, 0x64,
+ 0xC7, 0xC7, 0xC7, 0xC7, 0xC7, 0xC7,
+ 0xE7, 0x3F, 0x1F, 0x0F, 0x3F, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F,
+ 0x0F, 0x00, 0x00, 0x00, 0xFF, 0xFF,
+ 0xFF, 0x1E, 0x3F, 0xFF, 0xF3, 0xE1,
+ 0x80, 0x00, 0x00, 0xF8, 0xFC, 0xFE,
+ 0x36, 0x36, 0x36, 0x3E, 0xBC, 0xB8,
+ 0x00, 0x0E, 0x3E, 0xFE, 0xF0, 0x80,
+ 0xF0, 0xFE, 0x3E, 0x0E, 0x00, 0x00,
+ 0xFF, 0xFF, 0xFF, 0x06, 0x06, 0x06,
+ 0xFE, 0xFE, 0xFC, 0x70, 0x00, 0xE6,
+ 0xF6, 0xF6, 0x36, 0x36, 0xFE, 0xFE,
+ 0xFC, 0x00, 0x00, 0x00, 0xFF, 0xFF,
+ 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
+
+ // Logo 3/3 (0xA0 ~ 0xAF)
+ 0x00, 0x00, 0x00, 0x00, 0x3C, 0x7F,
+ 0x63, 0x60, 0xE0, 0xC0, 0xC0, 0xC0,
+ 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xFF,
+ 0xFF, 0xC0, 0x60, 0x30, 0x18, 0x0F,
+ 0x03, 0x03, 0x03, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x03,
+ 0x03, 0x00, 0x00, 0x00, 0x03, 0x03,
+ 0x03, 0x03, 0x00, 0x01, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x01,
+ 0x00, 0x70, 0x70, 0x39, 0x3F, 0x1F,
+ 0x07, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x01, 0x00, 0x00, 0x01,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x01, 0x00, 0x00, 0x00, 0x03, 0x03,
+ 0x03, 0x00, 0x00, 0x03, 0x03, 0x03,
+
+ // 0xB0
+ 0x00, 0x10, 0x10, 0x10, 0x00, 0x00, // B0: dot blank indicator (BL)
+ 0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, // B1: vertical label separator
+ 0x3E, 0x63, 0x5D, 0x5D, 0x63, 0x7F, // B2, B3:
+ 0x41, 0x7B, 0x77, 0x41, 0x3E, 0x00, // "ON" in 2 chars with light bg.
+ 0x00, 0x1C, 0x22, 0x22, 0x1C, 0x00, // B4, B5:
+ 0x3E, 0x0A, 0x00, 0x3E, 0x0A, 0x00, // "OFF" in 2 chars
+ 0x64, 0x54, 0x78, 0x00, 0x4C, 0x50, // B6, B7:
+ 0x3C, 0x00, 0x38, 0x54, 0x58, 0x00, // "aye" in 2 chars
+ 0x00, 0x00, 0x7F, 0x09, 0x76, 0x00, // B8: right half "R" indicate "row"
+ 0x00, 0x00, 0x3E, 0x41, 0x41, 0x00, // B9: right halc "C" indicate "column"
+ 0x00, 0x00, 0x00, 0x00, 0x7F, 0x08, // BA, BB:
+ 0x77, 0x00, 0x3E, 0x41, 0x41, 0x00, // "KC" in 2 chars right aligned
+ 0x3E, 0x41, 0x41, 0x00, 0x7F, 0x09, // BC, BD:
+ 0x06, 0x00, 0x41, 0x7F, 0x41, 0x00, // "CPI" in 2 chars
+ 0x46, 0x49, 0x31, 0x00, 0x3E, 0x41, // BE, BF:
+ 0x41, 0x00, 0x7F, 0x09, 0x76, 0x00, // "SCR" in 2 chars indicate "scroll"
+
+ // 0xC0
+ 0x7F, 0x41, 0x3E, 0x00, 0x41, 0x7F, // C0, C1:
+ 0x41, 0x00, 0x1F, 0x60, 0x1F, 0x00, // "DIV" in 2 chars indicate "divider"
+ 0x7E, 0x09, 0x7E, 0x00, 0x7F, 0x06, // C2, D3:
+ 0x7F, 0x00, 0x7F, 0x40, 0x40, 0x00, // "AML" in 2 chars
+
+#if 0
+ 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, 0x00, 0x00, 0x00, 0x00,
+
+ // 0xD0
+ 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, 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,
+#endif
+};
+// clang-format on
diff --git a/qmk_firmware/keyboards/keyball/lib/oledkit/oledkit.c b/qmk_firmware/keyboards/keyball/lib/oledkit/oledkit.c
index 4aec1cfc8..e8af6dbb2 100644
--- a/qmk_firmware/keyboards/keyball/lib/oledkit/oledkit.c
+++ b/qmk_firmware/keyboards/keyball/lib/oledkit/oledkit.c
@@ -20,20 +20,20 @@ along with this program. If not, see .
#if defined(OLED_ENABLE) && !defined(OLEDKIT_DISABLE)
-// clang-format off
-static const char PROGMEM logo[] = {
- 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};
-// clang-format on
-
__attribute__((weak)) void oledkit_render_logo_user(void) {
- oled_write_P(logo, false);
+ // Require `OLED_FONT_H "keyboards/keyball/lib/logofont/logofont.c"`
+ char ch = 0x80;
+ for (int y = 0; y < 3; y++) {
+ oled_write_P(PSTR(" "), false);
+ for (int x = 0; x < 16; x++) {
+ oled_write_char(ch++, false);
+ }
+ oled_advance_page(false);
+ }
}
__attribute__((weak)) void oledkit_render_info_user(void) {
- oled_write_P(logo, false);
+ oledkit_render_logo_user();
}
__attribute__((weak)) bool oled_task_user(void) {
diff --git a/qmk_firmware/keyboards/keyball/one47/config.h b/qmk_firmware/keyboards/keyball/one47/config.h
index 07f7aa39b..696ed8caf 100644
--- a/qmk_firmware/keyboards/keyball/one47/config.h
+++ b/qmk_firmware/keyboards/keyball/one47/config.h
@@ -45,7 +45,9 @@ along with this program. If not, see .
#endif
#ifndef OLED_FONT_H
-# define OLED_FONT_H "keyboards/keyball/lib/glcdfont.c"
+# define OLED_FONT_H "keyboards/keyball/lib/logofont/logofont.c"
+# define OLED_FONT_START 32
+# define OLED_FONT_END 195
#endif
#if !defined(LAYER_STATE_8BIT) && !defined(LAYER_STATE_16BIT) && !defined(LAYER_STATE_32BIT)