Библиотека LUFA (раннее название MyUSB) версия 101122
|
Макросы и перечисления режима хоста USB. Этот модуль содержит макросы и перечисления, которые используются для инициализации контроллера USB в режиме хоста.
#define HOST_DEVICE_SETTLE_DELAY_MS 1000 |
Константа для задержки в милисекундах после подключения устройства и перед стартом процесса энумерации библиотекой. Некоторые устройства требуют задержку до 5 секунд после соединения, перед тем как может начаться процесс энумерации.
Значение задержки по умолчанию может быть отменено в makefile проекта пользователя путем задания токена HOST_DEVICE_SETTLE_DELAY_MS в нужную задержку в милисекундах и передачи компилятору с использованием переключателя -D.
#define USB_HOST_DEVICEADDRESS 1 |
Указывает на фиксированный адрес устройства USB, который получен от устройства при энумерации и работе в режиме хоста. Так как в любой момент времени только одно устройство USB может быть подключено к хосту AVR, поэтому используемый адрес не важен (кроме того, что он должен быть ненулевым), и фиксированное значение указано в библиотеке.
#define USB_HOST_TIMEOUT_MS 1000 |
Константа для максимального программного периода таймаута отправляемых управляющий транзакций USB на подключенное устройство. Если устройство потерпело ошибку при ответе на отправленный управляющий запрос в течение этого периода, то библиотека вернет код ошибки таймаута.
Это значение можно отменить в makefile проекта пользователя путем указания токена USB_HOST_TIMEOUT_MS и передачи его компилятору через переключатель -D.
Перечисление для кодов ошибки события EVENT_USB_Host_DeviceEnumerationFailed().
HOST_ENUMERROR_NoError |
Ошибок нет. Используется внутренне, это не является допустимым значением параметра ErrorCode для события EVENT_USB_Host_DeviceEnumerationFailed(). |
HOST_ENUMERROR_WaitStage |
На одной из задержек между шагами энумерации произошла ошибка - либо по таймауту, либо какая-то другая ошибка. |
HOST_ENUMERROR_NoDeviceDetected |
Не было обнаружено устройство несмотря на то, что сигналы данных шины USB показывают подключение устройства. |
HOST_ENUMERROR_ControlError |
Один из управляющих запросов энумерации потерпел ошибку. |
HOST_ENUMERROR_PipeConfigError |
Канал управления по умолчанию (с адресом 0) не может быть корректно сконфигурирован. |
Перечисление для кодов ошибки события EVENT_USB_Host_HostError().
enum USB_Host_States_t |
Перечисление для различных состояний машины хоста USB. В библиотеке LUFA реализованы не все состояния - другие состояния оставлены на реализацию пользователем.
Для информации по каждому возможному состоянию хоста USB см. спецификацию USB 2.0. Некоторые из состояний хоста USB разбиваются на несколько субсостояний, которые могут быть эффективно реализованы внутри библиотеки.
HOST_STATE_WaitForDeviceRemoval |
Внутренне реализовано в библиотеке. Это состояние может быть использовано библиотекой для ожидания, пока подключенное устройство не будет удалено пользователем - подходит при возникновении ошибки, или когда не нужен дальнейший обмен с устройством. Это позволяет другому коду работать, пока машина состояния запрещена. |
HOST_STATE_WaitForDevice |
Внутренне реализовано в библиотеке. Это состояние показывает, что стек ожидает истечения интервала перед продолжением на следующем шаге процесса энумерации устройства.
|
HOST_STATE_Unattached |
Внутренне реализовано в библиотеке. Это состояние показывает, что машина состояния хоста ожидает подключения устройства, чтобы можно было начать процесс энумерации.
|
HOST_STATE_Powered |
Внутренне реализовано в библиотеке. Это состояние показывает, что устройство подключено, и библиотека внутренне сконфигурирована для начала процесса энумерации.
|
HOST_STATE_Powered_WaitForDeviceSettle |
Внутренне реализовано в библиотеке. Это состояние показывает, что стек ожидает истечения начального периода урегулирования перед началом процесса энумерации.
|
HOST_STATE_Powered_WaitForConnect |
Внутренне реализовано в библиотеке. Это состояние показывает, что стек ожидает события соединения от контроллера USB, чтобы показать, что к шине было подключено допустимое устройство USB и оно готово к энумерации.
|
HOST_STATE_Powered_DoReset |
Внутренне реализовано в библиотеке. Это состояние показывает, что было подключено допустимое устройство USB, и оно будет сброшено, чтобы быть готовым к энумерации.
|
HOST_STATE_Powered_ConfigPipe |
Внутренне реализовано в библиотеке. Это состояние показывает, что подключеное устройство USB запитано и сброшено, и канал управления сконфигурирован стеком.
|
HOST_STATE_Default |
Внутренне реализовано в библиотеке. Это состояние показывает, что стек сейчас запрашивает от устройства размер конечной точки управления, чтобы канал управления мог быть соответственно изменен.
|
HOST_STATE_Default_PostReset |
Внутренне реализовано в библиотеке. Это состояние показывает, что канал управления реконфигурирован для совпадения запрошенному от устройства размеру конечной точки управления, и установлен адрес устройства на шине USB.
|
HOST_STATE_Default_PostAddressSet |
Внутренне реализовано в библиотеке. Это состояние показывает, что адрес устройства теперь установлен, и стек завершил процесс энумерации устройства. Это состояние заставляет стек изменить текущий адрес устройства USB на адрес подключенного устройства, перед тем как перейти к реализованному пользователем состоянию HOST_STATE_Addressed, чтобы продолжить дальнейшие коммуникации.
|
HOST_STATE_Addressed |
Может быть реализовано в проекте пользователя. Это состояние должно быть установлено конфигурированием устройства перед переходом в состояние HOST_STATE_Configured. Другая обработка (как получение и обработка дескриптора устройства) также должна быть помещена в это состояние. |
HOST_STATE_Configured |
Может быть реализовано в проекте пользователя. Это состояние должно реализовать реальную работу с подключенным устройством и изменено по необходимости в состояние HOST_STATE_Suspended или HOST_STATE_WaitForDeviceRemoval. |
HOST_STATE_Suspended |
Может быть реализовано в проекте пользователя. Это состояние должно удерживаться во время приостановки (suspend) шины, и изменено по необходимости либо на HOST_STATE_Configured (после возобновления работы шины макросом USB_Host_ResumeBus()), либо на HOST_STATE_WaitForDeviceRemoval. |
uint8_t USB_Host_ClearPipeStall | ( | const uint8_t | EndpointIndex | ) |
Очищает условие останова (stall) на указанном канале, через запрос ClearFeature на подключенное устройство.
[in] | EndpointIndex | индекс конечной точки для очистки, включая направление конечной точки. |
static void USB_Host_ClearRemoteWakeupSent | ( | void | ) | [inline, static] |
Очищает флаг, показывающий событие выдачи подключенным устройством запроса Remote Wakeup.
static void USB_Host_DisableSOFEvents | ( | void | ) | [inline, static] |
Запрещает события Start Of Frame (SOF, начало фрейма) в режиме хоста. Когда запрещено, это останавливает запуск на стороне хоста обработчика события EVENT_USB_Host_StartOfFrame(), когда прошла энумерация.
static void USB_Host_EnableSOFEvents | ( | void | ) | [inline, static] |
Разрешает события Start Of Frame (SOF, начало фрейма) в режиме хоста. Когда разрешено, вызывает запуск события EVENT_USB_Host_StartOfFrame() каждую милисекунду, синхронно с шиной USB, в начале каждого фрейма USB, когда в устройство прошло энумерацию, при работе в режиме хоста.
uint8_t USB_Host_GetDeviceDescriptor | ( | void *const | DeviceDescriptorPtr | ) |
Функция, сделанная для удобства. Посылает стандартный запрос GetDescriptor на подключенное устройство, запрашивая дескриптор устройства. Можно использовать для простого получения информации об устройстве, такой как его VID, PID и требования к потреблямой мощности.
[out] | DeviceDescriptorPtr | Указатель на структуру дескриптора устройства, где будут сохранены прочитанные данные. |
uint8_t USB_Host_GetDeviceStringDescriptor | ( | const uint8_t | Index, |
void *const | Buffer, | ||
const uint8_t | BufferLength | ||
) |
Функция, сделанная для удобства. Эта подпрограмма посылает стандартный запрос GetDescriptor на подключенное устройство, запрашивая строковый дескриптор по указанному индексу. Это можно использовать для простого получения строковых дескрипторов от устройства по индексу, после того, как индекс будет получен из дескриптора устройства или дескриптора конфигурации.
[in] | Index | Индекс получаемой строки. |
[out] | Buffer | Указатель на буфер, куда будет сохранен запрошенный строковый дескриптор. |
[in] | BufferLength | Максимальный размер строкового дескриптора, который может быть сохранен в буфере. |
static uint16_t USB_Host_GetFrameNumber | ( | void | ) | [inline, static] |
Возвращает текущий номер фрейма USB в режиме работы как хост. Каждую милисекунду на активной шине USB (не suspended) номер фрейма увеличивается на единицу.
static bool USB_Host_IsBusResetComplete | ( | void | ) | [inline, static] |
Определяет, был ли завершен ранее выданный (через макрос USB_Host_ResetBus()) сброс шины.
static bool USB_Host_IsBusSuspended | ( | void | ) | [inline, static] |
Определяет, приостановлена ли шина USB макросом USB_Host_SuspendBus(), иначе возвращает false. После приостановки по шине не могут происходить никакие коммуникации USB, пока не будет возобновлена работа шины, за исключением события Remote Wakeup от устройства, если оно поддерживается.
static bool USB_Host_IsDeviceFullSpeed | ( | void | ) | [inline, static] |
Определяет, прошло ли подключенное устройство энумерацию на режим Full Speed (12 мегабит/сек), или иначе вернет false, если устройство энумеровано на режим Low Speed (1.5 мегабит/сек).
static bool USB_Host_IsRemoteWakeupSent | ( | void | ) | [inline, static] |
Определяет, выдает ли сейчас подключенное устройство запрос Remote Wakeup, запрашивая пробуждение и возобновление работы шины USB, иначе false.
static bool USB_Host_IsResumeFromWakeupRequestSent | ( | void | ) | [inline, static] |
Определяет, был ли отправлен ответ на запрос Remote Wakeup от подключенного устройства.
static void USB_Host_ResetBus | ( | void | ) | [inline, static] |
Сбрасывает шину USB, включая каналы хоста AVR и конечные точки в любом подключенном устройстве. Сброс шины USB оставляет сконфигурированной конечную точку управления (если она уже сконфигурирована).
Если шина USB была приостановлена (suspended) перед выдачей сброса шины, подключенное устройство автоматически пробуждается и шина возобновляет работу после корректной выдачи сброса.
static void USB_Host_ResumeBus | ( | void | ) | [inline, static] |
Возобновляет коммуникации USB с подключенным и энумерованным устройством, путем возобновления передачи на устройство каждую 1 мс сообщений Start Of Frame (SOF). После этого может происходить обмен данными между хостом и подключенным устройством.
static void USB_Host_ResumeFromWakeupRequest | ( | void | ) | [inline, static] |
Принимает от подключенного устройства запрос Remote Wakeup. Это должно быть выдано в ответ на запрос устройства Remote Wakeup в течение 2 мс, чтобы запрос был принят и работа шины была возобновлена.
uint8_t USB_Host_SetDeviceConfiguration | ( | const uint8_t | ConfigNumber | ) |
Функция, сделанная для удобства. Отправляет стандартный запрос SetConfiguration на подключенное устройство, с указанным индексом конфигурации. Может быть использовано для простой установки конфигурации устройства без создания и отправки запроса вручную.
[in] | ConfigNumber | индекс конфигурации, посылаемый на устройство. |
static void USB_Host_SuspendBus | ( | void | ) | [inline, static] |
Приостанавливает (suspend) шину USB, что прекращает коммуникации между хостом и подключенным устройством, пока работа шины не будет возобновлена. Это останавливает передачу на устройство каждые 1 мс сообщений Start Of Frame (SOF).
volatile uint8_t USB_HostState |
Показывает текущее состояние машины хоста. В режиме работы как хост, это показывает состояние через одно из значений в перечислении USB_Host_States_t.
Это значение может быть изменено пользователем для реализации состояний HOST_STATE_Addressed, HOST_STATE_Configured и HOST_STATE_Suspended, которые не реализованы в библиотеке.
Чтобы уменьшить размер программы и ускорения проверки этой глобальной переменной, она может быть размещена в аппаратные регистры GPIOR AVR вместо RAM, путем задания токена HOST_STATE_AS_GPIOR в значение между 0 и 2 в makefile проекта и передачи его компилятору через ключ -D. Когда токен задан, то соответствующий регистр GPIOR не может быть использован программой пользователя, за исколючением неявного использования через API библиотеки.