mirror of
https://github.com/RPCS3/hidapi.git
synced 2026-07-19 21:43:36 -04:00
Implement hid_write_control, so we can use HidD_SetOutputReport on win, all others are just a wrapper until tested
This commit is contained in:
@@ -383,6 +383,11 @@ extern "C" {
|
||||
*/
|
||||
HID_API_EXPORT const wchar_t* HID_API_CALL hid_error(hid_device *device);
|
||||
|
||||
/** RPCS3 EDIT: This attempts to write the output on the 'control' channel
|
||||
Otherwise it's the exact same as hid_write
|
||||
*/
|
||||
int HID_API_EXPORT HID_API_CALL hid_write_control(hid_device *device, const unsigned char *data, size_t length);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -999,6 +999,11 @@ hid_device * HID_API_EXPORT hid_open_path(const char *path)
|
||||
}
|
||||
}
|
||||
|
||||
int HID_API_EXPORT hid_write_control(hid_device *dev, const unsigned char *data, size_t length)
|
||||
{
|
||||
//RPCS3 TODO: Test if this needs to be changed for control if we ever use it
|
||||
return hid_write(dev, data, length);
|
||||
}
|
||||
|
||||
int HID_API_EXPORT hid_write(hid_device *dev, const unsigned char *data, size_t length)
|
||||
{
|
||||
|
||||
@@ -674,6 +674,12 @@ int HID_API_EXPORT hid_write(hid_device *dev, const unsigned char *data, size_t
|
||||
return bytes_written;
|
||||
}
|
||||
|
||||
int HID_API_EXPORT hid_write_control(hid_device *dev, const unsigned char *data, size_t length)
|
||||
{
|
||||
//RPCS3 TODO: Test if this needs to be changed for control if we ever use it
|
||||
return hid_write(dev, data, length);
|
||||
}
|
||||
|
||||
|
||||
int HID_API_EXPORT hid_read_timeout(hid_device *dev, unsigned char *data, size_t length, int milliseconds)
|
||||
{
|
||||
|
||||
@@ -787,6 +787,12 @@ static int set_report(hid_device *dev, IOHIDReportType type, const unsigned char
|
||||
return -1;
|
||||
}
|
||||
|
||||
int HID_API_EXPORT hid_write_control(hid_device *dev, const unsigned char *data, size_t length)
|
||||
{
|
||||
//RPCS3 TODO: Test if this needs to be changed for control on mac if we ever use it
|
||||
return hid_write(dev, data, length);
|
||||
}
|
||||
|
||||
int HID_API_EXPORT hid_write(hid_device *dev, const unsigned char *data, size_t length)
|
||||
{
|
||||
return set_report(dev, kIOHIDReportTypeOutput, data, length);
|
||||
|
||||
@@ -114,6 +114,7 @@ extern "C" {
|
||||
typedef BOOLEAN (__stdcall *HidD_FreePreparsedData_)(PHIDP_PREPARSED_DATA preparsed_data);
|
||||
typedef NTSTATUS (__stdcall *HidP_GetCaps_)(PHIDP_PREPARSED_DATA preparsed_data, HIDP_CAPS *caps);
|
||||
typedef BOOLEAN (__stdcall *HidD_SetNumInputBuffers_)(HANDLE handle, ULONG number_buffers);
|
||||
typedef BOOLEAN(__stdcall *HidD_SetOutputReport_)(HANDLE handle, PVOID data, ULONG length);
|
||||
|
||||
static HidD_GetAttributes_ HidD_GetAttributes;
|
||||
static HidD_GetSerialNumberString_ HidD_GetSerialNumberString;
|
||||
@@ -126,6 +127,7 @@ extern "C" {
|
||||
static HidD_FreePreparsedData_ HidD_FreePreparsedData;
|
||||
static HidP_GetCaps_ HidP_GetCaps;
|
||||
static HidD_SetNumInputBuffers_ HidD_SetNumInputBuffers;
|
||||
static HidD_SetOutputReport_ HidD_SetOutputReport;
|
||||
|
||||
static HMODULE lib_handle = NULL;
|
||||
static BOOLEAN initialized = FALSE;
|
||||
@@ -216,6 +218,7 @@ static int lookup_functions()
|
||||
RESOLVE(HidD_FreePreparsedData);
|
||||
RESOLVE(HidP_GetCaps);
|
||||
RESOLVE(HidD_SetNumInputBuffers);
|
||||
RESOLVE(HidD_SetOutputReport);
|
||||
#undef RESOLVE
|
||||
}
|
||||
else
|
||||
@@ -663,6 +666,20 @@ end_of_function:
|
||||
return bytes_written;
|
||||
}
|
||||
|
||||
int HID_API_EXPORT HID_API_CALL hid_write_control(hid_device *dev, const unsigned char *data, size_t length)
|
||||
{
|
||||
DWORD bytes_written = length;
|
||||
BOOL res;
|
||||
|
||||
res = HidD_SetOutputReport(dev->device_handle, (PVOID)data, (ULONG)length);
|
||||
|
||||
if (!res) {
|
||||
register_error(dev, "SetOutputReport");
|
||||
bytes_written = -1;
|
||||
}
|
||||
|
||||
return length;
|
||||
}
|
||||
|
||||
int HID_API_EXPORT HID_API_CALL hid_read_timeout(hid_device *dev, unsigned char *data, size_t length, int milliseconds)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user