Библиотека LUFA (раннее название MyUSB) версия 101122
|
В следующем списке - все возможные токены, которые можно задать в makefile проекта, и передать компилятору через переключатель -D, чтобы изменить код библиотеки LUFA. Эти токены могут менять поведение библиотеки, или удалить неиспользуемые возможности, чтобы съэкономить на пространстве кода в памяти flash.
Эта секция описывает токены, которые влияют на секции библиотеки LUFA, не связанные с USB.
DISABLE_TERMINAL_CODES - ( ESC-коды терминала ANSI - LUFA/Drivers/Misc/TerminalCodes.h )
Если приложение содержит управляющие коды терминала ANSI, перечисленные в TerminalCodes.h, то может понадобиться удалить их во время компиляции для использования с терминалами, у которых нет кодов управления ANSI, без модификации исходного кода. Если этот токен определен, то все коды управления ANSI приложения (из заголовка TerminalCodes.h) удаляются из исходного кода во время компиляции.
Эта секция описывает токены компиляции, которые влияют на драйверы USB, специфические для классов в библиотеке LUFA.
HID_HOST_BOOT_PROTOCOL_ONLY - ( Драйвер режима хоста HID Class )
По умолчанию, драйвер класса хоста USB HID разработан, чтобы работать с устройствами HID с использованием либо коммуникационного протокола Boot, либо репортов HID. На устройствах, которые не используют протокол репортов (например, в приложениях, где нужны только базовые функции мыши или клавиатуры, используют boot-совместимые устройства), код обработки режима протокола Report может быть удален для экономии места в скомпилированном приложении, путем задания этого токена. Когда этот токен определен, то все еще необходимо явно перевести подключенное устройство в режим протокола Boot с помощью вызова HID_Host_SetBootProtocol().
HID_STATETABLE_STACK_DEPTH=x - ( Парсер репорта HID )
Репорты HID могут содержать элемены PUSH и POP, для сохранения в стеке и получения из стека текущей таблицы состояния HID. Это позволяет для репортов сохранить таблицу состояния перед её незначительной модификацией для каждого элемента данных, и затем восстановить предыдущее состояние таблицы с минимальными усилиями. Этот токен может быть задан в ненулевое 8-битное значение, чтобы задать максимальную глубину стека состояний таблицы. Если токен не задан, то состояние по умолчанию показано в документации файла HID.h.
HID_USAGE_STACK_DEPTH=x - ( Парсер репорта HID )
Репорты HID обычно содержат много элементов USAGE, которые назначены для элементов INPUT, OUTPUT и FEATURE по очереди, когда несколько элементов заданы сразу (через элементы REPORT COUNT). Это позволяет компактным способом нескольким элементам быть заданными с различными использованиями (usage). Этот токен может быть задан в ненулевое 8-битное значение для установки максимальной глубины стека usage, показывающее максимальное количество элементов USAGE, которые могут быть временно сохранены, пока не появится следующий элемент INPUT, OUTPUT и FEATURE. Если токен не задан, то состояние по умолчанию показано в документации файла HID.h.
HID_MAX_COLLECTIONS=x - ( Парсер репорта HID )
Репорты HID обычно содержат несколько элементов COLLECTION, используемых для группирования друг с другом связанных элементов данных. Информация коллекции сохраняется отдельно в обрабатываемой структуре usage (и обращение к ней идет по элементам данных в структуре) для сохранения места. Этот токен может быть задан в ненулевое 8-битное значение для установки максимального количества элементов COLLECTION, которые могут быть обработаны парсером в результирующую структуру репорта. Если токен не задан, то состояние по умолчанию показано в документации файла HID.h.
HID_MAX_REPORTITEMS=x - ( Парсер репорта HID )
Все репорты HID содержат один или большее количество элементов INPUT, OUTPUT и/или FEATURE, описывающие данные, которые можно отправить в устройство HID и из устройства HID. Каждый элемент имеет связанные usage, битовые смещения в элементе репортов и другие связанные данные, указывающие на способ, которым хост должен интерпретировать данные репорта. Этот токен может быть задан в ненулевое 8-битное значение для установки максимального количества элементов данных, которое можно сохранить в обрабатываемую структуру репорта HID, включая элементы INPUT, OUTPUT и (если разрешены) FEATURE. Если элементов несколько (например, REPORT COUNT больше 1), каждый элемент в количестве репорта помещается отдельно в обрабатываемой таблице репорта HID. Если токен не задан, то состояние по умолчанию показано в документации файла HID.h.
HID_MAX_REPORT_IDS=x - ( Парсер репорта HID )
Репорты HID могут содержать несколько ID репортв, чтобы логически отделить сгруппированные данные устройства, одни от других - например, комбинация клавиатуры и мыши могут использовать идентификаторы ID репрота для отделения репортов клавиатуры от репортов мыши. Чтобы определить размер каждого репорта, и таким образом узнать, сколько байт нужно прочитать или записать, размер каждого репорта (IN, OUT и FEATURE) должен быть вычислен и сохранен. Этот токен может быть задан в ненулевое 8-битное значение для установки максимального количества идентификаторов ID репорта в устройстве, и их размеры вычисляются и сохраняются в результирующую обработанную структуру репорта. Если токен не задан, то состояние по умолчанию показано в документации файла HID.h.
NO_CLASS_DRIVER_AUTOFLUSH Многие из драйверов класса режима устройства и режима хоста автоматически сбрасывают (flush) любые данные, ожидающие записи в интерфейс, когда выполняется соответствующая задача обработки USB. Это обычно нужно, чтобы гарантировать, что любые поставленные в очередь данные сейчас будут отправлены как можно скорее, и новые данные будут созданы в главном цикле программы. Однако, если сброс (flush) управляется вручную программой пользователя с помощью команд *_Flush(), может быть задан в makefile проекта токен времени компиляции, чтобы запретить автоматический flush при вызове задач обработки драйвера класса USB.
Эта секция описывает токены времени компиляции, которые влияют на стек драйвера USB во всей библиотеке LUFA.
NO_STREAM_CALLBACKS - ( Поддержка пакета конечной точки , Обработка пакета канала )
Код драйвера и конечной точки, и канала содержит функции потока, позволяющие передавать массивы данных на хост или от хоста простыми одиночными вызовами функции (а не через сложные подпрограммы, заботящиеся об отправке заполненных пакетов, ожидании готовности для конечной точки/канала и т. п.). По умолчанию, эти функции потока требуют функцию обратного вызова (callback), которая выпольняется после обработки каждого байта, что позволяет приложению выполнить ранние обрывы (abort) потоковых передач. Если для приложения не нужны callback-и, они могут быть удалены путем указания токена, что уменьшает размер скомпилированного бинарника. Когда callback-и удалены, функции потока больше не принимают в качестве параметра адрес callback.
FAST_STREAM_TRANSFERS - ( Поддержка пакета конечной точки , Обработка пакета канала )
По умолчанию потоки внутренне передаются через цикл, отправка или прием одного байта на итерацию цикла, перед проверкой, что банк заполнен или пуст. Это позволяет нескольким функциям потока простым образом соединяться в цепочку, без проблем выравнивания данных. Однако это может привести к большим потерям в производительности в прилложениях, где часто используются большие потоки. Когда используется эта опция компиляции, байты отправляются или принимаются группами по 8 байт за один раз, что увеличивает производительность в ущерб увеличению использования памяти flash из-за требуемого дополнительного кода, который устраняет проблемы с выравниванием байт.
USE_STATIC_OPTIONS=x - ( Управление интерфейсом USB )
По умолчанию функция USB_Init() принимает динамические опции во время выполнения (runtime), чтобы изменить поведение библиотеки, включая разрешение регулятора напряжения USB pad, и скорость в режиме работы как устройства USB. Путем задания этой опции в маску, составленную из масок опций USB, которые обычно передаются через параметр Options функции USB_Init(), результирующий скомпилированный двойчный код можно уменьшить в размере, так как код динамических опций удаляется и заменяется статической установкой опций. Когда эта опция задана, функция USB_Init() больше не принимает параметр Options.
USB_DEVICE_ONLY - ( Управление интерфейсом USB )
Для моделей USB AVR, поддерживающих оба режима и устройства, и хоста USB, функция USB_Init() содержит параметр Mode, который указывает режим библиотеки, в который она должна быть инициализирована. Если нужен только режим устройства, код режима хоста USB может быть удален из бинарника для экономии места. Когда опция задана, функция USB_Init() больше не принимает параметр Mode. Это определение не имеет смысла на младших USB AVR, которые не поддерживают режим хоста.
USB_HOST_ONLY - ( Управление интерфейсом USB )
Тоже самое, что и USB_DEVICE_ONLY, только тут фиксируется код хоста, а не код устройства USB. Не действует на некоторых моделях USB AVR.
USB_STREAM_TIMEOUT_MS=x - ( Управление интерфейсом USB )
Когда используются функции конечной точки и/или канала потока, по умолчанию это таймаут между каждым трансфером данных, которому должны удовлетворять подключенные устройства или хосты, или функция потока прервет остальную часть передачи данных. Этот токен может быть задан в ненулевое 16-битное значение для установки периода таймаута для потоковых передач, указанного в милисекундах. Если не задан, то вместо этого используется значение по умолчанию, указанное в LowLevel.h.
NO_LIMITED_CONTROLLER_CONNECT - ( События USB )
На младших моделях USB AVR контроллер USB испытывает недостаток в событиях VBUS, чтобы определить физическое состояние соединения шины с хостом USB. Вместо событий VBUS, библиотека пытается определить состояние соединения через события приостановки (suspension) и пробуждения (wake up) шины. Однако это может быть несколько неточным, так как возможна приостановка хоста, во время которой устройство все еще подключено. Если нужен точный статус соединения, линия VBUS коннектора USB должна быть разведена на ножку порта AVR для определения её уровня, после чего глобальная переменная USB_DeviceState может быть точно установлена и события EVENT_USB_Device_Connect() и EVENT_USB_Device_Disconnect() вручную запускаются макросом RAISE_EVENT. Когда задан, этот токен запрещает автоматическое определение библиотекой состояния соединения через вышеупомянутые события приостановки и пробуждения.
NO_SOF_EVENTS - ( События USB )
По умолчанию для приложения LUFA в режиме хоста или устройства имеется событие для каждого начала фрейма USB (Start Of Frame, SOF), когда шина USB находится в активном состоянии (не suspended). Это событие можно выборочно разрешить или запретить вызовом соответствующей функции режима хоста или устройства. Когда задан этот токен времени компиляции, удаляется возможность приема событий SOF USB через события EVENT_USB_Device_StartOfFrame() или EVENT_USB_Host_StartOfFrame(), что уменьшает размер скомпилированного двоичного кода.
Эта секция описывает токены времени компиляции, которые влияют на стек драйвера USB библиотеки LUFA, когда она используется в режиме устройства USB.
USE_RAM_DESCRIPTORS - ( Дескрипторы USB )
Этот токен задается, чтобы указать драйверу USB, что все дескрипторы устройства сохраняются в RAM, а не в любой другой области памяти AVR. Дескрипторы RAM могут быть желательны в приложениях, где дескрипторы нуждаются в модификации во время выполнения (runtime).
USE_FLASH_DESCRIPTORS - ( Дескрипторы USB )
То же самое, что и USE_RAM_DESCRIPTORS, но все дескрипторы сохраняются в памяти AVR FLASH, а не в RAM.
USE_EEPROM_DESCRIPTORS - ( Дескрипторы USB )
То же самое, что и USE_RAM_DESCRIPTORS, но все дескрипторы сохраняются в памяти AVR EEPROM, а не в RAM.
NO_INTERNAL_SERIAL - ( Дескрипторы USB )
Некоторые модели AVR содержат уникальный серийный номер из 20 цифр, который можно использовать как серийный номер устройства, когда идет работа в режиме устройства USB. Это дает возможность хосту уникально идентифицировать устройство, даже если оно переносится между портами USB на том же самом компьютере, что позволяет сохранить за устройством выделенные ему ресурсы (такие как буква диска, номер COM-порта). Если такая возможность не нужна во многих приложениях, то код, выполняющий задачу чтения серийного номера, можно запретить путем определения этой опции и передачи её компилятору через переключатель -D.
FIXED_CONTROL_ENDPOINT_SIZE=x - ( Поддержка конечных точек )
По умолчанию, библиотека определяет размер конечной точки управления (в режиме работы устройства USB) путем чтения дескриптора устройства. Обычно это уменьшает размер действий библиотеки по конфигурированию, позволяя изменить значение динамически (если дескрипторы сохранены в EEPROM или RAM, а не в памяти flash), и уменьшает затраты на поддержку кода. Однако вместо этого указанный токен может быть определен в ненулевое значение для получения размера в байтах конечной точки управления, что уменьшит размер скомпилированного двоичного кода.
DEVICE_STATE_AS_GPIOR - ( Управление устройством USB )
Одна из наиболее часто используемых глобальных переменных стека - переменная USB_DeviceState, которая показывает состояние машины устройства (Device State Machine). Чтобы немного уменьшить размер кода и время доступа и модификации этой переменной, этот токен может быть задан в значение от 0 до 2, чтобы зафиксировать переменную состояния в одном из регистров ввода/вывода общего назначения (general purpose IO register) внутри AVR, зарезервированных для использовании в приложении. Когда этот токен задан, то соответствующий регистр GPIOR не должен использоваться в приложении пользователя, за исключением подразумеваемого доступа через API библиотеки.
FIXED_NUM_CONFIGURATIONS=x - ( Управление устройством USB )
По умолчанию библиотека определяет количество конфигураций, поддерживаемых устройством USB путем чтения дескриптора устройства. Это уменьшает размер действий библиотеки по конфигурированию, позволяя изменить значение динамически (если дескрипторы сохранены в EEPROM или RAM, а не в памяти flash), и уменьшает затраты на поддержку кода. Однако, количество конфигураций может быть зафиксировано этим токеном в файле makefile проекта, что уменьшит размер скомпилироанного кода в ущерб гибкости использования.
CONTROL_ONLY_DEVICE
В некоторых ограниченных приложениях устройства USB не имеют других конечных точек, кроме конечной точки управления; например, все коммуникации с устройством происходят через запросы конечной точки управления. Определение этого токена удалит несоколько возможностей, связанных с внутренним выбором и управлением конечными точками устройства, что экономит место. Обычно это удобно (немного) использовать только бутлоадерах, и лучше этого избегать.
INTERRUPT_CONTROL_ENDPOINT - ( Управление интерфейсом USB )
Некоторые приложения предпочитают не запускать регулярно задачу обработки USB_USBTask() в режиме устройства, поскольку это может значительно усложнить код. Вместо этого, когда используется режим устройства, этот токен может быть передан библиотеке через переключатель -D для того чтобы разрешить библиотеке обслуживать конечную точку управления USB полностью через аппаратные прерывения контроллера USB, асинхронно с приложением пользователя. Когда токен задан, USB_USBTask() не нужно вызывать в режиме устройства USB.
NO_DEVICE_REMOTE_WAKEUP - (Управление устройством USB )
Многие устройства не требуют использования возможности Remote Wakeup USB, которая применяется для пробуждения хоста, когда он находится в режиме сна (suspended). На этих устройствах код, необходимый для поддержки Remote Wakeup устройства, может быть запрещен определением этого токена и передачей его библиотеке через переключатель -D.
NO_DEVICE_SELF_POWER - (Управление устройством USB )
Устройства USB могут получать питание от шины USB, иметь собственное питание, либо использовать оба способа питания. Если устройство может питаться и от шины, и от собственного источника, хост может опросить устройство, чтобы определить текущий источник питания через USB_CurrentlySelfPowered. Для устройств, исключительно питающихся от шины, эта глобальная переменная и необходимый для её поддержки код может быть запрещен путем передачи этого токена библиотеке через переключатель -D.
Эта секция описывает токены времени компиляции, которые влияют на стек драйвера USB библиотеки LUFA, когда она используется в режиме хоста.
HOST_STATE_AS_GPIOR - ( Host Management )
Одна из наиболее часто используемых глобальных переменных стека - переменная USB_HostState, которая показывает состояние машины хоста (Host State Machine). Чтобы немного уменьшить размер кода и время доступа и модификации этой переменной, этот токен может быть задан в значение от 0 до 2, чтобы зафиксировать переменную состояния в одном из регистров ввода/вывода общего назначения (general purpose IO register) внутри AVR, зарезервированных для использовании в приложении. Когда этот токен задан, то соответствующий регистр GPIOR не должен использоваться в приложении пользователя, за исключением подразумеваемого доступа через API библиотеки.
USB_HOST_TIMEOUT_MS=x - ( Host Management )
Когда управляющая передача инициирована в режиме хоста к подключенному устройству, используется таймаут для прервания передачи, если подключенное устройство не смогло ответить в течение периода таймаута. Этот токен может быть указан в ненулевое 16-битное значение для установки периода таймаута для управляющих передач, указанного в милисекундах. Если токен не задан, вместо этого используется значение по умолчанию, указанное в Host.h.
HOST_DEVICE_SETTLE_DELAY_MS=x - ( Host Management )
Некоторые устройства требуют задержку до 5 секунд после того, как они подключены к шине VBUS, перед тем как может быть запущен процесс энумерации, иначе устройство не сможет корректно пройти энумерацию. Путем помещения задержки перед процессом энумерации можно удостовериться, что шина установилась в известное состояние ожидания перед началом коммуникаций с устройством. Этот токен может быть указан в ненулевое 16-битное значение для периода установки, указанного в милисекундах. Если токен не задан, вместо этого используется значение по умолчанию, указанное в Host.h.