Библиотека LUFA (раннее название MyUSB) версия 101122
Драйвер режима USB-устройства CDC Class

Data Structures

struct  USB_ClassInfo_CDC_Device_t
 Структура конфигурации и состояния CDC Class режима устройства USB. More...

Functions

bool CDC_Device_ConfigureEndpoints (USB_ClassInfo_CDC_Device_t *const CDCInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1)
void CDC_Device_ProcessControlRequest (USB_ClassInfo_CDC_Device_t *const CDCInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1)
void CDC_Device_USBTask (USB_ClassInfo_CDC_Device_t *const CDCInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1)
void EVENT_CDC_Device_LineEncodingChanged (USB_ClassInfo_CDC_Device_t *const CDCInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1)
void EVENT_CDC_Device_ControLineStateChanged (USB_ClassInfo_CDC_Device_t *const CDCInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1)
void EVENT_CDC_Device_BreakSent (USB_ClassInfo_CDC_Device_t *const CDCInterfaceInfo, const uint8_t Duration) ATTR_NON_NULL_PTR_ARG(1)
uint8_t CDC_Device_SendString (USB_ClassInfo_CDC_Device_t *const CDCInterfaceInfo, const char *const Data, const uint16_t Length) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2)
uint8_t CDC_Device_SendByte (USB_ClassInfo_CDC_Device_t *const CDCInterfaceInfo, const uint8_t Data) ATTR_NON_NULL_PTR_ARG(1)
uint16_t CDC_Device_BytesReceived (USB_ClassInfo_CDC_Device_t *const CDCInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1)
int16_t CDC_Device_ReceiveByte (USB_ClassInfo_CDC_Device_t *const CDCInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1)
uint8_t CDC_Device_Flush (USB_ClassInfo_CDC_Device_t *const CDCInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1)
void CDC_Device_SendControlLineStateChange (USB_ClassInfo_CDC_Device_t *const CDCInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1)
void CDC_Device_CreateStream (USB_ClassInfo_CDC_Device_t *const CDCInterfaceInfo, FILE *const Stream) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2)
void CDC_Device_CreateBlockingStream (USB_ClassInfo_CDC_Device_t *const CDCInterfaceInfo, FILE *const Stream) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2)

Detailed Description

зависимости для исходного кода модуля

Следующие файлы должны быть скомпилированы с любым проектом, который использует этот модуль:

модуля

Фреймворк-интерфейс драйвера класса USB режима устройства, для драйвера CDC USB Class.

Note:
У стандартного USB-класса CDC-ACM есть несколько главных недостатков, однако он очень стандартизирован, и обычно доступен как встроенный драйвер на большинстве платформ, поэтому является лучшим выбором в сравнении с собственным классом serial.

Главная проблема с CDC-ACM - то, что требуется два дескриптора интерфейса, которые нарушат работу большинства узлов, когда CDC являются частью многофункционального "Составного" USB-устройства, поскольку каждый интерфейс будет загружен в отдельный экземпляр драйвера. Чтобы победить это, Вы должны использовать дополнение "Interface Association Descriptor" (дескриптор связи интерфейсов) стандарта USB, которые доступны на многих операционных системах (когда Вы создаете композитные USB-устройства).

Другое большое упущение - нет никакого механизма для хоста сообщить устройству, что хост готов принять данные. Это означает, что устройство может пытаться отправить данные, когда хост их не слушает, что вызовет длинные таймауты блокировки в подпрограммах передачи. Чтобы бороться с этим, рекомендуется использовать виртуальную линию DTR (Data Terminal Ready) где только это возможно, чтобы определить, готово ли приложение хоста к данным.


Function Documentation

uint16_t CDC_Device_BytesReceived ( USB_ClassInfo_CDC_Device_t *const  CDCInterfaceInfo)

Определяет количество байт, принятых интерфейсом CDC от хоста, которые ожидают чтения. Показывает количество байт только в банке конечной точки OUT, и таким образом количество вызовов CDC_Device_ReceiveByte(), которые гарантированно будут успешно завершены. Если принимаются несколько байт, они должны быть забуферизированы в приложении пользователя, так как банк конечной точки не освободится для контроллера USB, пока все байты не будут считаны.

