Program Listing for File DefaultDevs.hpp
↰ Return to documentation for file (include\input\DefaultDevs\windows\DefaultDevs.hpp)
#pragma once
#include "Input_State.hpp"
#include "MetadataTXRX.hpp"
#include "NameGen.hpp"
#include "PDJE_Crypto.hpp"
#include "PDJE_EXPORT_SETTER.hpp"
#include "PDJE_Input_DataLine.hpp"
#include "PDJE_Input_Device_Data.hpp"
#include "PDJE_RAII_WRAP.hpp"
#include "PSKPipe.hpp"
#include "Secured_IPC_TX_RX.hpp"
#include "ipc_named_event.hpp"
#include <Windows.h>
#include <nlohmann/json.hpp>
#include <optional>
namespace PDJE_DEFAULT_DEVICES {
using namespace PDJE_IPC;
using nj = nlohmann::json;
struct HandleCloser {
void
operator()(HANDLE h) noexcept
{
if (h && h != INVALID_HANDLE_VALUE)
::CloseHandle(h);
}
};
using WINRAII = PDJE_RAII::RAII<HANDLE, HandleCloser>;
class DefaultDevs {
private:
STARTUPINFOW start_up_info{};
PROCESS_INFORMATION process_info{};
std::optional<PDJE_IPC::PDJE_Input_Transfer> input_buffer;
WINRAII subprocess_RAII;
MetadataTXRX meta;
PDJE_CRYPTO::PSKPipe pipe;
struct {
EVENT input_loop_run_event;
EVENT terminate_event;
} events;
bool
OpenProcess(const fs::path &pt);
void
InitEvents();
public:
void
SetPlatformContexts(void *, void *, bool)
{
// Reserved for cross-platform PDJE_Input::Init(...) signature parity.
}
std::string
GetCurrentBackendString() const
{
return "rawinput-ipc";
}
bool
Kill()
{
return meta.Kill();
}
std::vector<DeviceData>
GetDevices()
{
return meta.QueryDevices();
}
PDJE_IPC::PDJE_Input_Transfer *
GetInputBufferPTR()
{
return &(input_buffer.value());
}
void
Ready();
void
RunLoop()
{
events.input_loop_run_event.Wake();
}
void
TerminateLoop()
{
events.terminate_event.Wake();
}
bool
Config(const std::vector<DeviceData> &devs);
DefaultDevs();
~DefaultDevs();
};
}; // namespace PDJE_DEFAULT_DEVICES