aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas White <taw@bitwiz.me.uk>2021-01-11 17:51:48 +0100
committerThomas White <taw@bitwiz.me.uk>2021-01-11 17:51:48 +0100
commitfc37be35321e87cdd910b13678265dda98c24764 (patch)
tree6bb45dd61fe04102d92eb6377c94e0f0211e3505
parent27e29284b86f69a1eeb23138b29b0079972e41d2 (diff)
Factorise get-fixture-{universe,addr}
-rw-r--r--guile/starlet/base.scm48
1 files changed, 25 insertions, 23 deletions
diff --git a/guile/starlet/base.scm b/guile/starlet/base.scm
index 93cec6d..78dd120 100644
--- a/guile/starlet/base.scm
+++ b/guile/starlet/base.scm
@@ -385,29 +385,31 @@
;; Request all fixtures to output their DMX values
(for-each (lambda (fix)
- ;; Helper function to get a value for this
- ;; fixture in the current state
- (define (get-attr attr-name)
- (value->number (state-find fix
- (find-attr fix attr-name)
- combined-state)
- (hirestime)))
-
- ;; Helper function to set 8-bit DMX value
- (define (set-chan relative-channel-number value)
- (when value
- (set-dmx (get-fixture-universe fix)
- (+ (get-fixture-addr fix)
- (- relative-channel-number 1))
- value)))
-
- ;; Helper function to set 16-bit DMX value
- (define (set-chan-16bit relative-channel-number value)
- (when value
- (set-chan relative-channel-number (msb value))
- (set-chan (+ relative-channel-number 1) (lsb value))))
-
- (scanout-fixture fix get-attr set-chan set-chan-16bit))
+ (let ((univ (get-fixture-universe fix))
+ (addr (get-fixture-addr fix)))
+
+ ;; Helper function to get a value for this
+ ;; fixture in the current state
+ (define (get-attr attr-name)
+ (value->number (state-find fix
+ (find-attr fix attr-name)
+ combined-state)
+ (hirestime)))
+
+ ;; Helper function to set 8-bit DMX value
+ (define (set-chan relative-channel-number value)
+ (when value
+ (set-dmx univ
+ (+ addr relative-channel-number -1)
+ value)))
+
+ ;; Helper function to set 16-bit DMX value
+ (define (set-chan-16bit relative-channel-number value)
+ (when value
+ (set-chan relative-channel-number (msb value))
+ (set-chan (+ relative-channel-number 1) (lsb value))))
+
+ (scanout-fixture fix get-attr set-chan set-chan-16bit)))
(atomic-box-ref patched-fixture-list))