🥐

Corne v4でレイヤーごとにLEDを切り替える

2024/03/28に公開

foostanさんの新作Corne v4がリリースされました。

以前、Corne v3で試したLED制御をv4でやってみるという焼き増し記事です。

QMKのファームウェア準備

まず、Corneのqmk用ファームウェアをクローンします。

設定変更

マスタのレイヤ情報をスレーブと共有します。

rev4/info.json
 "transport": {
     "sync": {
+        "layer_state": true
         "matrix_state": true

点灯制御

あとは、インデックスを指定して点灯するだけです。

keymaps/yours/keymap.c
bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
    if (is_keyboard_left()) {
        rgb_matrix_set_color(idx_left, r, g, b)
    }else{
        rgb_matrix_set_color(idx_right, r, g, b)
    }
    return false
}

Corne v4のLED配置

pcbのkicadをみると、
おそらくこの並び。

v3の裏面のアンダーグロー0-527-32が無くなり、2つの拡張キー分が増えています。

Corne v3
{  24,  23,  18,  17,  10,   9 },          {  36,  37,  44,  45,  50,   51 },
{  25,  22,  19,  16,  11,   8 },          {  35,  38,  43,  46,  49,   52 },
{  26,  21,  20,  15,  12,   7 },          {  34,  39,  42,  47,  48,   53 },
                { 14,  13,   6 },          {  33,  40,  41  }
Corne v4
{  18,  17,  12,  11,   4,   3,  21},  {44,   26,  27,  34,  35,  40,   41 },
{  19,  16,  13,  10,   5,   2,  22},  {45,   25,  28,  33,  36,  39,   42 },
{  20,  15,  14,   9,   6,   1 },          {  24,  29,  32,  37,  38,   43 },
                {  8,   7,   0 },          {  23,  30,  31  }

v3とv4のLED設定を併用する

v3とv4で同一キーを点灯するには、別のインデックスを指定する必要があります。それぞれ別のコードを用意するのは手間なので、以下のようなヘッダを用意しました。LD_{***}のキー名は適当につけてます。

lib/ledmap.h
#pragma once

/*
  //,-------------------------------------------------------.  ,-------------------------------------------------------.
     LD_TAB,   LD_Q,   LD_W,   LD_E,   LD_R,   LD_T,   LD_TT,    LD_YY,   LD_Y,   LD_U,   LD_I,   LD_O,   LD_P, LD_BSPC,
  //|-------+-------+-------+-------+-------+-------+-------|  |-------+-------+-------+-------+-------+-------+-------|
    LD_LCTL,   LD_A,   LD_S,   LD_D,   LD_F,   LD_G,   LD_GG,    LD_HH,   LD_H,   LD_J,   LD_K,   LD_L, LD_SCLN,LD_QUOT,
  //|-------+-------+-------+-------+-------+-------+-------|  |-------+-------+-------+-------+-------+-------+-------|
    LD_LSFT,   LD_Z,   LD_X,   LD_C,   LD_V,   LD_B,                      LD_N,   LD_M,LD_COMM, LD_DOT, LD_SLSH, LD_ESC,
  //|-------+-------+-------+-------+-------+-------|                  |-------+-------+-------+-------+-------+-------|
                                      LD_VV,  LD_BB,   LD_L0,    LD_R0,  LD_NN,  LD_MM
                                     //`---------------------'  `---------------------'
*/

enum led_map {
    // left
#ifdef LAYOUT_split_3x6_3_ex2
    LD_L0=0,
#else
    //LAYOUT_split_3x6_3
    LD_L0=6,
#endif
    LD_B,
    LD_G,
    LD_T,
    LD_R,
    LD_F,
    LD_V,
    LD_BB,
    LD_VV,
    LD_C,
    LD_D,
    LD_E,
    LD_W,
    LD_S,
    LD_X,
    LD_Z,
    LD_A,
    LD_Q,
    LD_TAB,
    LD_LCTL,
    LD_LSFT,
#ifdef LAYOUT_split_3x6_3_ex2
    LD_TT,
    LD_GG,
#endif
    // right
#ifdef LAYOUT_split_3x6_3_ex2
    LD_R0,
#else
    //LAYOUT_split_3x6_3
    LD_R0=33,
#endif
    LD_N,
    LD_H,
    LD_Y,
    LD_U,
    LD_J,
    LD_M,
    LD_NN,
    LD_MM,
    LD_COMM,
    LD_K,
    LD_I,
    LD_O,
    LD_L,
    LD_DOT,
    LD_SLSH,
    LD_SCLN,
    LD_P,
    LD_BSPC,
    LD_QUOT,
    LD_ESC,
#ifdef LAYOUT_split_3x6_3_ex2
    LD_YY,
    LD_HH
#endif
};

あとは、こんな感じで点灯したいキーを指定すれば、v3/v4共通のコードで同一箇所を点灯できるようになります。

keymaps/yours/keymap.c
#include "lib/ledmap.h"

bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
    if (is_keyboard_left()) {
        rgb_matrix_set_color(LD_A, r, g, b)
        // ・・・
}

以上、Corne v4で遊んでみた記事でした。

Chocolateで透過キーじゃないと、LEDあまり見えないです。

Discussion