Precondition:
Эта функция должна быть вызвана только когда машина состояния устройства находится в состоянии DEVICE_STATE_Configured, иначе вызов будет ошибочен.
Parameters:
[in,out]CDCInterfaceInfoуказатель на структуру, содержащую конфигурацию и состояние CDC Class.
Returns:
общее количество забуферизированных байт, принятых от хоста.
bool CDC_Device_ConfigureEndpoints ( USB_ClassInfo_CDC_Device_t *const  CDCInterfaceInfo)

Конфигурирует конечные точки на указанном интерфейсе CDC готовыми для использования. Функция должна быть связана с событием библиотеки EVENT_USB_Device_ConfigurationChanged(), чтобы конечные точки конфигурировались, когда выбрана конфигурация, содержащая указанный интерфейс CDC.

Note:
Индексные номера конечной точки, как указано в структуре конфигурации интерфейса, не должны наложиться ни с каким другим интерфейсом, иначе произойдет повреждение банка конечной точки. Разрывы в номерах конечных точек или непоследовательные индексы в пределах единственного интерфейса допустимы, но никакие два интерфейса любого типа не должны иметь чередования индексов конечной точки.
Parameters:
[in,out]CDCInterfaceInfoуказатель на структуру, содержащую конфигурацию и состояние CDC Class.
Returns:
двоичное true, если конечные точки успешно сконфигурированы, иначе false.
void CDC_Device_CreateBlockingStream ( USB_ClassInfo_CDC_Device_t *const  CDCInterfaceInfo,
FILE *const  Stream 
)

Идентично CDC_Device_CreateStream(), за исключением того, что чтение блокирует выполнение программы, пока вызываемая функция потока не прервет передачу. Во время блокировки задачи обслуживания USB и CDC продолжают постоянно вызываться, чтобы поддержать коммуникации USB.

Parameters:
[in,out]CDCInterfaceInfoуказатель на структуру, содержащую конфигурацию и состояние CDC Class.
[in,out]Streamуказатель на структуру FILE, где должен быть размещен создаваемый поток.
void CDC_Device_CreateStream ( USB_ClassInfo_CDC_Device_t *const  CDCInterfaceInfo,
FILE *const  Stream 
)

Создает стандартный символьный поток для указанного экземпляра CDC Device, после чего его можно использовать со всеми стандартными функциями библиотеки avr-libc <stdio.h>, которые принимают поток FILE в качестве точки назначения (например fprintf). Созданный поток является двунаправленным, и может использоваться и для функций ввода, и для функций вывода.

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

Note:
Созданный поток, если нужно, может быть предоставлен как stdout для направления стандартного вывода из всех функций <stdio.h> в указанный интерфейс CDC.
Parameters:
[in,out]CDCInterfaceInfoуказатель на структуру, содержащую конфигурацию и состояние CDC Class.
[in,out]Streamуказатель на структуру FILE, где должен быть размещен создаваемый поток.
uint8_t CDC_Device_Flush ( USB_ClassInfo_CDC_Device_t *const  CDCInterfaceInfo)

Сбрасывает все данные, ожидающие отправки, что обеспечивает очистку буфера отправки.

Precondition:
Эта функция должна быть вызвана только когда машина состояния устройства находится в состоянии DEVICE_STATE_Configured, иначе вызов будет ошибочен.
Parameters:
[in,out]CDCInterfaceInfoуказатель на структуру, содержащую конфигурацию и состояние CDC Class.
Returns:
значение из перечисления Endpoint_WaitUntilReady_ErrorCodes_t.
void CDC_Device_ProcessControlRequest ( USB_ClassInfo_CDC_Device_t *const  CDCInterfaceInfo)

Обрабатывает приходящие запросы управления от хоста, направленные на указанный интерфейс класса CDC. Это должно быть слинковано с событием EVENT_USB_Device_ControlRequest() библиотеки.

Parameters:
[in,out]CDCInterfaceInfoуказатель на структуру, содержащую конфигурацию и состояние CDC Class.
int16_t CDC_Device_ReceiveByte ( USB_ClassInfo_CDC_Device_t *const  CDCInterfaceInfo)

Читает байт данных от хоста. Если нет ожидающих данных для чтения или хост USB не подключен, то функция вернет отрицательное значение. Функция CDC_Device_BytesReceived() может быть вызвана заранее, чтобы определить, сколько байт сейчас забуферизировано в банке данных приемной конечной точки интерфейса CDC, и, таким образом, сколько можно сделать гарантированных успешных вызовов функции чтения.

