2016-12-07 8 views
0

Я новичок в процессе разработки в этом домене, поэтому мой вопрос может показаться не очень логичным.Возможно ли начать работу над API для аппаратного устройства перед тем, как иметь драйвер

Я работаю над проектом по созданию нового USB-устройства. Предположим, что это устройство является веб-камерой. Одной из основных особенностей этого устройства является то, что он должен иметь очень умный API, чтобы программисты могли получить широкий доступ к аппаратным частям. Например, управляя объективом камеры вручную с помощью ползунка, то же самое относится к интенсивности вспышки и фиксированию частоты кадров.

Насколько я знаю, все функциональные возможности устройства должны быть доступны и задокументированы драйвером устройства перед началом работы с API. К сожалению, меня попросили (как разработчика C/C++) начать разработку API в качестве метода для управления производственным процессом по его окончательной функциональности.

Нужно ли работать разработчику перед тем, как иметь драйвер устройства?

Кроме того, не могли бы вы предоставить мне пример кода (псевдокод) того, как API использует драйвер устройства для выполнения некоторых функций?

ответ

1

Проектирование API обычно означает запись файла заголовка C-языка с именами методов, предоставляемых вашей библиотекой, а также их аргументов, возвращаемых типов и любой необходимой документации. Итак, да, вы можете начать писать этот файл, прежде чем у вас появится драйвер устройства.

Поскольку у вас есть два отдельных вопроса, я думаю, вы должны были разместить их отдельно на этом сайте. Но в любом случае ответ на ваш второй вопрос во многом зависит от того, какую операционную систему вы используете. В Windows вы, вероятно, используете DeviceIoControl, а в Linux вы, вероятно, используете ioctl (или просто read и write).

+0

А как насчет исходного файла (реализации) для этого заголовка? Все ли включено в DLL драйвера? Другими словами, API является просто абстракцией (интерфейсом) для драйвера или он добавляет некоторую логику более высокого уровня, комбинируя несколько вызовов драйверов для выполнения какой-либо задачи? – Baraa

+1

Вероятно, вы хотите, чтобы ваш драйвер был довольно простым, так как код на уровне ядра сложнее писать, а ошибки в нем имеют более серьезные последствия. И модернизация драйвера ядра будет сложнее. Таким образом, разделяемая библиотека пространства пользователя может содержать некоторые функции более высокого уровня, которые непосредственно не сопоставляются с одной командой драйвера. Это действительно зависит от вас, и вы, вероятно, найдете примеры обоих способов в мире, и они оба отлично справятся. –