見出し画像

Neo Ergoであそぼ。②(Vial/RGB Matrix編)

はじめに

一日で一番手に触れているものはキーボードという思い込みから、不便さを克服することにより得られる快楽を毎日満喫するために小さなキーボードの導入を思い立ち、2022年12月にClaw44の購入を決意。プログラミングと自作キーボードの知識ゼロから始めた自作キーボード素人によるカスタマイズの奮闘記を綴っていきたいと思います。

RGB MatrixのFlagsで遊んでみよう

光の魔術師仕様のRGB Matrixを使う場合には、info.jsonのfeaturesの項で  "rgb_matrix": true を追加して、rgb_matrixのlayoutの項において、位置、連動するキー、flagsを記載する必要がある。このflagsを使いこなすことで、RGB Matrixの可能性がさらに広がるのことが分かったので今回はこのflagsについての奮闘記を綴ってみる。あくまで猫山王の独学と試行錯誤による修行に基づく奮闘記であるので、正確でない記載も多々あると思われる。その場合は遠慮なくご指摘いただけると幸いです。また、公式ページにはより正確で詳しい記載があるので、迷ったら公式ページを合言葉に各自の修行に役立てていただきたい。

1.Flagsとは
実際に猫山王のNeo Ergoのinfo.jsonのrgb_matrixのlayoutの項の記載を見てみよう。ここにある"flags": 4や"flags": 2が今回のテーマである。

    "layout": [
        {"matrix": [0, 0], "x": 22, "y": 0, "flags": 4},
        {"matrix": [0, 1], "x": 35, "y": 0, "flags": 4},
        {"matrix": [0, 2], "x": 48, "y": 0, "flags": 4},
        {"matrix": [0, 3], "x": 63, "y": 0, "flags": 4},
        {"matrix": [0, 4], "x": 76, "y": 0, "flags": 4},

        {"matrix": [4, 1], "x": 15, "y": 64, "flags": 1},
        {"matrix": [3, 1], "x": 15, "y": 58, "flags": 2},
        {"matrix": [2, 1], "x": 15, "y": 52, "flags": 8},

        {"matrix": [1, 3], "x": 55, "y": 0, "flags": 4},
        {"matrix": [1, 2], "x": 48, "y": 16, "flags": 4},
        {"matrix": [2, 2], "x": 48, "y": 32, "flags": 4},
        {"matrix": [3, 2], "x": 55, "y": 48, "flags": 4},

        {"matrix": [0, 12], "x": 170, "y": 0, "flags": 4},
        {"matrix": [1, 11], "x": 164, "y": 16, "flags": 4},
        {"matrix": [2, 11], "x": 170, "y": 32, "flags": 4},
        {"matrix": [3, 11], "x": 164, "y": 48, "flags": 4}
    ],

"flags"の値自体は1~9まで設定できるということは猫山王の血の滲む修行により確かめたが、公式ページによると以下のルールがある。

"flags": 1・・・修飾キーに利用(RGB MatrixのAlphas Modsで活躍?)
"flags": 2・・・アンダーグローに利用
"flags": 4・・・バックライトに利用
"flags": 8・・・インジケーターに利用(Caps LockやNum Lockで活躍?)

ちなみに、猫山王のキーボードは60%以下を原則とし、Caps LockやNum Lockは一切使わないので、"flags": 8の活用の呪文についての修業はしていない。また、Neo Ergoのデフォルトのファームウェアを使いこなす前にVial化からの光の魔術師仕様のRGB Matrixを搭載してしまったので、デフォルトのファームウェアでの挙動が一切分かっていない。良い子の修行僧の皆さんは、デフォルトの機能をしっかりと理解して、追加的な機能が欲しい場合にソフトウェア的な魔改造をすることをお勧めする。

