Библиотека LUFA (раннее название MyUSB) версия 101122
События USB

Functions

void EVENT_USB_UIDChange (void)
void EVENT_USB_Host_HostError (const uint8_t ErrorCode)
void EVENT_USB_Host_DeviceAttached (void)
void EVENT_USB_Host_DeviceUnattached (void)
void EVENT_USB_Host_DeviceEnumerationFailed (const uint8_t ErrorCode, const uint8_t SubErrorCode)
void EVENT_USB_Host_DeviceEnumerationComplete (void)
void EVENT_USB_Host_StartOfFrame (void)
void EVENT_USB_Device_Connect (void)
void EVENT_USB_Device_Disconnect (void)
void EVENT_USB_Device_ControlRequest (void)
void EVENT_USB_Device_ConfigurationChanged (void)
void EVENT_USB_Device_Suspend (void)
void EVENT_USB_Device_WakeUp (void)
void EVENT_USB_Device_Reset (void)
void EVENT_USB_Device_StartOfFrame (void)

Detailed Description

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

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

Каждое событие должно иметь только один связанный обработчик события (event handler), однако обработчик может быть вызыван из многих мест (с любыми требуемыми параметрами события).


Function Documentation

void EVENT_USB_Device_ConfigurationChanged ( void  )

Событие для смены номера конфигурации USB. Запускается в режиме устройства USB, когда хост USB изменил выбранный номер конфигурации. Событие должно быть перехвачено в приложениях устройства для создания конечных точек и перенастройки устройства для выбранной конфигурации.

Это событие критично к времени выполнения; превышение в обработчике задержек, зависящих от операционной системы (обычно около 1 секунды) приведет к ошибке энумерации устройства.

Это событие запускается после изменения значения USB_ConfigurationNumber.

Note:
Это событие не существует, если для компилятора задан токен USB_HOST_ONLY (см. документацию Управление интерфейсом USB).
void EVENT_USB_Device_Connect ( void  )

Событие для подключения устройства USB. Событие запускается, когда AVR находится в режиме устройства и устройство соединено с хостом, начинается процесс энумерации, измеряемый по переднему фронту уровня VBUS-ножки AVR.

Это событие критично к времени выполнения; превышение в обработчике зависящих от операционной системы задержек (обычно около двух секунд) приведет к невозможности правильной энумерации устройства.

Note:
Для младшей, 2-й серии USB AVR с ограниченными контроллерами USB, сигнал VBUS недоступен на контроллере USB. Это означает, что текущее состояние соединения по умолчанию вычисляется по событиям шины приостановки и пробуждения, которые не всегда точны (хост может приостановить шину, когда она все еще присоединена). Если необходимо отслеживать реальное состояние соединения, сигнал VBUS должен быть заведен на внешнюю ножку AVR, поведение автодетекта должно быть выключено передачей во время компиляции компилятору токена NO_LIMITED_CONTROLLER_CONNECT через ключ -D. Соединение и разединение может быть запущено вручную, и глобальная переменная USB_DeviceState меняется вручную.

Событие может запуститься несколько раз при энумерации устройства 2-й серии USB AVR с ограниченным контроллером USB если не задан токен NO_LIMITED_CONTROLLER_CONNECT.
See also:
USBTask.h для подробностей по задаче обработки USB и по уменьшению загрузки CPU.
void EVENT_USB_Device_ControlRequest ( void  )

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

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

Библиотека обрабатывает внутри себя все стандартные запросы управления, за исключением SYNC FRAME, SET DESCRIPTOR и SET INTERFACE. Эти и все другие нестандартные запросы управления будут оставлены для обработки пользователем через это событие, если необходимо. Если запрос не обрабатывается ни в приложении пользователя, ни библиотекой, то эти неизвестные запросы автоматически переводятся в состояние STALL.

Note:
Это событие не существует, если для компилятора задан токен USB_HOST_ONLY (см. документацию Управление интерфейсом USB).

Запросы должны быть обработаны так, как описано в спецификации USB 2.0, или в спецификации соответствующего класса. Во всех случаях библиотека уже читает параметры запроса SETUP в структуру USB_ControlRequest, которая должна затем использоваться приложением для определения, как нужно обработать выданный запрос.
void EVENT_USB_Device_Disconnect ( void  )

