home *** CD-ROM | disk | FTP | other *** search
- (in-package :oou)
- (oou-provide :Pioneer-u)
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; Pioneer-u.lisp
- ;;
- ;; Copyright ⌐ 1992 Northwestern University Institute for the Learning Sciences
- ;; All Rights Reserved
- ;;
- ;; author: Michael S. Engber
- ;;
- ;; utilities for working with Pioneer laserdisc players
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- (oou-dependencies
- :serial-port
- )
-
- (export '(frame-to-hmmss hmmss-to-frame frame-to-hmmssff hmmssff-to-frame
- Pioneer-player-info))
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;functions for converting among 3 Pioneer time formats
- ;; frame number [0-65535] frames are 1/30 of a second
- ;; hours-minutes-seconds [hmmss]
- ;; hours-minutes-seconds-frame [hmmssff]
-
- (defun frame-to-hmmss (frame)
- (multiple-value-bind (min sec) (floor (floor frame 30) 60)
- (multiple-value-bind (hr min) (floor min 60)
- (+ (* hr 10000) (* min 100) sec))))
-
- (defun hmmss-to-frame (time)
- (* 30 (+ (mod time 100)
- (* 60 (mod (floor time 100) 100))
- (* 3600 (floor time 10000)))))
-
- (defun frame-to-hmmssff (frame)
- (+ (* 100 (frame-to-hmmss frame)) (mod frame 30)))
-
- (defun hmmssff-to-frame (time)
- (+ (mod time 100)
- (* 30 (+ (mod (floor time 100) 100)
- (* 60 (mod (floor time 10000) 100))
- (* 3600 (floor time 1000000))))))
-
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- (defun Pioneer-player-info (port &key (timeout 2))
- (let ((sp (make-instance 'serial-port :port port :config-on-init-p nil)))
- (dolist (data-bits '(8 7))
- (set-data-bits sp data-bits :config-p nil)
- (dolist (stop-bits '(1.0 2.0))
- (set-stop-bits sp stop-bits :config-p nil)
- (dolist (parity '(:none :even :odd))
- (set-parity sp parity :config-p nil)
- (dolist (baud '(4800 9600 1200))
- (set-baud sp baud)
- (sport-flush sp)
- (sport-write-line sp "?X")
- (sleep timeout)
- (let ((response (sport-read-line sp :wait-p nil :wait-eoln-p t)))
- (when (plusp (length response))
- (when (char-equal #\E (char response 0))
- ;sometimes the failed signals cause the ld to return an error initially
- (sport-flush sp)
- (sport-write-line sp "?X")
- (setf response (sport-read-line sp :wait-p t)))
- (return-from Pioneer-player-info (list :port port
- :baud baud
- :stop-bits stop-bits
- :parity parity
- :data-bits data-bits
- :model (ecase (char response 4)
- (#\2 'P4200-vp)
- (#\5 'P330-vp)
- (#\6 'P8000-vp))))))))))))
-
- (defun Pioneer-disk-format (port)
- (let ((sp (make-instance 'serial-port :port port :config-on-init-p nil)))
- (sport-flush sp)
- (sport-write-line sp "SA?D")
- (let ((response (sport-read-line sp :wait-p t)))
- (if (char-equal #\1 (char response 0))
- (ecase (char response 1)
- (#\0 :CAV)
- (#\1
- ;there is no support for distinguishing CLV & CLV-E disks
- ;so we hack it by trying frame mode, which errors on plain CLV
- (sport-write-line sp "FR")
- (ecase (char (sport-read-line sp :wait-p t) 0)
- (#\R :CLV-E)
- (#\E :CLV)))
- (#\X :unknown))
- :no-disk))))
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- #|
- (Pioneer-player-info :modem)
- (Pioneer-disk-format :modem)
- |#
-