Change speed scale, Implement reset

This commit is contained in:
Kai Vogelgesang 2021-11-09 13:07:57 +01:00
parent 7eba49d07f
commit a5dbe91bc1
Signed by: kai
GPG Key ID: 0A95D3B6E62C0879
6 changed files with 28 additions and 8 deletions

View File

@ -14,7 +14,8 @@ export class ChaserPattern implements Pattern {
value: 0.2, value: 0.2,
}, },
rgbw: [255, 0, 0, 0], rgbw: [255, 0, 0, 0],
speed: 0 speed: 1,
reset: false,
} }
let result = []; let result = [];

View File

@ -2,7 +2,7 @@ import { MovingHeadState } from "rust_native_module";
export type Time = { export type Time = {
absolute: number, absolute: number,
beat_relative: number, beat_relative: number, //
}; };
export interface Pattern { export interface Pattern {

View File

@ -20,7 +20,9 @@ declare module rust_native_module {
tilt: number, // [-pi/2, pi/2] tilt: number, // [-pi/2, pi/2]
brightness: Brightness, brightness: Brightness,
rgbw: [number, number, number, number], // RGBW, [0, 255] rgbw: [number, number, number, number], // RGBW, [0, 255]
speed: number, // [255, 0] speed: number, // [0, 1]
reset: boolean,
} }
type OutputHandle = { type OutputHandle = {

View File

@ -23,7 +23,9 @@ pub struct MovingHead {
pub tilt: f64, // -pi/2 to pi/2 pub tilt: f64, // -pi/2 to pi/2
pub brightness: Brightness, pub brightness: Brightness,
pub rgbw: (u8, u8, u8, u8), // RGBW pub rgbw: (u8, u8, u8, u8), // RGBW
pub speed: u8, // reversed pub speed: f64, // 0 to 1, mapping to (255 to 0)
pub reset: bool,
} }
pub trait DMXFixture { pub trait DMXFixture {
@ -32,6 +34,8 @@ pub trait DMXFixture {
impl DMXFixture for MovingHead { impl DMXFixture for MovingHead {
fn render(&self, dst: &mut [u8]) { fn render(&self, dst: &mut [u8]) {
// TODO use pan_fine and tilt_fine for more accuracy
let pan = rescale(self.pan, (-1.5 * PI, 1.5 * PI), (255.0, 0.0)) as u8; let pan = rescale(self.pan, (-1.5 * PI, 1.5 * PI), (255.0, 0.0)) as u8;
let pan_fine = 0; let pan_fine = 0;
@ -47,10 +51,14 @@ impl DMXFixture for MovingHead {
let (r, g, b, w) = self.rgbw; let (r, g, b, w) = self.rgbw;
let speed = rescale(self.speed, (0.0, 1.0), (255.0, 0.0)) as u8;
let reset = if self.reset { 175 } else { 0 };
let offset = self.start_address - 1; let offset = self.start_address - 1;
let channels = [ let channels = [
pan, pan_fine, tilt, tilt_fine, self.speed, dimmer, r, g, b, w, 0, 0, 0, 0, pan, pan_fine, tilt, tilt_fine, speed, dimmer, r, g, b, w, 0, 0, 0, reset,
]; ];
dst[offset..offset + channels.len()].copy_from_slice(&channels); dst[offset..offset + channels.len()].copy_from_slice(&channels);

View File

@ -139,7 +139,12 @@ fn set_output(mut cx: FunctionContext) -> JsResult<JsObject> {
speed: head speed: head
.get(&mut cx, "speed")? .get(&mut cx, "speed")?
.downcast_or_throw::<JsNumber, _>(&mut cx)? .downcast_or_throw::<JsNumber, _>(&mut cx)?
.value(&mut cx) as u8, .value(&mut cx),
reset: head
.get(&mut cx, "reset")?
.downcast_or_throw::<JsBoolean, _>(&mut cx)?
.value(&mut cx),
}) })
} }

View File

@ -17,6 +17,7 @@ const movingHeads = [
}, },
rgbw: [255, 0, 0, 0], rgbw: [255, 0, 0, 0],
speed: 0, speed: 0,
reset: false,
}, },
{ {
startAddress: 15, startAddress: 15,
@ -28,6 +29,7 @@ const movingHeads = [
}, },
rgbw: [255, 0, 0, 0], rgbw: [255, 0, 0, 0],
speed: 0, speed: 0,
reset: false,
}, },
{ {
startAddress: 29, startAddress: 29,
@ -39,6 +41,7 @@ const movingHeads = [
}, },
rgbw: [255, 0, 0, 0], rgbw: [255, 0, 0, 0],
speed: 0, speed: 0,
reset: false,
}, },
{ {
startAddress: 43, startAddress: 43,
@ -48,8 +51,9 @@ const movingHeads = [
type: "dimmer", type: "dimmer",
value: 1, value: 1,
}, },
rgbw: [0, 0, 0, 255], rgbw: [0, 255, 0, 0],
speed: 0, speed: 1,
reset: false,
} }
]; ];