Библиотека LUFA (раннее название MyUSB) версия 101122
Поддержка конечных точек

Modules

 Чтение и запись данных конечных точек
 Поддержка пакета конечной точки

Defines

#define ENDPOINT_CONTROLEP   0
#define ENDPOINT_CONTROLEP_DEFAULT_SIZE   8
#define ENDPOINT_EPNUM_MASK   0x07
#define ENDPOINT_EPDIR_MASK   0x80
#define ENDPOINT_EPSIZE_MASK   0x7F
#define ENDPOINT_MAX_SIZE(EPIndex)   _ENDPOINT_GET_MAXSIZE(EPIndex)
#define ENDPOINT_BANKS_SUPPORTED(EPIndex)   _ENDPOINT_GET_BANKS(EPIndex)
#define ENDPOINT_TOTAL_ENDPOINTS   ENDPOINT_DETAILS_MAXEP

Functions

static bool Endpoint_ConfigureEndpoint (const uint8_t Number, const uint8_t Type, const uint8_t Direction, const uint16_t Size, const uint8_t Banks) ATTR_ALWAYS_INLINE
static uint8_t Endpoint_GetCurrentEndpoint (void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE
static void Endpoint_SelectEndpoint (const uint8_t EndpointNumber) ATTR_ALWAYS_INLINE
static void Endpoint_ResetFIFO (const uint8_t EndpointNumber) ATTR_ALWAYS_INLINE
static void Endpoint_EnableEndpoint (void) ATTR_ALWAYS_INLINE
static void Endpoint_DisableEndpoint (void) ATTR_ALWAYS_INLINE
static bool Endpoint_IsEnabled (void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE
static bool Endpoint_IsConfigured (void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE
static uint8_t Endpoint_GetEndpointInterrupts (void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE
static bool Endpoint_HasEndpointInterrupted (const uint8_t EndpointNumber) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE
static void Endpoint_ResetDataToggle (void) ATTR_ALWAYS_INLINE
static uint8_t Endpoint_GetEndpointDirection (void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE
static void Endpoint_SetEndpointDirection (const uint8_t DirectionMask) ATTR_ALWAYS_INLINE
void Endpoint_ClearStatusStage (void)

Variables

uint8_t USB_ControlEndpointSize

Маски направления данных конечной точки

#define ENDPOINT_DIR_OUT   (0 << EPDIR)
#define ENDPOINT_DIR_IN   (1 << EPDIR)

Маски режима банка конечной точки

#define ENDPOINT_BANK_SINGLE   (0 << EPBK0)
#define ENDPOINT_BANK_DOUBLE   (1 << EPBK0)

Detailed Description

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


Define Documentation

#define ENDPOINT_BANK_DOUBLE   (1 << EPBK0)

Маска выбора режима банка для макроса Endpoint_ConfigureEndpoint(). Показывает, что конечная точка должна иметь два банка, которые требуют больше памяти USB FIFO, но передает быстрее, так как в одно и то же время одна из сторон (устройство USB AVR или хост) может получить доступ к одному банку, когда другая сторона получила доступ к другому банку.

#define ENDPOINT_BANK_SINGLE   (0 << EPBK0)

Маска выбора режима банка для макроса Endpoint_ConfigureEndpoint(). Показывает, что конечная точка должна иметь один банк, который требует меньше памяти USB FIFO, но передает медленнее, так как только одна из сторон (устройство USB AVR или хост) может получить доступ к банку в одно и то же время.

#define ENDPOINT_BANKS_SUPPORTED (   EPIndex)    _ENDPOINT_GET_BANKS(EPIndex)

Показывает общее количество банков, поддерживаемых указанной конечной точкой.

Parameters:
[in]EPIndexномер конечной точки, величина между 0 и (ENDPOINT_TOTAL_ENDPOINTS - 1)
#define ENDPOINT_CONTROLEP   0

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

#define ENDPOINT_CONTROLEP_DEFAULT_SIZE   8

Размер по умолчанию для банка конечной точки управления, пока он не изменен значением размера банка конечной точки, прочитанным из дескриптора устройства. Недоступен, если задан токен FIXED_CONTROL_ENDPOINT_SIZE.

#define ENDPOINT_DIR_IN   (1 << EPDIR)

Маска направления конечной точки для Endpoint_ConfigureEndpoint(). Показывает, что конечная точка должна быть инициализирована в направлении IN - т. е. данные идут от устройства к хосту.

#define ENDPOINT_DIR_OUT   (0 << EPDIR)

Маска направления конечной точки для Endpoint_ConfigureEndpoint(). Показывает, что конечная точка должна быть инициализирована в направлении OUT - т. е. данные идут от хоста к устройству.

#define ENDPOINT_EPDIR_MASK   0x80

Маска направления конечной точки, для маскирования адресов конечной точки при получении направления конечной точки сравнением с масками ENDPOINT_DESCRIPTOR_DIR_*.

#define ENDPOINT_EPNUM_MASK   0x07

Маска номера конечной точки, для наложения на адрес конечной точки и получения числового адреса конечной точки в устройстве.

#define ENDPOINT_EPSIZE_MASK   0x7F

Маска размена банка конечной точки, для наложения на адрес конечной точки и получения размера банка конечной точки в устройстве.

#define ENDPOINT_MAX_SIZE (   EPIndex)    _ENDPOINT_GET_MAXSIZE(EPIndex)

Максимальный размер в байтах указанной конечной точки.

Parameters:
[in]EPIndexномер конечной точки, величина между 0 и (ENDPOINT_TOTAL_ENDPOINTS - 1)
#define ENDPOINT_TOTAL_ENDPOINTS   ENDPOINT_DETAILS_MAXEP

Общее количество конечных точек (включая контрольную точку управления по умолчанию с адресом 0), которое можно использовать в устройстве. Разные модели USB AVR поддерживают разное количество конечных точек, и эта величина отражает максимальное количество конечных точек для выбранной модели AVR.


Function Documentation

void Endpoint_ClearStatusStage ( void  )

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

static bool Endpoint_ConfigureEndpoint ( const uint8_t  Number,
const uint8_t  Type,
const uint8_t  Direction,
const uint16_t  Size,
const uint8_t  Banks 
) [inline, static]

Конфигурирует конечную точку с указанным номером, типом, направлением, размером и режимом банка. Как только сконфигурирована, конечная точка может быть прочитана или записана, в зависимости от её направления.

Parameters:
[in]NumberНомер конечной точки для конфигурирования. Должен быть больше 0 и меньше ENDPOINT_TOTAL_ENDPOINTS.
[in]TypeТип конечной точки для конфигурирования, маска EP_TYPE_*. Не все типы конечной точки доступны на устройствах Low Speed USB - см. спецификацию USB 2.0.
[in]DirectionНаправление данных конечной точки, либо ENDPOINT_DIR_OUT, либо ENDPOINT_DIR_IN. Все коненые точки (за исключением типа Control - управление) однонаправленные - данные могут быть либо только прочитаны, либо только записаны через банк конечной точки, в зависимости от направления.
[in]SizeРазмер банка конечной точки, где сохраняются пакеты перед отправкой к хосту USB, либо после того, как пакет принят от хоста (в зависимости от направления данных конечной точки). Размер банка должен указывать на максимальный размер пакета, который может поддержать конечная точка.
[in]BanksКоличество банков для использования с конечной точкой, маска ENDPOINT_BANK_*. Большее количество банков тратит больше USB DPRAM, но обеспечивает более высокую производительность. Конечные точки изохронного типа должны иметь как минимум два банка.
Note:
Конечные точки должны конфигурироваться в порядке возрастания, иначе произойдет повреждение банка.

У некоторых моделей USB AVR конечные точки могут иметь разный максимальный размер пакета в зависимости от индекса конечной точки - см. даташит на выбранный USB AVR, чтобы определить максимальный размер банка каждой конечной точки.

Конечная точка управления по умолчанию не должна конфигурироваться приложением пользователя, так как она автоматически конфигурируется внутренним кодом библиотеки.

Эта подпрограмма при успешном завершении автоматически выбирает указанную конечную точку. При ошибке выбирается конечная точка, которая не сконфигурировалась.
Returns:
двоичное true, если конфигурация завершилась успешно, иначе false.
static void Endpoint_DisableEndpoint ( void  ) [inline, static]

Запрещает выбранную конечную точку, после чего её нельзя использовать для обмена данными с хостом.

static void Endpoint_EnableEndpoint ( void  ) [inline, static]

Разрешает текущую выбранную конечную точку, после чего она может использоваться для обмена через неё данными (прием и передача) с хостом.

Note:
Предварительно конечные точки должны быть правильно сконфигурированы вызовом Endpoint_ConfigureEndpoint().
static uint8_t Endpoint_GetCurrentEndpoint ( void  ) [inline, static]

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

Returns:
индекс выбранной в настоящий момент конечной точки.
static uint8_t Endpoint_GetEndpointDirection ( void  ) [inline, static]

Определяет направление текущей выбранной конечной точки.

Returns:
Направление текущей выбранной конечной точки в виде маски ENDPOINT_DIR_*.
static uint8_t Endpoint_GetEndpointInterrupts ( void  ) [inline, static]

Возвращает маску, показывающую, какая из конечных точек типа INTERRUPT получила прерывание - другими словами, у какой задержка прерывания заввершилась. Какая из конечных точек получила прерывание, можно определить маскированием возвращаемого значения (величиной 1 << {Endpoint Number}).

Returns:
маска, биты которой показывают, какая конечная точка получила прерывание.
static bool Endpoint_HasEndpointInterrupted ( const uint8_t  EndpointNumber) [inline, static]

Определяет, получила ли прерывание указанная конечная точка (допустимо только для конечных точек с типом INTERRUPT).

Parameters:
[in]EndpointNumberиндекс конечной точки, у которой должен быть проверен флаг прерывания.
Returns:
двоичное true, если указанная конечная точка получила прерывание, иначе false.
static bool Endpoint_IsConfigured ( void  ) [inline, static]

Определяет, сконфигурирована ли текущая выбранная конечная точка.

Returns:
двоичное true, если текущая выбранная конечная точка сконфигурирована, иначе false.
static bool Endpoint_IsEnabled ( void  ) [inline, static]

Определяет, что текущая конечная точка разрешена (но она необязательно должна быть при этом сконфигурирована).

Returns:
двоичное true, если текущая конечная точка разрешена, иначе false.
static void Endpoint_ResetDataToggle ( void  ) [inline, static]

Сбрасывает переключение данных на текущей выбранной конечной точке.

static void Endpoint_ResetFIFO ( const uint8_t  EndpointNumber) [inline, static]

Сброс FIFO банка конечной точки. Очищает все банки конечной точки и сбрасывает указатели In и Out на содержимое банков контроллера USB.

Parameters:
[in]EndpointNumberномер конечной точки, у которой сбрасываются буферы FIFO.
static void Endpoint_SelectEndpoint ( const uint8_t  EndpointNumber) [inline, static]

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

Любые операции с конечной точкой, которые не требуют номера конечной точки, всегда работают с текущей выбранной конечной точкой.

Parameters:
[in]EndpointNumberномер конечной точки для её выбора.
static void Endpoint_SetEndpointDirection ( const uint8_t  DirectionMask) [inline, static]

Устанавливает направление текущей выбранной конечной точки.

Parameters:
[in]DirectionMaskновое направление конечной точки в виде маски ENDPOINT_DIR_*.

Variable Documentation

Глобальная переменная, показывающая максимальный размер пакета конечной точки управления по умолчанию, размещенной в устройстве по адресу 0. Это значение установлено в величину, показанную в дескрипторе устройства проекта пользователя, как только интерфейс USB был инициализирован в режиме устройства.

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

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