From a5dbe91bc1aeb4f13c12f4368cac05c909c8bf78 Mon Sep 17 00:00:00 2001 From: Kai Vogelgesang Date: Tue, 9 Nov 2021 13:07:57 +0100 Subject: [PATCH] Change speed scale, Implement reset --- boilerbloat/src/patterns/chaser.ts | 3 ++- boilerbloat/src/patterns/proto.ts | 2 +- rust_native_module/index.d.ts | 4 +++- rust_native_module/src/output/fixtures.rs | 12 ++++++++++-- rust_native_module/src/output/mod.rs | 7 ++++++- rust_native_module/test.js | 8 ++++++-- 6 files changed, 28 insertions(+), 8 deletions(-) diff --git a/boilerbloat/src/patterns/chaser.ts b/boilerbloat/src/patterns/chaser.ts index 02cb22b..4e9330a 100644 --- a/boilerbloat/src/patterns/chaser.ts +++ b/boilerbloat/src/patterns/chaser.ts @@ -14,7 +14,8 @@ export class ChaserPattern implements Pattern { value: 0.2, }, rgbw: [255, 0, 0, 0], - speed: 0 + speed: 1, + reset: false, } let result = []; diff --git a/boilerbloat/src/patterns/proto.ts b/boilerbloat/src/patterns/proto.ts index 5b39f9f..e466dba 100644 --- a/boilerbloat/src/patterns/proto.ts +++ b/boilerbloat/src/patterns/proto.ts @@ -2,7 +2,7 @@ import { MovingHeadState } from "rust_native_module"; export type Time = { absolute: number, - beat_relative: number, + beat_relative: number, // }; export interface Pattern { diff --git a/rust_native_module/index.d.ts b/rust_native_module/index.d.ts index 6f6d029..cc61140 100644 --- a/rust_native_module/index.d.ts +++ b/rust_native_module/index.d.ts @@ -20,7 +20,9 @@ declare module rust_native_module { tilt: number, // [-pi/2, pi/2] brightness: Brightness, rgbw: [number, number, number, number], // RGBW, [0, 255] - speed: number, // [255, 0] + speed: number, // [0, 1] + + reset: boolean, } type OutputHandle = { diff --git a/rust_native_module/src/output/fixtures.rs b/rust_native_module/src/output/fixtures.rs index 62463ba..657f4f3 100644 --- a/rust_native_module/src/output/fixtures.rs +++ b/rust_native_module/src/output/fixtures.rs @@ -23,7 +23,9 @@ pub struct MovingHead { pub tilt: f64, // -pi/2 to pi/2 pub brightness: Brightness, 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 { @@ -32,6 +34,8 @@ pub trait DMXFixture { impl DMXFixture for MovingHead { 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_fine = 0; @@ -47,10 +51,14 @@ impl DMXFixture for MovingHead { 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 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); diff --git a/rust_native_module/src/output/mod.rs b/rust_native_module/src/output/mod.rs index 20f1a98..fde3a83 100644 --- a/rust_native_module/src/output/mod.rs +++ b/rust_native_module/src/output/mod.rs @@ -139,7 +139,12 @@ fn set_output(mut cx: FunctionContext) -> JsResult { speed: head .get(&mut cx, "speed")? .downcast_or_throw::(&mut cx)? - .value(&mut cx) as u8, + .value(&mut cx), + + reset: head + .get(&mut cx, "reset")? + .downcast_or_throw::(&mut cx)? + .value(&mut cx), }) } diff --git a/rust_native_module/test.js b/rust_native_module/test.js index 8c883ce..4b5e419 100644 --- a/rust_native_module/test.js +++ b/rust_native_module/test.js @@ -17,6 +17,7 @@ const movingHeads = [ }, rgbw: [255, 0, 0, 0], speed: 0, + reset: false, }, { startAddress: 15, @@ -28,6 +29,7 @@ const movingHeads = [ }, rgbw: [255, 0, 0, 0], speed: 0, + reset: false, }, { startAddress: 29, @@ -39,6 +41,7 @@ const movingHeads = [ }, rgbw: [255, 0, 0, 0], speed: 0, + reset: false, }, { startAddress: 43, @@ -48,8 +51,9 @@ const movingHeads = [ type: "dimmer", value: 1, }, - rgbw: [0, 0, 0, 255], - speed: 0, + rgbw: [0, 255, 0, 0], + speed: 1, + reset: false, } ];