2012-11-21 1 views
2

J'essaie de mettre en place une application multiplateforme qui s'interface avec le matériel d'automatisation Insteon. Dans les exemples basés sur .Net que j'ai trouvés, la classe System.IO.Ports.SerialPort est utilisée pour lire les données d'un périphérique basé sur un port série RS-232 et d'un modem série USB. Sur une plate-forme Windows, les modems série sont généralement mappés sur un port COM virtuel et il n'est pas difficile d'exécuter une liste, de transmettre de nouvelles adresses COM et de déterminer à quel périphérique USB ou série est attaché. Malheureusement sur le Mac, je suis totalement hors de mon élément. MonoMac me permet de programmer dans un langage plus confortable, mais quelque chose d'aussi bas que de parler au matériel est un peu hors de ma portée. Mon code d'initialisation est comme suit:Corriger les valeurs PortName pour System.IO.Ports.SerialPort pour 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(); 
    } 

La valeur «/dev/ttsy1 » qui est en place où la variable « comportons » irait fait partie de quelques exemples que je trouvais que suggèrent l'adresse peut-être dans la sous la forme/dev/ttys *. Après quelques recherches, j'ai découvert qu'un périphérique usb s'inscrirait probablement sous le nom "/dev/tty.usbserial*", mais je me demande s'il y a une manière plus élégante de détecter cette valeur que je peux exploiter dans Mono plutôt que d'instruire un utilisateur à entrer dans Terminal et tapez "ls/dev/tty.*" et le taper eux-mêmes?

Répondre

0

Je n'ai aucune expérience personnelle avec Mono sur Mac, mais je pense qu'il est possible d'inclure et d'utiliser des classes Objective-C dans vos projets Mono. En supposant que c'est le cas, jetez un oeil à ORSSerialPort. La méthode -availablePorts d'ORSSerialPortManager vous donnera un tableau de tous les ports série disponibles sur le système. Vous pouvez également vous inscrire pour recevoir des notifications lorsque des ports sont ajoutés/supprimés, et la bibliothèque facilite également l'ouverture d'un port, la configuration et l'envoi et la réception de données. Sans cela, vous devez utiliser IOKit pour découvrir les ports du système et les API POSIX pour l'ouverture, la configuration, la lecture et l'écriture sur les ports série. IOKit et les API de port série POSIX sont des API C de niveau faible (ish).

Questions connexes