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.
This is the dynamic libray for applications to control the OpenThread stack from
the user mode. It exposes all the control path APIs from
interfaces with the driver via Input/Output Controls
The IOCTLs allow
otApi.dll to serialize and send commands, and poll for
notifications, which can then be returned back to the client.
This is where most of the real logic lives.
otLwf.sys is an
Light Weight Filter
driver. It plugs into the networking stack, binding to a protocol driver (TCPIP)
at the top, and an NDIS
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
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,
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.
This is the component responsible passing the Spinel commands from
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.
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.