aboutsummaryrefslogtreecommitdiff
path: root/guile/starlet/base.scm
diff options
context:
space:
mode:
authorThomas White <taw@bitwiz.me.uk>2021-01-11 17:49:52 +0100
committerThomas White <taw@bitwiz.me.uk>2021-01-11 17:49:52 +0100
commit27e29284b86f69a1eeb23138b29b0079972e41d2 (patch)
tree1d4aac73d68a8834cb073cf1161ffefe3eef19d5 /guile/starlet/base.scm
parent7200a3802e06e9a3dadd6cad0d209387a0149f86 (diff)
More consistent behaviour between 8-bit and 16-bit setters
Diffstat (limited to 'guile/starlet/base.scm')
-rw-r--r--guile/starlet/base.scm29
1 files changed, 22 insertions, 7 deletions
diff --git a/guile/starlet/base.scm b/guile/starlet/base.scm
index dc683e5..93cec6d 100644
--- a/guile/starlet/base.scm
+++ b/guile/starlet/base.scm
@@ -15,7 +15,9 @@
scanout-freq
make-empty-state
register-state!
- percent->dmxval
+ percent->dmxval8
+ percent->dmxval16
+ scale-to-range
hirestime
state-for-each
get-attributes
@@ -216,8 +218,22 @@
(inexact->exact
(min 255 (max 0 (round a)))))
-(define (percent->dmxval val)
- (round-dmx (/ (* 256 val) 100)))
+(define (scale-to-range val orig-range dest-range)
+
+ (define (range r)
+ (- (cadr r) (car r)))
+
+ (+ (car dest-range)
+ (* (range dest-range)
+ (/ (- val (car orig-range))
+ (range orig-range)))))
+
+(define (percent->dmxval8 val)
+ (round-dmx
+ (scale-to-range val '(0 100) '(0 255))))
+
+(define (percent->dmxval16 val)
+ (scale-to-range val '(0 100) '(0 65535)))
(define (msb val)
(round-dmx (euclidean-quotient val 256)))
@@ -386,11 +402,10 @@
value)))
;; Helper function to set 16-bit DMX value
- (define (set-chan-16bit relative-channel-number value max-value)
+ (define (set-chan-16bit relative-channel-number value)
(when value
- (let ((val16 (* (min value max-value) (/ 65535 max-value))))
- (set-chan relative-channel-number (msb val16))
- (set-chan (+ relative-channel-number 1) (lsb val16)))))
+ (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))