151 lines
3.0 KiB
C++
151 lines
3.0 KiB
C++
#include <Arduino.h>
|
|
#include <FreeRTOS_SAMD21.h>
|
|
|
|
#include "input_read.h"
|
|
#include "connect.h"
|
|
#include "color.h"
|
|
#include "encoder.h"
|
|
#include "led.h"
|
|
#include "main.h"
|
|
#include "mapping.h"
|
|
#include "network.h"
|
|
#include "osc.h"
|
|
#include "spinner.h"
|
|
#include "util.h"
|
|
|
|
State state = State::Connecting;
|
|
ChainMenu chain_menu = ChainMenu::Master;
|
|
ChainMode chain_mode = ChainMode::Meter;
|
|
|
|
float meter_value = 0.0;
|
|
float level_value = 0.0;
|
|
bool level_value_up_to_date = false;
|
|
|
|
void setup() {
|
|
Serial.begin(9600);
|
|
vSetErrorSerial(&Serial);
|
|
|
|
setup_input_read();
|
|
setup_connect();
|
|
setup_encoder();
|
|
setup_led();
|
|
setup_osc();
|
|
setup_spinner();
|
|
|
|
vTaskStartScheduler();
|
|
Serial.println("Start scheduler failed");
|
|
}
|
|
|
|
void loop() {
|
|
for(;;) {}
|
|
}
|
|
|
|
void connection_established() {
|
|
state = State::ChainMenu;
|
|
stop_spinner();
|
|
update_meter();
|
|
update_leds();
|
|
}
|
|
|
|
void connection_lost() {
|
|
state = State::Connecting;
|
|
start_spinner();
|
|
}
|
|
|
|
State get_state() {
|
|
State current_state = state;
|
|
return current_state;
|
|
}
|
|
|
|
void toggle_chain_mode() {
|
|
if(ChainMode::Meter == chain_mode) {
|
|
chain_mode = ChainMode::Level;
|
|
} else {
|
|
chain_mode = ChainMode::Meter;
|
|
}
|
|
update_leds();
|
|
}
|
|
|
|
ChainMode get_chain_mode() {
|
|
ChainMode current_chain_mode = chain_mode;
|
|
return current_chain_mode;
|
|
}
|
|
|
|
void previous_chain_menu_item() {
|
|
switch (chain_menu) {
|
|
case ChainMenu::Gain:
|
|
break;
|
|
case ChainMenu::Fader:
|
|
chain_menu = ChainMenu::Gain;
|
|
level_value_up_to_date = false;
|
|
update_value();
|
|
break;
|
|
case ChainMenu::Master:
|
|
chain_menu = ChainMenu::Fader;
|
|
level_value_up_to_date = false;
|
|
update_value();
|
|
break;
|
|
}
|
|
update_leds();
|
|
}
|
|
|
|
void next_chain_menu_item() {
|
|
switch (chain_menu) {
|
|
case ChainMenu::Gain:
|
|
chain_menu = ChainMenu::Fader;
|
|
level_value_up_to_date = false;
|
|
update_value();
|
|
break;
|
|
case ChainMenu::Fader:
|
|
chain_menu = ChainMenu::Master;
|
|
level_value_up_to_date = false;
|
|
update_value();
|
|
break;
|
|
case ChainMenu::Master:
|
|
break;
|
|
}
|
|
update_leds();
|
|
}
|
|
|
|
ChainMenu get_chain_menu_item() {
|
|
ChainMenu current_chain_menu = chain_menu;
|
|
return current_chain_menu;
|
|
}
|
|
|
|
void increment_level(float value) {
|
|
if(level_value_up_to_date) {
|
|
level_value += value;
|
|
if(state == State::ChainMenu
|
|
&& chain_menu == ChainMenu::Gain) {
|
|
set_gain(level_value);
|
|
} else if(state == State::ChainMenu
|
|
&& chain_menu == ChainMenu::Fader) {
|
|
set_fader(level_value);
|
|
} else if(state == State::ChainMenu
|
|
&& chain_menu == ChainMenu::Master) {
|
|
set_master(level_value);
|
|
}
|
|
}
|
|
update_leds();
|
|
}
|
|
|
|
void set_level(float value) {
|
|
level_value = value;
|
|
level_value_up_to_date = true;
|
|
update_leds();
|
|
}
|
|
|
|
float get_level() {
|
|
float current_level_value = level_value;
|
|
return current_level_value;
|
|
}
|
|
|
|
void set_meter(float value) {
|
|
meter_value = value;
|
|
update_leds();
|
|
}
|
|
|
|
float get_meter() {
|
|
float current_meter_value = meter_value;
|
|
return current_meter_value;
|
|
} |