INSTAR Deutschland GmbH

Windows IoT & Raspberry Pi

Raspberry Pi Example

This project explains how to use a capacitive touch screen for Raspberry Pi with Windows IoT Core.

To support this screen, a kernel-mode display-only driver was created to establish direct access to the Adafruit PiTFT display via SPI. The driver initializes the display and presents at 16 frames per second.

To allow for direct user interaction with the display, a User-Mode Touch Injection Background Service establishes touch input through an I2C bus and uses a HID injection driver to inject touch events. Touch capabilities include single point touch (pressing) and swiping. UWP XAML windows application running on the Pi will present without any changes.

Initial Setup

  1. Set up your PC and Raspberry Pi according to these instructions.
  2. Next, match the pins of the Adafruit PiTFT to those of the Pi to mount the display.

Windows IoT Core


  1. Software Setup: From the initial setup, be sure to note your Raspberry Pi's IP address as this will be necessary going forward. This project currently requires that you build several drivers and user mode applications.

Please install the following environments:

  • Visual Studio 2015 Update 3 or later
  • Windows Driver Development Kit
  • Download the screen provider source code from Github and extract to your file system. Note the location.
  • Open a command window, and change the directory to where you extracted the screen provider source code. Navigate to the directory \drivers\fixedkmdod\KMDOD.
  • Compile the spidisplay.asl file using the following command:

"C:\Program Files (x86)\Windows Kits\10\Tools\x86\ACPIVerify\asl.exe" spidisplay.asl


Windows IoT Core


  1. Open the solution in the kmdod folder and compile this driver for ARM.

Windows IoT Core

Windows IoT Core


1>------ Build started: Project: SampleDisplay, Configuration: Debug ARM ------
1>Building 'SampleDisplay' with toolset 'WindowsKernelModeDriver10.0' and the 'Universal' target platform.
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppBuild.targets(402,5): warning MSB8038: Spectre mitigation is enabled but Spectre mitigated libraries are not found.  Verify that the Visual Studio Workload includes the Spectre mitigated libraries.  See https://aka.ms/Ofhn4c for more information.
1>Stamping ARM\Debug\sampledisplay.inf
1>Stamping [Version] section with DriverVer=12/11/2018,17.56.26.778
1>BDD.cxx
1>BDD_DDI.cxx
1>BDD_DMM.cxx
1>BDD_Util.cxx
1>BltFuncs.cxx
1>BltHw.cxx
1>memory.cxx
1>Generating code
1>Finished generating code
1>SampleDisplay.vcxproj -> E:\ms-iot-ScreenProvider\drivers\fixedkmdod\KMDOD\Sample\ARM\Debug\SampleDisplay.sys
1>Done Adding Additional Store
1>Successfully signed: E:\ms-iot-ScreenProvider\drivers\fixedkmdod\KMDOD\Sample\ARM\Debug\SampleDisplay.sys
1>
1>Driver is a Universal Driver.
1>Done building project "SampleDisplay.vcxproj".
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
  1. Open a run dialog and navigate to your Raspberry Pi over the network.

\\C$

  1. Create a directory called 'Deploy' on the Raspberry Pi and copy the following files from your computer to that new directory:

.\drivers\fixedkmdod\KMDOD

ACPITABL.dat

Windows IoT Core


.\drivers\fixedkmdod\KMDOD\Sample\ARM\Debug

SampleDisplay.inf
SampleDisplay.sys

Windows IoT Core


  1. The file sharing server on your Windows IoT Core device starts automatically on boot. In order to connect to it, you need the IP address of your device. You can find the IP address on the Windows 10 IoT Core Dashboard. Once you have the IP, open up File Explorer on your computer and type \\<TARGET_DEVICE>\c$, where <TARGET_DEVICE> is either the name or the IP Address of your Windows IoT Core device, then hit Enter.

Windows IoT Core


Login with your Administrator account, create a folder called Projects and upload the files SampleDisplay.inf and SampleDisplay.sys you just prepared:


Windows IoT Core


  1. And copy the ACPITABL.dat file to C:\Windows\System32. The display driver should now have all the correct files.

Windows IoT Core


  1. You can use the Windows 10 IoT Core Dashboard to connect to your Pi with PowerShell:

Windows IoT Core

Windows IoT Core


Install the driver package in your terminal by running the command below. You can check to make sure it's added using devcon dp_enum or delete it with devcon dp_delete:

devcon dp_add C:\Projects\sampledisplay.inf

Windows IoT Core


Restart your Pi to see the display running.


Windows IoT Core


  1. Adding Touch: Follow these instructions to setup the HID Injection driver.
  2. Put HidInjector.exe from the project folder into the deploy folder.
  3. Schedule the HidInjector to run on boot by running this command on the Raspberry Pi via SSH:
schtasks.exe /Create /SC ONSTART /TN \Microsoft\Windows\HidInjector\Start /TR %SystemRoot%\Deploy\HidInjector.exe
  1. Restart your Raspberry Pi.