aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2021-05-29 14:54:19 +0200
committerThomas White <taw@physics.org>2021-05-29 14:54:19 +0200
commit24feb43400e76b4505c57bf28ade6851a022738d (patch)
treec4518f52d04d3fba9c09c3f1e54da7c403622c14
parent0aeadc0d635e0cd72f1a0f94f4af3930ef6aaa06 (diff)
Split fixture library down to one file per fixture type
Perhaps different personalities could be combined for each fixture, but I don't think I'd go further than that.
-rw-r--r--examples/demo.scm9
-rw-r--r--guile/starlet/fixture-library/chauvet/mav2/32chan.scm49
-rw-r--r--guile/starlet/fixture-library/generic/any-rgb.scm (renamed from guile/starlet/fixture-library/generic.scm)21
-rw-r--r--guile/starlet/fixture-library/generic/dimmer.scm38
-rw-r--r--guile/starlet/fixture-library/generic/rgb.scm (renamed from guile/starlet/fixture-library/arduino.scm)14
-rw-r--r--guile/starlet/fixture-library/robe.scm198
-rw-r--r--guile/starlet/fixture-library/robe/dl7s/mode1.scm65
-rw-r--r--guile/starlet/fixture-library/robe/mmxspot/mode1.scm87
-rw-r--r--guile/starlet/fixture-library/robe/mmxwashbeam/mode1.scm94
9 files changed, 347 insertions, 228 deletions
diff --git a/examples/demo.scm b/examples/demo.scm
index 1299a6f..1c3ba68 100644
--- a/examples/demo.scm
+++ b/examples/demo.scm
@@ -33,9 +33,10 @@
(starlet effects)
(starlet colours)
(starlet clock)
- (starlet fixture-library generic)
- (starlet fixture-library robe)
- (starlet fixture-library arduino)
+ (starlet fixture-library generic dimmer)
+ (starlet fixture-library generic rgb)
+ (starlet fixture-library robe mmxspot mode1)
+ (starlet fixture-library robe mmxwashbeam mode1)
(starlet midi-control base)
(starlet midi-control button-utils)
(starlet midi-control faders))
@@ -81,7 +82,7 @@
(patch-fixture! floor5 <robe-mmxwashbeam-mode1> 236)
(patch-fixture! floor6 <robe-mmxwashbeam-mode1> 270)
-(patch-fixture! led <arduino-dmx-thing> 1 #:universe 4)
+(patch-fixture! led <generic-rgb> 1 #:universe 4)
;; Set a parameter
(at foh1 'intensity 80)
diff --git a/guile/starlet/fixture-library/chauvet/mav2/32chan.scm b/guile/starlet/fixture-library/chauvet/mav2/32chan.scm
new file mode 100644
index 0000000..5868587
--- /dev/null
+++ b/guile/starlet/fixture-library/chauvet/mav2/32chan.scm
@@ -0,0 +1,49 @@
+;;
+;; starlet/fixture-library/chauvet.scm
+;;
+;; Copyright © 2020-2021 Thomas White <taw@bitwiz.org.uk>
+;;
+;; This file is part of Starlet.
+;;
+;; Starlet is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+;;
+(define-module (starlet fixture-library chauvet)
+ #:use-module (oop goops)
+ #:use-module (starlet fixture)
+ #:export (<chauvet-mav2-32ch>))
+
+
+(define-class <chauvet-mav2-32ch> (<fixture>)
+ (attributes
+ #:init-form (list
+ (attr-continuous 'intensity '(0 100) 0)
+ (attr-continuous 'pan '(0 540) 270)
+ (attr-continuous 'tilt '(0 270) 135)
+ (attr-continuous 'cyan '(0 100) 0)
+ (attr-continuous 'magenta '(0 100) 0)
+ (attr-continuous 'yellow '(0 100) 0))))
+
+
+(define-method (scanout-fixture (fixture <chauvet-mav2-32ch>)
+ get-attr set-chan set-chan-16bit)
+
+ (set-chan-16bit 1 (get-attr 'pan) 540)
+ (set-chan-16bit 3 (get-attr 'tilt) 270)
+ (set-chan-16bit 6 (get-attr 'intensity) 100)
+
+ (set-chan 10 (percent->dmxval (get-attr 'cyan)))
+ (set-chan 11 (percent->dmxval (get-attr 'magenta)))
+ (set-chan 12 (percent->dmxval (get-attr 'yellow)))
+
+ (set-chan 8 255))
diff --git a/guile/starlet/fixture-library/generic.scm b/guile/starlet/fixture-library/generic/any-rgb.scm
index 381759e..1fc3fe2 100644
--- a/guile/starlet/fixture-library/generic.scm
+++ b/guile/starlet/fixture-library/generic/any-rgb.scm
@@ -1,5 +1,5 @@
;;
-;; starlet/fixture-library/generic.scm
+;; starlet/fixture-library/generic/any-rgb.scm
;;
;; Copyright © 2020-2021 Thomas White <taw@bitwiz.org.uk>
;;
@@ -18,30 +18,17 @@
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;
-(define-module (starlet fixture-library generic)
+(define-module (starlet fixture-library generic any-rgb)
#:use-module (oop goops)
#:use-module (starlet fixture)
- #:export (<generic-dimmer>
- generic-rgb))
-
-(define-class <generic-dimmer> (<fixture>)
- (attributes
- #:init-form (list
- (attr-continuous 'intensity '(0 100) 0))))
-
-
-(define-method (scanout-fixture (fixture <generic-dimmer>)
- get-attr set-chan8 set-chan16)
-
- ;; Set DMX value for intensity
- (set-chan8 1 (percent->dmxval8 (get-attr 'intensity))))
+ #:export (make-any-rgb))
(define (chan->attr chan)
(attr-continuous chan '(0 100) 0))
-(define (generic-rgb chans)
+(define (make-any-rgb chans)
(let ((new-class (make-class
(list <fixture>)
diff --git a/guile/starlet/fixture-library/generic/dimmer.scm b/guile/starlet/fixture-library/generic/dimmer.scm
new file mode 100644
index 0000000..65e6d99
--- /dev/null
+++ b/guile/starlet/fixture-library/generic/dimmer.scm
@@ -0,0 +1,38 @@
+;;
+;; starlet/fixture-library/generic/dimmer.scm
+;;
+;; Copyright © 2020-2021 Thomas White <taw@bitwiz.org.uk>
+;;
+;; This file is part of Starlet.
+;;
+;; Starlet is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+;;
+(define-module (starlet fixture-library generic dimmer)
+ #:use-module (oop goops)
+ #:use-module (starlet fixture)
+ #:export (<generic-dimmer>))
+
+
+(define-class <generic-dimmer> (<fixture>)
+ (attributes
+ #:init-form (list
+ (attr-continuous 'intensity '(0 100) 0))))
+
+
+(define-method (scanout-fixture (fixture <generic-dimmer>)
+ get-attr set-chan8 set-chan16)
+
+ ;; Set DMX value for intensity
+ (set-chan8 1 (percent->dmxval8 (get-attr 'intensity))))
+
diff --git a/guile/starlet/fixture-library/arduino.scm b/guile/starlet/fixture-library/generic/rgb.scm
index 3a008aa..6fa281d 100644
--- a/guile/starlet/fixture-library/arduino.scm
+++ b/guile/starlet/fixture-library/generic/rgb.scm
@@ -1,5 +1,5 @@
;;
-;; starlet/fixture-library/arduino.scm
+;; starlet/fixture-library/generic/rgb.scm
;;
;; Copyright © 2020-2021 Thomas White <taw@bitwiz.org.uk>
;;
@@ -18,25 +18,21 @@
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;
-(define-module (starlet fixture-library arduino)
+(define-module (starlet fixture-library generic rgb)
#:use-module (oop goops)
#:use-module (starlet fixture)
#:use-module (starlet colours)
- #:export (<arduino-dmx-thing>))
+ #:export (<generic-rgb>))
-;; This fixture class drives the RGB LED on the Arduino DMX shield
-;; as described by Matthias Hertel at http://www.mathertel.de/Arduino/DMXShield.aspx
-
-
-(define-class <arduino-dmx-thing> (<fixture>)
+(define-class <generic-rgb> (<fixture>)
(attributes
#:init-form (list
(attr-continuous 'intensity '(0 100) 0)
(attr-colour 'colour white))))
-(define-method (scanout-fixture (fixture <arduino-dmx-thing>)
+(define-method (scanout-fixture (fixture <generic-rgb>)
get-attr set-chan8 set-chan16)
(let ((intensity (get-attr 'intensity))
diff --git a/guile/starlet/fixture-library/robe.scm b/guile/starlet/fixture-library/robe.scm
deleted file mode 100644
index 97ac44a..0000000
--- a/guile/starlet/fixture-library/robe.scm
+++ /dev/null
@@ -1,198 +0,0 @@
-;;
-;; starlet/fixture-library/robe.scm
-;;
-;; Copyright © 2020-2021 Thomas White <taw@bitwiz.org.uk>
-;;
-;; This file is part of Starlet.
-;;
-;; Starlet is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-;;
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
-;;
-(define-module (starlet fixture-library robe)
- #:use-module (oop goops)
- #:use-module (starlet fixture)
- #:use-module (starlet colours)
- #:export (<robe-dl7s-mode1>
- <robe-mmxwashbeam-mode1>
- <robe-mmxspot-mode1>))
-
-
-(define-class <robe-dl7s-mode1> (<fixture>)
- (attributes
- #:init-form (list
- (attr-continuous 'intensity '(0 100) 0)
- (attr-continuous 'pan '(0 540) 270)
- (attr-continuous 'tilt '(0 270) 135)
- (attr-list 'strobe '(#t #f) #f)
- (attr-list 'prism '(#t #f) #f)
- (attr-list 'tungsten-watts-emulation '(750 1000 1200 2000 2500 #f) #f)
- (attr-colour 'colour white)
- (attr-continuous 'colour-temperature-correction '(2700 8000) 8000)
- (attr-continuous 'green-correction '(-100 100) 0))))
-
-
-(define-method (scanout-fixture (fixture <robe-dl7s-mode1>)
- get-attr set-chan8 set-chan16)
-
- (set-chan16 50 (percent->dmxval16 (get-attr 'intensity)))
-
- (set-chan16 1 (scale-to-range (get-attr 'pan) '(0 540) '(0 65535)))
- (set-chan16 3 (scale-to-range (get-attr 'tilt) (0 270) '(0 65535)))
-
- (set-chan8 49 (if (get-attr 'strobe) 95 32))
-
- (set-chan8 28 (if (get-attr 'prism) 50 0))
-
- (set-chan8 7 (assv-ref '((750 . 82)
- (1000 . 88)
- (1200 . 92)
- (2000 . 97)
- (2500 . 102)
- (#f . 107))
- (get-attr 'tungsten-watts-emulation)))
-
- (let ((cmy (colour-as-cmy (get-attr 'colour))))
- (set-chan8 9 (percent->dmxval8 (car cmy)))
- (set-chan8 11 (percent->dmxval8 (cadr cmy)))
- (set-chan8 13 (percent->dmxval8 (caddr cmy)))))
-
-
-(define-class <robe-mmxwashbeam-mode1> (<fixture>)
- (attributes
- #:init-form (list
- (attr-continuous 'intensity '(0 100) 0)
- (attr-continuous 'pan '(0 540) 270)
- (attr-continuous 'tilt '(0 270) 135)
- (attr-list 'strobe '(#t #f) #f)
- (attr-list 'colwheel '(#f red blue orange green amber uv) #f)
- (attr-list 'gobo '(#f iris gobo1 gobo2 gobo3 gobo4 gobo5 gobo6) #f)
- (attr-list 'beamtype '(beam beamwash beamwashext) 'beam)
- (attr-colour 'colour white)
- (attr-continuous 'zoom '(0 100) 0)
- (attr-continuous 'focus '(0 100) 0)
- (attr-continuous 'barndoor-rot '(0 180) 90)
- (attr-continuous 'barndoor1 '(0 180) 0)
- (attr-continuous 'barndoor2 '(0 100) 0)
- (attr-continuous 'barndoor3 '(0 100) 0)
- (attr-continuous 'barndoor4 '(0 100) 0))))
-
-
-(define-method (scanout-fixture (fixture <robe-mmxwashbeam-mode1>)
- get-attr set-chan8 set-chan16)
-
- (set-chan16 33 (percent->dmxval16 (get-attr 'intensity)))
-
- (set-chan16 1 (scale-to-range (get-attr 'pan) '(0 540) '(0 65535)))
- (set-chan16 3 (scale-to-range (get-attr 'tilt) '(0 270) '(0 65535)))
-
- (set-chan8 32 (if (get-attr 'strobe) 70 255))
-
- (set-chan16 19 (percent->dmxval16 (get-attr 'zoom)))
- (set-chan16 21 (percent->dmxval16 (get-attr 'focus)))
-
- ;;(set-chan 24 (number->dmxval (get-attr 'barndoor-rot) '(0 180)))
- (set-chan8 25 (percent->dmxval8 (get-attr 'barndoor1)))
- (set-chan8 26 (percent->dmxval8 (get-attr 'barndoor2)))
- (set-chan8 27 (percent->dmxval8 (get-attr 'barndoor3)))
- (set-chan8 28 (percent->dmxval8 (get-attr 'barndoor4)))
-
- (set-chan8 7 (assv-ref '((#f . 0)
- (red . 18)
- (blue . 37)
- (orange . 55)
- (green . 73)
- (amber . 91)
- (uv . 110))
- (get-attr 'colwheel)))
-
- (set-chan8 15 (assv-ref '((#f . 0)
- (iris . 5)
- (gobo1 . 10)
- (gobo2 . 14)
- (gobo3 . 18)
- (gobo4 . 22)
- (gobo5 . 26)
- (gobo6 . 30))
- (get-attr 'gobo)))
-
- (set-chan8 18 (assv-ref '((beam . 0)
- (beamwash . 35)
- (beamwashext . 45))
- (get-attr 'beamtype)))
-
- (let ((cmy (colour-as-cmy (get-attr 'colour))))
- (set-chan8 9 (percent->dmxval8 (car cmy)))
- (set-chan8 10 (percent->dmxval8 (cadr cmy)))
- (set-chan8 11 (percent->dmxval8 (caddr cmy)))))
-
-
-(define-class <robe-mmxspot-mode1> (<fixture>)
- (attributes
- #:init-form (list
- (attr-continuous 'intensity '(0 100) 0)
- (attr-continuous 'pan '(0 540) 270)
- (attr-continuous 'tilt '(0 270) 135)
- (attr-list 'colwheel '(#f red blue orange green amber uv) #f)
- (attr-list 'prism '(#t #f) #f)
- (attr-list 'strobe '(#f #t random zap) #f)
- (attr-continuous 'strobe-speed '(0 100) 50)
- (attr-colour 'colour white)
- (attr-continuous 'iris '(0 100) 0)
- (attr-continuous 'zoom '(0 100) 0)
- (attr-continuous 'focus '(0 100) 0)
- (attr-continuous 'hotspot '(0 100) 0)
- (attr-continuous 'frost '(0 100) 0)
- (attr-continuous 'cto '(3200 6900) 6900))))
-
-
-(define-method (scanout-fixture (fixture <robe-mmxspot-mode1>)
- get-attr set-chan8 set-chan16)
-
- (set-chan16 37 (percent->dmxval16 (get-attr 'intensity)))
-
- (set-chan16 1 (scale-to-range (get-attr 'pan) '(0 540) '(0 65535)))
-
- (set-chan16 3 (scale-to-range (get-attr 'tilt) '(0 270) '(0 65535)))
-
- (set-chan16 28 (scale-to-range (get-attr 'iris) '(0 100) '(0 45567)))
- (set-chan16 30 (percent->dmxval16 (get-attr 'zoom)))
- (set-chan16 32 (percent->dmxval16 (get-attr 'focus)))
-
- (set-chan8 36
- (let ((strb (get-attr 'strobe))
- (spd (get-attr 'strobe-speed)))
- (cond
- ((eq? strb #t) (scale-to-range spd '(0 100) '(64 95)))
- ((eq? strb 'random) (scale-to-range spd '(0 100) '(192 223)))
- ((eq? strb 'zap) (scale-to-range spd '(0 100) '(160 191)))
- (else 255))))
-
- (set-chan8 25 (if (get-attr 'prism) 20 0))
-
- (set-chan8 7 (assv-ref '((#f . 0)
- (red . 18)
- (blue . 37)
- (orange . 55)
- (green . 73)
- (amber . 91)
- (uv . 110))
- (get-attr 'colwheel)))
-
- (let ((cmy (colour-as-cmy (get-attr 'colour))))
- (set-chan8 9 (percent->dmxval8 (car cmy)))
- (set-chan8 10 (percent->dmxval8 (cadr cmy)))
- (set-chan8 11 (percent->dmxval8 (caddr cmy))))
-
- (set-chan8 35 (percent->dmxval8 (get-attr 'hotspot)))
- (set-chan8 12 (scale-to-range (get-attr 'cto) '(3200 6900) '(0 255)))
- (set-chan8 27 (scale-to-range (get-attr 'frost) '(0 100) '(0 179))))
diff --git a/guile/starlet/fixture-library/robe/dl7s/mode1.scm b/guile/starlet/fixture-library/robe/dl7s/mode1.scm
new file mode 100644
index 0000000..e9d5a9a
--- /dev/null
+++ b/guile/starlet/fixture-library/robe/dl7s/mode1.scm
@@ -0,0 +1,65 @@
+;;
+;; starlet/fixture-library/robe/dl7s/mode1.scm
+;;
+;; Copyright © 2020-2021 Thomas White <taw@bitwiz.org.uk>
+;;
+;; This file is part of Starlet.
+;;
+;; Starlet is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+;;
+(define-module (starlet fixture-library robe dl7s mode1)
+ #:use-module (oop goops)
+ #:use-module (starlet fixture)
+ #:use-module (starlet colours)
+ #:export (<robe-dl7s-mode1>))
+
+
+(define-class <robe-dl7s-mode1> (<fixture>)
+ (attributes
+ #:init-form (list
+ (attr-continuous 'intensity '(0 100) 0)
+ (attr-continuous 'pan '(0 540) 270)
+ (attr-continuous 'tilt '(0 270) 135)
+ (attr-list 'strobe '(#t #f) #f)
+ (attr-list 'prism '(#t #f) #f)
+ (attr-list 'tungsten-watts-emulation '(750 1000 1200 2000 2500 #f) #f)
+ (attr-colour 'colour white)
+ (attr-continuous 'colour-temperature-correction '(2700 8000) 8000)
+ (attr-continuous 'green-correction '(-100 100) 0))))
+
+
+(define-method (scanout-fixture (fixture <robe-dl7s-mode1>)
+ get-attr set-chan8 set-chan16)
+
+ (set-chan16 50 (percent->dmxval16 (get-attr 'intensity)))
+
+ (set-chan16 1 (scale-to-range (get-attr 'pan) '(0 540) '(0 65535)))
+ (set-chan16 3 (scale-to-range (get-attr 'tilt) (0 270) '(0 65535)))
+
+ (set-chan8 49 (if (get-attr 'strobe) 95 32))
+
+ (set-chan8 28 (if (get-attr 'prism) 50 0))
+
+ (set-chan8 7 (assv-ref '((750 . 82)
+ (1000 . 88)
+ (1200 . 92)
+ (2000 . 97)
+ (2500 . 102)
+ (#f . 107))
+ (get-attr 'tungsten-watts-emulation)))
+
+ (let ((cmy (colour-as-cmy (get-attr 'colour))))
+ (set-chan8 9 (percent->dmxval8 (car cmy)))
+ (set-chan8 11 (percent->dmxval8 (cadr cmy)))
+ (set-chan8 13 (percent->dmxval8 (caddr cmy)))))
diff --git a/guile/starlet/fixture-library/robe/mmxspot/mode1.scm b/guile/starlet/fixture-library/robe/mmxspot/mode1.scm
new file mode 100644
index 0000000..9fedde4
--- /dev/null
+++ b/guile/starlet/fixture-library/robe/mmxspot/mode1.scm
@@ -0,0 +1,87 @@
+;;
+;; starlet/fixture-library/robe/mmxspot/mode1.scm
+;;
+;; Copyright © 2020-2021 Thomas White <taw@bitwiz.org.uk>
+;;
+;; This file is part of Starlet.
+;;
+;; Starlet is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+;;
+(define-module (starlet fixture-library robe mmxspot mode1)
+ #:use-module (oop goops)
+ #:use-module (starlet fixture)
+ #:use-module (starlet colours)
+ #:export (<robe-mmxspot-mode1>))
+
+
+(define-class <robe-mmxspot-mode1> (<fixture>)
+ (attributes
+ #:init-form (list
+ (attr-continuous 'intensity '(0 100) 0)
+ (attr-continuous 'pan '(0 540) 270)
+ (attr-continuous 'tilt '(0 270) 135)
+ (attr-list 'colwheel '(#f red blue orange green amber uv) #f)
+ (attr-list 'prism '(#t #f) #f)
+ (attr-list 'strobe '(#f #t random zap) #f)
+ (attr-continuous 'strobe-speed '(0 100) 50)
+ (attr-colour 'colour white)
+ (attr-continuous 'iris '(0 100) 0)
+ (attr-continuous 'zoom '(0 100) 0)
+ (attr-continuous 'focus '(0 100) 0)
+ (attr-continuous 'hotspot '(0 100) 0)
+ (attr-continuous 'frost '(0 100) 0)
+ (attr-continuous 'cto '(3200 6900) 6900))))
+
+
+(define-method (scanout-fixture (fixture <robe-mmxspot-mode1>)
+ get-attr set-chan8 set-chan16)
+
+ (set-chan16 37 (percent->dmxval16 (get-attr 'intensity)))
+
+ (set-chan16 1 (scale-to-range (get-attr 'pan) '(0 540) '(0 65535)))
+
+ (set-chan16 3 (scale-to-range (get-attr 'tilt) '(0 270) '(0 65535)))
+
+ (set-chan16 28 (scale-to-range (get-attr 'iris) '(0 100) '(0 45567)))
+ (set-chan16 30 (percent->dmxval16 (get-attr 'zoom)))
+ (set-chan16 32 (percent->dmxval16 (get-attr 'focus)))
+
+ (set-chan8 36
+ (let ((strb (get-attr 'strobe))
+ (spd (get-attr 'strobe-speed)))
+ (cond
+ ((eq? strb #t) (scale-to-range spd '(0 100) '(64 95)))
+ ((eq? strb 'random) (scale-to-range spd '(0 100) '(192 223)))
+ ((eq? strb 'zap) (scale-to-range spd '(0 100) '(160 191)))
+ (else 255))))
+
+ (set-chan8 25 (if (get-attr 'prism) 20 0))
+
+ (set-chan8 7 (assv-ref '((#f . 0)
+ (red . 18)
+ (blue . 37)
+ (orange . 55)
+ (green . 73)
+ (amber . 91)
+ (uv . 110))
+ (get-attr 'colwheel)))
+
+ (let ((cmy (colour-as-cmy (get-attr 'colour))))
+ (set-chan8 9 (percent->dmxval8 (car cmy)))
+ (set-chan8 10 (percent->dmxval8 (cadr cmy)))
+ (set-chan8 11 (percent->dmxval8 (caddr cmy))))
+
+ (set-chan8 35 (percent->dmxval8 (get-attr 'hotspot)))
+ (set-chan8 12 (scale-to-range (get-attr 'cto) '(3200 6900) '(0 255)))
+ (set-chan8 27 (scale-to-range (get-attr 'frost) '(0 100) '(0 179))))
diff --git a/guile/starlet/fixture-library/robe/mmxwashbeam/mode1.scm b/guile/starlet/fixture-library/robe/mmxwashbeam/mode1.scm
new file mode 100644
index 0000000..b412a24
--- /dev/null
+++ b/guile/starlet/fixture-library/robe/mmxwashbeam/mode1.scm
@@ -0,0 +1,94 @@
+;;
+;; starlet/fixture-library/robe/mmxwashbeam/mode1.scm
+;;
+;; Copyright © 2020-2021 Thomas White <taw@bitwiz.org.uk>
+;;
+;; This file is part of Starlet.
+;;
+;; Starlet is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+;;
+(define-module (starlet fixture-library robe mmxwashbeam mode1)
+ #:use-module (oop goops)
+ #:use-module (starlet fixture)
+ #:use-module (starlet colours)
+ #:export (<robe-mmxwashbeam-mode1>))
+
+
+(define-class <robe-mmxwashbeam-mode1> (<fixture>)
+ (attributes
+ #:init-form (list
+ (attr-continuous 'intensity '(0 100) 0)
+ (attr-continuous 'pan '(0 540) 270)
+ (attr-continuous 'tilt '(0 270) 135)
+ (attr-list 'strobe '(#t #f) #f)
+ (attr-list 'colwheel '(#f red blue orange green amber uv) #f)
+ (attr-list 'gobo '(#f iris gobo1 gobo2 gobo3 gobo4 gobo5 gobo6) #f)
+ (attr-list 'beamtype '(beam beamwash beamwashext) 'beam)
+ (attr-colour 'colour white)
+ (attr-continuous 'zoom '(0 100) 0)
+ (attr-continuous 'focus '(0 100) 0)
+ (attr-continuous 'barndoor-rot '(0 180) 90)
+ (attr-continuous 'barndoor1 '(0 180) 0)
+ (attr-continuous 'barndoor2 '(0 100) 0)
+ (attr-continuous 'barndoor3 '(0 100) 0)
+ (attr-continuous 'barndoor4 '(0 100) 0))))
+
+
+(define-method (scanout-fixture (fixture <robe-mmxwashbeam-mode1>)
+ get-attr set-chan8 set-chan16)
+
+ (set-chan16 33 (percent->dmxval16 (get-attr 'intensity)))
+
+ (set-chan16 1 (scale-to-range (get-attr 'pan) '(0 540) '(0 65535)))
+ (set-chan16 3 (scale-to-range (get-attr 'tilt) '(0 270) '(0 65535)))
+
+ (set-chan8 32 (if (get-attr 'strobe) 70 255))
+
+ (set-chan16 19 (percent->dmxval16 (get-attr 'zoom)))
+ (set-chan16 21 (percent->dmxval16 (get-attr 'focus)))
+
+ ;;(set-chan 24 (number->dmxval (get-attr 'barndoor-rot) '(0 180)))
+ (set-chan8 25 (percent->dmxval8 (get-attr 'barndoor1)))
+ (set-chan8 26 (percent->dmxval8 (get-attr 'barndoor2)))
+ (set-chan8 27 (percent->dmxval8 (get-attr 'barndoor3)))
+ (set-chan8 28 (percent->dmxval8 (get-attr 'barndoor4)))
+
+ (set-chan8 7 (assv-ref '((#f . 0)
+ (red . 18)
+ (blue . 37)
+ (orange . 55)
+ (green . 73)
+ (amber . 91)
+ (uv . 110))
+ (get-attr 'colwheel)))
+
+ (set-chan8 15 (assv-ref '((#f . 0)
+ (iris . 5)
+ (gobo1 . 10)
+ (gobo2 . 14)
+ (gobo3 . 18)
+ (gobo4 . 22)
+ (gobo5 . 26)
+ (gobo6 . 30))
+ (get-attr 'gobo)))
+
+ (set-chan8 18 (assv-ref '((beam . 0)
+ (beamwash . 35)
+ (beamwashext . 45))
+ (get-attr 'beamtype)))
+
+ (let ((cmy (colour-as-cmy (get-attr 'colour))))
+ (set-chan8 9 (percent->dmxval8 (car cmy)))
+ (set-chan8 10 (percent->dmxval8 (cadr cmy)))
+ (set-chan8 11 (percent->dmxval8 (caddr cmy)))))