Вывод строб-сигнала на Pointgrey Firefly MV с использованием libdc1394

Я использую 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 совершает какую-то другую магию в своем проприетарном драйвере. А пока я сдаюсь и постараюсь найти другое решение для запуска внешнего устройства.

1 ответ

Решение

Просматривая (доступную, не могу получить техническую справку) документацию по камере, кажется, что вам нужно установить направление для GPIO, то есть являются ли они входами или выходами. Документация описывает регистр PIO_DIRECTION в 0x11F8, где биты с низкой значимостью определяют, является ли IO входом (0) или выходом (1). Возможно, ваша проблема в том, что направление не установлено?

http://ptgrey.com/support/downloads/documents/TAN2005002_Output_strobe_signal_pulse.pdf

Сравнивая карту регистров камеры со стандартом, кажется, что камера должна это поддерживать. Я не могу найти документацию по API get / set_strobe_register в libdc1394. Возможно, get или set_register с использованием задокументированных смещением регистров камеры будут работать лучше. Как вы изобразили 0x200 в качестве своего смещения?

Это http://www.cs.unc.edu/Research/stc/FAQs/Cameras_Lenses/PtGrey/DcamRegisterRefManual.pdf документирует регистр, к которому вы пытаетесь получить доступ, по адресу 0x1300, поэтому, возможно, для доступа к стробу применяется некоторое фиксированное известное смещение регистрирует? Опять же, возможно, использование set_register позволит получить доступ ко всем регистрам камеры напрямую, так что вы можете использовать более старый задокументированный набор.

Другое дело, что вам нужно установить задержку и рассчитывать на стробоскоп.

Другие вопросы по тегам