2

Insteon自動化ハードウェアとインターフェイスするクロスプラットフォームアプリケーションをまとめようとしています。私が見つけた.Netベースの例では、System.IO.Ports.SerialPortクラスを使用して、RS-232シリアルポートベースのデバイスとUSBシリアルモデムの両方からデータを読み取ります。Windowsプラットフォームでは、シリアルモデムは通常仮想COMポートにマップされ、リストを実行して新しいCOMアドレスを渡し、USBまたはシリアルデバイスがどちらに接続されているかを把握することは難しくありません。

残念ながら、Macでは、私は完全に自分の要素から外れています。MonoMacを使用すると、より快適な言語でプログラミングできますが、ハードウェアと話すのと同じくらい低レベルのものは、私の手の届かないところにあります。私の初期化コードは次のとおりです。

    private void OpenSerialConnection(string comPort)
    {
        _serialPort = new System.IO.Ports.SerialPort("/dev/ttys1", 19200, System.IO.Ports.Parity.None, 8, System.IO.Ports.StopBits.One);
        _serialPort.Encoding = System.Text.Encoding.Default;
        _serialPort.WriteTimeout = 1000;
        _serialPort.DataReceived += OnDataReceived;
        _serialPort.Open();
    }

「comPort」変数が入る場所の代わりにある「/dev/ ttsy1」値は、アドレスが/ dev /ttys*の形式である可能性があることを示唆するいくつかの例の一部です。いくつか検索したところ、USBデバイスが「/dev/tty.usbserial*」として登録される可能性が高いことがわかりましたが、この値が何であるかを検出する場合、指示するのではなく、Monoで活用できるよりエレガントな方法があるかどうか疑問に思いますユーザーがターミナルに移動して「ls/dev / tty。*」と入力し、自分で入力しますか?

4

1 に答える 1

0

Mac で Mono を使用した個人的な経験はありませんが、Mono プロジェクトに Objective-C クラスを含めて使用することは可能だと思います。その場合は、ORSSerialPortを見てください。ORSSerialPortManager の-availablePortsメソッドは、システムで利用可能なすべてのシリアル ポートの配列を提供します。また、ポートが追加/削除されたときに通知を受け取るようにサインアップすることもできます。また、ライブラリを使用すると、ポートを開いたり、構成したり、データを送受信したりすることも簡単になります。

このようなものがなければ、IOKit を使用してシステム上のポートを検出し、POSIX API を使用してシリアル ポートを開き、構成し、読み取り、書き込みを行う必要があります。IOKit と POSIX シリアル ポート API は、低 (っぽい) レベルの C API です。

于 2012-11-26T17:39:43.937 に答える