Имеется функция, общающаяся с АЦП на последовательном порту. Она посылает болезному команду и ждёт от него ответа посредством serve-event. Первоначально определена как-то так: (defun write-adc-cmd-or-timeout (dev cmd &key (answer-size 8) (timeout 1)) (let ((raw-data (make-array answer-size :element-type (stream-element-type dev)))) (labels ((input-handler (dev) (read-sequence raw-data dev))) (sb-sys:with-fd-handler ((sb-posix::file-descriptor dev) :input #'input-handler) (write-sequence cmd dev) (if (sb-sys:serve-event timeout) raw-data nil))))) Однако, изучив ругань, sbcl я понял, что ССЗБ. Т.к. with-fd-handler нужно скармливать дескриптор файловый (сиречь int), то он его и скармливает input-handler'у. Вопрос таков - есть ли в sbcl способ без лишнего геморроя превратить обратно fd в stream? Пока нарыл в руководстве функцию sb-ext::make-fd-stream и пытаюсь как-то так (with-open-file (tty "/dev/ttyS0" :direction :io :if-exists :append :element-type '(unsigned-byte 8)) (let ((answ (make-array 8 :element-type (stream-element-type tty)))) (write-sequence #(128 16 16 16 16 16 16 16) (sb-ext::make-fd-stream (sb-posix::file-descriptor tty) :element-type '(unsigned-byte 8))))) На что мне <<банка>> ругается - мол не бинарный поток, батеька.
Ответ на:
комментарий
от marsijanin
Ответ на:
комментарий
от marsijanin
Ответ на:
комментарий
от den73
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Знатокам лиспа (2) (2008)
- Форум ошибка в do цикле(lisp) (2013)
- Форум Как идиоматичнее написать эту функцию на лиспе (2023)
- Форум куда деваются кириллические кнопки? (2015)
- Форум slime Coonection part (2023)
- Форум libusb (2011)
- Форум Про рестарты и интерактивность в CL (2013)
- Форум просмотр стримов в weston (2017)
- Форум Не пишутся CD-RW (2014)
- Форум Cd-rw (2003)