Имеется функция, общающаяся с АЦП на последовательном порту.
Она посылает болезному команду и ждёт от него ответа посредством 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)
- Форум Как идиоматичнее написать эту функцию на лиспе (2023)
- Форум ошибка в do цикле(lisp) (2013)
- Форум Как отремонтировать (2021)
- Форум EPOLL и детект будущего EWOULDBLOCK (2011)
- Форум куда деваются кириллические кнопки? (2015)
- Форум write()::PIPE_BUF (2015)
- Форум Bluetooth не соединяется ни с одним устройством (2019)
- Форум FastCGI и POST-запрос. Не вижу тела запроса. (2011)
- Форум slime Coonection part (2023)