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.

61 lines
1.1KB

  1. #include "DistributedClock.hpp"
  2. namespace SynthDevKit {
  3. DistributedClock::DistributedClock (bool master, float trigger) {
  4. isMaster = master;
  5. upstreamCV = new CV(trigger);
  6. clockCV = new CV(trigger);
  7. reset();
  8. }
  9. void DistributedClock::update (uint8_t count, float upstreamValue, float clockValue) {
  10. upstreamCV->update(upstreamValue);
  11. clockCV->update(clockValue);
  12. totalTriggers = count;
  13. if (upstreamCV->newTrigger()) {
  14. reset();
  15. isActive = true;
  16. totalTriggers = count;
  17. }
  18. }
  19. void DistributedClock::reset ( ) {
  20. upstreamCV->reset();
  21. clockCV->reset();
  22. if (isMaster) {
  23. isActive = true;
  24. } else {
  25. isActive = false;
  26. }
  27. triggerCount = 0;
  28. totalTriggers = 0;
  29. }
  30. bool DistributedClock::triggerClock ( ) {
  31. if (triggerCount == totalTriggers) {
  32. return false;
  33. }
  34. if (clockCV->newTrigger() && isActive) {
  35. triggerCount++;
  36. return true;
  37. }
  38. return false;
  39. }
  40. bool DistributedClock::triggerDownstream ( ) {
  41. if (triggerCount == totalTriggers && isActive) {
  42. isActive = false;
  43. return true;
  44. }
  45. return false;
  46. }
  47. }