2012-11-21 1 views
2

Я пытаюсь собрать межплатформенное приложение, которое взаимодействует с оборудованием автоматизации Insteon. В примерах на основе .NET, которые я нашел, класс System.IO.Ports.SerialPort используется для чтения данных как с устройства на базе последовательного порта RS-232, так и с USB-последовательного модема. На платформе Windows серийные модемы обычно сопоставляются с виртуальным COM-портом, и не сложно запускать список, передавать новые COM-адреса и пытаться выяснить, к какому подключен USB или Serial.Правильное значение PortName для System.IO.Ports.SerialPort для MonoMac?

К сожалению, на 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(); 
    } 

«/ ttsy1/DEV» значение, которое находится в месте, где «ComPort» переменная будет идти является частью некоторых примеров, которые я обнаружил, что предлагают адрес может быть в форма/dev/ttys *. После некоторого поиска я обнаружил, что устройство usb, скорее всего, будет зарегистрировано как «/dev/tty.usbserial», но мне интересно, есть ли более элегантный способ, если обнаруживать, что это значение, что я могу использовать в Mono, а не инструктировать пользователю перейти в терминал и ввести «ls /dev/tty.*» и ввести его сами?

ответ

0

У меня нет личного опыта работы с Mono на Mac, но я думаю, что в ваши проекты Mono можно включить и использовать классы Objective-C. Предположим, что это так, посмотрите на ORSSerialPort. Метод ORSSerialPortManager -availablePorts даст вам массив всех последовательных портов, доступных в системе. Вы также можете подписаться на получение уведомлений, когда порты добавляются/удаляются, а библиотека также позволяет легко открывать порт, настраивать его и отправлять и получать данные.

Без такого использования вы должны использовать IOKit для обнаружения портов в системе и API-интерфейсов POSIX для открытия, настройки, чтения и записи на последовательные порты. IOKit и API-интерфейсы последовательного порта POSIX являются низкими (ish) уровнями API C.