You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

66 lines
996B

  1. #pragma once
  2. #include "SchmidtTrigger.h"
  3. #include <assert.h>
  4. class GateTrigger
  5. {
  6. public:
  7. GateTrigger() :
  8. _gate(false),
  9. _trigger(false),
  10. _reset(true)
  11. {
  12. }
  13. void go(float v)
  14. {
  15. const bool newGate = _sc.go(v);
  16. if (_reset) {
  17. if (newGate) // in reset state need to wait for low
  18. return;
  19. else
  20. _reset = false;
  21. }
  22. _trigger = newGate && !_gate;
  23. _gate = newGate;
  24. }
  25. void reset()
  26. {
  27. _gate = false;
  28. _trigger = false;
  29. _reset = true;
  30. }
  31. bool gate() const
  32. {
  33. return _gate;
  34. }
  35. bool trigger() const
  36. {
  37. return _trigger;
  38. }
  39. float thhi() const
  40. {
  41. return _sc.thhi();
  42. }
  43. float thlo() const
  44. {
  45. return _sc.thlo();
  46. }
  47. private:
  48. SchmidtTrigger _sc;
  49. bool _gate;
  50. bool _trigger;
  51. bool _reset; // just reset - gate must go low before high to trigger
  52. };