DoctorMX ライブラリー(MacOSX 用)

DoctorMX USB/DMX512 インターフェースハードウェアを使用するためのライブラリーです。
Xcode で動作確認済みです。


C/C++ API

装置の列挙

RDrMXEnum DrMXEnum_New();
利用できるインターフェースハードウェアを列挙する列挙子を作成します。

void DrMXEnum_Delete(RDrMXEnum aE);
列挙子の使用を終えます。

CFStringRef DrMXEnum_Next(RDrMXEnum aE);
装置の識別子(文字列)を1つずつ返します。
これは個々のインターフェースハードウェアに固有のシリアル番号です。
(初期の製品の場合はシリアル番号がなく、この場合は USB 接続位置を示す固有の文字列で代用します)
それ以上装置がない場合は NULL を返します。

装置の使用

RDrMX DrMX_OpenID(CFRunLoopRef aRL, CFStringRef aID);
特定のインターフェースハードウェアの使用を始めます。
利用できる場合、インターフェースハードウェアへのポインター(参照)を返します。
ハードウェアが接続されていないなど、何らかの理由で利用できない場合は NULL を返します。

RDrMX DrMX_Open(CFRunLoopRef aRL);
利用できる最初のインターフェースハードウェアの使用を始めます。
DrMX_OpenID(aRL, NULL); と同等)
利用できる場合、インターフェースハードウェアへのポインター(参照)を返します。
ハードウェアが接続されていないなど、何らかの理由で利用できない場合は NULL を返します。

void DrMX_Close(RDrMX aR);
インターフェースハードウェアの使用を終えます。

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 を返します。

int DrMX_Read(RDrMX aR, unsigned char* aP, int aL, void(*aCB)(void*), void* aRef);
DMX からのデータを読み込みます。
読み込みデータがない場合は -1 を返します。
この場合、入力が完了したときに入力完了コールバックルーチンが呼ばれます(aP は完了まで有効である必要があります)。
読み込みデータがある場合は、読み込まれたバイト数を返します(1以上)。
aL で指定されたよりも多いデータは捨てられます。
前回の DrMX_Read() による読み込みが完了していない場合、0 を返します。
何らかエラーがある場合も 0 を返します。

int DrMX_SetTiming(RDrMX aR, unsigned int aBrk, unsigned int aMAB, unsigned int aMBS);
出力信号のタイミングを設定します。
ハードウェアが接続されていないなど、何らかの理由で設定できない場合は 0 を返します。


使用例

   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)