/// <summary> /// Disposes this I2C bus instance. Also disposes all devices associated with this bus. /// </summary> protected override void Dispose(bool disposing) { if (disposing) { if (_board != null) { _board.RemoveBus(this); _board.ReleasePin(_sdaPin, PinUsage.I2c, this); _board.ReleasePin(_sclPin, PinUsage.I2c, this); } foreach (var dev in _devices) { dev.Value.Dispose(); } _devices.Clear(); _busInstance?.Dispose(); _busInstance = null !; _board = null; } base.Dispose(disposing); }
/// <inheritdoc/> public void Dispose() { if (_shouldDispose) { _i2cBus?.Dispose(); } else { _ledMatrix?.Dispose(); _ledMatrix = null !; _joystick?.Dispose(); _joystick = null !; _gyro?.Dispose(); _gyro = null !; _mag?.Dispose(); _mag = null !; _temp?.Dispose(); _temp = null !; _press?.Dispose(); _press = null !; } _i2cBus = null !; }
/// <inheritdoc/> public void Dispose() { if (_shouldDispose) { _i2cBus?.Dispose(); } else { LedMatrix?.Dispose(); LedMatrix = null !; Joystick?.Dispose(); Joystick = null !; Gyroscope?.Dispose(); Gyroscope = null !; Magnetometer?.Dispose(); Magnetometer = null !; TemperatureAndHumidity?.Dispose(); TemperatureAndHumidity = null !; PressureAndTemperature?.Dispose(); PressureAndTemperature = null !; } _i2cBus = null !; }
public void I2C_I2cBus_MultipleDispose() { // Every dispose operation we do twice to make sure it won't cause issues. // Devices are frequently wrapped and this can happen in real apps // we dispose device first, then bus I2cBus i2cBus = CreateI2cBusForBme280(); Bme280 bme280 = CreateBme280(i2cBus); bme280.Dispose(); bme280.Dispose(); i2cBus.Dispose(); i2cBus.Dispose(); // we dispose bus first, then device i2cBus = CreateI2cBusForBme280(); bme280 = CreateBme280(i2cBus); i2cBus.Dispose(); i2cBus.Dispose(); bme280.Dispose(); bme280.Dispose(); }