Событие для рассоединения устройства USB. Событие срабатывает, когда AVR находится в режиме USB-устройства, и это устройство отсоединено от хоста, что определено по спаду уровня на ножке VBUS чипа AVR.

Note:
Для младшей, 2-й серии USB AVR с ограниченными контроллерами USB, сигнал VBUS недоступен на контроллере USB. Это означает, что текущее состояние соединения по умолчанию вычисляется по событиям шины приостановки и пробуждения, которые не всегда точны (хост может приостановить шину, когда она все еще присоединена). Если необходимо отслеживать реальное состояние соединения, сигнал VBUS должен быть заведен на внешнюю ножку AVR, поведение автодетекта должно быть выключено передачей во время компиляции компилятору токена NO_LIMITED_CONTROLLER_CONNECT через ключ -D. Соединение и разединение может быть запущено вручную, и глобальная переменная USB_DeviceState меняется вручную.

Событие может запуститься несколько раз при энумерации устройства 2-й серии USB AVR с ограниченным контроллером USB если не задан токен NO_LIMITED_CONTROLLER_CONNECT.
See also:
USBTask.h для подробностей по задаче обработки USB и по уменьшению загрузки CPU.
void EVENT_USB_Device_Reset ( void  )

Событие сброса интерфейса USB. Событие запускается, когда интерфейс USB в режиме устройства, и хост USB делает запрос для сброса устройством своего интерфейса. Событие запускается после того, как конечная точка управления автоматически сконфигурируется библиотекой.

Это событие критично к времени выполнения; превышение в обработчике зависящих от операционной системы задержек (обычно около двух секунд) приведет к невозможности правильной энумерации устройства.

Note:
Это событие не существует, если для компилятора задан токен USB_HOST_ONLY (см. документацию Управление интерфейсом USB).
void EVENT_USB_Device_StartOfFrame ( void  )

Обработчик события для детектирования USB Start Of Frame (SOF), когда это разрешено. Это событие запускается в начале каждого фрейма USB, раз в милисекунду, и синхронизируется шиной USB. Может быть использовано в режиме устройства USB для работы точного милисекундного таймера, когда шина USB прошла энумерацию хостом.

Это событие критично к времени выполнения; оно запускается раз в милисекунду, и поэтому длинные обработчики значительно уменьшат производительность устройства. Это событие должно быть разрешено только с целью уменьшения пробуждений устройства.

Note:
Это событие изначально неактивно - оно должно быть разрешено вручную и запрещено через команды USB_Device_EnableSOFEvents() и USB_Device_DisableSOFEvents() после энумерации.

Это событие не существует, если для компилятора задан токен USB_HOST_ONLY (см. документацию Управление интерфейсом USB).
void EVENT_USB_Device_Suspend ( void  )

Событие приостановки (suspend) USB. Запускается, когда хост USB приостанавливает устройство, прервав передачу на устройство импульсов Start Of Frame. Обычно перехватывается для перевода устройства в режим низкого энергопотребления, пока хост не разбудит устройство снова. Если интерфейс USB прошел энумерацию с установленной опцией USB_OPT_AUTO_PLL, библиотека автоматически приостанавливает USB PLL перед запуском события для перехода в режим сохранения энергии.

Note:
Это событие не существует, если для компилятора задан токен USB_HOST_ONLY (см. документацию Управление интерфейсом USB).

Это событие не существует на 2-й серии USB AVR, когда не задан токен времени компиляции NO_LIMITED_CONTROLLER_CONNECT - см. EVENT_USB_Device_Disconnect.
See also:
EVENT_USB_Device_WakeUp() событие для сопровождения события пробуждения.
void EVENT_USB_Device_WakeUp ( void  )

Событие для пробуждения USB. Запускается, когда в режиме устройства интерфейс USB приостановлен, и хост будит устройство выдачей импульсов Start Of Frame. Обычно перехватывается для вывода программы пользователя из состояния низкого энергопотребления и возвращения в режим нормальной работы. Если интерфейс USB прошел энумерацию с установленной опцией USB_OPT_AUTO_PLL, библиотека автоматически перезагрузит USB PLL перед запуском этого события.

Note:
Это событие не существует, если для компилятора задан токен USB_HOST_ONLY (см. документацию Управление интерфейсом USB).

Это событие не существует на 2-й серии USB AVR, когда не задан токен времени компиляции NO_LIMITED_CONTROLLER_CONNECT - см. EVENT_USB_Device_Connect.
See also:
EVENT_USB_Device_Suspend() событие для сопровождения события Suspend (приостановка).
void EVENT_USB_Host_DeviceAttached ( void  )

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

