Библиотека LUFA (раннее название MyUSB) версия 101122
Парсер репорта HID

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)

Detailed Description

зависимости для исходного кода модуля

Следующие файлы должны быть скомпилированы с любым проектом, который использует этот модуль:

модуля

Функции, макросы, переменые, перечисления и типы, связанные с парсингом дескрипторов репорта устройства класса HID.

Обрабатываемый репорт HID передается назад приложению пользователя как плоская структура, содержащая каждый элемент репорта IN, OUT и FEATURE вместе с атрибутами каждого элемента.

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


Define Documentation

#define HID_ALIGN_DATA (   ReportItem,
  Type 
)    ((Type)(ReportItem->Value << ((8 * sizeof(Type)) - ReportItem->Attributes.BitSize)))

Возвращает значение указанного элемента репорта HID (как только его значение было выбрано через USB_GetHIDReportItemInfo()) выровненного налево по указанному типу данных. Это позволяет корректно интерпретировать данные со знаком, путем сдвига данных влево, пока бит знака данных не займет верную позицию.

Parameters:
[in]ReportItemэлемент репорта HID, у которого должно быть выровнено запрошенное значение.
[in]Typeтип данных для выравнивания значения элемента репорта HID
Returns:
выровненные влево данные указанного элемента репорта, предварительно запрошенного значения, для указанного типа данных.
#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.


Enumeration Type Documentation

Перечисление для возможных кодов ошибки в возвращаемом функцией USB_ProcessHIDReport() значении.

Enumerator:
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).


Function Documentation

bool CALLBACK_HIDParser_FilterHIDReportItem ( HID_ReportItem_t *const  CurrentItem)

Функция обратного вызова для парсера репорта HID. Этот callback должен быть реализован в коде пользователя, когда используется парсер, чтобы определить, какая информация элемента репорта IN, OUT и FEATURE сохранена в структуре HID_ReportInfo_t. Это можно использовать для фильтрации только тех элементов, которые будет использовать программа, поэтому не будет теряться RAM на сохранение атрибутов для элементов репорта, которые не будут указаны в приложении.

Parameters:
[in]CurrentItemуказатель на текущий элемент репорта для проверки пользователем.
Returns:
двоичное true, если элемент должен быть сохранен в структуру HID_ReportInfo_t, false если должен игнорироваться.
bool USB_GetHIDReportItemInfo ( const uint8_t *  ReportData,
HID_ReportItem_t *const  ReportItem 
)

Распаковывает указанное значение элемента указанного репорта HID и помещает его в поле Value элемента репорта структуры HID_ReportItem_t.

Когда вызывается для репорта, в котором имеется нужный элемент, то делается копия Value элемента репорта в его элемент PreviousValue - для облегчения проверки на изменение значения перед обработкой репорта. Если указанный элемент отсутствует в репорте, функция не будет модифицировать данные элементов репорта.

Parameters:
[in]ReportDataбуфер, содержащий репорт IN или FEATURE от подключенного устройства.
[in,out]ReportItemуказатель на интересующий элемент репорта в массиве HID_ReportInfo_t ReportItem.
Returns:
двоичное true, если элемент для получения имеется в указанном репорте, иначе false.
uint16_t USB_GetHIDReportSize ( HID_ReportInfo_t *const  ParserData,
const uint8_t  ReportID,
const uint8_t  ReportType 
)

Запрашивает размер в байтах указанного репорта HID по его идентификатору ID репорта.

Parameters:
[in]ParserDataуказатель на экземпляр HID_ReportInfo_t, содержащий выходные данные парсера.
[in]ReportIDID репорта, у которого запрашивается размер.
[in]ReportTypeтип репорта, у которого определяется размер, значение из перечисления HID_ReportItemTypes_t.
Returns:
размер репорта в байтах, или 0, если репорт не существует.
uint8_t USB_ProcessHIDReport ( const uint8_t *  ReportData,
uint16_t  ReportSize,
HID_ReportInfo_t *const  ParserData 
)

Функция для обработки указанного репорта HID, который был возвращен от подключенного устройства, и сохранен в указанной структуре HID_ReportInfo_t.

Parameters:
[in]ReportDataбуфер, содержащий таблицу репорта устройства HID.
[in]ReportSizeразмер в байтах таблицы репортов HID.
[out]ParserDataуказатель на экземпляр HID_ReportInfo_t для вывода парсера.
Returns:
значение из перечисления HID_Parse_ErrorCodes_t.
void USB_SetHIDReportItemInfo ( uint8_t *  ReportData,
HID_ReportItem_t *const  ReportItem 
)

Запрашивает значение указанного элемента репорта из поля Value структуры элемента репорта HID_ReportItem_t, и помещает его в корректную позицию буфера репорта HID. Предполагается, что буфер репорта имеет соответствующие, предварительно очищенные (перед вызовом этой функции) биты (например, буфер должен быть явно очищен перед добавлением значений репорта).

Когда вызывается, делается копия поля Value элемента репорта element в поле PreviousValue для упрощения проверки на изменение значения элемента перед отправкой репорта.

Если устройство имеет несколько репортов HID, первый байт в репорте установлен в ID репорта указанного элемента.

Parameters:
[out]ReportDataбуфер, содержащий данные текущего репорта OUT или FEATURE.
[in]ReportItemуказатель на интересующий элемент репорта в массиве HID_ReportInfo_t ReportItem.
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines