Detailed Description
зависимости для исходного кода модуля
Следующие файлы должны быть скомпилированы с любым проектом, который использует этот модуль:
- LUFA/Drivers/USB/Class/Device/CDC.c (Имя модуля исходного кода для makefile: LUFA_SRC_USBCLASS)
модуля
Фреймворк-интерфейс драйвера класса USB режима устройства, для драйвера CDC USB Class.
- Note:
- У стандартного USB-класса CDC-ACM есть несколько главных недостатков, однако он очень стандартизирован, и обычно доступен как встроенный драйвер на большинстве платформ, поэтому является лучшим выбором в сравнении с собственным классом serial.
Главная проблема с CDC-ACM - то, что требуется два дескриптора интерфейса, которые нарушат работу большинства узлов, когда CDC являются частью многофункционального "Составного" USB-устройства, поскольку каждый интерфейс будет загружен в отдельный экземпляр драйвера. Чтобы победить это, Вы должны использовать дополнение "Interface Association Descriptor" (дескриптор связи интерфейсов) стандарта USB, которые доступны на многих операционных системах (когда Вы создаете композитные USB-устройства).
Другое большое упущение - нет никакого механизма для хоста сообщить устройству, что хост готов принять данные. Это означает, что устройство может пытаться отправить данные, когда хост их не слушает, что вызовет длинные таймауты блокировки в подпрограммах передачи. Чтобы бороться с этим, рекомендуется использовать виртуальную линию DTR (Data Terminal Ready) где только это возможно, чтобы определить, готово ли приложение хоста к данным.
Function Documentation
Определяет количество байт, принятых интерфейсом CDC от хоста, которые ожидают чтения. Показывает количество байт только в банке конечной точки OUT, и таким образом количество вызовов CDC_Device_ReceiveByte(), которые гарантированно будут успешно завершены. Если принимаются несколько байт, они должны быть забуферизированы в приложении пользователя, так как банк конечной точки не освободится для контроллера USB, пока все байты не будут считаны.
- Precondition:
- Эта функция должна быть вызвана только когда машина состояния устройства находится в состоянии DEVICE_STATE_Configured, иначе вызов будет ошибочен.
- Parameters:
-
[in,out] | CDCInterfaceInfo | указатель на структуру, содержащую конфигурацию и состояние CDC Class. |
- Returns:
- общее количество забуферизированных байт, принятых от хоста.
Конфигурирует конечные точки на указанном интерфейсе CDC готовыми для использования. Функция должна быть связана с событием библиотеки EVENT_USB_Device_ConfigurationChanged(), чтобы конечные точки конфигурировались, когда выбрана конфигурация, содержащая указанный интерфейс CDC.
- Note:
- Индексные номера конечной точки, как указано в структуре конфигурации интерфейса, не должны наложиться ни с каким другим интерфейсом, иначе произойдет повреждение банка конечной точки. Разрывы в номерах конечных точек или непоследовательные индексы в пределах единственного интерфейса допустимы, но никакие два интерфейса любого типа не должны иметь чередования индексов конечной точки.
- Parameters:
-
[in,out] | CDCInterfaceInfo | указатель на структуру, содержащую конфигурацию и состояние CDC Class. |
- Returns:
- двоичное true, если конечные точки успешно сконфигурированы, иначе false.
Идентично CDC_Device_CreateStream(), за исключением того, что чтение блокирует выполнение программы, пока вызываемая функция потока не прервет передачу. Во время блокировки задачи обслуживания USB и CDC продолжают постоянно вызываться, чтобы поддержать коммуникации USB.
- Parameters:
-
[in,out] | CDCInterfaceInfo | указатель на структуру, содержащую конфигурацию и состояние CDC Class. |
[in,out] | Stream | указатель на структуру FILE, где должен быть размещен создаваемый поток. |
Создает стандартный символьный поток для указанного экземпляра CDC Device, после чего его можно использовать со всеми стандартными функциями библиотеки avr-libc <stdio.h>, которые принимают поток FILE в качестве точки назначения (например fprintf). Созданный поток является двунаправленным, и может использоваться и для функций ввода, и для функций вывода.
Чтение данных из этого потока не блокирующее, например во многих случаях вся строка целиком не может быть прочитана одичной выборкой, поскольку конечная точка может быть не готова в некоторой точке передачи, что прервет процесс переноса данных. Однако поток может быть использован, когда данные обрабатываются байт за байтом, или когда приложение пользователя реализовало отдельную буферизацию принимаемой строки.
- Note:
- Созданный поток, если нужно, может быть предоставлен как stdout для направления стандартного вывода из всех функций <stdio.h> в указанный интерфейс CDC.
- Parameters:
-
[in,out] | CDCInterfaceInfo | указатель на структуру, содержащую конфигурацию и состояние CDC Class. |
[in,out] | Stream | указатель на структуру FILE, где должен быть размещен создаваемый поток. |
Сбрасывает все данные, ожидающие отправки, что обеспечивает очистку буфера отправки.
- Precondition:
- Эта функция должна быть вызвана только когда машина состояния устройства находится в состоянии DEVICE_STATE_Configured, иначе вызов будет ошибочен.
- Parameters:
-
[in,out] | CDCInterfaceInfo | указатель на структуру, содержащую конфигурацию и состояние CDC Class. |
- Returns:
- значение из перечисления Endpoint_WaitUntilReady_ErrorCodes_t.
Обрабатывает приходящие запросы управления от хоста, направленные на указанный интерфейс класса CDC. Это должно быть слинковано с событием EVENT_USB_Device_ControlRequest() библиотеки.
- Parameters:
-
[in,out] | CDCInterfaceInfo | указатель на структуру, содержащую конфигурацию и состояние CDC Class. |
Читает байт данных от хоста. Если нет ожидающих данных для чтения или хост USB не подключен, то функция вернет отрицательное значение. Функция CDC_Device_BytesReceived() может быть вызвана заранее, чтобы определить, сколько байт сейчас забуферизировано в банке данных приемной конечной точки интерфейса CDC, и, таким образом, сколько можно сделать гарантированных успешных вызовов функции чтения.
- Precondition:
- Эта функция должна быть вызвана только когда машина состояния устройства находится в состоянии DEVICE_STATE_Configured, иначе вызов будет ошибочен.
- Parameters:
-
[in,out] | CDCInterfaceInfo | указатель на структуру, содержащую конфигурацию и состояние CDC Class. |
- Returns:
- следующий принятый от хоста байт, или отрицательное значение, если данные не приняты.
Передает указанный байт к подключенному хосту USB, если имеется соединение. Если хост не подключен при вызове функции, то байт игнорируется. Байты будут помещены в очередь передачи к хосту, пока конечная точка не станет заполненной, либо не будет вызвана функция CDC_Device_Flush() для сброса ожидающих данных на хост. Это позволяет некоторому количеству байт быть упакованными в один пакет конечной точки, что увеличивает пропускную способность для данных.
- Precondition:
- Эта функция должна быть вызвана только когда машина состояния устройства находится в состоянии DEVICE_STATE_Configured, иначе вызов будет ошибочен.
- Parameters:
-
[in,out] | CDCInterfaceInfo | указатель на структуру, содержащую конфигурацию и состояние CDC Class. |
[in] | Data | байт данных для отправки к хосту. |
- Returns:
- значение из перечисления Endpoint_WaitUntilReady_ErrorCodes_t.
Отправляет на хост оповещение об изменении состояния линии управления. Должна быть вызвана, когда виртуальные линии управления (DCD, DSR, и проч.) изменили состояние, или для предоставления хосту оповещений BREAK. Состояния линии сохраняются, пока они не будут очищены через второе оповещение. Эта функция должна быть вызвана каждый раз, когда у драйвера класса CDC обновляется значение ControlLineStates.DeviceToHost, для проталкивания нового состояния хосту USB.
- Precondition:
- Эта функция должна быть вызвана только когда машина состояния устройства находится в состоянии DEVICE_STATE_Configured, иначе вызов будет ошибочен.
- Parameters:
-
[in,out] | CDCInterfaceInfo | указатель на структуру, содержащую конфигурацию и состояние CDC Class. |
uint8_t CDC_Device_SendString |
( |
USB_ClassInfo_CDC_Device_t *const |
CDCInterfaceInfo, |
|
|
const char *const |
Data, |
|
|
const uint16_t |
Length |
|
) |
| |
Отправляет указанную строку на подключенный хост USB, если соединение имеется. Если хост не присоединен, когда фунция вызвана, то строка игнорируется. Байты будут помещены в очередь передачи к хосту, пока конечная точка не станет заполненной, либо не будет вызвана функция CDC_Device_Flush() для сброса ожидающих данных на хост. Это позволяет некоторому количеству байт быть упакованными в один пакет конечной точки, что увеличивает пропускную способность для данных.
- Precondition:
- Эта функция должна быть вызвана только когда машина состояния устройства находится в состоянии DEVICE_STATE_Configured, иначе вызов будет ошибочен.
- Parameters:
-
[in,out] | CDCInterfaceInfo | указатель на структуру, содержащую конфигурацию и состояние CDC Class. |
[in] | Data | указатель на строку, отправляемую к хосту. |
[in] | Length | размер в байтах строки, отправляемой к хосту. |
- Returns:
- значение из перечисления Endpoint_Stream_RW_ErrorCodes_t.
Главная задача указанного интерфейса класса CDC, требуемая для корректной работы интерфейса. Должна часто вызываться в главном цикле программы, перед главной задачей поддержки USB USB_USBTask().
- Parameters:
-
[in,out] | CDCInterfaceInfo | указатель на структуру, содержащую конфигурацию и состояние CDC Class. |
Событие драйвера CDC class для отправки запроса break (прерывание операции) от хоста к устройству. Обычно используется, чтобы отделить данные или показать специальное состояние принимающему устройству.
- Parameters:
-
[in,out] | CDCInterfaceInfo | указатель на структуру, содержащую конфигурацию и состояние CDC Class. |
[in] | Duration | длительность перерыва (break), отправляемого хостом, в милисекундах. |
Событие драйвера класса CDC для изменения состояния линии управления на интерфейсе CDC. Это событие срабатывает, когда хост запрашивает изменение состояния линии управления (содержащее состояния линии управления, как например DTR) и может быть обратотано в firmware пользователя путем создания функции с таким же именем и параметрами. Новое состояние линии управления доступно в значении ControlLineStates.HostToDevice внутри структуры интерфейса CDC, переданной в качестве параметра, в виде набора масок CDC_CONTROL_LINE_OUT_*.
- Parameters:
-
[in,out] | CDCInterfaceInfo | указатель на структуру, содержащую конфигурацию и состояние CDC Class. |
Событие драйвера CDC class для смены кодирования линии на интерфейсе CDC. Это событие срабатывает всякий раз, когда хост запрашивает изменения кодирования на линии (содержащее четность, скорость и другую информацию конфигурации), это событие может отслеживаться в программе firmware пользователя путем создания функции обработчика с тем же именем и перечисленными здесь параметрами. Новые установки кодирования линии доступны в структуре LineEncoding внутри структуры интерфейса CDC, переданной в качестве параметра.
- Parameters:
-
[in,out] | CDCInterfaceInfo | указатель на структуру, содержащую конфигурацию и состояние CDC Class. |