Note:
Это событие имеется только на тех моделях USB AVR, которые поддерживают режим хоста USB.

Это событие не существует, если компилятору указан токен USB_DEVICE_ONLY (см. документацию Управление интерфейсом USB).
See also:
USB_USBTask() для подробностей по задаче обработки USB и по уменьшению загрузки CPU.
void EVENT_USB_Host_DeviceEnumerationComplete ( void  )

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

Это событие критично к времени выполнения; превышение в обработчике задержек, зависящих от операционной системы, (обычно около 1 секунды), когда транзакция ожидает обработки устройством, приведет к обрыву коммуникации и к сбросу хостом шины USB.

void EVENT_USB_Host_DeviceEnumerationFailed ( const uint8_t  ErrorCode,
const uint8_t  SubErrorCode 
)

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

Parameters:
[in]ErrorCodeкод ошибки, показывающий её причину, из USB_Host_EnumerationErrorCodes_t.
[in]SubErrorCodeсубкод ошибки, показывающий причину - например, если параметр ErrorCode показывает ошибку управления, субкод дает код ошибки, возвращаемый функцией USB_Host_SendControlRequest().
Note:
Это событие имеется только на тех моделях USB AVR, которые поддерживают режим хоста USB.

Это событие не существует, если компилятору указан токен USB_DEVICE_ONLY (см. документацию Управление интерфейсом USB).
void EVENT_USB_Host_DeviceUnattached ( void  )

Событие для удаления устройства USB. Это событие срабатывает, когда интерфейс USB работает в режиме хоста, и устройство USB удалено из интерфейса USB, независимо от того, прошло оно или нет энумерацию. This can be used to programmatically stop the USB management task to reduce CPU consumption.

Note:
Это событие имеется только на тех моделях USB AVR, которые поддерживают режим хоста USB.

Это событие не существует, если компилятору указан токен USB_DEVICE_ONLY (см. документацию Управление интерфейсом USB).
See also:
USB_USBTask() для подробностей по задаче обработки USB и по уменьшению загрузки CPU.
void EVENT_USB_Host_HostError ( const uint8_t  ErrorCode)

Событие ошибки хоста USB. Это событие срабатывает при аппаратной ошибке, когда интерфейс USB находится в режиме хоста.

Parameters:
[in]ErrorCodeкод ошибки, показывающий причину ошибки, значение из USB_Host_ErrorCodes_t.
Note:
Это событие имеется только на тех моделях USB AVR, которые поддерживают режим хоста USB.

Это событие не существует, если компилятору указан токен USB_DEVICE_ONLY (см. документацию Управление интерфейсом USB).
void EVENT_USB_Host_StartOfFrame ( void  )

Обработчик события для детектирования USB Start Of Frame (SOF), когда это разрешено. Это событие запускается в начале каждого фрейма USB, раз в милисекунду, и синхронизируется шиной USB. Может использоваться для точного милисекундного таймера, когда шина USB не приостановлена в режиме хоста.

Это событие критично к времени выполнения; оно запускается раз в милисекунду, и поэтому длинные обработчики значительно уменьшат производительность устройства. Это событие должно быть разрешено только с целью уменьшения пробуждений устройства.

Note:
Это событие изначально неактивно - оно должно быть разрешено вручную и запрещено через команды USB_Host_EnableSOFEvents() и USB_Host_DisableSOFEvents() после энумерации устройства USB.

Это событие не существует, если компилятору указан токен USB_DEVICE_ONLY (см. документацию Управление интерфейсом USB).
void EVENT_USB_UIDChange ( void  )

Событие для изменения уровня ножки режима USB. Это событие запускается, когда интерфейс USB устанавливается в режим двойной роли, и на ножке UID меняется уровень, чтобы показать новый режим (USB-устройство или USB-хост). Это событие запускается перед тем, как режим переключен в новое показанное состояние, однако после события EVENT_USB_Device_Disconnect (если произошло разединение перед изменением роли).

Note:
Это событие имеется только на тех моделях USB AVR, которые поддерживают режимы двойной роли USB.

Это событие не существует, если для компилятора заданы токены USB_DEVICE_ONLY или USB_HOST_ONLY (см. документацию Управление интерфейсом USB).
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines