lotus: Map matrix properly to hardware layout

Signed-off-by: Daniel Schaefer <dhs@frame.work>
This commit is contained in:
Daniel Schaefer 2022-12-21 14:39:03 +08:00
parent 5fd60e9f23
commit c24a456cf2
5 changed files with 211 additions and 30 deletions

View File

@ -6,8 +6,8 @@
#include <config_common.h>
#define MATRIX_COLS 14
#define MATRIX_ROWS 6
#define MATRIX_COLS 16
#define MATRIX_ROWS 8
// TODO: Adjust this. The GPIO is definitely wrong
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
@ -29,6 +29,7 @@
#define RGB_MATRIX_LED_COUNT 78
// PWM single one backlight configuration
// TODO: Double-check these
// The RP2040 datasheet says GPIO25 maps to PWM channel 4B
#define BACKLIGHT_PWM_DRIVER PWMD4
#define BACKLIGHT_PWM_CHANNEL RP2040_PWM_CHANNEL_B

View File

@ -1,6 +1,6 @@
{
"keyboard_name": "lotus",
"manufacturer": "Framework Computer",
"manufacturer": "Framework Computer Inc",
"maintainer": "JohnAZoidberg",
"bootloader": "rp2040",
"features": {

View File

@ -2,6 +2,7 @@
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
#include "keymap_japanese.h"
void keyboard_post_init_user(void) {
// Enable debug output
@ -22,11 +23,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* 13 keys Caps A S D F G H J K L ; ' Enter
*
* 12 keys Shift Z X C V B N M , . / Shift
*
*
* 11 keys Ctrl FN GUI Alt AltCtl
*
*
*
*
* 11 keys CtrlFN GUIAlt AltCtl
*
*
* 78 total
*/
[0] = LAYOUT_78_ansi(
@ -35,7 +36,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
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_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_LCTL, MO(1), KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
KC_LCTL, MO(1), KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT
),
/*
* Function layer
@ -49,11 +50,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* 13 keys
*
* 12 keys
*
* PgU
* 11 keys Toggle Backlight HomeEnd
* PgD
*
*
* PgU
* 11 keys Toggle Backlight HomeEnd
* PgD
*
* 78 total
*/
// TODO: Screen toggle, airplane mode
@ -64,7 +65,122 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
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_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, BL_TOGG, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_PGUP, KC_RGHT
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BL_TOGG, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_PGDN, KC_END
)
};
const uint16_t PROGMEM keymaps_iso[][MATRIX_ROWS][MATRIX_COLS] = {
/*
*
* 14 keys Esc F1 F2 F3 F4 F5 F6 F7 F8 F9 F10F11F12 Del
*
* 14 keys ` 1 2 3 4 5 6 7 8 9 0 - = Backsp
*
* 13 keys Tab Q W E R T Y U I O P [ ] Entr
*
* 14 keys Caps A S D F G H J K L ; ' #
*
* 13 keys Shft \ Z X C V B N M , . / Shift
*
*
* 11 keys CtrlFN GUIAlt AltCtl
*
*
* 79 total
*/
[0] = LAYOUT_79_iso(
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_DEL,
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_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_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, MO(1), KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT
),
/*
* Function layer
*
* 14 keys FN lkMutvDnvUpPrvPlyNxtbDnbUpScnAirPrtAppIns
*
* 14 keys
*
* 13 keys
*
* 14 keys
*
* 13 keys
*
* PgU
* 11 keys Toggle Backlight HomeEnd
* PgD
*
* 78 total
*/
// TODO: Screen toggle, airplane mode
// TODO: Other unlabeled keys
[1] = LAYOUT_79_iso(
TG(1), KC_KB_MUTE, KC_KB_VOLUME_DOWN, KC_KB_VOLUME_UP, KC_MPRV, KC_MPLY, KC_MNXT, KC_BRID, KC_BRIU, KC_TRNS, KC_TRNS, KC_PSCR, KC_MSEL, KC_INS,
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_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, BL_TOGG, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_PGDN, KC_END
)
};
const uint16_t PROGMEM keymaps_jis[][MATRIX_ROWS][MATRIX_COLS] = {
/*
*
* 14 keys Esc F1 F2 F3 F4 F5 F6 F7 F8 F9 F10F11F12 Del
*
* 15 keys ZH 1 2 3 4 5 6 7 8 9 0 - ^ ¥ Bck
*
* 13 keys Tab Q W E R T Y U I O P @ [ Entr
*
* 14 keys Eisū A S D F G H J K L ; : ]
*
* 13 keys Shift Z X C V B N M , . / \ Shift
*
* M H K
* 14 keys CtrlFN GUIAltu e AltCtl
* h n H
*
* 83 total
*/
[0] = LAYOUT_83_jis(
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_DEL,
JP_ZKHK, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, JP_CIRC, JP_YEN, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, JP_AT, KC_LBRC,
JP_EISU, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_RBRC, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, JP_BSLS, KC_RSFT,
KC_LCTL, MO(1), KC_LGUI, KC_LALT, JP_MHEN, KC_SPC, JP_HENK, JP_KANA, KC_RALT, KC_RCTL, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT
),
/*
* Function layer
*
* 14 keys FN lkMutvDnvUpPrvPlyNxtbDnbUpScnAirPrtAppIns
*
* 14 keys
*
* 13 keys
*
* 14 keys
*
* 13 keys
*
* PgU
* 11 keys Toggle Backlight HomeEnd
* PgD
*
* 78 total
*/
// TODO: Screen toggle, airplane mode
// TODO: Other unlabeled keys
[1] = LAYOUT_83_jis(
TG(1), KC_KB_MUTE, KC_KB_VOLUME_DOWN, KC_KB_VOLUME_UP, KC_MPRV, KC_MPLY, KC_MNXT, KC_BRID, KC_BRIU, KC_TRNS, KC_TRNS, KC_PSCR, KC_MSEL, KC_INS,
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_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, BL_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_PGDN, KC_END
)
};

View File

@ -6,18 +6,59 @@
#include "quantum.h"
#define LAYOUT_78_ansi( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, K13, \
K14, K15, K16, K17, K18, K19, K20, K21, K22, K23, K24, K25, K26, K27, \
K28, K29, K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K40, K41, \
K42, K43, K44, K45, K46, K47, K48, K49, K50, K51, K52, K53, K54, \
K55, K56, K57, K58, K59, K60, K61, K62, K63, K64, K65, K66, \
K67, K68, K69, K70, K71, K72, K73, K74, K75, K76, K77 \
K110, K112, K113, K114, K115, K116, K117, K118, K119, K120, K121, K122, K126, K76, \
K1, K2, K3, K4, K5, K6, K7, K8, K9, K10, K11, K12, K13, K15, \
K16, K17, K18, K19, K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, \
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K40, K41, K43, \
K44, K46, K47, K48, K49, K50, K51, K52, K53, K54, K55, K57, \
K58, K59, K127, K60, K61, K62, K64, K79, K83, K84, K89 \
) \
{ \
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, K13 }, \
{ K14, K15, K16, K17, K18, K19, K20, K21, K22, K23, K24, K25, K26, K27 }, \
{ K28, K29, K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K40, K41 }, \
{ K42, K43, K44, K45, K46, K47, K48, K49, K50, K51, K52, K53, KC_NO, K54 }, \
{ K55, KC_NO, K56, K57, K58, K59, K60, K61, K62, K63, K64, K65, KC_NO, K66 }, \
{ K67, K68, K69, K70, KC_NO, K71, KC_NO, KC_NO, K72, K73, K74, K75, K76, K77 } \
{ K48, K76, K17, K62, KC_NO, K47, K49, K52, K54, K57, K53, KC_NO, K64, K55, K41, KC_NO }, \
{ KC_NO, KC_NO, KC_NO, K60, K61, K46, K50, K51, K84, K44, KC_NO, KC_NO, K58, K83, K43, K119 }, \
{ KC_NO, KC_NO, K59, KC_NO, K19, K113, K35, K36, K29, KC_NO, K118, KC_NO, KC_NO, K12, KC_NO, K89 }, \
{ KC_NO, K127, K16, KC_NO, K115, K112, K21, K22, K25, KC_NO, K117, K120, KC_NO, KC_NO, KC_NO, K126 }, \
{ KC_NO, KC_NO, K1, KC_NO, K30, K32, K6, K7, K121, KC_NO, K116, KC_NO, KC_NO, K11, K13, KC_NO }, \
{ KC_NO, KC_NO, K2, KC_NO, K4, K3, K5, K8, K10, KC_NO, K9, KC_NO, KC_NO, K26, K15, KC_NO }, \
{ KC_NO, KC_NO, KC_NO, KC_NO, K114, K18, K20, K23, K122, KC_NO, K24, K79, KC_NO, K27, K28, KC_NO }, \
{ KC_NO, KC_NO, K31, KC_NO, KC_NO, K110, K34, K37, K39, KC_NO, K38, KC_NO, KC_NO, K40, K33, KC_NO } \
}
// K29/K42 swapped in ANSI/ISO
#define LAYOUT_79_iso( \
K110, K112, K113, K114, K115, K116, K117, K118, K119, K120, K121, K122, K126, K76, \
K1, K2, K3, K4, K5, K6, K7, K8, K9, K10, K11, K12, K13, K15, \
K16, K17, K18, K19, K20, K21, K22, K23, K24, K25, K26, K27, K28, \
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K40, K41, K42, K43, \
K44, K45, K46, K47, K48, K49, K50, K51, K52, K53, K54, K55, K57, \
K58, K59, K127, K60, K61, K62, K64, K79, K83, K84, K89 \
) \
{ \
{ K48, K76, K17, K62, KC_NO, K47, K49, K52, K54, K57, K53, KC_NO, K64, K55, K41, KC_NO }, \
{ KC_NO, KC_NO, KC_NO, K60, K61, K46, K50, K51, K84, K44, KC_NO, KC_NO, K58, K83, K43, K119 }, \
{ KC_NO, KC_NO, K59, KC_NO, K19, K113, K35, K36, K42, KC_NO, K118, KC_NO, KC_NO, K12, KC_NO, K89 }, \
{ KC_NO, K127, K16, KC_NO, K115, K112, K21, K22, K25, KC_NO, K117, K120, KC_NO, KC_NO, KC_NO, K126 }, \
{ KC_NO, KC_NO, K1, KC_NO, K30, K32, K6, K7, K121, KC_NO, K116, KC_NO, K11, K13, KC_NO }, \
{ KC_NO, KC_NO, K2, KC_NO, K4, K3, K5, K8, K10, KC_NO, K9, K45, KC_NO, K26, K15, KC_NO }, \
{ KC_NO, KC_NO, KC_NO, KC_NO, K114, K18, K20, K23, K122, KC_NO, K24, K79, KC_NO, K27, K28, KC_NO }, \
{ KC_NO, KC_NO, K31, KC_NO, KC_NO, K110, K34, K37, K39, KC_NO, K38, KC_NO, KC_NO, K40, K33, KC_NO }, \
}
#define LAYOUT_83_jis( \
K110, K112, K113, K114, K115, K116, K117, K118, K119, K120, K121, K122, K126, K76, \
K1, K2, K3, K4, K5, K6, K7, K8, K9, K10, K11, K12, K13, K14, K15,\
K16, K17, K18, K19, K20, K21, K22, K23, K24, K25, K26, K27, K28, \
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K40, K41, K42, K43, \
K44, K46, K47, K48, K49, K50, K51, K52, K53, K54, K55, K56, K57, \
K58, K59, K127, K60, K131, K61, K132, K133, K62, K64, K79, K83, K84, K89 \
) \
{ \
{ K48, K76, K17, K62, KC_NO, K47, K49, K52, K54, K57, K53, K133, K64, K55, K41, K14 }, \
{ KC_NO, KC_NO, KC_NO, K60, K61, K46, K50, K51, K84, K44, KC_NO, K132, K58, K83, K43, K119 }, \
{ KC_NO, KC_NO, K59, KC_NO, K19, K113, K35, K36, K42, KC_NO, K118, KC_NO, KC_NO, K12, KC_NO, K89 }, \
{ KC_NO, K127, K16, KC_NO, K115, K112, K21, K22, K25, KC_NO, K117, K120, KC_NO, KC_NO, KC_NO, K126 }, \
{ KC_NO, KC_NO, K1, KC_NO, K30, K32, K6, K7, K121, KC_NO, K116, K56, KC_NO, K11, K13, KC_NO,}, \
{ KC_NO, KC_NO, K2, KC_NO, K4, K3, K5, K8, K10, KC_NO, K9, KC_NO, KC_NO, K26, K15, KC_NO,}, \
{ KC_NO, KC_NO, K131, KC_NO, K114, K18, K20, K23, K122, KC_NO, K24, K79, KC_NO, K27, K28, KC_NO,}, \
{ KC_NO, KC_NO, K31, KC_NO, KC_NO, K110, K34, K37, K39, KC_NO, K38, KC_NO, KC_NO, K40, K33, KC_NO,} \
}

View File

@ -40,10 +40,33 @@ void adc_select_input(int adc_channel) {
* Splits the positive integer (<=7) into its three component bits.
*/
static void mux_select_col(int col) {
assert(col >= 0 && col <= 7);
// Not in order - need to remap them
// X0 - KSI1
// X1 - KSI2
// X2 - KSI0
// X3 - KSI3
// X4 - KSI4
// X5 - KSI5
// X6 - KSI6
// X7 - KSI7
int index = 0;
switch (col) {
case 0:
index = 2;
case 1:
index = 0;
case 2:
index = 1;
default:
index = col;
}
int bits[] = {
(col & 0x1) > 0,
(col & 0x4) > 0,
(col & 0x8) > 0
(index & 0x1) > 0,
(index & 0x4) > 0,
(index & 0x8) > 0
};
writePin(MUX_A, bits[0]);
writePin(MUX_B, bits[1]);