add some error checking, get a new handle if the old one is invalid
This commit is contained in:
parent
f91090a7b0
commit
e48ce2f9cf
1 changed files with 16 additions and 2 deletions
|
@ -54,6 +54,20 @@ namespace CollabVMAgent
|
|||
if (readCancel.IsCancellationRequested) return;
|
||||
Thread.Sleep(READ_INTERVAL);
|
||||
ReadFile(viohnd, sizebuf, 4, out read, IntPtr.Zero);
|
||||
var err = Marshal.GetLastWin32Error();
|
||||
if (err != 0)
|
||||
{
|
||||
#if DEBUG
|
||||
Console.WriteLine($"Got error {err} while trying to read from serial port");
|
||||
#endif
|
||||
switch (err)
|
||||
{
|
||||
case 6:
|
||||
CloseHandle(viohnd);
|
||||
viohnd = CreateFile(DevicePath, FileAccess.ReadWrite, 0, IntPtr.Zero, FileMode.Open, FileAttributes.Normal, IntPtr.Zero);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
uint size = BitConverter.ToUInt32(sizebuf, 0);
|
||||
#if DEBUG
|
||||
|
@ -131,7 +145,7 @@ namespace CollabVMAgent
|
|||
|
||||
}
|
||||
|
||||
[DllImport("setupapi.dll", CharSet = CharSet.Auto)]
|
||||
[DllImport("setupapi.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||||
static extern IntPtr SetupDiGetClassDevs(
|
||||
ref Guid ClassGuid,
|
||||
IntPtr Enumerator,
|
||||
|
@ -174,7 +188,7 @@ namespace CollabVMAgent
|
|||
[DllImport("kernel32.dll", SetLastError = true)]
|
||||
static extern bool ReadFile(IntPtr hFile, [Out] byte[] lpBuffer, uint nNumberOfBytesToRead, out uint lpNumberOfBytesRead, IntPtr lpOverlapped);
|
||||
|
||||
[DllImport("kernel32.dll")]
|
||||
[DllImport("kernel32.dll", SetLastError = true)]
|
||||
static extern bool WriteFile(IntPtr hFile, byte[] lpBuffer, uint nNumberOfBytesToWrite, out uint lpNumberOfBytesWritten, IntPtr lpOverlapped);
|
||||
|
||||
[DllImport("kernel32.dll", SetLastError = true)]
|
||||
|
|
Loading…
Reference in a new issue