Вывод строб-сигнала на Pointgrey Firefly MV с использованием libdc1394 - PullRequest
3 голосов
/ 22 декабря 2010

Я использую 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 Ответ

2 голосов
/ 13 февраля 2011

Просматривая (доступную, не могу получить техническую справку) документацию по камере, кажется, что вам нужно установить направление для 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 позволит получить доступ ко всем регистрам камеры напрямую, так что вы можете использовать более старый задокументированный набор.

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

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