+
+(define (current-time/usec)
+ (let ((now (gettimeofday)))
+ (+ (* (car now) (expt 10 6)) (cdr now))))
+
+(define (fx-driver fx)
+ (let loop ((t (current-time/usec))
+ (dt 0))
+ ;; We live a moment in the past
+ (receive (h s v)
+ (fx t dt)
+ (display (set-led-hsv! h s v) (current-error-port)))
+ (let ((now (current-time/usec)))
+ (loop now (- now t)))))
+
+(define (hsv-fx t dt)
+ (define tick-increment (/ (deg->rad 1280) (expt 10 6)))
+ (with-mutex color-lock
+ (match current-color
+ (#(h s v)
+ (let ((h (euclidean-remainder (+ h (* tick-increment dt)) tau)))
+ (values h s v))))))
+
+