Refactor satt/comet46 to use core OLED driver (#17856)
This commit is contained in:
@@ -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
|
@@ -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);
|
||||
}
|
||||
|
@@ -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
|
||||
|
@@ -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
|
@@ -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);
|
||||
}
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user