From f6accbde30843bf60595f93a83b3bf2c86109859 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Sun, 21 Mar 2021 11:03:45 +0100 Subject: Add some error checking --- guile/starlet/base.scm | 35 +++++++++++++++++++++++++++-------- guile/starlet/playback.scm | 11 +++++++++++ 2 files changed, 38 insertions(+), 8 deletions(-) diff --git a/guile/starlet/base.scm b/guile/starlet/base.scm index d378457..a7a1af0 100644 --- a/guile/starlet/base.scm +++ b/guile/starlet/base.scm @@ -5,6 +5,7 @@ #:use-module (ice-9 atomic) #:use-module (ice-9 receive) #:use-module (ice-9 pretty-print) + #:use-module (ice-9 exceptions) #:use-module (web client) #:use-module (web http) #:use-module (web uri) @@ -396,13 +397,19 @@ pre-existing contents." ;; Helper function for scanout functions to set individual DMX values (define (set-dmx universe addr value) + (unless (number? value) + (raise-exception (make-exception + (make-exception-with-message + "Attempt to set non-number DMX value") + (make-exception-with-irritants + (list universe addr value))))) + ;; Create DMX array for universe if it doesn't exist already (unless (assq universe universes) (set! universes (acons universe (make-u8vector 512 0) universes))) - ;; Set the value in the DMX array (u8vector-set! (assq-ref universes universe) (- addr 1) ; u8vector-set indexing starts from zero (round-dmx value))) @@ -431,16 +438,28 @@ pre-existing contents." ;; 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))) + + (unless (number? value) + (raise-exception (make-exception + (make-exception-with-message + "set-chan: value is not a number") + (make-exception-with-irritants + (list relative-channel-number 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)))) + (unless (number? value) + (raise-exception (make-exception + (make-exception-with-message + "set-chan16: value is not a number") + (make-exception-with-irritants + (list relative-channel-number + 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))) diff --git a/guile/starlet/playback.scm b/guile/starlet/playback.scm index 9f8fd0b..9726144 100644 --- a/guile/starlet/playback.scm +++ b/guile/starlet/playback.scm @@ -2,6 +2,7 @@ #:use-module (oop goops) #:use-module (ice-9 optargs) #:use-module (ice-9 receive) + #:use-module (ice-9 exceptions) #:use-module (srfi srfi-1) #:use-module (srfi srfi-9) #:use-module (srfi srfi-43) @@ -218,6 +219,16 @@ preset-delay start-time current-time) + + (unless (and (number? start-val) + (number? end-val) + (number? preset-val)) + (raise-exception (make-exception + (make-exception-with-message + "Non-number arguments given to fade-func") + (make-exception-with-irritants + (list start-val end-val preset-val))))) + (let ((elapsed-fade-time (- current-time start-time delay-time))) (cond -- cgit v1.2.3