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

Defines

#define USB_HOST_DEVICEADDRESS   1
#define USB_HOST_TIMEOUT_MS   1000
#define HOST_DEVICE_SETTLE_DELAY_MS   1000

Enumerations

enum  USB_Host_States_t {
  HOST_STATE_WaitForDeviceRemoval = 0,
  HOST_STATE_WaitForDevice = 1,
  HOST_STATE_Unattached = 2,
  HOST_STATE_Powered = 3,
  HOST_STATE_Powered_WaitForDeviceSettle = 4,
  HOST_STATE_Powered_WaitForConnect = 5,
  HOST_STATE_Powered_DoReset = 6,
  HOST_STATE_Powered_ConfigPipe = 7,
  HOST_STATE_Default = 8,
  HOST_STATE_Default_PostReset = 9,
  HOST_STATE_Default_PostAddressSet = 10,
  HOST_STATE_Addressed = 11,
  HOST_STATE_Configured = 12,
  HOST_STATE_Suspended = 15
}
enum  USB_Host_ErrorCodes_t { HOST_ERROR_VBusVoltageDip = 0 }
enum  USB_Host_EnumerationErrorCodes_t {
  HOST_ENUMERROR_NoError = 0,
  HOST_ENUMERROR_WaitStage = 1,
  HOST_ENUMERROR_NoDeviceDetected = 2,
  HOST_ENUMERROR_ControlError = 3,
  HOST_ENUMERROR_PipeConfigError = 4
}

Functions

