Come ottengo il & # 8220; amichevole & # 8221; nome della porta seriale in Mono e mantenerla multipiattaforma

StackOverflow https://stackoverflow.com/questions/438029

Domanda

Ho posto questa domanda:
Porta seriale (rs232) in Mono per piattaforme multiple

e questo è correlato:
Come posso ottenere l'amichevole nome di una porta COM in Windows?

Ma voglio essere in grado di ottenere il " amichevole " nome su Windows- e possibilmente anche su Linux / Mac se esiste una cosa del genere.

Esiste un modo multipiattaforma per farlo o sono sfortunato?

Ecco cosa sto facendo nella mia app attuale - e funziona benissimo con Win32 nativo C ++.

http://www.naughter.com/enumser.html

In ogni caso non sembra una bella soluzione per la distribuzione multipiattaforma. Qualcuno ha qualche suggerimento?

MODIFICA - poiché le persone hanno difficoltà a capire cosa sto chiedendo: come esempio - COM9 non è un nome descrittivo. Voglio qualcosa che dice "COM9 - ??Connettore USB" o qualcosa di simile. Questo è possibile con il link sopra in Win32. È brutto e confuso, ma molte volte gli utenti finali non hanno idea di quale porta COM debbano aprire nel mio programma a meno che non ci sia un nome utile - più utile di " COMn. & Quot;

È stato utile?

Soluzione

AFAIK non c'è "amichevole" nome per i dispositivi COMM in linux. Quello che ti suggerisco di fare è usare / dev / ttyS # come nome del tuo dispositivo in un ambiente Linux ed elencarli come COMM # in Windows.

Gli utenti di Linux capiranno la terminologia quindi non dovrebbero esserci preoccupazioni.

Altri suggerimenti

Prendi in considerazione l'idea del metodo statico SerialPort.GetPortNames () . È disponibile in .NET 2.0 e sembra implementato anche in Mono. Secondo http://www.go-mono.com/docs/> pagina dei documenti mono, GetPortNames esiste sull'oggetto porta seriale Mono, quindi darei una possibilità.

Se implementato, dovrebbe restituirti un array di stringhe C # contenente i nomi delle porte disponibili sul tuo computer. Questi dovrebbero avere senso per qualsiasi sistema operativo sottostante hai. Ad esempio, in Windows restituirà COM1, COM2, COM4 e così via. Dovrebbe restituire la stringa necessaria per la proprietà PortName .

Aggiornamento:

Dai un'occhiata a un post di la mailing list mono-dev sembra funzionare in ambienti * nix.

Prova la seguente query in WMI:

" Seleziona il nome da Win32_PnPEntity " e cercare oggetti che contengano " COM " ;, ad esempio, ho un dispositivo USB-Serial Converter installato sul mio computer:

Convertitore USB-seriale USB60FPW (COM6)

Devi cercare di fare WMI. Non sono stato in grado di eseguirlo da solo, ma se combini questo framework di base di come recuperare un oggetto WMI con questo documentazione della classe Win32_SerialPort , penso che tu possa risolvere qualcosa.

Fondamentalmente, vuoi ottenere una raccolta di tutti i Win32_SerialPort sul sistema, quindi scorrere attraverso di essi. Potresti desiderare la "Didascalia", o "Descrizione", o forse solo "Nome". Il mio miglior consiglio è semplicemente impostare un breakpoint e controllare le proprietà dell'oggetto in modalità debug in modo da poter capire esattamente cosa viene popolato.

Codice:

    public static ArrayList GetComFriendlyNames()
    {
        ArrayList names = new ArrayList();
        try
        {
            ManagementObjectSearcher searcher =
              new ManagementObjectSearcher("root\\WMI",
              "SELECT InstanceName, PortName FROM MSSerial_PortName");

            foreach (ManagementObject port in searcher.Get())
            {
                names.Add(port["PortName"] + " - " + port["InstanceName"]);
            }
        }
        catch (ManagementException)
        {
        }
        return names;
    }

utilizzo:

        ArrayList ports = GetComFriendlyNames();
        foreach (string name in ports)
        {
            Console.WriteLine(name);
        }

esempio di output:

COM1 - ACPI \ PNP0501 \ 1_0

COM2 - ACPI \ PNP0501 \ 2_0

COM3 - FTDIBUSVID_0000 + PID_0000 + 0 & amp; 0000000 & amp; 0 & amp; 0? 000_0

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top