BLE MicroProをVial対応アップデートした（らハマった点）

## 前提
- BLE MicroProで [Vial](https://get.vial.today/)（Remap的なもの）とか、[現行Remap](https://remap-keys.app/)を使えるようにしたい
- BLE MicroProのオリジナルのファームウェアでいいけど、キー配置とマップは弄りたい程度のライトユース

## 概要
Remapで非登録キーボードをつかうと、キー配列のjsonファイルを毎回読み込ませる必要があり、面倒ですよね。Vialだとキー配置をキーボード内に持つので、その必要がないとのこと。
また、[Remapの旧バージョン](https://qmk018.remap-keys.app/)は[いつ公開やめるかわからない](https://qmk018.remap-keys.app/docs/support-qmk-022)と書いてあるのでリスキーだなと思っていたところ、
- [Vial](https://get.vial.today/)対応
- [現行Remap](https://remap-keys.app/)対応

の新ファームウェアが出ていたのでバージョンアップしてみました。用意する設定ファイルが今までと違うことに気づいて、準備する時にいくらか苦労したので、手順を記録します。[公式](https://sekigon-gonnoc.github.io/BLE-Micro-Pro/#/about_config_files?id=ble-miro-pro%e3%82%92%e6%9b%b4%e6%96%b0%e3%81%97%e3%81%a6%e8%a8%ad%e5%ae%9a%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%82%92%e6%9b%b8%e3%81%8d%e8%be%bc%e3%82%80%e6%89%8b%e9%a0%86)にしっかりと書いてあるんですが、勘違いがあって、ハマりました。。。

ざっくり言うと、新しい仕組みでは、[Web configurator](https://sekigon-gonnoc.github.io/BLE-Micro-Pro-WebConfigurator/#/config) に、新キャラの「config.bin」をアップロードして設定します。

先駆者を探したらこちらがあったので参考にさせていただきました。

https://qiita.com/unbosoms/items/d408894af1fb3d7295cf

## 準備するもの
- 母艦（M1 MacBookAir＠Sonoma14.3だと、BLE MicroProをマスストレージとしてマウントできないので注意＞[BLE Micro Pro のメモ](https://zenn.dev/komatsuh/scraps/d9243455d36457)）
- BLE MicroPro搭載のキーボード

なお、今回バージョンアップさせるのは、アルプス緑軸を使ったこういう自作キーボードです。将来的にバッテリー駆動＆無線接続にしようと思ってBLE MicroProを搭載しています。![1000002935.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691858/a3130af1-7bc5-7b03-90a3-3d87e61ac230.jpeg)

## info.jsonを準備する

「info.json」を新作します。
- 「diode_direction」は数字じゃなくて「COL2ROW」等の形式で記載する
- 「features」は必要かわからないけど、それっぽく適当に記載


ハマったポイントは以下の二つ。
- layoutの書式：
-> [KLE](http://www.keyboard-layout-editor.com/)でぽちぽち作って、RAW DATAタブのものを一旦コピー。つぎに、それをQMK公式の[Convert KLE raw to QMK info.json](https://qmk.fm/converter/)にペーストして「convert」。出来上がった「"layauts"」各項目にlabelの内容に従った「"matrix":[x, x]」を追加する。
（KLEを開いて「Raw Data」タブの一番下にある、「Upload JSON」で以前作ったMatrixを読み込みできる）
- matrix_pinsの書式：
-> 番号(5とか13とか）ではなく名称（D1とかB5とか）で記載する。これをやらないと次の工程で怒られてconfig.binが生成できない
![BLEMicroProポート対応表rev.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691858/46aab83b-3e96-a3de-0146-4a9810c93148.png)


記載したものが以下。「info.json」として保管する。
matrixをきれいに並べてみたけど、KLEで出てきたそのまんまの順番でもいける気がします（未確認）

```
{
    "manufacturer": "kazu",
    "keyboard_name": "alps-small",
    "maintainer": "kazu",
    "diode_direction": "COL2ROW",
    "encoder": {
        "enabled": false
    },
    "features": {
        "bootmagic": true,
        "command": false,
        "console": false,
        "encoder": false,
        "encoder_map": false,
        "extrakey": true,
        "mousekey": true,
        "nkro": true,
        "rgblight": false,
        "via": true
    },
    "matrix_pins": {
        "cols": ["B4", "B5", "B6", "B2", "B3", "B1", "F7", "F6", "F5", "F4"],
        "rows": ["D1", "D0", "D4", "C6", "D7", "E6"]
    },
    "url": "",
    "usb": {
        "pid": "0x0005",
        "vid": "0x0005"
    },
    "layouts": {
        "LAYOUT": {
            "layout": [
                {"matrix":[0, 0], "label":"0,0", "x":0, "y":0}, 
                {"matrix":[0, 1], "label":"0,1", "x":1, "y":0}, 
                {"matrix":[0, 2], "label":"0,2", "x":2, "y":0}, 
                {"matrix":[0, 3], "label":"0,3", "x":3, "y":0}, 
                {"matrix":[0, 4], "label":"0,4", "x":4, "y":0}, 
                {"matrix":[0, 5], "label":"0,5", "x":5, "y":0}, 
                {"matrix":[0, 6], "label":"0,6", "x":6, "y":0}, 
                {"matrix":[0, 7], "label":"0,7", "x":7, "y":0}, 
                {"matrix":[0, 8], "label":"0,8", "x":8, "y":0}, 
                {"matrix":[0, 9], "label":"0,9", "x":9, "y":0}, 
                {"matrix":[1, 0], "label":"1,0", "x":0, "y":1, "w":1.5}, 
                {"matrix":[1, 1], "label":"1,1", "x":1.5, "y":1},
                {"matrix":[1, 2], "label":"1,2", "x":2.5, "y":1}, 
                {"matrix":[1, 3], "label":"1,3", "x":3.5, "y":1}, 
                {"matrix":[1, 4], "label":"1,4", "x":4.5, "y":1}, 
                {"matrix":[1, 5], "label":"1,5", "x":5.5, "y":1}, 
                {"matrix":[1, 6], "label":"1,6", "x":6.5, "y":1}, 
                {"matrix":[1, 7], "label":"1,7", "x":7.5, "y":1}, 
                {"matrix":[1, 8], "label":"1,8", "x":8.5, "y":1}, 
                {"matrix":[1, 9], "label":"1,9", "x":9.5, "y":1}, 
                {"matrix":[2, 0], "label":"2,0", "x":0, "y":2, "w":1.75}, 
                {"matrix":[2, 1], "label":"2,1", "x":1.75, "y":2}, 
                {"matrix":[2, 2], "label":"2,2", "x":2.75, "y":2}, 
                {"matrix":[2, 3], "label":"2,3", "x":3.75, "y":2}, 
                {"matrix":[2, 4], "label":"2,4", "x":4.75, "y":2}, 
                {"matrix":[2, 5], "label":"2,5", "x":5.75, "y":2}, 
                {"matrix":[2, 6], "label":"2,6", "x":6.75, "y":2}, 
                {"matrix":[2, 7], "label":"2,7", "x":7.75, "y":2}, 
                {"matrix":[2, 8], "label":"2,8", "x":8.75, "y":2},
                {"matrix":[2, 9], "label":"2,9", "x":9.75, "y":2}, 
                {"matrix":[3, 0], "label":"3,0", "x":0, "y":3, "w":2.25}, 
                {"matrix":[3, 1], "label":"3,1", "x":2.25, "y":3}, 
                {"matrix":[3, 2], "label":"3,2", "x":3.25, "y":3}, 
                {"matrix":[3, 3], "label":"3,3", "x":4.25, "y":3}, 
                {"matrix":[3, 4], "label":"3,4", "x":5.25, "y":3}, 
                {"matrix":[3, 5], "label":"3,5", "x":6.25, "y":3}, 
                {"matrix":[3, 6], "label":"3,6", "x":7.25, "y":3}, 
                {"matrix":[3, 7], "label":"3,7", "x":8.25, "y":3}, 
                {"matrix":[3, 8], "label":"3,8", "x":9.25, "y":3}, 
                {"matrix":[3, 9], "label":"3,9", "x":10.25, "y":3}, 
                {"matrix":[4, 1], "label":"4,1", "x":2.25, "y":4, "w":1.5}, 
                {"matrix":[4, 2], "label":"4,2", "x":3.75, "y":4, "w":1.5}, 
                {"matrix":[4, 3], "label":"4,3", "x":12.5, "y":1}, 
                {"matrix":[4, 4], "label":"4,4", "x":5.25, "y":4, "w":4}, 
                {"matrix":[4, 5], "label":"4,5", "x":11.5, "y":1},                 
                {"matrix":[4, 6], "label":"4,6", "x":11.75, "y":2}, 
                {"matrix":[4, 7], "label":"4,7", "x":12.75, "y":2, "w":2.25}, 
                {"matrix":[4, 8], "label":"4,8", "x":9.25, "y":4, "w":1.5},
                {"matrix":[4, 9], "label":"4,9", "x":10.75, "y":4, "w":1.5},
                {"matrix":[5, 1], "label":"5,1", "x":13.5, "y":1, "w":1.5}, 
                {"matrix":[5, 2], "label":"5,2", "x":13, "y":0, "w":2}, 
                {"matrix":[5, 3], "label":"5,3", "x":12, "y":0}, 
                {"matrix":[5, 4], "label":"5,4", "x":11, "y":0}, 
                {"matrix":[5, 5], "label":"5,5", "x":10, "y":0}, 
                {"matrix":[5, 6], "label":"5,6", "x":10.5, "y":1}, 
                {"matrix":[5, 7], "label":"5,7", "x":10.75, "y":2}, 
                {"matrix":[5, 8], "label":"5,8", "x":11.25, "y":3}, 
                {"matrix":[5, 9], "label":"5,9", "x":12.25, "y":3, "w":2.75} 
            ]
        }
    }
}
```
## config.binを生成

https://sekigon-gonnoc.github.io/bmp-vial-config-generator/

公式のこちらのサイトへinfo.jsonをコピペして、Generateボタンを押し下げます。すると、右側のvial.jsonとconfig.json欄が生成されます。config.json欄の下にある「Download config.bin」を押して、目的のものをダウンロードします。

## 設定書き込み（Web configuratorを使用する）

https://sekigon-gonnoc.github.io/BLE-Micro-Pro-WebConfigurator/

ブートローダ、アプリケーションの順にアップデート。
M1 MacではマスストレージをマウントできないのでDisable Mass Strage Classは潔くチェックした方が精神安定上良いと思います。。。

![bootloader.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691858/7c3b6814-c0e6-aca9-4426-92743cc87be4.png)


![application.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691858/650f7e67-6b32-6e78-fa80-8d1ca882e435.png)


最後に「キーボードごとの設定を書き込む」から、プルダウンで「Upload Your Own」を選んで「Update」を押し、先ほど作成した「config.bin」を選択します。

## キーマップの復元

私はRemapにアクセスして設定しました。Remapで設定すると、Vialを開いても同じキーマップが再現されていました。
![vial.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691858/b52d049c-25d4-23ed-e93d-678eaec10cee.png)