mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2023-10-10 13:36:59 +02:00
Lightpack code changes
Former-commit-id: cfc9fb0bf0cb81bd2ce2c6af1c8f2be64b2e14a8
This commit is contained in:
parent
e1e88ba2cf
commit
8b127674dd
@ -1 +1 @@
|
|||||||
db2c75aa5829d405c7120255af5dbee38c9272d7
|
1cb3f98f75d106f770d15416e067095bee750f8d
|
@ -108,7 +108,7 @@ int LedDeviceLightpack::open()
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
serialNumber = LedDeviceLightpack::getString(deviceList[i], deviceDescriptor.iSerialNumber);
|
serialNumber = LedDeviceLightpack::getString(deviceList[i], deviceDescriptor.iSerialNumber);
|
||||||
}
|
}
|
||||||
catch (int e)
|
catch (int e)
|
||||||
{
|
{
|
||||||
@ -147,7 +147,7 @@ int LedDeviceLightpack::open()
|
|||||||
}
|
}
|
||||||
catch(int e)
|
catch(int e)
|
||||||
{
|
{
|
||||||
std::cerr << "unable to open Lightpack device(" << e << "): " << libusb_error_name(e) << std::endl;
|
std::cerr << "unable to open Lightpack device. Searching for other device(" << e << "): " << libusb_error_name(e) << std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -258,12 +258,14 @@ libusb_device_handle * LedDeviceLightpack::openDevice(libusb_device *device)
|
|||||||
int error = libusb_open(device, &handle);
|
int error = libusb_open(device, &handle);
|
||||||
if (error != LIBUSB_SUCCESS)
|
if (error != LIBUSB_SUCCESS)
|
||||||
{
|
{
|
||||||
|
std::cerr << "unable to open device(" << error << "): " << libusb_error_name(error) << std::endl;
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
|
|
||||||
error = libusb_detach_kernel_driver(handle, LIGHTPACK_INTERFACE);
|
error = libusb_detach_kernel_driver(handle, LIGHTPACK_INTERFACE);
|
||||||
if (error != LIBUSB_SUCCESS)
|
if (error != LIBUSB_SUCCESS)
|
||||||
{
|
{
|
||||||
|
std::cerr << "unable to detach kernel driver(" << error << "): " << libusb_error_name(error) << std::endl;
|
||||||
libusb_close(handle);
|
libusb_close(handle);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
@ -271,6 +273,8 @@ libusb_device_handle * LedDeviceLightpack::openDevice(libusb_device *device)
|
|||||||
error = libusb_claim_interface(handle, LIGHTPACK_INTERFACE);
|
error = libusb_claim_interface(handle, LIGHTPACK_INTERFACE);
|
||||||
if (error != LIBUSB_SUCCESS)
|
if (error != LIBUSB_SUCCESS)
|
||||||
{
|
{
|
||||||
|
std::cerr << "unable to claim interface(" << error << "): " << libusb_error_name(error) << std::endl;
|
||||||
|
libusb_attach_kernel_driver(handle, LIGHTPACK_INTERFACE);
|
||||||
libusb_close(handle);
|
libusb_close(handle);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
@ -280,27 +284,39 @@ libusb_device_handle * LedDeviceLightpack::openDevice(libusb_device *device)
|
|||||||
|
|
||||||
std::string LedDeviceLightpack::getString(libusb_device * device, int stringDescriptorIndex)
|
std::string LedDeviceLightpack::getString(libusb_device * device, int stringDescriptorIndex)
|
||||||
{
|
{
|
||||||
libusb_device_handle * deviceHandle = openDevice(device);
|
libusb_device_handle * handle = nullptr;
|
||||||
|
|
||||||
char buffer[256];
|
int error = libusb_open(device, &handle);
|
||||||
int error = libusb_get_string_descriptor_ascii(deviceHandle, stringDescriptorIndex, reinterpret_cast<unsigned char *>(buffer), sizeof(buffer));
|
if (error != LIBUSB_SUCCESS)
|
||||||
if (error <= 0)
|
|
||||||
{
|
{
|
||||||
libusb_close(deviceHandle);
|
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
|
|
||||||
libusb_close(deviceHandle);
|
char buffer[256];
|
||||||
|
error = libusb_get_string_descriptor_ascii(handle, stringDescriptorIndex, reinterpret_cast<unsigned char *>(buffer), sizeof(buffer));
|
||||||
|
if (error <= 0)
|
||||||
|
{
|
||||||
|
libusb_close(handle);
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
|
||||||
|
libusb_close(handle);
|
||||||
return std::string(buffer, error);
|
return std::string(buffer, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
LedDeviceLightpack::Version LedDeviceLightpack::getVersion(libusb_device *device)
|
LedDeviceLightpack::Version LedDeviceLightpack::getVersion(libusb_device *device)
|
||||||
{
|
{
|
||||||
libusb_device_handle * deviceHandle = openDevice(device);
|
libusb_device_handle * handle = nullptr;
|
||||||
|
|
||||||
|
int error = libusb_open(device, &handle);
|
||||||
|
if (error != LIBUSB_SUCCESS)
|
||||||
|
{
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t buffer[256];
|
uint8_t buffer[256];
|
||||||
int error = libusb_control_transfer(
|
error = libusb_control_transfer(
|
||||||
deviceHandle,
|
handle,
|
||||||
LIBUSB_ENDPOINT_IN | LIBUSB_RECIPIENT_INTERFACE,
|
LIBUSB_ENDPOINT_IN | LIBUSB_RECIPIENT_INTERFACE,
|
||||||
LIBUSB_REQUEST_GET_DESCRIPTOR,
|
LIBUSB_REQUEST_GET_DESCRIPTOR,
|
||||||
(LIBUSB_DT_REPORT << 8),
|
(LIBUSB_DT_REPORT << 8),
|
||||||
@ -308,10 +324,10 @@ LedDeviceLightpack::Version LedDeviceLightpack::getVersion(libusb_device *device
|
|||||||
buffer, sizeof(buffer), 100);
|
buffer, sizeof(buffer), 100);
|
||||||
if (error < 3)
|
if (error < 3)
|
||||||
{
|
{
|
||||||
libusb_close(deviceHandle);
|
libusb_close(handle);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
|
|
||||||
libusb_close(deviceHandle);
|
libusb_close(handle);
|
||||||
return Version{buffer[INDEX_FW_VER_MAJOR], buffer[INDEX_FW_VER_MINOR]};
|
return Version{buffer[INDEX_FW_VER_MAJOR], buffer[INDEX_FW_VER_MINOR]};
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user