keychron_qmk_firmware/keyboards/lfkeyboards/lfkpad/lfkpad.c

75 lines
1.5 KiB
C
Raw Normal View History

2020-02-05 08:41:19 +06:00
#include "lfkpad.h"
#include "quantum.h"
#include <avr/timer_avr.h>
#include <avr/wdt.h>
#include "issi.h"
#include "TWIlib.h"
#include "lighting.h"
2020-02-05 08:41:19 +06:00
void matrix_init_kb(void) {
matrix_init_user();
2020-02-05 08:41:19 +06:00
#ifdef ISSI_ENABLE
issi_init();
#endif
2020-02-05 08:41:19 +06:00
#ifdef WATCHDOG_ENABLE
// This is done after turning the layer LED red, if we're caught in a loop
// we should get a flashing red light
wdt_enable(WDTO_500MS);
#endif
}
2020-02-05 08:41:19 +06:00
void matrix_scan_kb(void) {
#ifdef WATCHDOG_ENABLE
wdt_reset();
#endif
2020-02-05 08:41:19 +06:00
#ifdef ISSI_ENABLE
// switch/underglow lighting update
static uint32_t issi_device = 0;
static uint32_t twi_last_ready = 0;
2020-02-05 08:41:19 +06:00
if (twi_last_ready > 1000) {
// It's been way too long since the last ISSI update, reset the I2C bus and start again
dprintf("TWI failed to recover, TWI re-init\n");
twi_last_ready = 0;
TWIInit();
force_issi_refresh();
}
2020-02-05 08:41:19 +06:00
if (isTWIReady()) {
twi_last_ready = 0;
// If the i2c bus is available, kick off the issi update, alternate between devices
update_issi(issi_device, issi_device);
2020-02-05 08:41:19 +06:00
if (issi_device) {
issi_device = 0;
2020-02-05 08:41:19 +06:00
} else {
issi_device = 3;
}
2020-02-05 08:41:19 +06:00
} else {
twi_last_ready++;
}
#endif
2020-02-05 08:41:19 +06:00
matrix_scan_user();
}
// LFK lighting info
2020-02-05 08:41:19 +06:00
const uint8_t rgb_matrices[] = { 0, 1 };
const uint8_t rgb_sequence[] = {
32, 1, 2, 3,
31, 30, 5, 6,
28, 27, 7,
17, 18, 9, 8,
19, 21, 11,
22, 14, 12,
16, 26,
4, 25,
13, 24,
20
};