~ruther/qmk_firmware

aadea5ab97d4da9af1d75f39a15f5ce498034105 — datafx 4 years ago 54f7708
[Keyboard] Monstargear XO87 Solderable support (#11716)

* Support for XO87 solderable version

* cleanup

* Remove abandoned code

* replaced KEYMAP with LAYOUT and moved LAYOUT macro to solderable.h.  deleted unneeded files.

* Update keyboards/monstargear/xo87/solderable/keymaps/via/keymap.c

* update info.json with missing keys

* Apply suggestions from code review

* Apply suggestions from code review

correct layout macro
A keyboards/monstargear/xo87/solderable/config.h => keyboards/monstargear/xo87/solderable/config.h +57 -0
@@ 0,0 1,57 @@
/* Copyright 2021 datafx
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#pragma once

#include "config_common.h"

#define brightnessMax 8

/* USB Device descriptor parameter */
#define VENDOR_ID       0x4D47 // MG for Monstargear
#define PRODUCT_ID      0x5344 // SD for Soldered
#define DEVICE_VER      0x0001
#define MANUFACTURER    Monstargear
#define PRODUCT         XO87 Soldered

/* key matrix size */
#define MATRIX_ROWS 6
#define MATRIX_COLS 16

#define BACKLIGHT_PIN F0

#define MATRIX_ROW_PINS { E6,E7,E3,B0,B1,A2}
#define MATRIX_COL_PINS { C5,C3,C1,E1,D6,D2,B7,B3,F6,F7,F3,A5,A1,E2,C7,A6 }

#define KEYLED_ROWS 6
#define KEYLED_COLS 16
#define KEYLED_ROW_PINS { E5,B4,B5,F0,C6,D5 }
#define KEYLED_COL_PINS { C4,C2,C0,E0,D4,E4,B6,B2,F4,A0,F2,A4,F1,A7,D3,A3 }
#define LED_DRIVER_LED_COUNT 93

#define UNUSED_PINS
#define DIODE_DIRECTION ROW2COL
#define RGB_DI_PIN D7
#define DRIVER_LED_TOTAL 21
#define DRIVER_COUNT 2
#define RGBLED_NUM 21
#define RGBLIGHT_ANIMATIONS

#define DEBOUNCE 5
#define LOCKING_SUPPORT_ENABLE
#define LOCKING_RESYNC_ENABLE

#define BACKLIGHT_LEVELS 3

A keyboards/monstargear/xo87/solderable/info.json => keyboards/monstargear/xo87/solderable/info.json +12 -0
@@ 0,0 1,12 @@
{
    "keyboard_name": "XO87 Solderable",
    "url": "https://www.monstargears.com/",
    "maintainer": "qmk",
    "width": 18.25,
    "height": 6.5,
    "layouts": {
      "LAYOUT_all": {
        "layout": [{"label":"0,0", "x":0, "y":0}, {"label":"0,1", "x":2, "y":0}, {"label":"0,2", "x":3, "y":0}, {"label":"0,3", "x":4, "y":0}, {"label":"0,4", "x":5, "y":0}, {"label":"0,5", "x":6.5, "y":0}, {"label":"0,6", "x":7.5, "y":0}, {"label":"0,7", "x":8.5, "y":0}, {"label":"0,8", "x":9.5, "y":0}, {"label":"0,9", "x":11, "y":0}, {"label":"0,10", "x":12, "y":0}, {"label":"0,11", "x":13, "y":0}, {"label":"0,12", "x":14, "y":0}, {"label":"0,13", "x":15.25, "y":0}, {"label":"0,14", "x":16.25, "y":0}, {"label":"0,15", "x":17.25, "y":0}, {"label":"1,0", "x":0, "y":1.5}, {"label":"1,1", "x":1, "y":1.5}, {"label":"1,2", "x":2, "y":1.5}, {"label":"1,3", "x":3, "y":1.5}, {"label":"1,4", "x":4, "y":1.5}, {"label":"1,5", "x":5, "y":1.5}, {"label":"1,6", "x":6, "y":1.5}, {"label":"1,7", "x":7, "y":1.5}, {"label":"1,8", "x":8, "y":1.5}, {"label":"1,9", "x":9, "y":1.5}, {"label":"1,10", "x":10, "y":1.5}, {"label":"1,11", "x":11, "y":1.5}, {"label":"1,12", "x":12, "y":1.5}, {"label":"3,13", "x":13, "y":1.5, "w":2}, {"label":"1,13", "x":15.25, "y":1.5}, {"label":"1,14", "x":16.25, "y":1.5}, {"label":"1,15", "x":17.25, "y":1.5}, {"label":"2,0", "x":0, "y":2.5, "w":1.5}, {"label":"2,0", "x":1.5, "y":2.5}, {"label":"2,0", "x":2.5, "y":2.5}, {"label":"2,0", "x":3.5, "y":2.5}, {"label":"2,0", "x":4.5, "y":2.5}, {"label":"2,0", "x":5.5, "y":2.5}, {"label":"2,0", "x":6.5, "y":2.5}, {"label":"2,0", "x":7.5, "y":2.5}, {"label":"2,0", "x":8.5, "y":2.5}, {"label":"2,0", "x":9.5, "y":2.5}, {"label":"2,0", "x":10.5, "y":2.5}, {"label":"2,0", "x":11.5, "y":2.5}, {"label":"2,0", "x":12.5, "y":2.5}, {"label":"4,13", "x":13.5, "y":2.5, "w":1.5}, {"label":"2,0", "x":15.25, "y":2.5}, {"label":"2,0", "x":16.25, "y":2.5}, {"label":"2,0", "x":17.25, "y":2.5}, {"label":"3,0", "x":0, "y":3.5, "w":1.75}, {"label":"3,1", "x":1.75, "y":3.5}, {"label":"3,2", "x":2.75, "y":3.5}, {"label":"3,3", "x":3.75, "y":3.5}, {"label":"3,4", "x":4.75, "y":3.5}, {"label":"3,5", "x":5.75, "y":3.5}, {"label":"3,6", "x":6.75, "y":3.5}, {"label":"3,7", "x":7.75, "y":3.5}, {"label":"3,8", "x":8.75, "y":3.5}, {"label":"3,9", "x":9.75, "y":3.5}, {"label":"3,10", "x":10.75, "y":3.5}, {"label":"3,11", "x":11.75, "y":3.5}, {"label":"3,12", "x":12.75, "y":3.5, "w":2.25}, {"label":"4,0", "x":0, "y":4.5, "w":1.25}, {"label":"4,1", "x":1.25, "y":4.5}, {"label":"4,2", "x":2.25, "y":4.5}, {"label":"4,3", "x":3.25, "y":4.5}, {"label":"4,4", "x":4.25, "y":4.5}, {"label":"4,5", "x":5.25, "y":4.5}, {"label":"4,6", "x":6.25, "y":4.5}, {"label":"4,7", "x":7.25, "y":4.5}, {"label":"4,8", "x":8.25, "y":4.5}, {"label":"4,9", "x":9.25, "y":4.5}, {"label":"4,10", "x":10.25, "y":4.5}, {"label":"4,11", "x":11.25, "y":4.5}, {"label":"4,12", "x":12.25, "y":4.5, "w":2.75}, {"label":"4,14", "x":16.25, "y":4.5}, {"label":"5,0", "x":0, "y":5.5, "w":1.25}, {"label":"5,1", "x":1.25, "y":5.5, "w":1.25}, {"label":"5,2", "x":2.5, "y":5.5, "w":1.25}, {"label":"5,4", "x":3.75, "y":5.5, "w":2.75}, {"label":"5,6", "x":6.5, "y":5.5, "w":1.25}, {"label":"5,8", "x":7.75, "y":5.5, "w":2.25}, {"label":"5,10", "x":10, "y":5.5, "w":1.25}, {"label":"5,11", "x":11.25, "y":5.5, "w":1.25}, {"label":"5,12", "x":12.5, "y":5.5, "w":1.25}, {"label":"4,15", "x":13.75, "y":5.5, "w":1.25}, {"label":"5,13", "x":15.25, "y":5.5}, {"label":"5,14", "x":16.25, "y":5.5}, {"label":"5,15", "x":17.25, "y":5.5}]
        }
    }
}

A keyboards/monstargear/xo87/solderable/keymaps/default/keymap.c => keyboards/monstargear/xo87/solderable/keymaps/default/keymap.c +36 -0
@@ 0,0 1,36 @@
/* Copyright 2021 datafx
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#include QMK_KEYBOARD_H

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

	[0] = LAYOUT_all(
		KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS,
		KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_INS, KC_HOME, KC_PGUP,
		KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, KC_END, KC_PGDN,
		KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_BSPC,
		KC_LSFT, _______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_BSLS, KC_UP, KC_RCTL,
		KC_LCTL, KC_LGUI, KC_LALT, _______, KC_SPC, _______, KC_RALT, KC_RGUI, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),

	[1] = LAYOUT_all(
		_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
		_______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______, _______,
		_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
		_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
		_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_INC, _______,
		_______, _______, _______, _______, _______, _______, _______, _______, _______, BL_TOGG, BL_DEC, BL_STEP),
};

A keyboards/monstargear/xo87/solderable/keymaps/default/readme.md => keyboards/monstargear/xo87/solderable/keymaps/default/readme.md +1 -0
@@ 0,0 1,1 @@
# The default keymap for the XO87 Solderable PCB

A keyboards/monstargear/xo87/solderable/keymaps/via/config.h => keyboards/monstargear/xo87/solderable/keymaps/via/config.h +18 -0
@@ 0,0 1,18 @@
/* Copyright 2021 datafx
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#pragma once
#define VIA_QMK_RGBLIGHT_ENABLE

A keyboards/monstargear/xo87/solderable/keymaps/via/keymap.c => keyboards/monstargear/xo87/solderable/keymaps/via/keymap.c +53 -0
@@ 0,0 1,53 @@
/* Copyright 2021 datafx
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#include QMK_KEYBOARD_H

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

	[0] = LAYOUT_all(
		KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS,
		KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_INS, KC_HOME, KC_PGUP,
		KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, KC_END, KC_PGDN,
		KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_BSPC,
		KC_LSFT, _______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_BSLS, KC_UP, KC_RCTL,
		KC_LCTL, KC_LGUI, KC_LALT, _______, KC_SPC, _______, KC_RALT, KC_RGUI, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),

	[1] = LAYOUT_all(
		_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
		_______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______, _______,
		_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
		_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
		_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_INC, _______,
		_______, _______, _______, _______, _______, _______, _______, _______, _______, BL_TOGG, BL_DEC, BL_STEP),

	[2] = LAYOUT_all(
		_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
		_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
		_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
		_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
		_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
		_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),

	[3] = LAYOUT_all(
		_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
		_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
		_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
		_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
		_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
		_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),

};

A keyboards/monstargear/xo87/solderable/keymaps/via/readme.md => keyboards/monstargear/xo87/solderable/keymaps/via/readme.md +1 -0
@@ 0,0 1,1 @@
# The default VIA keymap for the XO87 Solderable PCB

A keyboards/monstargear/xo87/solderable/keymaps/via/rules.mk => keyboards/monstargear/xo87/solderable/keymaps/via/rules.mk +1 -0
@@ 0,0 1,1 @@
VIA_ENABLE = yes

A keyboards/monstargear/xo87/solderable/readme.md => keyboards/monstargear/xo87/solderable/readme.md +23 -0
@@ 0,0 1,23 @@
# XO87 Solderable PCB

![XO87](https://cdn.imweb.me/thumbnail/20201120/c90a5bdb75264.png) 

A TKL custom keyboard made by Monstar Gear.

* Keyboard Maintainer: The QMK Community
* Hardware Supported: XO87 Solderable version
* Hardware Availability: [Monstargear](https://monstargears.com)

Make example for this keyboard (after setting up your build environment):

    make monstargear/xo87/solderable:default

Flashing example for this keyboard:

    make monstargear/xo87/solderable:default:flash
    
The LED matrix is not yet working with this board.  A temporary workaround to allow the caps/scroll/num lock LEDs to work has been added to allow this firmware to be functional without the led matrix.

Please be aware that Monstar Gear has not yet switched to this firmware and any PCB that is running the pre-installed firmware will need to use ISP to flash their board for the first time.

See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).

A keyboards/monstargear/xo87/solderable/rules.mk => keyboards/monstargear/xo87/solderable/rules.mk +23 -0
@@ 0,0 1,23 @@
# MCU name
MCU = at90usb646

# Bootloader selection
BOOTLOADER = lufa-dfu

# Build Options
#  change yes to no to disable
#
BOOTMAGIC_ENABLE = lite     # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes       # Mouse keys
EXTRAKEY_ENABLE = yes       # Audio control and System control
CONSOLE_ENABLE = no         # Console for debug
COMMAND_ENABLE = yes        # Commands for debug and configuration
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = yes           # USB Nkey Rollover
BACKLIGHT_ENABLE = yes      # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = yes       # Enable keyboard RGB underglow
BLUETOOTH_ENABLE = no       # Enable Bluetooth
AUDIO_ENABLE = no           # Audio output
BACKLIGHT_DRIVER = custom

A keyboards/monstargear/xo87/solderable/solderable.c => keyboards/monstargear/xo87/solderable/solderable.c +76 -0
@@ 0,0 1,76 @@
/* Copyright 2021 datafx
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#include "solderable.h"
#include "quantum.h"

#define noLed {255,255}

#define ledSollSP (80+3)
#define ledNumSP (80+7)
#define ledCapSP (80+8)

void backlight_init_ports(void) {
    setPinOutput(Lseg0);
    setPinOutput(Lseg1);
    setPinOutput(Lseg2);
    setPinOutput(Lseg3);
    setPinOutput(Lseg4);
    setPinOutput(Lseg5);
    setPinOutput(Lcom0);
    setPinOutput(Lcom1);
    setPinOutput(Lcom2);
    setPinOutput(Lcom3);
    setPinOutput(Lcom4);
    setPinOutput(Lcom5);
    setPinOutput(Lcom6);
    setPinOutput(Lcom7);
    setPinOutput(Lcom8);
    setPinOutput(Lcom9);
    setPinOutput(Lcom10);
    setPinOutput(Lcom11);
    setPinOutput(Lcom12);
    setPinOutput(Lcom13);
    setPinOutput(Lcom14);
    setPinOutput(Lcom15);
}

void backlight_set(uint8_t level) {
}

void backlight_task(void) {
    // This is a temporary workaround to get the status LEDs working until we can figure out the LED matrix
    led_t host_leds = host_keyboard_led_state();
    if (host_leds.scroll_lock) {
    writePinHigh(Lcom3);
    writePinHigh(Lseg5);
    } else {
    writePinLow(Lcom3);
    }
    if (host_leds.num_lock) {
    writePinHigh(Lcom7);
    writePinHigh(Lseg5);
    } else {
    writePinLow(Lcom7);
    }
    if (host_leds.caps_lock) {
    writePinHigh(Lcom8);
    writePinHigh(Lseg5);
    } else {
    writePinLow(Lcom8);
    }
}


A keyboards/monstargear/xo87/solderable/solderable.h => keyboards/monstargear/xo87/solderable/solderable.h +102 -0
@@ 0,0 1,102 @@
/* Copyright 2021 datafx
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#define LAYOUT_all( \
	K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, \
	K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, \
	K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, \
	K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313,             \
	K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K414, K415, \
	K500, K501, K502,             K505, K506,             K509, K510, K511, K512, K513, K514, K515  \
) { \
	{ K000,  K001,  K002,  K003,  K004,  K005,  K006,  K007,  K008,  K009,  K010,  K011,  K012,  K013,  K014,  K015 }, \
	{ K100,  K101,  K102,  K103,  K104,  K105,  K106,  K107,  K108,  K109,  K110,  K111,  K112,  K113,  K114,  K115 }, \
	{ K200,  K201,  K202,  K203,  K204,  K205,  K206,  K207,  K208,  K209,  K210,  K211,  K212,  K213,  K214,  K215 }, \
	{ K300,  K301,  K302,  K303,  K304,  K305,  K306,  K307,  K308,  K309,  K310,  K311,  K312,  K313,  KC_NO, KC_NO }, \
	{ K400,  K401,  K402,  K403,  K404,  K405,  K406,  K407,  K408,  K409,  K410,  K411,  K412,  K413,  K414,  K415 }, \
	{ K500,  K501,  K502,  KC_NO, KC_NO, K505,  K506,  KC_NO, KC_NO, K509,  K510,  K511,  K512,  K513,  K514,  K515 }  \
}

#define u8 uint8_t
#define u16 uint16_t

#pragma once

#include "quantum.h"

#define KEYLED_ROWS 6
#define KEYLED_COLS 16

#define XaxisMax 18
#define YaxisMax 6

#define RhythmLedColumMax 18

typedef struct{
	u8 onf;
	u8 hightLevel;
	u8 ColumHeight[RhythmLedColumMax];
}

RhythmLed_;

typedef struct{
	u8 r,g,b;
}

rgb_;
#define colorAGSize 10
#define colorBGSize RGBLED_NUM-10

typedef struct{
	rgb_ colorAG[colorAGSize];
    rgb_ colorBG[RGBLED_NUM-10];
}

backLedRgbG_;

#define Lseg0 E5
#define Lseg1 B4
#define Lseg2 B5
#define Lseg3 F0
#define Lseg4 C6
#define Lseg5 D5

#define Lcom0 C4
#define Lcom1 C2
#define Lcom2 C0
#define Lcom3 E0
#define Lcom4 D4
#define Lcom5 E4
#define Lcom6 B6
#define Lcom7 B2
#define Lcom8 F4
#define Lcom9 A0
#define Lcom10 F2
#define Lcom11 A4
#define Lcom12 F1
#define Lcom13 A7
#define Lcom14 D3
#define Lcom15 A3

extern void keyLedDriver(void);
extern void KeyLedCom(void);
u8 getKeyLedIndexForXY(u8 x,u8 y);

extern void ledCapsSet(bool onf);
extern void ledNumSet(bool onf);
extern void ledSollSet(bool onf);
void reflashLedState(void);