Ejemplo para reconocimiento de puertos COM
private static async Task TryAutoDetectPort()
{
bool found = false;
string iniPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "WSSPOSINT.INI");
IniFile myconfinifile = new IniFile(iniPath, true);
List<PuertoCOMInfo> todosLosPuertos = PuertoCOMDetector.ObtenerTodosLosPuertos();
foreach (PuertoCOMInfo puerto in todosLosPuertos)
{
WriteLog($"Testing {puerto.NombrePuerto}: {puerto.Descripcion}");
myconfinifile.WriteString("CommLib", "port", puerto.NombrePuerto);
if (await CheckPort())
{
found = true;
WriteLog($"Detected Port {puerto.NombrePuerto}");
_isPosConnected = true;
break;
}
}
if (!found)
{
WriteLog($"Error. Port was not found");
}
}
public static List<PuertoCOMInfo> ObtenerTodosLosPuertos()
{
Dictionary<string, PuertoCOMInfo> puertosUnicos = new Dictionary<string, PuertoCOMInfo>();
//Método 1: SerialPort.GetPortNames
string[] puertosSimples = SerialPort.GetPortNames();
foreach (string portName in puertosSimples)
{
if (!puertosUnicos.ContainsKey(portName))
{
puertosUnicos[portName] = new PuertoCOMInfo
{
NombrePuerto = portName,
Descripcion = "Puerto serial",
Fabricante = "Desconocido"
};
}
}
// Ordenar resultado
return puertosUnicos.Values
.OrderBy(p => ExtraerNumeroCOM(p.NombrePuerto))
.ToList();
}
private static async Task<bool> CheckPort()
{
try
{
Dictionary<string, object> conntestMessage = new Dictionary<string, object>
{
{ "transactionType", "CONNTEST" },
};
JavaScriptSerializer serializer = new JavaScriptSerializer();
string message = serializer.Serialize(conntestMessage);
string response = await ProcessMessageWithTimeoutAsync(message, 5);
WriteLog($"CheckPort: {response}");
JavaScriptSerializer deserializer = new JavaScriptSerializer();
Dictionary<string, object> data = deserializer.Deserialize<Dictionary<string, object>>(response);
string responseCode = data["responseCode"]?.ToString();
return responseCode == "0";
}
catch (Exception)
{
return false;
}
}Updated 10 days ago
