// BE CAREFUL! RUNS ON A SEPARATE THREAD! public NodeDriver ReadConfiguration() { var driver = NodeDriver.BuildWith( new FieldGuid(SnapDriver.GAMECONTROLLERS_DRIVER_ID), // TypeId new FieldString(string.Empty), // Address new FieldBase64(string.Empty), // Configuration new FieldString(Resources.Strings.DriverName)); // DriverName driver = driver.SetRunning(new FieldBool(Running)); // status only if (Running && this.directInput != null) // Running property is threadsafe { var devicesMutable = new Collection <NodeDevice>(); var joystickDevices = getJoystickCompatibleDevices(); foreach (var joystickDevice in joystickDevices) { var dev = JoystickDevice.StaticBuild(this.directInput, joystickDevice); devicesMutable.Add(dev); } driver = driver.NodeDeviceChildren.Append( new ReadOnlyCollection <NodeDevice>(devicesMutable)); } return(driver); }