Developed a Windows driver to transfer data (video/graphics) between a Graphics card and a Xilinx development board using DMA. The driver was built using Windows KMDF (Kernel Mode Driver Framework) and supported features such as scatter gather DMA and ATI Crossfire (point to point transfers). The development of the driver involved remote Kernel debugging using WinDbg. It also involved the creation of the a DirectX application and a Windows test tool shown below
Wrote a NE2000 driver for VxWorks to replace the built in one which had a design flaw. The original driver would hang when too many packets arrived within a certain period of time (ring buffer overflow).
Updated a legacy driver to work on a custom PC motherboard used in motor vehicles.
The legacy driver consisted of over 7000 lines of kernel mode code to control various devices (Super I/O, CPLD, ARM etc).
By moving 99% of the functionality in to a user mode DLL and using object oriented design, the new kernel driver came to only 20 lines of code, and the DLL was around 2000 lines. This made it a lot easier to maintain and extend, because adding new devices/registers just required changing the dll not the driver. The code was fully documented using Doxygen, here is screen shot of the documentation showing a class diagram for the various devices on the motherboard.
The test application used to test the driver/dll.
This driver was created using Microsoft's new User Mode Driver Framework (UMDF). If something goes wrong with a kernel mode driver, Windows will blue screen. There are a lot of drivers which don't actually need access to hardware and therefore run in kernel mode, so Microsoft created UMDF. This particular driver installed a virtual serial port which passed data to and from a pipe (or could have been a socket). The software was fully document in Doxygen, a screen shot is shown below.
Part of the Operating Systems module at Reading University involved creating our own OS for the 68000 on a VME bus. The task switching was already provided but everything else was built from scatch. This included a
Some screen shots below ( the doom loading message is just a joke ).