From 3d3b27baad211e98af50be9f56359edd0fa52454 Mon Sep 17 00:00:00 2001 From: Kyle Isom Date: Fri, 4 Apr 2025 16:08:17 -0700 Subject: [PATCH] adding more lisp tools --- lisp/rtc.lsp | 43 +++++++++++++++++++++++++++++++++++++++++++ lisp/sync.sh | 5 +++++ lisp/tools.lsp | 30 ++++++++++++++++++++++++++++++ 3 files changed, 78 insertions(+) create mode 100644 lisp/rtc.lsp create mode 100755 lisp/sync.sh create mode 100644 lisp/tools.lsp diff --git a/lisp/rtc.lsp b/lisp/rtc.lsp new file mode 100644 index 0000000..e0932bb --- /dev/null +++ b/lisp/rtc.lsp @@ -0,0 +1,43 @@ +(defvar *rtc-port* 0) + +(defun rtc-set (hr min) + "(rtc-set hr min) +Set the time on a DS3231 RTC. Times are in BCD, so use +the appropriate reader macro, e.g. (rtc-set #x12 #x34) +for 12:34. Assumes seconds are zero." + (with-i2c (str *rtc-port* #x68) + (write-byte 0 str) + (write-byte 0 str) + (write-byte min str) + (write-byte hr str))) + +(defun bcd-to-dec (x) + "(bcd-to-dec x) +Convert the BCD-encoded number x to a decimal value." + (+ + (* 10 (ash x -4)) + (logand x #xf))) + +(defun dec-to-bcd (x) + "(dec-to-bcd x) +Converts the decimal value to a BCD-encoded number. +Number must be in the range 0 to 99.") + +(defun rtc-get () + (with-i2c (str *rtc-port* #x68) + (write-byte 0 str) + (restart-i2c str 3) + (mapcar bcd-to-dec + (reverse + (list + (read-byte str) + (read-byte str) + (read-byte str)))))) + +(defun rtc-now () + "(rtc-now) +Set the time using the RTC." + (apply now (rtc-get))) + +(defun now-rtc () + diff --git a/lisp/sync.sh b/lisp/sync.sh new file mode 100755 index 0000000..7f91c14 --- /dev/null +++ b/lisp/sync.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +MEDIA="$1" +cp *.lsp "$MEDIA" +umount "$MEDIA" diff --git a/lisp/tools.lsp b/lisp/tools.lsp new file mode 100644 index 0000000..c5132f6 --- /dev/null +++ b/lisp/tools.lsp @@ -0,0 +1,30 @@ +(defun pprintf (sym str) + "(pprintf sym str) +Pretty-print the function pointed to by sym to +the stream, which follows the 'format directives." + (let ((form (eval sym))) + (format str "(defun ~a ~a~%~{ ~a~^~%~})" + (string sym) + (cadr form) + (cddr form)))) + +(defun copy-file (source dest) + (with-sd-card (writer dest 2) + (with-sd-card (reader source) + (loop + (let ((data (read-byte reader))) + (when (null data) + (return)) + (write-byte data writer)))))) + +(defun i2c-scan (port) + (dotimes (addr 127) + (with-i2c (str port addr) + (when str (print addr))))) + +(defun i2c-scan2 (port) + (dotimes (addr 127) + (with-i2c (str port addr) + (format t "~2,0'x: " addr) + (if str (print t) + (print nil)))))