protected override void Dispose(bool disposing)
{
// Only managed resources to dispose
if (!disposing)
return;
// Un-hook events
_inputPin.ValueChanged -= OnInputPinValueChanged;
// Stop background tasks
_stop?.Cancel();
// Stop events
_valueTrigger?.Dispose();
_frameTrigger?.Dispose();
// Close device
_inputPin?.Dispose();
}