オープンプロトコル
オープンプロトコルの概要
SuperKVM USB KVM オープンプロトコル 製品の USB KVM 向けオープンプロトコルは二部構成です 第一部はキーボードとマウス向けの汎用プロトコルで, 第三者開発者が再利用しやすいよう CH9329 のフレーム形式に準拠しています, 既存のオープンソース CH9329 制御コードを流用・改造しやすくしています 第二部は KVM 拡張プロトコルで, キーボード・マウス以外の機能(OTA, U ディスク切替, デバイス情報取得, 各種設定など)を扱います UART ボーレート SuperKVM の USB KVM ホスト側は USB 仮想 CDC シリアル のため, 9600~6M の任意ボーレートに対応します, 2M または環境が許す最高速を推奨します CH9329 フレーム フィールド定義 オフセット フィールド 長さ 説明 0 HEAD1 1 固定 0x57 1 HEAD2 1 固定 0xAB 2 ADDR 1 デバイスアドレス, 既定は 0x00 3 CMD 1 コマンド(詳細は公式 PDF) 4 LEN 1 続く DATA のバイト数 5 DATA LEN ペイロード意味は詳細 PDF に従う 5+LEN SUM 1 チェックサム: HEAD1 から DATA 末尾まで バイトごとの加算 , 結果を & 0xFF 現在実装しているのは次の 3 種類のみです: キーボード(CMD= 0x02 ) 絶対座標マウス(CMD= 0x04 ) 相対マウス(CMD= 0x05 ) MCU は上記 3 コマンドを処理しますが 応答フレームは返しません (UART 効率のため), 応答が必要な場合はサポートへご相談ください 詳細 PDF: CH9329 プロトコル SuperKVM 拡張フレーム 整合性のため拡張でも CH9329 風ヘッダを使いますが, 後続フィールドは独自定義です フィールド定義 バイト列の並び( HEAD は 57 AB , つまりビッグエンディアン表記で 0x57AB ; 以降は主に リトルエンディアン ): オフセット フィールド 長さ バイト順 説明 0 head 2 リテラル 0x57 , 0xAB uint16 として LE メモリでは 0xAB57 に見えるが論理的には拡張フレーム(§3.3) 2 channel 1 — CH9329 の ADDR に相当 3 sn 4 LE シーケンス番号 7 total len 4 LE TLV 長 : type(2)+len(4)+ペイロード , つまり 6 + ペイロードバイト数 ( create protocol packet ) 11 type 2 LE サブタイプ 13 len 4 LE ペイロード長( total len = 6 + len ) 17 payload len — データ 17+len CRC 4 LE CRC アルゴリズム を参照 3 バイト目が channel ID : 0 は CH9329 互換, それ以外は拡張スタックです CRC アルゴリズム JavaScript 風疑似コード C 実装 channel ( CH ID ) 値(hex) マクロ 意味 主な用途 00 CH ID CH9329 CH9329 レーン キーボード・マウス互換 01 CH ID DEVICE デバイス情報・制御 バージョン取得, U ディスク切替など 02 CH ID OTA OTA ブートローダとアプリ更新 03 CH ID EXT PERIPHERAL 周辺拡張 外部モジュールのハード制御 04 CH ID SHELL Shell 透過 Shell を公開する機器での双方向転送 05 CH ID LOG ログ Web UI への KVM ログ送出 チャネル別サブプロトコル 追記予定, 急ぎの場合はサポートへ問い合わせください
Canonical: https://wiki.superkvm.com/ja-JP/open/protocol · Marketing: https://www.superkvm.com · GitHub: https://github.com/superkvm