/// <summary> /// Initialize a MPR121 controller. /// </summary> /// <param name="device">The i2c device.</param> /// <param name="periodRefresh">The period in milliseconds of refresing the channel statuses.</param> /// <param name="configuration">The controller configuration.</param> public Mpr121(I2cDevice device, int periodRefresh = -1, Mpr121Configuration configuration = null) { configuration = configuration ?? GetDefaultConfiguration(); _device = device; _timer = new Timer(RefreshChannelStatuses, this, Timeout.Infinite, Timeout.Infinite); _statuses = new Dictionary <Channels, bool>(); foreach (Channels channel in Enum.GetValues(typeof(Channels))) { _statuses.Add(channel, false); } InitializeController(configuration); PeriodRefresh = periodRefresh; }
private void InitializeController(Mpr121Configuration configuration) { SetRegister(Registers.MHDR, configuration.MaxHalfDeltaRising); SetRegister(Registers.NHDR, configuration.NoiseHalfDeltaRising); SetRegister(Registers.NCLR, configuration.NoiseCountLimitRising); SetRegister(Registers.FDLR, configuration.FilterDelayCountLimitRising); SetRegister(Registers.MHDF, configuration.MaxHalfDeltaFalling); SetRegister(Registers.NHDF, configuration.NoiseHalfDeltaFalling); SetRegister(Registers.NCLF, configuration.NoiseCountLimitFalling); SetRegister(Registers.FDLF, configuration.FilterDelayCountLimitFalling); SetRegister(Registers.E0TTH, configuration.ElectrodeTouchThreshold); SetRegister(Registers.E0RTH, configuration.ElectrodeReleaseThreshold); SetRegister(Registers.E1TTH, configuration.ElectrodeTouchThreshold); SetRegister(Registers.E1RTH, configuration.ElectrodeReleaseThreshold); SetRegister(Registers.E2TTH, configuration.ElectrodeTouchThreshold); SetRegister(Registers.E2RTH, configuration.ElectrodeReleaseThreshold); SetRegister(Registers.E3TTH, configuration.ElectrodeTouchThreshold); SetRegister(Registers.E3RTH, configuration.ElectrodeReleaseThreshold); SetRegister(Registers.E4TTH, configuration.ElectrodeTouchThreshold); SetRegister(Registers.E4RTH, configuration.ElectrodeReleaseThreshold); SetRegister(Registers.E5TTH, configuration.ElectrodeTouchThreshold); SetRegister(Registers.E5RTH, configuration.ElectrodeReleaseThreshold); SetRegister(Registers.E6TTH, configuration.ElectrodeTouchThreshold); SetRegister(Registers.E6RTH, configuration.ElectrodeReleaseThreshold); SetRegister(Registers.E7TTH, configuration.ElectrodeTouchThreshold); SetRegister(Registers.E7RTH, configuration.ElectrodeReleaseThreshold); SetRegister(Registers.E8TTH, configuration.ElectrodeTouchThreshold); SetRegister(Registers.E8RTH, configuration.ElectrodeReleaseThreshold); SetRegister(Registers.E9TTH, configuration.ElectrodeTouchThreshold); SetRegister(Registers.E9RTH, configuration.ElectrodeReleaseThreshold); SetRegister(Registers.E10TTH, configuration.ElectrodeTouchThreshold); SetRegister(Registers.E10RTH, configuration.ElectrodeReleaseThreshold); SetRegister(Registers.E11TTH, configuration.ElectrodeTouchThreshold); SetRegister(Registers.E11RTH, configuration.ElectrodeReleaseThreshold); SetRegister(Registers.CDTC, configuration.ChargeDischargeTimeConfiguration); SetRegister(Registers.ELECONF, configuration.ElectrodeConfiguration); }