Библиотека LUFA (раннее название MyUSB) версия 101122
|
Modules | |
Канал чтения и записи данных | |
Обработка пакета канала | |
Обработка канала запросов управления | |
Defines | |
#define | PIPE_CONTROLPIPE 0 |
#define | PIPE_CONTROLPIPE_DEFAULT_SIZE 64 |
#define | PIPE_PIPENUM_MASK 0x07 |
#define | PIPE_TOTAL_PIPES 7 |
#define | PIPE_MAX_SIZE 256 |
#define | PIPE_EPNUM_MASK 0x0F |
#define | PIPE_EPDIR_MASK 0x80 |
Functions | |
static uint8_t | Pipe_GetCurrentPipe (void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE |
static void | Pipe_SelectPipe (const uint8_t PipeNumber) ATTR_ALWAYS_INLINE |
static void | Pipe_ResetPipe (const uint8_t PipeNumber) ATTR_ALWAYS_INLINE |
static void | Pipe_EnablePipe (void) ATTR_ALWAYS_INLINE |
static void | Pipe_DisablePipe (void) ATTR_ALWAYS_INLINE |
static bool | Pipe_IsEnabled (void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE |
static uint8_t | Pipe_GetPipeToken (void) ATTR_ALWAYS_INLINE |
static void | Pipe_SetPipeToken (const uint8_t Token) ATTR_ALWAYS_INLINE |
static void | Pipe_SetInfiniteINRequests (void) ATTR_ALWAYS_INLINE |
static void | Pipe_SetFiniteINRequests (const uint8_t TotalINRequests) ATTR_ALWAYS_INLINE |
static bool | Pipe_IsConfigured (void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE |
static uint8_t | Pipe_BoundEndpointNumber (void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE |
static void | Pipe_SetInterruptPeriod (const uint8_t Milliseconds) ATTR_ALWAYS_INLINE |
static uint8_t | Pipe_GetPipeInterrupts (void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE |
static bool | Pipe_HasPipeInterrupted (const uint8_t PipeNumber) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE |
static void | Pipe_Unfreeze (void) ATTR_ALWAYS_INLINE |
static void | Pipe_Freeze (void) ATTR_ALWAYS_INLINE |
static bool | Pipe_IsFrozen (void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE |
static void | Pipe_ClearError (void) ATTR_ALWAYS_INLINE |
static bool | Pipe_IsError (void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE |
static void | Pipe_ClearErrorFlags (void) ATTR_ALWAYS_INLINE |
static uint8_t | Pipe_GetErrorFlags (void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE |
bool | Pipe_ConfigurePipe (const uint8_t Number, const uint8_t Type, const uint8_t Token, const uint8_t EndpointNumber, const uint16_t Size, const uint8_t Banks) |
bool | Pipe_IsEndpointBound (const uint8_t EndpointAddress) |
Variables | |
uint8_t | USB_ControlPipeSize |
Маски флагов ошибки канала | |
#define | PIPE_ERRORFLAG_OVERFLOW (1 << 6) |
#define | PIPE_ERRORFLAG_UNDERFLOW (1 << 5) |
#define | PIPE_ERRORFLAG_CRC16 (1 << 4) |
#define | PIPE_ERRORFLAG_TIMEOUT (1 << 3) |
#define | PIPE_ERRORFLAG_PID (1 << 2) |
#define | PIPE_ERRORFLAG_DATAPID (1 << 1) |
#define | PIPE_ERRORFLAG_DATATGL (1 << 0) |
Маски токенов канала | |
#define | PIPE_TOKEN_SETUP (0 << PTOKEN0) |
#define | PIPE_TOKEN_IN (1 << PTOKEN0) |
#define | PIPE_TOKEN_OUT (2 << PTOKEN0) |
Маски режима банка канала | |
#define | PIPE_BANK_SINGLE (0 << EPBK0) |
#define | PIPE_BANK_DOUBLE (1 << EPBK0) |
Этот модуль содержит функции, макросы и перечисления, относящиеся к поддержке каналов в режиме хоста USB. Содержит как макросы поддержки канала, так и функции обработки прерывания канала и функции передачи/приема данных различных типов.
#define PIPE_BANK_DOUBLE (1 << EPBK0) |
Маска выбора режима банка для макроса Pipe_ConfigurePipe(). Показывает, что канал должен иметь два банка, которые требуют больше памяти USB FIFO, но в результате быстрее передает, поскольку при обращении одной стороны (хоста AVR или подключеного устройства USB) к одному банку другая сторона может обратиться к другому банку.
#define PIPE_BANK_SINGLE (0 << EPBK0) |
Маска выбора режима банка для макроса Pipe_ConfigurePipe(). Показывает, что канал имеет один банк, который требует меньше памяти USB FIFO, но в результате медленнее передает, поскольку в каждый момент времени к банку канала может получить доступ только одна сторона (хост AVR или подключеное устройство USB).
#define PIPE_CONTROLPIPE 0 |
Адрес для канала управления по умолчанию, который всегда занимает адрес 0. Этот макрос задан только для удобства, чтобы получить более читаемый код при использовании макросов канала.
#define PIPE_CONTROLPIPE_DEFAULT_SIZE 64 |
Размер по банка канала управления по умолчанию, пока не изменнено значение Endpoint0Size в дескрипторе устройства на подключенном устройстве.
#define PIPE_EPDIR_MASK 0x80 |
Маска направления конечной точки, для маскирования адресов конечной точки при получении направления конечной точки сравнением с масками ENDPOINT_DESCRIPTOR_DIR_*.
#define PIPE_EPNUM_MASK 0x0F |
Маска номера конечной точки, для маскирования адресов конечной точки при получении числового адреса конечной точки в подключенном устройстве.
#define PIPE_ERRORFLAG_CRC16 (1 << 4) |
Маска для Pipe_GetErrorFlags(), показывающая, что в канале произошла ошибка CRC на приеме данных.
#define PIPE_ERRORFLAG_DATAPID (1 << 1) |
Маска для Pipe_GetErrorFlags(), показывающая, что в канале произошла аппаратная ошибка данных PID.
#define PIPE_ERRORFLAG_DATATGL (1 << 0) |
Маска для Pipe_GetErrorFlags(), показывающая, что в канале произошла аппаратная ошибка переключения (toggle) данных.
#define PIPE_ERRORFLAG_OVERFLOW (1 << 6) |
Маска для Pipe_GetErrorFlags(), показывающая, что в канале произошла ошибка переполнения на приеме данных.
#define PIPE_ERRORFLAG_PID (1 << 2) |
Маска для Pipe_GetErrorFlags(), показывающая, что в канале произошла ошибка аппаратного PID.
#define PIPE_ERRORFLAG_TIMEOUT (1 << 3) |
Маска для Pipe_GetErrorFlags(), показывающая, что в канале произошла ошибка аппаратного таймаута.
#define PIPE_ERRORFLAG_UNDERFLOW (1 << 5) |
Маска для Pipe_GetErrorFlags(), показывающая, что в канале произошла ошибка недополнения на приеме данных.
#define PIPE_MAX_SIZE 256 |
Размер в байтах наибольшего размера банка канала в устройстве. Не все банки на каждой модели AVR поддерживают наибольший возможный размер банка на устройстве; разные номера каналов поддерживают разные максимальные размеры банков. Это значение отражает максимальный возможный размер банка любого канала на выбранной в настоящий момент модели USB AVR.
#define PIPE_PIPENUM_MASK 0x07 |
Маска номера канала, для маскирования адресов канала, чтобы получить числовой адрес канала в устройстве.
#define PIPE_TOKEN_IN (1 << PTOKEN0) |
Маска токена для Pipe_ConfigurePipe(). Устанавливает канал как токен IN (для каналов, которые не CONTROL), показывающий, что данные по каналу идут от устройства в хост.
#define PIPE_TOKEN_OUT (2 << PTOKEN0) |
Маска токена для Pipe_ConfigurePipe(). Устанавливает канал как токен OUT (для каналов, которые не CONTROL), показывающий, что данные по каналу идут от хоста в устройство.
#define PIPE_TOKEN_SETUP (0 << PTOKEN0) |
Маска токена для Pipe_ConfigurePipe(). Устанавливает канал как токен SETUP (для каналов типа CONTROL), который будет переключать запрос управления на подключенном устройстве, когда данные записываются в канал.
#define PIPE_TOTAL_PIPES 7 |
Общее количество каналов (включая канал управления по умолчанию по адресу 0), которое можно использовать в устройстве. Различные модели USB AVR поддерживают разное количество каналов, и эта величина отражает максимальное количество каналов для выбранной в настоящий момент модели AVR.
static uint8_t Pipe_BoundEndpointNumber | ( | void | ) | [inline, static] |
Запрашивает номер у конечной точки внутри подключенного устройства, с которой связан выбранный в настоящий момент канал.
static void Pipe_ClearError | ( | void | ) | [inline, static] |
Очищает главный флаг ошибки канала.
static void Pipe_ClearErrorFlags | ( | void | ) | [inline, static] |
Очищает флаги ошибки выбранного в настоящий момент канала, но не очищает главный флаг ошибки канала.
bool Pipe_ConfigurePipe | ( | const uint8_t | Number, |
const uint8_t | Type, | ||
const uint8_t | Token, | ||
const uint8_t | EndpointNumber, | ||
const uint16_t | Size, | ||
const uint8_t | Banks | ||
) |
Конфигурирует канал указанного номера в указанные тип, токен, целевую конечную точку в подключенном устройстве, размер банка и его режим.
Только что сконфигурированные каналы по умолчанию заморожены, и должны быть перед использованием разморожены вызовом Pipe_Unfreeze(). Каналы должны удерживаться замороженными, за исключением ожидания данных от устройства в режиме IN, или отправки данных устройству в режиме OUT. Каналы типа IN также автоматически конфигурируются для приема бесконечного количества запросов IN без автоматической заморозки - это можно отменить вызоваом Pipe_SetFiniteINRequests().
[in] | Number | Номер канала для конфигурирования. Должен быть больше 0 и меньше чем PIPE_TOTAL_PIPES. |
[in] | Type | Тип канала для конфигурирования, маска EP_TYPE_*. Не все типы каналов допустимы для устройств USB Low Speed USB - см. спецификацию USB 2.0. |
[in] | Token | Токен данных канала, либо PIPE_TOKEN_SETUP, либо PIPE_TOKEN_OUT, либо PIPE_TOKEN_IN. Все каналы (за исключением типа Control - управление) однонаправленные - данные могут быть только прочитаны из банка канала или записаны туда, в зависимости от направления канала, но не одновременно в обоих направлениях. |
[in] | EndpointNumber | Индекс конечной точки в подключенном устройстве, с которой должен взаимодействовать канал. |
[in] | Size | Размер в байтах банка канала, где сохраняются пакеты перед отправкой в устройство USB device, или после приема их от устройства USB (в зависимости от направления данных в канале). Размер банка должен показывать максимальный размер пакета, который может обработать канал. |
[in] | Banks | Количество банков для использования с конфигурируемым каналом, маска PIPE_BANK_*. Большее количество банков тратят больше USB DPRAM, но увеличивают быстродействие. Каналы изохронного типа должны иметь как минимум два банка. |
static void Pipe_DisablePipe | ( | void | ) | [inline, static] |
Запрещает выбранный в настоящий момент канал, после чего через этот канал данные не могут быть отправлены в подключенное устройство USB или приняты от него.
static void Pipe_EnablePipe | ( | void | ) | [inline, static] |
Разрешает выбранный в настоящий канал, чтобы данные могли быть отправлены в подключенное устройство USB и приняты из него.
static void Pipe_Freeze | ( | void | ) | [inline, static] |
Замораживает выбранный канал, что запрещает коммуникацию через него с подключенным устройством.
static uint8_t Pipe_GetCurrentPipe | ( | void | ) | [inline, static] |
Возвращает адрес выбранного в настоящий момент канала. Обычно используется для сохранения номера выбранного в настоящий момент канала, чтобы его можно было восстановить после манипуляций с другим каналом.
static uint8_t Pipe_GetErrorFlags | ( | void | ) | [inline, static] |
Получает маску аппаратных флагов ошибки, которые произошли на выбранном канале. Эта величина может быть обработана масками PIPE_ERRORFLAG_*, чтобы определить, какая произошла ошибка.
static uint8_t Pipe_GetPipeInterrupts | ( | void | ) | [inline, static] |
Возвращает маску, показывающую, какие периоды прерывания канала истекли, показывая, что канал должен быть обслужен.
static uint8_t Pipe_GetPipeToken | ( | void | ) | [inline, static] |
Получает токен текущего канала, показывающий направление и тип данных канала.
static bool Pipe_HasPipeInterrupted | ( | const uint8_t | PipeNumber | ) | [inline, static] |
Определяет, прерван ли канал с указанным номером (допустимо только с каналами типа INTERRUPT).
[in] | PipeNumber | индекс канала, у которого должен быть протестирован флаг прерывания. |
static bool Pipe_IsConfigured | ( | void | ) | [inline, static] |
Определяет, сконфигурирован ли выбранный в настоящее время канал.
static bool Pipe_IsEnabled | ( | void | ) | [inline, static] |
Определяет, разрешен ли выбранный в настоящий момент канал, но необязательно он должен быть при этом сконфигурирован.
bool Pipe_IsEndpointBound | ( | const uint8_t | EndpointAddress | ) |
Определяет, привязана ли к каналу конечная точка устройства с указанным адресом. Если найден канал, который привязан к указанной конечной точке, то он автоматически становится выбранным.
[in] | EndpointAddress | для проверки адрес и маска направления конечной точки внутри подключенного устройства. |
static bool Pipe_IsError | ( | void | ) | [inline, static] |
Определяет, установлен ли главный флаг ошибки выбранного в настоящий момент канала, что показывает некоторую аппаратную ошибку, произошедшую на канале.
static bool Pipe_IsFrozen | ( | void | ) | [inline, static] |
Определяет, что выбранный канал заморожен, и не может принять данные.
static void Pipe_ResetPipe | ( | const uint8_t | PipeNumber | ) | [inline, static] |
Сбрасывает нужный канал, включая банки и флаги канала.
[in] | PipeNumber | индекс канала, который будет сброшен. |
static void Pipe_SelectPipe | ( | const uint8_t | PipeNumber | ) | [inline, static] |
Выбирает канал указанного номера. Любые операции с каналом, которые не требуют номера канала, работают с текущим выбранным каналом.
[in] | PipeNumber | Индекс выбираемого канала. |
static void Pipe_SetFiniteINRequests | ( | const uint8_t | TotalINRequests | ) | [inline, static] |
Конфигурирует выбранный в настоящий момент канал, чтобы разрешить каналу принять указанное количество запросов IN, после чего канал автоматически заморозится.
[in] | TotalINRequests | общее количество запросов IN, которое канал может принять перед заморозкой. |
static void Pipe_SetInfiniteINRequests | ( | void | ) | [inline, static] |
Конфигурирует выбранный в настоящий момент канал, чтобы разрешить любое количество запросов IN.
static void Pipe_SetInterruptPeriod | ( | const uint8_t | Milliseconds | ) | [inline, static] |
Устанавливает период между прерываниями для канала типа INTERRUPT на указанное количество милисекунд.
[in] | Milliseconds | количество милисекунд между каждым опросом канала. |
static void Pipe_SetPipeToken | ( | const uint8_t | Token | ) | [inline, static] |
Устанавливает токен для выбранного в настоящий момент канала в один из токенов, указанный масками PIPE_TOKEN_*. Может использоваться на каналах типа CONTROL, чтобы разрешить двунаправленные передачи данных во время запросов управления, или на обычных каналах, чтобы разрешить полудуплексную передачу данных на устройство, которое имеет две конечные точки противоположных направлений, разделяющих один и тот же адрес конечной точки в пределах устройства.
[in] | Token | новый токен канала для установки на выбранный канал, как маска PIPE_TOKEN_*. |
static void Pipe_Unfreeze | ( | void | ) | [inline, static] |
Размораживает выбранный канал, что позволяет осуществить коммуникацию через него с подключенным устройством.
uint8_t USB_ControlPipeSize |
Глобальная переменная, показывающая максимальный размер управляющего канала по умолчанию, размещенного в устройстве по адресу 0. Эта величина устанавливается в значение, показанное дескриптором подключенного устройства, как только инициализировался интерфейс USB в режиме хоста, и устройство было подключено к шине USB.