mirror of
https://github.com/rfc2822/GfxTablet
synced 2025-10-03 09:39:16 +02:00
win32 driver 1.4 for GfxTablet with protocol v2 support
This commit is contained in:
parent
128060d724
commit
ca6c6be57b
12 changed files with 552 additions and 0 deletions
11
driver-win32/.gitignore
vendored
Normal file
11
driver-win32/.gitignore
vendored
Normal file
|
@ -0,0 +1,11 @@
|
|||
/Debug/
|
||||
/Release/
|
||||
/ipch/
|
||||
/driver-win32.aps
|
||||
/driver-win32.sdf
|
||||
/driver-win32.suo
|
||||
/*.vcxproj.user
|
||||
/driver-win32.sln
|
||||
Browse.VC.*
|
||||
*.ipch
|
||||
*.suo
|
334
driver-win32/driver-win32.cpp
Normal file
334
driver-win32/driver-win32.cpp
Normal file
|
@ -0,0 +1,334 @@
|
|||
#include "stdafx.h"
|
||||
#include "driver-win32.h"
|
||||
#include <WinSock2.h>
|
||||
|
||||
#pragma comment(lib, "Ws2_32.lib")
|
||||
|
||||
#define MAX_LOADSTRING 100
|
||||
//#define SIMULATE_HOVER_TROUGH_LIGHT_TOUCH 1
|
||||
|
||||
// Global Variables:
|
||||
HINSTANCE hInst; // current instance
|
||||
TCHAR szTitle[MAX_LOADSTRING]; // The title bar text
|
||||
TCHAR szWindowClass[MAX_LOADSTRING]; // the main window class name
|
||||
|
||||
// Forward declarations of functions included in this code module:
|
||||
ATOM MyRegisterClass(HINSTANCE hInstance);
|
||||
BOOL InitInstance(HINSTANCE, int);
|
||||
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
|
||||
INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);
|
||||
|
||||
int RunDriver();
|
||||
|
||||
int APIENTRY _tWinMain(HINSTANCE hInstance,
|
||||
HINSTANCE hPrevInstance,
|
||||
LPTSTR lpCmdLine,
|
||||
int nCmdShow)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(hPrevInstance);
|
||||
UNREFERENCED_PARAMETER(lpCmdLine);
|
||||
|
||||
// TODO: Place code here.
|
||||
MSG msg;
|
||||
HACCEL hAccelTable;
|
||||
|
||||
// Initialize global strings
|
||||
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
|
||||
LoadString(hInstance, IDC_DRIVERWIN32, szWindowClass, MAX_LOADSTRING);
|
||||
MyRegisterClass(hInstance);
|
||||
|
||||
// Perform application initialization:
|
||||
if (!InitInstance (hInstance, nCmdShow))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_DRIVERWIN32));
|
||||
|
||||
//
|
||||
PostMessage(NULL, WM_USER+1,0,0);
|
||||
|
||||
// Main message loop:
|
||||
while (GetMessage(&msg, NULL, 0, 0))
|
||||
{
|
||||
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
|
||||
{
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
}
|
||||
|
||||
return (int) msg.wParam;
|
||||
}
|
||||
|
||||
ATOM MyRegisterClass(HINSTANCE hInstance)
|
||||
{
|
||||
WNDCLASSEX wcex;
|
||||
|
||||
wcex.cbSize = sizeof(WNDCLASSEX);
|
||||
|
||||
wcex.style = CS_HREDRAW | CS_VREDRAW;
|
||||
wcex.lpfnWndProc = WndProc;
|
||||
wcex.cbClsExtra = 0;
|
||||
wcex.cbWndExtra = 0;
|
||||
wcex.hInstance = hInstance;
|
||||
wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_DRIVERWIN32));
|
||||
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
|
||||
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
|
||||
wcex.lpszMenuName = MAKEINTRESOURCE(IDC_DRIVERWIN32);
|
||||
wcex.lpszClassName = szWindowClass;
|
||||
wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
|
||||
|
||||
return RegisterClassEx(&wcex);
|
||||
}
|
||||
|
||||
#define WM_USER_SHELLICON (WM_USER+1)
|
||||
|
||||
NOTIFYICONDATA nidApp;
|
||||
|
||||
void CreateTrayIcon(HWND hWnd)
|
||||
{
|
||||
nidApp.cbSize = sizeof(NOTIFYICONDATA);
|
||||
nidApp.hWnd = (HWND) hWnd;
|
||||
nidApp.uID = IDI_DRIVERWIN32;
|
||||
nidApp.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
|
||||
nidApp.hIcon = LoadIcon(hInst, MAKEINTRESOURCE(IDI_DRIVERWIN32) );
|
||||
nidApp.uCallbackMessage = WM_USER_SHELLICON;
|
||||
_tcscpy( nidApp.szTip, _T("GfxTablet windows driver") );
|
||||
|
||||
Shell_NotifyIcon(NIM_ADD, &nidApp);
|
||||
}
|
||||
|
||||
void RemoveTrayIcon(HWND hWnd)
|
||||
{
|
||||
Shell_NotifyIcon(NIM_DELETE, &nidApp);
|
||||
}
|
||||
|
||||
DWORD dwDriverThreadId = 0;
|
||||
DWORD WINAPI DriverThreadStart(LPVOID lpThreadParameter)
|
||||
{
|
||||
return RunDriver();
|
||||
}
|
||||
|
||||
HWND hWnd = NULL;
|
||||
|
||||
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
|
||||
{
|
||||
hInst = hInstance; // Store instance handle in our global variable
|
||||
|
||||
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
|
||||
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
|
||||
|
||||
if (!hWnd)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
CreateTrayIcon(hWnd);
|
||||
|
||||
CreateThread(NULL, 500000, DriverThreadStart, NULL, 0, &dwDriverThreadId);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void ShowTrayIconContextMenu(HWND hWnd)
|
||||
{
|
||||
POINT lpClickPoint;
|
||||
UINT uFlag = MF_BYPOSITION|MF_STRING;
|
||||
GetCursorPos(&lpClickPoint);
|
||||
HMENU hPopMenu = CreatePopupMenu();
|
||||
InsertMenu(hPopMenu,0xFFFFFFFF,MF_BYPOSITION|MF_STRING,IDM_EXIT,_T("Exit"));
|
||||
TrackPopupMenu(hPopMenu,TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_BOTTOMALIGN,
|
||||
lpClickPoint.x, lpClickPoint.y,0,hWnd,NULL);
|
||||
}
|
||||
|
||||
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
int wmId, wmEvent;
|
||||
PAINTSTRUCT ps;
|
||||
HDC hdc;
|
||||
|
||||
switch (message)
|
||||
{
|
||||
case WM_USER_SHELLICON:
|
||||
switch(LOWORD(lParam))
|
||||
{
|
||||
case WM_RBUTTONDOWN:
|
||||
ShowTrayIconContextMenu(hWnd);
|
||||
}
|
||||
break;
|
||||
|
||||
case WM_COMMAND:
|
||||
wmId = LOWORD(wParam);
|
||||
wmEvent = HIWORD(wParam);
|
||||
// Parse the menu selections:
|
||||
switch (wmId)
|
||||
{
|
||||
case IDM_EXIT:
|
||||
DestroyWindow(hWnd);
|
||||
break;
|
||||
default:
|
||||
return DefWindowProc(hWnd, message, wParam, lParam);
|
||||
}
|
||||
break;
|
||||
case WM_PAINT:
|
||||
hdc = BeginPaint(hWnd, &ps);
|
||||
EndPaint(hWnd, &ps);
|
||||
break;
|
||||
case WM_DESTROY:
|
||||
RemoveTrayIcon(hWnd);
|
||||
PostQuitMessage(0);
|
||||
break;
|
||||
|
||||
default:
|
||||
return DefWindowProc(hWnd, message, wParam, lParam);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int udp_socket;
|
||||
|
||||
void die(TCHAR* fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
va_start(args,fmt);
|
||||
TCHAR msgbuf[4096];
|
||||
_vsntprintf_s(msgbuf, _countof(msgbuf), fmt, args);
|
||||
MessageBox(NULL, msgbuf, _T("GfxTablet Win32 driver error"), MB_ICONERROR|MB_OK);
|
||||
|
||||
RemoveTrayIcon(hWnd);
|
||||
ExitProcess(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
int prepare_socket()
|
||||
{
|
||||
int s;
|
||||
struct sockaddr_in addr;
|
||||
|
||||
WSADATA wsadata;
|
||||
WSAStartup(WINSOCK_VERSION, &wsadata);
|
||||
|
||||
if ((s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1)
|
||||
die(_T("error: prepare_socket()"));
|
||||
|
||||
ZeroMemory(&addr, sizeof(struct sockaddr_in));
|
||||
addr.sin_family = AF_INET;
|
||||
addr.sin_port = htons(GFXTABLET_PORT);
|
||||
addr.sin_addr.s_addr = htonl(INADDR_ANY);
|
||||
|
||||
if (bind(s, (struct sockaddr *)&addr, sizeof(addr)) == -1)
|
||||
{
|
||||
DWORD dwErr = WSAGetLastError();
|
||||
if (dwErr == WSAEADDRINUSE)
|
||||
die(_T("error: prepare_socket(). Port already in use") );
|
||||
else
|
||||
die(_T("error: prepare_socket(). Error = 0x%08x"), dwErr );
|
||||
}
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
void quit(int signal)
|
||||
{
|
||||
closesocket(udp_socket);
|
||||
}
|
||||
|
||||
int RunDriver(void)
|
||||
{
|
||||
int device;
|
||||
struct event_packet ev_pkt;
|
||||
|
||||
udp_socket = prepare_socket();
|
||||
|
||||
printf("GfxTablet driver (protocol version %u) is ready and listening on 0.0.0.0:%u (UDP)\n"
|
||||
"Hint: Make sure that this port is not blocked by your firewall.\n", PROTOCOL_VERSION, GFXTABLET_PORT);
|
||||
|
||||
signal(SIGINT, quit);
|
||||
signal(SIGTERM, quit);
|
||||
|
||||
BOOL isDown = false;
|
||||
|
||||
while (recv(udp_socket, (char*)&ev_pkt, sizeof(ev_pkt), 0) >= 9) { // every packet has at least 9 bytes
|
||||
printf("."); fflush(0);
|
||||
|
||||
if (memcmp(ev_pkt.signature, "GfxTablet", 9) != 0) {
|
||||
fprintf(stderr, "\nGot unknown packet on port %i, ignoring\n", GFXTABLET_PORT);
|
||||
continue;
|
||||
}
|
||||
ev_pkt.version = ntohs(ev_pkt.version);
|
||||
if (ev_pkt.version != PROTOCOL_VERSION) {
|
||||
fprintf(stderr, "\nGfxTablet app speaks protocol version %i but driver speaks version %i, please update\n",
|
||||
ev_pkt.version, PROTOCOL_VERSION);
|
||||
break;
|
||||
}
|
||||
|
||||
ev_pkt.x = ntohs(ev_pkt.x);
|
||||
ev_pkt.y = ntohs(ev_pkt.y);
|
||||
ev_pkt.pressure = ntohs(ev_pkt.pressure);
|
||||
printf("x: %hi, y: %hi, pressure: %hi\n", ev_pkt.x, ev_pkt.y, ev_pkt.pressure);
|
||||
|
||||
//windows uses 0-65535, while GfxTablet uses 0-32767
|
||||
int absoluteX = ((int)ev_pkt.x)*2;
|
||||
int absoluteY = ((int)ev_pkt.y)*2;
|
||||
|
||||
INPUT inputs[1];
|
||||
ZeroMemory(&inputs[0],sizeof(inputs));
|
||||
inputs[0].type = INPUT_MOUSE;
|
||||
inputs[0].mi.dx = absoluteX;
|
||||
inputs[0].mi.dy = absoluteY;
|
||||
inputs[0].mi.dwFlags = MOUSEEVENTF_ABSOLUTE;
|
||||
|
||||
//no support for pressure on windows :-((
|
||||
//This is only possible with an HID miniport driver.
|
||||
//GIMP uses DirectInput - probably the HID miniport driver would be visible trough HID
|
||||
//If not a DirectInput driver would be necessary too
|
||||
//send_event(device, EV_ABS, ABS_PRESSURE, ev_pkt.pressure);
|
||||
|
||||
#if SIMULATE_HOVER_TROUGH_LIGHT_TOUCH
|
||||
//hack: ignores EVENT_TYPE_BUTTON (android touch events), but generates them
|
||||
//when pressure is over a specific limit, so it is possible to move the finger
|
||||
//around the tablet without drawing
|
||||
if(ev_pkt.type==EVENT_TYPE_BUTTON && ev_pkt.down)
|
||||
{
|
||||
ev_pkt.type=EVENT_TYPE_MOTION;
|
||||
}
|
||||
else if(ev_pkt.type==EVENT_TYPE_MOTION && ev_pkt.pressure>18000)
|
||||
{
|
||||
if (!isDown)
|
||||
ev_pkt.type=EVENT_TYPE_BUTTON;
|
||||
}
|
||||
#endif
|
||||
|
||||
switch (ev_pkt.type) {
|
||||
case EVENT_TYPE_MOTION:
|
||||
inputs[0].mi.dwFlags |= MOUSEEVENTF_MOVE;
|
||||
SendInput(1, &inputs[0], sizeof(inputs[0]));
|
||||
break;
|
||||
case EVENT_TYPE_BUTTON:
|
||||
if (ev_pkt.button == 0)
|
||||
{
|
||||
inputs[0].mi.dwFlags = MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_MOVE;
|
||||
SendInput(1, &inputs[0], sizeof(inputs[0]));
|
||||
}
|
||||
|
||||
if (ev_pkt.down)
|
||||
{
|
||||
inputs[0].mi.dwFlags = MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_LEFTDOWN;
|
||||
isDown = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
inputs[0].mi.dwFlags = MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_LEFTUP;
|
||||
isDown = false;
|
||||
}
|
||||
SendInput(1, &inputs[0], sizeof(inputs[0]));
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
closesocket(udp_socket);
|
||||
|
||||
|
||||
printf("GfxTablet driver shut down gracefully\n");
|
||||
return 0;
|
||||
}
|
3
driver-win32/driver-win32.h
Normal file
3
driver-win32/driver-win32.h
Normal file
|
@ -0,0 +1,3 @@
|
|||
#pragma once
|
||||
|
||||
#include "resource.h"
|
BIN
driver-win32/driver-win32.ico
Normal file
BIN
driver-win32/driver-win32.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 8.3 KiB |
BIN
driver-win32/driver-win32.rc
Normal file
BIN
driver-win32/driver-win32.rc
Normal file
Binary file not shown.
101
driver-win32/driver-win32.vcxproj
Normal file
101
driver-win32/driver-win32.vcxproj
Normal file
|
@ -0,0 +1,101 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{F1323D24-2E93-466B-83D9-01042B36DE6A}</ProjectGuid>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<RootNamespace>driverwin32</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<PlatformToolset>v141</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<PlatformToolset>v141</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<None Include="driver-win32.ico" />
|
||||
<None Include="small.ico" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="driver-win32.h" />
|
||||
<ClInclude Include="Resource.h" />
|
||||
<ClInclude Include="stdafx.h" />
|
||||
<ClInclude Include="targetver.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="driver-win32.cpp" />
|
||||
<ClCompile Include="stdafx.cpp">
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="driver-win32.rc" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
52
driver-win32/driver-win32.vcxproj.filters
Normal file
52
driver-win32/driver-win32.vcxproj.filters
Normal file
|
@ -0,0 +1,52 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Source Files">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Header Files">
|
||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Resource Files">
|
||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="small.ico">
|
||||
<Filter>Resource Files</Filter>
|
||||
</None>
|
||||
<None Include="driver-win32.ico">
|
||||
<Filter>Resource Files</Filter>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="stdafx.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="targetver.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Resource.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="driver-win32.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="stdafx.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="driver-win32.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="driver-win32.rc">
|
||||
<Filter>Resource Files</Filter>
|
||||
</ResourceCompile>
|
||||
</ItemGroup>
|
||||
</Project>
|
BIN
driver-win32/resource.h
Normal file
BIN
driver-win32/resource.h
Normal file
Binary file not shown.
BIN
driver-win32/small.ico
Normal file
BIN
driver-win32/small.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 23 KiB |
8
driver-win32/stdafx.cpp
Normal file
8
driver-win32/stdafx.cpp
Normal file
|
@ -0,0 +1,8 @@
|
|||
// stdafx.cpp : source file that includes just the standard includes
|
||||
// driver-win32.pch will be the pre-compiled header
|
||||
// stdafx.obj will contain the pre-compiled type information
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
// TODO: reference any additional headers you need in STDAFX.H
|
||||
// and not in this file
|
35
driver-win32/stdafx.h
Normal file
35
driver-win32/stdafx.h
Normal file
|
@ -0,0 +1,35 @@
|
|||
// stdafx.h : include file for standard system include files,
|
||||
// or project specific include files that are used frequently, but
|
||||
// are changed infrequently
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "targetver.h"
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
|
||||
// Windows Header Files:
|
||||
#include <windows.h>
|
||||
#include <shellapi.h>
|
||||
|
||||
// C RunTime Header Files
|
||||
#include <stdlib.h>
|
||||
#include <malloc.h>
|
||||
#include <memory.h>
|
||||
#include <tchar.h>
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <signal.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <limits.h>
|
||||
#include <wininet.h>
|
||||
|
||||
typedef unsigned short uint16_t;
|
||||
typedef unsigned char uint8_t;
|
||||
typedef char int8_t;
|
||||
|
||||
#include "../driver-uinput/protocol.h"
|
8
driver-win32/targetver.h
Normal file
8
driver-win32/targetver.h
Normal file
|
@ -0,0 +1,8 @@
|
|||
#pragma once
|
||||
|
||||
// Including SDKDDKVer.h defines the highest available Windows platform.
|
||||
|
||||
// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and
|
||||
// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h.
|
||||
|
||||
#include <SDKDDKVer.h>
|
Loading…
Add table
Add a link
Reference in a new issue