Support differing HID interface IDs between products
This commit is contained in:
parent
a2c8e49856
commit
fde721b97f
4 changed files with 36 additions and 8 deletions
|
@ -12,4 +12,5 @@
|
||||||
|
|
||||||
extern const uint16_t xreal_vendor_id;
|
extern const uint16_t xreal_vendor_id;
|
||||||
extern const uint16_t xreal_product_ids[NUM_SUPPORTED_PRODUCTS];
|
extern const uint16_t xreal_product_ids[NUM_SUPPORTED_PRODUCTS];
|
||||||
bool is_xreal_product_id(uint16_t product_id);
|
int xreal_imu_interface_id(uint16_t product_id);
|
||||||
|
int xreal_mcu_interface_id(uint16_t product_id);
|
|
@ -216,9 +216,10 @@ device_imu_error_type device_imu_open(device_imu_type* device, device_imu_event_
|
||||||
|
|
||||||
struct hid_device_info* it = info;
|
struct hid_device_info* it = info;
|
||||||
while (it) {
|
while (it) {
|
||||||
if (is_xreal_product_id(it->product_id) && it->interface_number == 3) {
|
int interface_id = xreal_imu_interface_id(it->product_id);
|
||||||
|
if (interface_id != -1 && it->interface_number == interface_id) {
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
printf("Found device with product_id: 0x%x\n", it->product_id);
|
printf("Found IMU device with product_id 0x%x on interface %d\n", it->product_id, interface_id);
|
||||||
#endif
|
#endif
|
||||||
device->product_id = it->product_id;
|
device->product_id = it->product_id;
|
||||||
device->handle = hid_open_path(it->path);
|
device->handle = hid_open_path(it->path);
|
||||||
|
|
|
@ -195,9 +195,10 @@ device_mcu_error_type device_mcu_open(device_mcu_type* device, device_mcu_event_
|
||||||
|
|
||||||
struct hid_device_info* it = info;
|
struct hid_device_info* it = info;
|
||||||
while (it) {
|
while (it) {
|
||||||
if (is_xreal_product_id(it->product_id) && it->interface_number == 4) {
|
int interface_id = xreal_mcu_interface_id(it->product_id);
|
||||||
|
if (interface_id != -1 && it->interface_number == interface_id) {
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
printf("Found device with product_id: 0x%x\n", it->product_id);
|
printf("Found MCU device with product_id 0x%x on interface %d\n", it->product_id, interface_id);
|
||||||
#endif
|
#endif
|
||||||
device->product_id = it->product_id;
|
device->product_id = it->product_id;
|
||||||
device->handle = hid_open_path(it->path);
|
device->handle = hid_open_path(it->path);
|
||||||
|
|
|
@ -18,11 +18,36 @@ const uint16_t xreal_product_ids[NUM_SUPPORTED_PRODUCTS] = {
|
||||||
0x0426 // XREAL Air 2 Ultra
|
0x0426 // XREAL Air 2 Ultra
|
||||||
};
|
};
|
||||||
|
|
||||||
bool is_xreal_product_id(uint16_t product_id) {
|
const int xreal_imu_interface_ids[NUM_SUPPORTED_PRODUCTS] = {
|
||||||
|
3, // XREAL Air
|
||||||
|
3, // XREAL Air 2
|
||||||
|
3, // XREAL Air 2 Pro
|
||||||
|
2 // XREAL Air 2 Ultra
|
||||||
|
};
|
||||||
|
|
||||||
|
const int xreal_mcu_interface_ids[NUM_SUPPORTED_PRODUCTS] = {
|
||||||
|
4, // XREAL Air
|
||||||
|
4, // XREAL Air 2
|
||||||
|
4, // XREAL Air 2 Pro
|
||||||
|
-1 // TODO - XREAL Air 2 Ultra MCU support via interface 0
|
||||||
|
};
|
||||||
|
|
||||||
|
int xreal_imu_interface_id(uint16_t product_id) {
|
||||||
for (int i = 0; i < NUM_SUPPORTED_PRODUCTS; i++) {
|
for (int i = 0; i < NUM_SUPPORTED_PRODUCTS; i++) {
|
||||||
if (xreal_product_ids[i] == product_id) {
|
if (xreal_product_ids[i] == product_id) {
|
||||||
return true;
|
return xreal_imu_interface_ids[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int xreal_mcu_interface_id(uint16_t product_id) {
|
||||||
|
for (int i = 0; i < NUM_SUPPORTED_PRODUCTS; i++) {
|
||||||
|
if (xreal_product_ids[i] == product_id) {
|
||||||
|
return xreal_mcu_interface_ids[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
}
|
}
|
Reference in a new issue