|  | @@ -23,8 +23,10 @@ USE_NAMESPACE_DISTRHO; | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | struct HostCV : Module { |  |  | struct HostCV : Module { | 
														
													
														
															
																|  |  | enum ParamIds { |  |  | enum ParamIds { | 
														
													
														
															
																|  |  | BIPOLAR_INPUTS, |  |  |  | 
														
													
														
															
																|  |  | BIPOLAR_OUTPUTS, |  |  |  | 
														
													
														
															
																|  |  |  |  |  | BIPOLAR_INPUTS_1_5, | 
														
													
														
															
																|  |  |  |  |  | BIPOLAR_INPUTS_6_10, | 
														
													
														
															
																|  |  |  |  |  | BIPOLAR_OUTPUTS_1_5, | 
														
													
														
															
																|  |  |  |  |  | BIPOLAR_OUTPUTS_6_10, | 
														
													
														
															
																|  |  | NUM_PARAMS |  |  | NUM_PARAMS | 
														
													
														
															
																|  |  | }; |  |  | }; | 
														
													
														
															
																|  |  | enum InputIds { |  |  | enum InputIds { | 
														
													
												
													
														
															
																|  | @@ -40,8 +42,10 @@ struct HostCV : Module { | 
														
													
														
															
																|  |  | HostCV() |  |  | HostCV() | 
														
													
														
															
																|  |  | { |  |  | { | 
														
													
														
															
																|  |  | config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); |  |  | config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); | 
														
													
														
															
																|  |  | configParam<SwitchQuantity>(BIPOLAR_INPUTS, 0.f, 1.f, 1.f, "Bipolar Inputs")->randomizeEnabled = false; |  |  |  | 
														
													
														
															
																|  |  | configParam<SwitchQuantity>(BIPOLAR_OUTPUTS, 0.f, 1.f, 1.f, "Bipolar Outputs")->randomizeEnabled = false; |  |  |  | 
														
													
														
															
																|  |  |  |  |  | configParam<SwitchQuantity>(BIPOLAR_INPUTS_1_5, 0.f, 1.f, 0.f, "Bipolar Inputs 1-5")->randomizeEnabled = false; | 
														
													
														
															
																|  |  |  |  |  | configParam<SwitchQuantity>(BIPOLAR_INPUTS_6_10, 0.f, 1.f, 0.f, "Bipolar Inputs 6-10")->randomizeEnabled = false; | 
														
													
														
															
																|  |  |  |  |  | configParam<SwitchQuantity>(BIPOLAR_OUTPUTS_1_5, 0.f, 1.f, 0.f, "Bipolar Outputs 1-5")->randomizeEnabled = false; | 
														
													
														
															
																|  |  |  |  |  | configParam<SwitchQuantity>(BIPOLAR_OUTPUTS_6_10, 0.f, 1.f, 0.f, "Bipolar Outputs 6-10")->randomizeEnabled = false; | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | CardinalPluginContext* const pcontext = reinterpret_cast<CardinalPluginContext*>(APP); |  |  | CardinalPluginContext* const pcontext = reinterpret_cast<CardinalPluginContext*>(APP); | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
												
													
														
															
																|  | @@ -73,13 +77,24 @@ struct HostCV : Module { | 
														
													
														
															
																|  |  | return; |  |  | return; | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | const uint32_t dataFrame = pcontext->dataFrame++; |  |  | const uint32_t dataFrame = pcontext->dataFrame++; | 
														
													
														
															
																|  |  | const float inputOffset = params[BIPOLAR_INPUTS].getValue() > 0.1f ? 5.0f : 0.0f; |  |  |  | 
														
													
														
															
																|  |  | const float outputOffset = params[BIPOLAR_OUTPUTS].getValue() > 0.1f ? 5.0f : 0.0f; |  |  |  | 
														
													
														
															
																|  |  |  |  |  | float inputOffset, outputOffset; | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | for (int i=0; i<10; ++i) |  |  |  | 
														
													
														
															
																|  |  |  |  |  | inputOffset = params[BIPOLAR_INPUTS_1_5].getValue() > 0.1f ? 5.0f : 0.0f; | 
														
													
														
															
																|  |  |  |  |  | outputOffset = params[BIPOLAR_OUTPUTS_1_5].getValue() > 0.1f ? 5.0f : 0.0f; | 
														
													
														
															
																|  |  |  |  |  | 
 | 
														
													
														
															
																|  |  |  |  |  | for (int i=0; i<5; ++i) | 
														
													
														
															
																|  |  |  |  |  | { | 
														
													
														
															
																|  |  |  |  |  | outputs[i].setVoltage(dataIns[i+2][dataFrame] - outputOffset); | 
														
													
														
															
																|  |  |  |  |  | dataOuts[i+2][dataFrame] = inputs[i].getVoltage() + inputOffset; | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  |  |  |  | 
 | 
														
													
														
															
																|  |  |  |  |  | inputOffset = params[BIPOLAR_INPUTS_6_10].getValue() > 0.1f ? 5.0f : 0.0f; | 
														
													
														
															
																|  |  |  |  |  | outputOffset = params[BIPOLAR_OUTPUTS_6_10].getValue() > 0.1f ? 5.0f : 0.0f; | 
														
													
														
															
																|  |  |  |  |  | 
 | 
														
													
														
															
																|  |  |  |  |  | for (int i=5; i<10; ++i) | 
														
													
														
															
																|  |  | { |  |  | { | 
														
													
														
															
																|  |  | outputs[i].setVoltage(dataIns[i+2][dataFrame] - inputOffset); |  |  |  | 
														
													
														
															
																|  |  | dataOuts[i+2][dataFrame] = inputs[i].getVoltage() + outputOffset; |  |  |  | 
														
													
														
															
																|  |  |  |  |  | outputs[i].setVoltage(dataIns[i+2][dataFrame] - outputOffset); | 
														
													
														
															
																|  |  |  |  |  | dataOuts[i+2][dataFrame] = inputs[i].getVoltage() + inputOffset; | 
														
													
														
															
																|  |  | } |  |  | } | 
														
													
														
															
																|  |  | } |  |  | } | 
														
													
														
															
																|  |  | } |  |  | } | 
														
													
												
													
														
															
																|  | @@ -153,14 +168,24 @@ struct HostCVWidget : ModuleWidget { | 
														
													
														
															
																|  |  | { |  |  | { | 
														
													
														
															
																|  |  | menu->addChild(new ui::MenuSeparator); |  |  | menu->addChild(new ui::MenuSeparator); | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | menu->addChild(createCheckMenuItem("Bipolar Inputs", "", |  |  |  | 
														
													
														
															
																|  |  | [=]() {return module->params[HostCV::BIPOLAR_INPUTS].getValue() > 0.1f;}, |  |  |  | 
														
													
														
															
																|  |  | [=]() {module->params[HostCV::BIPOLAR_INPUTS].setValue(1.0f - module->params[HostCV::BIPOLAR_INPUTS].getValue());} |  |  |  | 
														
													
														
															
																|  |  |  |  |  | menu->addChild(createCheckMenuItem("Bipolar Inputs 1-5", "", | 
														
													
														
															
																|  |  |  |  |  | [=]() {return module->params[HostCV::BIPOLAR_INPUTS_1_5].getValue() > 0.1f;}, | 
														
													
														
															
																|  |  |  |  |  | [=]() {module->params[HostCV::BIPOLAR_INPUTS_1_5].setValue(1.0f - module->params[HostCV::BIPOLAR_INPUTS_1_5].getValue());} | 
														
													
														
															
																|  |  |  |  |  | )); | 
														
													
														
															
																|  |  |  |  |  | 
 | 
														
													
														
															
																|  |  |  |  |  | menu->addChild(createCheckMenuItem("Bipolar Inputs 6-10", "", | 
														
													
														
															
																|  |  |  |  |  | [=]() {return module->params[HostCV::BIPOLAR_INPUTS_6_10].getValue() > 0.1f;}, | 
														
													
														
															
																|  |  |  |  |  | [=]() {module->params[HostCV::BIPOLAR_INPUTS_6_10].setValue(1.0f - module->params[HostCV::BIPOLAR_INPUTS_6_10].getValue());} | 
														
													
														
															
																|  |  |  |  |  | )); | 
														
													
														
															
																|  |  |  |  |  | 
 | 
														
													
														
															
																|  |  |  |  |  | menu->addChild(createCheckMenuItem("Bipolar Outputs 1-5", "", | 
														
													
														
															
																|  |  |  |  |  | [=]() {return module->params[HostCV::BIPOLAR_OUTPUTS_1_5].getValue() > 0.1f;}, | 
														
													
														
															
																|  |  |  |  |  | [=]() {module->params[HostCV::BIPOLAR_OUTPUTS_1_5].setValue(1.0f - module->params[HostCV::BIPOLAR_OUTPUTS_1_5].getValue());} | 
														
													
														
															
																|  |  | )); |  |  | )); | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | menu->addChild(createCheckMenuItem("Bipolar Outputs", "", |  |  |  | 
														
													
														
															
																|  |  | [=]() {return module->params[HostCV::BIPOLAR_OUTPUTS].getValue() > 0.1f;}, |  |  |  | 
														
													
														
															
																|  |  | [=]() {module->params[HostCV::BIPOLAR_OUTPUTS].setValue(1.0f - module->params[HostCV::BIPOLAR_OUTPUTS].getValue());} |  |  |  | 
														
													
														
															
																|  |  |  |  |  | menu->addChild(createCheckMenuItem("Bipolar Outputs 6-10", "", | 
														
													
														
															
																|  |  |  |  |  | [=]() {return module->params[HostCV::BIPOLAR_OUTPUTS_6_10].getValue() > 0.1f;}, | 
														
													
														
															
																|  |  |  |  |  | [=]() {module->params[HostCV::BIPOLAR_OUTPUTS_6_10].setValue(1.0f - module->params[HostCV::BIPOLAR_OUTPUTS_6_10].getValue());} | 
														
													
														
															
																|  |  | )); |  |  | )); | 
														
													
														
															
																|  |  | } |  |  | } | 
														
													
														
															
																|  |  | }; |  |  | }; | 
														
													
												
													
														
															
																|  | 
 |