General cleanups, nicer knob code

This commit is contained in:
William Toohey
2017-02-13 23:35:50 +10:00
parent 61cd76dca7
commit b802aad1de
6 changed files with 24 additions and 20 deletions
@@ -94,7 +94,7 @@ def program_device(hex_data, device_info):
print("No valid HID device found.")
sys.exit(1)
print("Rebooted to bootloader")
time.sleep(4)
time.sleep(6)
hid_device = get_hid_device_handle()
if hid_device is None:
print("No valid HID device found.")
+8
View File
@@ -68,6 +68,10 @@ void led_set(uint8_t num, uint8_t r, uint8_t g, uint8_t b) {
leds[offset+B] = b;
}
void led_set_rgb(uint8_t num, RGB_t* colour) {
led_set(num, colour->r, colour->g, colour->b);
}
void led_set_max(uint8_t num, uint8_t r, uint8_t g, uint8_t b) {
uint8_t offset = num * 3;
if(r > leds[offset+R])
@@ -105,6 +109,10 @@ void led_fade_over(uint8_t num, uint8_t r, uint8_t g, uint8_t b, uint8_t strengt
}
}
void led_fade_over_rgb(uint8_t num, RGB_t* colour, uint8_t strength) {
led_fade_over(num, colour->r, colour->g, colour->b, strength);
}
void led_set_all(uint8_t r, uint8_t g, uint8_t b) {
for(uint8_t i = 0; i < LED_COUNT; i++) {
led_set(i, r, g, b);
+2
View File
@@ -39,8 +39,10 @@ static const PROGMEM uint8_t ledRightCircleMap[] = {7, 5, 3, 1};
void led_init(void);
void led_commit(void);
void led_set(uint8_t num, uint8_t r, uint8_t g, uint8_t b);
void led_set_rgb(uint8_t num, RGB_t* colour);
void led_set_max(uint8_t num, uint8_t r, uint8_t g, uint8_t b);
void led_fade_over(uint8_t num, uint8_t r, uint8_t g, uint8_t b, uint8_t strength);
void led_fade_over_rgb(uint8_t num, RGB_t* colour, uint8_t strength);
void led_set_all(uint8_t r, uint8_t g, uint8_t b);
void led_set_indiv(uint8_t num, uint8_t val);
+9 -14
View File
@@ -33,7 +33,6 @@ static Patterns_t pattern;
// These can always be active and are thus not unionised. Capitalism wins again.
typedef struct {
const uint8_t rgb[3];
uint8_t leds[2];
uint8_t levels[2];
uint16_t fadeTimer;
@@ -43,13 +42,13 @@ typedef struct {
// OPTIONS SHOULD BE: blue, pink, green, yellow
static KnobLights knobs[2] = {
// Aqua, mid left LEDs
{{0,BRIGHTNESS_MAX,BRIGHTNESS_MAX}, {2,3}, {BRIGHTNESS_MAX, 0}},
// Pink, mid right LEDs
{{BRIGHTNESS_MAX,0,BRIGHTNESS_MAX}, {0,1}, {0, BRIGHTNESS_MAX}}
// mid left LEDs
{{2,3}, {BRIGHTNESS_MAX, 0}},
// mid right LEDs
{{0,1}, {0, BRIGHTNESS_MAX}}
};
void led_knob_light_indiv(KnobLights* knob, const uint8_t* map);
void led_knob_light_indiv(KnobLights* knob, RGB_t* colour, const uint8_t* map);
uint8_t led_on_frame(void) {
if(++frameCounter >= LED_MS_PER_FRAME) {
@@ -122,26 +121,22 @@ void led_animate(void) {
}
void led_knob_lights(void) {
led_knob_light_indiv(&knobs[0], ledLeftCircleMap);
led_knob_light_indiv(&knobs[1], ledRightCircleMap);
led_knob_light_indiv(&knobs[0], &sdvxConfig.knobColours[0], ledLeftCircleMap);
led_knob_light_indiv(&knobs[1], &sdvxConfig.knobColours[1], ledRightCircleMap);
}
void led_knob_light_indiv(KnobLights* knob, const uint8_t* map) {
void led_knob_light_indiv(KnobLights* knob, RGB_t* colour, const uint8_t* map) {
if(knob->fadeOut >= BRIGHTNESS_MAX) {
return;
}
for(uint8_t led = 0; led < 2; led++) {
uint8_t r = knob->rgb[0];
uint8_t g = knob->rgb[1];
uint8_t b = knob->rgb[2];
uint8_t power = knob->levels[led];
if(knob->fadeOut > power) {
power = 0;
} else {
power -= knob->fadeOut;
}
//led_set_max(ledCircleMap[knobs[i].leds[led]], r, g, b);
led_fade_over(pgm_read_byte(&map[knob->leds[led]]), r, g, b, power);
led_fade_over_rgb(pgm_read_byte(&map[knob->leds[led]]), colour, power);
}
}
+1 -1
View File
@@ -13,7 +13,7 @@
#define LED_KNOB_SPEED (BRIGHTNESS_LEVELS/42)
#define LED_KNOB_HOLD 300
#define LED_KNOB_FADE (BRIGHTNESS_LEVELS/128)
#define LED_KNOB_SENSITIVITY 3
#define LED_KNOB_SENSITIVITY 5
enum LEDMode {
+3 -4
View File
@@ -214,8 +214,7 @@ void SetupHardware()
// Pullups
PORTB |= SWITCH_MASKB;
PORTC |= SWITCH_MASKC;
// RESET has its own pullup
PORTC &= ~_BV(1);
PORTC &= ~_BV(1); // RESET has its own pullup
PORTD |= SWITCH_MASKD;
// RESET held while plugging in
@@ -329,13 +328,13 @@ void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDI
// BT LEDs flash pure white
for(uint8_t i = 0; i < 4; i++) {
if(LEDReport->btFx[i]) {
led_set(ledMap[i], BRIGHTNESS_MAX, BRIGHTNESS_MAX, BRIGHTNESS_MAX);
led_set_rgb(ledMap[i], &sdvxConfig.btColour);
}
}
// FX LEDs flash orange
for(uint8_t i = 4; i < 6; i++) {
if(LEDReport->btFx[i]) {
led_set(ledMap[i], BRIGHTNESS_MAX, BRIGHTNESS_LEVELS/4, 0);
led_set_rgb(ledMap[i], &sdvxConfig.fxColour);
}
}
}