ridiculous refactor to allow enums to be dbus strings for better TS generation

This commit is contained in:
Luke D. Jones
2023-06-27 21:16:13 +12:00
parent fca7d23a31
commit 7b17a13ce7
43 changed files with 1516 additions and 267 deletions

View File

@@ -53,30 +53,33 @@ impl EffectState for Breathe {
let speed = 4 - <u8>::from(*speed);
if *colour_actual == Colour(0, 0, 0) {
if *colour_actual == (Colour { r: 0, g: 0, b: 0 }) {
*use_colour1 = !*use_colour1;
}
let colour = if !*use_colour1 { colour2 } else { colour1 };
let r1_scale = colour.0 / speed / 2;
let g1_scale = colour.1 / speed / 2;
let b1_scale = colour.2 / speed / 2;
let r1_scale = colour.r / speed / 2;
let g1_scale = colour.g / speed / 2;
let b1_scale = colour.b / speed / 2;
if *colour_actual == Colour(0, 0, 0) {
if *colour_actual == (Colour { r: 0, g: 0, b: 0 }) {
*flipped = true;
} else if colour_actual >= colour {
} else if colour_actual.r >= colour.r
&& colour_actual.g >= colour.g
&& colour_actual.b >= colour.b
{
*flipped = false;
}
if !*flipped {
colour_actual.0 = colour_actual.0.saturating_sub(r1_scale);
colour_actual.1 = colour_actual.1.saturating_sub(g1_scale);
colour_actual.2 = colour_actual.2.saturating_sub(b1_scale);
colour_actual.r = colour_actual.r.saturating_sub(r1_scale);
colour_actual.g = colour_actual.g.saturating_sub(g1_scale);
colour_actual.b = colour_actual.b.saturating_sub(b1_scale);
} else {
colour_actual.0 = colour_actual.0.saturating_add(r1_scale);
colour_actual.1 = colour_actual.1.saturating_add(g1_scale);
colour_actual.2 = colour_actual.2.saturating_add(b1_scale);
colour_actual.r = colour_actual.r.saturating_add(r1_scale);
colour_actual.g = colour_actual.g.saturating_add(g1_scale);
colour_actual.b = colour_actual.b.saturating_add(b1_scale);
}
}
}

View File

@@ -51,17 +51,17 @@ impl EffectState for DoomFlicker {
}
// TODO: make a "percentage" method on Colour.
let max_light = Colour(
(start_colour.0 as f32 / 100.0 * *max_percentage as f32) as u8,
(start_colour.1 as f32 / 100.0 * *max_percentage as f32) as u8,
(start_colour.2 as f32 / 100.0 * *max_percentage as f32) as u8,
);
let max_light = Colour {
r: (start_colour.r as f32 / 100.0 * *max_percentage as f32) as u8,
g: (start_colour.g as f32 / 100.0 * *max_percentage as f32) as u8,
b: (start_colour.b as f32 / 100.0 * *max_percentage as f32) as u8,
};
// min light is a percentage of the set colour
let min_light = Colour(
(start_colour.0 as f32 / 100.0 * *min_percentage as f32) as u8,
(start_colour.1 as f32 / 100.0 * *min_percentage as f32) as u8,
(start_colour.2 as f32 / 100.0 * *min_percentage as f32) as u8,
);
let min_light = Colour {
r: (start_colour.r as f32 / 100.0 * *min_percentage as f32) as u8,
g: (start_colour.g as f32 / 100.0 * *min_percentage as f32) as u8,
b: (start_colour.b as f32 / 100.0 * *min_percentage as f32) as u8,
};
// Convert the 255 to percentage
let amount = (p_random() & 7) as f32 * 8.0;
@@ -76,9 +76,9 @@ impl EffectState for DoomFlicker {
*colour = (max - max_amount) as u8;
}
};
set_colour(&mut colour.0, max_light.0 as f32, min_light.0 as f32);
set_colour(&mut colour.1, max_light.1 as f32, min_light.1 as f32);
set_colour(&mut colour.2, max_light.2 as f32, min_light.2 as f32);
set_colour(&mut colour.r, max_light.r as f32, min_light.r as f32);
set_colour(&mut colour.g, max_light.g as f32, min_light.g as f32);
set_colour(&mut colour.b, max_light.b as f32, min_light.b as f32);
self.count = 4;
}
@@ -133,17 +133,17 @@ impl EffectState for DoomLightFlash {
}
// TODO: make a "percentage" method on Colour.
let max_light = Colour(
(start_colour.0 as f32 / 100.0 * *max_percentage as f32) as u8,
(start_colour.1 as f32 / 100.0 * *max_percentage as f32) as u8,
(start_colour.2 as f32 / 100.0 * *max_percentage as f32) as u8,
);
let max_light = Colour {
r: (start_colour.r as f32 / 100.0 * *max_percentage as f32) as u8,
g: (start_colour.g as f32 / 100.0 * *max_percentage as f32) as u8,
b: (start_colour.b as f32 / 100.0 * *max_percentage as f32) as u8,
};
// min light is a percentage of the set colour
let min_light = Colour(
(start_colour.0 as f32 / 100.0 * *min_percentage as f32) as u8,
(start_colour.1 as f32 / 100.0 * *min_percentage as f32) as u8,
(start_colour.2 as f32 / 100.0 * *min_percentage as f32) as u8,
);
let min_light = Colour {
r: (start_colour.r as f32 / 100.0 * *min_percentage as f32) as u8,
g: (start_colour.g as f32 / 100.0 * *min_percentage as f32) as u8,
b: (start_colour.b as f32 / 100.0 * *min_percentage as f32) as u8,
};
if *colour == max_light {
*colour = min_light;

View File

@@ -118,7 +118,7 @@ impl AdvancedEffects {
for effect in &self.effects {
let c = effect.colour();
usb_packets.set(effect.led(), c.0, c.1, c.2);
usb_packets.set(effect.led(), c.r, c.g, c.b);
}
usb_packets.into()
}
@@ -209,8 +209,14 @@ mod tests {
fn single_key_next_state_then_create() {
let layout = KeyLayout::default_layout();
let mut seq = AdvancedEffects::new(false);
seq.effects
.push(Effect::Static(Static::new(LedCode::F, Colour(255, 127, 0))));
seq.effects.push(Effect::Static(Static::new(
LedCode::F,
Colour {
r: 255,
g: 127,
b: 0,
},
)));
seq.next_state(&layout);
let packets = seq.create_packets();
@@ -227,8 +233,16 @@ mod tests {
let mut seq = AdvancedEffects::new(false);
seq.effects.push(Effect::Breathe(Breathe::new(
LedCode::F,
Colour(255, 127, 0),
Colour(127, 0, 255),
Colour {
r: 255,
g: 127,
b: 0,
},
Colour {
r: 127,
g: 0,
b: 255,
},
Speed::Med,
)));
@@ -261,7 +275,11 @@ mod tests {
let mut seq = AdvancedEffects::new(false);
seq.effects.push(Effect::DoomFlicker(DoomFlicker::new(
LedCode::F,
Colour(255, 127, 80),
Colour {
r: 255,
g: 127,
b: 80,
},
100,
10,
)));