diff options
author | Thomas White <taw@bitwiz.me.uk> | 2021-01-11 17:49:52 +0100 |
---|---|---|
committer | Thomas White <taw@bitwiz.me.uk> | 2021-01-11 17:49:52 +0100 |
commit | 27e29284b86f69a1eeb23138b29b0079972e41d2 (patch) | |
tree | 1d4aac73d68a8834cb073cf1161ffefe3eef19d5 /guile/starlet/base.scm | |
parent | 7200a3802e06e9a3dadd6cad0d209387a0149f86 (diff) |
More consistent behaviour between 8-bit and 16-bit setters
Diffstat (limited to 'guile/starlet/base.scm')
-rw-r--r-- | guile/starlet/base.scm | 29 |
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)) |