obniz-rust 0.1.0

A Rust client library for Obniz IoT platform
Documentation
# obniz WebSocket API 実装状況

## 概要
本ドキュメントは、すべてのobniz WebSocket APIとobniz-rustライブラリにおける現在の実装状況の包括的なリストを提供します。この分析は[https://docs.obniz.com/ja/reference/websocket/](https://docs.obniz.com/ja/reference/websocket/)の公式obnizドキュメントに基づいています。

## 実装状況の凡例
- **完全実装** - すべての機能が実装済み
- ⚠️ **部分実装** - 一部の機能が未実装
-**未実装** - モジュールが利用不可
- 🔄 **計画中** - ロードマップに記載済み

## コアモジュール

### 1. WebSocket (ws) モジュール
**状況:** ✅ **完全実装**

| API機能 | 状況 | 説明 | 実装詳細 |
|---------|------|------|----------|
| `ws.ready` || デバイス準備完了通知 | 接続管理で処理 |
| `ws.obniz` || デバイス情報レスポンス | デバイスメタデータ取得 |
| `ws.redirect` || WebSocketリダイレクト処理 | 接続リダイレクト対応 |
| `reset_obniz_on_ws_disconnection` || リセット動作制御 | 切断時動作設定可能 |

### 2. IOモジュール
**状況:** ✅ **完全実装**

| API機能 | 状況 | 説明 | 実装詳細 |
|---------|------|------|----------|
| `ioX` (get) || ピン状態読み取り | `io.get_pin(pin)` |
| `ioX` (set boolean) || ピン状態設定 | `io.set_pin(pin, value)` |
| `ioX.direction` || ピン方向設定 | `Direction::Input/Output` |
| `ioX.value` || ピン値設定 | ピン設定に含まれる |
| `ioX.output_type` || 出力駆動タイプ設定 | `OutputType::PushPull5v/PushPull3v/OpenDrain` |
| `ioX.pull_type` || プル抵抗設定 | `PullType::PullUp5v/PullUp3v/PullDown/Float` |
| `ioX.stream` || 変化コールバック有効化 | リアルタイムピン監視 |
| ピン初期化解除 || ピン設定リセット | `io.deinit_pin(pin)` |

**対応機能:**
- 全12ピン (io0-io11)
- デジタル入出力
- コールバック付きストリームモード
- 包括的ピン設定
- ピン状態検証

### 3. Displayモジュール
**状況:** ✅ **完全実装**

| API機能 | 状況 | 説明 | 実装詳細 |
|---------|------|------|----------|
| `display.text` || テキスト表示 | `display.text(text)` |
| `display.clear` || 画面クリア | `display.clear()` |
| `display.qr` || QRコード表示 | `display.qr(text, correction_level)` |
| `display.raw` || 生ピクセルデータ | 1/4/16ビットカラー対応 `display.raw(config)` |
| `display.pin_assign` || ピンアサイン | モジュールピン設定 |
| 描画プリミティブ || ピクセル、線、矩形、円 | 完全なグラフィックAPI |
| 輝度制御 || ディスプレイ輝度 | `display.brightness(level)` |

**対応機能:**
- 位置指定テキストレンダリング
- QRコード生成 (L/M/Q/H誤り訂正レベル)
- 生画像表示 (複数カラー深度)
- 基本描画操作
- ディスプレイ設定

### 4. AD(アナログ入力)モジュール
**状況:** ✅ **完全実装**

| API機能 | 状況 | 説明 | 実装詳細 |
|---------|------|------|----------|
| `adX` (get) || 電圧読み取り | `ad.get_voltage(channel)` |
| `adX.stream` || 電圧監視有効化 | リアルタイム電圧コールバック |
| AD初期化解除 || ADチャンネル無効化 | `ad.deinit_channel(channel)` |
| マルチチャンネル読み取り || 複数チャンネル読み取り | `ad.get_voltages(channels)` |

**対応機能:**
- 全12チャンネル (ad0-ad11)
- 電圧範囲: 0-5V
- コールバック付きストリームモード
- ユーティリティ関数 (電圧-パーセント変換、安全性チェック)

### 5. PWMモジュール
**状況:** ✅ **完全実装**

| API機能 | 状況 | 説明 | 実装詳細 |
|---------|------|------|----------|
| `pwmX.io` || PWMピン初期化 | `pwm.configure_channel(channel, config)` |
| `pwmX.freq` || 周波数設定 | 周波数範囲: 1Hz-80MHz |
| `pwmX.pulse` || パルス幅設定 | パルス幅(ミリ秒) |
| `pwmX.modulate` || AM変調 | `pwm.modulate(config)` |
| PWM初期化解除 || PWM無効化 | `pwm.deinit_channel(channel)` |
| サーボ制御 || サーボモーター制御 | `pwm.servo(channel, pin, angle)` |
| 矩形波 || 矩形波生成 | `pwm.square_wave(channel, pin, freq)` |

**対応機能:**
- 6PWMチャンネル (pwm0-pwm5)
- 全周波数範囲
- デューティサイクル制御
- サーボモーター対応
- 振幅変調

### 6. UARTモジュール
**状況:** ✅ **完全実装**

| API機能 | 状況 | 説明 | 実装詳細 |
|---------|------|------|----------|
| UART初期化 || UART初期化 | 完全設定対応 |
| `uartX.data` || データ送信 | `uart.send_data(channel, data)` |
| データ受信 || データ受信 | コールバックベース受信 |
| 文字列送受信 || 文字列操作 | `uart.send_string(channel, text)` |
| フロー制御 || RTS/CTS対応 | ハードウェアフロー制御 |
| UART初期化解除 || UART無効化 | `uart.deinit_channel(channel)` |

**対応設定:**
- ボーレート: 1-5,000,000
- データビット: 5-8
- ストップビット: 1, 1.5, 2
- パリティ: off, odd, even
- フロー制御: off, rts, cts, rts-cts

### 7. Switchモジュール
**状況:** ✅ **完全実装**

| API機能 | 状況 | 説明 | 実装詳細 |
|---------|------|------|----------|
| `switch` (get) || スイッチ状態取得 | `switch.get_state()` |
| スイッチイベント || 状態変化通知 | push/left/right/releaseコールバック |
| イベントコールバック || アクション固有コールバック | `switch.on_push()`, `switch.on_left()` など |
| ブロッキング待機 || イベント待機 | `switch.wait_for_press(timeout)` |

**対応状態:**
- none, push, left, right
- リアルタイムイベント通知
- ブロッキング操作のタイムアウト対応

### 8. Systemモジュール
**状況:** ⚠️ **部分実装**

| API機能 | 状況 | 説明 | 実装詳細 |
|---------|------|------|----------|
| `system.wait` || 実行一時停止 | スリープ機能 |
| `system.reset` || デバイスリセット | `system.reset()` |
| `system.reboot` || デバイス再起動 | デバイス再スタート |
| `system.self_check` || 回路チェック | ハードウェア検証 |
| `system.keep_working_at_offline` || オフライン動作 | 接続管理 |
| `system.ping` || データ付きping | キープアライブ機構 |
| `system.sleep_seconds` || 秒単位スリープ | **未実装 - 実装が必要** |
| `system.sleep_minute` || 分単位スリープ | **未実装 - 実装が必要** |
| `system.sleep_io_trigger` || ウェイクアップトリガー | **未実装 - 実装が必要** |

## 未実装モジュール

### 9. SPIモジュール
**状況:** ❌ **未実装**

| API機能 | 状況 | 説明 | 必要な実装 |
|---------|------|------|----------|
| `spiX.mode` || マスター/スレーブモード | SPI初期化 |
| `spiX.clk` || クロックピン | ピン設定 |
| `spiX.mosi` || MOSIピン | マスター出力、スレーブ入力 |
| `spiX.miso` || MISOピン | マスター入力、スレーブ出力 |
| `spiX.clock` || クロック周波数 | 1-26MHz範囲 |
| `spiX.data` || データ送受信 | データ伝送 |
| `spiX.read` || レスポンス読み取り | データ受信 |
| SPI初期化解除 || SPI無効化 | モジュールクリーンアップ |

**優先度:** 🔴 **高** - 多くの周辺デバイスに必須

### 10. I2Cモジュール
**状況:** ❌ **未実装**

| API機能 | 状況 | 説明 | 必要な実装 |
|---------|------|------|----------|
| `i2cX.mode` || マスター/スレーブモード | I2C初期化 |
| `i2cX.sda` || データピン | SDAライン設定 |
| `i2cX.scl` || クロックピン | SCLライン設定 |
| `i2cX.clock` || クロック周波数 | 1-1MHz範囲 |
| `i2cX.address` || デバイスアドレス | 7ビットアドレッシング |
| `i2cX.data` || データ書き込み | データ伝送 |
| `i2cX.read` || データ読み取り | データ受信 |
| I2C初期化解除 || I2C無効化 | モジュールクリーンアップ |

**優先度:** 🔴 **高** - センサー通信に重要

### 11. ロジックアナライザモジュール
**状況:** ❌ **未実装**

| API機能 | 状況 | 説明 | 必要な実装 |
|---------|------|------|----------|
| ロジックアナライザ初期化 || アナライザ初期化 | ピン設定 |
| トリガー設定 || トリガー条件設定 | エッジ/レベルトリガー |
| サンプリングレート || サンプリング設定 | 周波数設定 |
| データキャプチャ || キャプチャ開始/停止 | 測定制御 |
| データ取得 || キャプチャデータ取得 | 結果処理 |

**優先度:** 🟡 **中** - デバッグと解析に有用

### 12. BLE(Bluetooth Low Energy)モジュール
**状況:** ❌ **未実装**

| API機能 | 状況 | 説明 | 必要な実装 |
|---------|------|------|----------|
| BLE初期化 || BLE有効化 | プロトコル設定 |
| アドバタイズ || サービス広告 | ペリフェラルモード |
| スキャン || デバイススキャン | セントラルモード |
| 接続管理 || 接続/切断 | リンク処理 |
| GATT操作 || サービス/キャラクタリスティックアクセス | データ交換 |

**優先度:** 🟡 **中** - IoTアプリケーションに重要

### 13. WiFiモジュール
**状況:** ❌ **未実装**

| API機能 | 状況 | 説明 | 必要な実装 |
|---------|------|------|----------|
| WiFiスキャン || ネットワークスキャン | 利用可能ネットワーク |
| WiFi接続 || ネットワーク接続 | 認証情報管理 |
| アクセスポイントモード || ホットスポット作成 | AP設定 |
| ネットワーク状態 || 接続監視 | 状態レポート |

**優先度:** 🟡 **中** - ネットワーク接続機能

### 14. TCPモジュール
**状況:** ❌ **未実装**

| API機能 | 状況 | 説明 | 必要な実装 |
|---------|------|------|----------|
| TCPクライアント || 外向き接続 | ソケット管理 |
| TCPサーバー || 内向き接続 | サーバー設定 |
| データ送信 || データ送受信 | ネットワークI/O |
| 接続管理 || 接続処理 | ソケットライフサイクル |

**優先度:** 🟡 **中** - ネットワーク通信

### 15. 測定モジュール
**状況:** ❌ **未実装**

| API機能 | 状況 | 説明 | 必要な実装 |
|---------|------|------|----------|
| 周波数測定 || 信号周波数 | 高度な測定 |
| タイミング解析 || 信号タイミング | 精密測定 |
| 信号解析 || 波形解析 | 数学的処理 |

**優先度:** 🟢 **低** - 専門的アプリケーション

### 16. IOアニメーションモジュール
**状況:** ❌ **未実装**

| API機能 | 状況 | 説明 | 必要な実装 |
|---------|------|------|----------|
| アニメーションシーケンス || 複雑なIOパターン | ステートマシン |
| タイミング制御 || 同期操作 | 精密タイミング |
| 状態管理 || アニメーション状態 | シーケンス制御 |

**優先度:** 🟢 **低** - 高度な自動化

## 実装統計

### 現在の状況まとめ
- **総APIモジュール数:** 16
- **完全実装:** 8 (50%)
- **部分実装:** 1 (6.25%)
- **未実装:** 7 (43.75%)

### カテゴリ別実装カバレッジ
- **コア機能 (IO, Display, AD):** ✅ 100%
- **通信 (UART):** ✅ 100%
- **信号生成 (PWM):** ✅ 100%
- **ユーザーインターフェース (Switch):** ✅ 100%
- **システム制御:** ⚠️ 90%
- **高度な通信 (SPI, I2C):** ❌ 0%
- **ワイヤレス (BLE, WiFi):** ❌ 0%
- **解析ツール (ロジックアナライザ):** ❌ 0%
- **ネットワーク (TCP):** ❌ 0%

## 開発ロードマップ

### フェーズ1: 重要な通信プロトコル
1. **I2Cモジュール** - センサーに必須
2. **SPIモジュール** - 多くの周辺機器に必要
3. **Systemモジュール完成** - スリープ機能

### フェーズ2: ワイヤレスとネットワーク
4. **WiFiモジュール** - ネットワーク接続
5. **BLEモジュール** - IoT通信
6. **TCPモジュール** - ネットワークプロトコル

### フェーズ3: 高度な機能
7. **ロジックアナライザ** - 開発ツール
8. **測定モジュール** - 精密ツール
9. **IOアニメーション** - 高度な自動化

## アーキテクチャ推奨事項

### 未実装モジュールについて
1. **既存パターンに従う** - マネージャーベースアーキテクチャを使用
2. **Async/await対応** - 一貫性を維持
3. **エラーハンドリング** - 包括的なエラータイプ
4. **モック対応** - テストを有効化
5. **型安全性** - 全体で強い型付け
6. **ドキュメント** - 包括的なAPIドキュメント

### コード品質基準
- 既存の命名規則に従う
- テストカバレッジを維持
- 包括的な例を含める
- すべての入力を検証
- 適切なリソースクリーンアップ

## 結論

obniz-rustライブラリは、すべての基本IO、ディスプレイ、アナログ入力、PWM、UART、スイッチ、システム機能が完全に実装されており、コアobniz機能の優れたカバレッジを提供しています。しかし、いくつかの重要な通信プロトコル(I2C、SPI)と高度な機能(BLE、WiFi、ロジックアナライザ)の実装が残されています。

既存のコードベースは高品質なアーキテクチャと実装パターンを示しており、未実装モジュールを追加する際にはこれらを維持すべきです。ほとんどのハードウェアインターフェースアプリケーションに必須であるため、I2CとSPIモジュールを優先的に実装することを推奨します。