Skip to content

Commit 857ab1b

Browse files
committed
Improve CH340 diagnostic
1 parent 855a17c commit 857ab1b

File tree

1 file changed

+16
-6
lines changed

1 file changed

+16
-6
lines changed

LaserGRBL/Core/GrblCore.cs

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -398,20 +398,28 @@ public static void GetCH340Version(Object stateInfo)
398398
{
399399
try
400400
{
401-
System.Management.ManagementObjectSearcher objSearcher = new System.Management.ManagementObjectSearcher("SELECT * FROM Win32_PnPSignedDriver WHERE DeviceName LIKE '%CH340%' OR Manufacturer LIKE '%wch.cn%'");
401+
System.Management.ManagementObjectSearcher objSearcher = new System.Management.ManagementObjectSearcher("SELECT * FROM Win32_PnPSignedDriver WHERE Description LIKE '%CH340%' OR Caption LIKE '%CH340%' OR DriverProviderName LIKE '%wch.cn%' OR Manufacturer LIKE '%wch.cn%'");
402402

403403
System.Management.ManagementObjectCollection objCollection = objSearcher.Get();
404404

405405
foreach (System.Management.ManagementObject obj in objCollection)
406406
{
407407
try
408408
{
409-
if (obj["DeviceName"].ToString().ToLower().Contains("ch340") || obj["Manufacturer"].ToString().ToLower().Contains("wch.cn"))
409+
string devname = obj["Caption"] as string;
410+
if (string.IsNullOrWhiteSpace(devname)) devname = obj["Description"] as string;
411+
412+
string manu = obj["Manufacturer"] as string;
413+
if (string.IsNullOrWhiteSpace(manu)) manu = obj["DriverProviderName"] as string;
414+
415+
if ((devname != null && devname.ToLower().Contains("ch340")) || (manu != null && manu.ToLower().Contains("wch.cn")))
410416
{
411417
string date = obj["DriverDate"] as string;
412418
if (date != null && date.Length >= 8) date = date.Substring(0, 8);
413419

414-
CH340Version = String.Format("Device='{0}' Manufacturer='{1}' Version='{2}' Date='{3}'", obj["DeviceName"], obj["Manufacturer"], obj["DriverVersion"], date);
420+
string version = obj["DriverVersion"] as string;
421+
422+
CH340Version = String.Format("Device='{0}' Manufacturer='{1}' Version='{2}' Date='{3}'", devname, manu, version, date);
415423
break;
416424
}
417425
}
@@ -2809,12 +2817,14 @@ private string WaitComLineOrDisconnect()
28092817
}
28102818
catch (System.IO.IOException ex)
28112819
{
2812-
if (!FixCH340)
2820+
FixCH340_exception++;
2821+
2822+
if (!FixCH340 && FixCH340_exception > 5)
28132823
{
28142824
FixCH340 = true; //self fix for CH340, use HasIncomingData to check if there is data, this reduce the number of exceptions
2815-
Logger.LogMessage("FixCH340", $"Detected CH340 driver issue {CH340Version}");
2825+
Logger.LogMessage("FixCH340", $"Detected CH340 driver: {CH340Version}");
28162826
}
2817-
FixCH340_exception++;
2827+
28182828
if (FixCH340_exception % 10 == 0) System.Threading.Thread.Sleep(1);
28192829
}
28202830
catch

0 commit comments

Comments
 (0)