Оболочка SDK устройства должна стандартизировать соглашения о вызовах, сохраняя при этом реальные различия между устройствами. Соответствующие имена API не определяют семантику параметров, владение буфером или состояния ошибок. Ниже приводится метод проектирования адаптера, а не утверждение о том, что произвольные устройства уже интегрированы.
Сначала определите семантику параметров
| Поле | Необходимая информация | Проблема, которую следует избегать |
|---|---|---|
| Идентификатор | Имя приложения, сопоставление устройств и применимый режим | Одинаковые имена с разным значением |
| Тип и единица измерения | Целое число, с плавающей запятой, перечисление, логические и явные единицы. | Копирование чисел с несовместимыми единицами измерения |
| Возможность доступа | Доступно только для чтения или записи, динамический диапазон и зависимости состояния | Запись параметров, которые не могут измениться во время захвата изображения |
| Перечисления и значения по умолчанию | Фактические поддерживаемые значения и обратная связь | Сообщение о неподдерживаемых настройках как об успешном |
| Условия активации | Требуется ли остановка, перезапуск или повторное подключение | Предполагая, что кадры используют новую настройку сразу после возврата вызова. |
Делайте больше, чем просто переименовывайте поля. Возвращайте идентифицируемые состояния для неподдерживаемых функций. Определите преобразование и округление для совместимых единиц. Проверьте обратное чтение, состояние устройства и изменения изображения в соответствии с возможностями целевого SDK.
Время жизни данных кадра
Задокументируйте, выделяет ли поставщик SDK, адаптер или вызывающая программа буфер, как долго он остается доступным для чтения, когда его необходимо освободить или вернуть, разрешено ли межпоточное использование и происходит ли копирование. Размеры, формат, шаг рядов и допустимая длина вместе описывают данные изображения; не предполагайте, что ряды плотно упакованы.
Не передавайте указатель асинхронного обратного вызова длительно выполняющейся нижестоящей задаче без подтверждения ее существования. Завершение захвата изображения, отключение и уничтожение устройства также требуют заказа на выдающиеся кадры, обратные вызовы в очереди и освобождение ресурсов.
Состояния и причины ошибок
Рассмотрите отдельные состояния «отключено», «подключено», «настроено», «получено», «остановлено» и «неисправно», с разрешенными вызовами и условиями перехода. Отдельно выражайте тайм-ауты, отключения, неподдерживаемые параметры, нехватку буфера и сбои синтаксического анализа. Сохраните код ошибки поставщика и контекст вместе с кодом ошибки оболочки.
Подтвердите больше, чем пример
Для определенных устройств и версий: границы тестовых параметров, повторный запуск и остановка, тайм-ауты кадров, возврат из буфера, одновременные вызовы и повторное подключение. Запишите, почему ошибку не удалось внести или она не поддерживалась. Предоставляйте документацию по API, таблицы ошибок, инструкции по сборке, примеры и согласованные протоколы испытаний.
Сопутствующие услуги: SDK для устройств машинного зрения и захват встроенного изображения.