Pointgrey Firefly MV (正確には FFMV-03M2M/C) を使用しており、シャッターが開始するたびに外部デバイスをトリガーしたいと考えています。データシートによると、カメラは IIDC 1.31 をサポートし、トリガーおよび/またはストロボ信号出力として使用できる 4 つの GPIO も提供します。IIDC規格のセクション 4.11.3 で説明されているように、IIDC を使用してこれらのストローブ信号出力を構成できる必要があります。
私のアプリケーションは C++ で実装されており、libdc1394を使用してカメラへのアクセスと制御を行っています。これまでのところ、すべてうまく機能していますが、ストロボ信号出力を設定することができません。私が libdc と IIDC を理解している限り、次のように最初の出力を有効にすることができるはずです (camera
は有効なへのポインターですdc1394camera_t
)。
dc1394error_t err;
uint64_t strobe_offset = 0x200;
uint32_t strobe_settings = 0;
err = dc1394_get_strobe_register(camera, strobe_offset, &strobe_settings);
if (err == DC1394_SUCCESS) {
/* Set bits 6 (strobe on) and 7 (active-high level)
IIDC uses msb 0, so we need to shift by 25/24 instead of 6/7 */
strobe_settings = strobe_settings | (1 << 25) | (1 << 24);
err = dc1394_set_strobe_register(camera, strobe_offset, strobe_settings);
}
if (err != DC1394_SUCCESS) {
log(LOG_ERROR, "Failed to set strobe.");
}
これによりエラーは発生しませんが、ストロボ信号出力もオンになりません (カメラがフレームをキャプチャしている場合でも)。また、別のオフセット (0x204、0x208、および 0x20C) を使用して他のすべての出力を試しましたが、役に立ちませんでした。次に、 と のすべての在庫照会フィールドを確認しましたStrobe_CTRL_Inq
がStrobe_[0123]_Inq
、すべてストロボ信号出力が存在すると報告されています。しかし興味深いことに、 のOn/Off_Inq
フィールドはStrobe_[0123]_Inq
、出力をオンまたはオフに切り替えることができPolarity_Inq
ないことを示していますが、極性設定を変更できることを示しています (ストロボ信号出力がオンの場合にのみ設定を変更できるため、実際にはできません)。スイッチオン)。Pointgrey が提供する Windows ベースのドライバー ユーティリティを使用して出力を構成しようとしましたが、問題なく動作します。
私が間違っているかもしれないアイデアはありますか?それとも、このカメラはこの点で IIDC と互換性がありませんか?
更新:わかりました、ストロボ出力を有効にする 3 つの方法を試しました: 元のコードを使用し、回答で提案されているように絶対オフセット 0x1300 を使用し、PointGrey レジスタ リファレンス マニュアルに記載されているようにオフセット 0x1110/0x1114 を使用します。また、遅延、持続時間、および/または方向を設定してみました (PIO をストロボ出力と混同しないでください)。これまでのところ、レジスタとフラグの組み合わせは機能しません。libdc1394 のバグであるか、PointGrey が独自のドライバーで他の魔法を実行している可能性があります。とりあえずあきらめて、外部デバイスをトリガーするための別の解決策を見つけようとします。