Skip to content

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

@takaokouji

Description

@takaokouji

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status

    Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions