はじめに
先日こちらの 「4K 4x4 HDMI マトリックススイッチ」をAmazonで購入しました。
- 4x4 のマトリクススイッチである
- 4K@60Hz対応
- 光デジタルオーディオ出力がついている
- 上記を満たし、レビューの評価が割と良く、価格も1万円を切っていた(セール期間)
- RS-232C端子がついているので何か面白いことができるのではという期待
というのが決め手でした。
HDMIマトリクススイッチとしては満足しています。難点はLEDの穴でしょうか。隣のLEDの光が漏れてくるので、斜めから覗くとLEDのどこが光っているのかわかりづらいという……。(箱バラして3Dプリンタでガードをつくろうかな)
なお、ちょっと期待していたRS-232Cの方は 通信ログ(デバッグメッセージ) は取得できたものの、 コマンド体系は不明 でした……。
せっかくなので、その調査の過程で調べた 他社製HDMIマトリクスのRS-232制御コマンド仕様 をこの記事でまとめます。
自分の環境
使用したターミナルソフト(macOS)
CoolTerm.app
- macOS用のシリアルターミナル
- 16進(バイナリ)での送信・表示が可能
- 「ラインモード送信」 ができるため、改行までの文字列をまとめて送るのに便利
- シンプルなGUIでポート設定やログ保存も簡単
接続仕様(自分の個体)
- 接続成功:
115200bps, 8bit, パリティなし, ストップ1bit, フロー制御なし
- UART経由で電源ON直後のデバッグログは大量に出力される
- CR/LFでコマンドが確定するわけではなく、1バイト送っただけで反応が返ってくる
- そのため、ライン単位で出力できるターミナルソフトじゃないとうまく扱えない
- 僕は上記の CoolTerm.app で Line Modeにし、
Enter Key Emulation
をNone
にして、改行キーでCR/LF等が送られないようにしています
反応のあったコマンド
-
#
を送るとDebug data: 23 77 20 0 0 0 0 0
などのログが返る- その時点の入力バッファを出力しているようにもみえるがよくわからない
-
#B
を送ると再起動する- しない時もある。
- 動作を見ていると、無効なデータを送り続けていると端末がリブートすることがあるのでそのせいかもしれない。
-
sw i1 2
sw i01
などを送ると** Input port is not enable !!!!
[ERROR] Path Setting Error 0x2
- などが返ってくる
-
sw i
- 以下が返ってくる
- 今の所「まともにコマンドが受け付けられたな」と感じるのはこれだけ
ucState=> 0
CDRLock=> 0
HTT=> 120
VTT=> 75
HWidth=> 50
TimingPixelClock=> 0
LinkRate=> 0
LaneCnt=> 4
AudioFreq=> 0
==========================================
ucState=> 0
CDRLock=> 0
HTT=> 120
VTT=> 75
HWidth=> 50
TimingPixelClock=> 0
LinkRate=> 0
LaneCnt=> 4
AudioFreq=> 0
==========================================
ucState=> 0
CDRLock=> 0
HTT=> 120
VTT=> 75
HWidth=> 50
TimingPixelClock=> 0
LinkRate=> 0
LaneCnt=> 4
AudioFreq=> 0
==========================================
ucMFTtiming=> 0
DPDECODE_TO_RX=> 3
DPDECODE_TO_RX=> 3
DPDECODE_TO_RX=> 3
DPRX_USED_DECODE=> 0
DPRX_USED_DECODE=> 0
DPRX_USED_DECODE=> 0
DPRXInfo_USED_DECODE=> 0
DPRXInfo_USED_DECODE=> 0
DPRXInfo_USED_DECODE=> 0
DPRXToHDMITXPathEvent=> 0
DPRXToHDMITXPathEvent=> 0
DPRXToHDMITXPathEvent=> 0
DPTXToRXPortMap=> 255
DPTXToRXPortMap=> 255
DPTXToRXPortMap=> 255
DPRXToHDMITXMap=> 255
DPRXToHDMITXMap=> 255
DPRXToHDMITXMap=> 255
DPRXToHDMITXMap=> 255
DPRXToHDMITXMap=> 255
DPRXToHDMITXMap=> 255
DPRXToHDMITXMap=> 255
DPRXToHDMITXMap=> 255
DPRXToHDMITXMap=> 255
DPRXToHDMITXMap=> 255
DPRXToHDMITXMap=> 255
DPRXToHDMITXMap=> 255
>>>>>DP Rx ID =0
DECODE =0
DECODEMux =>USE.0K_MUX
OutputMode = DPRX_DECODE_EVENT_NONE0
DECODEDPTXInform = 0
DECODEHDMITXInform = 0 .
DECODE =1
DECODEMux =>USE.0K_MUX
OutputMode = DPRX_DECODE_EVENT_NONE0
DECODEDPTXInform = 0
DECODEHDMITXInform = 0 .
DECODE =2
DECODEMux =>USE.0K_MUX
OutputMode = DPRX_DECODE_EVENT_NONE0
DECODEDPTXInform = 0
DECODEHDMITXInform = 0 .
>>>>>DP Rx ID =1
DECODE =0
DECODEMux =>USE.0K_MUX
OutputMode = DPRX_DECODE_EVENT_NONE0
DECODEDPTXInform = 0
DECODEHDMITXInform = 0 .
DECODE =1
DECODEMux =>USE.0K_MUX
OutputMode = DPRX_DECODE_EVENT_NONE0
DECODEDPTXInform = 0
DECODEHDMITXInform = 0 .
DECODE =2
DECODEMux =>USE.0K_MUX
OutputMode = DPRX_DECODE_EVENT_NONE0
DECODEDPTXInform = 0
DECODEHDMITXInform = 0 .
>>>>>DP Rx ID =2
DECODE =0
DECODEMux =>USE.0K_MUX
OutputMode = DPRX_DECODE_EVENT_NONE0
DECODEDPTXInform = 0
DECODEHDMITXInform = 0 .
DECODE =1
DECODEMux =>USE.0K_MUX
OutputMode = DPRX_DECODE_EVENT_NONE0
DECODEDPTXInform = 0
DECODEHDMITXInform = 0 .
DECODE =2
DECODEMux =>USE.0K_MUX
OutputMode = DPRX_DECODE_EVENT_NONE0
DECODEDPTXInform = 0
DECODEHDMITXInform = 0 .
Test 77
Debug data :23 32 20 0 0 0 0 0
調査したHDMIマトリクス製品とRS-232コマンド仕様
以下のものはネットで得られた情報をまとめただけなので、実物で試したわけではありません。
コマンド例などはあくまでアタリをつけるために引用したものなので間違っている可能性も高いです。実際に使う際はマニュアルを参照してください。
J-Tech Digital JTECH-8x8-HDMI (8×8 HDMI Matrix Switch)
- メーカー: J-Tech Digital
- 製品URL: J-Tech 8×8 HDMI Matrix
- マニュアル: RS232 Command Manual (manuals.plus)
- RS-232設定: 9600bps, 8N1, フロー制御なし
-
プロトコル: ASCII(
@
で始まり、末尾に#
) -
特徴:
-
@W
:入力→出力割当 -
@T
:PTP(入力1→出力1、…) -
@R
:状態取得 - コマンドの終端に必ず
#
を付ける
-
-
コマンド例:
- 入力1 → 出力2:
@W 01 02#
- 全出力をPTP接続:
@T 04 00 01 02 03#
- 状態取得:
@R#
- 入力1 → 出力2:
MuxLab 500440 (4×4 HDMI Matrix Switch)
- メーカー: MuxLab
- 製品URL: 公式製品ページ
- マニュアル: マニュアルPDF
- RS-232設定: 9600bps, 8bit, パリティなし, フロー制御なし
- プロトコル: バイナリ(13バイト固定長)
-
特徴:
- 先頭2バイトが
A5 5B
- 入出力の指定とチェックサムを含む
- 先頭2バイトが
-
コマンド例:
- 入力2 → 出力1:
A5 5B 02 03 02 00 01 00 00 00 00 00 F8
- 状態取得:
A5 5B 02 01 00 00 00 00 00 00 00 00 F0
- 入力2 → 出力1:
Lindy 38152 (4x4 HDMI Matrix Switch)
- メーカー: Lindy
- 製品URL: Lindy公式ページ
- マニュアル: コマンドリファレンスPDF
- RS-232設定: 9600bps, 8N1, フロー制御なし
-
プロトコル: ASCII(英語コマンド+末尾に
!
) -
特徴:
- 英語ベースの自然言語に近いコマンド
- 末尾に
!
をつけて送信
-
コマンド例:
- 入力1 → 出力2:
s in 1 av out 2!
- 全出力を入力1に:
s in 1 av out 0!
- 出力状態取得:
r av out 0!
- 入力1 → 出力2:
旭東泰 eKL 414H (4×4 HDMI Matrix)
- メーカー: eKL(旭東泰)
- 製品URL: 商品例
- マニュアル: 中国語技術資料
- RS-232設定: 9600bps, 8N1, フロー制御なし
- プロトコル: ASCII(コマンド構造が独特)
-
特徴:
-
MT
から始まり、NT
で終わる - 例:
MT00SW0203NT
→ 入力2 → 出力3
-
-
コマンド例:
- 入力1 → 出力1:
MT00SW0101NT
- 全出力 → 入力1:
MT00SW0100NT
- 状態取得:
MT00RD0000NT
- 入力1 → 出力1:
StarTech VS424HDPIP (4x4 HDMI Matrix)
- メーカー: StarTech
- 製品URL: 公式製品ページ
- マニュアル: ユーザーマニュアル
- RS-232設定: 9600bps, 8N1, フロー制御なし
- プロトコル: ASCII
-
特徴:
- コマンド末尾にCR(0x0D)を付加
- 応答コードに数字が含まれる
-
コマンド例:
- 電源OFF:
PWR000
+ CR - 電源ON:
PWR001
+ CR - 状態取得:
PWR999
+ CR
- 電源OFF:
その他参考サイト
- Michael Dornisch - Reverse Engineering HDMI Switch Remote Line
- AVS Forum - 4X2 True Matrix HDMI 1.3a Powered Switch w/ Remote Controller
- 以下のスレッドに
20090602102244_RS232-Command.pdf
という仕様書がある - https://www.avsforum.com/threads/4x2-true-matrix-hdmi-1-3a-powered-switch-w-remote-controller.921316/page-23?post_id=18703855#post-18703855
- 以下のスレッドに
- Arduino StackExchange - Controlling HDMI Switch via RS232/UART
おわりに
上記の通り、各メーカーごとにコマンド体系はバラバラで、正式なドキュメントなしにプロトコルを見つけるのはかなり難しいことがわかりました。
格安HDMIマトリクスセレクターのRS-232端子は、**正体不明な“裏口”**的インターフェースであることが多く、完全な仕様が公開されていないこともあります。
自作ソフトウェアやホームオートメーションでHDMIマトリクスを制御したい方は、激安品を買わずに、最初からコマンドなどが公開されているものを買うことをお勧めします。
補足:もし僕が買った機器のRS-232仕様が分かった方がいたら、ぜひコメント欄で教えてください!