mirror of https://github.com/JKornev/hidden
68 lines
1.3 KiB
C++
68 lines
1.3 KiB
C++
#include "Connection.h"
|
|
|
|
using namespace std;
|
|
|
|
Connection::Connection(Arguments& args) :
|
|
m_context(nullptr)
|
|
{
|
|
wstring arg;
|
|
|
|
if (!args.Probe(arg))
|
|
return;
|
|
|
|
do
|
|
{
|
|
if (arg == L"/gate")
|
|
{
|
|
args.SwitchToNext();
|
|
if (!args.GetNext(m_deviceName))
|
|
throw WException(ERROR_INVALID_PARAMETER, L"Error, mismatched argument for command 'gate'");
|
|
|
|
if (m_deviceName.compare(0, 1, L"\\") != 0)
|
|
m_deviceName.insert(0, L"\\\\.\\");
|
|
}
|
|
else
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
while (args.Probe(arg));
|
|
}
|
|
|
|
Connection::~Connection()
|
|
{
|
|
if (m_context)
|
|
Hid_Destroy(m_context);
|
|
}
|
|
|
|
void Connection::Open()
|
|
{
|
|
HidStatus status;
|
|
const wchar_t* deviceName = nullptr;
|
|
|
|
if (m_deviceName.size())
|
|
deviceName = m_deviceName.c_str();
|
|
|
|
status = Hid_Initialize(&m_context, deviceName);
|
|
if (!HID_STATUS_SUCCESSFUL(status))
|
|
throw WException(HID_STATUS_CODE(status), L"Error, can't connect to gate");
|
|
}
|
|
|
|
HidContext Connection::GetContext()
|
|
{
|
|
return m_context;
|
|
}
|
|
|
|
LibInitializator::LibInitializator()
|
|
{
|
|
HidStatus status = Hid_InitializeWithNoConnection();
|
|
if (!HID_STATUS_SUCCESSFUL(status))
|
|
throw WException(HID_STATUS_CODE(status), L"Error, init hidden lib");
|
|
}
|
|
|
|
LibInitializator::~LibInitializator()
|
|
{
|
|
// We don't need release lib resources because in case of the
|
|
// Hid_InitializeWithNoConnection() there aren't any dynamic data
|
|
}
|