2.レイヤーインジケーターとしての活用
今回は、Neo Ergoの左下に3つ並んでいる小さなLEDをレイヤーインジケーターとして活用しようという修行である。レイヤーインジケーターとして活用するだけであれば、いつものようにレイヤーごとに色を変えればいい。しかし、LEDがまるで未確認飛行物体のように3つ連なって並んでいるので猫山王のIQの活用と日々の不便を克服するトレーニングで培ったクリエイティブな発想により試行錯誤した結果、レイヤーごとに光るパターンと色を変えてみようというナイスな構想にたどり着いた。光るパターンを2進数で表現することで、未確認飛行物体が3つあれば8レイヤーまで対応することができる。これは、「Claw44であそぼ。④(OLED編)」で生み出した革新的な方法の発展形でもある。やはり、自分のことを天才と確信した。自画自賛。
つまり、レイヤー0の場合はすべてを消灯して上から●●●とする。レイヤー1の場合は上から〇〇◎(猫山王の場合は〇をBlue、◎をMagentaにしている)、レイヤー5の場合は◎〇◎のように発光させるという革新的なギミックである。このような2進数で表現する場合には、3つの未確認飛行物体それぞれを個別に制御する必要があるので、それぞれにflags番号を割り当てることになる。猫山王の場合は、info.jsonのrgb_matrixのlayoutの項において、"flags": 1、"flags": 2、"flags": 8をそれぞれの未確認飛行物体に割り当てて、keymap.cでレイヤーごとの発光パターンの呪文を記載することで発光パターンを思い通りに制御している。猫山王の呪文の作例を以下に記載しておくので是非ご活用ください。
なお、flags[i], 0x01などの数字はinfo.jsonのrgb_matrixのlayoutの項で設定したflagsと合わせることで発光させる未確認飛行物体を指定し、RGB_MAGENTAなどの色の名称はcolor.hのお好みの色の名称に変えるところが、修行僧の個性を存分に発揮できるポイントといえよう。case_01やcase_02の記載は、猫山王のkeymap.cでレイヤー名称を_01や_02としているためであり、この辺りも修行僧のレイヤー名称の定義に合わせつつ発光パターンを工夫することで3機並んでいる未確認飛行物体の発光パターンに個性を発揮できよう。なお、猫山王の呪文では全ての未確認飛行物体を何らかの色で発光させているが、RGB_OFFとすることで特定の未確認飛行物体を消灯させることもできる。

#ifdef RGB_MATRIX_ENABLE
bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
 for (uint8_t i = led_min; i < led_max; i++) {
  switch(get_highest_layer(layer_state|default_layer_state)) {
    case _01:
          if (HAS_FLAGS(g_led_config.flags[i], 0x01)) {
    rgb_matrix_set_color(i, RGB_MAGENTA);}
    else if (HAS_FLAGS(g_led_config.flags[i], 0x02)) {
    rgb_matrix_set_color(i, RGB_BLUE);}
    else if (HAS_FLAGS(g_led_config.flags[i], 0x08)) {
    rgb_matrix_set_color(i, RGB_BLUE);}
    break;
    case _02:
    if (HAS_FLAGS(g_led_config.flags[i], 0x01)) {
    rgb_matrix_set_color(i, RGB_BLUE);}
    else if (HAS_FLAGS(g_led_config.flags[i], 0x02)) {
    rgb_matrix_set_color(i, RGB_MAGENTA);}
    else if (HAS_FLAGS(g_led_config.flags[i], 0x08)) {
    rgb_matrix_set_color(i, RGB_BLUE);}
    break;
   case _03:
    if (HAS_FLAGS(g_led_config.flags[i], 0x01)) {
    rgb_matrix_set_color(i, RGB_MAGENTA);}
    else if (HAS_FLAGS(g_led_config.flags[i], 0x02)) {
    rgb_matrix_set_color(i, RGB_MAGENTA);}
    else if (HAS_FLAGS(g_led_config.flags[i], 0x08)) {
    rgb_matrix_set_color(i, RGB_BLUE);}
    break;
   case _04:
    if (HAS_FLAGS(g_led_config.flags[i], 0x01)) {
    rgb_matrix_set_color(i, RGB_BLUE);}
    else if (HAS_FLAGS(g_led_config.flags[i], 0x02)) {
    rgb_matrix_set_color(i, RGB_BLUE);}
    else if (HAS_FLAGS(g_led_config.flags[i], 0x08)) {
    rgb_matrix_set_color(i, RGB_MAGENTA);}
    break;
   case _05:
    if (HAS_FLAGS(g_led_config.flags[i], 0x01)) {
    rgb_matrix_set_color(i, RGB_MAGENTA);}
    else if (HAS_FLAGS(g_led_config.flags[i], 0x02)) {
    rgb_matrix_set_color(i, RGB_BLUE);}
    else if (HAS_FLAGS(g_led_config.flags[i], 0x08)) {
    rgb_matrix_set_color(i, RGB_MAGENTA);}
    break;
   case _06:
    if (HAS_FLAGS(g_led_config.flags[i], 0x01)) {
    rgb_matrix_set_color(i, RGB_BLUE);}
    else if (HAS_FLAGS(g_led_config.flags[i], 0x02)) {
    rgb_matrix_set_color(i, RGB_MAGENTA);}
    else if (HAS_FLAGS(g_led_config.flags[i], 0x08)) {
    rgb_matrix_set_color(i, RGB_MAGENTA);}
    break;
   case _07:
    if (HAS_FLAGS(g_led_config.flags[i], 0x01)) {
    rgb_matrix_set_color(i, RGB_MAGENTA);}
    else if (HAS_FLAGS(g_led_config.flags[i], 0x02)) {
    rgb_matrix_set_color(i, RGB_MAGENTA);}
    else if (HAS_FLAGS(g_led_config.flags[i], 0x08)) {
    rgb_matrix_set_color(i, RGB_MAGENTA);}
    break;
   default:
    break;
   }
  }
 return false;
 }
