Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用libdc1394在Pointgrey Firefly MV上输出选通信号_C++_Firefly Mv_Libdc1394 - Fatal编程技术网

C++ 使用libdc1394在Pointgrey Firefly MV上输出选通信号

C++ 使用libdc1394在Pointgrey Firefly MV上输出选通信号,c++,firefly-mv,libdc1394,C++,Firefly Mv,Libdc1394,我使用的是点灰萤火虫MV(确切地说是FFMV-03M2M/C),希望在每次快门启动时触发一些外部设备。根据,摄像头支持IIDC 1.31,还提供四个GPIO,可用作触发器和/或选通信号输出。如第4.11.3节所述,应可使用IIDC配置这些选通信号输出 我的应用程序是用C++实现的,用来访问和控制摄像机。到目前为止,一切都运行得很好,但我无法配置选通信号输出。据我所知,libdc和IIDC应该可以按如下方式启用第一个输出(camera是指向有效dc1394camera\t)的指针: dc1394e

我使用的是点灰萤火虫MV(确切地说是FFMV-03M2M/C),希望在每次快门启动时触发一些外部设备。根据,摄像头支持IIDC 1.31,还提供四个GPIO,可用作触发器和/或选通信号输出。如第4.11.3节所述,应可使用IIDC配置这些选通信号输出

<>我的应用程序是用C++实现的,用来访问和控制摄像机。到目前为止,一切都运行得很好,但我无法配置选通信号输出。据我所知,libdc和IIDC应该可以按如下方式启用第一个输出(
camera
是指向有效
dc1394camera\t
)的指针:

dc1394error\u t error;
uint64选通偏移量=0x200;
uint32选通设置=0;
err=dc1394获取选通寄存器(相机、选通偏移和选通设置);
如果(错误==DC1394\U成功){
/*设置位6(选通开启)和位7(有效高电平)
IIDC使用msb 0,因此我们需要按25/24而不是6/7移位*/
频闪设置=频闪设置(1浏览(可访问,无法访问技术参考)摄像头文档您似乎需要为GPIO设置一个方向,即它们是输入还是输出。文档描述了0x11F8处的PIO_方向寄存器,其中低有效位控制IO是输入(0)还是输出(1)。可能您的问题是没有设置方向

将摄像头寄存器映射与标准进行比较,看起来摄像头应该支持这一点。我在libdc1394中找不到任何关于get/set_-strobe_寄存器API的文档。也许使用摄像头记录的寄存器偏移量来获取或设置_寄存器会更好。您是如何将0x200作为偏移量的

这记录了您试图在0x1300访问的寄存器,因此可能存在一些用于访问“选通”寄存器的固定已知偏移量?同样,使用set_寄存器将允许直接访问所有相机寄存器,以便您可以使用记录的旧设置


另一件事是您需要为选通设置延迟和计数。

谢谢您的回答。0x200偏移量可以在IIDC标准文档(第4.11.3节)中找到,并且与选通寄存器偏移量有关。如果我将绝对偏移量0x1300与dc1394\u get\u control\u寄存器一起使用,我会得到相同的结果(dc1394_get_register不工作,返回dc1394_FAILURE)。我现在在您提到的第二个文档中发现偏移量0x1110-0x1140,似乎很有希望。再次感谢您的帮助!我尝试接受此答案,但不知怎的,我无法这样做…在赏金结束后是否无法接受答案?
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.");
}