aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakeshi ISHII <2170248+mtei@users.noreply.github.com>2022-02-22 01:30:49 +0900
committerGitHub <noreply@github.com>2022-02-21 08:30:49 -0800
commitc204c735af9fc5bf2438ca4fedfc8914529d660e (patch)
tree4fbe2d0d5da4a80272303c65d1859f59bc76c82b
parentf30f963a0b6ccaa151fe83dd8302fa1f6829086e (diff)
downloadqmk_firmware-c204c735af9fc5bf2438ca4fedfc8914529d660e.tar.gz
qmk_firmware-c204c735af9fc5bf2438ca4fedfc8914529d660e.zip
Helix/pico move to split_common (#16418)
-rw-r--r--keyboards/helix/pico/config.h10
-rw-r--r--keyboards/helix/pico/keymaps/biacco/keymap.c35
-rw-r--r--keyboards/helix/pico/keymaps/biacco/rules.mk6
-rw-r--r--keyboards/helix/pico/keymaps/default/keymap.c135
-rw-r--r--keyboards/helix/pico/keymaps/default/readme.md6
-rw-r--r--keyboards/helix/pico/keymaps/default/readme_jp.md14
-rw-r--r--keyboards/helix/pico/keymaps/default/rules.mk6
-rw-r--r--keyboards/helix/pico/keymaps/mtei/keymap.c163
-rw-r--r--keyboards/helix/pico/keymaps/mtei/rules.mk6
-rw-r--r--keyboards/helix/pico/matrix.c342
-rw-r--r--keyboards/helix/pico/override_helix_options.mk-maintenance42
-rw-r--r--keyboards/helix/pico/pico.c29
-rw-r--r--keyboards/helix/pico/pico.h20
-rw-r--r--keyboards/helix/pico/post_rules.mk138
-rw-r--r--keyboards/helix/pico/qmk_conf/rules.mk2
-rw-r--r--keyboards/helix/pico/rules.mk4
-rw-r--r--keyboards/helix/pico/split_util.c104
-rw-r--r--keyboards/helix/pico/split_util.h16
18 files changed, 165 insertions, 913 deletions
diff --git a/keyboards/helix/pico/config.h b/keyboards/helix/pico/config.h
index b01fd3a00..ea2ce8c94 100644
--- a/keyboards/helix/pico/config.h
+++ b/keyboards/helix/pico/config.h
@@ -1,6 +1,7 @@
1/* 1/*
2Copyright 2012 Jun Wako <wakojun@gmail.com> 2Copyright 2012 Jun Wako <wakojun@gmail.com>
3Copyright 2015 Jack Humbert 3Copyright 2015 Jack Humbert
4Copyright 2018 MakotoKurauchi
4 5
5This program is free software: you can redistribute it and/or modify 6This program is free software: you can redistribute it and/or modify
6it under the terms of the GNU General Public License as published by 7it under the terms of the GNU General Public License as published by
@@ -42,12 +43,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
42// #define MASTER_RIGHT 43// #define MASTER_RIGHT
43// #define EE_HANDS 44// #define EE_HANDS
44 45
45// Helix keyboard OLED support
46// see ./rules.mk: OLED_ENABLE=yes or no
47#ifdef OLED_ENABLE
48 #define SSD1306OLED
49#endif
50
51/* key matrix size */ 46/* key matrix size */
52// Rows are doubled-up 47// Rows are doubled-up
53#define MATRIX_ROWS 8 48#define MATRIX_ROWS 8
@@ -114,8 +109,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
114 109
115#if defined(RGBLIGHT_ENABLE) && !defined(IOS_DEVICE_ENABLE) 110#if defined(RGBLIGHT_ENABLE) && !defined(IOS_DEVICE_ENABLE)
116// USB_MAX_POWER_CONSUMPTION value for Helix keyboard 111// USB_MAX_POWER_CONSUMPTION value for Helix keyboard
117// 120 RGBoff, OLEDoff 112// 120 RGBoff
118// 120 OLED
119// 330 RGB 6 113// 330 RGB 6
120// 300 RGB 32 114// 300 RGB 32
121// 310 OLED & RGB 32 115// 310 OLED & RGB 32
diff --git a/keyboards/helix/pico/keymaps/biacco/keymap.c b/keyboards/helix/pico/keymaps/biacco/keymap.c
index a1d041c02..aa196c7e6 100644
--- a/keyboards/helix/pico/keymaps/biacco/keymap.c
+++ b/keyboards/helix/pico/keymaps/biacco/keymap.c
@@ -1,24 +1,19 @@
1/* Copyright 2018 Biacco42
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
1#include QMK_KEYBOARD_H 16#include QMK_KEYBOARD_H
2#include "bootloader.h"
3#ifdef PROTOCOL_LUFA
4#include "lufa.h"
5#include "split_util.h"
6#endif
7#ifdef AUDIO_ENABLE
8 #include "audio.h"
9#endif
10#ifdef SSD1306OLED
11 #include "ssd1306.h"
12#endif
13
14extern keymap_config_t keymap_config;
15
16#ifdef RGBLIGHT_ENABLE
17//Following line allows macro to read current RGB settings
18extern rgblight_config_t rgblight_config;
19#endif
20
21extern uint8_t is_master;
22 17
23// Each layer gets a name for readability, which is then used in the keymap matrix below. 18// Each layer gets a name for readability, which is then used in the keymap matrix below.
24// The underscores don't mean anything - you can have a layer called STUFF or any other name. 19// The underscores don't mean anything - you can have a layer called STUFF or any other name.
diff --git a/keyboards/helix/pico/keymaps/biacco/rules.mk b/keyboards/helix/pico/keymaps/biacco/rules.mk
index 993ade267..d97135946 100644
--- a/keyboards/helix/pico/keymaps/biacco/rules.mk
+++ b/keyboards/helix/pico/keymaps/biacco/rules.mk
@@ -10,10 +10,8 @@ AUDIO_ENABLE = yes # Audio output on port B5
10LTO_ENABLE = no # if firmware size over limit, try this option 10LTO_ENABLE = no # if firmware size over limit, try this option
11 11
12# Helix Spacific Build Options 12# Helix Spacific Build Options
13# you can uncomment and edit follows 6 Variables 13# you can uncomment and edit follows 4 Variables
14# jp: 以下の6つの変数を必要に応じて編集し、コメントアウトをはずします。 14# jp: 以下の4つの変数を必要に応じて編集し、コメントアウトをはずします。
15# OLED_ENABLE = no # OLED_ENABLE
16# LOCAL_GLCDFONT = no # use each keymaps "helixfont.h" insted of "common/glcdfont.c"
17# LED_BACK_ENABLE = no # LED backlight (Enable WS2812 RGB underlight.) 15# LED_BACK_ENABLE = no # LED backlight (Enable WS2812 RGB underlight.)
18# LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.) 16# LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.)
19LED_ANIMATIONS = no # LED animations 17LED_ANIMATIONS = no # LED animations
diff --git a/keyboards/helix/pico/keymaps/default/keymap.c b/keyboards/helix/pico/keymaps/default/keymap.c
index f23ab8576..11ee30258 100644
--- a/keyboards/helix/pico/keymaps/default/keymap.c
+++ b/keyboards/helix/pico/keymaps/default/keymap.c
@@ -1,24 +1,25 @@
1/* Copyright 2018 MakotoKurauchi
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
1#include QMK_KEYBOARD_H 16#include QMK_KEYBOARD_H
2#include "bootloader.h"
3#ifdef PROTOCOL_LUFA
4#include "lufa.h"
5#include "split_util.h"
6#endif
7#ifdef AUDIO_ENABLE
8 #include "audio.h"
9#endif
10#ifdef SSD1306OLED
11 #include "ssd1306.h"
12#endif
13
14 17
15#ifdef RGBLIGHT_ENABLE 18#ifdef RGBLIGHT_ENABLE
16//Following line allows macro to read current RGB settings 19//Following line allows macro to read current RGB settings
17extern rgblight_config_t rgblight_config; 20extern rgblight_config_t rgblight_config;
18#endif 21#endif
19 22
20extern uint8_t is_master;
21
22// Each layer gets a name for readability, which is then used in the keymap matrix below. 23// Each layer gets a name for readability, which is then used in the keymap matrix below.
23// The underscores don't mean anything - you can have a layer called STUFF or any other name. 24// The underscores don't mean anything - you can have a layer called STUFF or any other name.
24// Layer names don't all need to be of the same length, obviously, and you can also skip them 25// Layer names don't all need to be of the same length, obviously, and you can also skip them
@@ -334,10 +335,6 @@ void matrix_init_user(void) {
334 #ifdef RGBLIGHT_ENABLE 335 #ifdef RGBLIGHT_ENABLE
335 RGB_current_mode = rgblight_config.mode; 336 RGB_current_mode = rgblight_config.mode;
336 #endif 337 #endif
337 //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
338 #ifdef SSD1306OLED
339 iota_gfx_init(!has_usb()); // turns on the display
340 #endif
341} 338}
342 339
343 340
@@ -365,105 +362,3 @@ void music_scale_user(void)
365} 362}
366 363
367#endif 364#endif
368
369
370//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
371#ifdef SSD1306OLED
372
373void matrix_scan_user(void) {
374 iota_gfx_task(); // this is what updates the display continuously
375}
376
377void matrix_update(struct CharacterMatrix *dest,
378 const struct CharacterMatrix *source) {
379 if (memcmp(dest->display, source->display, sizeof(dest->display))) {
380 memcpy(dest->display, source->display, sizeof(dest->display));
381 dest->dirty = true;
382 }
383}
384
385//assign the right code to your layers for OLED display
386#define L_BASE 0
387#define L_LOWER (1<<_LOWER)
388#define L_RAISE (1<<_RAISE)
389#define L_ADJUST (1<<_ADJUST)
390#define L_ADJUST_TRI (L_ADJUST|L_RAISE|L_LOWER)
391
392static void render_logo(struct CharacterMatrix *matrix) {
393
394 static char logo[]={
395 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
396 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
397 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,
398 0};
399 matrix_write(matrix, logo);
400 //matrix_write_P(&matrix, PSTR(" Split keyboard kit"));
401}
402
403
404
405void render_status(struct CharacterMatrix *matrix) {
406
407 // Render to mode icon
408 static char logo[][2][3]={{{0x95,0x96,0},{0xb5,0xb6,0}},{{0x97,0x98,0},{0xb7,0xb8,0}}};
409 if(keymap_config.swap_lalt_lgui==false){
410 matrix_write(matrix, logo[0][0]);
411 matrix_write_P(matrix, PSTR("\n"));
412 matrix_write(matrix, logo[0][1]);
413 }else{
414 matrix_write(matrix, logo[1][0]);
415 matrix_write_P(matrix, PSTR("\n"));
416 matrix_write(matrix, logo[1][1]);
417 }
418
419 // Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below
420 char buf[40];
421 snprintf(buf,sizeof(buf), "Undef-%ld", layer_state);
422 matrix_write_P(matrix, PSTR("\nLayer: "));
423 switch (layer_state) {
424 case L_BASE:
425 matrix_write_P(matrix, PSTR("Default"));
426 break;
427 case L_RAISE:
428 matrix_write_P(matrix, PSTR("Raise"));
429 break;
430 case L_LOWER:
431 matrix_write_P(matrix, PSTR("Lower"));
432 break;
433 case L_ADJUST:
434 case L_ADJUST_TRI:
435 matrix_write_P(matrix, PSTR("Adjust"));
436 break;
437 default:
438 matrix_write(matrix, buf);
439 }
440
441 // Host Keyboard LED Status
442 char led[40];
443 snprintf(led, sizeof(led), "\n%s %s %s",
444 (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? "NUMLOCK" : " ",
445 (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ? "CAPS" : " ",
446 (host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ? "SCLK" : " ");
447 matrix_write(matrix, led);
448}
449
450
451void iota_gfx_task_user(void) {
452 struct CharacterMatrix matrix;
453
454#if DEBUG_TO_SCREEN
455 if (debug_enable) {
456 return;
457 }
458#endif
459
460 matrix_clear(&matrix);
461 if(is_master){
462 render_status(&matrix);
463 }else{
464 render_logo(&matrix);
465 }
466 matrix_update(&display, &matrix);
467}
468
469#endif
diff --git a/keyboards/helix/pico/keymaps/default/readme.md b/keyboards/helix/pico/keymaps/default/readme.md
index 789097021..a6c81651a 100644
--- a/keyboards/helix/pico/keymaps/default/readme.md
+++ b/keyboards/helix/pico/keymaps/default/readme.md
@@ -96,10 +96,8 @@ see `qmk_firmware/keyboards/helix/pico/keymaps/default/rules.mk`
96 96
97``` 97```
98# Helix Spacific Build Options 98# Helix Spacific Build Options
99# you can uncomment and edit follows 6 Variables 99# you can uncomment and edit follows 4 Variables
100# jp: 以下の6つの変数を必要に応じて編集し、コメントアウトをはずします。 100# jp: 以下の4つの変数を必要に応じて編集し、コメントアウトをはずします。
101# OLED_ENABLE = no # OLED_ENABLE
102# LOCAL_GLCDFONT = no # use each keymaps "helixfont.h" insted of "common/glcdfont.c"
103# LED_BACK_ENABLE = no # LED backlight (Enable WS2812 RGB underlight.) 101# LED_BACK_ENABLE = no # LED backlight (Enable WS2812 RGB underlight.)
104# LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.) 102# LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.)
105# LED_ANIMATIONS = yes # LED animations 103# LED_ANIMATIONS = yes # LED animations
diff --git a/keyboards/helix/pico/keymaps/default/readme_jp.md b/keyboards/helix/pico/keymaps/default/readme_jp.md
index 28594dafc..73f97ad9a 100644
--- a/keyboards/helix/pico/keymaps/default/readme_jp.md
+++ b/keyboards/helix/pico/keymaps/default/readme_jp.md
@@ -58,16 +58,13 @@
58 58
59## カスタマイズ 59## カスタマイズ
60 60
61オプションの OLED をつけたり、
62RGB バックライトまたは、RGB Underglow をつけた場合は、 61RGB バックライトまたは、RGB Underglow をつけた場合は、
63`qmk_firmware/keyboards/helix/pico/keymaps/default/rules.mk` の以下の部分を編集して機能を有効化してください。 62`qmk_firmware/keyboards/helix/pico/keymaps/default/rules.mk` の以下の部分を編集して機能を有効化してください。
64 63
65``` 64```
66# Helix Spacific Build Options 65# Helix Spacific Build Options
67# you can uncomment and edit follows 6 Variables 66# you can uncomment and edit follows 4 Variables
68# jp: 以下の6つの変数を必要に応じて編集し、コメントアウトをはずします。 67# jp: 以下の4つの変数を必要に応じて編集し、コメントアウトをはずします。
69# OLED_ENABLE = no # OLED_ENABLE
70# LOCAL_GLCDFONT = no # use each keymaps "helixfont.h" insted of "common/glcdfont.c"
71# LED_BACK_ENABLE = no # LED backlight (Enable WS2812 RGB underlight.) 68# LED_BACK_ENABLE = no # LED backlight (Enable WS2812 RGB underlight.)
72# LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.) 69# LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.)
73# LED_ANIMATIONS = yes # LED animations 70# LED_ANIMATIONS = yes # LED animations
@@ -89,13 +86,6 @@ rules.mk の下記の部分を編集して no を yes に変更してくださ
89LED_UNDERGLOW_ENABLE = yes # LED underglow (Enable WS2812 RGB underlight.) 86LED_UNDERGLOW_ENABLE = yes # LED underglow (Enable WS2812 RGB underlight.)
90``` 87```
91 88
92## OLEDを有効にする
93
94rules.mk の下記の部分を編集して no を yes に変更してください。
95```
96OLED_ENABLE = yes # OLED_ENABLE
97```
98
99## iPad/iPhoneサポートを有効にする。 89## iPad/iPhoneサポートを有効にする。
100 90
101rules.mk の下記の部分を編集して no を yes に変更してください。 91rules.mk の下記の部分を編集して no を yes に変更してください。
diff --git a/keyboards/helix/pico/keymaps/default/rules.mk b/keyboards/helix/pico/keymaps/default/rules.mk
index b50519fef..9a29406c1 100644
--- a/keyboards/helix/pico/keymaps/default/rules.mk
+++ b/keyboards/helix/pico/keymaps/default/rules.mk
@@ -3,10 +3,8 @@ AUDIO_ENABLE = yes # Audio output
3LTO_ENABLE = no # if firmware size over limit, try this option 3LTO_ENABLE = no # if firmware size over limit, try this option
4 4
5# Helix Spacific Build Options 5# Helix Spacific Build Options
6# you can uncomment and edit follows 6 Variables 6# you can uncomment and edit follows 4 Variables
7# jp: 以下の6つの変数を必要に応じて編集し、コメントアウトをはずします。 7# jp: 以下の4つの変数を必要に応じて編集し、コメントアウトをはずします。
8# OLED_ENABLE = no # OLED_ENABLE
9# LOCAL_GLCDFONT = no # use each keymaps "helixfont.h" insted of "common/glcdfont.c"
10# LED_BACK_ENABLE = no # LED backlight (Enable WS2812 RGB underlight.) 8# LED_BACK_ENABLE = no # LED backlight (Enable WS2812 RGB underlight.)
11# LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.) 9# LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.)
12# LED_ANIMATIONS = yes # LED animations 10# LED_ANIMATIONS = yes # LED animations
diff --git a/keyboards/helix/pico/keymaps/mtei/keymap.c b/keyboards/helix/pico/keymaps/mtei/keymap.c
index 728ef0eb5..58684be49 100644
--- a/keyboards/helix/pico/keymaps/mtei/keymap.c
+++ b/keyboards/helix/pico/keymaps/mtei/keymap.c
@@ -1,31 +1,23 @@
1/* Copyright 2018 mtei
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
1#include QMK_KEYBOARD_H 16#include QMK_KEYBOARD_H
2#include "bootloader.h"
3#ifdef PROTOCOL_LUFA
4#include "lufa.h"
5#include "split_util.h"
6#endif
7#ifdef AUDIO_ENABLE
8 #include "audio.h"
9#endif
10#ifdef SSD1306OLED
11 #include "ssd1306.h"
12#endif
13#ifdef CONSOLE_ENABLE
14 #include <print.h>
15#endif
16 17
17#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__) 18#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__)
18#define kc5(a,b,c,d,e) KC_##a, KC_##b, KC_##c, KC_##d, KC_##e 19#define kc5(a,b,c,d,e) KC_##a, KC_##b, KC_##c, KC_##d, KC_##e
19 20
20extern keymap_config_t keymap_config;
21
22#ifdef RGBLIGHT_ENABLE
23//Following line allows macro to read current RGB settings
24extern rgblight_config_t rgblight_config;
25#endif
26
27extern uint8_t is_master;
28
29// Each layer gets a name for readability, which is then used in the keymap matrix below. 21// Each layer gets a name for readability, which is then used in the keymap matrix below.
30// The underscores don't mean anything - you can have a layer called STUFF or any other name. 22// The underscores don't mean anything - you can have a layer called STUFF or any other name.
31// Layer names don't all need to be of the same length, obviously, and you can also skip them 23// Layer names don't all need to be of the same length, obviously, and you can also skip them
@@ -373,10 +365,6 @@ void matrix_init_user(void) {
373 #ifdef AUDIO_ENABLE 365 #ifdef AUDIO_ENABLE
374 startup_user(); 366 startup_user();
375 #endif 367 #endif
376 //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
377 #ifdef SSD1306OLED
378 iota_gfx_init(!has_usb()); // turns on the display
379 #endif
380} 368}
381 369
382 370
@@ -404,124 +392,3 @@ void music_scale_user(void)
404} 392}
405 393
406#endif 394#endif
407
408
409//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
410#ifdef SSD1306OLED
411
412void matrix_scan_user(void) {
413 iota_gfx_task(); // this is what updates the display continuously
414}
415
416void matrix_update(struct CharacterMatrix *dest,
417 const struct CharacterMatrix *source) {
418 if (memcmp(dest->display, source->display, sizeof(dest->display))) {
419 memcpy(dest->display, source->display, sizeof(dest->display));
420 dest->dirty = true;
421 }
422}
423
424static void render_logo(struct CharacterMatrix *matrix) {
425
426 static char logo[]={
427 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
428 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
429 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,
430 0};
431 matrix_write(matrix, logo);
432#if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_ANIMATIONS)
433 char buf[30];
434 if(rgblight_config.enable) {
435 snprintf(buf, sizeof(buf), " LED %2d: %d,%d,%d ",
436 rgblight_config.mode,
437 rgblight_config.hue/RGBLIGHT_HUE_STEP,
438 rgblight_config.sat/RGBLIGHT_SAT_STEP,
439 rgblight_config.val/RGBLIGHT_VAL_STEP);
440 matrix_write(matrix, buf);
441 }
442#endif
443 //matrix_write_P(&matrix, PSTR(" Split keyboard kit"));
444}
445
446static const char Qwerty_name[] PROGMEM = " Qwerty";
447static const char Colemak_name[] PROGMEM = " Colemak";
448static const char Dvorak_name[] PROGMEM = " Dvorak";
449static const char Eucalyn_name[] PROGMEM = " Eucalyn";
450
451static const char NumL_name[] PROGMEM = ":NumL";
452static const char NumR_name[] PROGMEM = ":NumR";
453static const char Lower_name[] PROGMEM = ":Func";
454static const char Raise_name[] PROGMEM = ":Extra";
455static const char Adjust_name[] PROGMEM = ":Adjust";
456
457static const char *layer_names[] = {
458 [_QWERTY] = Qwerty_name,
459 [_COLEMAK] = Colemak_name,
460 [_DVORAK] = Dvorak_name,
461 [_EUCALYN] = Eucalyn_name,
462
463 [_NUML] = NumL_name,
464 [_NUMR] = NumR_name,
465 [_LOWER] = Lower_name,
466 [_RAISE] = Raise_name,
467 [_ADJUST] = Adjust_name
468};
469
470void render_status(struct CharacterMatrix *matrix) {
471
472 // Render to mode icon
473 static char logo[][2][3]={{{0x95,0x96,0},{0xb5,0xb6,0}},{{0x97,0x98,0},{0xb7,0xb8,0}}};
474 if(keymap_config.swap_lalt_lgui==false){
475 matrix_write(matrix, logo[0][0]);
476 matrix_write_P(matrix, PSTR("\n"));
477 matrix_write(matrix, logo[0][1]);
478 }else{
479 matrix_write(matrix, logo[1][0]);
480 matrix_write_P(matrix, PSTR("\n"));
481 matrix_write(matrix, logo[1][1]);
482 }
483
484 // Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below
485 int name_num;
486 uint32_t lstate;
487 matrix_write_P(matrix, layer_names[current_default_layer]);
488 matrix_write_P(matrix, PSTR("\n"));
489 for( lstate = layer_state, name_num = 0;
490 lstate && name_num < sizeof(layer_names)/sizeof(char *);
491 lstate >>=1, name_num++ ) {
492 if( (lstate & 1) != 0 ) {
493 if( layer_names[name_num] ) {
494 matrix_write_P(matrix, layer_names[name_num]);
495 }
496 }
497 }
498
499 // Host Keyboard LED Status
500 char led[40];
501 snprintf(led, sizeof(led), "\n%s %s %s",
502 (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? "NUMLOCK" : " ",
503 (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ? "CAPS" : " ",
504 (host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ? "SCLK" : " ");
505 matrix_write(matrix, led);
506}
507
508
509void iota_gfx_task_user(void) {
510 struct CharacterMatrix matrix;
511
512#if DEBUG_TO_SCREEN
513 if (debug_enable) {
514 return;
515 }
516#endif
517
518 matrix_clear(&matrix);
519 if(is_master){
520 render_status(&matrix);
521 }else{
522 render_logo(&matrix);
523 }
524 matrix_update(&display, &matrix);
525}
526
527#endif
diff --git a/keyboards/helix/pico/keymaps/mtei/rules.mk b/keyboards/helix/pico/keymaps/mtei/rules.mk
index 05a60f67d..413d0519d 100644
--- a/keyboards/helix/pico/keymaps/mtei/rules.mk
+++ b/keyboards/helix/pico/keymaps/mtei/rules.mk
@@ -10,10 +10,8 @@ AUDIO_ENABLE = yes # Audio output on port B5
10LTO_ENABLE = no # if firmware size over limit, try this option 10LTO_ENABLE = no # if firmware size over limit, try this option
11 11
12# Helix Spacific Build Options 12# Helix Spacific Build Options
13# you can uncomment and edit follows 6 Variables 13# you can uncomment and edit follows 4 Variables
14# jp: 以下の6つの変数を必要に応じて編集し、コメントアウトをはずします。 14# jp: 以下の4つの変数を必要に応じて編集し、コメントアウトをはずします。
15# OLED_ENABLE = no # OLED_ENABLE
16# LOCAL_GLCDFONT = no # use each keymaps "helixfont.h" insted of "common/glcdfont.c"
17# LED_BACK_ENABLE = no # LED backlight (Enable WS2812 RGB underlight.) 15# LED_BACK_ENABLE = no # LED backlight (Enable WS2812 RGB underlight.)
18# LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.) 16# LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.)
19# LED_ANIMATIONS = yes # LED animations 17# LED_ANIMATIONS = yes # LED animations
diff --git a/keyboards/helix/pico/matrix.c b/keyboards/helix/pico/matrix.c
deleted file mode 100644
index b18213d84..000000000
--- a/keyboards/helix/pico/matrix.c
+++ /dev/null
@@ -1,342 +0,0 @@
1/*
2Copyright 2012 Jun Wako <wakojun@gmail.com>
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18/*
19 * scan matrix
20 */
21#include <stdint.h>
22#include <stdbool.h>
23#include <avr/io.h>
24#include <avr/wdt.h>
25#include <avr/interrupt.h>
26#include <util/delay.h>
27#include "print.h"
28#include "debug.h"
29#include "util.h"
30#include "matrix.h"
31#include "split_util.h"
32#include "quantum.h"
33
34#ifdef USE_MATRIX_I2C
35# include "i2c.h"
36#else // USE_SERIAL
37# include "serial.h"
38#endif
39
40#ifndef DEBOUNCE
41# define DEBOUNCE 5
42#endif
43
44#define ERROR_DISCONNECT_COUNT 5
45
46static uint8_t debouncing = DEBOUNCE;
47static const int ROWS_PER_HAND = MATRIX_ROWS/2;
48static uint8_t error_count = 0;
49
50static const uint8_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
51static const uint8_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
52
53/* matrix state(1:on, 0:off) */
54static matrix_row_t matrix[MATRIX_ROWS];
55static matrix_row_t matrix_debouncing[MATRIX_ROWS];
56
57static matrix_row_t read_cols(void);
58static void init_cols(void);
59static void unselect_rows(void);
60static void select_row(uint8_t row);
61static uint8_t matrix_master_scan(void);
62
63
64__attribute__ ((weak))
65void matrix_init_kb(void) {
66 matrix_init_user();
67}
68
69__attribute__ ((weak))
70void matrix_scan_kb(void) {
71 matrix_scan_user();
72}
73
74__attribute__ ((weak))
75void matrix_init_user(void) {
76}
77
78__attribute__ ((weak))
79void matrix_scan_user(void) {
80}
81
82inline
83uint8_t matrix_rows(void)
84{
85 return MATRIX_ROWS;
86}
87
88inline
89uint8_t matrix_cols(void)
90{
91 return MATRIX_COLS;
92}
93
94void matrix_init(void)
95{
96 split_keyboard_setup();
97
98 // initialize row and col
99 unselect_rows();
100 init_cols();
101
102 setPinOutput(B0);
103 setPinOutput(D5);
104 writePinHigh(B0);
105 writePinHigh(D5);
106
107 // initialize matrix state: all keys off
108 for (uint8_t i=0; i < MATRIX_ROWS; i++) {
109 matrix[i] = 0;
110 matrix_debouncing[i] = 0;
111 }
112
113 matrix_init_quantum();
114}
115
116uint8_t _matrix_scan(void)
117{
118 // Right hand is stored after the left in the matirx so, we need to offset it
119 int offset = isLeftHand ? 0 : (ROWS_PER_HAND);
120
121 for (uint8_t i = 0; i < ROWS_PER_HAND; i++) {
122 select_row(i);
123 _delay_us(30); // without this wait read unstable value.
124 matrix_row_t cols = read_cols();
125 if (matrix_debouncing[i+offset] != cols) {
126 matrix_debouncing[i+offset] = cols;
127 debouncing = DEBOUNCE;
128 }
129 unselect_rows();
130 }
131
132 if (debouncing) {
133 if (--debouncing) {
134 _delay_ms(1);
135 } else {
136 for (uint8_t i = 0; i < ROWS_PER_HAND; i++) {
137 matrix[i+offset] = matrix_debouncing[i+offset];
138 }
139 }
140 }
141
142 return 1;
143}
144
145#ifdef USE_MATRIX_I2C
146
147// Get rows from other half over i2c
148int i2c_transaction(void) {
149 int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
150
151 int err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE);
152 if (err) goto i2c_error;
153
154 // start of matrix stored at 0x00
155 err = i2c_master_write(0x00);
156 if (err) goto i2c_error;
157
158 // Start read
159 err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_READ);
160 if (err) goto i2c_error;
161
162 if (!err) {
163 int i;
164 for (i = 0; i < ROWS_PER_HAND-1; ++i) {
165 matrix[slaveOffset+i] = i2c_master_read(I2C_ACK);
166 }
167 matrix[slaveOffset+i] = i2c_master_read(I2C_NACK);
168 i2c_master_stop();
169 } else {
170i2c_error: // the cable is disconnceted, or something else went wrong
171 i2c_reset_state();
172 return err;
173 }
174
175 return 0;
176}
177
178#else // USE_SERIAL
179
180int serial_transaction(void) {
181 int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
182 int ret=serial_update_buffers();
183 if (ret ) {
184 if(ret==2) writePinLow(B0);
185 return 1;
186 }
187 writePinHigh(B0);
188 for (int i = 0; i < ROWS_PER_HAND; ++i) {
189 matrix[slaveOffset+i] = serial_slave_buffer[i];
190 }
191 return 0;
192}
193#endif
194
195uint8_t matrix_scan(void)
196{
197 if (is_helix_master()) {
198 matrix_master_scan();
199 }else{
200 matrix_slave_scan();
201
202 int offset = (isLeftHand) ? ROWS_PER_HAND : 0;
203
204 for (int i = 0; i < ROWS_PER_HAND; ++i) {
205 matrix[offset+i] = serial_master_buffer[i];
206 }
207
208 matrix_scan_quantum();
209 }
210 return 1;
211}
212
213
214uint8_t matrix_master_scan(void) {
215
216 int ret = _matrix_scan();
217
218#ifndef KEYBOARD_helix_rev1
219 int offset = (isLeftHand) ? 0 : ROWS_PER_HAND;
220
221#ifdef USE_MATRIX_I2C
222// for (int i = 0; i < ROWS_PER_HAND; ++i) {
223 /* i2c_slave_buffer[i] = matrix[offset+i]; */
224// i2c_slave_buffer[i] = matrix[offset+i];
225// }
226#else // USE_SERIAL
227 for (int i = 0; i < ROWS_PER_HAND; ++i) {
228 serial_master_buffer[i] = matrix[offset+i];
229 }
230#endif
231#endif
232
233#ifdef USE_MATRIX_I2C
234 if( i2c_transaction() ) {
235#else // USE_SERIAL
236 if( serial_transaction() ) {
237#endif
238 // turn on the indicator led when halves are disconnected
239 writePinLow(D5);
240
241 error_count++;
242
243 if (error_count > ERROR_DISCONNECT_COUNT) {
244 // reset other half if disconnected
245 int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
246 for (int i = 0; i < ROWS_PER_HAND; ++i) {
247 matrix[slaveOffset+i] = 0;
248 }
249 }
250 } else {
251 // turn off the indicator led on no error
252 writePinHigh(D5);
253 error_count = 0;
254 }
255 matrix_scan_quantum();
256 return ret;
257}
258
259void matrix_slave_scan(void) {
260 _matrix_scan();
261
262 int offset = (isLeftHand) ? 0 : ROWS_PER_HAND;
263
264#ifdef USE_MATRIX_I2C
265 for (int i = 0; i < ROWS_PER_HAND; ++i) {
266 /* i2c_slave_buffer[i] = matrix[offset+i]; */
267 i2c_slave_buffer[i] = matrix[offset+i];
268 }
269#else // USE_SERIAL
270 for (int i = 0; i < ROWS_PER_HAND; ++i) {
271 serial_slave_buffer[i] = matrix[offset+i];
272 }
273#endif
274}
275
276bool matrix_is_modified(void)
277{
278 if (debouncing) return false;
279 return true;
280}
281
282inline
283bool matrix_is_on(uint8_t row, uint8_t col)
284{
285 return (matrix[row] & ((matrix_row_t)1<<col));
286}
287
288inline
289matrix_row_t matrix_get_row(uint8_t row)
290{
291 return matrix[row];
292}
293
294void matrix_print(void)
295{
296 print("\nr/c 0123456789ABCDEF\n");
297 for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
298 print_hex8(row); print(": ");
299 print_bin_reverse16(matrix_get_row(row));
300 print("\n");
301 }
302}
303
304uint8_t matrix_key_count(void)
305{
306 uint8_t count = 0;
307 for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
308 count += bitpop16(matrix[i]);
309 }
310 return count;
311}
312
313static void init_cols(void)
314{
315 for(int x = 0; x < MATRIX_COLS; x++) {
316 _SFR_IO8((col_pins[x] >> 4) + 1) &= ~_BV(col_pins[x] & 0xF);
317 _SFR_IO8((col_pins[x] >> 4) + 2) |= _BV(col_pins[x] & 0xF);
318 }
319}
320
321static matrix_row_t read_cols(void)
322{
323 matrix_row_t result = 0;
324 for(int x = 0; x < MATRIX_COLS; x++) {
325 result |= (_SFR_IO8(col_pins[x] >> 4) & _BV(col_pins[x] & 0xF)) ? 0 : (1 << x);
326 }
327 return result;
328}
329
330static void unselect_rows(void)
331{
332 for(int x = 0; x < ROWS_PER_HAND; x++) {
333 _SFR_IO8((row_pins[x] >> 4) + 1) &= ~_BV(row_pins[x] & 0xF);
334 _SFR_IO8((row_pins[x] >> 4) + 2) |= _BV(row_pins[x] & 0xF);
335 }
336}
337
338static void select_row(uint8_t row)
339{
340 _SFR_IO8((row_pins[row] >> 4) + 1) |= _BV(row_pins[row] & 0xF);
341 _SFR_IO8((row_pins[row] >> 4) + 2) &= ~_BV(row_pins[row] & 0xF);
342}
diff --git a/keyboards/helix/pico/override_helix_options.mk-maintenance b/keyboards/helix/pico/override_helix_options.mk-maintenance
new file mode 100644
index 000000000..0ff930957
--- /dev/null
+++ b/keyboards/helix/pico/override_helix_options.mk-maintenance
@@ -0,0 +1,42 @@
1#
2# This file is not normally used. It is used for maintenance testing purposes.
3# To use it, do the following:
4#
5# $ cp override_helix_options.mk-maintenance override_helix_options.mk
6#
7$(info -------------------------)
8$(info override_helix_options.mk)
9$(info -------------------------)
10
11define HELIX_OVERRIDE_PARSE
12 ifeq ($(strip $1),back)
13 LED_BACK_ENABLE = yes
14 LED_UNDERGLOW_ENABLE = no
15 endif
16 ifeq ($(strip $1),under)
17 LED_BACK_ENABLE = no
18 LED_UNDERGLOW_ENABLE = yes
19 endif
20 ifneq ($(filter noled led-off led_off,$(strip $1)),)
21 LED_BACK_ENABLE = no
22 LED_UNDERGLOW_ENABLE = no
23 endif
24 ifneq ($(filter noaudio audio-off audio_off,$(strip $1)),)
25 AUDIO_ENABLE = no
26 endif
27 ifneq ($(filter audio audio-on audio_on,$(strip $1)),)
28 AUDIO_ENABLE = yes
29 endif
30 ifneq ($(filter sc split-common split_common,$(strip $1)),)
31 SPLIT_KEYBOARD = yes
32 endif
33 ifneq ($(filter nosc no-sc no-split-common no-split_common,$(strip $1)),)
34 SPLIT_KEYBOARD = no
35 endif
36 ifeq ($(strip $1),scan)
37 DEBUG_MATRIX_SCAN_RATE_ENABLE = yes
38 endif
39 ifeq ($(strip $1),scan-api)
40 DEBUG_MATRIX_SCAN_RATE_ENABLE = api
41 endif
42endef # end of HELIX_OVERRIDE_PARSE
diff --git a/keyboards/helix/pico/pico.c b/keyboards/helix/pico/pico.c
index 315b35a7a..4cd195363 100644
--- a/keyboards/helix/pico/pico.c
+++ b/keyboards/helix/pico/pico.c
@@ -1,3 +1,18 @@
1/* Copyright 2018 MakotoKurauchi
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
1#include "helix.h" 16#include "helix.h"
2 17
3// Each keymap.c should use is_keyboard_master() instead of 'is_master'. 18// Each keymap.c should use is_keyboard_master() instead of 'is_master'.
@@ -5,14 +20,6 @@
5// for the old keymap.c. 20// for the old keymap.c.
6uint8_t is_master = false; 21uint8_t is_master = false;
7 22
8#ifdef SSD1306OLED
9#include "ssd1306.h"
10
11bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
12 return process_record_gfx(keycode,record) && process_record_user(keycode, record);
13}
14#endif
15
16void matrix_init_kb(void) { 23void matrix_init_kb(void) {
17 // Each keymap.c should use is_keyboard_master() instead of is_master. 24 // Each keymap.c should use is_keyboard_master() instead of is_master.
18 // But keep is_master for a while for backwards compatibility 25 // But keep is_master for a while for backwards compatibility
@@ -28,9 +35,3 @@ void keyboard_post_init_kb(void) {
28#endif 35#endif
29 keyboard_post_init_user(); 36 keyboard_post_init_user();
30} 37}
31
32#if defined(SPLIT_KEYBOARD) && defined(SSD1306OLED)
33void matrix_slave_scan_user(void) {
34 matrix_scan_user();
35}
36#endif
diff --git a/keyboards/helix/pico/pico.h b/keyboards/helix/pico/pico.h
index 5fa5f7295..3e51d54d8 100644
--- a/keyboards/helix/pico/pico.h
+++ b/keyboards/helix/pico/pico.h
@@ -1,12 +1,22 @@
1/* Copyright 2018 MakotoKurauchi
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
1#pragma once 16#pragma once
2 17
3#include "helix.h" 18#include "helix.h"
4 19
5#ifndef SPLIT_KEYBOARD
6 extern bool is_helix_master(void);
7 #define is_keyboard_master() is_helix_master()
8#endif
9
10// Each keymap.c should use is_keyboard_master() instead of 'is_master', 'has_usb()'. 20// Each keymap.c should use is_keyboard_master() instead of 'is_master', 'has_usb()'.
11// But keep 'is_master' for a while for backwards compatibility 21// But keep 'is_master' for a while for backwards compatibility
12// for the old keymap.c. 22// for the old keymap.c.
diff --git a/keyboards/helix/pico/post_rules.mk b/keyboards/helix/pico/post_rules.mk
index 38573d75a..88bb5482b 100644
--- a/keyboards/helix/pico/post_rules.mk
+++ b/keyboards/helix/pico/post_rules.mk
@@ -4,90 +4,30 @@
4# Post-processing rules convert keyboard-specific shortcuts (that represent 4# Post-processing rules convert keyboard-specific shortcuts (that represent
5# combinations of standard options) into QMK standard options. 5# combinations of standard options) into QMK standard options.
6# 6#
7-include $(strip $(HELIX_TOP_DIR)/pico/override_helix_options.mk) ## File dedicated to maintenance
7 8
8define HELIX_CUSTOMISE_MSG 9# Parse 'HELIX=xx,yy,zz' option
9 $(info Helix Spacific Build Options) 10ifneq ($(strip $(HELIX)),)
10 $(info - OLED_ENABLE = $(OLED_ENABLE)) 11 # make HELIX=ios helix/pico:AKEYMAP
11 $(info - LED_BACK_ENABLE = $(LED_BACK_ENABLE)) 12 # make HELIX=no-ani helix/pico:AKEYMAP
12 $(info - LED_UNDERGLOW_ENABLE = $(LED_UNDERGLOW_ENABLE)) 13 # make HELIX=ios,no-ani helix/pico:AKEYMAP
13 $(info - LED_ANIMATIONS = $(LED_ANIMATIONS)) 14 define HELIX_OPTION_PARSE
14 $(info - IOS_DEVICE_ENABLE = $(IOS_DEVICE_ENABLE)) 15 # parce 'no-ani' 'ios'
15 $(info ) 16 $(if $(SHOW_PARCE),$(info parse .$1.)) #debug
16endef 17 $(if $(HELIX_OVERRIDE_PARSE),$(call HELIX_OVERRIDE_PARSE,$1))
17 18
18define HELIX_HELP_MSG 19 ifeq ($(strip $1),ios)
19 $(info Helix keyboard convenient command line option) 20 IOS_DEVICE_ENABLE = yes
20 $(info - make HELIX=<options> helix/pico:<keymap>) 21 endif
21 $(info - option= oled | back | under | na | no-ani) 22 ifneq ($(filter na no_ani no-ani,$(strip $1)),)
22 $(info - ios | sc | split-common | scan | verbose) 23 LED_ANIMATIONS = no
23 $(info - ex.) 24 endif
24 $(info - make HELIX=oled helix/pico:<keymap>) 25 endef # end of HELIX_OPTION_PARSE
25 $(info - make HELIX=back helix/pico:<keymap>)
26 $(info - make HELIX=under helix/pico:<keymap>)
27 $(info - make HELIX=back,na helix/pico:<keymap>)
28 $(info - make HELIX=back,ios helix/pico:<keymap>)
29 $(info )
30endef
31 26
32 ifneq ($(strip $(HELIX)),)
33 COMMA=, 27 COMMA=,
34 helix_option := $(subst $(COMMA), , $(HELIX)) 28 $(eval $(foreach A_OPTION_NAME,$(subst $(COMMA), ,$(HELIX)), \
35 ifneq ($(filter help,$(helix_option)),) 29 $(call HELIX_OPTION_PARSE,$(A_OPTION_NAME))))
36 $(eval $(call HELIX_HELP_MSG))
37 $(error )
38 endif
39 ifneq ($(filter oled,$(helix_option)),)
40 OLED_ENABLE = yes
41 endif
42 ifneq ($(filter back,$(helix_option)),)
43 LED_BACK_ENABLE = yes
44 else ifneq ($(filter under,$(helix_option)),)
45 LED_UNDERGLOW_ENABLE = yes
46 endif
47 ifneq ($(filter na,$(helix_option)),)
48 LED_ANIMATIONS = no
49 endif
50 ifneq ($(filter no_ani,$(helix_option)),)
51 LED_ANIMATIONS = no
52 endif
53 ifneq ($(filter no-ani,$(helix_option)),)
54 LED_ANIMATIONS = no
55 endif
56 ifneq ($(filter ios,$(helix_option)),)
57 IOS_DEVICE_ENABLE = yes
58 endif
59 ifneq ($(filter sc,$(helix_option)),)
60 SPLIT_KEYBOARD = yes
61 endif
62 ifneq ($(filter split-common,$(helix_option)),)
63 SPLIT_KEYBOARD = yes
64 endif
65 ifneq ($(filter scan,$(helix_option)),)
66 # use DEBUG_MATRIX_SCAN_RATE
67 # see docs/newbs_testing_debugging.md
68 OPT_DEFS += -DDEBUG_MATRIX_SCAN_RATE
69 CONSOLE_ENABLE = yes
70 SHOW_VERBOSE_INFO = yes
71 endif
72 ifneq ($(filter verbose,$(helix_option)),)
73 SHOW_VERBOSE_INFO = yes
74 endif
75 SHOW_HELIX_OPTIONS = yes 30 SHOW_HELIX_OPTIONS = yes
76 endif
77
78ifneq ($(strip $(SPLIT_KEYBOARD)), yes)
79 SRC += local_drivers/serial.c
80 KEYBOARD_PATHS += $(HELIX_TOP_DIR)/local_drivers
81
82 # A workaround until #7089 is merged.
83 # serial.c must not be compiled with the -lto option.
84 # The current LIB_SRC has a side effect with the -fno-lto option, so use it.
85 LIB_SRC += local_drivers/serial.c
86
87 CUSTOM_MATRIX = yes
88
89 SRC += pico/matrix.c
90 SRC += pico/split_util.c
91endif 31endif
92 32
93######## 33########
@@ -98,7 +38,6 @@ ifeq ($(strip $(LED_BACK_ENABLE)), yes)
98 RGBLIGHT_ENABLE = yes 38 RGBLIGHT_ENABLE = yes
99 OPT_DEFS += -DRGBLED_BACK 39 OPT_DEFS += -DRGBLED_BACK
100 ifeq ($(strip $(LED_UNDERGLOW_ENABLE)), yes) 40 ifeq ($(strip $(LED_UNDERGLOW_ENABLE)), yes)
101 $(eval $(call HELIX_CUSTOMISE_MSG))
102 $(error LED_BACK_ENABLE and LED_UNDERGLOW_ENABLE both 'yes') 41 $(error LED_BACK_ENABLE and LED_UNDERGLOW_ENABLE both 'yes')
103 endif 42 endif
104else ifeq ($(strip $(LED_UNDERGLOW_ENABLE)), yes) 43else ifeq ($(strip $(LED_UNDERGLOW_ENABLE)), yes)
@@ -113,35 +52,26 @@ ifeq ($(strip $(LED_ANIMATIONS)), yes)
113 OPT_DEFS += -DLED_ANIMATIONS 52 OPT_DEFS += -DLED_ANIMATIONS
114endif 53endif
115 54
116ifeq ($(strip $(OLED_ENABLE)), yes)
117 SRC += local_drivers/i2c.c
118 SRC += local_drivers/ssd1306.c
119 KEYBOARD_PATHS += $(HELIX_TOP_DIR)/local_drivers
120 OPT_DEFS += -DOLED_ENABLE
121 ifeq ($(strip $(LOCAL_GLCDFONT)), yes)
122 OPT_DEFS += -DLOCAL_GLCDFONT
123 endif
124endif
125
126ifeq ($(strip $(AUDIO_ENABLE)),yes) 55ifeq ($(strip $(AUDIO_ENABLE)),yes)
127 ifeq ($(strip $(RGBLIGHT_ENABLE)),yes) 56 ifeq ($(strip $(RGBLIGHT_ENABLE)),yes)
128 LTO_ENABLE = yes 57 LTO_ENABLE = yes
129 endif 58 endif
130 ifeq ($(strip $(OLED_ENABLE)),yes)
131 LTO_ENABLE = yes
132 endif
133endif 59endif
134 60
135ifneq ($(strip $(SHOW_HELIX_OPTIONS)),) 61ifneq ($(strip $(SHOW_HELIX_OPTIONS)),)
136 $(eval $(call HELIX_CUSTOMISE_MSG)) 62 $(info Helix Spacific Build Options)
137 ifneq ($(strip $(SHOW_VERBOSE_INFO)),) 63 $(info - LED_BACK_ENABLE = $(LED_BACK_ENABLE))
138 $(info -- RGBLIGHT_ENABLE = $(RGBLIGHT_ENABLE)) 64 $(info - LED_UNDERGLOW_ENABLE = $(LED_UNDERGLOW_ENABLE))
139 $(info -- CONSOLE_ENABLE = $(CONSOLE_ENABLE)) 65 $(info - LED_ANIMATIONS = $(LED_ANIMATIONS))
140 $(info -- OPT_DEFS = $(OPT_DEFS)) 66 $(info - IOS_DEVICE_ENABLE = $(IOS_DEVICE_ENABLE))
141 $(info -- SPLIT_KEYBOARD = $(SPLIT_KEYBOARD)) 67 $(info )
142 $(info -- LTO_ENABLE = $(LTO_ENABLE)) 68 $(info QMK Build Options)
143 $(info ) 69 $(info -- SPLIT_KEYBOARD = $(SPLIT_KEYBOARD))
144 endif 70 $(info -- AUDIO_ENABLE = $(AUDIO_ENABLE))
71 $(info -- RGBLIGHT_ENABLE = $(RGBLIGHT_ENABLE))
72 $(info -- CONSOLE_ENABLE = $(CONSOLE_ENABLE))
73 $(info -- OPT_DEFS = $(OPT_DEFS))
74 $(info -- LTO_ENABLE = $(LTO_ENABLE))
75 $(info -- DEBUG_MATRIX_SCAN_RATE_ENABLE = $(DEBUG_MATRIX_SCAN_RATE_ENABLE))
76 $(info )
145endif 77endif
146
147OLED_ENABLE = no # disable OLED in TOP/common_features.mk
diff --git a/keyboards/helix/pico/qmk_conf/rules.mk b/keyboards/helix/pico/qmk_conf/rules.mk
index e2993b3f8..08ca8e094 100644
--- a/keyboards/helix/pico/qmk_conf/rules.mk
+++ b/keyboards/helix/pico/qmk_conf/rules.mk
@@ -1,4 +1,2 @@
1EXTRAKEY_ENABLE = yes # Audio control and System control 1EXTRAKEY_ENABLE = yes # Audio control and System control
2AUDIO_ENABLE = yes # Audio output 2AUDIO_ENABLE = yes # Audio output
3
4include $(strip $(KEYBOARD_LOCAL_FEATURES_MK))
diff --git a/keyboards/helix/pico/rules.mk b/keyboards/helix/pico/rules.mk
index 12caec37e..efa7ae4be 100644
--- a/keyboards/helix/pico/rules.mk
+++ b/keyboards/helix/pico/rules.mk
@@ -1,6 +1,6 @@
1SPLIT_KEYBOARD = yes
2
1# Helix Spacific Build Options default values 3# Helix Spacific Build Options default values
2OLED_ENABLE = no # OLED_ENABLE
3LOCAL_GLCDFONT = no # use each keymaps "helixfont.h" insted of "common/glcdfont.c"
4LED_BACK_ENABLE = no # LED backlight (Enable WS2812 RGB underlight.) 4LED_BACK_ENABLE = no # LED backlight (Enable WS2812 RGB underlight.)
5LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.) 5LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.)
6LED_ANIMATIONS = yes # LED animations 6LED_ANIMATIONS = yes # LED animations
diff --git a/keyboards/helix/pico/split_util.c b/keyboards/helix/pico/split_util.c
deleted file mode 100644
index c77e63f33..000000000
--- a/keyboards/helix/pico/split_util.c
+++ /dev/null
@@ -1,104 +0,0 @@
1#include <avr/io.h>
2#include <avr/wdt.h>
3#include <avr/power.h>
4#include <avr/interrupt.h>
5#include <util/delay.h>
6#include <avr/eeprom.h>
7#include "split_util.h"
8#include "matrix.h"
9#include "keyboard.h"
10#include "wait.h"
11
12#ifdef USE_MATRIX_I2C
13# include "i2c.h"
14#else
15# include "serial.h"
16#endif
17
18#ifdef EE_HANDS
19# include "eeconfig.h"
20#endif
21
22#ifndef SPLIT_USB_TIMEOUT
23 #define SPLIT_USB_TIMEOUT 2500
24#endif
25
26volatile bool isLeftHand = true;
27
28bool waitForUsb(void) {
29 for (uint8_t i = 0; i < (SPLIT_USB_TIMEOUT / 100); i++) {
30 // This will return true of a USB connection has been established
31 if (UDADDR & _BV(ADDEN)) {
32 return true;
33 }
34 wait_ms(100);
35 }
36
37 // Avoid NO_USB_STARTUP_CHECK - Disable USB as the previous checks seem to enable it somehow
38 (USBCON &= ~(_BV(USBE) | _BV(OTGPADE)));
39
40 return false;
41}
42
43bool is_keyboard_left(void) {
44#if defined(SPLIT_HAND_PIN)
45 // Test pin SPLIT_HAND_PIN for High/Low, if low it's right hand
46 setPinInput(SPLIT_HAND_PIN);
47 return readPin(SPLIT_HAND_PIN);
48#elif defined(EE_HANDS)
49 return eeconfig_read_handedness();
50#elif defined(MASTER_RIGHT)
51 return !is_helix_master();
52#endif
53
54 return is_helix_master();
55}
56
57bool is_helix_master(void) {
58 static enum { UNKNOWN, MASTER, SLAVE } usbstate = UNKNOWN;
59
60 // only check once, as this is called often
61 if (usbstate == UNKNOWN) {
62#if defined(SPLIT_USB_DETECT)
63 usbstate = waitForUsb() ? MASTER : SLAVE;
64#elif defined(__AVR__)
65 USBCON |= (1 << OTGPADE); // enables VBUS pad
66 wait_us(5);
67
68 usbstate = (USBSTA & (1 << VBUS)) ? MASTER : SLAVE; // checks state of VBUS
69#else
70 usbstate = MASTER;
71#endif
72 }
73
74 return (usbstate == MASTER);
75 }
76
77static void keyboard_master_setup(void) {
78
79#ifdef USE_MATRIX_I2C
80 i2c_master_init();
81#else
82 serial_master_init();
83#endif
84}
85
86static void keyboard_slave_setup(void) {
87
88#ifdef USE_MATRIX_I2C
89 i2c_slave_init(SLAVE_I2C_ADDRESS);
90#else
91 serial_slave_init();
92#endif
93}
94
95void split_keyboard_setup(void) {
96 isLeftHand = is_keyboard_left();
97
98 if (is_helix_master()) {
99 keyboard_master_setup();
100 } else {
101 keyboard_slave_setup();
102 }
103 sei();
104}
diff --git a/keyboards/helix/pico/split_util.h b/keyboards/helix/pico/split_util.h
deleted file mode 100644
index b839ce6e3..000000000
--- a/keyboards/helix/pico/split_util.h
+++ /dev/null
@@ -1,16 +0,0 @@
1#pragma once
2
3#include <stdbool.h>
4#include "eeconfig.h"
5
6#define SLAVE_I2C_ADDRESS 0x32
7
8extern volatile bool isLeftHand;
9
10// slave version of matix scan, defined in matrix.c
11void matrix_slave_scan(void);
12
13void split_keyboard_setup(void);
14bool is_helix_master(void);
15
16void matrix_master_OLED_init (void);