Emacsはシリアルポートと通信できます。対話的に使用する場合、M-x
serial-termはターミナルウィンドウを開きます。Lispプログラムでは、make-serial-processはプロセスオブジェクトを作成します。
シリアルポートは、一度閉じて開き直すことなく、実行時に設定可能です。関数 serial-process-configure
を使用すると、通信速度やバイトサイズ、その他のパラメータを変更できます。serial-term
で作成されたターミナルウィンドウでは、モードラインをクリックして設定を行うことができます。
シリアル接続はプロセスオブジェクトで表され、サブプロセスやネットワークプロセスと同様に利用できます。データの送受信や、シリアルポートの設定が可能です。ただし、シリアルプロセスオブジェクトにはプロセスIDがなく、シグナルを送信することはできず、ステータスコードも他の種類のプロセスとは異なります。プロセスオブジェクトの
delete-process またはプロセスバッファの kill-buffer
で接続を閉じますが、これによりシリアルポートに接続されているデバイスに影響が出ることはありません。
関数 process-type は、シリアルポート接続を表すプロセスオブジェクトに対して、シンボル
serial を返します。
シリアルポートは、GNU/Linux、Unix、およびMS Windowsシステムで利用可能です。
新しいバッファでシリアルポート用のターミナルエミュレータを起動します。port は接続先のシリアルポート名です。例えば、Unix では /dev/ttyS0 となります。MS Windows では COM1 や \\.\COM10(Lisp 文字列におけるバックスラッシュを2つにしたもの)となります。
speed はシリアルポートの速度(ビット毎秒)です。9600 は一般的な値です。バッファは Term
モードです。そのバッファで使用するコマンドについては、The GNU Emacs Manual の
Term
Mode を参照してください。速度と設定は、モードラインメニューで変更できます。line-mode
が nil 以外の場合は term-line-mode が、それ以外の場合は term-raw-mode が使用されます。
この関数は、プロセスとバッファを作成します。引数はキーワードと引数のペアとして指定します。意味のあるキーワードの一覧を以下に示します。なお、最初の2つ(port と speed)は必須です。
:port portこれはシリアルポートの名称です。UnixおよびGNUシステムでは、/dev/ttyS0のようなファイル名になります。Windowsでは、COM1、あるいはCOM9より上位のポートであれば\\.\COM10となる場合があります(Lisp文字列におけるバックスラッシュを2つにします)。
:speed speedシリアルポートの通信速度(ビット毎秒)。この関数は通信速度の処理に serial-process-configure
を呼び出します。詳細については、当該関数の以下のドキュメントを参照してください。
:name nameプロセス名。name が指定されていない場合は、port もプロセス名として扱われます。
:buffer bufferプロセスに関連付けるバッファ。値には、バッファそのもの、またはバッファ名を指定する文字列のいずれかを指定できます。出力を処理するための出力ストリームやフィルタ関数を指定しない限り、プロセスの出力はそのバッファの末尾に書き込まれます。buffer が指定されていない場合、プロセスバッファの名前は :name キーワードの値から取得されます。
:coding codingcoding がシンボルの場合、この処理における読み書きの両方で使用する符号系を指定します。 coding がコンス (decoding . encoding)
の場合、読み出しには decoding が、書き込みには encoding が使用されます。 指定がない場合は、データ自体から符号系を決定するのがデフォルトです。
:noquery query-flagプロセスクエリフラグを query-flag に初期化します。終了前のクエリ を参照してください。フラグが指定されていない場合、デフォルト値は
nil となります。
:stop boolbool が nil
以外の場合、停止状態でプロセスを開始します。停止状態では、シリアルプロセスは受信データを受け付けませんが、送信データは送信可能です。停止状態は
continue-process によって解除され、stop-process によって設定されます。
:filter filterプロセスフィルタとして filter をインストールします。
:sentinel sentinelプロセスセンティネルとして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)
この関数は、シリアルポート接続を設定します。引数はキーワードと引数のペアとして指定します。指定されなかった属性は、プロセスの現在の設定(関数 process-contact
で取得可能)から再初期化されるか、妥当なデフォルト値に設定されます。以下の引数が定義されています:
:process process:name name:buffer buffer:port port設定対象のプロセスを特定するには、これらの引数のいずれかを指定できます。いずれの引数も指定されない場合は、現在のバッファのプロセスが使用されます。
:speed speedシリアルポートの速度(ビット毎秒)、別名ボーレート。値は任意の数値を指定できますが、ほとんどのシリアルポートは1200から115200までの定義済みの少数の値でのみ動作し、9600が最も一般的な値です。speedがnilの場合、この関数は他のすべての引数を無視し、ポートの設定を行いません。これは、接続経由で送信される‘AT’コマンドを通じてのみ設定可能なBluetooth-to-シリアルコンバータなどの特殊なシリアルポートにおいて有用です。speedに対するnilの値は、以前にmake-serial-processまたはserial-termを呼び出して既に開かれた接続に対してのみ有効です。
:bytesize bytesize1バイトあたりのビット数で、7または8となります。bytesize または nil が指定されない場合は、デフォルトで8となります。
:parity parity値には nil(パリティなし)、シンボル odd(奇数パリティ)、またはシンボル even(偶数パリティ)を指定できます。parity
が指定されない場合は、デフォルトでパリティなしとなります。
:stopbits stopbits各バイトの送信を終了するために使用されるストップビット数。stopbits は 1 または 2
を指定できます。stopbits または nil
が指定されない場合は、デフォルトで 1 となります。
:flowcontrol flowcontrolこの接続で使用するフロー制御の種類。nil(フロー制御を使用しない)、シンボル hw(RTS/CTSハードウェアフロー制御を使用する)、またはシンボル sw(XON/XOFFソフトウェアフロー制御を使用する)のいずれかです。flowcontrol が指定されない場合は、デフォルトでフロー制御なしとなります。
内部的には、make-serial-process がシリアルポートの初期設定のために serial-process-configure を呼び出します。