#include "plugin.hpp"
struct Nsiem : Module {
enum ParamId {
PARAMS_LEN
};
enum InputId {
INA_INPUT,
INB_INPUT,
IN2B_INPUT,
IN3B_INPUT,
INPUTS_LEN
};
enum OutputId {
OUTA_OUTPUT,
OUT2A_OUTPUT,
OUT3A_OUTPUT,
OUTB_OUTPUT,
OUTPUTS_LEN
};
enum LightId {
LIGHTS_LEN
};
Nsiem() {
config(PARAMS_LEN, INPUTS_LEN, OUTPUTS_LEN, LIGHTS_LEN);
configInput(INA_INPUT, "Input A");
configInput(INB_INPUT, "Input B");
configInput(IN2B_INPUT, "Input B2");
configInput(IN3B_INPUT, "Input B3");
configOutput(OUTA_OUTPUT, "Output A");
configOutput(OUT2A_OUTPUT, "Output A2");
configOutput(OUT3A_OUTPUT, "Output A3");
configOutput(OUTB_OUTPUT, "Output B");
}
void process(const ProcessArgs& args) override {
// Section A
{
int channels = std::max(inputs[INA_INPUT].getChannels(), 1);
float in[16];
for (int c = 0; c < channels; c++) {
in[c] = inputs[INA_INPUT].getVoltage(c);
outputs[OUTA_OUTPUT].setVoltage(in[c], c);
outputs[OUT2A_OUTPUT].setVoltage(in[c], c);
outputs[OUT3A_OUTPUT].setVoltage(in[c], c);
}
outputs[OUTA_OUTPUT].setChannels(channels);
outputs[OUT2A_OUTPUT].setChannels(channels);
outputs[OUT3A_OUTPUT].setChannels(channels);
}
//Section B
{
int channels = std::max(std::max(std::max(inputs[INB_INPUT].getChannels(), inputs[IN2B_INPUT].getChannels()), inputs[IN3B_INPUT].getChannels()), 1);
float in[16];
for (int c = 0; c < channels; c++) {
in[c] = inputs[INB_INPUT].getPolyVoltage(c) + inputs[IN2B_INPUT].getPolyVoltage(c) + inputs[IN3B_INPUT].getPolyVoltage(c);
outputs[OUTB_OUTPUT].setVoltage(in[c], c);
}
outputs[OUTB_OUTPUT].setChannels(channels);
}
}
};
struct NsiemWidget : ModuleWidget {
NsiemWidget(Nsiem* module) {
setModule(module);
setPanel(createPanel(asset::plugin(pluginInstance, "res/Nsiem.svg")));
addChild(createWidget<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0)));
addChild(createWidget<ScrewSilver>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0)));
addChild(createWidget<ScrewSilver>(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH)));
addChild(createWidget<ScrewSilver>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH)));
addInput(createInputCentered<PJ301MPort>(mm2px(Vec(7.62, 29.866)), module, Nsiem::INA_INPUT));
addInput(createInputCentered<PJ301MPort>(mm2px(Vec(7.603, 78.493)), module, Nsiem::INB_INPUT));
addInput(createInputCentered<PJ301MPort>(mm2px(Vec(7.62, 88.58)), module, Nsiem::IN2B_INPUT));
addInput(createInputCentered<PJ301MPort>(mm2px(Vec(7.62, 98.667)), module, Nsiem::IN3B_INPUT));
addOutput(createOutputCentered<PJ301MPort>(mm2px(Vec(7.62, 44.025)), module, Nsiem::OUTA_OUTPUT));
addOutput(createOutputCentered<PJ301MPort>(mm2px(Vec(7.637, 54.113)), module, Nsiem::OUT2A_OUTPUT));
addOutput(createOutputCentered<PJ301MPort>(mm2px(Vec(7.637, 64.2)), module, Nsiem::OUT3A_OUTPUT));
addOutput(createOutputCentered<PJ301MPort>(mm2px(Vec(7.62, 113.367)), module, Nsiem::OUTB_OUTPUT));
}
};
Model* modelNsiem = createModel<Nsiem, NsiemWidget>("Nsiem");