Skip to content

Commit

Permalink
Autodetect lack of screen presence
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
TerryMathews authored and jackhumbert committed Aug 30, 2018
1 parent 9723884 commit d12d058
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 4 deletions.
10 changes: 8 additions & 2 deletions keyboards/tkc1800/keymaps/default/keymap.c
Original file line number Diff line number Diff line change
Expand Up @@ -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"};

Expand Down Expand Up @@ -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
Expand All @@ -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
}

Expand Down
10 changes: 8 additions & 2 deletions keyboards/tkc1800/keymaps/wkl/keymap.c
Original file line number Diff line number Diff line change
Expand Up @@ -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"};

Expand Down Expand Up @@ -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
Expand All @@ -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
}

Expand Down

0 comments on commit d12d058

Please sign in to comment.