Windows 10

OpenThread includes Windows 10 drivers necessary for interfacing with UART NCP devices. The design allows for support of both simple radio devices and devices running the complete OpenThread stack.

For example drivers, see GitHub.

Supported devices

Architecture

otApi.dll

OT Windows Architecture

This is the dynamic libray for applications to control the OpenThread stack from the user mode. It exposes all the control path APIs from openthread.h. It interfaces with the driver via Input/Output Controls (IOCTLs). The IOCTLs allow otApi.dll to serialize and send commands, and poll for notifications, which can then be returned back to the client.

otLwf.sys

This is where most of the real logic lives. otLwf.sys is an NDIS Light Weight Filter (LWF) driver. It plugs into the networking stack, binding to a protocol driver (TCPIP) at the top, and an NDIS Miniport at the bottom. It's job is to take IPv6 packets from TCPIP and pass the necessary data down to the Miniport in order to send the packets out over the network.

otLwf.sys supports operating in two modes: Full Stack and Tunnel.

  • Full Stack mode — OpenThread runs on the host (in Windows) and a simple radio device is connected externally
  • Tunnel mode — OpenThread runs on the external device and Windows is merely a pass through for commands and packets.

In both cases, otLwf.sys uses the Spinel command interface for interacting with the connected device. When operating in Full Stack mode, otLwf.sys uses only the low level PHY/MAC commands. In Tunnel mode, it uses the higher layer Spinel commands and lets the device manage the actual Thread stack.

ottmp.sys

This is the component responsible passing the Spinel commands from otLwf.sys down to the device. It is responsible for abstracting the actual mechanism (USB, Serial, SPI) used for communicating with the device. It handles the device arrival/removal and the encoding/decoding of data when communicating with it. The current implementation only handles Serial devices.

Device

Windows supports OpenThread devices that:

  • Implement the Spinel protocol
  • Support either the raw link-layer PHY/MAC commands or Thread commands (or both)

By default, Windows operates in Full Stack mode, only sending raw link-layer commands.