mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-16 07:14:09 +02:00
CachedEnumerateInputDevices
This commit is contained in:
parent
f34424a61d
commit
9e3248fb4f
2 changed files with 36 additions and 8 deletions
|
@ -1,4 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
|
using System.Threading;
|
||||||
|
|
||||||
namespace Beefy.input
|
namespace Beefy.input
|
||||||
{
|
{
|
||||||
|
@ -33,6 +34,33 @@ namespace Beefy.input
|
||||||
[CallingConvention(.Stdcall), CLink]
|
[CallingConvention(.Stdcall), CLink]
|
||||||
public static extern void* BFApp_CreateInputDevice(char8* guid);
|
public static extern void* BFApp_CreateInputDevice(char8* guid);
|
||||||
|
|
||||||
|
public Monitor mMonitor = new .() ~ delete _;
|
||||||
|
public String mEnumerateString = new .() ~ delete _;
|
||||||
|
public bool mEnumerating;
|
||||||
|
|
||||||
|
public void CachedEnumerateInputDevices(String outData)
|
||||||
|
{
|
||||||
|
using (mMonitor.Enter())
|
||||||
|
{
|
||||||
|
outData.Append(mEnumerateString);
|
||||||
|
|
||||||
|
if (!mEnumerating)
|
||||||
|
{
|
||||||
|
mEnumerating = true;
|
||||||
|
ThreadPool.QueueUserWorkItem(new () =>
|
||||||
|
{
|
||||||
|
String data = scope .();
|
||||||
|
data.Append(BFApp_EnumerateInputDevices());
|
||||||
|
using (mMonitor.Enter())
|
||||||
|
{
|
||||||
|
mEnumerateString.Set(data);
|
||||||
|
mEnumerating = false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void EnumerateInputDevices(String outData)
|
public void EnumerateInputDevices(String outData)
|
||||||
{
|
{
|
||||||
outData.Append(BFApp_EnumerateInputDevices());
|
outData.Append(BFApp_EnumerateInputDevices());
|
||||||
|
|
|
@ -8,30 +8,30 @@ USING_NS_BF;
|
||||||
|
|
||||||
static BOOL DIEnumDevicesCallback(LPCDIDEVICEINSTANCE lpddi, LPVOID pvRef)
|
static BOOL DIEnumDevicesCallback(LPCDIDEVICEINSTANCE lpddi, LPVOID pvRef)
|
||||||
{
|
{
|
||||||
DInputManager* _this = (DInputManager*)pvRef;
|
String& outStr = *(String*)pvRef;
|
||||||
|
|
||||||
auto AddStr = [&](const StringImpl& str)
|
auto AddStr = [&](const StringImpl& str)
|
||||||
{
|
{
|
||||||
for (auto c : str)
|
for (auto c : str)
|
||||||
{
|
{
|
||||||
if ((c >= 32) && (c < 128))
|
if ((c >= 32) && (c < 128))
|
||||||
_this->mEnumData += c;
|
outStr += c;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
AddStr(UTF8Encode(lpddi->tszInstanceName));
|
AddStr(UTF8Encode(lpddi->tszInstanceName));
|
||||||
_this->mEnumData += "\t";
|
outStr += "\t";
|
||||||
AddStr(UTF8Encode(lpddi->tszProductName));
|
AddStr(UTF8Encode(lpddi->tszProductName));
|
||||||
|
|
||||||
auto guid = lpddi->guidInstance;
|
auto guid = lpddi->guidInstance;
|
||||||
_this->mEnumData += StrFormat("\t%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X",
|
outStr += StrFormat("\t%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X",
|
||||||
guid.Data1, guid.Data2, guid.Data3,
|
guid.Data1, guid.Data2, guid.Data3,
|
||||||
guid.Data4[0], guid.Data4[1], guid.Data4[2], guid.Data4[3],
|
guid.Data4[0], guid.Data4[1], guid.Data4[2], guid.Data4[3],
|
||||||
guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]);
|
guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]);
|
||||||
|
|
||||||
//OutputDebugStrF("Device: %s %s\n", lpddi->tszInstanceName, lpddi->tszProductName);
|
//OutputDebugStrF("Device: %s %s\n", lpddi->tszInstanceName, lpddi->tszProductName);
|
||||||
|
|
||||||
_this->mEnumData += "\n";
|
outStr += "\n";
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -86,10 +86,10 @@ DInputDevice* DInputManager::CreateInputDevice(const StringImpl& guidStr)
|
||||||
|
|
||||||
String DInputManager::EnumerateDevices()
|
String DInputManager::EnumerateDevices()
|
||||||
{
|
{
|
||||||
mEnumData.Clear();
|
String str;
|
||||||
if (mDirectInput != NULL)
|
if (mDirectInput != NULL)
|
||||||
mDirectInput->EnumDevices(DI8DEVCLASS_ALL, DIEnumDevicesCallback, this, DIEDFL_ATTACHEDONLY);
|
mDirectInput->EnumDevices(DI8DEVCLASS_ALL, DIEnumDevicesCallback, &str, DIEDFL_ATTACHEDONLY);
|
||||||
return mEnumData;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
DInputDevice::~DInputDevice()
|
DInputDevice::~DInputDevice()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue