mirror of
https://gitlab.com/eql/lqml.git
synced 2025-12-06 02:30:38 -08:00
37 lines
1.2 KiB
Common Lisp
37 lines
1.2 KiB
Common Lisp
;;; USB connected uLisp (e.g. Arduino)
|
|
|
|
(in-package :editor)
|
|
|
|
(defvar *ulisp-mode* nil)
|
|
|
|
(defparameter *newline* #.(map 'string 'identity (list #\Return #\Newline)))
|
|
|
|
(defun ini-usb ()
|
|
(when *ulisp-mode*
|
|
(qt:connect-usb qt:*cpp*)))
|
|
|
|
(defun send-to-ulisp (form)
|
|
(qt:send-to-ulisp qt:*cpp* (x:cc form *newline*)))
|
|
|
|
(let (prompt)
|
|
(defun received-from-ulisp (data)
|
|
(let* ((lines (delete-if 'x:empty-string (x:split data *newline*)))
|
|
(len (length lines)))
|
|
(cond ((= len 2)
|
|
(print-eval-output :expression (first lines))
|
|
(setf prompt (second lines)))
|
|
((> len 2)
|
|
(let ((exp (cons prompt (butlast lines 2)))
|
|
(value (nth (- len 2) lines)))
|
|
(print-eval-output :expression (x:join exp #\Newline))
|
|
(print-eval-output (cond ((x:starts-with "Error:" value)
|
|
:error)
|
|
((string= "Break!" value)
|
|
:trace)
|
|
(t
|
|
:values))
|
|
value))
|
|
(setf prompt (first (last lines))))))
|
|
(values)))
|
|
|
|
(qlater 'ini-usb)
|