Skip to content

Commit 9d675e8

Browse files
committed
last changes: vxd works now
1 parent 6d105c8 commit 9d675e8

File tree

3 files changed

+27
-19
lines changed

3 files changed

+27
-19
lines changed

MossbauerLab.Sm2201.ExtSaveUtility/src/saveManager/autoSaveManager.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -366,7 +366,7 @@ void MossbauerLab::Sm2201::SaveManager::AutoSaveManager::sendKeysViaPortVxdDrive
366366
int result = 0;
367367
do
368368
{
369-
status = _vxdAccessor->read(KEYBOARD_CMD_REG);
369+
status = _vxdAccessor->read(KEYBOARD_CMD_REG, 1);
370370
// std::cout <<"Keyboard status: "<< status << std::endl;
371371
Sleep(10);
372372
}
@@ -375,14 +375,14 @@ void MossbauerLab::Sm2201::SaveManager::AutoSaveManager::sendKeysViaPortVxdDrive
375375
// send scan code for key down
376376
_vxdAccessor->write(KEYBOARD_CMD_REG, 0xD2, 1);
377377
_vxdAccessor->write(KEYBOARD_DATA_REG, (*it), 1);
378-
result = _vxdAccessor->read(KEYBOARD_DATA_REG);
378+
result = _vxdAccessor->read(KEYBOARD_DATA_REG, 1);
379379
std::cout <<"Keyboard command result for KEY DOWN: "<< result << std::endl;
380380
// send scan code for key up
381381
BYTE keyUpCode = (*it) | 128;
382382
Sleep(keyPause);
383383
_vxdAccessor->write(KEYBOARD_CMD_REG, 0xD2, 1);
384384
_vxdAccessor->write(KEYBOARD_DATA_REG, keyUpCode, 1);
385-
result = _vxdAccessor->read(KEYBOARD_DATA_REG);
385+
result = _vxdAccessor->read(KEYBOARD_DATA_REG, 1);
386386
std::cout <<"Keyboard command result for KEY UP: "<< result << std::endl;
387387
}
388388
}

MossbauerLab.Sm2201.ExtSaveUtility/src/utils/windows/vxdAccessor.cpp

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
#include <winioctl.h>
33
#include <tchar.h>
44

5-
#define IO32_WRITEPORT CTL_CODE(FILE_DEVICE_UNKNOWN, 1, METHOD_NEITHER, FILE_ANY_ACCESS)
6-
#define IO32_READPORT CTL_CODE(FILE_DEVICE_UNKNOWN, 2, METHOD_NEITHER, FILE_ANY_ACCESS)
5+
#define IO32_WRITEPORT 0x1001
6+
#define IO32_READPORT 0x1000
77

88
MossbauerLab::Utils::Windows::VxDAccessor::VxDAccessor()
99
{
@@ -12,15 +12,15 @@ MossbauerLab::Utils::Windows::VxDAccessor::VxDAccessor()
1212

1313
MossbauerLab::Utils::Windows::VxDAccessor::~VxDAccessor()
1414
{
15-
if (_hVxD != NULL)
15+
if (_hVxD != NULL && _hVxD != INVALID_HANDLE_VALUE)
1616
CloseHandle(_hVxD);
1717
}
1818

1919
bool MossbauerLab::Utils::Windows::VxDAccessor::init()
2020
{
21-
_hVxD = CreateFile(_T("\\\\.\\io32port.vxd"), 0, 0, NULL, 0,
22-
FILE_FLAG_DELETE_ON_CLOSE, NULL);
23-
21+
_hVxD = CreateFile(_T("\\\\.\\DIO_W55"), 0, 0, 0,
22+
CREATE_NEW, FILE_FLAG_DELETE_ON_CLOSE, 0);
23+
DWORD errCode = GetLastError();
2424
return _hVxD != INVALID_HANDLE_VALUE;
2525
}
2626

@@ -29,12 +29,14 @@ DWORD MossbauerLab::Utils::Windows::VxDAccessor::read(DWORD port, BYTE size)
2929
if( _hVxD == NULL)
3030
return -1;
3131
MossbauerLab::Utils::Windows::TagPort32 tagPort;
32+
ZeroMemory(&tagPort, sizeof(tagPort));
3233
tagPort.bSize = size;
33-
tagPort.wPort = port;
34+
tagPort.wPort = (unsigned short) port;
3435
DWORD portValue = 0;
35-
DWORD result;
36-
DeviceIoControl(_hVxD, IO32_READPORT, &tagPort, sizeof(TagPort32),
37-
&portValue, sizeof(DWORD), &result, NULL);
36+
DWORD bytesRead = 0;
37+
bool readResult = DeviceIoControl(_hVxD, IO32_READPORT, &tagPort, sizeof(TagPort32),
38+
&portValue, sizeof(DWORD), &bytesRead, NULL);
39+
DWORD errorCode = GetLastError();
3840
return portValue;
3941
}
4042

@@ -44,9 +46,12 @@ bool MossbauerLab::Utils::Windows::VxDAccessor::write(DWORD port, DWORD value, B
4446
return false;
4547
DWORD result;
4648
MossbauerLab::Utils::Windows::TagPort32 tagPort;
49+
ZeroMemory(&tagPort, sizeof(tagPort));
4750
tagPort.bSize = size;
48-
tagPort.wPort = port;
51+
tagPort.wPort = (unsigned short) port;
4952
tagPort.dwValue = value;
50-
return DeviceIoControl(_hVxD, IO32_WRITEPORT, &tagPort, sizeof(tagPort),
51-
NULL, 0, &result, NULL);
53+
bool writeResult = DeviceIoControl(_hVxD, IO32_WRITEPORT, &tagPort, sizeof(tagPort),
54+
NULL, 0, &result, NULL);
55+
DWORD errorCode = GetLastError();
56+
return writeResult;
5257
}

MossbauerLab.Sm2201.ExtSaveUtility/src/utils/windows/vxdAccessor.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,30 @@
11
#include <windows.h>
22

3+
#pragma warning(disable:4786)
4+
#pragma comment(linker, "/IGNORE:4786")
5+
36
namespace MossbauerLab
47
{
58
namespace Utils
69
{
710
namespace Windows
811
{
9-
#pragma pack(1)
12+
#pragma pack(push, 1)
1013
struct TagPort32
1114
{
1215
USHORT wPort;
1316
ULONG dwValue;
1417
UCHAR bSize;
1518
};
16-
#pragma pack()
19+
#pragma pack(pop)
1720

1821
class VxDAccessor
1922
{
2023
public:
2124
VxDAccessor();
2225
~VxDAccessor();
2326
DWORD read(DWORD port, BYTE size = 1);
24-
bool write(DWORD port, DWORD value, BYTE size);
27+
bool write(DWORD port, DWORD value, BYTE size = 1);
2528
private:
2629
bool init();
2730
private:

0 commit comments

Comments
 (0)