Далее приведена информация по миграции для обновления существующих проектов, основанных на предыдущих версиях библиотеки LUFA, на новую версию релиза библиотеки. Здесь не показаны нововведения в библиотеке при каждом изменении версии, рассмотрены только вопросы, относящиеся к приведению старых проектов к совместимости с измемениями API в каждом новом релизе.
Мигрирование с 100807 на 101122
Ядро USB
- Теперь имеется новый исходный файл драйвера USB, Drivers/USB/HighLevel/EndpointStream.c. Этот исходный файл должен быть добавлен ко всем файлам makefile проектов, использующих USB драйвер LUFA, или makefile должен быть обновлен для использования нового модуля и его переменных.
- Теперь имеется новый исходный файл драйвера USB, Drivers/USB/HighLevel/PipeStream.c. Этот исходный файл должен быть добавлен ко всем файлам makefile проектов, использующих USB драйвер LUFA, или makefile должен быть обновлен для использования нового модуля и его переменных.
- Событие EVENT_USB_InitFailure() удалено, функция USB_Init() больше не может возвратиться с ошибкой; если не указан режим USB контроллер по умолчанию будет работать в режиме выбора UID.
- Константа указания режима USB перенесена в новое перечисление и переименована. Существующие проекты должны использовать эквивалентное значение в новом перечислении USB_Modes_t.
- Все заголовки драйвера класса теперь подключаются как часть стандартного главного диспетчера заголовков LUFA/Drivers/USB/USB.h, и не должны больше подключаться по отдельности. Исходные файлы драйвера класса должны все еще быть добавлены как отдельный модуль в makefile проекта, если этот драйвер используется.
Режим устройства USB
- Конечные точки ДОЛЖНЫ быть выделены в возрастающем порядке, чтобы не было повреждения банка. Проверьте, что Ваше приложение выделяет конечные точки в порядке возрастания - или если Ваше приложение использует USB драйверы класса режима устройства (Device Mode Class Drivers), удостоверьтесь, что индексы каждого экземпляра конечной точки не пересекаются с конечными точками другого интерфейса.
- Сигнатура для функции обратного вызова CALLBACK_USB_GetDescriptor() изменена, параметр "void** const DescriptorAddress" теперь "const void** const DescriptorAddress". Существующие приложения должны обновить свои сигнатуры callback для соответствия этому, и устранить любое преобразование указателей дескриптора в неконстантный указатель.
- Изменены имена специфических для класса определений типа десриптора в драйверах классов USB - обращайтесь к документации по каждому типу класса драйвера для новых имен типов дескрипторов, специфичных для класса.
- Макрос ENDPOINT_DOUBLEBANK_SUPPORTED() переименован в ENDPOINT_BANKS_SUPPORTED() и теперь возвращает общее количество банков, поддерживаемых указанной конечной точкой. Имеющийся код должен перейти к новой схеме именования, и проверить возвращаемую из макроса величину, равна ли она или больше чем 2, чтобы получить предыдущую функциональность.
- Событие EVENT_USB_Device_UnhandledControlRequest() теперь называется EVENT_USB_Device_ControlRequest(), и запускается перед (не после) внутренних обработчиков события библиотеки. Имеющийся код должен переименовать обработчики события в приложении пользователя, чтобы соответствовать новому имени события, и должен обеспечить, что новый порядок выполнения не повлияет на работу приложения.
Режим хоста USB
- Каналы ДОЛЖНЫ быть выделены в порядке возрастания, чтобы не было порчи данных банка. Проверьте, что Ваше приложение выделяет каналы в порядке возрастания - или если Ваше приложение использует USB драйверы класса режима хоста (Host Mode Class Drivers), удостоверьтесь, что индексы каждого экземпляра канала не пересекаются с другими каналами интерфейса.
- Функция PRNT_Host_SendData() теперь переименована в PRNT_Host_SendString(). Существующие приложения просто должны заменить все ссылки устаревшего имени функции на ссылки с новым именем.
- Изменены имена специфических для класса определений типа десриптора в драйверах классов USB - обращайтесь к документации по каждому типу класса драйвера для новых имен типов дескрипторов, специфичных для класса.
- Префикс функций класса хоста Still Image изменен с "SImage_" на "SI_", чтобы сохранить соответствие с остальными перечислениями, определениями типа и константами драйвера.
Мигрирование с 100513 на 100807
Компоненты библиотеки, не относящиеся к USB
- Изменена заглушка платы для драйвера Dataflash, так как функции dataflash, ранее размещенные в разделе драйвера Dataflash библиотеки, теперь перемещены в файлы, индивидуальные для каждой платы. Имеющиеся драйвера могут получить новые функции методом copy-paste из Dataflash драйвера-заглушки платы.
Ядро USB
- Теперь имеется новый исходный файл кода драйвера USB, Drivers/USB/LowLevel/Device.c. Этот исходный файл должен быть добавлен ко всем файлам makefile проектов, использующих USB драйвер LUFA, или makefile должен быть обновлен для использования нового модуля и его переменных.
- Исходный файл Drivers/USB/LowLevel/DevChapter9.c перемещен в Drivers/USB/HighLevel/DeviceStandardReq.c - поэтому должны быть обновлены все файлы makefile проектов, или makefile должен быть обновлен для использования нового модуля и его переменных.
- Исходный файл Drivers/USB/LowLevel/HostChapter9.h перемещен в Drivers/USB/HighLevel/HostStandardReq.c - поэтому должны быть обновлены все файлы makefile проектов, или makefile должен быть обновлен для использования нового модуля и его переменных.
- Исходный файл Drivers/USB/LowLevel/LowLevel.c перемещен в Drivers/LowLevel/USBController.c - поэтому должны быть обновлены все файлы makefile проектов, или makefile должен быть обновлен для использования нового модуля и его переменных.
Режим устройства USB
- Макрос USB_Device_IsRemoteWakeupSent() теперь отсутствует, так как запрос удаленного пробуждения (remote wakeup) сейчас полностью обрабатывается расширенной функцией USB_Device_SendRemoteWakeup(). Существующий код теперь может отменить любые проверки USB_Device_IsRemoteWakeupSent().
- Макрос USB_Device_IsUSBSuspended() удален, так как считается устаревшим. Вместо него существующий код должен сравнить USB_DeviceState, чтобы увидеть, что устройство в состоянии DEVICE_STATE_Suspended.
- Изменена функция CDC_Device_ReceiveByte(), и теперь возвращает целое 16-битное со знаком, где -1 означает, что данные не были приняты. Это позволяет писать более эффективный код, так как больше не нужен вызов CDC_Device_BytesReceived(), если не нужно знать точное количество принятых байт, находящихся в очереди.
Режим хоста USB
- Изменена функция CDC_Host_ReceiveByte(), и теперь возвращает целое 16-битное со знаком, где -1 означает, что данные не были приняты. Это позволяет писать более эффективный код, так как больше не нужен вызов CDC_Host_BytesReceived(), если не нужно знать точное количество принятых байт, находящихся в очереди.
- Задача CDC_Host_USBTask() теперь автоматически вызывает CDC_Host_Flush(), сбрасывая (flush) любые данные из очереди на подключенное устройство. Ручной flushing интерфейса больше не нужен, если процедуры flush должны быть синхронными с вызовами CDC_Host_USBTask().
Мигрирование с 100219 на 100513
Компоненты библиотеки, не относящиеся к USB
- Функция TWI_StartTransmission() теперь принимает период таймаута, выраженный в милисекундах, в течение которого адресуемое устройство должно ответить, или функция завершится по abort.
Режим устройства USB
- Функция USB_Init() больше не запускает sei() для разрешения глобальных прерываний, потому что приложение пользователя, возможно, должно сделать другие действия по инициализации, перед тем как все будет готово к обработке глобальных прерываний. Приложение пользователя теперь отвечает за разрешение глобальных прерываний перед либо сразу после вызова USB_Init(), чтобы обеспечить корректную работу процесса энумерации.
- Файл исходного кода USB драйвера USBInterrupt.c перемещен из LUFA/Drivers/USB/HighLevel/ в LUFA/Drivers/USB/LowLevel. Проекты должны обновить значения SRC своих makefile SRC соответствующим образом.
- Изменена сигнатура функции драйвера устройства класса HID CALLBACK_HID_Device_ProcessHIDReport(), чтобы применить новый параметр ReportType. Этот новый пареметр должен быть добавлен во все приложения пользователя, использующие драйвер режима устройства класса HID, но может игнорироваться, если от хоста к устройству не используются репорты FEATURE HID.
Режим хоста USB
- Функция USB_Init() больше не запускает sei() для разрешения глобальных прерываний, потому что приложение пользователя, возможно, должно сделать другие действия по инициализации, перед тем как все будет готово к обработке глобальных прерываний. Приложение пользователя теперь отвечает за разрешение глобальных прерываний перед либо сразу после вызова USB_Init(), чтобы обеспечить корректную работу процесса энумерации.
- Файл исходного кода USB драйвера USBInterrupt.c перемещен из LUFA/Drivers/USB/HighLevel/ в LUFA/Drivers/USB/LowLevel. Проекты должны обновить значения SRC своих makefile SRC соответствующим образом.
- Изменена сигнатура функции драйвера хоста класса HID HID_Host_SendReportByID(), чтобы применить новый параметр ReportType. Имеющиеся вызовы этой функции должны заменить REPORT_ITEM_TYPE_Out этим значением параметра.
Мигрирование с 091223 на 100219
Компоненты библиотеки, не относящиеся к USB
- Из-за того, что некоторые каналы ADC не идентичны маскам ADC MUX их выбора для одиночных преобразований на некоторых моделях AVR, драйвер ADC теперь имеет явные маски для каждого стандартного канала ADC (см. ADC Driver - LUFA/Drivers/Peripheral/ADC.h). Эти маски должны использоваться, когда вызываются функции ADC, чтобы обеспечить их правильную работу на всех моделях AVR. Имейте в виду, что функция ADC_SetupChannel() является исключением из этого правила, и должна всегда вызываться с номером канала, а не с маской канала.
Режим хоста USB
- Подпрограммы передачи и приема драйвера хоста класса MIDI теперь работают с упакованными событиями, где несколько событий MIDI могут быть упакованными в один пакет USB. Это означает, что отправка событий MIDI теперь задерживается, пока банк отправки канала MIDI не заполнится. Чтобы отменить это новое поведение и вернуться к старому алгоритму, приложение пользователя может вручную делать сброс (flush) на устройство поставленных в очередь событий путем вызова MIDI_Host_Flush().
- Функция Pipe_IsEndpointBound() теперь принимает во внимание направление конечной точки, путем проверки старшего бита (MSB) адреса конечной точки, который установлен, чтобы показать конечные точки IN. Если нужна предыдущая функциональность, где направление не принималось в расчет, маскируйте адрес конечной точки токеном PIPE_EPNUM_MASK перед вызовом Pipe_IsEndpointBound().
Режим устройства USB
- Подпрограммы передачи и приема драйвера устройства класса MIDI теперь работают с упакованными событиями, где несколько событий MIDI могут быть упакованными в один пакет USB. Это означает, что отправка событий MIDI теперь задерживается, пока банк отправки конечной точки MIDI не заполнится. Чтобы отменить это новое поведение и вернуться к старому алгоритму, приложение пользователя может вручную делать сброс (flush) на хост поставленных в очередь событий путем вызова MIDI_Device_Flush().
Мигрирование с 091122 на 091223
Режим хоста USB
- Функции драйвера класса хоста Still Image SI_Host_USBTask() и SI_Host_ConfigurePipes() имели неверные имена, и теперь называются SImage_Host_USBTask() и SImage_Host_ConfigurePipes() соответственно.
- Значение перечисления HOST_SENDCONTROL_DeviceDisconnect переименовано в HOST_SENDCONTROL_DeviceDisconnected, чтобы соответствовать остальным кодам ошибок библиотеки.
- Предназначения (usage) элемента парсера HID больше не содержат минимальные и максимальные значения, поскольку это нарушает спецификацию HID. Вместо этого значения распределены равномерно по каждому элементу как его значение usage, чтобы гарантировать, что все элементы можно отделить друг от друга.
Режим устройства USB
- Функция обратного вызова CALLBACK_HID_Device_CreateHIDReport() драйвера класса устройства HID теперь имеет новый параметр ReportType для указания типа генерируемого репорта. Существующие приложения могут просто добавить и игнорировать этот добавочный параметр.
Мигрирование с 090924 на 091122
Режим хоста USB
Мигрирование с 090810 на 090924
Компоненты библиотеки, не относящиеся к USB
- Функция ADC_Off() переименована в ADC_ShutDown(), чтобы соответствовать остальной части библиотеки.
- Изменены параметры подпрограммы SPI_Init(), так что теперь можно установить полярность тактов и режимы выборки данных. См. документацию функции SPI_Init() для получения подробностей.
- Подпрограмма Dataflash_Init() больше не инициализирует шину SPI - шина SPI должна быть инициализирована вручную вызовом SPI_Init() перед использованием драйвера Dataflash.
Режим хоста USB
- Изменены поведение и параметры функции USB_GetDeviceConfigDescriptor(); пользователю нужно выделить максимально допустимый буфер, и передать его размер функции. Это позволит одним вызовом функции запросить, проверить размер и корректность дескриптора конфигурации, всесто того чтобы приложение пользователя выполнило эти промежуточные шаги.
- Парсер репорта HID теперь требует обязательный callback в коде пользователя, чтобы отфильтровать в обрабатываемую структуру репорта HID только те элементы, которые нужны приложению, чтобы экономить RAM. См. CALLBACK_HIDParser_FilterHIDReportItem().
- Парсер репорта HID теперь всегда парсит FEATURE и всегда игнорирует элементы данных-константы - токены времени компиляции HID_ENABLE_FEATURE_PROCESSING и HID_INCLUDE_CONSTANT_DATA_ITEMS теперь не оказывают влияния.
- Удален токен времени компиляции USE_NONSTANDARD_DESCRIPTOR_NAMES - теперь имеются отдельные структуры USB_Descriptor_* и USB_StdDescriptor_* для обоих вариантов именования (LUFA и стандартизованный), так что их оба можно и использовать в одном проекте. Для существующих проектов, использующих стандартизованные имена, измените весь код для использования вариантов USB_StdDescriptor_*.
Режим устройства USB
- Удален токен времени компиляции USE_NONSTANDARD_DESCRIPTOR_NAMES - теперь имеются отдельные структуры USB_Descriptor_* и USB_StdDescriptor_* для обоих вариантов именования (LUFA и стандартизованный), так что их оба можно и использовать в одном проекте. Для существующих проектов, использующих стандартизованные имена, измените весь код для использования вариантов USB_StdDescriptor_*.
Мигрирование с 090605 на 090810
Все изменения
- "Simple Scheduler" (Простой Планировщик) устарел, так как он был несколько больше, чем абстрактный цикл, и это вызывало большую путаницу. Вместо этого приложения, использующие шедулер, должны переключиться к регулярным циклам. Код шедулера будет удален в будущем релизе.
- "Dynamic Memory Block Allocator" (динамический выделитель блока памяти) удален, так как он не используется в библиотеке (и не связан с ней) LUFA, и никогда не используется в приложениях пользователя. Библиотека аллокатора доступна на вебсайте автора для тех, кто все еще использует её в своих приложениях.
Компоненты библиотеки, не относящиеся к USB
- Макрос атрибута функции ATTR_NOINLINE переименован в ATTR_NO_INLINE, чтобы соответствовать остальным именам макросов атрибутов функций.
Демонстрационные приложения библиотеки
- Большинство демок теперь имеют соответствующую реализацию драйвера класса, которая использует новые внутренние драйвера класса для стандартных классов USB. Это позволяет ускорить разработку устройства и хоста, и должно предпочтительно использоваться вместо низкоуровнего API, где возможно автоматическое распространение этого исправления на драйвера классов всех приложений, использующих эти драйвера LUFA, с каждым новым релизом библиотеки.
Режим хоста USB
- Модуль HIDParser.c перенесен из LUFA/Drivers/USB/Class/ в LUFA/Drivers/USB/Class/Host/.
- Функция USB_GetDeviceConfigDescriptor() теперь требует нужный индекс конфигурации в пределах устройства в качестве первого параметра, чтобы добавить поддержку устройств с несколькими конфигурациями. Имеющийся код должен использовать индекс конфигурации 1, чтобы показать первый дескриптор конфигурации в пределах устройства.
- Нестандартное состояние хоста "Ready" (готов) удалено. Существующий код HOST_STATE_Configured должен быть перенесен в конец существующего состояния HOST_STATE_Addressed state, и существующий код состояния HOST_STATE_Ready должен быть перенесен в состояние HOST_STATE_Configured.
- Глобальная переменная USB_IsConnected удалена, так как её основное назначение туманно. Вместо этого проверяйте USB_HostState, чтобы удостовериться, что хост находится в нужном состоянии.
- Изменены имена событий USB и условие их срабатывания, чтобы правильно разделить события режима хоста от событий режима устройства. См. страницу События USB для подробностей по новым именам событий и условиям их запуска.
Режим устройства USB
- Функция CALLBACK_USB_GetDescriptor() теперь принимает дополнительный параметр, чтобы указать расположение памяти дескриптора, чтобы можно было использовать смешанные места расположения дескрипторов (RAM, FLASH, EEPROM). Можно вернуть старую функциональность путем задания токена USE_FLASH_DESCRIPTORS в makefile проекта, чтобы разместить все дескрипторы в памяти FLASH и удалить дополнительный параметр функции.
- Глобальная переменная USB_IsSuspended удалена - вместо неё проверяйте USB_DeviceState на состояние DEVICE_STATE_Suspended.
- Глобальная переменная USB_IsConnected удалена, так как её основное назначение туманно. Вместо этого проверяйте USB_DeviceState, чтобы удостовериться, что устройство находится в нужном состоянии.
- События VBUS удалены, так как они уже представлены пользователю через события USB_Connect и USB_Disconnect.
- Изменены имена событий USB и условие их срабатывания, чтобы правильно разделить события режима хоста от событий режима устройства. См. страницу События USB для подробностей по новым именам событий и условиям их запуска.
Мигрирование с 090510 на 090605
Режим устройства USB
- Отброшена поддержка прерываний не управляющих конечных точках данных, поскольку в её реализации слишком много проблем. Все имеющиеся проекты, использующие прерывания на неуправляющих конечных точках, должны переключиться к их опросу (polling). Для прерываний управления библиотека может автоматически обработать конечные точки управления через прерывания путем компилирования с заданным токеном INTERRUPT_CONTROL_ENDPOINT.
- Макрос DESCRIPTOR_ADDRESS() удален. Приложения пользователя должны использовать нормальные преобразования типа для получения адреса памяти, где размещен дескриптор.
- Система событий библиотеки переписана, так что макросы удалены, чтобы позволить применить более чистый код пользователя. Для подробностей по новому API см. События USB.
- Макрос STREAM_CALLBACK() удален. Приложение пользователя должно заменить все применения этого макроса обычными сигнатурами функции, не принимающей аргументов и возвращающей значение uint8_t.
- Событие Event_DeviceError() больше не существует, поскольку собственная вызывающая сторона (нелинкованная функция USB_GetDescriptor()) теперь выдает ошибку компиляции в отличие от ошибки времени выполнения (runtime error). Файл StdDescriptors.c больше не существует и должен быть удален из всех makefile проектов.
- Функция USB_GetDescriptor() переименована в CALLBACK_USB_GetDescriptor(), чтобы соответствовать новым префиксам функции CALLBACK_ для функций, которые *должны* быть реализованы в приложении пользователя.
Режим хоста USB
- Отброшена поддержка прерываний не управляющих каналах данных, поскольку в её реализации слишком много проблем. Все имеющиеся проекты, использующие прерывания на неуправляющих каналах, должны переключиться к их опросу (polling).
- Система событий библиотеки переписана, так что макросы удалены, чтобы позволить применить более чистый код пользователя. Для подробностей по новому API см. События USB.
- Макрос STREAM_CALLBACK() удален. Приложение пользователя должно заменить все применения этого макроса обычными сигнатурами функции, не принимающей аргументов и возвращающей значение uint8_t.
- Макрос DESCRIPTOR_COMPARATOR() удален. Приложения пользователя должны заменить все применения этого макроса обычными сигнатурами функции, принимающей указатель void на дескриптор для проверки, и возвращающей значение uint8_t.
Мигрирование с 090401 на 090510
Все изменения
- Заголовок ButtLoadTag.h удален, так как он никогда не используется по своему назначению. Проекты должны либо удалить все элементы BUTTLOADTAG, либо загрузить и распаковать заголовок ButtLoadTag.h из проекта ButtLoad.
- Папка Drivers/AT90USBXXX переменована в Drivers/Peripheral.
- Драйвер Serial_Stream переименован в SerialStream, чтобы соответствовать остальной схеме именования библиотеки.
- Драйвер HWB изменен на драйвер Buttons. См. документацию драйвера платы Buttons для информации по новому API.
Двухролевой режим
- Событие USB_PowerOnFail переменовано в USB_InitFailure.
- Функции в OTG.h переименованы, чтобы лучше соответствовать новому API библиотеки. См. для подробностей функции в OTG.h.
Демонстрационные приложения библиотеки
- Большинство демок, бутлоадеров и приложений получили значительные изменения по сравнению с предыдущими версиями. Приложения, созданные на уснове любых демонстрационных примеров библиотеки, должны быть обновлены на последние версии.
Режим устройства USB
- Удален макрос Endpoint_ClearCurrentBank(), и заменен теперь макросами Endpoint_ClearIN(), Endpoint_ClearOUT(). См. документацию Endpoint.h для подробностей по новым макросам поддержки конечной точки.
- Макрос Endpoint_ReadWriteAllowed() переименован в Endpoint_IsReadWriteAllowed(), чтобы лучше соответствовать остальной схеме именования в API.
- Макросы Endpoint_IsSetupINReady() и Endpoint_IsSetupOutReceived() переименованы в Endpoint_IsINReady() и Endpoint_IsOUTReceived() соответственно.
- Макрос Endpoint_IsSetupReceived() переименован в Endpoint_IsSETUPReceived().
- Макрос Endpoint_ClearSetupReceived() переименован в Endpoint_ClearSETUP().
- Все псевдонимы read/write/discard (чтение/запись/отбрасывание) конечной точки, которые не имели явного спецификатора порядка (endianness) байт (такие как Endpoint_Read_Word()) удалены для ясности. Существующие проекты должны использовать суффикс "_LE" на этих вызовах, который явно использует версии Little Endian.
- Событие USB_UnhandledControlPacket больше не имеет каких-либо параметров. Код пользователя больше не должен пытаться читать в остатке заголовка Control Request (запрос управления), так как все данные заголовка Control Request теперь предварительно загружаются библиотекой и доступны в структуре USB_ControlRequest.
- Токен FEATURELESS_CONTROL_ONLY_DEVICE переименован в CONTROL_ONLY_DEVICE.
- STATIC_ENDPOINT_CONFIGURATION больше не применяема, так как библиотека будет применять эту оптимизацию автоматически, когда это подходит.
- В значениях из перечислений Endpoint_Stream_RW_ErrorCodes_t и Endpoint_ControlStream_RW_ErrorCodes_t удалена часть их имен "ERROR_".
Режим хоста USB
- Функция USB_Host_SendControlRequest() больше не выбирает автоматически канал управления (pipe 0), чтобы позволить его использование наряду с другими типами каналов управления. Нужно обращать внимание, чтобы убедиться, что всегда выбран канал управления (Control pipe), перед тем как вызывается функция - в существующих проектах, где идет работа с каналом управления.
- Задача поддержки хоста USB теперь сохраняет и восстанавливает текущий выбранный канал перед и после запуска задачи. Проектам больше не нужно делать это вручную, когда они вызывают задачу поддержки USB
- Макрос Pipe_ClearCurrentBank() удален, и теперь заменен на макросы Pipe_ClearIN(), Pipe_ClearOUT(). См. документацию Pipe.h для подробностей по новым макросам поддержки канала.
- Макрос Pipe_ReadWriteAllowed() переименован в Pipe_IsReadWriteAllowed(), чтобы лучше соответствовать схеме именования остальной части API.
- Макросы Pipe_IsSetupINReceived() и Pipe_IsOutReady() переименованы в Pipe_IsINReceived() и Pipe_IsOUTReady() соответственно.
- Новый макрос Pipe_ClearSETUP() должен использоваться для отправки транзакций SETUP, а не предыдущий макрос Pipe_ClearSetupOUT().
- Макрос Pipe_IsSetupSent() переименован в Pipe_IsSETUPSent().
- Макрос Pipe_ClearSetupSent() больше не имеет приложений и должен быть удален.
- Все псевдонимы read/write/discard (чтение/запись/отбрасывание) канала, которые не имели явного спецификатора порядка (endianness) байт (такие как Pipe_Read_Word()) удалены для ясности. Существующие проекты должны использовать суффикс "_LE" на этих вызовах, который явно использует версии Little Endian.
- Макрос Host_IsResetBusDone() переименован в Host_IsBusResetComplete().
- Функции Pipe_Ignore_Word() и Pipe_Ignore_DWord() переменованы в Pipe_Discard_Word() и Pipe_Discard_DWord(), чтобы соответствовать остальной части API канала.
- Больше не нужно вручную подключать заголовки из LUFA/Drivers/USB/Class, так как они теперь подключаются вместе с остальными заголовками USB, когда подключается заголовок LUFA/Drivers/USB/USB.h.
- Функции в заголовке ConfigDescriptor.h больше не имеют "Host_" как составной части в именах.
- ProcessHIDReport() переименована в USB_ProcessHIDReport(), GetReportItemInfo() переименована в USB_GetHIDReportItemInfo(), и SetReportItemInfo() переименована в USB_GetHIDReportItemInfo().
- Значения перечислений DSearch_Return_ErrorCodes_t и DSearch_Comp_Return_ErrorCodes_t имеют свои соответствующие префиксы "Descriptor_Search" и "Descriptor_Search_Comp" измененными на все заглавные буквы.
- Глобальная переменная USB_HostRequest переименована в USB_ControlRequest, и используется также в режиме устройства. Структура USB_Host_Request_Header_t переименована в USB_Request_Header_t.
- Из имен значений перечисления Pipe_Stream_RW_ErrorCodes_t удалена порция имени "ERROR_".
Мигрирование с 090209 на 090401
Все изменения
- Проекты LUFA теперь должны предоставить сырую тактовую частоту (которая имеется перед всеми прескалерами) как константу времени компиляции "F_CLOCK", заданную в makefile проекта и передаваемую компилятору через переключатель -D.
- Цели makefile программирования EEPROM для FLIP и dfu-программатора больше не программируют данные FLASH в дополнение к записи данных EEPROM в устройство. Если программируются оба вида памяти, то нужно вызывать цели программирования EEPROM и FLASH.
- Так как макрос avr-libc macro был исправлен в недавних дистрибутивах avr-libc, удален макрос SetSystemClockPrescaler(). Вместо него на недавних дистрибутивах подключите <avr/power.h> и вызовите clock_prescale_set(clock_div_1).
Демонстрационные приложения библиотеки
- Демо USBtoSerial теперь отбрасывает все данные, когда он не подключен к хосту, а не буферизирует их для последующей передачи.
- У большинства демок, бутлоадеров и приложений скорректирован код обработки запроса управления, чтобы правильно отправлять стадию статуса всех обрабатываемых запросов. Если Вы используете код, основанный на одном из демо библиотеки, бутлоадерах или приложениях, Вы должны обновить его на код последних ревизий.
Компоненты библиотеки, не относящиеся к USB
Режим устройства USB
- Токен времени компиляции NO_CLEARSET_FEATURE_REQUEST переименован в FEATURELESS_CONTROL_ONLY_DEVICE, и эта функция расширена для удаления запросов Get Status части 9 для дальнейшего уменьшения размера кода. На всех приложениях, использующих токен времени компиляции NO_CLEARSET_FEATURE_REQUEST, его можно заменить на токен FEATURELESS_CONTROL_ONLY_DEVICE, который не потребует будущих модификаций.
Мигрирование с 081217 на 090209
Режим устройства USB
- Константа ENDPOINT_MAX_ENDPOINTS переименована в более подходящее имя ENDPOINT_TOTAL_ENDPOINTS.
- Таймаут по умолчанию потока USB_STREAM_TIMEOUT_MS увеличен до 100 мс. Это значение при необходимости можно отменить в makefile пользователя, чтобы восстановить предыдущее значение таймаута 50 мс.
Режим хоста USB
- Константа PIPE_MAX_ENDPOINTS переименована в более подходящее имя PIPE_TOTAL_ENDPOINTS.
- Таймаут по умолчанию потока USB_STREAM_TIMEOUT_MS увеличен до 100 мс. Это значение при необходимости можно отменить в makefile пользователя, чтобы восстановить предыдущее значение таймаута 50 мс.
- Событие USB_DeviceEnumerationFailed теперь содержит второй параметр "SubErrorCode", дающий код ошибки функции, которая завершилась с ошибкой.
- Константа The HID_PARSE_Sucessful из перечисления скорректирована в HID_PARSE_Successful.
Компоненты библиотеки, не относящиеся к USB
- Предыдущая функциональность SPI_SendByte() теперь содержится в SPI_TransferByte(). SPI_SendByte() теперь отбрасывает возвращаемый байт для ускорения работы, и является комплементарной к новой функции SPI_ReceiveByte(). Если нужна двунаправленная передача SPI, вызовы SPI_SendByte() должны быть заменены на SPI_TransferByte().
- Драйвер последовательного порта теперь явно устанавливает линию Tx как выход, и разрешает внутренний нагрузочный резистор чипа pull-up на линии Rx.
- Функции Serial_Init() и SerialStream_Init() теперь принимают второй параметр DoubleSpeed, который указвает, что USART должен быть инициализирован в режиме двойной скорости - полезно в некоторых случаях, чтобы достигнуть скоростей, обычно невозможных на указанной частоте тактов AVR.
Демонстрационные приложения библиотеки
- Большинство демок библиотеки усовершенствованы и/или в них скорректированы ошибки. Пользователи всех демок должны обновить свой базовый код до последних версий демо.
Мигрирование с V1.5.3 на 081217
Все изменения
- Имя проекта библиотеки MyUSB изменено на LUFA (Lightweight Framework for USB AVRs, облегченная рабочая среда для USB AVR). Все ссылки на MyUSB, включая имена макросов, изменены на LUFA.
Демонстрационные приложения библиотеки
- Подпрограмма ReconfigureUSART() в демо USBtoSerial не вызывалась после того, как новые параметры кодирования в линии были установлены хостом. Проекты, построенные на коде USBtoSerial, должны обновиться на последнюю версию.
- Парсер HID теперь поддерживает несколько репортов (на одной конечной точке) на устройствах HID. Демки MouseHostWithParser и KeyboardHostWithPaser теперь используют обновленные функции API, чтобы они корректно работали на таких устройствах. Проекты, основанные любом демонстрационном примере "WithParser", должны быть обновлены до последнего кода.
- Демо RNDIS стека TCP модифицировано, так чтобы соединения могли правильно закрываться. Все еще не рекомендуется, чтобы стек TCP/IP демо MyUSB RNDIS использовался для чего-нибудь, кроме как только для демонстрации, поскольку это неполная и несовместимая со стандартом реализация.
Компоненты библиотеки, не относящиеся к USB
Режим устройства USB
- Удален токен времени компиляции MANUAL_PLL_CONTROL, и заменен маской USB_OPT_MANUAL_PLL для использования в параметре Options функции USB_Init().
- Вызов USB_Init() теперь принуждает полный сброс интерфейса USB и энумерацию, даже если интерфейс USB сейчас инициализирован.
- Прерывания теперь запрещены, когда обрабатываются запросы уравления, чтобы обойти проблемы с прерываниями, из-за которых код обработки запроса библиотеки или пользователя превышает строгие требования ограничения времени USB на передачах управления.
- События USB Reset теперь сбрасывают и запрещают все конечные точки устройства. Если код пользователя зависит от того, что конечные точки остаются сконфигурированными после события Reset, он должен быть изменен на явную реинициализацию всех пользовательских конечных точек.
- Прототип функции GetDescriptor изменен, поскольку возвращаемое значение было избыточным. Функция теперь возвращает размер дескриптора, в отличие от передачи его обратно через параметр, или возвращает NO_DESCRIPTOR, если указанный дескриптор не существует.
- Макрос NO_DESCRIPTOR_STRING переименован на NO_DESCRIPTOR, и теперь также используется как возможное значение возврата для функции GetDescriptor.
Режим хоста USB
- Удален токен времени компиляции MANUAL_PLL_CONTROL, и заменен маской USB_OPT_MANUAL_PLL для использования в параметре Options функции USB_Init().
- Парсер репорта HID теперь поддерживает несколько идентификаторов Report ID. Подпрограммы парсера репорта HID GetReportItemInfo() и SetReportItemInfo() теперь возвращают значение типа boolean, которое установлено, если указанный элемент репорта найден в текущем репорте. Если репорт отправляется на устройство с несколькими репортами, первый байт репорта автоматически устанавливается в ID репорта указанного элемента репорта.
- Вызов USB_Init() теперь принуждает полный сброс интерфейса USB и энумерацию, даже если интерфейс USB сейчас инициализирован.
Мигрирование с V1.5.2 на V1.5.3
Демонстрационные приложения библиотеки
- Ранее все демки содержали строковый дескриптор серийного номера, целиком заполненный нулями. Серийный номер нужен для устройста Mass Storage, или для устрйств, которые сохраняют свои настройки или выделенные ресурсы при перемещении между портами USB на одной машине PC. Люди, которые на поменяли значение серийного номера, получат конфликты, поэтому дескриптор серийного номера был удален отовсюду, кроме демо Mass Storage demo, которому нужен серийный номер.
- Демки AudioOut и AudioIn ранее не заглушали свои конечные точки, когда хост деактивировал их. Проекты, построенные на любом из этих демо, должны обновиться к последней версии кода.
- Макрос FEATURE_ENDPOINT переименован на FEATURE_ENDPOINT_HALT, и теперь корректно документирован.
- Демо MassStoreHost содержало ошибки, которые вызывали случайное зависание с некоторыми устройствами. Проекты, построенные на коде MassStoreDemo, должны быть обновлены на последнюю версию.
- Конечная точка типа Interrupt на демках, основанных на CDC, ранее имела интервал опроса 0x02, который вызывал проблемы на некоторых системах Linux. Интервал был изменен на 0xFF, и проекты, основанные на демках CDC, должны быть обновлены на последнюю версию кода.
- Демки клавиатуры и мыши HID ранее были не совместимы с режимом загрузки (boot). Чтобы разрешить поддержку режима загрузки, проекты, основанные на демках клавиатуры и мыши (или их производных) должны обновиться к последнему коду.
- Демо Mass Storage ранее было несовместимо со стандартами. Проекты, основанные на демо Mass Storage, должны обновиться на последнюю версию кода.
- USART не переконфигурировался после того, как хост отправил новые установки кодирования линии в демо USBtoSerial. Это былоThis was раннее обнаружено и исправлено, но изменения потерялись. Проекты, основанные на демо USBtoSerial, должны обновиться на последнюю версию кода.
Режим устройства USB
- Конечные точки функций неуправляющих потоков теперь имеют таймаут по умолчанию 50 мс между пакетами в потоке. Если таймаут превышен, функция возвратит новое значение ошибки ENDPOINT_RWSTREAM_ERROR_Timeout. Значение таймаута может быть изменено путем задания USB_STREAM_TIMEOUT_MS в makefile проекта на нужную длительность таймаута в милисекундах.
- Вместо возврата фиксированных значений доступны флаги, показывающие разрешено ли сейчас Remote Wakeup на устройстве и/или имеет ли оно собственное питание, которые устанавливаются новыми макросами USB_RemoteWakeupEnabled и USB_CurrentlySelfPowered. Для подробностей см. документацию файла DevChapter9.h.
- Все функции потока конечной точки теперь требуют дополнительный параметр Callback. Существующий код может быть обновлен либо до поддержки NO_STREAM_CALLBACK в качестве дополнительного параметра, или запретом callback-ов потока целиком передачей компилятору токена NO_STREAM_CALLBACKS через переключатель -D.
Режим хоста USB
- Функции канала неуправляющих потоков теперь имеют таймаут по умолчанию 50 мс между пакетами в потоке. Если таймаут превышен, функция возвратит новое значение ошибки PIPE_RWSTREAM_ERROR_Timeout. Значение таймаута может быть изменено путем задания USB_STREAM_TIMEOUT_MS в makefile проекта на нужную длительность таймаута в милисекундах.
- CollectionPath_t переименован в HID_CollectionPath_t для лучшего соответствия другим структурам парсера HID.
- Все функции потока канала теперь требуют дополнительный параметр Callback. Существующий код может быть обновлен либо до поддержки NO_STREAM_CALLBACK в качестве дополнительного параметра, или запретом callback-ов потока целиком передачей компилятору токена NO_STREAM_CALLBACKS через переключатель -D.
Мигрирование с V1.5.1 на V1.5.2
Демонстрационные приложения библиотеки
- Приложение демо RNDIS обновлено, чтобы оно заработало на Linux с ранней реализацией спецификации RNDIS, которая вела себя нестандартно. Проекты, основанные на этом демо, должны обновиться к последней версии кода.
- В этом релизе исправлено несколько багов бутлоадера класса DFU. Рекомендуется, где это возможно, обновить существующие устройства на последнюю версию кода бутлоадера.
Мигрирование с V1.5.0 на V1.5.1
Демонстрационные приложения библиотеки
- Демо USBtoSerial было неправильным в релизе 1.5.0 из-за некорректного опроса регистра вместо глобального флага "Transmitting". Изменение вернулось в этом релизе. Проекты, основанные на этом демо, должны обновиться к последней версии кода.
- Демки класса HID не реализуют обязательный запрос GetReport класса HID. Проекты, основанные на демках HID, должны обновиться к последней версии кода.
- Демки класса HID некорректно рапортуют о себе, поскольку boot-протокол разрешен на устройствах HID в своих дескрипторах. Проекты, основанные на демках HID, должны обновиться к последней версии кода.
- Демо MIDI-устройства имели некорректные дескрипторы интерфейса AudioStreaming. Проекты, основанные на демо MIDI, должны обновиться к последней версии кода.
- Демо AudioOut не переводило корректно в третье состояние ножки динамика, когда отключалось USB, что вызывало потерю энергии питания. Проекты, основанные на демо AudioOut, должны обновиться к последней версии кода.
Мигрирование с V1.4.1 на V1.5.0
Демонстрационные приложения библиотеки
- Предыдущие версии демок библиотеки имели в дескрипторах некорректно закодированные в BCD номера версии. Чтобы обойти такие ошибки в будущем, добавлен макрос VERSION_BCD в файл StdDescriptors.h. Существующие проекты должны как минимум вручную скорректировать номера версии в формате BCD, или желательно обновить дескрипторы, чтобы закодировать номер версии в формат BCD с использованием нового макроса.
- Обязательный запрос GetReport, специфичный для класса, был случайно опущен в предыдущих версиях демок, основанных на классе Human Interface Device (HID). Это было исправлено, и любые проекты пользователя, основанные на демках HID, должны быть обновлены соответствующим образом.
- Демки CDC теперь корректно отправляют пустой пакет сразу после полного пакета, чтобы закончить передачу. Ошибки в выполнении этого действия в проектах, которые часто отправляют полные пакеты, вызовут проблемы буферизирования операционной системы хоста. Во всех проектах CDC пользователя рекомендуется обновить подпрограммы передачи тем же способом, как и демки CDC библиотеки.
- Предыдущие версии, работали с конечной точкой/каналом по прерываниям, не сохраняли и не восстанавливали правильным образом выбранные в настоящий момент конечную точку/канал, когда запускается ISR. Это исправлено - проекты пользователя, основанные на демках, работающих по прерываниям, должны быть также обновлены, чтобы правильно сохранять и восстанавливать выбранную конечную точку/канал.
Компоненты библиотеки, не относящиеся к USB
- Заголовочные файлы Atomic.h и ISRMacro.h, расположенные в MyUSB/Common, удалены, так как библиотека теперь совместима только с версиями библиотеки avr-libc более новыми, чем те, в которых не было функционала удаленных заголовков.
Режим устройства USB
- Функция GetDescriptor (см. StdDescriptors.h) теперь имеет новый прототип с измененными именами параметров и функций. В существующих проектах нужно будет обновить реализацию GetDescriptor, чтобы отражать новое API. Ранее раздельные параметры Type и Index теперь передаются функции как оригинальное значение параметра wValue, чтобы соответствовать спецификации USB, в которой параметр wIndex не тот же самый, что и бывший ранее параметр Index.
- Событие USB_UnhandledControlPacket (см. Events.h) теперт имеет новые имена параметров, чтобы соответствовать официальной спецификации USB. Имеющийся код нужно изменить для использования новых имен параметров.
- Событие USB_CreateEndpoints (см. Events.h) переименовано в USB_ConfigurationChanged, потому что это имя является более подходящим. Это событие запускается точно так же, как и событие с предыдущим именем, так что нужно всего лишь изменить имя события в проекте пользователя.
- Структура USB_Descriptor_Language_t теперь отсутствует в StdDescriptors.h, так как это был псевдодескриптор, смоделированный на строковом дескрипторе. Структура заменена на действительный дескриптор типа USB_Descriptor_String_t, как показано в спецификации USB, и таким образом, весь код устройства должен быть соответственно обновлен.
- Имена в некоторых макросов конечной точки изменены, чтобы лучше соответствовать с остальной частью библиотеки, без изменений в реализации. Это означает, что существующий код можно изменить для использования новых имен макросов, ни на что больше не обращая внимания. Новые имена макросов см. в Endpoint.h.
- Предыдущая версия демо MassStorage имела некорректное значение в структуре SCSI_Request_Sense_Response_t, названной SenseData в файле SCSI.c, которое вызывало некоторые проблемы на некоторых хостах. Проекты пользователя, основанные на этом демо, должны скорректировать значение структуры, чтобы сохранить совместимость с несколькими платформами (операционными системами).
- По умолчанию, структуры дескриптора используют официальные имена спецификации USB для своих элементов. Предыдущие версии библиотеки использовали нестандартные (но более подробные) имена, которые все еще можно использовать в текущем и будущих релизах, когда разрешена корректная опция времени компиляции. Для подробностей см. документацию файла StdDescriptors.h.
Режим хоста USB
- Переименованы элементы структуры USB_Host_Request_Header_t в файле HostChapter9.h (используется для выдачи запросов управления) для соответствия именам официальной спецификации USB для запросов. Имеющийся код нужно обновить для использования новых имен.
- Имена некоторых макросов канала изменены для большей совместимости с остальной частью библиотеки, без изменений реализации. Это означает, что существующий код можно изменить для использования новых имен макросов, ни на что больше не обращая внимания. См. новые имена макросов в файле Pipe.h.
- По умолчанию, структуры дескриптора используют официальные имена спецификации USB для своих элементов. Предыдущие версии библиотеки использовали нестандартные (но более подробные) имена, которые все еще можно использовать в текущем и будущих релизах, когда разрешена корректная опция времени компиляции. Для подробностей см. документацию файла StdDescriptors.h.
- Изменены имена макросов в Host.h для управления генерацией SOF, см. документацию модуля Host.h для новых имен макросов.
Двухролевой режим
- Заголовочный файл OTG.h исправлен, чтобы его макросы теперь выполняли установленные для них функции. Любые существующие проекты, использующие пользовательские заголовки, чтобы исправить неправильный хедер OTG, должны быть теперь изменены, чтобы использовать снова заголовок из библиотеки.
- Событие USB_DeviceEnumerationComplete (см. Events.h) теперь также запускается в режиме устройства, когда хост закончил энумерацию устройства. Проекты, полагающиеся на событие, запускающееся только в режиме хоста, должны быть обновлены, так чтобы действия по событию происходили только когда глобальная переменная USB_Mode установлена в значение USB_MODE_HOST.