Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Monado
Monado
Commits
51dafe7b
Commit
51dafe7b
authored
Sep 18, 2019
by
Jakob Bornecrantz
Browse files
xrt: Add usb_dev_class to xrt_prober_device
parent
3360ea70
Pipeline
#64554
passed with stages
in 1 minute and 18 seconds
Changes
3
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
src/xrt/include/xrt/xrt_prober.h
View file @
51dafe7b
...
...
@@ -117,6 +117,8 @@ struct xrt_prober_device
uint16_t
product_id
;
enum
xrt_bus_type
bus
;
uint8_t
usb_dev_class
;
};
/*!
...
...
src/xrt/state_trackers/prober/p_dump.c
View file @
51dafe7b
...
...
@@ -74,26 +74,27 @@ p_dump_device(struct prober* p, struct prober_device* pdev, int id)
printf
(
"
\t
% 3i: 0x%04x:0x%04x
\n
"
,
id
,
pdev
->
base
.
vendor_id
,
pdev
->
base
.
product_id
);
printf
(
"
\t\t
ptr: %p
\n
"
,
(
void
*
)
pdev
);
printf
(
"
\t\t
ptr: %p
\n
"
,
(
void
*
)
pdev
);
printf
(
"
\t\t
usb_dev_class: %02x
\n
"
,
pdev
->
base
.
usb_dev_class
);
if
(
pdev
->
usb
.
bus
!=
0
||
pdev
->
usb
.
addr
!=
0
)
{
printf
(
"
\t\t
usb.bus: %i
\n
"
,
pdev
->
usb
.
bus
);
printf
(
"
\t\t
usb.addr: %i
\n
"
,
pdev
->
usb
.
addr
);
printf
(
"
\t\t
usb.bus:
%i
\n
"
,
pdev
->
usb
.
bus
);
printf
(
"
\t\t
usb.addr:
%i
\n
"
,
pdev
->
usb
.
addr
);
}
if
(
pdev
->
bluetooth
.
id
!=
0
)
{
printf
(
"
\t\t
bluetooth.id: %012"
PRIx64
"
\n
"
,
printf
(
"
\t\t
bluetooth.id:
%012"
PRIx64
"
\n
"
,
pdev
->
bluetooth
.
id
);
}
int
num
=
pdev
->
usb
.
num_ports
;
if
(
print_ports
(
tmp
,
ARRAY_SIZE
(
tmp
),
pdev
->
usb
.
ports
,
num
))
{
printf
(
"
\t\t
port%s %s
\n
"
,
num
>
1
?
"s:"
:
": "
,
tmp
);
printf
(
"
\t\t
port%s
%s
\n
"
,
num
>
1
?
"s:"
:
": "
,
tmp
);
}
#ifdef XRT_HAVE_LIBUSB
if
(
pdev
->
usb
.
dev
!=
NULL
)
{
printf
(
"
\t\t
libusb: %p
\n
"
,
(
void
*
)
pdev
->
usb
.
dev
);
printf
(
"
\t\t
libusb:
%p
\n
"
,
(
void
*
)
pdev
->
usb
.
dev
);
}
#endif
...
...
@@ -102,21 +103,21 @@ p_dump_device(struct prober* p, struct prober_device* pdev, int id)
if
(
uvc_dev
!=
NULL
)
{
struct
uvc_device_descriptor
*
desc
;
printf
(
"
\t\t
libuvc: %p
\n
"
,
(
void
*
)
uvc_dev
);
printf
(
"
\t\t
libuvc:
%p
\n
"
,
(
void
*
)
uvc_dev
);
uvc_get_device_descriptor
(
uvc_dev
,
&
desc
);
if
(
desc
->
product
!=
NULL
)
{
printf
(
"
\t\t
product: '%s'
\n
"
,
desc
->
product
);
printf
(
"
\t\t
product:
'%s'
\n
"
,
desc
->
product
);
}
if
(
desc
->
manufacturer
!=
NULL
)
{
printf
(
"
\t\t
manufacturer: '%s'
\n
"
,
desc
->
manufacturer
);
printf
(
"
\t\t
manufacturer:
'%s'
\n
"
,
desc
->
manufacturer
);
}
if
(
desc
->
serialNumber
!=
NULL
)
{
printf
(
"
\t\t
serial: '%s'
\n
"
,
desc
->
serialNumber
);
printf
(
"
\t\t
serial:
'%s'
\n
"
,
desc
->
serialNumber
);
}
uvc_free_device_descriptor
(
desc
);
...
...
@@ -128,9 +129,9 @@ p_dump_device(struct prober* p, struct prober_device* pdev, int id)
for
(
size_t
j
=
0
;
j
<
pdev
->
num_v4ls
;
j
++
)
{
struct
prober_v4l
*
v4l
=
&
pdev
->
v4ls
[
j
];
printf
(
"
\t\t
v4l.iface: %i
\n
"
,
(
int
)
v4l
->
usb_iface
);
printf
(
"
\t\t
v4l.index: %i
\n
"
,
(
int
)
v4l
->
v4l_index
);
printf
(
"
\t\t
v4l.path: '%s'
\n
"
,
v4l
->
path
);
printf
(
"
\t\t
v4l.iface:
%i
\n
"
,
(
int
)
v4l
->
usb_iface
);
printf
(
"
\t\t
v4l.index:
%i
\n
"
,
(
int
)
v4l
->
v4l_index
);
printf
(
"
\t\t
v4l.path:
'%s'
\n
"
,
v4l
->
path
);
}
#endif
...
...
@@ -138,8 +139,8 @@ p_dump_device(struct prober* p, struct prober_device* pdev, int id)
for
(
size_t
j
=
0
;
j
<
pdev
->
num_hidraws
;
j
++
)
{
struct
prober_hidraw
*
hidraw
=
&
pdev
->
hidraws
[
j
];
printf
(
"
\t\t
hidraw.iface: %i
\n
"
,
(
int
)
hidraw
->
interface
);
printf
(
"
\t\t
hidraw.path: '%s'
\n
"
,
hidraw
->
path
);
printf
(
"
\t\t
hidraw.iface:
%i
\n
"
,
(
int
)
hidraw
->
interface
);
printf
(
"
\t\t
hidraw.path:
'%s'
\n
"
,
hidraw
->
path
);
}
#endif
}
src/xrt/state_trackers/prober/p_udev.c
View file @
51dafe7b
...
...
@@ -38,6 +38,7 @@ p_udev_enumerate_usb(struct prober* p, struct udev* udev);
static
void
p_udev_add_usb
(
struct
prober_device
*
pdev
,
uint8_t
dev_class
,
const
char
*
product
,
const
char
*
path
);
...
...
@@ -72,15 +73,17 @@ p_udev_get_and_parse_uevent(struct udev_device* raw_dev,
static
int
p_udev_get_usb_hid_address
(
struct
udev_device
*
raw_dev
,
uint32_t
bus_type
,
uint16_t
*
usb_bus
,
uint16_t
*
usb_addr
);
uint8_t
*
out_dev_class
,
uint16_t
*
out_usb_bus
,
uint16_t
*
out_usb_addr
);
static
int
p_udev_try_usb_relation_get_address
(
struct
udev_device
*
raw_dev
,
uint16_t
*
vendor_id
,
uint16_t
*
product_id
,
uint16_t
*
usb_bus
,
uint16_t
*
usb_addr
);
uint8_t
*
out_dev_class
,
uint16_t
*
out_vendor_id
,
uint16_t
*
out_product_id
,
uint16_t
*
out_usb_bus
,
uint16_t
*
out_usb_addr
);
static
int
p_udev_get_vendor_id_product
(
struct
udev_device
*
usb_device_dev
,
...
...
@@ -89,6 +92,7 @@ p_udev_get_vendor_id_product(struct udev_device* usb_device_dev,
static
int
p_udev_get_usb_device_info
(
struct
udev_device
*
usb_device_dev
,
uint8_t
*
out_dev_class
,
uint16_t
*
vendor_id
,
uint16_t
*
product_id
,
uint16_t
*
usb_bus
,
...
...
@@ -170,6 +174,7 @@ p_udev_enumerate_usb(struct prober* p, struct udev* udev)
const
char
*
sysfs_path
=
NULL
;
const
char
*
dev_path
=
NULL
;
const
char
*
product
=
NULL
;
uint8_t
dev_class
=
0
;
uint16_t
vendor_id
=
0
;
uint16_t
product_id
=
0
;
uint16_t
usb_bus
=
0
;
...
...
@@ -185,8 +190,10 @@ p_udev_enumerate_usb(struct prober* p, struct udev* udev)
// Product name.
product
=
udev_device_get_sysattr_value
(
raw_dev
,
"product"
);
ret
=
p_udev_get_usb_device_info
(
raw_dev
,
&
vendor_id
,
&
product_id
,
&
usb_bus
,
&
usb_addr
);
ret
=
p_udev_get_usb_device_info
(
raw_dev
,
&
dev_class
,
&
vendor_id
,
&
product_id
,
&
usb_bus
,
&
usb_addr
);
if
(
ret
!=
0
)
{
P_ERROR
(
p
,
"Failed to get usb device info"
);
goto
next
;
...
...
@@ -200,13 +207,14 @@ p_udev_enumerate_usb(struct prober* p, struct udev* udev)
"
\t\t
ptr: %p (%i)
\n
"
"
\t\t
sysfs_path: '%s'
\n
"
"
\t\t
dev_path: '%s'
\n
"
"
\t\t
dev_class: %02x
\n
"
"
\t\t
vendor_id: %04x
\n
"
"
\t\t
product_id: %04x
\n
"
"
\t\t
usb_bus: %i
\n
"
"
\t\t
usb_addr: %i
\n
"
"
\t\t
product: '%s'"
,
(
void
*
)
pdev
,
ret
,
sysfs_path
,
dev_path
,
vendor_id
,
product_id
,
usb_bus
,
usb_addr
,
product
);
(
void
*
)
pdev
,
ret
,
sysfs_path
,
dev_path
,
dev_class
,
vendor_id
,
product_id
,
usb_bus
,
usb_addr
,
product
);
if
(
ret
!=
0
)
{
P_ERROR
(
p
,
"p_dev_get_usb_device failed!"
);
...
...
@@ -214,7 +222,7 @@ p_udev_enumerate_usb(struct prober* p, struct udev* udev)
}
// Add info to usb device.
p_udev_add_usb
(
pdev
,
product
,
dev_path
);
p_udev_add_usb
(
pdev
,
dev_class
,
product
,
dev_path
);
next:
udev_device_unref
(
raw_dev
);
...
...
@@ -225,9 +233,12 @@ p_udev_enumerate_usb(struct prober* p, struct udev* udev)
static
void
p_udev_add_usb
(
struct
prober_device
*
pdev
,
uint8_t
dev_class
,
const
char
*
product
,
const
char
*
path
)
{
pdev
->
base
.
usb_dev_class
=
dev_class
;
if
(
product
!=
NULL
)
{
pdev
->
usb
.
product
=
strdup
(
product
);
}
...
...
@@ -254,6 +265,7 @@ p_udev_enumerate_v4l2(struct prober* p, struct udev* udev)
struct
udev_device
*
raw_dev
=
NULL
;
const
char
*
sysfs_path
=
NULL
;
const
char
*
dev_path
=
NULL
;
uint8_t
dev_class
=
0
;
uint16_t
vendor_id
=
0
;
uint16_t
product_id
=
0
;
uint16_t
usb_bus
=
0
;
...
...
@@ -270,7 +282,8 @@ p_udev_enumerate_v4l2(struct prober* p, struct udev* udev)
dev_path
=
udev_device_get_devnode
(
raw_dev
);
ret
=
p_udev_try_usb_relation_get_address
(
raw_dev
,
&
vendor_id
,
&
product_id
,
&
usb_bus
,
&
usb_addr
);
raw_dev
,
&
dev_class
,
&
vendor_id
,
&
product_id
,
&
usb_bus
,
&
usb_addr
);
if
(
ret
!=
0
)
{
P_ERROR
(
p
,
"skipping none usb v4l device '%s'"
,
dev_path
);
...
...
@@ -358,6 +371,7 @@ p_udev_enumerate_hidraw(struct prober* p, struct udev* udev)
struct
prober_device
*
pdev
=
NULL
;
struct
udev_device
*
raw_dev
=
NULL
;
uint16_t
vendor_id
,
product_id
,
interface
;
uint8_t
dev_class
=
0
;
uint16_t
usb_bus
=
0
;
uint16_t
usb_addr
=
0
;
uint32_t
bus_type
=
0
;
...
...
@@ -389,8 +403,8 @@ p_udev_enumerate_hidraw(struct prober* p, struct udev* udev)
}
// Get USB bus and address to de-dublicate devices.
ret
=
p_udev_get_usb_hid_address
(
raw_dev
,
bus_type
,
&
usb_bu
s
,
&
usb_addr
);
ret
=
p_udev_get_usb_hid_address
(
raw_dev
,
bus_type
,
&
dev_clas
s
,
&
usb_bus
,
&
usb_addr
);
if
(
ret
!=
0
)
{
P_ERROR
(
p
,
"Failed to get USB bus and addr."
);
goto
next
;
...
...
@@ -461,6 +475,7 @@ p_udev_add_hidraw(struct prober_device* pdev,
static
int
p_udev_get_usb_hid_address
(
struct
udev_device
*
raw_dev
,
uint32_t
bus_type
,
uint8_t
*
out_dev_class
,
uint16_t
*
out_usb_bus
,
uint16_t
*
out_usb_addr
)
{
...
...
@@ -479,8 +494,9 @@ p_udev_get_usb_hid_address(struct udev_device* raw_dev,
return
-
1
;
}
return
p_udev_get_usb_device_info
(
usb_dev
,
&
dummy_vendor
,
&
dummy_product
,
out_usb_bus
,
out_usb_addr
);
return
p_udev_get_usb_device_info
(
usb_dev
,
out_dev_class
,
&
dummy_vendor
,
&
dummy_product
,
out_usb_bus
,
out_usb_addr
);
}
static
int
...
...
@@ -589,6 +605,7 @@ p_udev_get_and_parse_uevent(struct udev_device* raw_dev,
static
int
p_udev_try_usb_relation_get_address
(
struct
udev_device
*
raw_dev
,
uint8_t
*
out_dev_class
,
uint16_t
*
out_vendor_id
,
uint16_t
*
out_product_id
,
uint16_t
*
out_usb_bus
,
...
...
@@ -620,9 +637,9 @@ p_udev_try_usb_relation_get_address(struct udev_device* raw_dev,
return
-
1
;
}
return
p_udev_get_usb_device_info
(
usb_device
,
out_
vendor_id
,
out_
product
_id
,
out_
usb_bus
,
out_usb_addr
);
return
p_udev_get_usb_device_info
(
usb_device
,
out_
dev_class
,
out_
vendor
_id
,
out_
product_id
,
out_usb_bus
,
out_usb_addr
);
}
static
int
...
...
@@ -651,12 +668,13 @@ p_udev_get_vendor_id_product(struct udev_device* usb_dev,
static
int
p_udev_get_usb_device_info
(
struct
udev_device
*
usb_dev
,
uint8_t
*
out_dev_class
,
uint16_t
*
out_vendor_id
,
uint16_t
*
out_product_id
,
uint16_t
*
out_usb_bus
,
uint16_t
*
out_usb_addr
)
{
uint16_t
vendor_id
,
product_id
;
uint16_t
vendor_id
,
product_id
,
dev_class
;
int
ret
;
// First get the vendor and product ids.
...
...
@@ -665,9 +683,16 @@ p_udev_get_usb_device_info(struct udev_device* usb_dev,
return
ret
;
}
ret
=
p_udev_get_sysattr_u16_base16
(
usb_dev
,
"bDeviceClass"
,
&
dev_class
);
if
(
ret
!=
0
)
{
return
ret
;
}
// We emulate what libusb does with regards to device bus and address.
if
(
p_udev_get_usb_device_address_path
(
usb_dev
,
out_usb_bus
,
out_usb_addr
)
==
0
)
{
*
out_dev_class
=
(
uint8_t
)
dev_class
;
*
out_vendor_id
=
vendor_id
;
*
out_product_id
=
product_id
;
return
0
;
...
...
@@ -676,6 +701,7 @@ p_udev_get_usb_device_info(struct udev_device* usb_dev,
// If for some reason we can't read the dev path fallback to sysfs.
if
(
p_udev_get_usb_device_address_sysfs
(
usb_dev
,
out_usb_bus
,
out_usb_addr
)
==
0
)
{
*
out_dev_class
=
(
uint8_t
)
dev_class
;
*
out_vendor_id
=
vendor_id
;
*
out_product_id
=
product_id
;
return
0
;
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment