/// <summary> /// Open the connection /// </summary> public override void Open() { bool hasError = false; try { int r = 0; sessionHandle = new MonoLibUsb.MonoUsbSessionHandle(); if (sessionHandle.IsInvalid) { hasError = true; } deviceHandle = MonoLibUsb.MonoUsbApi.OpenDeviceWithVidPid(sessionHandle, settings.VendorId, settings.ProductId); if ((deviceHandle == null) || deviceHandle.IsInvalid) { hasError = true; } if (type == BrickType.NXT) { if (resetDvice) { MonoLibUsb.MonoUsbApi.ResetDevice(deviceHandle); deviceHandle.Close(); deviceHandle = MonoLibUsb.MonoUsbApi.OpenDeviceWithVidPid(sessionHandle, settings.VendorId, settings.ProductId); if ((deviceHandle == null) || deviceHandle.IsInvalid) { hasError = true; } } // Set configuration r = MonoLibUsb.MonoUsbApi.SetConfiguration(deviceHandle, settings.Configuration); if (r != 0) { hasError = true; } } else { MonoLibUsb.MonoUsbApi.DetachKernelDriver(deviceHandle, settings.Interface); } // Claim interface r = MonoLibUsb.MonoUsbApi.ClaimInterface(deviceHandle, settings.Interface); if (r != 0) { hasError = true; } } catch { throw new ConnectionException(ConnectionError.OpenError); } if (hasError) { throw new ConnectionException(ConnectionError.OpenError); } isConnected = true; ConnectionWasOpened(); }
/// <summary> /// Close the connection /// </summary> public override void Close() { try{ // Free and close resources if (deviceHandle != null) { if (!deviceHandle.IsInvalid) { MonoLibUsb.MonoUsbApi.ReleaseInterface(deviceHandle, settings.Interface); deviceHandle.Close(); } } if (sessionHandle != null) { sessionHandle.Close(); sessionHandle = null; } } catch {} isConnected = false; ConnectionWasClosed(); }