summaryrefslogtreecommitdiff
path: root/keyboards/input_club
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/input_club')
-rw-r--r--keyboards/input_club/ergodox_infinity/config.h29
-rw-r--r--keyboards/input_club/ergodox_infinity/ergodox_infinity.c2
-rw-r--r--keyboards/input_club/ergodox_infinity/info.json26
-rw-r--r--keyboards/input_club/infinity60/led/config.h2
-rw-r--r--keyboards/input_club/infinity60/led/led.c2
-rw-r--r--keyboards/input_club/k_type/config.h92
-rw-r--r--keyboards/input_club/k_type/i2c_master.c4
-rw-r--r--keyboards/input_club/k_type/i2c_master.h4
-rw-r--r--keyboards/input_club/k_type/info.json45
-rw-r--r--keyboards/input_club/k_type/is31fl3733-dual.c93
-rw-r--r--keyboards/input_club/k_type/is31fl3733-dual.h21
-rw-r--r--keyboards/input_club/k_type/keymaps/andrew-fahmy/config.h36
-rw-r--r--keyboards/input_club/whitefox/config.h2
-rw-r--r--keyboards/input_club/whitefox/info.json25
-rw-r--r--keyboards/input_club/whitefox/whitefox.c2
15 files changed, 167 insertions, 218 deletions
diff --git a/keyboards/input_club/ergodox_infinity/config.h b/keyboards/input_club/ergodox_infinity/config.h
index 3757ca3d60..b8ab5604d4 100644
--- a/keyboards/input_club/ergodox_infinity/config.h
+++ b/keyboards/input_club/ergodox_infinity/config.h
@@ -44,35 +44,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* LED matrix driver */
#define IS31FL3731_I2C_ADDRESS_1 IS31FL3731_I2C_ADDRESS_GND
-#define LED_MATRIX_LED_COUNT 76
-#define LED_MATRIX_SPLIT { 38, 38 }
-#define LED_DISABLE_WHEN_USB_SUSPENDED
-
-// LED Matrix Animation modes. Explicitly enabled
-// For full list of effects, see:
-// https://docs.qmk.fm/#/feature_led_matrix?id=led-matrix-effects
-#define ENABLE_LED_MATRIX_ALPHAS_MODS
-#define ENABLE_LED_MATRIX_BREATHING
-#define ENABLE_LED_MATRIX_BAND
-#define ENABLE_LED_MATRIX_BAND_PINWHEEL
-#define ENABLE_LED_MATRIX_BAND_SPIRAL
-#define ENABLE_LED_MATRIX_CYCLE_LEFT_RIGHT
-#define ENABLE_LED_MATRIX_CYCLE_UP_DOWN
-#define ENABLE_LED_MATRIX_CYCLE_OUT_IN
-#define ENABLE_LED_MATRIX_DUAL_BEACON
-#if defined(LED_MATRIX_KEYREACTIVE_ENABLED)
-# define ENABLE_LED_MATRIX_SOLID_REACTIVE_SIMPLE
-# define ENABLE_LED_MATRIX_SOLID_REACTIVE_WIDE
-# define ENABLE_LED_MATRIX_SOLID_REACTIVE_MULTIWIDE
-# define ENABLE_LED_MATRIX_SOLID_REACTIVE_CROSS
-# define ENABLE_LED_MATRIX_SOLID_REACTIVE_MULTICROSS
-# define ENABLE_LED_MATRIX_SOLID_REACTIVE_NEXUS
-# define ENABLE_LED_MATRIX_SOLID_REACTIVE_MULTINEXUS
-# define ENABLE_LED_MATRIX_SPLASH
-# define ENABLE_LED_MATRIX_MULTISPLASH
-#endif
-#define ENABLE_LED_MATRIX_WAVE_LEFT_RIGHT
-#define ENABLE_LED_MATRIX_WAVE_UP_DOWN
/* i2c (for LED matrix) */
#define I2C1_CLOCK_SPEED 400000
diff --git a/keyboards/input_club/ergodox_infinity/ergodox_infinity.c b/keyboards/input_club/ergodox_infinity/ergodox_infinity.c
index 8f245d9fa3..80d3681437 100644
--- a/keyboards/input_club/ergodox_infinity/ergodox_infinity.c
+++ b/keyboards/input_club/ergodox_infinity/ergodox_infinity.c
@@ -171,7 +171,7 @@ const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
#endif
#ifdef LED_MATRIX_ENABLE
-const is31fl3731_led_t PROGMEM g_is31fl3731_leds[LED_MATRIX_LED_COUNT] = {
+const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = {
// The numbers in the comments are the led numbers DXX on the PCB
/* Refer to IS31 manual for these locations
* driver
diff --git a/keyboards/input_club/ergodox_infinity/info.json b/keyboards/input_club/ergodox_infinity/info.json
index d69aeb5d0c..d2d1e73943 100644
--- a/keyboards/input_club/ergodox_infinity/info.json
+++ b/keyboards/input_club/ergodox_infinity/info.json
@@ -7,7 +7,31 @@
"device_version": "0.0.1"
},
"led_matrix": {
- "driver": "is31fl3731"
+ "animations":{
+ "alphas_mods": true,
+ "breathing": true,
+ "band": true,
+ "band_pinwheel": true,
+ "band_spiral": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "cycle_out_in": true,
+ "dual_beacon": true,
+ "solid_reactive_simple": true,
+ "solid_reactive_wide": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_multinexus": true,
+ "splash": true,
+ "multisplash": true,
+ "wave_left_right": true,
+ "wave_up_down": true
+ },
+ "driver": "is31fl3731",
+ "sleep": true,
+ "split_count": [38, 38]
},
"matrix_pins": {
"cols": ["D1", "D4", "D5", "D6", "D7"],
diff --git a/keyboards/input_club/infinity60/led/config.h b/keyboards/input_club/infinity60/led/config.h
index 293b192d60..b6f28a017e 100644
--- a/keyboards/input_club/infinity60/led/config.h
+++ b/keyboards/input_club/infinity60/led/config.h
@@ -3,8 +3,6 @@
#pragma once
-#define LED_MATRIX_LED_COUNT 63
-
#define IS31FL3731_I2C_ADDRESS_1 IS31FL3731_I2C_ADDRESS_GND
#define I2C1_CLOCK_SPEED 400000
diff --git a/keyboards/input_club/infinity60/led/led.c b/keyboards/input_club/infinity60/led/led.c
index a6a63e202d..e54f30d7b4 100644
--- a/keyboards/input_club/infinity60/led/led.c
+++ b/keyboards/input_club/infinity60/led/led.c
@@ -4,7 +4,7 @@
#include "quantum.h"
#ifdef LED_MATRIX_ENABLE
-const is31fl3731_led_t g_is31fl3731_leds[LED_MATRIX_LED_COUNT] = {
+const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = {
/* Refer to IS31 manual for these locations
* driver
* | LED address
diff --git a/keyboards/input_club/k_type/config.h b/keyboards/input_club/k_type/config.h
index c188038a82..182f0a61d7 100644
--- a/keyboards/input_club/k_type/config.h
+++ b/keyboards/input_club/k_type/config.h
@@ -33,80 +33,20 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT
-#ifdef RGB_MATRIX_ENABLE
-// RGB Matrix Animation modes. Explicitly enabled
-// For full list of effects, see:
-// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects
-# define ENABLE_RGB_MATRIX_ALPHAS_MODS
-# define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
-# define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
-# define ENABLE_RGB_MATRIX_BREATHING
-# define ENABLE_RGB_MATRIX_BAND_SAT
-# define ENABLE_RGB_MATRIX_BAND_VAL
-# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
-# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
-# define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
-# define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
-# define ENABLE_RGB_MATRIX_CYCLE_ALL
-# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
-# define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
-# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
-# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
-# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
-# define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
-# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
-# define ENABLE_RGB_MATRIX_DUAL_BEACON
-# define ENABLE_RGB_MATRIX_RAINBOW_BEACON
-# define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
-# define ENABLE_RGB_MATRIX_RAINDROPS
-# define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
-# define ENABLE_RGB_MATRIX_HUE_BREATHING
-# define ENABLE_RGB_MATRIX_HUE_PENDULUM
-# define ENABLE_RGB_MATRIX_HUE_WAVE
-# define ENABLE_RGB_MATRIX_PIXEL_RAIN
-# define ENABLE_RGB_MATRIX_PIXEL_FLOW
-# define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
-// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined
-# define ENABLE_RGB_MATRIX_TYPING_HEATMAP
-# define ENABLE_RGB_MATRIX_DIGITAL_RAIN
-// enabled only if RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
-# define ENABLE_RGB_MATRIX_SPLASH
-# define ENABLE_RGB_MATRIX_MULTISPLASH
-# define ENABLE_RGB_MATRIX_SOLID_SPLASH
-# define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
-
-# define RGB_MATRIX_KEYPRESSES
-# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
-
-
// i2c_master defines
-# define I2C_COUNT 2
-# define I2C1_CLOCK_SPEED 400000
-
-# define I2C1_SCL_PIN B0 // A2 on pinout = B0
-# define I2C1_SDA_PIN B1 // A2 on pinout = B1
-# define I2C1_SCL_PAL_MODE PAL_MODE_ALTERNATIVE_2
-# define I2C1_SDA_PAL_MODE PAL_MODE_ALTERNATIVE_2
-
-# define USE_I2C2
-# define I2C2_SCL_PIN C10 // A2 on pinout = C10
-# define I2C2_SDA_PIN C11 // A2 on pinout = C11
-# define I2C2_SCL_PAL_MODE PAL_MODE_ALTERNATIVE_2
-# define I2C2_SDA_PAL_MODE PAL_MODE_ALTERNATIVE_2
-
-# define IS31FL3733_I2C_ADDRESS_1 IS31FL3733_I2C_ADDRESS_GND_GND
-# define IS31FL3733_I2C_ADDRESS_2 IS31FL3733_I2C_ADDRESS_GND_GND
-# define IS31FL3733_DRIVER_COUNT 2
-# define IS31FL3733_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
-# define DRIVER_1_LED_TOTAL 64
-# define DRIVER_2_LED_TOTAL 55
-# define RGB_MATRIX_LED_COUNT IS31FL3733_LED_COUNT
-#endif
+#define I2C_COUNT 2
+#define I2C1_CLOCK_SPEED 400000
+
+#define I2C1_SCL_PIN B0 // A2 on pinout = B0
+#define I2C1_SDA_PIN B1 // A2 on pinout = B1
+#define I2C1_SCL_PAL_MODE PAL_MODE_ALTERNATIVE_2
+#define I2C1_SDA_PAL_MODE PAL_MODE_ALTERNATIVE_2
+
+#define USE_I2C2
+#define I2C2_SCL_PIN C10 // A2 on pinout = C10
+#define I2C2_SDA_PIN C11 // A2 on pinout = C11
+#define I2C2_SCL_PAL_MODE PAL_MODE_ALTERNATIVE_2
+#define I2C2_SDA_PAL_MODE PAL_MODE_ALTERNATIVE_2
+
+#define IS31FL3733_I2C_ADDRESS_1 IS31FL3733_I2C_ADDRESS_GND_GND
+#define IS31FL3733_I2C_ADDRESS_2 IS31FL3733_I2C_ADDRESS_GND_GND
diff --git a/keyboards/input_club/k_type/i2c_master.c b/keyboards/input_club/k_type/i2c_master.c
index af34d55ef6..e25ae2ef6f 100644
--- a/keyboards/input_club/k_type/i2c_master.c
+++ b/keyboards/input_club/k_type/i2c_master.c
@@ -114,7 +114,7 @@ i2c_status_t i2c_receive(uint8_t index, uint8_t address, uint8_t* data, uint16_t
return chibios_to_qmk(&status);
}
-i2c_status_t i2c_writeReg(uint8_t index, uint8_t devaddr, uint8_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout) {
+i2c_status_t i2c_write_register(uint8_t index, uint8_t devaddr, uint8_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout) {
if(index >= I2C_COUNT) {
return I2C_STATUS_ERROR;
}
@@ -131,7 +131,7 @@ i2c_status_t i2c_writeReg(uint8_t index, uint8_t devaddr, uint8_t regaddr, const
return chibios_to_qmk(&status);
}
-i2c_status_t i2c_readReg(uint8_t index, uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout) {
+i2c_status_t i2c_read_register(uint8_t index, uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout) {
if(index >= I2C_COUNT) {
return I2C_STATUS_ERROR;
}
diff --git a/keyboards/input_club/k_type/i2c_master.h b/keyboards/input_club/k_type/i2c_master.h
index db4f12e43c..aa6ffe48b2 100644
--- a/keyboards/input_club/k_type/i2c_master.h
+++ b/keyboards/input_club/k_type/i2c_master.h
@@ -123,6 +123,6 @@ void i2c_init(I2CDriver *driver, ioline_t scl_pin, ioline_t sda_pin);
i2c_status_t i2c_start(uint8_t index, uint8_t address);
i2c_status_t i2c_transmit(uint8_t index, uint8_t address, const uint8_t* data, uint16_t length, uint16_t timeout);
i2c_status_t i2c_receive(uint8_t index, uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout);
-i2c_status_t i2c_writeReg(uint8_t index, uint8_t devaddr, uint8_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout);
-i2c_status_t i2c_readReg(uint8_t index, uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout);
+i2c_status_t i2c_write_register(uint8_t index, uint8_t devaddr, uint8_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout);
+i2c_status_t i2c_read_register(uint8_t index, uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout);
void i2c_stop(uint8_t index);
diff --git a/keyboards/input_club/k_type/info.json b/keyboards/input_club/k_type/info.json
index 7279c8a933..17076a82d8 100644
--- a/keyboards/input_club/k_type/info.json
+++ b/keyboards/input_club/k_type/info.json
@@ -9,6 +9,51 @@
"device_version": "0.0.1"
},
"rgb_matrix": {
+ "animations": {
+ "alphas_mods": true,
+ "gradient_up_down": true,
+ "gradient_left_right": true,
+ "breathing": true,
+ "band_sat": true,
+ "band_val": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "rainbow_moving_chevron": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "dual_beacon": true,
+ "rainbow_beacon": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "jellybean_raindrops": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "pixel_rain": true,
+ "pixel_flow": true,
+ "pixel_fractal": true,
+ "typing_heatmap": true,
+ "digital_rain": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "solid_reactive_wide": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_multinexus": true,
+ "splash": true,
+ "multisplash": true,
+ "solid_splash": true,
+ "solid_multisplash": true
+ },
"driver": "custom"
},
"matrix_pins": {
diff --git a/keyboards/input_club/k_type/is31fl3733-dual.c b/keyboards/input_club/k_type/is31fl3733-dual.c
index e471cf0b71..dce371d444 100644
--- a/keyboards/input_club/k_type/is31fl3733-dual.c
+++ b/keyboards/input_club/k_type/is31fl3733-dual.c
@@ -60,11 +60,8 @@
# define IS31FL3733_SYNC_4 IS31FL3733_SYNC_NONE
#endif
-// Transfer buffer for TWITransmitData()
-uint8_t g_twi_transfer_buffer[20];
-
// These buffers match the IS31FL3733 PWM registers.
-// The control buffers match the PG0 LED On/Off registers.
+// The control buffers match the page 0 LED On/Off registers.
// Storing them like this is optimal for I2C transfers to the registers.
// We could optimize this and take out the unused registers from these
// buffers and the transfers in is31fl3733_write_pwm_buffer() but it's
@@ -75,58 +72,40 @@ bool g_pwm_buffer_update_required[IS31FL3733_DRIVER_COUNT] = {false};
uint8_t g_led_control_registers[IS31FL3733_DRIVER_COUNT][IS31FL3733_LED_CONTROL_REGISTER_COUNT] = {0};
bool g_led_control_registers_update_required[IS31FL3733_DRIVER_COUNT] = {false};
-bool is31fl3733_write_register(uint8_t index, uint8_t addr, uint8_t reg, uint8_t data) {
- // If the transaction fails function returns false.
- g_twi_transfer_buffer[0] = reg;
- g_twi_transfer_buffer[1] = data;
-
+void is31fl3733_write_register(uint8_t index, uint8_t addr, uint8_t reg, uint8_t data) {
#if IS31FL3733_I2C_PERSISTENCE > 0
for (uint8_t i = 0; i < IS31FL3733_I2C_PERSISTENCE; i++) {
- if (i2c_transmit(index, addr << 1, g_twi_transfer_buffer, 2, IS31FL3733_I2C_TIMEOUT) != 0) {
- return false;
- }
+ if (i2c_write_register(index, addr << 1, reg, &data, 1, IS31FL3733_I2C_TIMEOUT) == I2C_STATUS_SUCCESS) break;
}
#else
- if (i2c_transmit(index, addr << 1, g_twi_transfer_buffer, 2, IS31FL3733_I2C_TIMEOUT) != 0) {
- return false;
- }
+ i2c_write_register(index, addr << 1, reg, &data, 1, IS31FL3733_I2C_TIMEOUT);
#endif
- return true;
}
-bool is31fl3733_write_pwm_buffer(uint8_t index, uint8_t addr, uint8_t *pwm_buffer) {
- // Assumes PG1 is already selected.
- // If any of the transactions fails function returns false.
+void is31fl3733_select_page(uint8_t index, uint8_t addr, uint8_t page) {
+ is31fl3733_write_register(index, addr, IS31FL3733_REG_COMMAND_WRITE_LOCK, IS31FL3733_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3733_write_register(index, addr, IS31FL3733_REG_COMMAND, page);
+}
+
+void is31fl3733_write_pwm_buffer(uint8_t addr, uint8_t index) {
+ // Assumes page 1 is already selected.
// Transmit PWM registers in 12 transfers of 16 bytes.
- // g_twi_transfer_buffer[] is 20 bytes
// Iterate over the pwm_buffer contents at 16 byte intervals.
- for (int i = 0; i < IS31FL3733_PWM_REGISTER_COUNT; i += 16) {
- g_twi_transfer_buffer[0] = i;
- // Copy the data from i to i+15.
- // Device will auto-increment register for data after the first byte
- // Thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer.
- for (int j = 0; j < 16; j++) {
- g_twi_transfer_buffer[1 + j] = pwm_buffer[i + j];
- }
-
+ for (uint8_t i = 0; i < IS31FL3733_PWM_REGISTER_COUNT; i += 16) {
#if IS31FL3733_I2C_PERSISTENCE > 0
- for (uint8_t i = 0; i < IS31FL3733_I2C_PERSISTENCE; i++) {
- if (i2c_transmit(index, addr << 1, g_twi_transfer_buffer, 17, IS31FL3733_I2C_TIMEOUT) != 0) {
- return false;
- }
+ for (uint8_t j = 0; j < IS31FL3733_I2C_PERSISTENCE; j++) {
+ if (i2c_write_register(index, addr << 1, i, g_pwm_buffer[index] + i, 16, IS31FL3733_I2C_TIMEOUT) == I2C_STATUS_SUCCESS) break;
}
#else
- if (i2c_transmit(index, addr << 1, g_twi_transfer_buffer, 17, IS31FL3733_I2C_TIMEOUT) != 0) {
- return false;
- }
+ i2c_write_register(index, addr << 1, i, g_pwm_buffer[index] + i, 16, IS31FL3733_I2C_TIMEOUT);
#endif
}
- return true;
}
void is31fl3733_init_drivers(void) {
i2c_init(&I2CD1, I2C1_SCL_PIN, I2C1_SDA_PIN);
+
is31fl3733_init(0, IS31FL3733_I2C_ADDRESS_1, IS31FL3733_SYNC_1);
# ifdef USE_I2C2
i2c_init(&I2CD2, I2C2_SCL_PIN, I2C2_SDA_PIN);
@@ -150,32 +129,23 @@ void is31fl3733_init(uint8_t bus, uint8_t addr, uint8_t sync) {
// then disable software shutdown.
// Sync is passed so set it according to the datasheet.
- // Unlock the command register.
- is31fl3733_write_register(bus, addr, IS31FL3733_REG_COMMAND_WRITE_LOCK, IS31FL3733_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3733_select_page(bus, addr, IS31FL3733_COMMAND_LED_CONTROL);
- // Select PG0
- is31fl3733_write_register(bus, addr, IS31FL3733_REG_COMMAND, IS31FL3733_COMMAND_LED_CONTROL);
// Turn off all LEDs.
for (int i = 0; i < IS31FL3733_LED_CONTROL_REGISTER_COUNT; i++) {
is31fl3733_write_register(bus, addr, i, 0x00);
}
- // Unlock the command register.
- is31fl3733_write_register(bus, addr, IS31FL3733_REG_COMMAND_WRITE_LOCK, IS31FL3733_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3733_select_page(bus, addr, IS31FL3733_COMMAND_PWM);
- // Select PG1
- is31fl3733_write_register(bus, addr, IS31FL3733_REG_COMMAND, IS31FL3733_COMMAND_PWM);
// Set PWM on all LEDs to 0
// No need to setup Breath registers to PWM as that is the default.
for (int i = 0; i < IS31FL3733_PWM_REGISTER_COUNT; i++) {
is31fl3733_write_register(bus, addr, i, 0x00);
}
- // Unlock the command register.
- is31fl3733_write_register(bus, addr, IS31FL3733_REG_COMMAND_WRITE_LOCK, IS31FL3733_COMMAND_WRITE_LOCK_MAGIC);
+ is31fl3733_select_page(bus, addr, IS31FL3733_COMMAND_FUNCTION);
- // Select PG3
- is31fl3733_write_register(bus, addr, IS31FL3733_REG_COMMAND, IS31FL3733_COMMAND_FUNCTION);
// Set de-ghost pull-up resistors (SWx)
is31fl3733_write_register(bus, addr, IS31FL3733_FUNCTION_REG_SW_PULLUP, IS31FL3733_SW_PULLUP);
// Set de-ghost pull-down resistors (CSx)
@@ -191,12 +161,14 @@ void is31fl3733_init(uint8_t bus, uint8_t addr, uint8_t sync) {
void is31fl3733_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
is31fl3733_led_t led;
+
if (index >= 0 && index < IS31FL3733_LED_COUNT) {
memcpy_P(&led, (&g_is31fl3733_leds[index]), sizeof(led));
if (g_pwm_buffer[led.driver][led.r] == red && g_pwm_buffer[led.driver][led.g] == green && g_pwm_buffer[led.driver][led.b] == blue) {
return;
}
+
g_pwm_buffer[led.driver][led.r] = red;
g_pwm_buffer[led.driver][led.g] = green;
g_pwm_buffer[led.driver][led.b] = blue;
@@ -242,29 +214,24 @@ void is31fl3733_set_led_control_register(uint8_t index, bool red, bool green, bo
void is31fl3733_update_pwm_buffers(uint8_t addr, uint8_t index) {
if (g_pwm_buffer_update_required[index]) {
- // Firstly we need to unlock the command register and select PG1.
- is31fl3733_write_register(index, addr, IS31FL3733_REG_COMMAND_WRITE_LOCK, IS31FL3733_COMMAND_WRITE_LOCK_MAGIC);
- is31fl3733_write_register(index, addr, IS31FL3733_REG_COMMAND, IS31FL3733_COMMAND_PWM);
-
- // If any of the transactions fail we risk writing dirty PG0,
- // refresh page 0 just in case.
- if (!is31fl3733_write_pwm_buffer(index, addr, g_pwm_buffer[index])) {
- g_led_control_registers_update_required[index] = true;
- }
+ is31fl3733_select_page(index, addr, IS31FL3733_COMMAND_PWM);
+
+ is31fl3733_write_pwm_buffer(addr, index);
+
+ g_pwm_buffer_update_required[index] = false;
}
- g_pwm_buffer_update_required[index] = false;
}
void is31fl3733_update_led_control_registers(uint8_t addr, uint8_t index) {
if (g_led_control_registers_update_required[index]) {
- // Firstly we need to unlock the command register and select PG0
- is31fl3733_write_register(index, addr, IS31FL3733_REG_COMMAND_WRITE_LOCK, IS31FL3733_COMMAND_WRITE_LOCK_MAGIC);
- is31fl3733_write_register(index, addr, IS31FL3733_REG_COMMAND, IS31FL3733_COMMAND_LED_CONTROL);
+ is31fl3733_select_page(index, addr, IS31FL3733_COMMAND_LED_CONTROL);
+
for (int i = 0; i < IS31FL3733_LED_CONTROL_REGISTER_COUNT; i++) {
is31fl3733_write_register(index, addr, i, g_led_control_registers[index][i]);
}
+
+ g_led_control_registers_update_required[index] = false;
}
- g_led_control_registers_update_required[index] = false;
}
void is31fl3733_flush(void) {
diff --git a/keyboards/input_club/k_type/is31fl3733-dual.h b/keyboards/input_club/k_type/is31fl3733-dual.h
index 2f7d58f7e7..1237fc77d1 100644
--- a/keyboards/input_club/k_type/is31fl3733-dual.h
+++ b/keyboards/input_club/k_type/is31fl3733-dual.h
@@ -21,6 +21,7 @@
#include <stdint.h>
#include <stdbool.h>
#include "progmem.h"
+#include "util.h"
#define IS31FL3733_REG_INTERRUPT_MASK 0xF0
#define IS31FL3733_REG_INTERRUPT_STATUS 0xF1
@@ -58,19 +59,33 @@
#define IS31FL3733_I2C_ADDRESS_VCC_SDA 0x5E
#define IS31FL3733_I2C_ADDRESS_VCC_VCC 0x5F
+#if !defined(IS31FL3733_LED_COUNT)
+# define IS31FL3733_LED_COUNT RGB_MATRIX_LED_COUNT
+#endif
+
+#if defined(IS31FL3733_I2C_ADDRESS_4)
+# define IS31FL3733_DRIVER_COUNT 4
+#elif defined(IS31FL3733_I2C_ADDRESS_3)
+# define IS31FL3733_DRIVER_COUNT 3
+#elif defined(IS31FL3733_I2C_ADDRESS_2)
+# define IS31FL3733_DRIVER_COUNT 2
+#elif defined(IS31FL3733_I2C_ADDRESS_1)
+# define IS31FL3733_DRIVER_COUNT 1
+#endif
+
typedef struct is31fl3733_led_t {
uint8_t driver : 2;
uint8_t r;
uint8_t g;
uint8_t b;
-} __attribute__((packed)) is31fl3733_led_t;
+} PACKED is31fl3733_led_t;
extern const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT];
void is31fl3733_init_drivers(void);
void is31fl3733_init(uint8_t bus, uint8_t addr, uint8_t sync);
-bool is31fl3733_write_register(uint8_t index, uint8_t addr, uint8_t reg, uint8_t data);
-bool is31fl3733_write_pwm_buffer(uint8_t index, uint8_t addr, uint8_t *pwm_buffer);
+void is31fl3733_write_register(uint8_t index, uint8_t addr, uint8_t reg, uint8_t data);
+void is31fl3733_select_page(uint8_t index, uint8_t addr, uint8_t page);
void is31fl3733_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
void is31fl3733_set_color_all(uint8_t red, uint8_t green, uint8_t blue);
diff --git a/keyboards/input_club/k_type/keymaps/andrew-fahmy/config.h b/keyboards/input_club/k_type/keymaps/andrew-fahmy/config.h
index c40495c8de..5052271687 100644
--- a/keyboards/input_club/k_type/keymaps/andrew-fahmy/config.h
+++ b/keyboards/input_club/k_type/keymaps/andrew-fahmy/config.h
@@ -16,37 +16,5 @@
#pragma once
-
-#ifdef RGB_MATRIX_ENABLE
-// # define RGB_MATRIX_FRAMEBUFFER_EFFECTS
-// # define RGB_MATRIX_KEYPRESSES
-# define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_RAINDROPS
-
-// # define DEBUG_MATRIX_SCAN_RATE
-
-# define RGB_MATRIX_LED_FLUSH_LIMIT 100
-// # define RGB_MATRIX_LED_PROCESS_LIMIT 2
-
-// i2c_master defines
-# define I2C_COUNT 2
-
-# define I2C1_BANK GPIOB
-# define I2C1_SCL 0 // A2 on pinout = B0
-# define I2C1_SDA 1 // A2 on pinout = B1
-# define I2C1_SCL_PAL_MODE PAL_MODE_ALTERNATIVE_2
-# define I2C1_SDA_PAL_MODE PAL_MODE_ALTERNATIVE_2
-
-# define USE_I2C2
-# define I2C2_BANK GPIOC
-# define I2C2_SCL 10 // A2 on pinout = C10
-# define I2C2_SDA 11 // A2 on pinout = C11
-# define I2C2_SCL_PAL_MODE PAL_MODE_ALTERNATIVE_2
-# define I2C2_SDA_PAL_MODE PAL_MODE_ALTERNATIVE_2
-
-# define DRIVER_ADDR_1 0b1010000
-# define DRIVER_ADDR_2 0b1010000
-# define DRIVER_COUNT 2
-# define DRIVER_1_LED_TOTAL 64
-# define DRIVER_2_LED_TOTAL 55
-# define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
-#endif
+#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_RAINDROPS
+#define RGB_MATRIX_LED_FLUSH_LIMIT 100
diff --git a/keyboards/input_club/whitefox/config.h b/keyboards/input_club/whitefox/config.h
index 2d6affe84a..0a2a060e9b 100644
--- a/keyboards/input_club/whitefox/config.h
+++ b/keyboards/input_club/whitefox/config.h
@@ -22,8 +22,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* LED matrix driver */
#define IS31FL3731_I2C_ADDRESS_1 IS31FL3731_I2C_ADDRESS_GND
-#define LED_MATRIX_LED_COUNT 71
-#define LED_DISABLE_WHEN_USB_SUSPENDED
/* i2c (for LED matrix) */
#define I2C1_CLOCK_SPEED 400000
diff --git a/keyboards/input_club/whitefox/info.json b/keyboards/input_club/whitefox/info.json
index cb578e99b4..0428907fb8 100644
--- a/keyboards/input_club/whitefox/info.json
+++ b/keyboards/input_club/whitefox/info.json
@@ -8,7 +8,30 @@
"device_version": "0.0.1"
},
"led_matrix": {
- "driver": "is31fl3731"
+ "animations":{
+ "alphas_mods": true,
+ "breathing": true,
+ "band": true,
+ "band_pinwheel": true,
+ "band_spiral": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "cycle_out_in": true,
+ "dual_beacon": true,
+ "solid_reactive_simple": true,
+ "solid_reactive_wide": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_multinexus": true,
+ "splash": true,
+ "multisplash": true,
+ "wave_left_right": true,
+ "wave_up_down": true
+ },
+ "driver": "is31fl3731",
+ "sleep": true
},
"matrix_pins": {
"cols": ["B2", "B3", "B18", "B19", "C0", "C8", "C9", "C10", "C11"],
diff --git a/keyboards/input_club/whitefox/whitefox.c b/keyboards/input_club/whitefox/whitefox.c
index 63c6a49240..07741365c3 100644
--- a/keyboards/input_club/whitefox/whitefox.c
+++ b/keyboards/input_club/whitefox/whitefox.c
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "quantum.h"
#ifdef LED_MATRIX_ENABLE
-const is31fl3731_led_t PROGMEM g_is31fl3731_leds[LED_MATRIX_LED_COUNT] = {
+const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = {
// The numbers in the comments are the led numbers DXX on the PCB
/* Refer to IS31 manual for these locations
* driver