#endif

実際にレイヤーインジケーターとして活用してみて

RGB Matrixの機能の内なる機能を呼び起こし、レイヤーインジケーターとして活用してみると、レイヤーごとに発光のパターンと色を変化させることができ、まさに光の魔術師としてLEDを操っているかのような錯覚に陥って満足度は非常に高いものである。これぞ正しく、不便を克服して得られる快楽そのものであり何物にも代えがたい心地の良いものである。ただ、Neo Ergoの場合は左下の3つのLEDの距離が近いために色が混ざってしまいがちというのが残念な点である。この点については、今回の修行で覚えた呪文を別のキーボードで活用することで補うこととする。下の写真はメインレイヤーから数えてひとつ上のレイヤーなので、上から2つはBlueで一番下はMagentaとなるが、真ん中はBlueとMagentaが混ざってPurpleになった決定的瞬間を収めたものである。

光の魔術師仕様のRGB Matrixは単にネズミ王国の電装行進プログラムのパターンが多いというだけでなく、LEDを自由自在に操るための数多の能力を秘めている。Vial友の会の光の魔術師の絶対王になるためには、こららすべての能力を開放する修羅の国での修行が待ち受けている。
自作キーボードは敷居が高いと思われている方にとって、一日で一番手に触れているものはキーボードということで、不便さを克服することにより得られる快楽の世界への入門のための勇気づけとなれば幸いです。
最後に猫山王のNeo Ergoのsource codeを下記に貼り付けておく。このsource codeが世界中に拡散して、Vial友の会の会員がネズミ算式に爆増するのを願うばかりである。

Source code

Please note that using attached source code is requiring to take full responsibility for your own action. Establishing QMK Build Environment beforehand is also required to compile this source code. Unsuccessful flash results in a bricked PCB and your fantastic keyboard life with Neo Ergo ends up at this moment.

Refer to my github for the latest source code of Vial port.

VERY IMPORTANANT
My environment is as followed;
- Wired Non-flex cut Hotswap PCB
- Windows
- QMK Tool Box to flash firmware

I am not responsible for any loss, any damage, any disadvantage or bricked PCB caused by using the information and source code on my page. Please consider the risks and "TAKE FULL RESPONSIBILITY FOR YOUR OWN ACTION".

いいなと思ったら応援しよう!