41.19 Связь через последовательные порты

Emacs может взаимодействовать с последовательными портами. Для интерактивного использования M-x serial-term открывает окно терминала. В программе на Lisp make-serial-process создаёт объект процесса.

Последовательный порт можно настраивать во время выполнения, без необходимости закрывать и заново открывать его. Функция serial-process-configure позволяет изменять скорость, размер байта и другие параметры. В окне терминала, созданном serial-term, вы можете щёлкнуть на строке режима для настройки.

Последовательное соединение представлено объектом процесса, который можно использовать аналогично дочернему или сетевому процессу. Вы можете отправлять и получать данные, а также настраивать последовательный порт. Однако объект последовательного процесса не имеет идентификатора процесса, и вы не можете посылать ему сигналы, а коды состояния отличаются от других типов процессов. delete-process для объекта процесса или kill-buffer для буфера процесса закрывают соединение, но это не влияет на устройство, подключённое к последовательному порту.

Функция process-type возвращает символ serial для объекта процесса, представляющего соединение через последовательный порт.

Последовательные порты доступны в системах GNU/Linux, Unix и MS Windows.

Команда: serial-term порт скорость &optional построчный-режим

Запускает эмулятор терминала для последовательного порта в новом буфере. порт — это имя последовательного порта для подключения. Например, это может быть /dev/ttyS0 в Unix. В MS Windows это может быть COM1 или \\.\COM10 (удваивайте обратную косую черту в строках Lisp).

скорость — это скорость последовательного порта в битах в секунду. 9600 — распространённое значение. Буфер находится в режиме Term; см. Режим Term в Руководстве GNU Emacs для команд, используемых в этом буфере. Вы можете изменять скорость и конфигурацию в меню строки режима. Если построчный-режим не равен nil, используется term-line-mode; в противном случае используется term-raw-mode.

Функция: make-serial-process &rest аргументы

Эта функция создаёт процесс и буфер. Аргументы задаются как пары ключевое-слово/значение. Вот список значимых ключевых слов, причём первые два (порт и скорость) обязательны:

:port порт

Это имя последовательного порта. В системах Unix и GNU это имя файла, например /dev/ttyS0. В Windows это может быть COM1 или \\.\COM10 для портов выше COM9 (удваивайте обратную косую черту в строках Lisp).

:speed скорость

Скорость последовательного порта в битах в секунду. Эта функция вызывает serial-process-configure для установки скорости; см. следующее описание этой функции для получения более подробной информации.

:name имя

Имя процесса. Если имя не задано, в качестве имени процесса будет использоваться порт.

:buffer буфер

Буфер, связываемый с процессом. Значением может быть либо буфер, либо строка, задающая имя буфера. Вывод процесса помещается в конец этого буфера, если только вы не укажете поток вывода или функцию фильтр для обработки вывода. Если буфер не задан, имя буфера процесса берётся из значения ключевого слова :name.

:coding кодировка

Если кодировка — это символ, он задаёт систему кодирования, используемую как для чтения, так и для записи для этого процесса. Если кодировка — это пара (декодирование . кодирование), декодирование используется для чтения, а кодирование — для записи. Если не указано, по умолчанию системы кодирования определяются по самим данным.

:noquery флаг-запроса

Инициализирует флаг запроса процесса значением флаг-запроса. См. Запрос перед выходом. Флаг по умолчанию равен nil, если не указано иное.

:stop логзнач

Запускает процесс в остановленном состоянии, если логзнач не равен nil. В остановленном состоянии последовательный процесс не принимает входящие данные, но вы можете отправлять исходящие данные. Остановленное состояние снимается continue-process и устанавливается stop-process.

:filter фильтр

Устанавливает фильтр в качестве фильтра процесса.

:sentinel страж

Устанавливает страж в качестве стража процесса.

:plist plist

Устанавливает plist в качестве начального plist процесса.

:bytesize
:parity
:stopbits
:flowcontrol

Они обрабатываются serial-process-configure, которая вызывается make-serial-process.

Исходный список аргументов, возможно изменённый последующей настройкой, доступен через функцию process-contact.

Вот пример:

(make-serial-process :port "/dev/ttyS0" :speed 9600)
Функция: serial-process-configure &rest аргументы

Эта функция настраивает соединение через последовательный порт. Аргументы задаются как пары ключевое-слово/значение. Атрибуты, которые не указаны, повторно инициализируются из текущей конфигурации процесса (доступной через функцию process-contact) или устанавливаются в разумные значения по умолчанию. Определены следующие аргументы:

:process процесс
:name имя
:buffer буфер
:port порт

Любой из этих аргументов может быть задан для идентификации процесса, который подлежит настройке. Если ни один из этих аргументов не задан, используется процесс текущего буфера.

:speed скорость

Скорость последовательного порта в битах в секунду, также известная как скорость передачи в бодах. Значение может быть любым числом, но большинство последовательных портов работают только на нескольких определённых значениях от 1200 до 115200, при этом 9600 является наиболее распространённым значением. Если скорость равна nil, функция игнорирует все остальные аргументы и не настраивает порт. Это может быть полезно для специальных последовательных портов, таких как преобразователи Bluetooth-в-последовательный, которые можно настроить только с помощью команд ‘AT’, отправляемых через соединение. Значение nil для скорости допустимо только для соединений, которые уже были открыты предыдущим вызовом make-serial-process или serial-term.

:bytesize размер-байта

Количество бит на байт, которое может быть 7 или 8. Если размер-байта не задан или равен nil, по умолчанию используется 8.

:parity чётность

Значение может быть nil (не использовать чётность), символ odd (использовать нечётную чётность) или символ even (использовать чётную чётность). Если чётность не задана, по умолчанию чётность отсутствует.

:stopbits стоп-биты

Количество стоп-битов, используемых для завершения передачи каждого байта. стоп-биты могут быть 1 или 2. Если стоп-биты не заданы или равны nil, по умолчанию используется 1.

:flowcontrol управление-потоком

Тип управления потоком, используемый для этого соединения: либо nil (не использовать управление потоком), символ hw (использовать аппаратное управление потоком RTS/CTS) или символ sw (использовать программное управление потоком XON/XOFF). Если управление-потоком не задано, по умолчанию управление потоком отсутствует.

Внутренне make-serial-process вызывает serial-process-configure для начальной настройки последовательного порта.