要約
- OpenBlink実装を整理して拡張性や移植性を高めたいと考えているので思いつきを書き留めておく
- 理想の姿としてはmruby/cのように、#ifdefによる条件コンパイルで機能を切り替えられたり、HALを変える事で各デバイスに対応できるような実装を目指したい
- サンプルコードは分離させる
各リポジトリ
概要
- openblink: NordicSoC向けのOpenBlink実装
- openblink-demo-m5: M5(ESP32)向けのデモ実装
- openblink-demo-mdbt50q-db-40: MDBT50Q-DB-40基板向けのデモ実装
- openblink-webide: ウェブブラウザ上で動作する開発環境のコンセプト実装
各リポジトリの進め方で思っているところ
- openblink: 機能追加を行う前に実装を整理したい
- openblink-demo-m5: 超積極的に機能追加を進めて、その成果をOpenBlink開発にフィードバックしつつ、既存のM5プロジェクトに組み込みやすいような形でM5向けPlatformIOライブラリ(Arduino, ESP-IDF)を作りたい
- openblink-demo-mdbt50q-db-40: 必要に応じて機能追加も行う
- openblink-webide: 実装を整理してから、mrbcコンパイラメッセージの表示やエラーハンドリング、Slot選択対応、nRF/M5でサンプルコードの切り替え、コード保存、WebSerial対応などを実装しつつUIを作りたい
なぜやるのか?
書き込み対象のマイコンが変わったとしても開発ツールや転送ツールの互換性を保てるようにしたい。
敢えて基本的な機能に絞って実装している状態の今のうちに(機能追加を行う前に)実装を整理しておきたい。
OpenBlinkの機能拡張アイデア(案)
- バイトコード転送
- LZSS圧縮
- 電子署名
- 接続時の認証機能を実装しやすい実装とする
- コンソール接続
- エラーハンドリング
- テレメトリだけでなくコマンドを送信できるようにする(双方向にする)
- ステータス読み出し
- BluetoothLEのNegotiatedMTU(MTU Exchange)
- OpenBlinkやmruby/cのバージョン情報
- mruby/cのコンパイル情報(サポート機能など)
- mruby/c VMの動作状況
- SoC名 (nRF52840, M5など)
- デバイスのニックネーム(開発・転送ツールに表示される)
- 最大転送可能バイトコード長
- Rubyでサポートされているクラス・メソッド一覧
- 通信
- BluetoothLE
- LTE, NTN
- Wi-Fi
- USB-CDC(有線シリアル接続)
- UART, I2C, SPI, CAN, LIN, DSI, PSI, SENTなど各種有線通信規格
- バイトコード保存/読出
- NVS
- TF Card
- ExternalFlash(SPI NAND等)
- reLoad要求制御
- 動作するSoC
- Nordic nRF52
- Nordic nRF54
- Nordic nRF91
- M5StampS3 (ESP32)
- 可能な限りすべてのM5デバイス
OpenBlinkの機能拡張で迷っているところ
アプリケーションによって異なるコードをOpenBlinkに実装するのか、サンプル実装の提供までとするのか?
- セキュリティ関係
- 接続時の認証機能を実装(作品の目的用途や通信手段に依って求められる機能が異なるため)
- バイトコード転送時の暗号化
- リプレイ攻撃への対策
- ダウングレード攻撃への対策
- 自動復元
- 動作不良となるバイトコードを誤って書き込んでしまった場合に自動的に初期化する(動作不良の原因の確実性の高い切り分けが難しい、製品開発者の意図しない初期化が発生してしまう)
サンプル実装でやりたいこと
- 「mruby, mruby/c Common I/O API Guidelines and Community-developed Libraries」への準拠