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.

84 lines
2.9KB

  1. #include "Switch.hpp"
  2. void bogaudio::Switch::onReset() {
  3. _trigger.reset();
  4. }
  5. void bogaudio::Switch::step() {
  6. bool latched = params[LATCH_PARAM].value > 0.5f;
  7. lights[LATCH_LIGHT].value = latched;
  8. bool triggered = _trigger.process(params[GATE_PARAM].value + inputs[GATE_INPUT].value);
  9. if (latched) {
  10. if (triggered) {
  11. _latchedHigh = !_latchedHigh;
  12. }
  13. }
  14. else {
  15. _latchedHigh = false;
  16. }
  17. if (_latchedHigh || _trigger.isHigh()) {
  18. outputs[OUT1_OUTPUT].value = inputs[HIGH1_INPUT].value;
  19. outputs[OUT2_OUTPUT].value = inputs[HIGH2_INPUT].value;
  20. }
  21. else {
  22. outputs[OUT1_OUTPUT].value = inputs[LOW1_INPUT].value;
  23. outputs[OUT2_OUTPUT].value = inputs[LOW2_INPUT].value;
  24. }
  25. }
  26. struct SwitchWidget : ModuleWidget {
  27. static constexpr int hp = 3;
  28. SwitchWidget(bogaudio::Switch* module) : ModuleWidget(module) {
  29. box.size = Vec(RACK_GRID_WIDTH * hp, RACK_GRID_HEIGHT);
  30. {
  31. SVGPanel *panel = new SVGPanel();
  32. panel->box.size = box.size;
  33. panel->setBackground(SVG::load(assetPlugin(plugin, "res/Switch.svg")));
  34. addChild(panel);
  35. }
  36. addChild(Widget::create<ScrewSilver>(Vec(0, 0)));
  37. addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 15, 365)));
  38. // generated by svg_widgets.rb
  39. auto gateParamPosition = Vec(13.5, 22.0);
  40. auto latchParamPosition = Vec(32.9, 82.9);
  41. auto gateInputPosition = Vec(10.5, 44.0);
  42. auto high1InputPosition = Vec(10.5, 100.0);
  43. auto low1InputPosition = Vec(10.5, 136.0);
  44. auto high2InputPosition = Vec(10.5, 217.0);
  45. auto low2InputPosition = Vec(10.5, 253.0);
  46. auto out1OutputPosition = Vec(10.5, 174.0);
  47. auto out2OutputPosition = Vec(10.5, 291.0);
  48. auto latchLightPosition = Vec(4.0, 84.5);
  49. // end generated by svg_widgets.rb
  50. addParam(ParamWidget::create<Button18>(gateParamPosition, module, bogaudio::Switch::GATE_PARAM, 0.0, 10.0, 0.0));
  51. addParam(ParamWidget::create<StatefulButton9>(latchParamPosition, module, bogaudio::Switch::LATCH_PARAM, 0.0, 1.0, 0.0));
  52. addInput(Port::create<Port24>(gateInputPosition, Port::INPUT, module, bogaudio::Switch::GATE_INPUT));
  53. addInput(Port::create<Port24>(high1InputPosition, Port::INPUT, module, bogaudio::Switch::HIGH1_INPUT));
  54. addInput(Port::create<Port24>(low1InputPosition, Port::INPUT, module, bogaudio::Switch::LOW1_INPUT));
  55. addInput(Port::create<Port24>(high2InputPosition, Port::INPUT, module, bogaudio::Switch::HIGH2_INPUT));
  56. addInput(Port::create<Port24>(low2InputPosition, Port::INPUT, module, bogaudio::Switch::LOW2_INPUT));
  57. addOutput(Port::create<Port24>(out1OutputPosition, Port::OUTPUT, module, bogaudio::Switch::OUT1_OUTPUT));
  58. addOutput(Port::create<Port24>(out2OutputPosition, Port::OUTPUT, module, bogaudio::Switch::OUT2_OUTPUT));
  59. addChild(ModuleLightWidget::create<SmallLight<GreenLight>>(latchLightPosition, module, bogaudio::Switch::LATCH_LIGHT));
  60. }
  61. };
  62. RACK_PLUGIN_MODEL_INIT(Bogaudio, Switch) {
  63. Model *modelSwitch = createModel<Switch, SwitchWidget>("Bogaudio-Switch", "Switch", "signal router", SWITCH_TAG);
  64. return modelSwitch;
  65. }