smalruby3-gui icon indicating copy to clipboard operation
smalruby3-gui copied to clipboard

Smalrubot S1用ファームウェア転送機能の実装

Open takaokouji opened this issue 5 months ago • 1 comments

Smalrubot S1用ファームウェア転送機能の実装

概要

Smalrubot S1はArduino互換マイコンボードで、Optibootブートローダーがプリインストールされています。現在、Smalrubot S1拡張の接続時に、シリアルポートは開いているが適切な応答がない場合、接続に失敗します。この問題を解決するため、ファームウェア転送機能を実装し、接続失敗時にファームウェアを自動転送できるようにします。

参考実装

既存のmicro:bit用ファームウェア転送機能(src/lib/microbit-update.js)を参考に実装します。

技術調査結果

Optibootプロトコル

  • プロトコル: STK500v1プロトコルを使用
  • 転送方式: シリアル通信経由でのファームウェア転送
  • ページサイズ: 最大128バイトずつ転送
  • 通信フォーマット: <Command_Code> <Data (if any)> <CRC_EOP>

主要コマンド

  • STK_GET_SYNC (0x30) - 同期確立
  • STK_ENTER_PROGMODE (0x50) - プログラミングモード開始
  • STK_LOAD_ADDRESS (0x55) - アドレス設定
  • STK_PROG_PAGE (0x64) - ページプログラム

JavaScriptライブラリ

以下のライブラリが利用可能です:

  • jacobrosenthal/js-stk500v1 - JavaScript STK500v1実装
  • arduino/js-stk500v1 - Arduino公式フォーク
  • WebSerial API対応

実装計画

1. scratch-vm拡張への転送機能追加

ファイル: gui/scratch-vm/src/extensions/scratch3_smalrubot_s1/index.js

  • STK500v1プロトコルの実装
  • WebSerial API経由でのファームウェア転送機能
  • uploadFirmware(hexData) メソッドの追加

2. GUI接続モーダルの拡張

ファイル: gui/smalruby3-gui/src/components/connection-modal/connection-modal.jsx

接続失敗時のフローを以下に変更:

  1. シリアルポート接続成功
  2. Smalrubot S1との通信確認失敗
  3. ファームウェア転送確認ダイアログ表示
  4. ユーザーが「転送する」を選択
  5. ファームウェア転送実行
  6. 転送完了後、再接続試行

3. エラーステップコンポーネントの拡張

ファイル: gui/smalruby3-gui/src/components/connection-modal/error-step.jsx

  • ファームウェア転送ボタンの追加
  • 転送進捗表示の実装

4. ファームウェアファイルの管理

一時ファイル: /Users/kouji/work/smalruby/smalruby3-develop/tmp/sr_studu.ino.hex

  • HEXファイルの読み込み機能
  • ファームウェアデータの前処理

実装タスク

Phase 1: STK500v1プロトコル実装

  • [ ] js-stk500v1ライブラリの調査・統合
  • [ ] WebSerial API経由でのSTK500通信実装
  • [ ] HEXファイル解析・転送ロジック実装

Phase 2: scratch-vm拡張

  • [ ] Scratch3SmalrubotS1BlocksuploadFirmwareメソッド追加
  • [ ] 転送進捗イベントの実装
  • [ ] エラーハンドリングの実装

Phase 3: GUI実装

  • [ ] 接続モーダルに転送フェーズ追加
  • [ ] ファームウェア転送確認ダイアログ
  • [ ] 転送進捗表示UI
  • [ ] エラーステップの拡張

Phase 4: 統合テスト

  • [ ] 転送機能の動作確認
  • [ ] エラーケースのテスト
  • [ ] ユーザビリティテスト

技術的考慮事項

セキュリティ

  • ファームウェアファイルの検証
  • 転送前のユーザー確認必須

パフォーマンス

  • 転送進捗の適切な表示
  • タイムアウト処理の実装

互換性

  • 既存のSmalrubot S1との互換性維持
  • WebSerial API対応ブラウザでの動作確保

関連ファイル

  • gui/scratch-vm/src/extensions/scratch3_smalrubot_s1/index.js
  • gui/smalruby3-gui/src/components/connection-modal/connection-modal.jsx
  • gui/smalruby3-gui/src/components/connection-modal/error-step.jsx
  • gui/smalruby3-gui/src/lib/microbit-update.js (参考実装)

受け入れ基準

  • [ ] 接続失敗時にファームウェア転送確認ダイアログが表示される
  • [ ] ファームウェア転送が正常に完了する
  • [ ] 転送後にSmalrubot S1との接続が成功する
  • [ ] 転送中の進捗が適切に表示される
  • [ ] エラー発生時に適切なメッセージが表示される

🤖 Generated with Claude Code

takaokouji avatar Sep 13 '25 11:09 takaokouji