summaryrefslogtreecommitdiffstats
path: root/keyboards/tzarc/djinn
diff options
context:
space:
mode:
authorlokher <lokher@gmail.com>2022-12-06 17:10:48 +0800
committerlokher <lokher@gmail.com>2022-12-07 15:50:49 +0800
commita336c2c5005251e4cb0f3a62ccabdb4cfccad915 (patch)
tree3c948b631a5e3b6f940dabe02fad3c7487e6f350 /keyboards/tzarc/djinn
parent27fc28fd2ff52e079a5bc58d6aaea4c752420615 (diff)
Merge upstream master to 2022 Q4 breaking change
Diffstat (limited to 'keyboards/tzarc/djinn')
-rw-r--r--keyboards/tzarc/djinn/djinn.c233
-rw-r--r--keyboards/tzarc/djinn/djinn_portscan_matrix.c117
-rw-r--r--keyboards/tzarc/djinn/graphics/theme_djinn_default.c307
-rw-r--r--keyboards/tzarc/djinn/keymaps/default/keymap.c107
-rw-r--r--keyboards/tzarc/djinn/rev1/config.h35
-rw-r--r--keyboards/tzarc/djinn/rev2/config.h47
6 files changed, 0 insertions, 846 deletions
diff --git a/keyboards/tzarc/djinn/djinn.c b/keyboards/tzarc/djinn/djinn.c
deleted file mode 100644
index 93b1ee775e..0000000000
--- a/keyboards/tzarc/djinn/djinn.c
+++ /dev/null
@@ -1,233 +0,0 @@
-// Copyright 2018-2022 Nick Brassel (@tzarc)
-// SPDX-License-Identifier: GPL-2.0-or-later
-#include <string.h>
-#include "quantum.h"
-#include <hal_pal.h>
-#include "djinn.h"
-#include "serial.h"
-#include "split_util.h"
-#include "qp.h"
-
-painter_device_t lcd;
-
-// clang-format off
-#ifdef SWAP_HANDS_ENABLE
-const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
- { { 6, 6 }, { 5, 6 }, { 4, 6 }, { 3, 6 }, { 2, 6 }, { 1, 6 }, { 0, 6 } },
- { { 6, 7 }, { 5, 7 }, { 4, 7 }, { 3, 7 }, { 2, 7 }, { 1, 7 }, { 0, 7 } },
- { { 6, 8 }, { 5, 8 }, { 4, 8 }, { 3, 8 }, { 2, 8 }, { 1, 8 }, { 0, 8 } },
- { { 6, 9 }, { 5, 9 }, { 4, 9 }, { 3, 9 }, { 2, 9 }, { 1, 9 }, { 0, 9 } },
- { { 0, 0 }, { 0, 0 }, { 0, 0 }, { 6, 10 }, { 5, 10 }, { 4, 10 }, { 3, 10 } },
- { { 0, 0 }, { 6, 11 }, { 5, 11 }, { 4, 11 }, { 3, 11 }, { 2, 11 }, { 1, 11 } },
-
- { { 6, 0 }, { 5, 0 }, { 4, 0 }, { 3, 0 }, { 2, 0 }, { 1, 0 }, { 0, 0 } },
- { { 6, 1 }, { 5, 1 }, { 4, 1 }, { 3, 1 }, { 2, 1 }, { 1, 1 }, { 0, 1 } },
- { { 6, 2 }, { 5, 2 }, { 4, 2 }, { 3, 2 }, { 2, 2 }, { 1, 2 }, { 0, 2 } },
- { { 6, 3 }, { 5, 3 }, { 4, 3 }, { 3, 3 }, { 2, 3 }, { 1, 3 }, { 0, 3 } },
- { { 0, 0 }, { 0, 0 }, { 0, 0 }, { 6, 4 }, { 5, 4 }, { 4, 4 }, { 3, 4 } },
- { { 0, 0 }, { 6, 5 }, { 5, 5 }, { 4, 5 }, { 3, 5 }, { 2, 5 }, { 1, 5 } },
-};
-# ifdef ENCODER_MAP_ENABLE
-const uint8_t PROGMEM encoder_hand_swap_config[NUM_ENCODERS] = { 1, 0 };
-# endif // ENCODER_MAP_ENABLE
-#endif // SWAP_HANDS_ENABLE
-// clang-format on
-
-void board_init(void) {
- usbpd_init();
-}
-
-//----------------------------------------------------------
-// Initialisation
-
-void keyboard_post_init_kb(void) {
- // Register keyboard state sync split transaction
- transaction_register_rpc(RPC_ID_SYNC_STATE_KB, kb_state_sync_slave);
-
- // Reset the initial shared data value between master and slave
- memset(&kb_state, 0, sizeof(kb_state));
-
- // Turn off increased current limits
- setPinOutput(RGB_CURR_1500mA_OK_PIN);
- writePinLow(RGB_CURR_1500mA_OK_PIN);
- setPinOutput(RGB_CURR_3000mA_OK_PIN);
- writePinLow(RGB_CURR_3000mA_OK_PIN);
-
- // Turn on the RGB
- setPinOutput(RGB_POWER_ENABLE_PIN);
- writePinHigh(RGB_POWER_ENABLE_PIN);
-
-#ifdef EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN
- setPinOutput(EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN);
- writePinHigh(EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN);
-#endif // EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN
-
- // Turn on the LCD
- setPinOutput(LCD_POWER_ENABLE_PIN);
- writePinHigh(LCD_POWER_ENABLE_PIN);
-
- // Let the LCD get some power...
- wait_ms(150);
-
- // Initialise the LCD
- lcd = qp_ili9341_make_spi_device(240, 320, LCD_CS_PIN, LCD_DC_PIN, LCD_RST_PIN, 4, 0);
- qp_init(lcd, QP_ROTATION_0);
-
- // Turn on the LCD and clear the display
- kb_state.lcd_power = 1;
- qp_power(lcd, true);
- qp_rect(lcd, 0, 0, 239, 319, HSV_BLACK, true);
-
- // Turn on the LCD backlight
- backlight_enable();
- backlight_level(BACKLIGHT_LEVELS);
-
- // Allow for user post-init
- keyboard_post_init_user();
-}
-
-//----------------------------------------------------------
-// RGB brightness scaling dependent on USBPD state
-
-#if defined(RGB_MATRIX_ENABLE)
-RGB rgb_matrix_hsv_to_rgb(HSV hsv) {
- float scale;
-
-# ifdef DJINN_SUPPORTS_3A_FUSE
- // The updated BOM on the Djinn has properly-spec'ed fuses -- 1500mA/3000mA hold current
- switch (kb_state.current_setting) {
- default:
- case USBPD_500MA:
- scale = 0.35f;
- break;
- case USBPD_1500MA:
- scale = 0.75f;
- break;
- case USBPD_3000MA:
- scale = 1.0f;
- break;
- }
-# else
- // The original BOM on the Djinn had wrongly-spec'ed fuses -- 750mA/1500mA hold current
- switch (kb_state.current_setting) {
- default:
- case USBPD_500MA:
- case USBPD_1500MA:
- scale = 0.35f;
- break;
- case USBPD_3000MA:
- scale = 0.75f;
- break;
- }
-# endif
-
- hsv.v = (uint8_t)(hsv.v * scale);
- return hsv_to_rgb(hsv);
-}
-#endif
-
-//----------------------------------------------------------
-// UI Placeholder, implemented in themes
-
-__attribute__((weak)) void draw_ui_user(bool force_redraw) {}
-
-//----------------------------------------------------------
-// Housekeeping
-
-void housekeeping_task_kb(void) {
- // Update kb_state so we can send to slave
- kb_state_update();
-
- // Data sync from master to slave
- kb_state_sync();
-
- // Work out if we've changed our current limit, update the limiter circuit switches
- static uint8_t current_setting = USBPD_500MA;
- if (current_setting != kb_state.current_setting) {
- current_setting = kb_state.current_setting;
-
-#ifdef DJINN_SUPPORTS_3A_FUSE
- // The updated BOM on the Djinn has properly-spec'ed fuses -- 1500mA/3000mA hold current
- switch (current_setting) {
- default:
- case USBPD_500MA:
- writePinLow(RGB_CURR_1500mA_OK_PIN);
- writePinLow(RGB_CURR_3000mA_OK_PIN);
- break;
- case USBPD_1500MA:
- writePinHigh(RGB_CURR_1500mA_OK_PIN);
- writePinLow(RGB_CURR_3000mA_OK_PIN);
- break;
- case USBPD_3000MA:
- writePinHigh(RGB_CURR_1500mA_OK_PIN);
- writePinHigh(RGB_CURR_3000mA_OK_PIN);
- break;
- }
-#else
- // The original BOM on the Djinn had wrongly-spec'ed fuses -- 750mA/1500mA hold current
- switch (current_setting) {
- default:
- case USBPD_500MA:
- case USBPD_1500MA:
- writePinLow(RGB_CURR_1500mA_OK_PIN);
- writePinLow(RGB_CURR_3000mA_OK_PIN);
- break;
- case USBPD_3000MA:
- writePinHigh(RGB_CURR_1500mA_OK_PIN);
- writePinLow(RGB_CURR_3000mA_OK_PIN);
- break;
- }
-#endif
-
- // If we've changed the current limit, toggle rgb off and on if it was on, to force a brightness update on all LEDs
- if (is_keyboard_master() && rgb_matrix_is_enabled()) {
- rgb_matrix_disable_noeeprom();
- rgb_matrix_enable_noeeprom();
- }
- }
-
- // Turn on/off the LCD
- static bool lcd_on = false;
- if (lcd_on != (bool)kb_state.lcd_power) {
- lcd_on = (bool)kb_state.lcd_power;
- qp_power(lcd, lcd_on);
- }
-
- // Enable/disable RGB
- if (lcd_on) {
- // Turn on RGB
- writePinHigh(RGB_POWER_ENABLE_PIN);
- // Modify the RGB state if different to the LCD state
- if (rgb_matrix_is_enabled() != lcd_on) {
- // Wait for a small amount of time to allow the RGB capacitors to charge, before enabling RGB output
- wait_ms(10);
- // Enable RGB
- rgb_matrix_enable_noeeprom();
- }
- } else {
- // Turn off RGB
- writePinLow(RGB_POWER_ENABLE_PIN);
- // Disable the PWM output for the RGB
- if (rgb_matrix_is_enabled() != lcd_on) {
- rgb_matrix_disable_noeeprom();
- }
- }
-
- // Match the backlight to the LCD state
- if (is_keyboard_master() && is_backlight_enabled() != lcd_on) {
- if (lcd_on)
- backlight_enable();
- else
- backlight_disable();
- }
-
- // Draw the UI
- if (kb_state.lcd_power) {
- draw_ui_user(false);
- }
-
- // Go into low-scan interrupt-based mode if we haven't had any matrix activity in the last 250 milliseconds
- if (last_input_activity_elapsed() > 250) {
- matrix_wait_for_interrupt();
- }
-}
diff --git a/keyboards/tzarc/djinn/djinn_portscan_matrix.c b/keyboards/tzarc/djinn/djinn_portscan_matrix.c
deleted file mode 100644
index 6fcfd48bba..0000000000
--- a/keyboards/tzarc/djinn/djinn_portscan_matrix.c
+++ /dev/null
@@ -1,117 +0,0 @@
-// Copyright 2018-2022 Nick Brassel (@tzarc)
-// SPDX-License-Identifier: GPL-2.0-or-later
-#include "quantum.h"
-#include <hal_pal.h>
-#include "djinn.h"
-
-#define GPIOB_BITMASK (1 << 13 | 1 << 14 | 1 << 15) // B13, B14, B15
-#define GPIOB_OFFSET 13
-#define GPIOB_COUNT 3
-#define GPIOC_BITMASK (1 << 6 | 1 << 7 | 1 << 8) // C6, C7, C8
-#define GPIOC_OFFSET 6
-
-// Pin definitions
-static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
-static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
-
-void matrix_wait_for_pin(pin_t pin, uint8_t target_state) {
- rtcnt_t start = chSysGetRealtimeCounterX();
- rtcnt_t end = start + 5000;
- while (chSysIsCounterWithinX(chSysGetRealtimeCounterX(), start, end)) {
- if (readPin(pin) == target_state) {
- break;
- }
- }
-}
-
-void matrix_wait_for_port(stm32_gpio_t *port, uint32_t target_bitmask) {
- rtcnt_t start = chSysGetRealtimeCounterX();
- rtcnt_t end = start + 5000;
- while (chSysIsCounterWithinX(chSysGetRealtimeCounterX(), start, end)) {
- if ((palReadPort(port) & target_bitmask) == target_bitmask) {
- break;
- }
- }
-}
-
-void matrix_init_custom(void) {
- for (int i = 0; i < MATRIX_ROWS; ++i) {
- setPinInputHigh(row_pins[i]);
- }
- for (int i = 0; i < MATRIX_COLS; ++i) {
- setPinInputHigh(col_pins[i]);
- }
-}
-
-bool matrix_scan_custom(matrix_row_t current_matrix[]) {
- static matrix_row_t temp_matrix[MATRIX_ROWS] = {0};
-
- for (int current_col = 0; current_col < MATRIX_COLS; ++current_col) {
- // Keep track of the pin we're working with
- pin_t curr_col_pin = col_pins[current_col];
-
- // Setup the output column pin
- setPinOutput(curr_col_pin);
- writePinLow(curr_col_pin);
- matrix_wait_for_pin(curr_col_pin, 0);
-
- // Read the row ports
- uint32_t gpio_b = palReadPort(GPIOB);
- uint32_t gpio_c = palReadPort(GPIOC);
-
- // Unselect the row pin
- setPinInputHigh(curr_col_pin);
-
- // Construct the packed bitmask for the pins
- uint32_t readback = ~(((gpio_b & GPIOB_BITMASK) >> GPIOB_OFFSET) | (((gpio_c & GPIOC_BITMASK) >> GPIOC_OFFSET) << GPIOB_COUNT));
-
- // Inject values into the matrix
- for (int i = 0; i < MATRIX_ROWS; ++i) {
- if (readback & (1 << i)) {
- temp_matrix[i] |= (1ul << current_col);
- } else {
- temp_matrix[i] &= ~(1ul << current_col);
- }
- }
-
- // Wait for readback of the unselected column to go high
- matrix_wait_for_pin(curr_col_pin, 1);
-
- // Wait for readback of each port to go high -- unselecting the row would have been completed
- matrix_wait_for_port(GPIOB, GPIOB_BITMASK);
- matrix_wait_for_port(GPIOC, GPIOC_BITMASK);
- }
-
- // Check if we've changed, return the last-read data
- bool changed = memcmp(current_matrix, temp_matrix, sizeof(temp_matrix)) != 0;
- if (changed) {
- memcpy(current_matrix, temp_matrix, sizeof(temp_matrix));
- }
- return changed;
-}
-
-void matrix_wait_for_interrupt(void) {
- // Set up row/col pins and attach callback
- for (int i = 0; i < ARRAY_SIZE(col_pins); ++i) {
- setPinOutput(col_pins[i]);
- writePinLow(col_pins[i]);
- }
- for (int i = 0; i < ARRAY_SIZE(row_pins); ++i) {
- setPinInputHigh(row_pins[i]);
- palEnableLineEvent(row_pins[i], PAL_EVENT_MODE_BOTH_EDGES);
- }
-
- // Wait for an interrupt
- __WFI();
-
- // Now that the interrupt has woken us up, reset all the row/col pins back to defaults
- for (int i = 0; i < ARRAY_SIZE(row_pins); ++i) {
- palDisableLineEvent(row_pins[i]);
- writePinHigh(row_pins[i]);
- setPinInputHigh(row_pins[i]);
- }
- for (int i = 0; i < ARRAY_SIZE(col_pins); ++i) {
- writePinHigh(col_pins[i]);
- setPinInputHigh(col_pins[i]);
- }
-} \ No newline at end of file
diff --git a/keyboards/tzarc/djinn/graphics/theme_djinn_default.c b/keyboards/tzarc/djinn/graphics/theme_djinn_default.c
deleted file mode 100644
index c9863f2285..0000000000
--- a/keyboards/tzarc/djinn/graphics/theme_djinn_default.c
+++ /dev/null
@@ -1,307 +0,0 @@
-// Copyright 2018-2022 Nick Brassel (@tzarc)
-// SPDX-License-Identifier: GPL-2.0-or-later
-#include QMK_KEYBOARD_H
-#include <hal.h>
-#include <string.h>
-#include <ctype.h>
-#include <printf.h>
-#include "qp.h"
-#include "backlight.h"
-#include "transactions.h"
-#include "split_util.h"
-
-#include "djinn.h"
-#include "theme_djinn_default.h"
-
-#include "djinn.qgf.h"
-#include "lock-caps-ON.qgf.h"
-#include "lock-scrl-ON.qgf.h"
-#include "lock-num-ON.qgf.h"
-#include "lock-caps-OFF.qgf.h"
-#include "lock-scrl-OFF.qgf.h"
-#include "lock-num-OFF.qgf.h"
-#include "thintel15.qff.h"
-
-static painter_image_handle_t djinn_logo;
-static painter_image_handle_t lock_caps_on;
-static painter_image_handle_t lock_caps_off;
-static painter_image_handle_t lock_num_on;
-static painter_image_handle_t lock_num_off;
-static painter_image_handle_t lock_scrl_on;
-static painter_image_handle_t lock_scrl_off;
-static painter_font_handle_t thintel;
-
-//----------------------------------------------------------
-// RGB Matrix naming
-#if defined(RGB_MATRIX_ENABLE)
-# include <rgb_matrix.h>
-
-# if defined(RGB_MATRIX_EFFECT)
-# undef RGB_MATRIX_EFFECT
-# endif // defined(RGB_MATRIX_EFFECT)
-
-# define RGB_MATRIX_EFFECT(x) RGB_MATRIX_EFFECT_##x,
-enum {
- RGB_MATRIX_EFFECT_NONE,
-# include "rgb_matrix_effects.inc"
-# undef RGB_MATRIX_EFFECT
-# ifdef RGB_MATRIX_CUSTOM_KB
-# include "rgb_matrix_kb.inc"
-# endif
-# ifdef RGB_MATRIX_CUSTOM_USER
-# include "rgb_matrix_user.inc"
-# endif
-};
-
-# define RGB_MATRIX_EFFECT(x) \
- case RGB_MATRIX_EFFECT_##x: \
- return #x;
-const char *rgb_matrix_name(uint8_t effect) {
- switch (effect) {
- case RGB_MATRIX_EFFECT_NONE:
- return "NONE";
-# include "rgb_matrix_effects.inc"
-# undef RGB_MATRIX_EFFECT
-# ifdef RGB_MATRIX_CUSTOM_KB
-# include "rgb_matrix_kb.inc"
-# endif
-# ifdef RGB_MATRIX_CUSTOM_USER
-# include "rgb_matrix_user.inc"
-# endif
- default:
- return "UNKNOWN";
- }
-}
-#endif // defined(RGB_MATRIX_ENABLE)
-
-//----------------------------------------------------------
-// UI Initialisation
-void keyboard_post_init_display(void) {
- djinn_logo = qp_load_image_mem(gfx_djinn);
- lock_caps_on = qp_load_image_mem(gfx_lock_caps_ON);
- lock_caps_off = qp_load_image_mem(gfx_lock_caps_OFF);
- lock_num_on = qp_load_image_mem(gfx_lock_num_ON);
- lock_num_off = qp_load_image_mem(gfx_lock_num_OFF);
- lock_scrl_on = qp_load_image_mem(gfx_lock_scrl_ON);
- lock_scrl_off = qp_load_image_mem(gfx_lock_scrl_OFF);
- thintel = qp_load_font_mem(font_thintel15);
-}
-
-//----------------------------------------------------------
-// UI Drawing
-void draw_ui_user(bool force_redraw) {
- bool hue_redraw = force_redraw;
- static uint16_t last_hue = 0xFFFF;
-#if defined(RGB_MATRIX_ENABLE)
- uint16_t curr_hue = rgb_matrix_get_hue();
-#else // defined(RGB_MATRIX_ENABLE)
- uint16_t curr_hue = 0;
-#endif // defined(RGB_MATRIX_ENABLE)
- if (last_hue != curr_hue) {
- last_hue = curr_hue;
- hue_redraw = true;
- }
-
- bool layer_state_redraw = false;
- static uint32_t last_layer_state = 0;
- if (last_layer_state != layer_state) {
- last_layer_state = layer_state;
- layer_state_redraw = true;
- }
-
- bool power_state_redraw = false;
- static usbpd_allowance_t last_current_state = (usbpd_allowance_t)(~0);
- if (last_current_state != kb_state.current_setting) {
- last_current_state = kb_state.current_setting;
- power_state_redraw = true;
- }
-
- bool scan_redraw = false;
- static uint32_t last_scan_update = 0;
- if (timer_elapsed32(last_scan_update) > 125) {
- last_scan_update = timer_read32();
- scan_redraw = true;
- }
-
- bool wpm_redraw = false;
- static uint32_t last_wpm_update = 0;
- if (timer_elapsed32(last_wpm_update) > 125) {
- last_wpm_update = timer_read32();
- wpm_redraw = true;
- }
-
-#if defined(RGB_MATRIX_ENABLE)
- bool rgb_effect_redraw = false;
- static uint16_t last_effect = 0xFFFF;
- uint8_t curr_effect = rgb_matrix_config.mode;
- if (last_effect != curr_effect) {
- last_effect = curr_effect;
- rgb_effect_redraw = true;
- }
-#endif // defined(RGB_MATRIX_ENABLE)
-
- // Show the Djinn logo and two vertical bars on both sides
- if (hue_redraw) {
- qp_drawimage_recolor(lcd, 120 - djinn_logo->width / 2, 32, djinn_logo, curr_hue, 255, 255, curr_hue, 255, 0);
- qp_rect(lcd, 0, 0, 8, 319, curr_hue, 255, 255, true);
- qp_rect(lcd, 231, 0, 239, 319, curr_hue, 255, 255, true);
- }
-
- int ypos = 4;
-
- // Show layer info on the left side
- if (is_keyboard_left()) {
- char buf[64] = {0};
- int xpos = 16;
-
-#if defined(RGB_MATRIX_ENABLE)
- if (hue_redraw || rgb_effect_redraw) {
- static int max_rgb_xpos = 0;
- xpos = 16;
- snprintf(buf, sizeof(buf), "rgb: %s", rgb_matrix_name(curr_effect));
-
- for (int i = 5; i < sizeof(buf); ++i) {
- if (buf[i] == 0)
- break;
- else if (buf[i] == '_')
- buf[i] = ' ';
- else if (buf[i - 1] == ' ')
- buf[i] = toupper(buf[i]);
- else if (buf[i - 1] != ' ')
- buf[i] = tolower(buf[i]);
- }
-
- xpos += qp_drawtext_recolor(lcd, xpos, ypos, thintel, buf, curr_hue, 255, 255, curr_hue, 255, 0);
- if (max_rgb_xpos < xpos) {
- max_rgb_xpos = xpos;
- }
- qp_rect(lcd, xpos, ypos, max_rgb_xpos, ypos + thintel->line_height, 0, 0, 0, true);
- }
-
- ypos += thintel->line_height + 4;
-#endif // defined(RGB_MATRIX_ENABLE)
-
- if (hue_redraw || layer_state_redraw) {
- extern const char *current_layer_name(void);
- const char *layer_name = current_layer_name();
-
- static int max_layer_xpos = 0;
- xpos = 16;
- snprintf(buf, sizeof(buf), "layer: %s", layer_name);
- xpos += qp_drawtext_recolor(lcd, xpos, ypos, thintel, buf, curr_hue, 255, 255, curr_hue, 255, 0);
- if (max_layer_xpos < xpos) {
- max_layer_xpos = xpos;
- }
- qp_rect(lcd, xpos, ypos, max_layer_xpos, ypos + thintel->line_height, 0, 0, 0, true);
- }
-
- ypos += thintel->line_height + 4;
-
- if (hue_redraw || power_state_redraw) {
- static int max_power_xpos = 0;
- xpos = 16;
- snprintf(buf, sizeof(buf), "power: %s", usbpd_str(kb_state.current_setting));
- xpos += qp_drawtext_recolor(lcd, xpos, ypos, thintel, buf, curr_hue, 255, 255, curr_hue, 255, 0);
- if (max_power_xpos < xpos) {
- max_power_xpos = xpos;
- }
- qp_rect(lcd, xpos, ypos, max_power_xpos, ypos + thintel->line_height, 0, 0, 0, true);
- }
-
- ypos += thintel->line_height + 4;
-
- if (hue_redraw || scan_redraw) {
- static int max_scans_xpos = 0;
- xpos = 16;
- snprintf(buf, sizeof(buf), "scans: %d", (int)theme_state.scan_rate);
- xpos += qp_drawtext_recolor(lcd, xpos, ypos, thintel, buf, curr_hue, 255, 255, curr_hue, 255, 0);
- if (max_scans_xpos < xpos) {
- max_scans_xpos = xpos;
- }
- qp_rect(lcd, xpos, ypos, max_scans_xpos, ypos + thintel->line_height, 0, 0, 0, true);
- }
-
- ypos += thintel->line_height + 4;
-
- if (hue_redraw || wpm_redraw) {
- static int max_wpm_xpos = 0;
- xpos = 16;
- snprintf(buf, sizeof(buf), "wpm: %d", (int)get_current_wpm());
- xpos += qp_drawtext_recolor(lcd, xpos, ypos, thintel, buf, curr_hue, 255, 255, curr_hue, 255, 0);
- if (max_wpm_xpos < xpos) {
- max_wpm_xpos = xpos;
- }
- qp_rect(lcd, xpos, ypos, max_wpm_xpos, ypos + thintel->line_height, 0, 0, 0, true);
- }
-
- ypos += thintel->line_height + 4;
- }
-
- // Show LED lock indicators on the right side
- if (!is_keyboard_left()) {
- static led_t last_led_state = {0};
- if (hue_redraw || last_led_state.raw != host_keyboard_led_state().raw) {
- last_led_state.raw = host_keyboard_led_state().raw;
- qp_drawimage_recolor(lcd, 239 - 12 - (32 * 3), 0, last_led_state.caps_lock ? lock_caps_on : lock_caps_off, curr_hue, 255, last_led_state.caps_lock ? 255 : 32, curr_hue, 255, 0);
- qp_drawimage_recolor(lcd, 239 - 12 - (32 * 2), 0, last_led_state.num_lock ? lock_num_on : lock_num_off, curr_hue, 255, last_led_state.num_lock ? 255 : 32, curr_hue, 255, 0);
- qp_drawimage_recolor(lcd, 239 - 12 - (32 * 1), 0, last_led_state.scroll_lock ? lock_scrl_on : lock_scrl_off, curr_hue, 255, last_led_state.scroll_lock ? 255 : 32, curr_hue, 255, 0);
- }
- }
-}
-
-//----------------------------------------------------------
-// Sync
-
-theme_runtime_config theme_state;
-
-void rpc_theme_sync_callback(uint8_t m2s_size, const void *m2s_buffer, uint8_t s2m_size, void *s2m_buffer) {
- if (m2s_size == sizeof(theme_state)) {
- memcpy(&theme_state, m2s_buffer, m2s_size);
- }
-}
-
-void theme_init(void) {
- // Register keyboard state sync split transaction
- transaction_register_rpc(THEME_DATA_SYNC, rpc_theme_sync_callback);
-
- // Reset the initial shared data value between master and slave
- memset(&theme_state, 0, sizeof(theme_state));
-}
-
-void theme_state_update(void) {
- if (is_keyboard_master()) {
- // Keep the scan rate in sync
- theme_state.scan_rate = get_matrix_scan_rate();
- }
-}
-
-void theme_state_sync(void) {
- if (!is_transport_connected()) return;
-
- if (is_keyboard_master()) {
- // Keep track of the last state, so that we can tell if we need to propagate to slave
- static theme_runtime_config last_theme_state;
- static uint32_t last_sync;
- bool needs_sync = false;
-
- // Check if the state values are different
- if (memcmp(&theme_state, &last_theme_state, sizeof(theme_runtime_config))) {
- needs_sync = true;
- memcpy(&last_theme_state, &theme_state, sizeof(theme_runtime_config));
- }
-
- // Send to slave every 125ms regardless of state change
- if (timer_elapsed32(last_sync) > 125) {
- needs_sync = true;
- }
-
- // Perform the sync if requested
- if (needs_sync) {
- if (transaction_rpc_send(THEME_DATA_SYNC, sizeof(theme_runtime_config), &theme_state)) {
- last_sync = timer_read32();
- } else {
- dprint("Failed to perform rpc call\n");
- }
- }
- }
-}
diff --git a/keyboards/tzarc/djinn/keymaps/default/keymap.c b/keyboards/tzarc/djinn/keymaps/default/keymap.c
deleted file mode 100644
index 65b494cf32..0000000000
--- a/keyboards/tzarc/djinn/keymaps/default/keymap.c
+++ /dev/null
@@ -1,107 +0,0 @@
-// Copyright 2018-2022 Nick Brassel (@tzarc)
-// SPDX-License-Identifier: GPL-2.0-or-later
-#include QMK_KEYBOARD_H
-#include "theme_djinn_default.h"
-
-// Layer definitions
-enum { _QWERTY, _LOWER, _RAISE, _ADJUST };
-
-//----------------------------------------------------------
-// Key map
-
-// clang-format off
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QWERTY] = LAYOUT_all(
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_GRV, KC_DEL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
- KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_HOME, KC_PGUP, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_END, KC_PGDN, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
- KC_LGUI, MO(_LOWER),KC_SPC, KC_NO, KC_NO, KC_SPC, MO(_RAISE),KC_LALT,
- RGB_RMOD, RGB_MOD,
- KC_UP, KC_UP,
- KC_LEFT, _______, KC_RIGHT, KC_LEFT, _______, KC_RIGHT,
- KC_DOWN, KC_DOWN
- ),
- [_LOWER] = LAYOUT_all(
- KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
- _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, KC_LEFT, KC_DOWN, KC_RIGHT,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______,
- BL_DOWN, BL_UP,
- _______, _______,
- _______, _______, _______, _______, _______, _______,
- _______, _______
- ),
- [_RAISE] = LAYOUT_all(
- KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
- _______,_______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______,KC_LEFT, KC_DOWN, KC_RIGHT,_______, KC_UNDS, KC_NO, KC_NO, KC_EQL, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, KC_MINS, KC_NO, KC_NO, KC_PLUS, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______,
- _______, _______,
- _______, _______, _______, _______, _______, _______,
- _______, _______
- ),
- [_ADJUST] = LAYOUT_all(
- _______, KC_CAPS, KC_NUM, KC_SCRL, _______, _______, _______, _______, _______, _______, _______, DB_TOGG, EE_CLR, QK_BOOT,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______,
- _______, _______,
- _______, _______, _______, _______, _______, _______,
- _______, _______
- )
-};
-// clang-format on
-
-//----------------------------------------------------------
-// Encoder map
-
-// clang-format off
-const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
- [_QWERTY] = { ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
- [_LOWER] = { ENCODER_CCW_CW(RGB_HUD, RGB_HUI), ENCODER_CCW_CW(RGB_SAD, RGB_SAI) },
- [_RAISE] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(RGB_SPD, RGB_SPI) },
- [_ADJUST] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_LEFT, KC_RIGHT) },
-};
-// clang-format on
-
-//----------------------------------------------------------
-// Layer naming
-
-const char *current_layer_name(void) {
- switch (get_highest_layer(layer_state)) {
- case _QWERTY:
- return "qwerty";
- case _LOWER:
- return "lower";
- case _RAISE:
- return "raise";
- case _ADJUST:
- return "adjust";
- }
- return "unknown";
-}
-
-//----------------------------------------------------------
-// Overrides
-
-void keyboard_post_init_user(void) {
- // Initialise the theme
- theme_init();
-
- void keyboard_post_init_display(void);
- keyboard_post_init_display();
-}
-
-void housekeeping_task_user(void) {
- // Update kb_state so we can send to slave
- theme_state_update();
-
- // Data sync from master to slave
- theme_state_sync();
-}
diff --git a/keyboards/tzarc/djinn/rev1/config.h b/keyboards/tzarc/djinn/rev1/config.h
deleted file mode 100644
index 6f001cbd0c..0000000000
--- a/keyboards/tzarc/djinn/rev1/config.h
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2018-2022 Nick Brassel (@tzarc)
-// SPDX-License-Identifier: GPL-2.0-or-later
-#pragma once
-
-// Limit the backlight brightness
-#ifndef BACKLIGHT_LIMIT_VAL
-# define BACKLIGHT_LIMIT_VAL 144
-#endif // BACKLIGHT_LIMIT_VAL
-
-// Split configuration
-#define SPLIT_HAND_PIN B11
-#ifdef USE_PLUG_DETECT_PIN
-# define USB_VBUS_PIN B12
-#endif
-#define SERIAL_USART_DRIVER SD3
-#define SERIAL_USART_TX_PAL_MODE 7
-#define SOFT_SERIAL_PIN B9
-#ifndef SERIAL_USART_SPEED
-# define SERIAL_USART_SPEED 640000
-#endif // SERIAL_USART_SPEED
-
-// RGB configuration
-#define RGBLED_NUM 84
-#define RGB_MATRIX_LED_COUNT 84
-#define RGB_MATRIX_SPLIT \
- { 42, 42 }
-#define RGB_POWER_ENABLE_PIN B1
-#define RGB_CURR_1500mA_OK_PIN B0
-#define RGB_CURR_3000mA_OK_PIN C5
-
-// EEPROM configuration
-#define EXTERNAL_EEPROM_SPI_SLAVE_SELECT_PIN B5
-#define EXTERNAL_EEPROM_SPI_CLOCK_DIVISOR 8 // (160MHz/8) => 20MHz
-#define EXTERNAL_EEPROM_BYTE_COUNT 8192
-#define EXTERNAL_EEPROM_PAGE_SIZE 64 // it's FRAM, so it doesn't actually matter, this just sets the RAM buffer size
diff --git a/keyboards/tzarc/djinn/rev2/config.h b/keyboards/tzarc/djinn/rev2/config.h
deleted file mode 100644
index b0deb6d991..0000000000
--- a/keyboards/tzarc/djinn/rev2/config.h
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright 2018-2022 Nick Brassel (@tzarc)
-// SPDX-License-Identifier: GPL-2.0-or-later
-#pragma once
-
-// Limit the backlight brightness
-#ifndef BACKLIGHT_LIMIT_VAL
-# define BACKLIGHT_LIMIT_VAL 144
-#endif // BACKLIGHT_LIMIT_VAL
-
-// Split configuration
-#define SPLIT_HAND_PIN B9
-#define USB_VBUS_PIN B12
-#define SERIAL_USART_DRIVER SD3
-#define SERIAL_USART_PIN_SWAP
-#define SERIAL_USART_TX_PIN B10
-#define SERIAL_USART_TX_PAL_MODE 7
-#define SERIAL_USART_RX_PIN B11
-#define SERIAL_USART_RX_PAL_MODE 7
-#ifndef SERIAL_USART_SPEED
-# define SERIAL_USART_SPEED 1200000
-#endif // SERIAL_USART_SPEED
-#define SERIAL_USART_FULL_DUPLEX
-
-// RGB configuration
-#define RGBLED_NUM 86
-#define RGB_MATRIX_LED_COUNT 86
-#define RGB_MATRIX_SPLIT \
- { 43, 43 }
-#define RGB_POWER_ENABLE_PIN B0
-#define RGB_CURR_1500mA_OK_PIN C5
-#define RGB_CURR_3000mA_OK_PIN C4
-
-// EEPROM configuration
-#define EXTERNAL_EEPROM_SPI_SLAVE_SELECT_PIN B5
-#define EXTERNAL_EEPROM_SPI_CLOCK_DIVISOR 8 // (160MHz/8) => 20MHz
-#define EXTERNAL_EEPROM_BYTE_COUNT 8192
-#define EXTERNAL_EEPROM_PAGE_SIZE 64 // it's FRAM, so it doesn't actually matter, this just sets the RAM buffer size
-
-// External flash config
-#define EXTERNAL_FLASH_SPI_MODE 3
-#define EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN A8
-#define EXTERNAL_FLASH_SPI_CLOCK_DIVISOR 4 // (160MHz/4) => 40MHz
-#define EXTERNAL_FLASH_SIZE (4 * 1024 * 1024) // 32Mb/4MB capacity
-
-// Fault indicators
-#define BOARD_POWER_FAULT_PIN C9
-#define RGB_POWER_FAULT_PIN C4