Библиотека LUFA (раннее название MyUSB) версия 101122
|
Data Structures | |
struct | HID_MinMax_t |
Структура элемента репорта парсера HID для минимума и максимума. More... | |
struct | HID_Unit_t |
Структура элемента репорта юнита для парсера HID. More... | |
struct | HID_Usage_t |
Структура элемента использования для парсера репорта HID. More... | |
struct | HID_CollectionPath_t |
Структура элемента пути коллекции парсера репорта HID. More... | |
struct | HID_ReportItem_Attributes_t |
Структура элемента атрибутов парсера репорта HID. More... | |
struct | HID_ReportItem_t |
Структура элемента подробной информации парсера репорта HID. More... | |
struct | HID_ReportSizeInfo_t |
Структура размера парсера репорта HID. More... | |
struct | HID_ReportInfo_t |
Структура состояния парсера HID. More... | |
Modules | |
Маски Input/Output/Feature | |
Defines | |
#define | HID_STATETABLE_STACK_DEPTH 2 |
#define | HID_USAGE_STACK_DEPTH 8 |
#define | HID_MAX_COLLECTIONS 10 |
#define | HID_MAX_REPORTITEMS 20 |
#define | HID_MAX_REPORT_IDS 10 |
#define | HID_ALIGN_DATA(ReportItem, Type) ((Type)(ReportItem->Value << ((8 * sizeof(Type)) - ReportItem->Attributes.BitSize))) |
Enumerations | |
enum | HID_Parse_ErrorCodes_t { HID_PARSE_Successful = 0, HID_PARSE_HIDStackOverflow = 1, HID_PARSE_HIDStackUnderflow = 2, HID_PARSE_InsufficientReportItems = 3, HID_PARSE_UnexpectedEndCollection = 4, HID_PARSE_InsufficientCollectionPaths = 5, HID_PARSE_UsageListOverflow = 6, HID_PARSE_InsufficientReportIDItems = 7, HID_PARSE_NoUnfilteredReportItems = 8 } |
Functions | |
uint8_t | USB_ProcessHIDReport (const uint8_t *ReportData, uint16_t ReportSize, HID_ReportInfo_t *const ParserData) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(3) |
bool | USB_GetHIDReportItemInfo (const uint8_t *ReportData, HID_ReportItem_t *const ReportItem) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2) |
void | USB_SetHIDReportItemInfo (uint8_t *ReportData, HID_ReportItem_t *const ReportItem) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2) |
uint16_t | USB_GetHIDReportSize (HID_ReportInfo_t *const ParserData, const uint8_t ReportID, const uint8_t ReportType) ATTR_CONST ATTR_NON_NULL_PTR_ARG(1) |
bool | CALLBACK_HIDParser_FilterHIDReportItem (HID_ReportItem_t *const CurrentItem) |
Следующие файлы должны быть скомпилированы с любым проектом, который использует этот модуль:
Функции, макросы, переменые, перечисления и типы, связанные с парсингом дескрипторов репорта устройства класса HID.
Обрабатываемый репорт HID передается назад приложению пользователя как плоская структура, содержащая каждый элемент репорта IN, OUT и FEATURE вместе с атрибутами каждого элемента.
Эта часть библиотеки также позволяет простую устрановку и получение данных из репорта HID, включая устройства с несколькими репортами на одном интерфейсе HID.
#define HID_ALIGN_DATA | ( | ReportItem, | |
Type | |||
) | ((Type)(ReportItem->Value << ((8 * sizeof(Type)) - ReportItem->Attributes.BitSize))) |
Возвращает значение указанного элемента репорта HID (как только его значение было выбрано через USB_GetHIDReportItemInfo()) выровненного налево по указанному типу данных. Это позволяет корректно интерпретировать данные со знаком, путем сдвига данных влево, пока бит знака данных не займет верную позицию.
[in] | ReportItem | элемент репорта HID, у которого должно быть выровнено запрошенное значение. |
[in] | Type | тип данных для выравнивания значения элемента репорта HID |
#define HID_MAX_COLLECTIONS 10 |
Константа, показывающая максимальное количество элементов COLLECTION (вложенных или не вложенных друг в друга), которые можно обработать в дескрипторе элемента репорта. Увеличенное значение позволяет обработать больше элементов COLLECTION, но потребляет больше памяти. По умолчанию установлено 10 коллекций, но это можно перезадать путем изменения HID_MAX_COLLECTIONS на другое значение в makefile проекта пользователя, передачей его компилятору через переключатель -D.
#define HID_MAX_REPORT_IDS 10 |
Константа, показывающая максимальное количество уникальных ID репорта, которые можно обработать в элементе дескриптора репорта для размера инормационного массива репорта в информационной структуре репорта HID пользователя. Увеличенное значение позволяет больше размер ID репорта для сохранения, но потребляет больше памяти. По умолчанию установлено в 10 элементов, но это можно изменить заданием HID_MAX_REPORT_IDS на другое значение в makefile проекта пользователя, и передачей его компилятору через переключатель -D. Имейте в виду, что элементы IN, OUT и FEATURE используют один и тот же ID репорта, используя только один элемент размера в массиве.
#define HID_MAX_REPORTITEMS 20 |
Константа, показывающая максимальное количество элементов репорта (IN, OUT или FEATURE), которое может быть обработано в элементе дескриптора репорта и сохранено в пользовательской информационной структуре репорта HID. Увеличенное значение позволяет сохранить больше элементов репорта, но потребляет больше памяти. По умолчанию установлено в 20 элементов, но это можно поменять путем задания HID_MAX_REPORTITEMS на другое значение в makefile проекта пользователя, и передачей его компилятору через переключатель -D.
#define HID_STATETABLE_STACK_DEPTH 2 |
Константа, показывающая максимальную глубину стека таблицы состояний. Увеличенная таблица состояний позволяет больше вкладывать элементы PUSH/POP репорта, однако потребляет больше памяти. По умолчанию эта константа установлена на 2 уровня (что позволяет невложенные элементы PUSH), но это можно отменить заданием HID_STATETABLE_STACK_DEPTH на другое значение в makefile проекта пользователя, передачей его компилятору через переключатель -D.
#define HID_USAGE_STACK_DEPTH 8 |
Константа, показывающая максимальную глубину стека таблицы использования. Увеличенная таблица использования позволяет последовательно индицировать большее количество, чем один, элементов USAGE для записей REPORT COUNT, однако требует больше пространства для стека. По умолчанию эта константа установлена на 8 уровней (что позволяет элементы репорта в количестве 8), но это можно отменить заданием HID_USAGE_STACK_DEPTH на другое значение в makefile проекта пользователя, передачей его компилятору через переключатель -D.
Перечисление для возможных кодов ошибки в возвращаемом функцией USB_ProcessHIDReport() значении.
HID_PARSE_Successful |
успешный парсинг дескриптора репорта HID, ошибок нет. |
HID_PARSE_HIDStackOverflow |
в репорте вложено PUSH больше, чем HID_STATETABLE_STACK_DEPTH. |
HID_PARSE_HIDStackUnderflow |
встретился POP, когда стек таблицы состояний пуст. |
HID_PARSE_InsufficientReportItems |
в репорте больше элементов, чем HID_MAX_REPORTITEMS. |
HID_PARSE_UnexpectedEndCollection |
An END COLLECTION item found without matching COLLECTION item. |
HID_PARSE_InsufficientCollectionPaths |
в репорте больше коллекций, чем HID_MAX_COLLECTIONS. |
HID_PARSE_UsageListOverflow |
в строке перечислено больше использований, чем HID_USAGE_STACK_DEPTH. |
HID_PARSE_InsufficientReportIDItems |
в устройстве больше ID, чем HID_MAX_REPORT_IDS. |
HID_PARSE_NoUnfilteredReportItems |
все элементы репорта устройства отфильтрованы функцией обратного вызова (callback). |
bool CALLBACK_HIDParser_FilterHIDReportItem | ( | HID_ReportItem_t *const | CurrentItem | ) |
Функция обратного вызова для парсера репорта HID. Этот callback должен быть реализован в коде пользователя, когда используется парсер, чтобы определить, какая информация элемента репорта IN, OUT и FEATURE сохранена в структуре HID_ReportInfo_t. Это можно использовать для фильтрации только тех элементов, которые будет использовать программа, поэтому не будет теряться RAM на сохранение атрибутов для элементов репорта, которые не будут указаны в приложении.
[in] | CurrentItem | указатель на текущий элемент репорта для проверки пользователем. |
bool USB_GetHIDReportItemInfo | ( | const uint8_t * | ReportData, |
HID_ReportItem_t *const | ReportItem | ||
) |
Распаковывает указанное значение элемента указанного репорта HID и помещает его в поле Value элемента репорта структуры HID_ReportItem_t.
Когда вызывается для репорта, в котором имеется нужный элемент, то делается копия Value элемента репорта в его элемент PreviousValue - для облегчения проверки на изменение значения перед обработкой репорта. Если указанный элемент отсутствует в репорте, функция не будет модифицировать данные элементов репорта.
[in] | ReportData | буфер, содержащий репорт IN или FEATURE от подключенного устройства. |
[in,out] | ReportItem | указатель на интересующий элемент репорта в массиве HID_ReportInfo_t ReportItem. |
uint16_t USB_GetHIDReportSize | ( | HID_ReportInfo_t *const | ParserData, |
const uint8_t | ReportID, | ||
const uint8_t | ReportType | ||
) |
Запрашивает размер в байтах указанного репорта HID по его идентификатору ID репорта.
[in] | ParserData | указатель на экземпляр HID_ReportInfo_t, содержащий выходные данные парсера. |
[in] | ReportID | ID репорта, у которого запрашивается размер. |
[in] | ReportType | тип репорта, у которого определяется размер, значение из перечисления HID_ReportItemTypes_t. |
uint8_t USB_ProcessHIDReport | ( | const uint8_t * | ReportData, |
uint16_t | ReportSize, | ||
HID_ReportInfo_t *const | ParserData | ||
) |
Функция для обработки указанного репорта HID, который был возвращен от подключенного устройства, и сохранен в указанной структуре HID_ReportInfo_t.
[in] | ReportData | буфер, содержащий таблицу репорта устройства HID. |
[in] | ReportSize | размер в байтах таблицы репортов HID. |
[out] | ParserData | указатель на экземпляр HID_ReportInfo_t для вывода парсера. |
void USB_SetHIDReportItemInfo | ( | uint8_t * | ReportData, |
HID_ReportItem_t *const | ReportItem | ||
) |
Запрашивает значение указанного элемента репорта из поля Value структуры элемента репорта HID_ReportItem_t, и помещает его в корректную позицию буфера репорта HID. Предполагается, что буфер репорта имеет соответствующие, предварительно очищенные (перед вызовом этой функции) биты (например, буфер должен быть явно очищен перед добавлением значений репорта).
Когда вызывается, делается копия поля Value элемента репорта element в поле PreviousValue для упрощения проверки на изменение значения элемента перед отправкой репорта.
Если устройство имеет несколько репортов HID, первый байт в репорте установлен в ID репорта указанного элемента.
[out] | ReportData | буфер, содержащий данные текущего репорта OUT или FEATURE. |
[in] | ReportItem | указатель на интересующий элемент репорта в массиве HID_ReportInfo_t ReportItem. |