Precondition:
Эта функция должна быть вызвана только когда машина состояния устройства находится в состоянии DEVICE_STATE_Configured, иначе вызов будет ошибочен.
Parameters:
[in,out]CDCInterfaceInfoуказатель на структуру, содержащую конфигурацию и состояние CDC Class.
Returns:
следующий принятый от хоста байт, или отрицательное значение, если данные не приняты.
uint8_t CDC_Device_SendByte ( USB_ClassInfo_CDC_Device_t *const  CDCInterfaceInfo,
const uint8_t  Data 
)

Передает указанный байт к подключенному хосту USB, если имеется соединение. Если хост не подключен при вызове функции, то байт игнорируется. Байты будут помещены в очередь передачи к хосту, пока конечная точка не станет заполненной, либо не будет вызвана функция CDC_Device_Flush() для сброса ожидающих данных на хост. Это позволяет некоторому количеству байт быть упакованными в один пакет конечной точки, что увеличивает пропускную способность для данных.

Precondition:
Эта функция должна быть вызвана только когда машина состояния устройства находится в состоянии DEVICE_STATE_Configured, иначе вызов будет ошибочен.
Parameters:
[in,out]CDCInterfaceInfoуказатель на структуру, содержащую конфигурацию и состояние CDC Class.
[in]Dataбайт данных для отправки к хосту.
Returns:
значение из перечисления Endpoint_WaitUntilReady_ErrorCodes_t.
void CDC_Device_SendControlLineStateChange ( USB_ClassInfo_CDC_Device_t *const  CDCInterfaceInfo)

Отправляет на хост оповещение об изменении состояния линии управления. Должна быть вызвана, когда виртуальные линии управления (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.
void CDC_Device_USBTask ( USB_ClassInfo_CDC_Device_t *const  CDCInterfaceInfo)

Главная задача указанного интерфейса класса CDC, требуемая для корректной работы интерфейса. Должна часто вызываться в главном цикле программы, перед главной задачей поддержки USB USB_USBTask().

Parameters:
[in,out]CDCInterfaceInfoуказатель на структуру, содержащую конфигурацию и состояние CDC Class.
void EVENT_CDC_Device_BreakSent ( USB_ClassInfo_CDC_Device_t *const  CDCInterfaceInfo,
const uint8_t  Duration 
)

Событие драйвера CDC class для отправки запроса break (прерывание операции) от хоста к устройству. Обычно используется, чтобы отделить данные или показать специальное состояние принимающему устройству.

Parameters:
[in,out]CDCInterfaceInfoуказатель на структуру, содержащую конфигурацию и состояние CDC Class.
[in]Durationдлительность перерыва (break), отправляемого хостом, в милисекундах.
void EVENT_CDC_Device_ControLineStateChanged ( USB_ClassInfo_CDC_Device_t *const  CDCInterfaceInfo)

Событие драйвера класса CDC для изменения состояния линии управления на интерфейсе CDC. Это событие срабатывает, когда хост запрашивает изменение состояния линии управления (содержащее состояния линии управления, как например DTR) и может быть обратотано в firmware пользователя путем создания функции с таким же именем и параметрами. Новое состояние линии управления доступно в значении ControlLineStates.HostToDevice внутри структуры интерфейса CDC, переданной в качестве параметра, в виде набора масок CDC_CONTROL_LINE_OUT_*.

Parameters:
[in,out]CDCInterfaceInfoуказатель на структуру, содержащую конфигурацию и состояние CDC Class.
void EVENT_CDC_Device_LineEncodingChanged ( USB_ClassInfo_CDC_Device_t *const  CDCInterfaceInfo)

Событие драйвера CDC class для смены кодирования линии на интерфейсе CDC. Это событие срабатывает всякий раз, когда хост запрашивает изменения кодирования на линии (содержащее четность, скорость и другую информацию конфигурации), это событие может отслеживаться в программе firmware пользователя путем создания функции обработчика с тем же именем и перечисленными здесь параметрами. Новые установки кодирования линии доступны в структуре LineEncoding внутри структуры интерфейса CDC, переданной в качестве параметра.

Parameters:
[in,out]CDCInterfaceInfoуказатель на структуру, содержащую конфигурацию и состояние CDC Class.
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines