Kylix シリアル通信コンポーネント

概要

Linuxで使えるシリアル通信コンポーネントです。 Delphiでよく使われるTCommなどと同じように使えるように したいと思っていますが、インターフェースを同一にする つもりはありません。

まだ試験的に書いただけで、ほとんどの機能は未実装です (単に決めうちのパラメータで通信をする、という段階)。

ダウンロード

<URL:http://www.hi-ho.ne.jp/a-enomoto/kylix-memo/serial/hmcomm-0.1.tgz>

インストール

通常のコンポーネントと同様です。HmComm.dcrとHmComm.pasが 同じディレクトリにある状態で [コンポーネント|コンポーネントのインストール]メニューを 選び、[ユニットファイル名]にHmComm.pasを指定して[OK]ボタンを押します。 メッセージに従ってコンパイルすると、コンポーネント パレットの[Samples]ページに追加されます。

クラス名はTHmCommです。

使用法

プロパティ

Device: string;

シリアルポートのデバイスファイルを指定します。デフォルト値は /dev/ttyS0です。例えば、/dev/ttyUSB0にするとUSBシリアルアダプタ で通信ができるかもしれません。

Active: boolean;

実行時のみ使えます(public)。読み出すことでポートが開かれている かどうか調べられます。書き込むと必要に応じてOpen/Closeメソッド が呼び出されます。

メソッド

procedure Open;

ポートを開きます。現在の実装では、失敗しても標準エラー出力に エラーメッセージを出すだけでそのまま戻ってきます。 最終的には例外を投げるようにする予定。

procedure Close;

ポートを閉じます。ポートの設定をもとに戻そうとします。 失敗してもなにも起こりません。

function Read(var buff; size: Integer): Integer;

buffに最大長さsizeのデータを読み出します。単にread(2)を 呼んでいるだけなので、sizeの指定によってはブロックする かもしれません。ブロックさせないためには、OnReceiveイベント ハンドラ内で通知された長さだけを読み出します。

procedure ReadStr(var buff: string);

文字列としてデータを読み出します。内部でバッファ中のデータ長 をチェックするのでブロックしません(たぶん)。常に、「読めるだけ」 のデータを文字列として返します。

function Write(const buff; size: Integer);

buffのデータをsizeだけ書き込み(出力)します。単にwrite(2)を 呼んでいるだけなので、大量のデータを渡すとブロックするかも しれません。戻り値は単にwrite(2)の返り値なので書き込まれた 長さのはずです。今後、書き込めなかったら自前のバッファを 確保するようにしたいと思います。

procedure WriteStr(const buff: string);

文字列変数buffのデータを書き込みます。上のWriteメソッドの ラッパーで、Length(buff)を自動的に呼ぶだけです。こちらでは write(2)の返り値は無視します。

イベント

OnReceive: THmRxEvent = procedure(Sender: THmComm; nchars: Integer) of object;

シリアルポートからデータが入力され、Readで取り出せるときに 発生します。ncharsをsizeとしてReadメソッドを呼び出せば Readはブロックしません。

制限

サンプル

testディレクトリ下のTestCommプロジェクトは簡単なシリアルターミナルです。 実行して[open]ボタンを押すとポートを開き、入力を下側のMemoコンポーネントに 表示します。Memoコンポーネントへのキー入力はそのまま送信されます。

ライセンス条件

最終的にはLGPLとします。現在のところ、必要なファイルやcopyright表記は ありませんが(まだテストコードのみなので)、そのように扱っていただけると ありがたいです。


: Top page
Ayumu ENOMOTO / a-enomoto@hi-ho.ne.jp 平成13年7月4日