Browse Source

Add Matrix 8XV1.2 OG rev1 PCB (#11614)

* add v1 12og pcb

* update

* matrix changes for testing

* Update matrix.c

* finalized files

* rename board versions

* update readmes

* typo in readme

* fix board filenames

* Update keyboards/matrix/m12og/rev1/rev1.c

Co-authored-by: Drashna Jaelre <drashna@live.com>

* change function

* update halconf and chconf

* merge master

* Update readme.md

* Update readme.md

* Update readme.md

Co-authored-by: Drashna Jaelre <drashna@live.com>
kb-elmo 4 năm trước cách đây
mục cha
commit
0ef145db15

+ 7 - 11
keyboards/matrix/m12og/readme.md

@@ -1,16 +1,12 @@
 # Matrix 8XV1.2 OG keyboard
 
-![Matrix 8XV1.2 OG](https://raw.githubusercontent.com/yulei/qmk_webusb_tool/master/public/m12og.jpg)
+![Matrix 8XV1.2 OG](https://i.imgur.com/NELL6Sbl.jpg)
 
-This was the Matrix 8XV1.2 OG keyboard made by the Matrix team. Note: this firmware only support ISO/ANSI version,
-and DO NOT support the 8XV1.2 OG ANSI only version.
+This was the Matrix 8XV1.2 OG keyboard made by the Matrix team.  
 
-* Keyboard Maintainer: [astro](https://github.com/yulei)
-* Hardware Supported: Matrix 8XV1.2 OG (ISO/ANSI) keyboard
-* Hardware Availability: Matrix Lab
+There are two versions of the PCB available.
 
-Make example for this keyboard (after setting up your build environment):
-
-    make matrix/m12og:default
-
-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).
+|Version|Features                                             |
+|-------|-----------------------------------------------------|
+|rev1   |Green/Yellow PCB / ARM STM32 controller / ANSI only  |
+|rev2   |White PCB / Atmel AVR controller / ANSI/ISO          |

+ 50 - 0
keyboards/matrix/m12og/rev1/boards/m12og_v1/board.c

@@ -0,0 +1,50 @@
+/*
+    ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+*/
+
+#include <hal.h>
+
+/**
+ * @brief   PAL setup.
+ * @details Digital I/O ports static configuration as defined in @p board.h.
+ *          This variable is used by the HAL when initializing the PAL driver.
+ */
+#if HAL_USE_PAL || defined(__DOXYGEN__)
+const PALConfig pal_default_config =
+{
+  {VAL_GPIOAODR, VAL_GPIOACRL, VAL_GPIOACRH},
+  {VAL_GPIOBODR, VAL_GPIOBCRL, VAL_GPIOBCRH},
+  {VAL_GPIOCODR, VAL_GPIOCCRL, VAL_GPIOCCRH},
+  {VAL_GPIODODR, VAL_GPIODCRL, VAL_GPIODCRH},
+  {VAL_GPIOEODR, VAL_GPIOECRL, VAL_GPIOECRH},
+};
+#endif
+
+/*
+ * Early initialization code.
+ * This initialization must be performed just after stack setup and before
+ * any other initialization.
+ */
+void __early_init(void) {
+  stm32_clock_init();
+  
+}
+
+/*
+ * Board-specific initialization code.
+ */
+void boardInit(void) {
+
+}

+ 142 - 0
keyboards/matrix/m12og/rev1/boards/m12og_v1/board.h

@@ -0,0 +1,142 @@
+/*
+    ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+*/
+
+#ifndef _BOARD_H_
+#define _BOARD_H_
+
+/*
+ * Board identifier.
+ */
+#define BOARD_M12OG
+#define BOARD_NAME              "Matrix 12og keyboard"
+
+/*
+ * Board frequencies.
+ */
+#define STM32_LSECLK            32768
+#define STM32_HSECLK            8000000
+
+/*
+ * MCU type, supported types are defined in ./os/hal/platforms/hal_lld.h.
+ *
+ * Only xB (128KB Flash) is defined, but it's identical to the
+ * x8 version (64KB Flash) except for the Flash region size in the
+ * linker script. For x8 parts use xB here and change to the x8 linker
+ * script in the project Makefile.
+ */
+#define STM32F103xB
+
+/*
+ * IO pins assignments
+ *
+ * numbering is sorted by onboard/connectors, as from the schematics in
+ * http://www.vcc-gnd.com/read.php?tid=369
+ */
+
+/* on-board */
+#define GPIOA_USBDM             11      // pin 8
+#define GPIOA_USBDP             12      // pin 9
+
+#define GPIOC_OSC32_IN          14
+#define GPIOC_OSC32_OUT         15
+
+/*
+ * I/O ports initial setup, this configuration is established soon after reset
+ * in the initialization code.
+ *
+ * The digits have the following meaning:
+ *   0 - Analog input.
+ *   1 - Push Pull output 10MHz.
+ *   2 - Push Pull output 2MHz.
+ *   3 - Push Pull output 50MHz.
+ *   4 - Digital input.
+ *   5 - Open Drain output 10MHz.
+ *   6 - Open Drain output 2MHz.
+ *   7 - Open Drain output 50MHz.
+ *   8 - Digital input with PullUp or PullDown resistor depending on ODR.
+ *   9 - Alternate Push Pull output 10MHz.
+ *   A - Alternate Push Pull output 2MHz.
+ *   B - Alternate Push Pull output 50MHz.
+ *   C - Reserved.
+ *   D - Alternate Open Drain output 10MHz.
+ *   E - Alternate Open Drain output 2MHz.
+ *   F - Alternate Open Drain output 50MHz.
+ * Please refer to the STM32 Reference Manual for details.
+ */
+
+/*
+ * Port A setup.
+ * Everything input with pull-up except:
+ */
+#define VAL_GPIOACRL            0x88888888      /*  PA7...PA0 */
+#define VAL_GPIOACRH            0x88888888      /* PA15...PA8 */
+#define VAL_GPIOAODR            0xFFFFFFFF
+
+/*
+ * Port B setup.
+ * Everything input with pull-up except:
+ */
+#define VAL_GPIOBCRL            0x88888888      /*  PB7...PB0 */
+#define VAL_GPIOBCRH            0x88888888      /* PB15...PB8 */
+#define VAL_GPIOBODR            0xFFFFFFFF
+
+/*
+ * Port C setup.
+ * Everything input with pull-up except:
+ */
+#define VAL_GPIOCCRL            0x88888888      /*  PC7...PC0 */
+#define VAL_GPIOCCRH            0x88888888      /* PC15...PC8 */
+#define VAL_GPIOCODR            0xFFFFFFFF
+
+/*
+ * Port D setup.
+ * Everything input with pull-up except:
+ * PD0  - Normal input (XTAL).
+ * PD1  - Normal input (XTAL).
+ */
+#define VAL_GPIODCRL            0x88888844      /*  PD7...PD0 */
+#define VAL_GPIODCRH            0x88888888      /* PD15...PD8 */
+#define VAL_GPIODODR            0xFFFFFFFF
+
+/*
+ * Port E setup.
+ * Everything input with pull-up except:
+ */
+#define VAL_GPIOECRL            0x88888888      /*  PE7...PE0 */
+#define VAL_GPIOECRH            0x88888888      /* PE15...PE8 */
+#define VAL_GPIOEODR            0xFFFFFFFF
+
+/*
+ * USB bus activation macro, required by the USB driver.
+ */
+#define usb_lld_connect_bus(usbp)	/* always connected */
+
+/*
+ * USB bus de-activation macro, required by the USB driver.
+ */
+#define usb_lld_disconnect_bus(usbp)	/* always connected */
+
+#if !defined(_FROM_ASM_)
+#ifdef __cplusplus
+extern "C" {
+#endif
+  void boardInit(void);
+#ifdef __cplusplus
+}
+#endif
+#endif /* _FROM_ASM_ */
+
+#endif /* _BOARD_H_ */

+ 5 - 0
keyboards/matrix/m12og/rev1/boards/m12og_v1/board.mk

@@ -0,0 +1,5 @@
+# List of all the board related files.
+BOARDSRC = $(BOARD_PATH)/boards/m12og_v1/board.c
+
+# Required include directories
+BOARDINC = $(BOARD_PATH)/boards/m12og_v1

+ 40 - 0
keyboards/matrix/m12og/rev1/chconf.h

@@ -0,0 +1,40 @@
+/* Copyright 2020 QMK
+ *
+ * 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/>.
+ */
+
+/*
+ * This file was auto-generated by:
+ *    `qmk chibios-confmigrate -i keyboards/matrix/m12og/rev1/chconf.h -r platforms/chibios/common/configs/chconf.h`
+ */
+
+#pragma once
+
+#define CH_CFG_ST_TIMEDELTA 0
+
+#define CH_CFG_USE_REGISTRY TRUE
+
+#define CH_CFG_USE_WAITEXIT TRUE
+
+#define CH_CFG_USE_CONDVARS TRUE
+
+#define CH_CFG_USE_CONDVARS_TIMEOUT FALSE
+
+#define CH_CFG_USE_MESSAGES TRUE
+
+#define CH_CFG_USE_MAILBOXES TRUE
+
+#define CH_CFG_USE_HEAP TRUE
+
+#include_next <chconf.h>

+ 54 - 0
keyboards/matrix/m12og/rev1/config.h

@@ -0,0 +1,54 @@
+/*
+Copyright 2021 kb-elmo<mail@elmo.space>
+
+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"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID    0x4D58
+#define PRODUCT_ID   0x0369
+#define DEVICE_VER   0x0001
+#define MANUFACTURER matrix
+#define PRODUCT      m12og_v1
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 16
+
+/* Keyboard Matrix Assignments */
+
+#define MATRIX_ROW_PINS { A0, A1, A2, A3, A4, A5 }
+#define MATRIX_COL_PINS { C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15 }
+
+/* COL2ROW, ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Status LEDs */
+#define LED_CAPS_LOCK_PIN B6
+#define LED_SCROLL_LOCK_PIN B5
+
+/* RGB */
+#define RGB_DI_PIN B8
+#define RGBLIGHT_ANIMATIONS
+
+#define RGBLED_NUM 16
+#define RGBLIGHT_SLEEP
+#define WS2812_BYTE_ORDER WS2812_BYTE_ORDER_RGB
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5

+ 26 - 0
keyboards/matrix/m12og/rev1/halconf.h

@@ -0,0 +1,26 @@
+/* Copyright 2020 QMK
+ *
+ * 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/>.
+ */
+
+/*
+ * This file was auto-generated by:
+ *    `qmk chibios-confmigrate -i keyboards/matrix/m12og/rev1/halconf.h -r platforms/chibios/common/configs/halconf.h`
+ */
+
+#pragma once
+
+#define HAL_USE_PWM TRUE
+
+#include_next <halconf.h>

+ 99 - 0
keyboards/matrix/m12og/rev1/info.json

@@ -0,0 +1,99 @@
+{
+    "keyboard_name": "Matrix 8XV1.2 OG rev1",
+    "url": "",
+    "maintainer": "kb-elmo",
+    "width": 18.25,
+    "height": 6.5,
+    "layouts": {
+        "LAYOUT_all": {
+            "layout": [
+                {"label":"Esc", "x":0, "y":0},
+                {"label":"F1", "x":2, "y":0},
+                {"label":"F2", "x":3, "y":0},
+                {"label":"F3", "x":4, "y":0},
+                {"label":"F4", "x":5, "y":0},
+                {"label":"F5", "x":6.5, "y":0},
+                {"label":"F6", "x":7.5, "y":0},
+                {"label":"F7", "x":8.5, "y":0},
+                {"label":"F8", "x":9.5, "y":0},
+                {"label":"F9", "x":11, "y":0},
+                {"label":"F10", "x":12, "y":0},
+                {"label":"F11", "x":13, "y":0},
+                {"label":"F12", "x":14, "y":0},
+                {"label":"PrtSc", "x":15.25, "y":0},
+                {"label":"Scroll Lock", "x":16.25, "y":0},
+                {"label":"Pause", "x":17.25, "y":0},
+                {"label":"~", "x":0, "y":1.5},
+                {"label":"!", "x":1, "y":1.5},
+                {"label":"@", "x":2, "y":1.5},
+                {"label":"#", "x":3, "y":1.5},
+                {"label":"$", "x":4, "y":1.5},
+                {"label":"%", "x":5, "y":1.5},
+                {"label":"^", "x":6, "y":1.5},
+                {"label":"&", "x":7, "y":1.5},
+                {"label":"*", "x":8, "y":1.5},
+                {"label":"(", "x":9, "y":1.5},
+                {"label":")", "x":10, "y":1.5},
+                {"label":"_", "x":11, "y":1.5},
+                {"label":"+", "x":12, "y":1.5},
+                {"label":"Backspace", "x":13, "y":1.5, "w":2},
+                {"label":"Insert", "x":15.25, "y":1.5},
+                {"label":"Home", "x":16.25, "y":1.5},
+                {"label":"PgUp", "x":17.25, "y":1.5},
+                {"label":"Tab", "x":0, "y":2.5, "w":1.5},
+                {"label":"Q", "x":1.5, "y":2.5},
+                {"label":"W", "x":2.5, "y":2.5},
+                {"label":"E", "x":3.5, "y":2.5},
+                {"label":"R", "x":4.5, "y":2.5},
+                {"label":"T", "x":5.5, "y":2.5},
+                {"label":"Y", "x":6.5, "y":2.5},
+                {"label":"U", "x":7.5, "y":2.5},
+                {"label":"I", "x":8.5, "y":2.5},
+                {"label":"O", "x":9.5, "y":2.5},
+                {"label":"P", "x":10.5, "y":2.5},
+                {"label":"{", "x":11.5, "y":2.5},
+                {"label":"}", "x":12.5, "y":2.5},
+                {"label":"|", "x":13.5, "y":2.5, "w":1.5},
+                {"label":"Delete", "x":15.25, "y":2.5},
+                {"label":"End", "x":16.25, "y":2.5},
+                {"label":"PgDn", "x":17.25, "y":2.5},
+                {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75},
+                {"label":"A", "x":1.75, "y":3.5},
+                {"label":"S", "x":2.75, "y":3.5},
+                {"label":"D", "x":3.75, "y":3.5},
+                {"label":"F", "x":4.75, "y":3.5},
+                {"label":"G", "x":5.75, "y":3.5},
+                {"label":"H", "x":6.75, "y":3.5},
+                {"label":"J", "x":7.75, "y":3.5},
+                {"label":"K", "x":8.75, "y":3.5},
+                {"label":"L", "x":9.75, "y":3.5},
+                {"label":":", "x":10.75, "y":3.5},
+                {"label":"\"", "x":11.75, "y":3.5},
+                {"label":"Enter", "x":12.75, "y":3.5, "w":2.25},
+                {"label":"Shift", "x":0, "y":4.5, "w":2.25},
+                {"label":"Z", "x":2.25, "y":4.5},
+                {"label":"X", "x":3.25, "y":4.5},
+                {"label":"C", "x":4.25, "y":4.5},
+                {"label":"V", "x":5.25, "y":4.5},
+                {"label":"B", "x":6.25, "y":4.5},
+                {"label":"N", "x":7.25, "y":4.5},
+                {"label":"M", "x":8.25, "y":4.5},
+                {"label":"<", "x":9.25, "y":4.5},
+                {"label":">", "x":10.25, "y":4.5},
+                {"label":"?", "x":11.25, "y":4.5},
+                {"label":"Shift", "x":12.25, "y":4.5, "w":2.75},
+                {"label":"\u2191", "x":16.25, "y":4.5},
+                {"label":"Ctrl", "x":0, "y":5.5, "w":1.5},
+                {"label":"Win", "x":1.5, "y":5.5},
+                {"label":"Alt", "x":2.5, "y":5.5, "w":1.5},
+                {"x":4, "y":5.5, "w":7},
+                {"label":"Win", "x":11, "y":5.5, "w":1.5},
+                {"label":"Menu", "x":12.5, "y":5.5},
+                {"label":"Ctrl", "x":13.5, "y":5.5, "w":1.5},
+                {"label":"\u2190", "x":15.25, "y":5.5},
+                {"label":"\u2193", "x":16.25, "y":5.5},
+                {"label":"\u2192", "x":17.25, "y":5.5}
+            ]
+        }
+    }
+}

+ 50 - 0
keyboards/matrix/m12og/rev1/keymaps/default/keymap.c

@@ -0,0 +1,50 @@
+/* Copyright 2021 kb-elmo<mail@elmo.space>
+ *
+ * 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_BSPC,     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_BSLS,     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_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,          KC_RSFT,                       KC_UP,
+    KC_LCTL, KC_LGUI, KC_LALT,                   KC_SPC,                                               KC_RALT, MO(1),   KC_LCTL,     KC_LEFT, KC_DOWN, KC_RGHT
+  ),
+  [1] = LAYOUT_all(
+    KC_TRNS,     RGB_TOG, RGB_MOD, RGB_RMOD, KC_TRNS,   RGB_VAI, RGB_VAD, RGB_HUI, RGB_HUD,   RGB_SAI, RGB_SAD, RGB_SPI, RGB_SPD,     KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,     KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET,  KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,     KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,      KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_MPRV, KC_MNXT, KC_MPLY,          KC_TRNS,                       KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                                     KC_TRNS, KC_TRNS, KC_TRNS,     KC_TRNS, KC_TRNS, KC_TRNS
+  )
+};
+
+bool led_update_user(led_t led_state) {
+    static uint8_t caps_state = 0;
+    if (caps_state != led_state.caps_lock) {
+        if (led_state.caps_lock) {
+            rgblight_sethsv_noeeprom_cyan();
+            rgblight_mode_noeeprom(1);
+        } else {
+            rgblight_sethsv_noeeprom(5, 255, 255);
+            rgblight_mode_noeeprom(37);
+        }
+        caps_state = led_state.caps_lock;
+    }
+    return true;
+};

+ 85 - 0
keyboards/matrix/m12og/rev1/ld/m12og_v1.ld

@@ -0,0 +1,85 @@
+/*
+    ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+*/
+
+/*
+ * STM32F103xB memory setup for use with the matrix 12og mass-storage device bootloader.
+ */
+MEMORY
+{
+    flash0  : org = 0x08018000, len = 128k - 0x18000
+    flash1  : org = 0x00000000, len = 0
+    flash2  : org = 0x00000000, len = 0
+    flash3  : org = 0x00000000, len = 0
+    flash4  : org = 0x00000000, len = 0
+    flash5  : org = 0x00000000, len = 0
+    flash6  : org = 0x00000000, len = 0
+    flash7  : org = 0x00000000, len = 0
+    ram0    : org = 0x20000000, len = 20k
+    ram1    : org = 0x00000000, len = 0
+    ram2    : org = 0x00000000, len = 0
+    ram3    : org = 0x00000000, len = 0
+    ram4    : org = 0x00000000, len = 0
+    ram5    : org = 0x00000000, len = 0
+    ram6    : org = 0x00000000, len = 0
+    ram7    : org = 0x00000000, len = 0
+}
+
+/* For each data/text section two region are defined, a virtual region
+   and a load region (_LMA suffix).*/
+
+/* Flash region to be used for exception vectors.*/
+REGION_ALIAS("VECTORS_FLASH", flash0);
+REGION_ALIAS("VECTORS_FLASH_LMA", flash0);
+
+/* Flash region to be used for constructors and destructors.*/
+REGION_ALIAS("XTORS_FLASH", flash0);
+REGION_ALIAS("XTORS_FLASH_LMA", flash0);
+
+/* Flash region to be used for code text.*/
+REGION_ALIAS("TEXT_FLASH", flash0);
+REGION_ALIAS("TEXT_FLASH_LMA", flash0);
+
+/* Flash region to be used for read only data.*/
+REGION_ALIAS("RODATA_FLASH", flash0);
+REGION_ALIAS("RODATA_FLASH_LMA", flash0);
+
+/* Flash region to be used for various.*/
+REGION_ALIAS("VARIOUS_FLASH", flash0);
+REGION_ALIAS("VARIOUS_FLASH_LMA", flash0);
+
+/* Flash region to be used for RAM(n) initialization data.*/
+REGION_ALIAS("RAM_INIT_FLASH_LMA", flash0);
+
+/* RAM region to be used for Main stack. This stack accommodates the processing
+   of all exceptions and interrupts.*/
+REGION_ALIAS("MAIN_STACK_RAM", ram0);
+
+/* RAM region to be used for the process stack. This is the stack used by
+   the main() function.*/
+REGION_ALIAS("PROCESS_STACK_RAM", ram0);
+
+/* RAM region to be used for data segment.*/
+REGION_ALIAS("DATA_RAM", ram0);
+REGION_ALIAS("DATA_RAM_LMA", flash0);
+
+/* RAM region to be used for BSS segment.*/
+REGION_ALIAS("BSS_RAM", ram0);
+
+/* RAM region to be used for the default heap.*/
+REGION_ALIAS("HEAP_RAM", ram0);
+
+/* Generic rules inclusion.*/
+INCLUDE rules.ld

+ 96 - 0
keyboards/matrix/m12og/rev1/matrix.c

@@ -0,0 +1,96 @@
+/* Copyright 2021 xyzz
+ *
+ * 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 <stdint.h>
+#include <stdbool.h>
+#include "util.h"
+#include "matrix.h"
+#include "debounce.h"
+#include "quantum.h"
+
+static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
+static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
+
+static void select_col(uint8_t col) {
+    setPinOutput(col_pins[col]);
+    writePinHigh(col_pins[col]);
+}
+
+static void unselect_col(uint8_t col) { setPinInputLow(col_pins[col]); }
+
+static void unselect_cols(void) {
+    for (uint8_t x = 0; x < MATRIX_COLS; x++) {
+        setPinInputLow(col_pins[x]);
+    }
+}
+
+static void init_pins(void) {
+    unselect_cols();
+    for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
+        setPinInputLow(row_pins[x]);
+    }
+}
+
+static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) {
+    bool matrix_changed = false;
+
+    // Select col and wait for col selecton to stabilize
+    select_col(current_col);
+    matrix_io_delay();
+
+    // For each row...
+    for (uint8_t row_index = 0; row_index < MATRIX_ROWS; row_index++) {
+        // Store last value of row prior to reading
+        matrix_row_t last_row_value    = current_matrix[row_index];
+        matrix_row_t current_row_value = last_row_value;
+
+        // Check row pin state
+        if (readPin(row_pins[row_index]) != 0) {
+            // Pin LO, set col bit
+            current_row_value |= (MATRIX_ROW_SHIFTER << current_col);
+        } else {
+            // Pin HI, clear col bit
+            current_row_value &= ~(MATRIX_ROW_SHIFTER << current_col);
+        }
+
+        // Determine if the matrix changed state
+        if ((last_row_value != current_row_value)) {
+            matrix_changed |= true;
+            current_matrix[row_index] = current_row_value;
+        }
+    }
+
+    // Unselect col
+    unselect_col(current_col);
+
+    return matrix_changed;
+}
+
+void matrix_init_custom(void) {
+    // initialize key pins
+    init_pins();
+}
+
+uint8_t matrix_scan_custom(matrix_row_t current_matrix[]) {
+    bool changed = false;
+
+    // Set col, read rows
+    for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
+        changed |= read_rows_on_col(current_matrix, current_col);
+    }
+
+    return (uint8_t)changed;
+}

+ 209 - 0
keyboards/matrix/m12og/rev1/mcuconf.h

@@ -0,0 +1,209 @@
+/*
+    ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+*/
+
+#ifndef _MCUCONF_H_
+#define _MCUCONF_H_
+
+#define STM32F103_MCUCONF
+
+/*
+ * STM32F103 drivers configuration.
+ * The following settings override the default settings present in
+ * the various device driver implementation headers.
+ * Note that the settings for each driver only have effect if the whole
+ * driver is enabled in halconf.h.
+ *
+ * IRQ priorities:
+ * 15...0       Lowest...Highest.
+ *
+ * DMA priorities:
+ * 0...3        Lowest...Highest.
+ */
+
+/*
+ * HAL driver system settings.
+ */
+#define STM32_NO_INIT                       FALSE
+#define STM32_HSI_ENABLED                   TRUE
+#define STM32_LSI_ENABLED                   FALSE
+#define STM32_HSE_ENABLED                   TRUE
+#define STM32_LSE_ENABLED                   FALSE
+#define STM32_SW                            STM32_SW_PLL
+#define STM32_PLLSRC                        STM32_PLLSRC_HSE
+#define STM32_PLLXTPRE                      STM32_PLLXTPRE_DIV1
+#define STM32_PLLMUL_VALUE                  9
+#define STM32_HPRE                          STM32_HPRE_DIV1
+#define STM32_PPRE1                         STM32_PPRE1_DIV2
+#define STM32_PPRE2                         STM32_PPRE2_DIV2
+#define STM32_ADCPRE                        STM32_ADCPRE_DIV4
+#define STM32_USB_CLOCK_REQUIRED            TRUE
+#define STM32_USBPRE                        STM32_USBPRE_DIV1P5
+#define STM32_MCOSEL                        STM32_MCOSEL_NOCLOCK
+#define STM32_RTCSEL                        STM32_RTCSEL_HSEDIV
+#define STM32_PVD_ENABLE                    FALSE
+#define STM32_PLS                           STM32_PLS_LEV0
+
+/*
+ * ADC driver system settings.
+ */
+#define STM32_ADC_USE_ADC1                  FALSE
+#define STM32_ADC_ADC1_DMA_PRIORITY         2
+#define STM32_ADC_ADC1_IRQ_PRIORITY         6
+
+/*
+ * CAN driver system settings.
+ */
+#define STM32_CAN_USE_CAN1                  FALSE
+#define STM32_CAN_CAN1_IRQ_PRIORITY         11
+
+/*
+ * EXT driver system settings.
+ */
+#define STM32_EXT_EXTI0_IRQ_PRIORITY        6
+#define STM32_EXT_EXTI1_IRQ_PRIORITY        6
+#define STM32_EXT_EXTI2_IRQ_PRIORITY        6
+#define STM32_EXT_EXTI3_IRQ_PRIORITY        6
+#define STM32_EXT_EXTI4_IRQ_PRIORITY        6
+#define STM32_EXT_EXTI5_9_IRQ_PRIORITY      6
+#define STM32_EXT_EXTI10_15_IRQ_PRIORITY    6
+#define STM32_EXT_EXTI16_IRQ_PRIORITY       6
+#define STM32_EXT_EXTI17_IRQ_PRIORITY       6
+#define STM32_EXT_EXTI18_IRQ_PRIORITY       6
+#define STM32_EXT_EXTI19_IRQ_PRIORITY       6
+
+/*
+ * GPT driver system settings.
+ */
+#define STM32_GPT_USE_TIM1                  FALSE
+#define STM32_GPT_USE_TIM2                  FALSE
+#define STM32_GPT_USE_TIM3                  FALSE
+#define STM32_GPT_USE_TIM4                  FALSE
+#define STM32_GPT_USE_TIM5                  FALSE
+#define STM32_GPT_USE_TIM8                  FALSE
+#define STM32_GPT_TIM1_IRQ_PRIORITY         7
+#define STM32_GPT_TIM2_IRQ_PRIORITY         7
+#define STM32_GPT_TIM3_IRQ_PRIORITY         7
+#define STM32_GPT_TIM4_IRQ_PRIORITY         7
+#define STM32_GPT_TIM5_IRQ_PRIORITY         7
+#define STM32_GPT_TIM8_IRQ_PRIORITY         7
+
+/*
+ * I2C driver system settings.
+ */
+#define STM32_I2C_USE_I2C1                  FALSE
+#define STM32_I2C_USE_I2C2                  FALSE
+#define STM32_I2C_BUSY_TIMEOUT              50
+#define STM32_I2C_I2C1_IRQ_PRIORITY         5
+#define STM32_I2C_I2C2_IRQ_PRIORITY         5
+#define STM32_I2C_I2C1_DMA_PRIORITY         3
+#define STM32_I2C_I2C2_DMA_PRIORITY         3
+#define STM32_I2C_DMA_ERROR_HOOK(i2cp)      osalSysHalt("DMA failure")
+
+/*
+ * ICU driver system settings.
+ */
+#define STM32_ICU_USE_TIM1                  FALSE
+#define STM32_ICU_USE_TIM2                  FALSE
+#define STM32_ICU_USE_TIM3                  FALSE
+#define STM32_ICU_USE_TIM4                  FALSE
+#define STM32_ICU_USE_TIM5                  FALSE
+#define STM32_ICU_USE_TIM8                  FALSE
+#define STM32_ICU_TIM1_IRQ_PRIORITY         7
+#define STM32_ICU_TIM2_IRQ_PRIORITY         7
+#define STM32_ICU_TIM3_IRQ_PRIORITY         7
+#define STM32_ICU_TIM4_IRQ_PRIORITY         7
+#define STM32_ICU_TIM5_IRQ_PRIORITY         7
+#define STM32_ICU_TIM8_IRQ_PRIORITY         7
+
+/*
+ * PWM driver system settings.
+ */
+#define STM32_PWM_USE_ADVANCED              FALSE
+#define STM32_PWM_USE_TIM1                  FALSE
+#define STM32_PWM_USE_TIM2                  TRUE
+#define STM32_PWM_USE_TIM3                  FALSE
+#define STM32_PWM_USE_TIM4                  FALSE
+#define STM32_PWM_USE_TIM5                  FALSE
+#define STM32_PWM_USE_TIM8                  FALSE
+#define STM32_PWM_TIM1_IRQ_PRIORITY         7
+#define STM32_PWM_TIM2_IRQ_PRIORITY         7
+#define STM32_PWM_TIM3_IRQ_PRIORITY         7
+#define STM32_PWM_TIM4_IRQ_PRIORITY         7
+#define STM32_PWM_TIM5_IRQ_PRIORITY         7
+#define STM32_PWM_TIM8_IRQ_PRIORITY         7
+
+/*
+ * RTC driver system settings.
+ */
+#define STM32_RTC_IRQ_PRIORITY              15
+
+/*
+ * SERIAL driver system settings.
+ */
+#define STM32_SERIAL_USE_USART1             FALSE
+#define STM32_SERIAL_USE_USART2             FALSE
+#define STM32_SERIAL_USE_USART3             FALSE
+#define STM32_SERIAL_USE_UART4              FALSE
+#define STM32_SERIAL_USE_UART5              FALSE
+#define STM32_SERIAL_USART1_PRIORITY        12
+#define STM32_SERIAL_USART2_PRIORITY        12
+#define STM32_SERIAL_USART3_PRIORITY        12
+#define STM32_SERIAL_UART4_PRIORITY         12
+#define STM32_SERIAL_UART5_PRIORITY         12
+
+/*
+ * SPI driver system settings.
+ */
+#define STM32_SPI_USE_SPI1                  FALSE
+#define STM32_SPI_USE_SPI2                  FALSE
+#define STM32_SPI_USE_SPI3                  FALSE
+#define STM32_SPI_SPI1_DMA_PRIORITY         1
+#define STM32_SPI_SPI2_DMA_PRIORITY         1
+#define STM32_SPI_SPI3_DMA_PRIORITY         1
+#define STM32_SPI_SPI1_IRQ_PRIORITY         10
+#define STM32_SPI_SPI2_IRQ_PRIORITY         10
+#define STM32_SPI_SPI3_IRQ_PRIORITY         10
+#define STM32_SPI_DMA_ERROR_HOOK(spip)      osalSysHalt("DMA failure")
+
+/*
+ * ST driver system settings.
+ */
+#define STM32_ST_IRQ_PRIORITY               8
+#define STM32_ST_USE_TIMER                  2
+
+/*
+ * UART driver system settings.
+ */
+#define STM32_UART_USE_USART1               FALSE
+#define STM32_UART_USE_USART2               FALSE
+#define STM32_UART_USE_USART3               FALSE
+#define STM32_UART_USART1_IRQ_PRIORITY      12
+#define STM32_UART_USART2_IRQ_PRIORITY      12
+#define STM32_UART_USART3_IRQ_PRIORITY      12
+#define STM32_UART_USART1_DMA_PRIORITY      0
+#define STM32_UART_USART2_DMA_PRIORITY      0
+#define STM32_UART_USART3_DMA_PRIORITY      0
+#define STM32_UART_DMA_ERROR_HOOK(uartp)    osalSysHalt("DMA failure")
+
+/*
+ * USB driver system settings.
+ */
+#define STM32_USB_USE_USB1                  TRUE
+#define STM32_USB_LOW_POWER_ON_SUSPEND      FALSE
+#define STM32_USB_USB1_HP_IRQ_PRIORITY      13
+#define STM32_USB_USB1_LP_IRQ_PRIORITY      14
+
+#endif /* _MCUCONF_H_ */

+ 26 - 0
keyboards/matrix/m12og/rev1/readme.md

@@ -0,0 +1,26 @@
+# Matrix 8XV1.2 OG keyboard
+
+![Matrix 8XV1.2 OG](https://i.imgur.com/NELL6Sbl.jpg)
+
+This was the Matrix 8XV1.2 OG keyboard made by the Matrix team.  
+Note: This firmware only supports ANSI only version (green/yellow PCB), and DOES NOT support the 8XV1.2 OG ISO/ANSI version.
+
+* Keyboard Maintainer: [kb-elmo](https://github.com/kb-elmo)
+* Hardware Supported: Matrix 8XV1.2 OG ANSI only PCB
+* Hardware Availability: Matrix Lab
+
+Make example for this keyboard (after setting up your build environment):
+
+    make matrix/m12og/rev1:default
+
+---
+**Bootloader:**  
+
+Hold down ESC while plugging in the keyboard. The board will show up as a mass storage device on your computer. Drag and drop the compiled firmware .bin file into it. The board will automatically reset and load the new firmware.  
+
+:no_entry: **DO NOT DO THIS ON A MAC OS SYSTEM! IT WILL PERMANENTLY BRICK THE KEYBOARD!!!**
+
+---
+
+
+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).

+ 27 - 0
keyboards/matrix/m12og/rev1/rev1.c

@@ -0,0 +1,27 @@
+/* Copyright 2021 kb-elmo<mail@elmo.space>
+ *
+ * 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 "rev1.h"
+
+void board_init(void) {
+    writePinLow(A8);
+}
+
+void keyboard_post_init_kb(void) {
+    rgblight_enable_noeeprom();
+    rgblight_sethsv_noeeprom(5, 255, 255);
+    rgblight_mode_noeeprom(37);
+}

+ 37 - 0
keyboards/matrix/m12og/rev1/rev1.h

@@ -0,0 +1,37 @@
+/* Copyright 2021 kb-elmo<mail@elmo.space>
+ *
+ * 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 "quantum.h"
+
+#define ____ KC_NO
+
+#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, k213,   k313, k114, k115, \
+    k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, k113,   k314, k214, k215, \
+    k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311,    k312,                        \
+    k400, k401, k402, k403, k404, k405, k406, k407, k408, k409, k410,     k411,                 k412,       \
+    k500, k501, k502,                   k505,                         k506, k507, k508,   k413, k414, k315  \
+) { \
+    { 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, k314, k315 }, \
+    { k400, k401, k402, k403, k404, k405, k406, k407, k408, k409, k410, k411, k412, k413, k414, ____ }, \
+    { k500, k501, k502, ____, ____, k505, k506, k507, k508, ____, ____, ____, ____, ____, ____, ____ }  \
+}

+ 26 - 0
keyboards/matrix/m12og/rev1/rules.mk

@@ -0,0 +1,26 @@
+# MCU name
+MCU = STM32F103
+
+MCU_LDSCRIPT = m12og_v1
+
+BOARD = m12og_v1
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no       # Bootmagic disabled because Matrix bootlaoder uses it's own reset mechanism
+MOUSEKEY_ENABLE = no        # Mouse keys
+EXTRAKEY_ENABLE = yes       # Audio control and System control
+CONSOLE_ENABLE = no         # Console for debug
+COMMAND_ENABLE = no         # 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 = no            # USB Nkey Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes       # HAS TO BE ON! Otherwise the custom matrix doesn't work
+BLUETOOTH_ENABLE = no       # Enable Bluetooth
+AUDIO_ENABLE = no           # Audio output
+
+CUSTOM_MATRIX = lite
+SRC += matrix.c

+ 0 - 0
keyboards/matrix/m12og/config.h → keyboards/matrix/m12og/rev2/config.h


+ 1 - 1
keyboards/matrix/m12og/info.json → keyboards/matrix/m12og/rev2/info.json

@@ -1,5 +1,5 @@
 {
-  "keyboard_name": "Matrix/8XV1.2OG ISO/ANSI",
+  "keyboard_name": "Matrix 8XV1.2 OG ISO/ANSI",
   "url": "",
   "maintainer": "qmk",
   "width": 18.25,

+ 0 - 0
keyboards/matrix/m12og/keymaps/default/keymap.c → keyboards/matrix/m12og/rev2/keymaps/default/keymap.c


+ 0 - 0
keyboards/matrix/m12og/keymaps/iso/keymap.c → keyboards/matrix/m12og/rev2/keymaps/iso/keymap.c


+ 0 - 0
keyboards/matrix/m12og/keymaps/via/keymap.c → keyboards/matrix/m12og/rev2/keymaps/via/keymap.c


+ 0 - 0
keyboards/matrix/m12og/keymaps/via/rules.mk → keyboards/matrix/m12og/rev2/keymaps/via/rules.mk


+ 16 - 0
keyboards/matrix/m12og/rev2/readme.md

@@ -0,0 +1,16 @@
+# Matrix 8XV1.2 OG keyboard
+
+![Matrix 8XV1.2 OG](https://i.imgur.com/NELL6Sbl.jpg)
+
+This was the Matrix 8XV1.2 OG keyboard made by the Matrix team.  
+Note: This firmware only supports ISO/ANSI version (white PCB), and DOES NOT support the 8XV1.2 OG ANSI only version.
+
+* Keyboard Maintainer: [astro](https://github.com/yulei)
+* Hardware Supported: Matrix 8XV1.2 OG (ISO/ANSI) PCB
+* Hardware Availability: Matrix Lab
+
+Make example for this keyboard (after setting up your build environment):
+
+    make matrix/m12og/rev2:default
+
+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).

+ 2 - 2
keyboards/matrix/m12og/m12og.c → keyboards/matrix/m12og/rev2/rev2.c

@@ -1,8 +1,8 @@
 /**
- * m12og.c
+ * rev2.c
  */
 
-#include "m12og.h"
+#include "rev2.h"
 
 void matrix_init_user(void) {
 	setPinOutput(C6);

+ 10 - 10
keyboards/matrix/m12og/m12og.h → keyboards/matrix/m12og/rev2/rev2.h

@@ -23,12 +23,12 @@
 }
 
 #define LAYOUT_tkl_iso( \
-    K000,       K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012,          K500, K501, K502, \
-	K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K013,          K503, K504, K505, \
-	K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212,                K506, K507, K508, \
-	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,                      K610,       \
-	K600, K601, K602,                         K603,                   K604, K605, K606,          K607, K608, K609  \
+    K000,       K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012,   K500, K501, K502, \
+	K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K013,   K503, K504, K505, \
+	K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212,         K506, K507, K508, \
+	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,               K610,       \
+	K600, K601, K602,                         K603,                   K604, K605, K606,   K607, K608, K609  \
 ) { \
 	{ K000,  K001,  K002,  K003,  K004,  K005,  K006,  K007,  K008,  K009,  K010,  K011,  K012,  K013  }, \
 	{ K100,  K101,  K102,  K103,  K104,  K105,  K106,  K107,  K108,  K109,  K110,  K111,  K112,  KC_NO }, \
@@ -40,11 +40,11 @@
 }
 
 #define LAYOUT_tkl_ansi( \
-    K000,       K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012,    K500, K501, K502,\
-	K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K013,    K503, K504, K505,\
-	K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213,    K506, K507, K508,\
+    K000,       K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012,   K500, K501, K502, \
+	K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K013,   K503, K504, K505, \
+	K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213,   K506, K507, K508, \
 	K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311,       K313,                     \
-	K400,       K402, K403, K404, K405, K406, K407, K408, K409, K410, K411,       K412,          K610,      \
+	K400,       K402, K403, K404, K405, K406, K407, K408, K409, K410, K411,       K412,         K610,       \
 	K600, K601, K602,                   K603,                         K604, K605, K606,   K607, K608, K609  \
 ) { \
 	{ K000,  K001,  K002,  K003,  K004,  K005,  K006,  K007,  K008,  K009,  K010,  K011,  K012,  K013  }, \

+ 0 - 0
keyboards/matrix/m12og/rules.mk → keyboards/matrix/m12og/rev2/rules.mk