HID: core: store the collections as a basic tree
For each collection parsed, store a pointer to the parent collection (if any). This makes it a lot easier to look up which collection(s) any given item is part of Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Verified-by: Harry Cutts <hcutts@chromium.org> Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
This commit is contained in:
parent
52ea899637
commit
c53431eb69
2 changed files with 6 additions and 0 deletions
|
@ -172,6 +172,8 @@ static int open_collection(struct hid_parser *parser, unsigned type)
|
||||||
collection->type = type;
|
collection->type = type;
|
||||||
collection->usage = usage;
|
collection->usage = usage;
|
||||||
collection->level = parser->collection_stack_ptr - 1;
|
collection->level = parser->collection_stack_ptr - 1;
|
||||||
|
collection->parent = parser->active_collection;
|
||||||
|
parser->active_collection = collection;
|
||||||
|
|
||||||
if (type == HID_COLLECTION_APPLICATION)
|
if (type == HID_COLLECTION_APPLICATION)
|
||||||
parser->device->maxapplication++;
|
parser->device->maxapplication++;
|
||||||
|
@ -190,6 +192,8 @@ static int close_collection(struct hid_parser *parser)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
parser->collection_stack_ptr--;
|
parser->collection_stack_ptr--;
|
||||||
|
if (parser->active_collection)
|
||||||
|
parser->active_collection = parser->active_collection->parent;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -427,6 +427,7 @@ struct hid_local {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
struct hid_collection {
|
struct hid_collection {
|
||||||
|
struct hid_collection *parent;
|
||||||
unsigned type;
|
unsigned type;
|
||||||
unsigned usage;
|
unsigned usage;
|
||||||
unsigned level;
|
unsigned level;
|
||||||
|
@ -650,6 +651,7 @@ struct hid_parser {
|
||||||
unsigned int *collection_stack;
|
unsigned int *collection_stack;
|
||||||
unsigned int collection_stack_ptr;
|
unsigned int collection_stack_ptr;
|
||||||
unsigned int collection_stack_size;
|
unsigned int collection_stack_size;
|
||||||
|
struct hid_collection *active_collection;
|
||||||
struct hid_device *device;
|
struct hid_device *device;
|
||||||
unsigned int scan_flags;
|
unsigned int scan_flags;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Reference in a new issue