Merge pull request #122 from christopherco/Waveshare
Add Waveshare Filter Driver to Samples
This commit is contained in:
Коммит
790256f37f
|
@ -0,0 +1,38 @@
|
|||
---
|
||||
title: Waveshare KMDF Filter Driver
|
||||
ms.author: christopher.co
|
||||
description: Filter driver which enables the Waveshare touchscreen on IoT Core.
|
||||
---
|
||||
|
||||
# “Waveshare KMDF Filter Driver”
|
||||
|
||||
This sample filter driver enables touch events on the Waveshare 7" HDMI LCD Touchscreen for use on Windows IoT Core. The driver is a HidUsb KMDF Lower Filter Driver. The driver alters the HID input reports received from the touchscreen to comply with the HID specification.
|
||||
|
||||
This driver resolves a long-standing issue seen with this specific touchscreen where finger-up events were not recognized in Windows IoT Core.
|
||||
|
||||
This driver was developed and tested using the Waveshare 7" HDMI LCD Touchscreen Rev. 2.1.
|
||||
|
||||
## Related technologies
|
||||
[Windows Driver Frameworks](http://msdn.microsoft.com/en-us/library/windows/hardware/ff557565)
|
||||
|
||||
## Building the driver
|
||||
Before starting, make sure you have the latest version of Visual Studio, Windows Software Development Kit, and Windows Driver Kit.
|
||||
|
||||
To build the driver:
|
||||
1. Clone the repository.
|
||||
2. Open filter.vcxproj in Visual Studio.
|
||||
3. Select a build config (Release or Debug) and target architecture (x86, x64, arm).
|
||||
4. Build the solution.
|
||||
|
||||
After a successful build, the driver will be placed in the following folder: WaveshareFilterKmdf\\\<*Arch*\>\\<*Config*\>\
|
||||
|
||||
## Installing the driver into your IoT Core image
|
||||
In order to add any driver to your IoT Core image, you must first package it into a cab file. Instructions to do so are in the [IoT Core Manufacturing Guide](https://docs.microsoft.com/en-us/windows-hardware/manufacture/iot/add-a-driver-to-an-image). Please follow the lab to add a driver to an image.
|
||||
|
||||
Note: Since this driver is for an existing device, you will not need to create or add an ACPITABL.dat.
|
||||
|
||||
## Additional resources
|
||||
* [Windows 10 IoT Core home page](https://developer.microsoft.com/en-us/windows/iot/)
|
||||
* [Windows Driver Samples](https://github.com/Microsoft/Windows-driver-samples/)
|
||||
|
||||
This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact <opencode@microsoft.com> with any additional questions or comments.
|
|
@ -0,0 +1,377 @@
|
|||
/*++
|
||||
|
||||
Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
|
||||
THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
|
||||
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
|
||||
PURPOSE.
|
||||
|
||||
Module Name:
|
||||
|
||||
filter.c
|
||||
|
||||
Abstract:
|
||||
|
||||
This module implements a HIDUSB lower filter driver to support the Waveshare 7"
|
||||
HDMI LCD touchscreen device (Rev 2.1).
|
||||
|
||||
Environment:
|
||||
|
||||
Kernel mode
|
||||
|
||||
--*/
|
||||
|
||||
#include "filter.h"
|
||||
|
||||
|
||||
#ifdef ALLOC_PRAGMA
|
||||
#pragma alloc_text (INIT, DriverEntry)
|
||||
#pragma alloc_text (PAGE, FilterEvtDeviceAdd)
|
||||
#endif
|
||||
|
||||
|
||||
NTSTATUS
|
||||
DriverEntry(
|
||||
IN PDRIVER_OBJECT DriverObject,
|
||||
IN PUNICODE_STRING RegistryPath
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
Installable driver initialization entry point.
|
||||
This entry point is called directly by the I/O system.
|
||||
|
||||
Arguments:
|
||||
|
||||
DriverObject - pointer to the driver object
|
||||
|
||||
RegistryPath - pointer to a unicode string representing the path,
|
||||
to driver-specific key in the registry.
|
||||
|
||||
Return Value:
|
||||
|
||||
STATUS_SUCCESS if successful,
|
||||
STATUS_UNSUCCESSFUL otherwise.
|
||||
|
||||
--*/
|
||||
{
|
||||
WDF_DRIVER_CONFIG config;
|
||||
NTSTATUS status;
|
||||
WDFDRIVER hDriver;
|
||||
|
||||
//
|
||||
// Initiialize driver config to control the attributes that
|
||||
// are global to the driver. Note that framework by default
|
||||
// provides a driver unload routine. If you create any resources
|
||||
// in the DriverEntry and want to be cleaned in driver unload,
|
||||
// you can override that by manually setting the EvtDriverUnload in the
|
||||
// config structure. In general xxx_CONFIG_INIT macros are provided to
|
||||
// initialize most commonly used members.
|
||||
//
|
||||
|
||||
WDF_DRIVER_CONFIG_INIT(
|
||||
&config,
|
||||
FilterEvtDeviceAdd
|
||||
);
|
||||
|
||||
//
|
||||
// Create a framework driver object to represent our driver.
|
||||
//
|
||||
status = WdfDriverCreate(DriverObject,
|
||||
RegistryPath,
|
||||
WDF_NO_OBJECT_ATTRIBUTES,
|
||||
&config,
|
||||
&hDriver);
|
||||
if (!NT_SUCCESS(status)) {
|
||||
KdPrint( ("WdfDriverCreate failed with status 0x%x\n", status));
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
NTSTATUS
|
||||
FilterEvtDeviceAdd(
|
||||
IN WDFDRIVER Driver,
|
||||
IN PWDFDEVICE_INIT DeviceInit
|
||||
)
|
||||
/*++
|
||||
Routine Description:
|
||||
|
||||
EvtDeviceAdd is called by the framework in response to AddDevice
|
||||
call from the PnP manager.
|
||||
|
||||
Arguments:
|
||||
|
||||
Driver - Handle to a framework driver object created in DriverEntry
|
||||
|
||||
DeviceInit - Pointer to a framework-allocated WDFDEVICE_INIT structure.
|
||||
|
||||
Return Value:
|
||||
|
||||
NTSTATUS
|
||||
|
||||
--*/
|
||||
{
|
||||
WDF_OBJECT_ATTRIBUTES deviceAttributes;
|
||||
NTSTATUS status;
|
||||
WDFDEVICE device;
|
||||
WDF_IO_QUEUE_CONFIG ioQueueConfig;
|
||||
|
||||
PAGED_CODE ();
|
||||
|
||||
UNREFERENCED_PARAMETER(Driver);
|
||||
|
||||
//
|
||||
// Tell the framework that you are filter driver. Framework
|
||||
// takes care of inherting all the device flags & characterstics
|
||||
// from the lower device you are attaching to.
|
||||
//
|
||||
WdfFdoInitSetFilter(DeviceInit);
|
||||
|
||||
//
|
||||
// Specify the size of device extension where we track per device
|
||||
// context.
|
||||
//
|
||||
|
||||
WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&deviceAttributes, FILTER_EXTENSION);
|
||||
|
||||
//
|
||||
// Create a framework device object.This call will inturn create
|
||||
// a WDM deviceobject, attach to the lower stack and set the
|
||||
// appropriate flags and attributes.
|
||||
//
|
||||
status = WdfDeviceCreate(&DeviceInit, &deviceAttributes, &device);
|
||||
if (!NT_SUCCESS(status)) {
|
||||
KdPrint( ("WdfDeviceCreate failed with status code 0x%x\n", status));
|
||||
return status;
|
||||
}
|
||||
|
||||
//
|
||||
// Configure the default queue to be Parallel.
|
||||
//
|
||||
WDF_IO_QUEUE_CONFIG_INIT_DEFAULT_QUEUE(&ioQueueConfig,
|
||||
WdfIoQueueDispatchParallel);
|
||||
|
||||
//
|
||||
// Framework by default creates non-power managed queues for
|
||||
// filter drivers.
|
||||
//
|
||||
ioQueueConfig.EvtIoInternalDeviceControl = FilterEvtIoDeviceControl;
|
||||
|
||||
status = WdfIoQueueCreate(device,
|
||||
&ioQueueConfig,
|
||||
WDF_NO_OBJECT_ATTRIBUTES,
|
||||
WDF_NO_HANDLE // pointer to default queue
|
||||
);
|
||||
if (!NT_SUCCESS(status)) {
|
||||
KdPrint( ("WdfIoQueueCreate failed 0x%x\n", status));
|
||||
return status;
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
VOID
|
||||
FilterEvtIoDeviceControl(
|
||||
IN WDFQUEUE Queue,
|
||||
IN WDFREQUEST Request,
|
||||
IN size_t OutputBufferLength,
|
||||
IN size_t InputBufferLength,
|
||||
IN ULONG IoControlCode
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
This routine is the dispatch routine for internal device control requests.
|
||||
|
||||
Arguments:
|
||||
|
||||
Queue - Handle to the framework queue object that is associated
|
||||
with the I/O request.
|
||||
Request - Handle to a framework request object.
|
||||
|
||||
OutputBufferLength - length of the request's output buffer,
|
||||
if an output buffer is available.
|
||||
InputBufferLength - length of the request's input buffer,
|
||||
if an input buffer is available.
|
||||
|
||||
IoControlCode - the driver-defined or system-defined I/O control code
|
||||
(IOCTL) that is associated with the request.
|
||||
|
||||
Return Value:
|
||||
|
||||
VOID
|
||||
|
||||
--*/
|
||||
{
|
||||
UNREFERENCED_PARAMETER(OutputBufferLength);
|
||||
UNREFERENCED_PARAMETER(InputBufferLength);
|
||||
UNREFERENCED_PARAMETER(IoControlCode);
|
||||
WDFDEVICE device;
|
||||
|
||||
device = WdfIoQueueGetDevice(Queue);
|
||||
|
||||
//
|
||||
// Set up post processing of the IOCTL IRP.
|
||||
//
|
||||
FilterForwardRequestWithCompletionRoutine(Request,
|
||||
WdfDeviceGetIoTarget(device));
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
VOID
|
||||
FilterForwardRequestWithCompletionRoutine(
|
||||
IN WDFREQUEST Request,
|
||||
IN WDFIOTARGET Target
|
||||
)
|
||||
/*++
|
||||
Routine Description:
|
||||
|
||||
This routine forwards the request to a lower driver with
|
||||
a completion so that when the request is completed by the
|
||||
lower driver, it can regain control of the request and look
|
||||
at the result.
|
||||
|
||||
--*/
|
||||
{
|
||||
BOOLEAN ret;
|
||||
NTSTATUS status;
|
||||
|
||||
//
|
||||
// The following funciton essentially copies the content of
|
||||
// current stack location of the underlying IRP to the next one.
|
||||
//
|
||||
WdfRequestFormatRequestUsingCurrentType(Request);
|
||||
|
||||
WdfRequestSetCompletionRoutine(Request,
|
||||
FilterRequestCompletionRoutine,
|
||||
WDF_NO_CONTEXT);
|
||||
|
||||
ret = WdfRequestSend(Request,
|
||||
Target,
|
||||
WDF_NO_SEND_OPTIONS);
|
||||
|
||||
if (ret == FALSE) {
|
||||
status = WdfRequestGetStatus (Request);
|
||||
KdPrint( ("WdfRequestSend failed: 0x%x\n", status));
|
||||
WdfRequestComplete(Request, status);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
VOID
|
||||
FilterRequestCompletionRoutine(
|
||||
IN WDFREQUEST Request,
|
||||
IN WDFIOTARGET Target,
|
||||
PWDF_REQUEST_COMPLETION_PARAMS CompletionParams,
|
||||
IN WDFCONTEXT Context
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
Completion Routine. Adjust the HID report data for the device.
|
||||
|
||||
Arguments:
|
||||
|
||||
Target - Target handle
|
||||
Request - Request handle
|
||||
Params - request completion params
|
||||
Context - Driver supplied context
|
||||
|
||||
|
||||
Return Value:
|
||||
|
||||
VOID
|
||||
|
||||
--*/
|
||||
{
|
||||
UNREFERENCED_PARAMETER(Target);
|
||||
UNREFERENCED_PARAMETER(Context);
|
||||
|
||||
PURB pUrb;
|
||||
PIRP pIrp;
|
||||
PIO_STACK_LOCATION pStack;
|
||||
PUCHAR pBuff;
|
||||
UINT16 bufLen;
|
||||
|
||||
pIrp = WdfRequestWdmGetIrp(Request);
|
||||
pStack = IoGetCurrentIrpStackLocation(pIrp);
|
||||
|
||||
pUrb = (PURB)pStack->Parameters.Others.Argument1;
|
||||
|
||||
if (pUrb != NULL) {
|
||||
switch (pUrb->UrbHeader.Function) {
|
||||
case URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER :
|
||||
//
|
||||
// HID report from the waveshare device does not set the
|
||||
// confidence bit when finger is lifted, so we modify the
|
||||
// report to set this bit.
|
||||
//
|
||||
pBuff = (PUCHAR)pUrb->UrbBulkOrInterruptTransfer.TransferBuffer;
|
||||
bufLen = (UINT16)pUrb->UrbBulkOrInterruptTransfer.TransferBufferLength;
|
||||
|
||||
//
|
||||
// Waveshare touchscreen HID input report layout:
|
||||
// (As of Rev2.1 Firmware. Subject to change by Manufacturer)
|
||||
//
|
||||
// Each HID input report contains contact information for 2 contacts.
|
||||
// Each contact generates 3 input reports (for a total of 5 contacts)
|
||||
//
|
||||
// Length = 14 bytes
|
||||
//
|
||||
// Layout:
|
||||
// Byte 0: Report Id
|
||||
// Contact Info:
|
||||
// Byte 1: Bitmap
|
||||
// bit 0 - Tip switch
|
||||
// bit 1 - In range
|
||||
// bit 2 - Touch Valid / Confidence
|
||||
// Byte 2: Contact Identifier (Finger number)
|
||||
// Byte 3-4: X position
|
||||
// Byte 5-6: Y position
|
||||
// Contact Info:
|
||||
// Byte 7: Bitmap:
|
||||
// bit 0 - Tip switch
|
||||
// bit 1 - In range
|
||||
// bit 2 - Touch Valid / Confidence
|
||||
// Byte 8: Contact Identifier (Finger number)
|
||||
// Byte 9-10: X position
|
||||
// Byte 11-12: Y position
|
||||
// Byte 13: Contact count
|
||||
//
|
||||
if ((bufLen == 0xe) && (pBuff != NULL)) {
|
||||
if (pBuff[0] == WAVESHARE_REPORT_ID) {
|
||||
//
|
||||
// This is an input HID report from the touchscreen.
|
||||
// Each HID report reports two fingers of data.
|
||||
// Set confidence bit if needed.
|
||||
//
|
||||
if ((pBuff[1] & CONFIDENCE_BIT) == 0) {
|
||||
pBuff[1] |= CONFIDENCE_BIT;
|
||||
}
|
||||
if ((pBuff[7] & CONFIDENCE_BIT) == 0) {
|
||||
pBuff[7] |= CONFIDENCE_BIT;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
WdfRequestComplete(Request, CompletionParams->IoStatus.Status);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,71 @@
|
|||
/*++
|
||||
|
||||
Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
|
||||
THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
|
||||
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
|
||||
PURPOSE.
|
||||
|
||||
Module Name:
|
||||
|
||||
filter.h
|
||||
|
||||
Abstract:
|
||||
|
||||
Contains structure definitions and function prototypes for the
|
||||
HIDUSB lower filter driver that supports the Waveshare 7" HDMI
|
||||
LCD touchscreen device (Rev 2.1)
|
||||
|
||||
Environment:
|
||||
|
||||
Kernel mode
|
||||
|
||||
--*/
|
||||
|
||||
#include <ntddk.h>
|
||||
#include <wdf.h>
|
||||
#include <wdmsec.h> // for SDDLs
|
||||
#define NTSTRSAFE_LIB
|
||||
#include <ntstrsafe.h>
|
||||
#include <usb.h>
|
||||
#if !defined(_FILTER_H_)
|
||||
#define _FILTER_H_
|
||||
|
||||
|
||||
#define DRIVERNAME "WaveshareFilter.sys: "
|
||||
|
||||
#define WAVESHARE_REPORT_ID 0x02
|
||||
#define CONFIDENCE_BIT 0x04
|
||||
|
||||
typedef struct _FILTER_EXTENSION
|
||||
{
|
||||
WDFDEVICE WdfDevice;
|
||||
|
||||
}FILTER_EXTENSION, *PFILTER_EXTENSION;
|
||||
|
||||
|
||||
WDF_DECLARE_CONTEXT_TYPE_WITH_NAME(FILTER_EXTENSION,
|
||||
FilterGetData)
|
||||
|
||||
DRIVER_INITIALIZE DriverEntry;
|
||||
EVT_WDF_DRIVER_DEVICE_ADD FilterEvtDeviceAdd;
|
||||
EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL FilterEvtIoDeviceControl;
|
||||
|
||||
VOID
|
||||
FilterForwardRequestWithCompletionRoutine(
|
||||
IN WDFREQUEST Request,
|
||||
IN WDFIOTARGET Target
|
||||
);
|
||||
|
||||
VOID
|
||||
FilterRequestCompletionRoutine(
|
||||
IN WDFREQUEST Request,
|
||||
IN WDFIOTARGET Target,
|
||||
PWDF_REQUEST_COMPLETION_PARAMS CompletionParams,
|
||||
IN WDFCONTEXT Context
|
||||
);
|
||||
|
||||
|
||||
#endif
|
||||
|
Двоичный файл не отображается.
|
@ -0,0 +1,11 @@
|
|||
#include <windows.h>
|
||||
#include <filter.h>
|
||||
#include <ntverp.h>
|
||||
|
||||
#define VER_FILETYPE VFT_DRV
|
||||
#define VER_FILESUBTYPE VFT2_DRV_SYSTEM
|
||||
#define VER_FILEDESCRIPTION_STR "Hidusb Lower Filter for Waveshare Touchscreen"
|
||||
#define VER_INTERNALNAME_STR DRIVERNAME
|
||||
#define VER_ORIGINALFILENAME_STR DRIVERNAME
|
||||
|
||||
#include "common.ver"
|
|
@ -0,0 +1,260 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|ARM">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>ARM</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|ARM">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>ARM</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{B39F6628-73BA-4AC3-863A-EA20892F1EFD}</ProjectGuid>
|
||||
<RootNamespace>$(MSBuildProjectName)</RootNamespace>
|
||||
<KMDF_VERSION_MAJOR>1</KMDF_VERSION_MAJOR>
|
||||
<SupportsPackaging>false</SupportsPackaging>
|
||||
<RequiresPackageProject>true</RequiresPackageProject>
|
||||
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
|
||||
<Platform Condition="'$(Platform)' == ''">Win32</Platform>
|
||||
<SampleGuid>{92082E8D-0D74-485B-9578-34DB3ED3F74D}</SampleGuid>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>False</UseDebugLibraries>
|
||||
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||
<DriverType>KMDF</DriverType>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>Driver</ConfigurationType>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>True</UseDebugLibraries>
|
||||
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||
<DriverType>KMDF</DriverType>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>Driver</ConfigurationType>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>False</UseDebugLibraries>
|
||||
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||
<DriverType>KMDF</DriverType>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>Driver</ConfigurationType>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>False</UseDebugLibraries>
|
||||
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||
<DriverType>KMDF</DriverType>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>Driver</ConfigurationType>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>True</UseDebugLibraries>
|
||||
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||
<DriverType>KMDF</DriverType>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>Driver</ConfigurationType>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>True</UseDebugLibraries>
|
||||
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||
<DriverType>KMDF</DriverType>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>Driver</ConfigurationType>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<PropertyGroup>
|
||||
<OutDir>$(IntDir)</OutDir>
|
||||
</PropertyGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
|
||||
</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')" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
|
||||
</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')" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
|
||||
</ImportGroup>
|
||||
<ItemGroup Label="WrappedTaskItems">
|
||||
<Inf Include="filter.inx">
|
||||
<Architecture>$(InfArch)</Architecture>
|
||||
<SpecifyArchitecture>true</SpecifyArchitecture>
|
||||
<CopyOutput>.\$(IntDir)\WaveshareFilter.inf</CopyOutput>
|
||||
</Inf>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<TargetName>WaveshareFilter</TargetName>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<TargetName>WaveshareFilter</TargetName>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<TargetName>WaveshareFilter</TargetName>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
|
||||
<TargetName>WaveshareFilter</TargetName>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<TargetName>WaveshareFilter</TargetName>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
|
||||
<TargetName>WaveshareFilter</TargetName>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<ExceptionHandling>
|
||||
</ExceptionHandling>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>%(AdditionalDependencies);$(DDK_LIB_PATH)\wdmsec.lib</AdditionalDependencies>
|
||||
</Link>
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ResourceCompile>
|
||||
<Midl>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</Midl>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<ExceptionHandling>
|
||||
</ExceptionHandling>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>%(AdditionalDependencies);$(DDK_LIB_PATH)\wdmsec.lib</AdditionalDependencies>
|
||||
</Link>
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ResourceCompile>
|
||||
<Midl>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</Midl>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<ExceptionHandling>
|
||||
</ExceptionHandling>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>%(AdditionalDependencies);$(DDK_LIB_PATH)\wdmsec.lib</AdditionalDependencies>
|
||||
</Link>
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ResourceCompile>
|
||||
<Midl>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</Midl>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
|
||||
<ClCompile>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<ExceptionHandling>
|
||||
</ExceptionHandling>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>%(AdditionalDependencies);$(DDK_LIB_PATH)\wdmsec.lib</AdditionalDependencies>
|
||||
</Link>
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ResourceCompile>
|
||||
<Midl>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</Midl>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<ExceptionHandling>
|
||||
</ExceptionHandling>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>%(AdditionalDependencies);$(DDK_LIB_PATH)\wdmsec.lib</AdditionalDependencies>
|
||||
</Link>
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ResourceCompile>
|
||||
<Midl>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</Midl>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
|
||||
<ClCompile>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<ExceptionHandling>
|
||||
</ExceptionHandling>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>%(AdditionalDependencies);$(DDK_LIB_PATH)\wdmsec.lib</AdditionalDependencies>
|
||||
</Link>
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ResourceCompile>
|
||||
<Midl>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</Midl>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="filter.c" />
|
||||
<ResourceCompile Include="filter.rc" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Inf Exclude="@(Inf)" Include="*.inf" />
|
||||
<FilesToPackage Include="$(TargetPath)" Condition="'$(ConfigurationType)'=='Driver' or '$(ConfigurationType)'=='DynamicLibrary'" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Exclude="@(None)" Include="*.txt;*.htm;*.html" />
|
||||
<None Exclude="@(None)" Include="*.ico;*.cur;*.bmp;*.dlg;*.rct;*.gif;*.jpg;*.jpeg;*.wav;*.jpe;*.tiff;*.tif;*.png;*.rc2" />
|
||||
<None Exclude="@(None)" Include="*.def;*.bat;*.hpj;*.asmx" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Exclude="@(ClInclude)" Include="*.h;*.hpp;*.hxx;*.hm;*.inl;*.xsd" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
</Project>
|
|
@ -0,0 +1,41 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Source Files">
|
||||
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
|
||||
<UniqueIdentifier>{E3242171-0D71-4EAC-94E0-E3B9FC647C16}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Header Files">
|
||||
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||
<UniqueIdentifier>{D593E254-6A82-4D73-A34E-CD7D019FB577}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Resource Files">
|
||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml</Extensions>
|
||||
<UniqueIdentifier>{5240632B-924D-4233-AE9C-CE317927559C}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Driver Files">
|
||||
<Extensions>inf;inv;inx;mof;mc;</Extensions>
|
||||
<UniqueIdentifier>{B6CEB15F-684F-4D1C-A9C3-400B108BC28E}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="filter.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="filter.rc">
|
||||
<Filter>Resource Files</Filter>
|
||||
</ResourceCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="*.h;*.hpp;*.hxx;*.hm;*.inl;*.xsd">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Inf Include="..\filter.inx">
|
||||
<Filter>Driver Files</Filter>
|
||||
</Inf>
|
||||
</ItemGroup>
|
||||
</Project>
|
Загрузка…
Ссылка в новой задаче