Написание API для связи с устройством, подключенным через последовательный порт - PullRequest
0 голосов
/ 31 августа 2010

Боюсь, что несколько терминов в моем вопросе неверны.Пожалуйста, потерпите меня и поправьте меня, где я ошибаюсь.

Мне нужно написать библиотеку / программу, которая предоставит набор функций для работы устройства чтения карт, подключенного к последовательному порту.Как и для извлечения карты, которая была вставлена ​​в него, пользователю просто нужно будет вызвать его код, например,

cardEject(); // or
track2Data( response); // to read data of track 2 of magnetic stripe.

cardEject(), а другие функции сами позаботятся об открытии последовательного порта и записи данных вэто, проверка подтверждения, проверка кода ошибки, повторная отправка команды в случае сбоя и т. д. Я довольно четко обмениваюсь данными с устройствами через последовательный порт.

Мой вопрос, после написания всех этих функций и их тестирования, как я должен предоставить их пользователю.Должен ли я дать ему файл заголовка (.h) и объектный файл (.o)?Так что он может ссылаться на объект во время компиляции его фактической программы.Должен ли я предоставить статическую библиотеку (.a)?

Какая из них лучше?

Это хорошая идея, что каждая функция открывает последовательный порт, а затем закрывает его?Или initCardReader() открывает его, устанавливает его свойства и closeCardReader() должен его закрыть?Все остальные функции можно вызывать только после initCardReader()?

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

Спасибо за ваше время.

Редактировать Спасибо всем вам за руководство мной.Очень ценитсяЭтот API должен стать частью более крупного проекта.На самом деле, я тоже буду работать над этим проектом.Но есть большая вероятность, что этот API будет использоваться в других проектах со мной или без меня.Я думаю, учитывая возможное использование в других проектах, библиотека имеет больше смысла.Пожалуйста, поправьте меня, если я ошибаюсь.

Ответы [ 4 ]

3 голосов
/ 31 августа 2010

Я пойду с ответом от Андерса К., вы пишете API для вашего кард-ридера.

Мои два цента о более общих вопросах:

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

Я бы создал библиотеку, если бы она в основном использовалась в других проектах.Это также дает вам возможность изменять библиотеку в одном месте, чтобы каждый мог ее реализовать.Опять же, в зависимости от того, где вы будете его реализовывать, существует множество сценариев, когда добавление кода является лучшим вариантом.

2 голосов
/ 31 августа 2010

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

Один из способов заключается в том, чтобы относиться к устройству чтения карт точно так же, как к любому другому ресурсу, например к файлу. Это означает, что вы открываете / запускаете устройство чтения карт и возвращаете некоторую ручку, которая идентифицирует устройство чтения карт. Затем впоследствии используйте это во всех функциях при доступе к кард-ридеру.

1 голос
/ 01 сентября 2010

Вы можете поместить этот набор функций в общую библиотеку (например, libCardReader.so) и передать программисту файл заголовка для ссылки и использования его в своем коде. Следующая ссылка дает очень хорошее введение в сборку SO-файла (http://www.network -theory.co.uk / docs / gccintro / )

1 голос
/ 31 августа 2010

Мои два цента:

Я думаю, как вы предоставите вывод, зависит от пользователя.Работает ли этот человек в тесном контакте с вами в той же компании / проекте, или это происходит из внешнего источника?

Если его выход из внешнего мира определенно сделает его библиотекой ... может быть проще создать библиотеку ва также и в другом случае, поскольку для этого другого пользователя будет меньше беспокойства.

Будет ли ваш код интегрирован в более крупный проект?Если это так, вы должны просто встроить свой код в подпапку в этом проекте и предоставить ему необходимые функции, которые необходимы.Я думаю, что эта часть более субъективна, чем что-либо.

Что касается открытия / закрытия портов, опять же, это зависит от того, как это будет работать.Если вы просто предоставляете API для использования другими программистами (и не знаете, как он будет работать), я бы сказал, абстрагировать его в вызов функции initCardReader / closeCardReader.Таким образом, если пользователь хочет сделать несколько транзакций, ему не нужно беспокоиться о том, чтобы тратить время на обработку каждого звонка, который он делает ... он может просто открывать / закрывать по своему усмотрению.

И это звучит так:мне нравится, что вы пишете вызовы API для драйвера устройства чтения карт;)

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