static uint16_t USB_Host_GetFrameNumber (void)
static void USB_Host_EnableSOFEvents (void) ATTR_ALWAYS_INLINE
static void USB_Host_DisableSOFEvents (void) ATTR_ALWAYS_INLINE
static void USB_Host_ResetBus (void) ATTR_ALWAYS_INLINE
static bool USB_Host_IsBusResetComplete (void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE
static void USB_Host_ResumeBus (void) ATTR_ALWAYS_INLINE
static void USB_Host_SuspendBus (void) ATTR_ALWAYS_INLINE
static bool USB_Host_IsBusSuspended (void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE
static bool USB_Host_IsDeviceFullSpeed (void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE
static bool USB_Host_IsRemoteWakeupSent (void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE
static void USB_Host_ClearRemoteWakeupSent (void) ATTR_ALWAYS_INLINE
static void USB_Host_ResumeFromWakeupRequest (void) ATTR_ALWAYS_INLINE
static bool USB_Host_IsResumeFromWakeupRequestSent (void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE
uint8_t USB_Host_SetDeviceConfiguration (const uint8_t ConfigNumber)
uint8_t USB_Host_GetDeviceDescriptor (void *const DeviceDescriptorPtr)
uint8_t USB_Host_GetDeviceStringDescriptor (const uint8_t Index, void *const Buffer, const uint8_t BufferLength)
uint8_t USB_Host_ClearPipeStall (const uint8_t EndpointIndex)

Variables

volatile uint8_t USB_HostState

Detailed Description

Макросы и перечисления режима хоста USB. Этот модуль содержит макросы и перечисления, которые используются для инициализации контроллера USB в режиме хоста.


Define Documentation

#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.


Enumeration Type Documentation

Перечисление для кодов ошибки события EVENT_USB_Host_DeviceEnumerationFailed().

See also:
См. События USB для подробностей по этому событию.
Enumerator:
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().

See also:
См. События USB для подробностей по этому событию.
Enumerator:
HOST_ERROR_VBusVoltageDip 

Напряжение VBUS, сниженное к недопустимому уровню. Эта ошибка может быть результатом слишком высокого тока потребления устройства от шины VBUS, или из-за того, что источник питания AVR не может предоставить небходимую мощность потребления.

Перечисление для различных состояний машины хоста USB. В библиотеке LUFA реализованы не все состояния - другие состояния оставлены на реализацию пользователем.

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

See also:
См. USB_HostState, которое сохраняет текущее состояние машины хоста.
Enumerator:
HOST_STATE_WaitForDeviceRemoval 

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

HOST_STATE_WaitForDevice 

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

Note:
Не меняйте вручную это состояние в коде пользователя.
HOST_STATE_Unattached 

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

Note:
Не меняйте вручную это состояние в коде пользователя.
HOST_STATE_Powered 

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

Note:
Не меняйте вручную это состояние в коде пользователя.
HOST_STATE_Powered_WaitForDeviceSettle 

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

Note:
Не меняйте вручную это состояние в коде пользователя.
HOST_STATE_Powered_WaitForConnect 

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

Note:
Не меняйте вручную это состояние в коде пользователя.
HOST_STATE_Powered_DoReset 

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

Note:
Не меняйте вручную это состояние в коде пользователя.
HOST_STATE_Powered_ConfigPipe 

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

Note:
Не меняйте вручную это состояние в коде пользователя.
HOST_STATE_Default 

Внутренне реализовано в библиотеке. Это состояние показывает, что стек сейчас запрашивает от устройства размер конечной точки управления, чтобы канал управления мог быть соответственно изменен.

Note:
Не меняйте вручную это состояние в коде пользователя.
HOST_STATE_Default_PostReset 

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

Note:
Не меняйте вручную это состояние в коде пользователя.
HOST_STATE_Default_PostAddressSet 

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

Note:
Не меняйте вручную это состояние в коде пользователя.
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.


Function Documentation

uint8_t USB_Host_ClearPipeStall ( const uint8_t  EndpointIndex)

Очищает условие останова (stall) на указанном канале, через запрос ClearFeature на подключенное устройство.

Note:
После выхода из этой функции будет выбран текущим канал управления.
Parameters:
[in]EndpointIndexиндекс конечной точки для очистки, включая направление конечной точки.
Returns:
значение из перечисления USB_Host_SendControlErrorCodes_t для индикации результата.
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(), когда прошла энумерация.

Note:
Недоступно, когда задан токен времени компиляции NO_SOF_EVENTS.
static void USB_Host_EnableSOFEvents ( void  ) [inline, static]

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

Note:
Недоступно, когда задан токен времени компиляции NO_SOF_EVENTS.
uint8_t USB_Host_GetDeviceDescriptor ( void *const  DeviceDescriptorPtr)

Функция, сделанная для удобства. Посылает стандартный запрос GetDescriptor на подключенное устройство, запрашивая дескриптор устройства. Можно использовать для простого получения информации об устройстве, такой как его VID, PID и требования к потреблямой мощности.

Note:
После выхода из этой функции будет выбран текущим канал управления.
Parameters:
[out]DeviceDescriptorPtrУказатель на структуру дескриптора устройства, где будут сохранены прочитанные данные.
Returns:
значение из перечисления USB_Host_SendControlErrorCodes_t для индикации результата.
uint8_t USB_Host_GetDeviceStringDescriptor ( const uint8_t  Index,
void *const  Buffer,
const uint8_t  BufferLength 
)

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

Note:
После выхода из этой функции будет выбран текущим канал управления.
Parameters:
[in]IndexИндекс получаемой строки.
[out]BufferУказатель на буфер, куда будет сохранен запрошенный строковый дескриптор.
[in]BufferLengthМаксимальный размер строкового дескриптора, который может быть сохранен в буфере.
Returns:
значение из перечисления USB_Host_SendControlErrorCodes_t для индикации результата.
static uint16_t USB_Host_GetFrameNumber ( void  ) [inline, static]

Возвращает текущий номер фрейма USB в режиме работы как хост. Каждую милисекунду на активной шине USB (не suspended) номер фрейма увеличивается на единицу.

static bool USB_Host_IsBusResetComplete ( void  ) [inline, static]

Определяет, был ли завершен ранее выданный (через макрос USB_Host_ResetBus()) сброс шины.

Returns:
двоичное true, если сейчас не отправляется сброс шины, иначе false.
static bool USB_Host_IsBusSuspended ( void  ) [inline, static]

Определяет, приостановлена ли шина USB макросом USB_Host_SuspendBus(), иначе возвращает false. После приостановки по шине не могут происходить никакие коммуникации USB, пока не будет возобновлена работа шины, за исключением события Remote Wakeup от устройства, если оно поддерживается.

Returns:
двоичное true, если шина приостановлена, иначе false.
static bool USB_Host_IsDeviceFullSpeed ( void  ) [inline, static]

Определяет, прошло ли подключенное устройство энумерацию на режим Full Speed (12 мегабит/сек), или иначе вернет false, если устройство энумеровано на режим Low Speed (1.5 мегабит/сек).

Returns:
двоичное true, если подключенное устройство прошло энумерацию на режим Full Speed, иначе false.
static bool USB_Host_IsRemoteWakeupSent ( void  ) [inline, static]

Определяет, выдает ли сейчас подключенное устройство запрос Remote Wakeup, запрашивая пробуждение и возобновление работы шины USB, иначе false.

Returns:
двоичное true, если подключенное устройство отправило запрос Remote Wakeup, иначе false.
static bool USB_Host_IsResumeFromWakeupRequestSent ( void  ) [inline, static]

Определяет, был ли отправлен ответ на запрос Remote Wakeup от подключенного устройства.

Returns:
двоичное true, если сейчас не отправляется подтверждение запроса возобновления, иначе false.
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 на подключенное устройство, с указанным индексом конфигурации. Может быть использовано для простой установки конфигурации устройства без создания и отправки запроса вручную.

Note:
После выхода из этой функции будет выбран текущим канал управления.
Parameters:
[in]ConfigNumberиндекс конфигурации, посылаемый на устройство.
Returns:
значение из перечисления USB_Host_SendControlErrorCodes_t для индикации результата.
static void USB_Host_SuspendBus ( void  ) [inline, static]

Приостанавливает (suspend) шину USB, что прекращает коммуникации между хостом и подключенным устройством, пока работа шины не будет возобновлена. Это останавливает передачу на устройство каждые 1 мс сообщений Start Of Frame (SOF).


Variable Documentation

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 библиотеки.

Note:
Эта глобальная переменная имеется в программе пользователя только тогда, когда реализован хост USB.
See also:
См. USB_Host_States_t для списка возможных состояний устройства.
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines