(define (serial-can-recv dev msg . timeout) (let ((msg (make-can_message)) (func (foreign-lambda int "serial_can_recv" serial-device can_message)) (func2 (foreign-lambda int "serial_can_recv_timeout" serial-device can_message int))) (if (> 0 (if (null? timeout) (func dev msg) (func2 dev msg (car timeout))) (begin (free-can_message msg) (raise "failed")))) (free-can_message msg) #t))