diff --git a/EpdBase/EpdBase.cpp b/EpdBase/EpdBase.cpp index 87fe2e9..871cb5c 100644 --- a/EpdBase/EpdBase.cpp +++ b/EpdBase/EpdBase.cpp @@ -1,7 +1,8 @@ #include "stdafx.h" #include "EpdBase.h" -#define DiscoveryExpirationPeriod 1000 +#define DiscoveryTimeslotPeriod 200 +#define DiscoveryExpirationPeriod 5000 EpdBase::Epd2U::Epd2U(int comport) { @@ -19,7 +20,7 @@ DWORD EpdBase::Epd2U::StartCom() if (InitRv == 0) Error = GetErrorDetails(&ErrorSource, &ErrorReason, &ErrorData); else { CommsInitialized = 1; - SetDiscoveryExpirationPeriod(port, DiscoveryExpirationPeriod); + //SetDiscoveryExpirationPeriod(port, DiscoveryExpirationPeriod); } return Error; } @@ -27,33 +28,28 @@ DWORD EpdBase::Epd2U::StartCom() EpdBase::Epd2U::~Epd2U() { DeinitComms(port); - } int EpdBase::Epd2U::StartDiscover() { + System::Diagnostics::Trace::WriteLine("StartDiscover"); + FlushBuffers(port); + FlushDiscoveryCache(port); Error = 0; - Sleep(200); - DiscRV= Discover(port, DeviceIDs, MaxDevices, &DeviceCount); - Commit(); - if (DiscRV == 1 && DeviceCount == 0) + SetDiscoveryTimeslotCount(port, 2); + SetDiscoveryTimeslotPeriod(port, DiscoveryTimeslotPeriod); + SetDiscoveryExpirationPeriod(port, DiscoveryExpirationPeriod); + int tries = 25; DeviceCount = 0; + while (tries-- > 0 && DeviceCount == 0) { - DeinitComms(port); - FlushDiscoveryCache(port); - Sleep(200); - InitRv = InitComms(port, 9600, 8, 0, 0); - if (InitRv == 1) { - CommsInitialized = 1; - SetDiscoveryExpirationPeriod(port, DiscoveryExpirationPeriod); - DiscRV = Discover(port, DeviceIDs, MaxDevices, &DeviceCount); - Commit(); - } - else - { - Error = GetErrorDetails(&ErrorSource, &ErrorReason, &ErrorData); - } - } + DiscRV = Discover(port, DeviceIDs, MaxDevices, &DeviceCount); + System::Diagnostics::Trace::WriteLine(System::String::Format("Discover try: {0} RV={1}", tries, DiscRV)); + } + if (DiscRV != 1) { + Error = GetErrorDetails(&ErrorSource, &ErrorReason, &ErrorData); + System::Diagnostics::Trace::WriteLine(System::String::Format("StartDiscover Error Connect1: {0}", ErrorReason)); + } return DiscRV; } diff --git a/EpdBaseClr/EpdBaseClr.cpp b/EpdBaseClr/EpdBaseClr.cpp index e2197de..ed5b24d 100644 --- a/EpdBaseClr/EpdBaseClr.cpp +++ b/EpdBaseClr/EpdBaseClr.cpp @@ -23,7 +23,6 @@ EpdBaseClr::Epd2::!Epd2() int EpdBaseClr::Epd2::Connect() { - ConnectError = 0; epd->StartCom(); b->CurrentDeviceID = 0; diff --git a/eDosStation/EpdExit.xaml.cs b/eDosStation/EpdExit.xaml.cs index ba85403..f4d75ce 100644 --- a/eDosStation/EpdExit.xaml.cs +++ b/eDosStation/EpdExit.xaml.cs @@ -179,7 +179,7 @@ namespace eDosStation //ep = new EpdBaseClr.Epd2(thisStation.ComPort); int rv = ep.Connect(); System.Diagnostics.Debug.WriteLine($"Connect {rv} error {ep.ConnectError}"); - if (ep.DeviceCount == 1) + if (ep.DeviceCount >0 && ep.b.CurrentDeviceID>0) { EpdFound = true; statusEPD.Content = $"StartScan : EPD: {ep.b.CurrentDeviceID}"; @@ -207,8 +207,8 @@ namespace eDosStation { dispatcherTimer.Stop(); EpdFound = false; - ep.Connect(); - if (ep.DeviceCount == 1 ) + int rv = ep.Connect(); + if (rv==1 && ep.DeviceCount > 0 && ep.b.CurrentDeviceID>0) { EpdFound = true; statusEPD.Content = $"EPD: {ep.b.CurrentDeviceID}";