summaryrefslogtreecommitdiff
path: root/keyboards
diff options
context:
space:
mode:
authorTerryMathews <terry@terrymathews.net>2018-08-26 13:12:41 -0400
committerJack Humbert <jack.humb@gmail.com>2018-08-29 21:03:23 -0400
commitd12d058baeb1f26a05077f88406bc3222f185129 (patch)
treeb41930947ca634ee84ab01f09ec64fb125fd437c /keyboards
parent972388447b03e1c403f20acd6c6b04363864f66e (diff)
downloadqmk_firmware-d12d058baeb1f26a05077f88406bc3222f185129.tar.gz
qmk_firmware-d12d058baeb1f26a05077f88406bc3222f185129.zip
Autodetect lack of screen presence
This is the simplest, most efficient way I could come up with to silence the "Failed to start write 60" error that occurs when QMK tries to talk to a screen that doesn't exist. iota_gfx_init passes a success boolean. We catch that into a global bool (we could rewrite multiple functions to pass this as an argument, but given the number of keyboards using this code it seemed less disruptive this way) and then use that as a conditional on running the iota_gfx_task in matrix_scan_user. Tl;dr: if the screen doesn't init, the screen write code doesn't run.
Diffstat (limited to 'keyboards')
-rw-r--r--keyboards/tkc1800/keymaps/default/keymap.c10
-rw-r--r--keyboards/tkc1800/keymaps/wkl/keymap.c10
2 files changed, 16 insertions, 4 deletions
diff --git a/keyboards/tkc1800/keymaps/default/keymap.c b/keyboards/tkc1800/keymaps/default/keymap.c
index 3a11aed2ff..cc19de3bda 100644
--- a/keyboards/tkc1800/keymaps/default/keymap.c
+++ b/keyboards/tkc1800/keymaps/default/keymap.c
@@ -34,6 +34,8 @@ enum {
FUNCTION,
};
+bool screenWorks = 0;
+
//13 characters max without re-writing the "Layer: " format in iota_gfx_task_user()
static char layer_lookup[][14] = {"Base","Function"};
@@ -93,7 +95,9 @@ void matrix_init_user(void) {
// calls code for the SSD1306 OLED
_delay_ms(400);
TWI_Init(TWI_BIT_PRESCALE_1, TWI_BITLENGTH_FROM_FREQ(1, 800000));
- iota_gfx_init(); // turns on the display
+ if(iota_gfx_init()){ // turns on the display
+ screenWorks = 1;
+ }
#endif
#endif
#ifdef AUDIO_ENABLE
@@ -103,7 +107,9 @@ void matrix_init_user(void) {
void matrix_scan_user(void) {
#ifdef SSD1306OLED
- iota_gfx_task(); // this is what updates the display continuously
+ if(screenWorks){
+ iota_gfx_task(); // this is what updates the display continuously
+ };
#endif
}
diff --git a/keyboards/tkc1800/keymaps/wkl/keymap.c b/keyboards/tkc1800/keymaps/wkl/keymap.c
index 40d2e5fad0..e04c4d5c17 100644
--- a/keyboards/tkc1800/keymaps/wkl/keymap.c
+++ b/keyboards/tkc1800/keymaps/wkl/keymap.c
@@ -34,6 +34,8 @@ enum {
FUNCTION,
};
+bool screenWorks = 0;
+
//13 characters max without re-writing the "Layer: " format in iota_gfx_task_user()
static char layer_lookup[][14] = {"Base","Function"};
@@ -93,7 +95,9 @@ void matrix_init_user(void) {
// calls code for the SSD1306 OLED
_delay_ms(400);
TWI_Init(TWI_BIT_PRESCALE_1, TWI_BITLENGTH_FROM_FREQ(1, 800000));
- iota_gfx_init(); // turns on the display
+ if(iota_gfx_init()){ // turns on the display
+ screenWorks = 1;
+ }
#endif
#endif
#ifdef AUDIO_ENABLE
@@ -103,7 +107,9 @@ void matrix_init_user(void) {
void matrix_scan_user(void) {
#ifdef SSD1306OLED
- iota_gfx_task(); // this is what updates the display continuously
+ if(screenWorks){
+ iota_gfx_task(); // this is what updates the display continuously
+ };
#endif
}