Определите, является ли последовательный порт нормальным COM или SPP - PullRequest
7 голосов
/ 19 декабря 2011

Я ищу способ определить, является ли COM стандартным COM или SPP COM, также известным как Bluetooth-адаптер для замены кабеля для COM-устройства.

У меня есть устройство, которое работает как через USB (COM -> USB), так и через Bluetooth, а интерфейс Bluetooth работает с SPP.

В настоящее время я использую System.IO.Ports.SerialPort.GetPortNames() для получения COM.

Есть ли способ определить, связано ли это с Bluetooth или USB?

РЕШЕНИЕ:

System.Management.ManagementObjectSearcher Searcher = new System.Management.ManagementObjectSearcher("Select * from WIN32_SerialPort");
foreach (System.Management.ManagementObject Port in Searcher.Get())
{
    foreach (System.Management.PropertyData Property in Port.Properties)
    {
        Console.WriteLine(Property.Name + " " + (Property.Value == null ? null : Property.Value.ToString()));
    }
}

А на выходе что-то похожее:

Availability 2
Binary True
Capabilities 
CapabilityDescriptions 
Caption Standard Serial over Bluetooth link (COM10)
ConfigManagerErrorCode 0
ConfigManagerUserConfig False
CreationClassName Win32_SerialPort
Description Standard Serial over Bluetooth link
DeviceID COM10
ErrorCleared 
ErrorDescription 
InstallDate 
LastErrorCode 
MaxBaudRate 9600
MaximumInputBufferSize 0
MaximumOutputBufferSize 0
MaxNumberControlled 
Name Standard Serial over Bluetooth link (COM10)
OSAutoDiscovered True
PNPDeviceID BTHENUM\{00001101-0000-1000-8000-00805F9B34FB}_LOCALMFG&0000\8&3062A492&0&000000000000_0000001C
PowerManagementCapabilities System.UInt16[]
PowerManagementSupported False
ProtocolSupported 
ProviderType RS232 Serial Port
SettableBaudRate True
SettableDataBits True
SettableFlowControl True
SettableParity True
SettableParityCheck False
SettableRLSD True
SettableStopBits True
Status OK
StatusInfo 3
Supports16BitMode False
SupportsDTRDSR True
SupportsElapsedTimeouts True
SupportsIntTimeouts True
SupportsParityCheck False
SupportsRLSD True
SupportsRTSCTS True
SupportsSpecialCharacters False
SupportsXOnXOff False
SupportsXOnXOffSet False
SystemCreationClassName Win32_ComputerSystem
SystemName JVALDRON-PC
TimeOfLastReset 

Ответы [ 2 ]

7 голосов
/ 19 декабря 2011

Вы не можете найти эту информацию через класс SerialPort.Вам нужно будет выполнить запрос WMI.

Выполнение чего-либо подобного этому может привести вас к этому

ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * 
                                      from WIN32_SerialPort");

foreach(ManagementObject Port in searcher.Get()) {

       string a = (string) Port.GetPropertyValue("Name");

}

У меня не загружен этот код, поэтому я не знаюкакие дополнительные свойства вы можете получить.Однако, если так или иначе было, WMI был бы способ сделать это.

0 голосов
/ 15 июня 2017

Я вижу, что вы смотрите на устройство, подключенное по Bluetooth:

Запросите Win32_PnPSignedDriver и посмотрите на свойство InfName. Значение должно быть bthspp.inf

Я не могу с уверенностью сказать, что файл inf ВСЕГДА будет таким именем для устройства Bluetooth каждого поставщика, поддерживающего протокол SPP, но это значение по умолчанию.

Класс GUID для портов COM и LPT: {4d36e978-e325-11ce-bfc1-08002be10318} Ссылка: https://msdn.microsoft.com/en-us/library/windows/hardware/ff553426

ManagementObjectSearcher Searcher = new ManagementObjectSearcher( computer + @"root\cimv2", 
              "SELECT * FROM Win32_PnPSignedDriver " 
            + "WHERE    ClassGuid = '{4d36e978-e325-11ce-bfc1-08002be10318}' " 
            +       AND DeviceID LIKE 'BTHENUM%' 
            );
...