// Copyright 2012 Olivier Gillet. // // Author: Olivier Gillet (olivier@mutable-instruments.net) // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program. If not, see . // // User interface handling. #ifndef EDGES_UI_H_ #define EDGES_UI_H_ #include "avrlibx/avrlibx.h" #include "edges/hardware_config.h" namespace edges { enum Mode { MODE_NORMAL, MODE_MENU, MODE_CALIBRATE_1, MODE_CALIBRATE_2, MODE_RECORDING, MODE_LEARNING_MIDI_CHANNEL }; static const uint8_t kNumSwitches = 6; class Ui { public: Ui() { } ~Ui() { } void Init(); static void set_gate(uint8_t gate) { gate_ = gate; } static void set_cv(uint8_t channel, uint16_t cv) { if (mode_ >= MODE_CALIBRATE_1 && mode_ <= MODE_CALIBRATE_2 && channel == edited_channel_) { calibration_cv_[mode_ - MODE_CALIBRATE_1] = cv; } cv_[channel] = cv; } static uint16_t cv(uint8_t channel) { if (mode_ == MODE_RECORDING && channel == edited_channel_) { return root_cv_; } else { return cv_[channel]; } } static void Poll(); static uint8_t gate() { return gate_; } static Mode mode() { return mode_; } private: static void OnSwitchHeld(uint8_t index); static void OnSwitchReleased(uint8_t index); static uint8_t edited_channel_; static Mode mode_; static uint8_t gate_; // Used for dimming LEDs. static uint16_t leds_pwm_counter_; // Used for detecting long switch pressed. static uint16_t switch_time_counter_; static uint16_t calibration_cv_[2]; static uint16_t root_cv_; static uint16_t cv_[2 * kNumChannels]; static Leds leds_; static Switches switches_; static Gpio midi_learn_switch_; static Gpio midi_mode_switch_; static uint8_t debounce_history_[kNumSwitches]; DISALLOW_COPY_AND_ASSIGN(Ui); }; extern Ui ui; } // namespace edges #endif // EDGES_UI_H_