Refactor satt/comet46 to use core OLED driver (#17856)

This commit is contained in:
Joel Challis
2022-07-31 15:35:42 +01:00
committed by GitHub
parent baf34989f1
commit 409790457c
12 changed files with 55 additions and 947 deletions

View File

@@ -1,29 +0,0 @@
/*
This is the c configuration file for the keymap
Copyright 2012 Jun Wako <wakojun@gmail.com>
Copyright 2015 Jack Humbert
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
// place overrides here
/* Use I2C or Serial */
#define USE_I2C
#define SSD1306OLED

View File

@@ -2,9 +2,6 @@
// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
#include QMK_KEYBOARD_H
#ifdef SSD1306OLED
#include "ssd1306.h"
#endif
// Each layer gets a name for readability, which is then used in the keymap matrix below.
@@ -148,8 +145,7 @@ layer_state_t layer_state_set_user(layer_state_t state) {
return update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST);
}
//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
#ifdef SSD1306OLED
#ifdef OLED_ENABLE
// You need to add source files to SRC in rules.mk when using OLED display functions
void set_keylog(uint16_t keycode);
@@ -157,25 +153,10 @@ const char *read_keylog(void);
const char *read_modifier_state(void);
const char *read_host_led_state(void);
void matrix_init_user(void) {
iota_gfx_init(false); // turns on the display
}
void matrix_scan_user(void) {
iota_gfx_task(); // this is what updates the display continuously
}
void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source) {
if (memcmp(dest->display, source->display, sizeof(dest->display))) {
memcpy(dest->display, source->display, sizeof(dest->display));
dest->dirty = true;
}
}
void render_status(struct CharacterMatrix *matrix) {
bool oled_task_user(void) {
// Layer state
char layer_str[22];
matrix_write(matrix, "Layer: ");
oled_write_P(PSTR("Layer: "), false);
uint8_t layer = get_highest_layer(layer_state);
uint8_t default_layer = get_highest_layer(eeconfig_read_default_layer());
switch (layer) {
@@ -207,27 +188,21 @@ void render_status(struct CharacterMatrix *matrix) {
default:
snprintf(layer_str, sizeof(layer_str), "Undef-%d", layer);
}
matrix_write_ln(matrix, layer_str);
oled_write_ln(layer_str, false);
// Last entered keycode
matrix_write_ln(matrix, read_keylog());
oled_write_ln(read_keylog(), false);
// Modifier state
matrix_write_ln(matrix, read_modifier_state());
oled_write_ln(read_modifier_state(), false);
// Host Keyboard LED Status
matrix_write(matrix, read_host_led_state());
oled_write(read_host_led_state(), false);
return false;
}
void iota_gfx_task_user(void) {
struct CharacterMatrix matrix;
matrix_clear(&matrix);
render_status(&matrix);
matrix_update(&display, &matrix);
}
#endif//SSD1306OLED
#endif
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
#ifdef SSD1306OLED
#ifdef OLED_ENABLE
if (record->event.pressed) {
set_keylog(keycode);
}

View File

@@ -1,5 +1,6 @@
# If you want to change display settings of the OLED, you need to change the following lines
SRC += ./lib/glcdfont.c \
./lib/keylogger.c \
SRC += ./lib/keylogger.c \
./lib/modifier_state_reader.c \
./lib/host_led_state_reader.c
OLED_ENABLE = yes

View File

@@ -1,29 +0,0 @@
/*
This is the c configuration file for the keymap
Copyright 2012 Jun Wako <wakojun@gmail.com>
Copyright 2015 Jack Humbert
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef CONFIG_USER_H
#define CONFIG_USER_H
/* Use I2C or Serial */
#define USE_I2C
#define SSD1306OLED
#endif

View File

@@ -5,9 +5,6 @@
#include "keymap_jis2us.h"
#include "action_pseudo_lut.h"
#include "keymap_japanese.h"
#ifdef SSD1306OLED
#include "ssd1306.h"
#endif
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
@@ -176,8 +173,7 @@ layer_state_t layer_state_set_user(layer_state_t state) {
}
}
//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
#ifdef SSD1306OLED
#ifdef OLED_ENABLE
// You need to add source files to SRC in rules.mk when using OLED display functions
void set_keylog(uint16_t keycode);
@@ -185,86 +181,59 @@ const char *read_keylog(void);
const char *read_modifier_state(void);
const char *read_host_led_state(void);
void matrix_init_user(void) {
iota_gfx_init(false); // turns on the display
}
void matrix_scan_user(void) {
iota_gfx_task(); // this is what updates the display continuously
}
void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source) {
if (memcmp(dest->display, source->display, sizeof(dest->display))) {
memcpy(dest->display, source->display, sizeof(dest->display));
dest->dirty = true;
}
}
void render_status(struct CharacterMatrix *matrix) {
bool oled_task_user(void) {
// Layer state
char layer_str[22];
matrix_write(matrix, "Layer: ");
oled_write_P(PSTR("Layer: "), false);
uint8_t layer = get_highest_layer(layer_state);
uint8_t default_layer = biton32(eeconfig_read_default_layer());
switch (layer) {
case _QWERTY:
switch (default_layer) {
case _QWERTY:
snprintf(layer_str, sizeof(layer_str), "Qwerty");
break;
case _PSEUDO_US:
snprintf(layer_str, sizeof(layer_str), "Psuedo_US");
break;
default:
snprintf(layer_str, sizeof(layer_str), "Undef-%d", default_layer);
break;
}
break;
case _RAISE:
snprintf(layer_str, sizeof(layer_str), "Raise");
break;
case _LOWER:
snprintf(layer_str, sizeof(layer_str), "Lower");
break;
uint8_t default_layer = get_highest_layer(eeconfig_read_default_layer());
switch (layer) {
case _QWERTY:
switch (default_layer) {
case _QWERTY:
snprintf(layer_str, sizeof(layer_str), "Qwerty");
break;
case _PSEUDO_US:
snprintf(layer_str, sizeof(layer_str), "Psuedo_US");
break;
default:
snprintf(layer_str, sizeof(layer_str), "Undef-%d", default_layer);
break;
}
break;
case _RAISE:
snprintf(layer_str, sizeof(layer_str), "Raise");
break;
case _LOWER:
snprintf(layer_str, sizeof(layer_str), "Lower");
break;
case _PSEUDO_US_RAISE:
snprintf(layer_str, sizeof(layer_str), "P_US_Raise");
break;
case _PSEUDO_US_LOWER:
snprintf(layer_str, sizeof(layer_str), "P_US_Lower");
break;
case _ADJUST:
snprintf(layer_str, sizeof(layer_str), "Adjust");
break;
default:
snprintf(layer_str, sizeof(layer_str), "Undef-%d", layer);
}
matrix_write_ln(matrix, layer_str);
case _ADJUST:
snprintf(layer_str, sizeof(layer_str), "Adjust");
break;
default:
snprintf(layer_str, sizeof(layer_str), "Undef-%d", layer);
}
oled_write_ln(layer_str, false);
// Last entered keycode
matrix_write_ln(matrix, read_keylog());
oled_write_ln(read_keylog(), false);
// Modifier state
matrix_write_ln(matrix, read_modifier_state());
oled_write_ln(read_modifier_state(), false);
// Host Keyboard LED Status
matrix_write(matrix, read_host_led_state());
oled_write(read_host_led_state(), false);
return false;
}
void iota_gfx_task_user(void) {
struct CharacterMatrix matrix;
#if DEBUG_TO_SCREEN
if (debug_enable) {
return;
}
#endif
matrix_clear(&matrix);
render_status(&matrix);
matrix_update(&display, &matrix);
}
#endif//SSD1306OLED
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
#ifdef SSD1306OLED
#ifdef OLED_ENABLE
if (record->event.pressed) {
set_keylog(keycode);
}

View File

@@ -1,8 +1,8 @@
SRC += action_pseudo_lut.c
# If you want to change display settings of the OLED, you need to change the following lines
SRC += ./lib/glcdfont.c \
./lib/keylogger.c \
SRC += ./lib/keylogger.c \
./lib/modifier_state_reader.c \
./lib/host_led_state_reader.c
OLED_ENABLE = yes