ディスプレイ制御プロトコルであるDDC/CIについてメモしておきます。
DDC/CI(Display Data Channel Command Interface)とは?
DDC/CI(Display Data Channel Command Interface)とは、DVIやD-Sub(VGA)、DisplayPortといった映像信号ケーブルを介して、ディスプレイの制御を行うことができるプロトコルです。VESA規格で既定されており、多くのPC用モニターが対応しています。ディスプレイに手を伸ばさずとも設定を変更することができるので、たいへん便利です。
なぜ信号線で制御できるのか?
映像用の信号ケーブルでなぜディスプレイを制御できるのか。疑問でしたが、これは制御用の芯線がもともと信号線に組み込まれているためのようです。
例えば、D-Subケーブルの場合、12番ピンがI2C通信用に用意されています。このケーブルを使用し、I2C通信によりコンピューター側と通信することで、制御を行っているようです。
プロトコルはVESAの公式サイトで配布されています。
https://glenwing.github.io/docs/VESA-DDCCI-1.1.pdf
詳細なドキュメントも公開されています。
DDC/CIでディスプレイを制御するには?
ディスプレイメーカーが配布しているアプリケーションを使用すると、DDC/CIでディスプレイを制御することができます。
たとえば、EIZO製のモニターの場合、Screen Manager Proを使うと、DDC/CIよりディスプレイを制御できます。
他のメーカーについても多くは公式サイトで制御用アプリが公開されています。
明るさやコントラスト、ガンマなど、よく使うひと通りの設定については、ほとんどのディスプレイがDDC/CIからの制御に対応しています。
また、ControlMyMonitorというフリーソフトを使うと、ディスプレイが対応している制御項目について調べたり、ソフトウェアから設定を変更することができます。
DDC/CIをつかったプログラム開発
DDC/CIを使用したプログラム開発手法についても調べてみました。
Windowsでは、Win32APIにDDC/CIコントロールを利用できるAPIが実装されています。
Dxva2.libにAPIが実装されており、これを呼び出すことでディスプレイの輝度やコントラストをWindowsアプリケーションから制御することができます。輝度やコントラストなど基本的な設定項目についてはあらかじめAPIに実装されているメソッドを呼び出すだけでOKです。メーカー独自のパラメータ(画質モードなど)はI2Cのプロトコルがわかれば、低レベルAPIを使用して実装することもできます。
C#からも利用できますが、Visual C++(MFCアプリケーション)ですとAPIを直接呼び出せるので、C++に慣れている方なら簡単です。MFCで制作したサンプルアプリケーションを公開していますので、ご参考に。
ソースコードはGitHubに掲載しています。※コントラストはバグで動作しません!
Linuxの場合は、オープンソースのプロジェクトがいくつか公開されているので、これらを使うのがおすすめです。
デジタルサイネージのモニター制御などに活用できそうですね。
対応機種
海外メーカー(DELLやBenQなど)であれば、ほぼ100%対応しています。海外メーカーの方が積極的に対応しているようです。
国内メーカーでもほとんどが対応しています。EIZO、iiyama、NEC、Fujitsuなど、老舗ディスプレイメーカーであれば、ほとんどの製品がDDC/CIに対応しています。
国内メーカー大手でいうと、IO-DATAが非対応である点には注意が必要です。
プロジェクターでも一部メーカーは対応しているようですが、RS-232CやLANによる制御を用いるのが一般的かと思います。
その他いろいろなメモ
対応している接続方法は?
モニターとの接続によく使われるDisplayPort、DVI、D-subはDDC/CIに対応しています。
また、HDMIでも制御できました。もちろん、モニターやPCの仕様により異なります。
変換ケーブル・変換器を使用していても使える?
HDMI→DVIなどの変換ケーブルを使っていても、DDC/CIは使えるか。
愛用のLet’s Note RZ4に変換ケーブルを接続し、EIZO FlexScan EV2436につなげて実験してみましたところ、HDMI→DVI変換ケーブル使用下でも制御できました。
また、DisplayPortしかないPCに、Amazonで1000円くらいだったDP→HDMI変換器を接続し、HDMI→DVI変換ケーブルでEV2436に接続しても制御できました。
変換器や変換ケーブルにもよりますが、多くはDDC/CIを利用できるようです。ポート間の制御線が接続されており、正しい配列で変換されるものであれば、変換ケーブル・変換器使用時でもDDC/CIは利用できそうです。
コメント
[…] […]