Program Listing for File dm_fx_ui.cpp¶
↰ Return to documentation for file (src/dm_fx_ui.cpp)
// Copyright (c) 2020 Run Jump Labs LLC. All right reserved.
// This code is licensed under MIT license (see license.txt for details)
#include "dreammakerfx.h"
#include "dm_fx_ui.h"
#ifndef DOXYGEN_SHOULD_SKIP_THIS
/************************************************************************
*
* UI Controls
*
***********************************************************************/
bool footswitch_right_pressed_event = false;
bool footswitch_left_pressed_event = false;
void footswitch_right_pressed_isr(void) {
static int last_press = 0;
if (millis() < last_press + 150) {
return;
}
last_press = millis();
DEBUG_MSG("Right pressed", MSG_DEBUG);
footswitch_right_pressed_event = true;
if (pedal.tap_control_enabled && pedal.tap_footswitch == FOOTSWITCH_RIGHT) {
DEBUG_MSG("Tap registered", MSG_DEBUG);
pedal.register_tap();
}
}
void footswitch_left_pressed_isr(void){
static int last_press = 0;
if (millis() < last_press + 150) {
return;
}
last_press = millis();
DEBUG_MSG("Left pressed", MSG_DEBUG);
footswitch_left_pressed_event = true;
if (pedal.tap_control_enabled && pedal.tap_footswitch == FOOTSWITCH_LEFT) {
DEBUG_MSG("Tap registered", MSG_DEBUG);
pedal.register_tap();
}
}
static void lp5569_write(int addr, int val) {
Wire2.beginTransmission(0x40);
Wire2.write(addr);
Wire2.write(val);
Wire2.endTransmission();
}
static int lp5569_read(int addr) {
Wire2.beginTransmission(0x40);
Wire2.write(addr);
Wire2.endTransmission();
Wire2.requestFrom(0x40, 1);
while(Wire2.available() == 0);
int v = Wire2.read();
return v;
}
void rgb_leds_init(void) {
#if defined (DM_FX_TWO)
Wire2.begin();
// Rising edge to enable
pinMode(RGB_LED_ENABLE, OUTPUT);
digitalWrite(RGB_LED_ENABLE, HIGH);
delay(10);
// Set up charge pump and clock
lp5569_write(0x2F, B00011001);
// Enable the LP5569
lp5569_write(0, 0x40);
#endif
}
#if 0
#define LED_RIGHT 0
#define LED_CENTER 1
#define LED_LEFT 2
#endif
void rgb_write(int led_num, int r, int g, int b) {
#if 0
Serial.print("LED: ");
Serial.print(led_num);
Serial.print(" : ");
Serial.println(r);
#endif
switch (led_num) {
case 0:
lp5569_write(0x16, r);
lp5569_write(0x17, g);
lp5569_write(0x18, b);
break;
case 1:
lp5569_write(0x19, r);
lp5569_write(0x1A, g);
lp5569_write(0x1B, b);
break;
case 2:
lp5569_write(0x1C, r);
lp5569_write(0x1D, g);
lp5569_write(0x1E, b);
break;
default:
break;
}
}
static bool left_led_state = false;
static bool right_led_state = false;
static bool center_led_state = false;
void turn_on_left_footsw_led(void) {
if (left_led_state) return;
left_led_state = true;
#if defined (DM_FX)
turn_on_left_footsw_led();
#elif defined (DM_FX_TWO)
rgb_write(LED_LEFT, 150, 0, 0);
#endif
}
void turn_off_left_footsw_led(void) {
if (!left_led_state) return;
left_led_state = false;
#if defined (DM_FX)
turn_off_left_footsw_led();
#elif defined (DM_FX_TWO)
rgb_write(LED_LEFT, 0, 0, 0);
#endif
}
void turn_on_right_footsw_led(void) {
if (right_led_state) return;
right_led_state = true;
#if defined (DM_FX)
turn_on_right_footsw_led();
#elif defined (DM_FX_TWO)
rgb_write(LED_RIGHT, 150, 0, 0);
#endif
}
void turn_off_right_footsw_led(void) {
if (!right_led_state) return;
right_led_state = false;
#if defined (DM_FX)
turn_off_right_footsw_led();
#elif defined (DM_FX_TWO)
rgb_write(LED_RIGHT, 0, 0, 0);
#endif
}
void turn_on_center_footsw_led(void) {
if (center_led_state) return;
center_led_state = true;
#if defined (DM_FX_TWO)
rgb_write(LED_CENTER, 150, 0, 0);
#endif
}
void turn_off_center_footsw_led(void) {
if (!center_led_state) return;
center_led_state = false;
#if defined (DM_FX_TWO)
rgb_write(LED_CENTER, 0, 0, 0);
#endif
}
void turn_on_left_footsw_led_rgb(uint8_t r, uint8_t g, uint8_t b) {
left_led_state = true;
#if defined (DM_FX)
turn_on_left_footsw_led();
#elif defined (DM_FX_TWO)
rgb_write(LED_LEFT, r, g, b);
#endif
}
void turn_on_right_footsw_led_rgb(uint8_t r, uint8_t g, uint8_t b) {
right_led_state = true;
#if defined (DM_FX)
turn_on_right_footsw_led();
#elif defined (DM_FX_TWO)
rgb_write(LED_RIGHT, r, g, b);
#endif
}
void turn_on_center_footsw_led_rgb(uint8_t r, uint8_t g, uint8_t b) {
center_led_state = true;
#if defined (DM_FX_TWO)
rgb_write(LED_CENTER, r, g, b);
#endif
}
void user_pb_pressed(void) __attribute__((weak));
void user_pb_pressed(void){
DEBUG_MSG("User PB pressed", MSG_INFO);
}
#endif // DOXYGEN_SHOULD_SKIP_THIS