Камера. Микроконтроллерная реализация.
Управление работой камеры осуществляется обменом с ней управляющими пакетами и получением пакетов с данными. Команды управления отправляются в UDP пакете. Все данные заполняются в порядке от младшего байта к старшему (little-endian), что отличается от предыдущей версии камеры.
Формат управляющего пакета:
Номер поля | Размер поля, байт | Наименование поля | Описание поля |
1 | 4 | ID | Идентификатор команды1 |
2 | 2 | FRAME NUMBER | Номер кадра, к которому относится команда |
3 | 1 | COMMAND TYPE | Тип команды2 |
4 | 2 | COMMAND VALUE | Значение команды |
5 | Переменный | DATA | Поле данных3 |
Идентификатор:
- Команда 0x636f6d6d (ascii - comm), отправляется ПК. Подтверждение 0x61636b6e (ascii ackn), отправляется в ответ на каждую команду. Поля 2 и 3 совпадают с таковыми из команды. Завершение экспозиции 0x6568706f (ascii - expo). Пакет служит для того чтобы проинформировать программу о завершении экспозиции и готовности нового кадра. Ошибка экспозиции 0x746F7574 (ascii tout). Отправляется в том случае, если за время таймаута не был получен кадр. Служит индикатором неисправности матрицы или отсутствием внешнего запуска длительное время. Занят 0x62757379 (ascii busy). Отправляется в случае невозможности выполнить текущую команду в этот момент времени. Например, если камера уже производит съемку, то она не обработает еще один запрос съемки нового кадра. Ошибка в данных 0x65727250 (ascii errD). Отправляется при некорректном значении поля 4. Ошибка доступа 0x6572724D (ascii errM). Команда не доступна в текущем режиме работы Ошибка команды 0x65727243 (ascii errC). Команда не поддерживается. Ошибка сенсора 0x65727253 (ascii errS). Сенсор не отвечает.
- 0x00/0x80 – режим работы (поддержка режимов определена в конфигурации камеры, см. далее):
- 0 – бездействие, 1 – одиночная съемка, 2 – мониторинг, 3 – серийная съемка.
- 0x01 – запрос съемки нового кадра. 0x02 – запрос отправки кадра.
- FALSE – отправка всего кадра TRUE отправка только фрагментов определенных в поле DATA_ARRAY (формат см. далее).
- 0 – 500 мс, шаг 1 мс.
- TRUE – внешний FALSE – внутренний
- 0 – 256 (относительный диапазон)
- 0 – 256 (относительный диапазон)
- 10 – 1448
- 0 – 30 сек, шаг 1 сек.
Таблица принятых фрагментов имеет размер равный количеству фрагментов (бит), элемент с номером N содержит 1 если фрагмент № N получен и 0 если фрагмент № N потерян. При запросе всего кадра можно не отправлять.
Конфигурация камеры:
Размер, байт | Наименование | Значения | Описание |
2 | X RESOSUTION | 640-2048 | Горизонтальное разрешение сенсора |
2 | Y RESOLUTION | 480-2048 | Вертикальное разрешение сенсора |
1 | SENSOR TYPE | 0-10 | Модель сенсора (только для информации, ни на что не влияет) |
1 | OFFSET | Y/N | Напряжение смещения |
1 | AMPLIEFER | Y/N | Аналоговый усилитель |
1 | EXPOSITION MODE | 0-5 | Количество режимов экспозиции (0 – основной) |
1 | MONITOR MODE | Y/N | Поддержка режима мониторинг |
1 | SERIAL MODE | Y/N | Поддержка режима серийная съемка |
1 | CONFIGURATION COMPLETE | Y/N | Выполнена конфигурация камеры (после последней перезагрузки камера получила хоть одну команду 0х03 – 0х0Е) |
1 | RESET SOURCE | 0 – PWUP 1 – WATCHDOG 2 – SOFTWARE 3 - OTHER | Источник последней перезагрузки камеры |
2 | FRAME COUNT | 0 – 65536 | Счетчик принятых кадров с последней перезагрузки |
4 | TIME COUNT (sec) | 0 – 4294967296 | Счетчик времени с последней перезагрузки |
Пакет с данными:
Номер поля | Размер поля, байт | Наименование поля | Описание поля |
1 | 4 | ID | Идентификатор пакета с данными, 0х64617461 (ascii data). |
2 | 2 | FRAME NUMBER | Номер кадра, такой же как в команде запроса |
3 | 2 | POINTER1 | Фрагмент содержит данные с этого адреса (начало фрагмента) |
4 | 2 | FRAGMENT NUMBER | Номер фрагмента |
5 | Размер фрагмента1 | FRAME DATA | Кадр |
- Размер фрагмента может устанавливаться от 100 до 1448 байт. 16 битное кодирование изображения (если реальная размерность данных меньше, то младшие биты нулевые).
Последовательность обращения к камере.
Устанавливаем режим, выполняем настройку камеры. На каждую команду должен прийти ответный пакет! Посылаем запрос съемки нового кадра, ждем ответ на команду, ждем пакет завершения экспозиции (максимальное время ожидания задается внутренним таймером камеры). Посылаем запрос отправки кадра и принимаем кадр. При необходимости шлем запрос досылки потерянных фрагментов.

