From d622ce9d1a73489d1a89e2b8ab7cfa9c7ea6623d Mon Sep 17 00:00:00 2001 From: Patrick Lawrence Date: Sat, 11 Apr 2026 19:48:36 -0700 Subject: [PATCH 1/2] fix: DudesCab detection on Linux Fix wchar_t to string conversion for product_string and serial_number which produced garbled strings on non-Windows platforms. Also match DudesCab by HID interface number on Linux since hidapi-hidraw returns the USB-level product string for all interfaces instead of per-interface HID string descriptors. --- src/cab/out/dudescab/DudesCab.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/cab/out/dudescab/DudesCab.cpp b/src/cab/out/dudescab/DudesCab.cpp index b7ca0fe..b58a9ac 100644 --- a/src/cab/out/dudescab/DudesCab.cpp +++ b/src/cab/out/dudescab/DudesCab.cpp @@ -232,7 +232,8 @@ std::vector DudesCab::FindDevices() else productName = ""; #else - productName = std::string(reinterpret_cast(cur_dev->product_string)); + std::wstring wstr(cur_dev->product_string); + productName = std::string(wstr.begin(), wstr.end()); #endif } @@ -249,7 +250,8 @@ std::vector DudesCab::FindDevices() else serialNumber = ""; #else - serialNumber = std::string(reinterpret_cast(cur_dev->serial_number)); + std::wstring wserial(cur_dev->serial_number); + serialNumber = std::string(wserial.begin(), wserial.end()); #endif } else @@ -264,6 +266,10 @@ std::vector DudesCab::FindDevices() deviceRid = Device::RIDType::RIDOutputs; else if (productName == "DudesCab Outputs MX") deviceRid = Device::RIDType::RIDOutputsMx; +#if defined(__linux__) + else if (productName == "DudesCab" && cur_dev->interface_number == static_cast(Device::RIDType::RIDOutputs)) + deviceRid = Device::RIDType::RIDOutputs; +#endif if (deviceRid != Device::RIDType::None) { From 84cb8a4a8a794d083be86efa0a9c34c99ee455ee Mon Sep 17 00:00:00 2001 From: Jason Millard Date: Sun, 12 Apr 2026 11:46:58 -0400 Subject: [PATCH 2/2] misc: include macos in DudesCab platform name check --- src/cab/out/dudescab/DudesCab.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cab/out/dudescab/DudesCab.cpp b/src/cab/out/dudescab/DudesCab.cpp index b58a9ac..099f207 100644 --- a/src/cab/out/dudescab/DudesCab.cpp +++ b/src/cab/out/dudescab/DudesCab.cpp @@ -266,7 +266,7 @@ std::vector DudesCab::FindDevices() deviceRid = Device::RIDType::RIDOutputs; else if (productName == "DudesCab Outputs MX") deviceRid = Device::RIDType::RIDOutputsMx; -#if defined(__linux__) +#if defined(__linux__) || defined(__APPLE__) else if (productName == "DudesCab" && cur_dev->interface_number == static_cast(Device::RIDType::RIDOutputs)) deviceRid = Device::RIDType::RIDOutputs; #endif