2011-12-19 24 views
6

Estoy buscando una manera de determinar si un COM es un COM estándar o si es un SPP COM, también conocido como un adaptador bluetooth de reemplazo de cable para un dispositivo COM.Determine si el puerto serie es COM o SPP normal

Tengo un dispositivo que funciona tanto en USB (COM -> USB) como en Bluetooth, y la interfaz Bluetooth funciona con SPP.

Actualmente estoy usando System.IO.Ports.SerialPort.GetPortNames() para obtener los COM.

¿Hay alguna manera de determinar si está conectado o no con Bluetooth o USB?

SOLUCIÓN:

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())); 
    } 
} 

Y la salida es algo similar:

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 
+0

Ver mis respuestas a http://stackoverflow.com/questions/2085179/ cómo-puedo-descubrir-un-puerto-número-de-un-dispositivo-bluetooth en-c/2096728 # 2096728 y http://stackoverflow.com/questions/6850965/how-come- getdefaultcommconfig-doesnt-work-with-bluetooth-spp-devices/6997320 # 6997320 – alanjmcf

Respuesta

6

usted no puede encontrar esta información a través de la clase SerialPort. Debería hacer una consulta WMI.

Hacer algo a lo largo de las líneas de esto puede conducir a que

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

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

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

} 

no tengo el código cargado, así que no sé qué otras propiedades que se pueden obtener. Sin embargo, si hubiera, WMI sería la forma de hacerlo.

+0

¡Perfecto! Publicaré el código que utilicé y el resultado si alguien más lo necesita. – jValdron

+0

Genial para ver que funciona. –

0

veo lo que buscas en un dispositivo Bluetooth conectado:

Consulta la Win32_PnPSignedDriver y mirar a la propiedad InfName. El valor debe ser bthspp.inf

No puedo decir con certeza que el archivo inf SIEMPRE será este nombre para el dispositivo bluetooth de cada proveedor que admita el protocolo SPP, pero este es el valor predeterminado.

Clase GUID de COM & puertos LPT es: {4d36e978-E325-11CE-BFC1-08002BE10318} Ref: 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%' 
      ); 
Cuestiones relacionadas