DoctorMX ライブラリー(MacOSX 用)
DoctorMX USB/DMX512 インターフェースハードウェアを使用するためのライブラリーです。
Xcode で動作確認済みです。
include
DDrMXLibX.h
C/C++ 用インクルードファイルです。
lib
libdrmxlibx.a
スタティックリンクライブラリーファイルです。
開発環境のプロジェクトに使用します。
sample
DrMXLibXTest.cpp
テストプログラムのソースファイルです(コンソールプログラム)。
以下のコマンドラインでビルドできます。
g++ -framework Carbon -framework IOKit DrMXLibTestX.cpp libdrmxlibx.a
DoctorMX USB/DMX512 インターフェースハードウェアの入出力をケーブルでつないでループしておくと、出力したデータと入力したデータを比較し、一致するかしないかを、コンソールに表示します。
C/C++ API
装置の列挙
RDrMXEnum DrMXEnum_New();
利用できるインターフェースハードウェアを列挙する列挙子を作成します。
void DrMXEnum_Delete(RDrMXEnum aE);
列挙子の使用を終えます。
aE
DrMXEnum_New()
で返されたポインター。
CFStringRef DrMXEnum_Next(RDrMXEnum aE);
装置の識別子(文字列)を1つずつ返します。
これは個々のインターフェースハードウェアに固有のシリアル番号です。
(初期の製品の場合はシリアル番号がなく、この場合は USB 接続位置を示す固有の文字列で代用します)
それ以上装置がない場合は NULL を返します。
aE
DrMXEnum_New()
で返されたポインター。
装置の使用
RDrMX DrMX_OpenID(CFRunLoopRef aRL, CFStringRef aID);
特定のインターフェースハードウェアの使用を始めます。
利用できる場合、インターフェースハードウェアへのポインター(参照)を返します。
ハードウェアが接続されていないなど、何らかの理由で利用できない場合は NULL を返します。
aRL
入出力完了時にコールバックが実行される Run Loop(スレッド)。
aID
DrMXEnum_Next()
で返された識別子。
NULL または空文字列の場合は、利用できる最初の装置を返します。
RDrMX DrMX_Open(CFRunLoopRef aRL);
利用できる最初のインターフェースハードウェアの使用を始めます。
(DrMX_OpenID(aRL, NULL);
と同等)
利用できる場合、インターフェースハードウェアへのポインター(参照)を返します。
ハードウェアが接続されていないなど、何らかの理由で利用できない場合は NULL を返します。
aRL
入出力完了時にコールバックが実行される Run Loop(スレッド)。
void DrMX_Close(RDrMX aR);
インターフェースハードウェアの使用を終えます。
aR
DrMX_Open()
で返されたポインター。
int DrMX_Write(RDrMX aR, const unsigned char* aP, int aL, void(*aCB)(void*), void* aRef);
DMX にデータを出力します。
DMX 信号を出力し続けるには、定期的に DrMX_Write()
を繰り返し使用します。
出力を開始すると、1
を返します。
この場合、出力が完了したときに出力完了コールバックルーチンが呼ばれます(aP
は完了まで有効である必要はありません)。
前回の DrMX_Write()
による出力が完了していない場合、0
を返します。
何らかのエラーがある場合も 0
を返します。
aR
DrMX_Open()
で返されたポインター。
aP
バイト配列へのポインター。
最初のバイト(aP[0]
)は DMX スタートコード(通常は 0)です。
aL
バイト配列の長さ。
最大 513 です。
aCB
出力完了コールバックルーチン。
aRef
出力完了コールバックルーチンに渡される任意ポインター。
int DrMX_Read(RDrMX aR, unsigned char* aP, int aL, void(*aCB)(void*), void* aRef);
DMX からのデータを読み込みます。
読み込みデータがない場合は -1
を返します。
この場合、入力が完了したときに入力完了コールバックルーチンが呼ばれます(aP
は完了まで有効である必要があります)。
読み込みデータがある場合は、読み込まれたバイト数を返します(1以上)。
aL
で指定されたよりも多いデータは捨てられます。
前回の DrMX_Read()
による読み込みが完了していない場合、0
を返します。
何らかエラーがある場合も 0
を返します。
aR
DrMX_Open()
で返されたポインター。
aP
読み込みバイト配列へのポインター。
最初のバイト(aP[0]
)は DMX スタートコード(通常は 0)になります。
aL
最大読み込みバイト数。
最大 513 です。
aCB
入力完了コールバックルーチン。
aRef
入力完了コールバックルーチンに渡される任意ポインター。
int DrMX_SetTiming(RDrMX aR, unsigned int aBrk, unsigned int aMAB, unsigned int aMBS);
出力信号のタイミングを設定します。
ハードウェアが接続されていないなど、何らかの理由で設定できない場合は 0 を返します。
aBrk
ブレーク時間を設定します。
これは規格の最短値(92μS)に加える値を指定します。
デフォルトは「84」です(ブレーク時間は176μS)。
0~255 [μS]の範囲のみ有効です。
aMAB
ブレーク後のマーク時間(Mark After Break)を設定します。
これは規格の最短値(12μS)に加える値を指定します。
デフォルトは「0」です(MAB時間は12μS)。
0~255 [μS]の範囲のみ有効です。
aMBS
スロット間マーク時間(Mark Between Slot)を設定します。
デフォルトは「0」です(MBS時間は0μS)。
0~255 [μS]の範囲のみ有効です。
使用例
RDrMXEnum de = DrMXEnum_New();
for (;;)
{
CFString id = DrMXEnum_Next(de);
if (id == NULL) break;
CFRelease(id);
}
DrMXEnum_Delete(de);
/* ----------- */
unsigned char wbuf[513];
unsigned char rbuf[513];
int r;
RDrMX drmx = DrMX_Open(runloop);
if (drmx != NULL)
{
/* setup output data
|
|
*/
r = DrMX_Write(drmx, wbuf, 513, wcb, NULL);
if (r == 0)
{
/* retry later */
}
r = DrMX_Read(drmx, rbuf, 513, rcb, NULL);
if (0 < r)
{
/* process input data */
}
DrMX_Close(drmx);
}
お問い合わせ
メール(dmx@kuwatec.co.jp)