~ruther/qmk_firmware

fca7cc1747642d077898e301945df86bfdea0784 — Barabas 4 years ago 992b146
Added OLED fade out support (#12086)

3 files changed, 29 insertions(+), 2 deletions(-)

M docs/feature_oled_driver.md
M drivers/oled/oled_driver.c
M drivers/oled/oled_driver.h
M docs/feature_oled_driver.md => docs/feature_oled_driver.md +2 -0
@@ 145,6 145,8 @@ void oled_task_user(void) {
|`OLED_FONT_WIDTH`          |`6`              |The font width                                                                                                            |
|`OLED_FONT_HEIGHT`         |`8`              |The font height (untested)                                                                                                |
|`OLED_TIMEOUT`             |`60000`          |Turns off the OLED screen after 60000ms of keyboard inactivity. Helps reduce OLED Burn-in. Set to 0 to disable.           |
|`OLED_FADE_OUT`            |*Not defined*    |Enables fade out animation. Use together with `OLED_TIMEOUT`.                                                             |
|`OLED_FADE_OUT_INTERVAL`   |`0`              |The speed of fade out animation, from 0 to 15. Larger values are slower.                                                  |
|`OLED_SCROLL_TIMEOUT`      |`0`              |Scrolls the OLED screen after 0ms of OLED inactivity. Helps reduce OLED Burn-in. Set to 0 to disable.                     |
|`OLED_SCROLL_TIMEOUT_RIGHT`|*Not defined*    |Scroll timeout direction is right when defined, left when undefined.                                                      |
|`OLED_IC`                  |`OLED_IC_SSD1306`|Set to `OLED_IC_SH1106` if you're using the SH1106 OLED controller.                                                       |

M drivers/oled/oled_driver.c => drivers/oled/oled_driver.c +19 -2
@@ 73,6 73,11 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define PRE_CHARGE_PERIOD 0xD9
#define VCOM_DETECT 0xDB

// Advance Graphic Commands
#define FADE_BLINK 0x23
#define ENABLE_FADE 0x20
#define ENABLE_BLINK 0x30

// Charge Pump Commands
#define CHARGE_PUMP 0x8D



@@ 547,7 552,13 @@ bool oled_on(void) {
    oled_timeout = timer_read32() + OLED_TIMEOUT;
#endif

    static const uint8_t PROGMEM display_on[] = {I2C_CMD, DISPLAY_ON};
    static const uint8_t PROGMEM display_on[] =
#ifdef OLED_FADE_OUT
        {I2C_CMD, FADE_BLINK, 0x00};
#else
        {I2C_CMD, DISPLAY_ON};
#endif

    if (!oled_active) {
        if (I2C_TRANSMIT_P(display_on) != I2C_STATUS_SUCCESS) {
            print("oled_on cmd failed\n");


@@ 563,7 574,13 @@ bool oled_off(void) {
        return !oled_active;
    }

    static const uint8_t PROGMEM display_off[] = {I2C_CMD, DISPLAY_OFF};
    static const uint8_t PROGMEM display_off[] =
#ifdef OLED_FADE_OUT
        {I2C_CMD, FADE_BLINK, ENABLE_FADE | OLED_FADE_OUT_INTERVAL};
#else
        {I2C_CMD, DISPLAY_OFF};
#endif

    if (oled_active) {
        if (I2C_TRANSMIT_P(display_off) != I2C_STATUS_SUCCESS) {
            print("oled_off cmd failed\n");

M drivers/oled/oled_driver.h => drivers/oled/oled_driver.h +8 -0
@@ 154,6 154,14 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#    endif
#endif

#if !defined(OLED_FADE_OUT_INTERVAL)
#    define OLED_FADE_OUT_INTERVAL 0x00
#endif

#if OLED_FADE_OUT_INTERVAL > 0x0F || OLED_FADE_OUT_INTERVAL < 0x00
#    error OLED_FADE_OUT_INTERVAL must be between 0x00 and 0x0F
#endif

#if !defined(OLED_I2C_TIMEOUT)
#    define OLED_I2C_TIMEOUT 100
#endif