Я использую Pointgrey Firefly MV (точнее, FFMV-03M2M / C) и хочу запускать какое-то внешнее устройство при каждом запуске затвора.Согласно таблице , камера поддерживает IIDC 1.31, а также предоставляет четыре GPIO, которые можно использовать в качестве выходных сигналов триггера и / или стробоскопического сигнала.Как описано в разделе 4.11.3 стандарта IIDC , должна быть возможность конфигурировать эти выходы стробирующего сигнала с использованием 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
говорит мне, что я могу изменить настройку полярности (что я на самом деле не могу, потому что вы можетеизменять настройки только при включенном выходе строб-сигнала).Я попытался настроить выходные данные с помощью утилиты драйвера на основе Windows, предоставленной Pointgrey, и там она работает без проблем.
Есть идеи, что я могу делать неправильно?Или эта камера не совместима с IIDC в этом отношении?
Обновление: Хорошо, я пробовал три способа включить вывод строба: Используя мой код orignal, используя абсолютное смещение 0x1300, как предложено в ответе, и используя смещение0x1110 / 0x1114, как написано в справочном руководстве к регистру PointGrey.Я также попытался установить задержки, длительности и / или направления (даже если PIO не следует путать с выходами строба).Никакая комбинация регистров и флагов пока не работает.Возможно, это ошибка в libdc1394 или PointGrey совершает какую-то другую магию в своем проприетарном драйвере.Сейчас я сдаюсь и попытаюсь найти другое решение для запуска внешнего устройства.