diff --git a/src/archutils/Common/HidDevice.cpp b/src/archutils/Common/HidDevice.cpp index a598f7a9f3..f56995ad15 100644 --- a/src/archutils/Common/HidDevice.cpp +++ b/src/archutils/Common/HidDevice.cpp @@ -2,24 +2,22 @@ #include "HidDevice.h" #include "RageLog.h" -HidDevice::HidDevice(int vid, int pid, int interfaceNum, bool autoReconnection) : +HidDevice::HidDevice(int vid, int pid, int interfaceNum, bool autoReconnection, bool nonBlockingWrite) : vid{ vid }, pid{ pid }, interfaceNum{ interfaceNum }, - autoReconnection{autoReconnection} + autoReconnection{autoReconnection}, + nonBlockingWrite{nonBlockingWrite} { bool result = TryConnect(); if (!result) { - LOG->Warn("HID device with VID/PID %x/%x not found.", vid, pid); + LOG->Warn("HID device with VID/PID %04x/%04x not found.", vid, pid); return; } else - { foundOnce = true; - hid_set_nonblocking(handle, 1); - } } HidDevice::~HidDevice() @@ -38,6 +36,9 @@ bool HidDevice::Open(const char* path) { handle = hid_open_path(path); + if(nonBlockingWrite) + hid_set_nonblocking(handle, 1); + return handle != nullptr; } @@ -71,6 +72,11 @@ bool HidDevice::IsConnected() { return handle != nullptr; } +bool HidDevice::FoundOnce() +{ + return foundOnce; +} + char* HidDevice::GetPath(int vid, int pid, int interfaceNumber) { struct hid_device_info* devs, * cur_dev; @@ -113,7 +119,7 @@ void HidDevice::Read(unsigned char* data, size_t length) if (result == -1) { - LOG->Warn("HID device with VID/PID %x/%x read failed. Fail reason %s", vid, pid, GetError()); + LOG->Warn("HID device with VID/PID %04x/%04x read failed. Fail reason %ls", vid, pid, GetError()); } } @@ -126,7 +132,7 @@ void HidDevice::Write(const unsigned char* data, size_t length) if (result != length) { - LOG->Warn("HID device with VID/PID %x/%x write failed. Fail reason %s", vid, pid, GetError()); + LOG->Warn("HID device with VID/PID %04x/%04x write failed. Fail reason %ls", vid, pid, GetError()); Close(); } } diff --git a/src/archutils/Common/HidDevice.h b/src/archutils/Common/HidDevice.h index 842c8a86bd..2a435e5df6 100644 --- a/src/archutils/Common/HidDevice.h +++ b/src/archutils/Common/HidDevice.h @@ -9,7 +9,7 @@ private: hid_device* handle{nullptr}; bool autoReconnection = true; - + bool nonBlockingWrite; int vid; int pid; int interfaceNum = -1; @@ -23,12 +23,13 @@ private: public: static char* GetPath(int vid, int pid, int interfaceNum = -1); - HidDevice(int vid, int pid, int interfaceNum = -1, bool autoReconnection = true); + HidDevice(int vid, int pid, int interfaceNum = -1, bool autoReconnection = true, bool nonBlockingWrite = false); virtual ~HidDevice(); bool IsConnected(); - + bool FoundOnce(); + void Read(unsigned char* data, size_t length); void Write(const unsigned char* data, size_t length); };