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です。
シリアルポートのデバイスファイルを指定します。デフォルト値は /dev/ttyS0です。例えば、/dev/ttyUSB0にするとUSBシリアルアダプタ で通信ができるかもしれません。
実行時のみ使えます(public)。読み出すことでポートが開かれている かどうか調べられます。書き込むと必要に応じてOpen/Closeメソッド が呼び出されます。
ポートを開きます。現在の実装では、失敗しても標準エラー出力に エラーメッセージを出すだけでそのまま戻ってきます。 最終的には例外を投げるようにする予定。
ポートを閉じます。ポートの設定をもとに戻そうとします。 失敗してもなにも起こりません。
buffに最大長さsizeのデータを読み出します。単にread(2)を 呼んでいるだけなので、sizeの指定によってはブロックする かもしれません。ブロックさせないためには、OnReceiveイベント ハンドラ内で通知された長さだけを読み出します。
文字列としてデータを読み出します。内部でバッファ中のデータ長 をチェックするのでブロックしません(たぶん)。常に、「読めるだけ」 のデータを文字列として返します。
buffのデータをsizeだけ書き込み(出力)します。単にwrite(2)を 呼んでいるだけなので、大量のデータを渡すとブロックするかも しれません。戻り値は単にwrite(2)の返り値なので書き込まれた 長さのはずです。今後、書き込めなかったら自前のバッファを 確保するようにしたいと思います。
文字列変数buffのデータを書き込みます。上のWriteメソッドの ラッパーで、Length(buff)を自動的に呼ぶだけです。こちらでは write(2)の返り値は無視します。
シリアルポートからデータが入力され、Readで取り出せるときに 発生します。ncharsをsizeとしてReadメソッドを呼び出せば Readはブロックしません。
testディレクトリ下のTestCommプロジェクトは簡単なシリアルターミナルです。 実行して[open]ボタンを押すとポートを開き、入力を下側のMemoコンポーネントに 表示します。Memoコンポーネントへのキー入力はそのまま送信されます。
最終的にはLGPLとします。現在のところ、必要なファイルやcopyright表記は ありませんが(まだテストコードのみなので)、そのように扱っていただけると ありがたいです。