109 lines
2.6 KiB
Rust
109 lines
2.6 KiB
Rust
use palette::{Pixel, Srgb};
|
|
|
|
// 9 Channel mode
|
|
|
|
pub struct MovingHead9CH {
|
|
start_addr: usize,
|
|
|
|
pub pan: u8,
|
|
pub tilt: u8,
|
|
pub dimmer: u8, // 0-7 off, 8-134 dim, 135-239 strobe, 240-255 "switch"?
|
|
pub rgb: Srgb,
|
|
pub w: u8,
|
|
pub speed: u8, // reversed
|
|
pub rst: u8, // 150-200
|
|
}
|
|
|
|
impl MovingHead9CH {
|
|
pub fn new(start_addr: usize) -> Self {
|
|
Self {
|
|
start_addr,
|
|
pan: 0,
|
|
tilt: 0,
|
|
dimmer: 0,
|
|
rgb: Srgb::new(0.0, 0.0, 0.0),
|
|
w: 0,
|
|
speed: 0,
|
|
rst: 0,
|
|
}
|
|
}
|
|
|
|
pub fn render(&self, destination: &mut [u8]) {
|
|
let [r, g, b]: [u8; 3] = self.rgb.into_format().into_raw();
|
|
|
|
destination[self.start_addr - 1..self.start_addr - 1 + 9].copy_from_slice(&[
|
|
self.pan,
|
|
self.tilt,
|
|
self.dimmer,
|
|
r,
|
|
g,
|
|
b,
|
|
self.w,
|
|
self.speed,
|
|
self.rst,
|
|
])
|
|
}
|
|
}
|
|
|
|
// 14 Channel mode
|
|
|
|
pub struct MovingHead14CH {
|
|
start_addr: usize,
|
|
|
|
pub pan: u8,
|
|
pub pan_fine: u8,
|
|
pub tilt: u8,
|
|
pub tilt_fine: u8,
|
|
pub speed: u8,
|
|
pub dimmer: u8,
|
|
pub rgb: Srgb,
|
|
pub w: u8,
|
|
pub color_mode: u8,
|
|
pub color_auto_jump_speed: u8,
|
|
pub control_mode: u8,
|
|
pub rst: u8,
|
|
}
|
|
|
|
impl MovingHead14CH {
|
|
pub fn new(start_addr: usize) -> Self {
|
|
Self {
|
|
start_addr,
|
|
|
|
pan: 0,
|
|
pan_fine: 0,
|
|
tilt: 0,
|
|
tilt_fine: 0,
|
|
speed: 0,
|
|
dimmer: 0, // 0-7 off, 8-134 dim, 135-239 strobe, 240-255 "switch"?
|
|
rgb: Srgb::new(0.0, 0.0, 0.0),
|
|
w: 0,
|
|
color_mode: 0, // 0-7 "select color" -> dmx?, 8-231 "built in"?, 232-255 "seven colors jumping"
|
|
color_auto_jump_speed: 0, // speed for "seven colors jumping" mode
|
|
control_mode: 0, /* 0-7 "custom control" -> dmx?, 8-63 "working in fast", 64-127 "working in slow"
|
|
128-191 "Sound1Active", 192-255 "Sound2Active" */
|
|
rst: 0, // 150-200
|
|
}
|
|
}
|
|
|
|
pub fn render(&self, destination: &mut [u8]) {
|
|
let [r, g, b]: [u8; 3] = self.rgb.into_format().into_raw();
|
|
|
|
destination[self.start_addr - 1..self.start_addr - 1 + 14].copy_from_slice(&[
|
|
self.pan,
|
|
self.pan_fine,
|
|
self.tilt,
|
|
self.tilt_fine,
|
|
self.speed,
|
|
self.dimmer,
|
|
r,
|
|
g,
|
|
b,
|
|
self.w,
|
|
self.color_mode,
|
|
self.color_auto_jump_speed,
|
|
self.control_mode,
|
|
self.rst,
|
|
]);
|
|
}
|
|
}
|