qmk_firmware

QMK firmware for my keyboards (Corne, Sweep Ferris) and trackball (Ploopy Adept)
Log | Files | Refs | Submodules | LICENSE

is31fl3236.h (2517B)


      1 // Copyright 2024 QMK
      2 // SPDX-License-Identifier: GPL-2.0-or-later
      3 
      4 #pragma once
      5 
      6 #include <stdint.h>
      7 #include <stdbool.h>
      8 #include "progmem.h"
      9 #include "util.h"
     10 
     11 #define IS31FL3236_REG_SHUTDOWN 0x00
     12 #define IS31FL3236_REG_PWM 0x01
     13 #define IS31FL3236_REG_UPDATE 0x25
     14 #define IS31FL3236_REG_LED_CONTROL 0x26
     15 #define IS31FL3236_REG_GLOBAL_CONTROL 0x4A
     16 #define IS31FL3236_REG_PWM_FREQUENCY 0x4B
     17 #define IS31FL3236_REG_RESET 0x4F
     18 
     19 #define IS31FL3236_I2C_ADDRESS_GND 0x3C
     20 #define IS31FL3236_I2C_ADDRESS_SCL 0x3D
     21 #define IS31FL3236_I2C_ADDRESS_SDA 0x3E
     22 #define IS31FL3236_I2C_ADDRESS_VCC 0x3F
     23 
     24 #if defined(RGB_MATRIX_IS31FL3236)
     25 #    define IS31FL3236_LED_COUNT RGB_MATRIX_LED_COUNT
     26 #endif
     27 
     28 #if defined(IS31FL3236_I2C_ADDRESS_4)
     29 #    define IS31FL3236_DRIVER_COUNT 4
     30 #elif defined(IS31FL3236_I2C_ADDRESS_3)
     31 #    define IS31FL3236_DRIVER_COUNT 3
     32 #elif defined(IS31FL3236_I2C_ADDRESS_2)
     33 #    define IS31FL3236_DRIVER_COUNT 2
     34 #elif defined(IS31FL3236_I2C_ADDRESS_1)
     35 #    define IS31FL3236_DRIVER_COUNT 1
     36 #endif
     37 
     38 typedef struct is31fl3236_led_t {
     39     uint8_t driver : 2;
     40     uint8_t r;
     41     uint8_t g;
     42     uint8_t b;
     43 } PACKED is31fl3236_led_t;
     44 
     45 extern const is31fl3236_led_t PROGMEM g_is31fl3236_leds[IS31FL3236_LED_COUNT];
     46 
     47 void is31fl3236_init_drivers(void);
     48 
     49 void is31fl3236_init(uint8_t index);
     50 
     51 void is31fl3236_write_register(uint8_t index, uint8_t reg, uint8_t data);
     52 
     53 void is31fl3236_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
     54 
     55 void is31fl3236_set_color_all(uint8_t red, uint8_t green, uint8_t blue);
     56 
     57 void is31fl3236_set_led_control_register(uint8_t index, bool red, bool green, bool blue);
     58 
     59 void is31fl3236_update_pwm_buffers(uint8_t index);
     60 
     61 void is31fl3236_update_led_control_registers(uint8_t index);
     62 
     63 void is31fl3236_flush(void);
     64 
     65 #define IS31FL3236_PWM_FREQUENCY_3K_HZ 0b0
     66 #define IS31FL3236_PWM_FREQUENCY_22K_HZ 0b1
     67 
     68 #define OUT1 0x00
     69 #define OUT2 0x01
     70 #define OUT3 0x02
     71 #define OUT4 0x03
     72 #define OUT5 0x04
     73 #define OUT6 0x05
     74 #define OUT7 0x06
     75 #define OUT8 0x07
     76 #define OUT9 0x08
     77 #define OUT10 0x09
     78 #define OUT11 0x0A
     79 #define OUT12 0x0B
     80 #define OUT13 0x0C
     81 #define OUT14 0x0D
     82 #define OUT15 0x0E
     83 #define OUT16 0x0F
     84 #define OUT17 0x10
     85 #define OUT18 0x11
     86 #define OUT19 0x12
     87 #define OUT20 0x13
     88 #define OUT21 0x14
     89 #define OUT22 0x15
     90 #define OUT23 0x16
     91 #define OUT24 0x17
     92 #define OUT25 0x18
     93 #define OUT26 0x19
     94 #define OUT27 0x1A
     95 #define OUT28 0x1B
     96 #define OUT29 0x1C
     97 #define OUT30 0x1D
     98 #define OUT31 0x1E
     99 #define OUT32 0x1F
    100 #define OUT33 0x20
    101 #define OUT34 0x21
    102 #define OUT35 0x22
    103 #define OUT36 0x23