public CallbackInfo AddCallback(int gpio, Edge edge, GpioCallback callback) { List <CallbackInfo> callbacks; lock (this.m_callbacks) { if (this.m_callbacks.ContainsKey(gpio)) { callbacks = this.m_callbacks[gpio]; } else { short ret = PiGpioNativeMethods.SetAlertFunc((ushort)gpio, this.GpioAlertCallback); if (ret < 0) { throw new PiGPIOException(ret); } callbacks = new List <CallbackInfo>(); this.m_callbacks.Add(gpio, callbacks); } } CallbackInfo cbi = new CallbackInfo((uint)gpio, 0, edge, callback); lock (callbacks) { callbacks.Add(cbi); } return(cbi); }
public void RemoveCallback(CallbackInfo callback) { List <CallbackInfo> callbacks; lock (this.m_callbacks) { if (!this.m_callbacks.ContainsKey(callback.Port)) { return; } callbacks = this.m_callbacks[callback.Port]; } lock (callbacks) { callbacks.Remove(callback); } }
public CallbackInfo AddCallback(int userGpio, Edge edge, GpioCallback callback) { CallbackInfo info; uint bits = 1u << userGpio; lock (this.m_callbacks) { uint newMonitor = this.m_monitor | bits; if (this.IsConnected) { this.NB(this.m_handle, newMonitor); } this.m_monitor = newMonitor; info = new CallbackInfo((uint)userGpio, bits, edge, callback); this.m_callbacks.Add(info); } return(info); }
public void RemoveCallback(CallbackInfo callback) { if (callback == null) { throw new ArgumentNullException(nameof(callback)); } lock (this.m_callbackLock) { if (!this.m_callbacks.Contains(callback)) { return; } uint newMonitor = 0; this.m_callbacks.ForEach(c => newMonitor |= c.Bits); if (this.IsConnected && newMonitor != this.m_monitor) { this.NB(this.m_handle, newMonitor); } this.m_monitor = newMonitor; } }
void IPiGPIO.RemoveCallback(CallbackInfo callback) { throw new NotImplementedException(); }
void IPiGPIO.RemoveCallback(CallbackInfo callback) { throw new NotSupportedException(); }