with callback

This commit is contained in:
luc 2026-10-29 10:53:53 +01:00
parent 424ac5a6b2
commit 54235996ea
15 changed files with 297 additions and 252 deletions

View file

@ -20,19 +20,6 @@
#ifdef _DEBUG
#define DebugWrite_IsActive() true
#else
#define DebugWrite_IsActive() (g_EnableReleaseLogging)
#endif
#define DebugWrite(f, ...) \
do { \
if (DebugWrite_IsActive()) { \
auto _msg = std::format(f, ##__VA_ARGS__); \
OutputDebugStringA(_msg.c_str()); \
} \
} while (0)
@ -66,6 +53,7 @@ void Epd3Base::Epd3U::ResetStepReturnValues()
HasStepError = 0;
for (int i = MaxSteps - 1; i >= 0; --i) {
StepReturnValues[i][static_cast<size_t>(EpdStepColumns::function)] = 0;
StepReturnValues[i][static_cast<size_t>(EpdStepColumns::retry)] = 0;
StepReturnValues[i][static_cast<size_t>(EpdStepColumns::commitRV)] = -998;
StepReturnValues[i][static_cast<size_t>(EpdStepColumns::endRV)] = -1;
StepReturnValues[i][static_cast<size_t>(EpdStepColumns::canIgnorore)] = 0;
@ -84,6 +72,7 @@ int Epd3Base::Epd3U::SetFunctionReturnValue(enum eFunctions f, BYTE CanIgnore, i
++CurrentStep;
if (CurrentStep == 0) HasStepError = 0;
StepReturnValues[CurrentStep][static_cast<size_t>(EpdStepColumns::function)] = f;
StepReturnValues[CurrentStep][static_cast<size_t>(EpdStepColumns::retry)] = retry;
StepReturnValues[CurrentStep][static_cast<size_t>(EpdStepColumns::commitRV)] = -998;
StepReturnValues[CurrentStep][static_cast<size_t>(EpdStepColumns::endRV)] = -1;
StepReturnValues[CurrentStep][static_cast<size_t>(EpdStepColumns::canIgnorore)] = CanIgnore;
@ -125,11 +114,7 @@ uint32_t Epd3Base::Epd3U::SetEndReturnValue(int step, int32_t rv)
auto endTime = std::chrono::steady_clock::now();
auto duration = std::chrono::duration_cast<std::chrono::duration<int32_t, std::milli>>(endTime - sessionStart);
StepReturnValues[step][static_cast<size_t>(EpdStepColumns::endMS)] = duration.count();
//CommitRV = -998 if not set.
/*if (StepReturnValues[step][static_cast<size_t>(EpdStepColumns::commitMS)] <= 0) {
StepReturnValues[step][static_cast<size_t>(EpdStepColumns::commitRV)] = 0;
StepReturnValues[step][static_cast<size_t>(EpdStepColumns::commitMS)] = duration.count();
}*/
if (rv != 0) {
HasStepError = 1;
if (StepReturnValues[step][static_cast<size_t>(EpdStepColumns::canIgnorore)]) rv = 0; //if canIgnore set this return rv ok
@ -153,23 +138,23 @@ int32_t Epd3Base::Epd3U::CommitAndSetRV()
return r;
}
int32_t Epd3Base::Epd3U::CommitAndSetRV(int idx[], int len)
{
int32_t r = Commit3(epdComsHandle);
for(int i = 0; i < len ;++i)
SetCommitReturnValue(idx[i],r);
return r;
}
//int32_t Epd3Base::Epd3U::CommitAndSetRV(int idx[], int len)
//{
// int32_t r = Commit3(epdComsHandle);
// for(int i = 0; i < len ;++i)
// SetCommitReturnValue(idx[i],r);
// return r;
//}
int32_t Epd3Base::Epd3U::CommitAndEnd2RV(int32_t (WINAPI *endFunction2)(CommsHandle hComms, CompletionToken token), CompletionToken token, int waitTime)
{
int32_t r = Commit3(epdComsHandle);
SetCommitReturnValue(r);
if (waitTime) Sleep(waitTime);
if (!r) r = (*endFunction2)(epdComsHandle, token);
r= SetEndReturnValue(r);
return r;
}
//int32_t Epd3Base::Epd3U::CommitAndEnd2RV(int32_t (WINAPI *endFunction2)(CommsHandle hComms, CompletionToken token), CompletionToken token, int waitTime)
//{
// int32_t r = Commit3(epdComsHandle);
// SetCommitReturnValue(r);
// if (waitTime) Sleep(waitTime);
// if (!r) r = (*endFunction2)(epdComsHandle, token);
// r= SetEndReturnValue(r);
// return r;
//}
int32_t Epd3Base::Epd3U::End2RV(int step, int32_t(WINAPI* endFunction2)(CommsHandle hComms, CompletionToken token), CompletionToken token)
{
@ -180,6 +165,7 @@ int32_t Epd3Base::Epd3U::End2RV(int step, int32_t(WINAPI* endFunction2)(CommsHan
void WINAPI completion(CommsHandle hComms, CompletionToken token)
{
SetEvent(current->hCompletion);
}
@ -306,7 +292,8 @@ Epd3Base::Epd3U::Epd3U(int _comport)
if (hCompletion == 0) hCompletion = CreateEvent(NULL, TRUE, FALSE, NULL);
if (hCancel == 0) hCancel = CreateEvent(NULL, TRUE, FALSE, NULL);
s_pInstance = this;
m_activeToken = nullptr;
}
Epd3Base::Epd3U::~Epd3U()
@ -393,9 +380,14 @@ DWORD Epd3Base::Epd3U::StartCom()
Dll3RV = SetConnectCallback(epdComsHandle, connectcallback);
Dll3RV = SetDisconnectCallback(epdComsHandle, disconnectcallback);
Dll3RV = SetMultipleDiscoveryMode(epdComsHandle, false);
Dll3RV= SetDiscoveryTimeslots(epdComsHandle, 1);
Dll3RV = SetResponseTimeout(epdComsHandle, ResponseTimeout); //initial
Dll3RV = SetDiscoveryCacheTimeout(epdComsHandle, DiscoveryCacheTimeout);
#if !_DEBUG
Dll3RV = SetRetryCount(epdComsHandle, 20);
#else
Dll3RV = SetRetryCount(epdComsHandle, 1);
#endif
step = 4;
SetFunctionReturnValue(fOpenReader, 0,0);
@ -771,17 +763,17 @@ int Epd3Base::Epd3U::SetTime() //Only R3
int r = 0;
if (Epd.Gen == EpdGeneration::Mk3)
{
//SetFunctionReturnValue(WriteRTC_R3, 1);
utc = TimeFunctions::NowToEpd3Time();
r = RunComsTransaction(WriteRTC_R3, 1,
[&]() {
return BeginWriteRTC_R3(epdComsHandle, utc, nullptr);
[&](auto cb) {
return BeginWriteRTC_R3(epdComsHandle, utc, cb);
},
[&](auto token) {
return EndWriteRTC_R3(epdComsHandle, token);
}, 10
);
// token = BeginWriteRTC_R3(epdComsHandle, utc, nullptr); r = CommitAndEnd2RV(EndWriteRTC_R3, token,100);
}
return r;
}
@ -790,22 +782,20 @@ int Epd3Base::Epd3U::ReadStatusOnly()
{
EPDStep = EpdSteps::StepReadStatus;
int rv=0;
ResetEvent(hCompletion);
current->StatusDecoded = false;
if (!isConnected) rv = ReConnect();
if (rv)
return rv;
RunComsTransaction(eFunctions::ReadStatusOnly,0,
[&]() {
return BeginReadStatus(epdComsHandle, nullptr);
RunComsTransaction(eFunctions::ReadStatusOnly, 0,
[&](auto cb) {
return BeginReadStatus(epdComsHandle, cb);
},
[&](auto token) {
return EndReadStatus(epdComsHandle, token, &epd3status);
}, 10
);
);
if (rv) {
@ -879,8 +869,8 @@ int Epd3Base::Epd3U::ReadStatus(bool onlyStatus)
step = 2;
rv = RunComsTransaction(eFunctions::ReadStatus, 0,
[&]() {
return BeginReadStatus(epdComsHandle, nullptr);
[&](auto cb) {
return BeginReadStatus(epdComsHandle, cb);
},
[&](auto token) {
return EndReadStatus(epdComsHandle, token, &epd3status);
@ -900,8 +890,8 @@ int Epd3Base::Epd3U::ReadStatus(bool onlyStatus)
// millivolt vbat0 off load battery voltage vbat1 on load battery voltage vcpu CPU supply voltage, in millivolts
rv = RunComsTransaction(eFunctions::ReadVoltages, 0,
[&]() {
return BeginReadVoltages(epdComsHandle, nullptr);
[&](auto cb) {
return BeginReadVoltages(epdComsHandle, cb);
},
[&](auto token) {
return EndReadVoltages(epdComsHandle, token, &vbat0, &vbat1, &vcpu);
@ -938,8 +928,8 @@ int Epd3Base::Epd3U::ReadStatus(bool onlyStatus)
EPDStepResult = EpdStepResults::Started;
rv = RunComsTransaction(eFunctions::ReadEpdIdentities, 0,
[&]() {
return BeginReadEpdIdentities(epdComsHandle, nullptr);
[&](auto cb) {
return BeginReadEpdIdentities(epdComsHandle, cb);
},
[&](auto token) {
return EndReadEpdIdentities(epdComsHandle, token, &EpdID32, reinterpret_cast<EpdTypes*>(&EpdType), &capabilities, &MarkNumber, &VersionNumber, nullptr, 0);
@ -971,8 +961,8 @@ int Epd3Base::Epd3U::ReadStatus(bool onlyStatus)
step = 4;
EPDStep = EpdSteps::StepReadCounts;
rv = RunComsTransaction(eFunctions::ReadCounts, 0,
[&]() {
return BeginReadCounts(epdComsHandle, nullptr,0,nullptr);
[&](auto cb) {
return BeginReadCounts(epdComsHandle, nullptr,0,cb);
},
[&](auto token) {
return EndReadCounts(epdComsHandle, token, Counts, MaxCounts, &countsRead, &utc, &seconds);
@ -996,8 +986,8 @@ int Epd3Base::Epd3U::ReadStatus(bool onlyStatus)
if (utc == 0) {
EPDStep = EpdSteps::StepReadRTC;
rv = RunComsTransaction(eFunctions::ReadRTC, 0,
[&]() {
return BeginReadRTC(epdComsHandle, nullptr);
[&](auto cb) {
return BeginReadRTC(epdComsHandle, cb);
},
[&](auto token) {
return EndReadRTC(epdComsHandle, token, &utc);
@ -1032,8 +1022,8 @@ int Epd3Base::Epd3U::ReadStatus(bool onlyStatus)
EPDStep = EpdSteps::StepReadWearerId;
//batchstep = 0;
rv = RunComsTransaction(eFunctions::ReadWearerId, 0,
[&]() {
return BeginReadWearerId(epdComsHandle, static_cast<uint16_t>(WearerIdType::WearerId_Name), nullptr);
[&](auto cb) {
return BeginReadWearerId(epdComsHandle, static_cast<uint16_t>(WearerIdType::WearerId_Name), cb);
},
[&](auto token) {
return EndReadWearerId(epdComsHandle, token, &mk3WearerID);
@ -1053,8 +1043,8 @@ int Epd3Base::Epd3U::ReadStatus(bool onlyStatus)
//batchstep = 1;
rv = RunComsTransaction(eFunctions::ReadWearerId, 0,
[&]() {
return BeginReadWearerId(epdComsHandle, static_cast<uint16_t>(WearerIdType::WearerId_Primary), nullptr);
[&](auto cb) {
return BeginReadWearerId(epdComsHandle, static_cast<uint16_t>(WearerIdType::WearerId_Primary), cb);
},
[&](auto token) {
return EndReadWearerId(epdComsHandle, token, &mk3WearerID);
@ -1388,8 +1378,8 @@ WORD Epd3Base::Epd3U::ReadCal()
int r = 0, r2 = 0;
Error = 0;
r = RunComsTransaction(eFunctions::ReadSensitivities, 0,
[&]() {
return BeginReadSensitivities(epdComsHandle, nullptr, 0, nullptr);
[&](auto cb) {
return BeginReadSensitivities(epdComsHandle, nullptr, 0, cb);
},
[&](auto token) {
return EndReadSensitivities(epdComsHandle, token, sensitivities, MaxSensitivities, &numSensitivities);
@ -1424,8 +1414,8 @@ WORD Epd3Base::Epd3U::ReadCal()
r = RunComsTransaction(eFunctions::ReadGains, 0,
[&]() {
return BeginReadGains(epdComsHandle, nullptr, 0, nullptr);
[&](auto cb) {
return BeginReadGains(epdComsHandle, nullptr, 0, cb);
},
[&](auto token) {
return EndReadGains(epdComsHandle, token, gains, MaxGains, &numGains);
@ -1483,7 +1473,7 @@ WORD Epd3Base::Epd3U::ReadSensitivitiesAndTresholds()
uint16_t FBthresh;
uint16_t HGthresh;
token = BeginReadCalibrationData_R2(epdComsHandle, nullptr);
CompletionToken token = BeginReadCalibrationData_R2(epdComsHandle, nullptr);
r = Commit3(epdComsHandle);
r = EndReadCalibrationData_R2(epdComsHandle, token,
&HGSens10,
@ -1512,8 +1502,8 @@ WORD Epd3Base::Epd3U::ReadSensitivitiesAndTresholds()
}
else {
r = RunComsTransaction(eFunctions::ReadDetectorThresholds, 0,
[&]() {
return BeginReadDetectorThresholds_R3(epdComsHandle, nullptr, 0, nullptr);
[&](auto cb) {
return BeginReadDetectorThresholds_R3(epdComsHandle, nullptr, 0, cb);
},
[&](auto token) {
return EndReadDetectorThresholds_R3(epdComsHandle, token, dTresholds, MaxTresholds, &numTresholds);
@ -1571,8 +1561,8 @@ WORD Epd3Base::Epd3U::ReadDoses()
numDoses = 0; utc = 0;
r = RunComsTransaction(eFunctions::fReadDoses, 0,
[&]() {
return BeginReadDoses(epdComsHandle, nullptr, 0, nullptr);
[&](auto cb) {
return BeginReadDoses(epdComsHandle, nullptr, 0, cb);
},
[&](auto token) {
return EndReadDoses(epdComsHandle, token, doses, MaxDoses, &numDoses, &utc);
@ -1599,8 +1589,8 @@ WORD Epd3Base::Epd3U::ReadDoses()
decodeDoses(numDoses);
r = RunComsTransaction(eFunctions::ReadTotalDoses, 0,
[&]() {
return BeginReadTotalDoses(epdComsHandle, nullptr, 0, nullptr);
[&](auto cb) {
return BeginReadTotalDoses(epdComsHandle, nullptr, 0, cb);
},
[&](auto token) {
return EndReadTotalDoses(epdComsHandle, token, totdoses, MaxDoses, &numtotDoses, &utc);
@ -1627,8 +1617,8 @@ WORD Epd3Base::Epd3U::ReadDoses()
decodetotDoses(numtotDoses);
r = RunComsTransaction(eFunctions::ReadQualityData, 0,
[&]() {
return BeginReadQualityData(epdComsHandle, nullptr);
[&](auto cb) {
return BeginReadQualityData(epdComsHandle, cb);
},
[&](auto token) {
return EndReadQualityData(epdComsHandle, token, &quality);
@ -1649,8 +1639,8 @@ WORD Epd3Base::Epd3U::ReadDoses()
Resets = quality.PowerCycles;
r = RunComsTransaction(eFunctions::ReadPeakRates, 0,
[&]() {
return BeginReadPeakRates(epdComsHandle, nullptr, 0, nullptr);
[&](auto cb) {
return BeginReadPeakRates(epdComsHandle, nullptr, 0, cb);
},
[&](auto token) {
return EndReadPeakRates(epdComsHandle, token, peakRates, MaxPeakRates, &numRates);
@ -1689,8 +1679,8 @@ int Epd3Base::Epd3U::ClearDoses()
{
int rv;
rv = RunComsTransaction(eFunctions::ClearTotalDose, 0,
[&]() {
return BeginClearTotalDose(epdComsHandle, nullptr);
[&](auto cb) {
return BeginClearTotalDose(epdComsHandle, cb);
},
[&](auto token) {
return EndClearTotalDose(epdComsHandle, token);
@ -1709,8 +1699,8 @@ int Epd3Base::Epd3U::ClearDoses()
if (rv) goto error;
rv = RunComsTransaction(eFunctions::ClearDose, 0,
[&]() {
return BeginClearDose(epdComsHandle, nullptr);
[&](auto cb) {
return BeginClearDose(epdComsHandle, cb);
},
[&](auto token) {
return EndClearDose(epdComsHandle, token);
@ -1730,8 +1720,8 @@ int Epd3Base::Epd3U::ClearDoses()
if (rv) goto error;
rv = RunComsTransaction(eFunctions::ClearPeakRates, 0,
[&]() {
return BeginClearPeakRates(epdComsHandle, nullptr);
[&](auto cb) {
return BeginClearPeakRates(epdComsHandle, cb);
},
[&](auto token) {
return EndClearPeakRates(epdComsHandle, token);
@ -1761,8 +1751,8 @@ int Epd3Base::Epd3U::ClearAlarms()
int rv;
rv = RunComsTransaction(eFunctions::ClearFaultStatus, 0,
[&]() {
return BeginClearFaultStatus(epdComsHandle, nullptr);
[&](auto cb) {
return BeginClearFaultStatus(epdComsHandle, cb);
},
[&](auto token) {
return EndClearFaultStatus(epdComsHandle, token);
@ -1781,8 +1771,8 @@ int Epd3Base::Epd3U::ClearAlarms()
//}
rv = RunComsTransaction(eFunctions::ClearLatchedAlarms, 0,
[&]() {
return BeginClearLatchedAlarms(epdComsHandle, nullptr);
[&](auto cb) {
return BeginClearLatchedAlarms(epdComsHandle, cb);
},
[&](auto token) {
return EndClearLatchedAlarms(epdComsHandle, token);
@ -1806,8 +1796,8 @@ int Epd3Base::Epd3U::ClearAlarms()
WORD Epd3Base::Epd3U::SetCalDueDate() {
UINT32 utc = TimeFunctions::NewCalDueTime();
int rv = RunComsTransaction(eFunctions::fSetCalDueDate, 0,
[&]() {
return BeginWriteCalDueDate_R3(epdComsHandle, utc, nullptr);
[&](auto cb) {
return BeginWriteCalDueDate_R3(epdComsHandle, utc, cb);
},
[&](auto token) {
return EndWriteCalDueDate_R3(epdComsHandle, token);
@ -1927,8 +1917,8 @@ WORD Epd3Base::Epd3U::ReadAlarmConfig() {
//Alleen MK3 ? leeg bij MK2
numAlarm = 0;
int r = RunComsTransaction(eFunctions::ReadAlarmConfiguration, 0,
[&]() {
return BeginReadAlarmConfiguration(epdComsHandle, nullptr, 0, nullptr);
[&](auto cb) {
return BeginReadAlarmConfiguration(epdComsHandle, nullptr, 0, cb);
},
[&](auto token) {
return EndReadAlarmConfiguration(epdComsHandle, token, alarmConfig, MaxAlarmConfig, &numAlarm);
@ -1951,8 +1941,8 @@ WORD Epd3Base::Epd3U::ReadAlarmTresholds() {
if (isNeutron) measID = (uint8_t)MeasurementId::Meas_Hp10N; else measID = (uint8_t)MeasurementId::Meas_Hp07;
hp07tresholds.MeasId = measID;
r = RunComsTransaction(eFunctions::ReadAlarmThresholds, 0,
[&]() {
return BeginReadAlarmThresholds(epdComsHandle, (uint8_t)hp07tresholds.MeasId, nullptr, 0, nullptr);
[&](auto cb) {
return BeginReadAlarmThresholds(epdComsHandle, (uint8_t)hp07tresholds.MeasId, nullptr, 0, cb);
},
[&](auto token) {
return EndReadAlarmThresholds(epdComsHandle, token, &hp07tresholds);
@ -1978,8 +1968,8 @@ WORD Epd3Base::Epd3U::ReadAlarmTresholds() {
if (isNeutron) measID = (uint8_t)MeasurementId::Meas_Hp10G; else measID = (uint8_t)MeasurementId::Meas_Hp10;
hp10tresholds.MeasId = measID;
r = RunComsTransaction(eFunctions::ReadAlarmThresholds, 0,
[&]() {
return BeginReadAlarmThresholds(epdComsHandle, (uint8_t)hp10tresholds.MeasId, nullptr, 0, nullptr);
[&](auto cb) {
return BeginReadAlarmThresholds(epdComsHandle, (uint8_t)hp10tresholds.MeasId, nullptr, 0, cb);
},
[&](auto token) {
return EndReadAlarmThresholds(epdComsHandle, token, &hp10tresholds);
@ -2002,8 +1992,8 @@ WORD Epd3Base::Epd3U::WriteAlarmTresholds() {
encodeTreshold(&hp10tresholds);
r = RunComsTransaction(eFunctions::WriteAlarmThresholdsHP10, 0,
[&]() {
return BeginWriteAlarmThresholds(epdComsHandle, (uint8_t)hp10tresholds.MeasId, (uint8_t)hp10tresholds.NumberThresholds, hp10tresholds.Thresholds, nullptr);
[&](auto cb) {
return BeginWriteAlarmThresholds(epdComsHandle, (uint8_t)hp10tresholds.MeasId, (uint8_t)hp10tresholds.NumberThresholds, hp10tresholds.Thresholds, cb);
},
[&](auto token) {
return EndWriteAlarmThresholds(epdComsHandle, token);
@ -2021,8 +2011,8 @@ WORD Epd3Base::Epd3U::WriteAlarmTresholds() {
hp07tresholds.NumberThresholds = 4;
r = RunComsTransaction(eFunctions::WriteAlarmThresholdsHP07, 0,
[&]() {
return BeginWriteAlarmThresholds(epdComsHandle, (uint8_t)hp07tresholds.MeasId, (uint8_t)hp07tresholds.NumberThresholds, hp07tresholds.Thresholds, nullptr);
[&](auto cb) {
return BeginWriteAlarmThresholds(epdComsHandle, (uint8_t)hp07tresholds.MeasId, (uint8_t)hp07tresholds.NumberThresholds, hp07tresholds.Thresholds, cb);
},
[&](auto token) {
return EndWriteAlarmThresholds(epdComsHandle, token);
@ -2034,8 +2024,8 @@ WORD Epd3Base::Epd3U::WriteAlarmTresholds() {
goto error;
r = RunComsTransaction(eFunctions::WriteRateOffPercentage, 0,
[&]() {
return BeginWriteRateOffPercentage(epdComsHandle, RatePct, 2, nullptr);
[&](auto cb) {
return BeginWriteRateOffPercentage(epdComsHandle, RatePct, 2, cb);
},
[&](auto token) {
return EndWriteRateOffPercentage(epdComsHandle, token);
@ -2079,8 +2069,8 @@ WORD Epd3Base::Epd3U::DeIssue()
#endif
r = RunComsTransaction(eFunctions::DeissueEPD, 0,
[&]() {
return BeginDeissueEPD(epdComsHandle, nullptr);
[&](auto cb) {
return BeginDeissueEPD(epdComsHandle, cb);
},
[&](auto token) {
return EndDeissueEPD(epdComsHandle, token);
@ -2117,8 +2107,8 @@ WORD Epd3Base::Epd3U::WriteWearer() {
int step = 0;
r = RunComsTransaction(eFunctions::SetBaselineCounters, 0,
[&]() {
return BeginSetBaselineCounters(epdComsHandle, nullptr);
[&](auto cb) {
return BeginSetBaselineCounters(epdComsHandle, cb);
},
[&](auto token) {
return EndSetBaselineCounters(epdComsHandle, token);
@ -2138,8 +2128,8 @@ WORD Epd3Base::Epd3U::WriteWearer() {
memcpy(mk3WearerID.Utf8String, WearerName, 23);
r = RunComsTransaction(eFunctions::WriteWearerIdName, 0,
[&]() {
return BeginWriteWearerId(epdComsHandle, mk3WearerID, nullptr);
[&](auto cb) {
return BeginWriteWearerId(epdComsHandle, mk3WearerID, cb);
},
[&](auto token) {
return EndWriteWearerId(epdComsHandle, token);
@ -2155,8 +2145,8 @@ WORD Epd3Base::Epd3U::WriteWearer() {
memcpy(mk3WearerID.Utf8String, WearerID, 13);
r = RunComsTransaction(eFunctions::WriteWearerIdPrimary, 0,
[&]() {
return BeginWriteWearerId(epdComsHandle, mk3WearerID, nullptr);
[&](auto cb) {
return BeginWriteWearerId(epdComsHandle, mk3WearerID, cb);
},
[&](auto token) {
return EndWriteWearerId(epdComsHandle, token);
@ -2215,8 +2205,8 @@ WORD Epd3Base::Epd3U::Issue(bool PrepareDone) //normaal is preparedone=tru
DoProtectSession = false;
if (DoProtectSession) {
r = RunComsTransaction(eFunctions::EnableProtectedSession, 0,
[&]() {
return BeginEnableProtectedSession(epdComsHandle, 1, nullptr);
[&](auto cb) {
return BeginEnableProtectedSession(epdComsHandle, 1, cb);
},
[&](auto token) {
return EndIssueEPD(EndEnableProtectedSession, token);
@ -2256,8 +2246,8 @@ WORD Epd3Base::Epd3U::Issue(bool PrepareDone) //normaal is preparedone=tru
tries = 1;
r = RunComsTransaction(eFunctions::IssueEPD, 0,
[&]() {
return BeginIssueEPD(epdComsHandle, nullptr);
[&](auto cb) {
return BeginIssueEPD(epdComsHandle, cb);
},
[&](auto token) {
return EndIssueEPD(epdComsHandle, token);
@ -2287,8 +2277,8 @@ WORD Epd3Base::Epd3U::Issue(bool PrepareDone) //normaal is preparedone=tru
if (DoProtectSession) {
r = RunComsTransaction(eFunctions::DisableProtectedSession, 0,
[&]() {
return BeginEnableProtectedSession(epdComsHandle, 0, nullptr);
[&](auto cb) {
return BeginEnableProtectedSession(epdComsHandle, 0, cb);
},
[&](auto token) {
return EndIssueEPD(EndEnableProtectedSession, token);
@ -2319,8 +2309,8 @@ WORD Epd3Base::Epd3U::EPDReadExtraStatus()
uint32_t r;
r = RunComsTransaction(eFunctions::ReadBaselineCounts, 0,
[&]() {
return BeginReadBaselineCounts(epdComsHandle, nullptr);
[&](auto cb) {
return BeginReadBaselineCounts(epdComsHandle, cb);
},
[&](auto token) {
return EndReadBaselineCounts(epdComsHandle, token, Counts, 10, &utc, &countsRead);
@ -2355,8 +2345,8 @@ WORD Epd3Base::Epd3U::WriteCal()
Password = 9;
r = RunComsTransaction(eFunctions::MfrLogin_R2, 0,
[&]() {
return BeginMfrLogin_R2(epdComsHandle, Password, nullptr);
[&](auto cb) {
return BeginMfrLogin_R2(epdComsHandle, Password, cb);
},
[&](auto token) {
return EndMfrLogin_R2(epdComsHandle, token);
@ -2370,8 +2360,8 @@ WORD Epd3Base::Epd3U::WriteCal()
goto error;
r = RunComsTransaction(eFunctions::WriteSensitivities_R2, 0,
[&]() {
return BeginWriteSensitivities_R2(epdComsHandle, nullptr, (uint16_t)K1, (uint16_t)K2, (uint16_t)K3, (uint16_t)K4, (uint16_t)K5, (uint16_t)K6);
[&](auto cb) {
return BeginWriteSensitivities_R2(epdComsHandle, cb, (uint16_t)K1, (uint16_t)K2, (uint16_t)K3, (uint16_t)K4, (uint16_t)K5, (uint16_t)K6);
},
[&](auto token) {
return EndWriteSensitivities_R2(epdComsHandle, token);
@ -2395,8 +2385,8 @@ WORD Epd3Base::Epd3U::WriteCal()
// goto error;
r = RunComsTransaction(eFunctions::WriteAccessLevelAdmin, 0,
[&]() {
return BeginWriteAccessLevel(epdComsHandle, AccessLevel_t::Admin, EC, ECLen, nullptr);
[&](auto cb) {
return BeginWriteAccessLevel(epdComsHandle, AccessLevel_t::Admin, EC, ECLen,cb);
},
[&](auto token) {
return EndWriteAccessLevel(epdComsHandle, token);
@ -2421,8 +2411,8 @@ WORD Epd3Base::Epd3U::WriteCal()
gains[1].id = (uint16_t)SensitivityId::Fn1Sens10N; //K3
gains[1].value = GainFn;
r = RunComsTransaction(eFunctions::WriteGains_R3, 0,
[&]() {
return BeginWriteGains(epdComsHandle, gains, numGains, nullptr);
[&](auto cb) {
return BeginWriteGains(epdComsHandle, gains, numGains, cb);
},
[&](auto token) {
return EndWriteGains(epdComsHandle, token);
@ -2605,8 +2595,8 @@ int Epd3Base::Epd3U::WriteConfig(void)
// Become admin
if (!r) {
r = RunComsTransaction(eFunctions::WriteAccessLevelAdmin, 0,
[&]() {
return BeginWriteAccessLevel(epdComsHandle, AccessLevel_t::Admin, EC, ECLen, nullptr);
[&](auto cb) {
return BeginWriteAccessLevel(epdComsHandle, AccessLevel_t::Admin, EC, ECLen, cb);
},
[&](auto token) {
return EndWriteAccessLevel(epdComsHandle, token);
@ -2628,8 +2618,8 @@ int Epd3Base::Epd3U::WriteConfig(void)
{ 5,0x0062 }
};
r = RunComsTransaction(eFunctions::WriteQuickAccessDisplays_R3, 0,
[&]() {
return BeginWriteQuickAccessDisplays_R3(epdComsHandle, vdisplayIds.data(), static_cast<uint8_t>(vdisplayIds.size()), nullptr);
[&](auto cb) {
return BeginWriteQuickAccessDisplays_R3(epdComsHandle, vdisplayIds.data(), static_cast<uint8_t>(vdisplayIds.size()), cb);
},
[&](auto token) {
return EndWriteQuickAccessDisplays_R3(epdComsHandle, token);
@ -2648,8 +2638,8 @@ int Epd3Base::Epd3U::WriteConfig(void)
if (SoftVersion >= 2) {
r = RunComsTransaction(eFunctions::EnableTestSound, 0,
[&]() {
return BeginEnableTestSound_R3(epdComsHandle, 1, nullptr);
[&](auto cb) {
return BeginEnableTestSound_R3(epdComsHandle, 1, cb);
},
[&](auto token) {
return EndEnableTestSound_R3(epdComsHandle, token);
@ -2661,8 +2651,8 @@ int Epd3Base::Epd3U::WriteConfig(void)
if (!r && isAdmin) {
r = RunComsTransaction(eFunctions::WriteDoseProfileInterval, 0,
[&]() {
return BeginWriteDoseProfileInterval(epdComsHandle, 0, nullptr);
[&](auto cb) {
return BeginWriteDoseProfileInterval(epdComsHandle, 0, cb);
},
[&](auto token) {
return EndWriteDoseProfileInterval(epdComsHandle, token);
@ -2709,8 +2699,8 @@ int Epd3Base::Epd3U::WriteConfig(void)
// 1 0 0 0 0
r = RunComsTransaction(eFunctions::WriteDisplayEnables_R3, 1,
[&]() {
return BeginWriteDisplayEnables_R3(epdComsHandle, venables.data(), static_cast<uint8_t>(venables.size()), nullptr);
[&](auto cb) {
return BeginWriteDisplayEnables_R3(epdComsHandle, venables.data(), static_cast<uint8_t>(venables.size()), cb);
},
[&](auto token) {
return EndWriteDisplayEnables_R3(epdComsHandle, token);
@ -2763,8 +2753,8 @@ int Epd3Base::Epd3U::WriteConfig(void)
{ (AlarmIds)9,0,0x0000,0x9CA5,60 }
};
r = RunComsTransaction(eFunctions::WriteAlarmConfiguration_R3, 1,
[&]() {
return BeginWriteAlarmConfiguration_R3(epdComsHandle, valarmConfigIds.data(), static_cast<uint16_t>(valarmConfigIds.size()), nullptr);
[&](auto cb) {
return BeginWriteAlarmConfiguration_R3(epdComsHandle, valarmConfigIds.data(), static_cast<uint16_t>(valarmConfigIds.size()), cb);
},
[&](auto token) {
return EndWriteAlarmConfiguration_R3(epdComsHandle, token);
@ -2792,8 +2782,8 @@ int Epd3Base::Epd3U::WriteConfig(void)
offModeDispId = (OffModeDisplayId_t)1;
r = RunComsTransaction(eFunctions::WriteOffModeDisplay_R3, 1,
[&]() {
return BeginWriteOffModeDisplay_R3(epdComsHandle, dutyCycle, offModeDispId, nullptr);
[&](auto cb) {
return BeginWriteOffModeDisplay_R3(epdComsHandle, dutyCycle, offModeDispId, cb);
},
[&](auto token) {
return EndWriteOffModeDisplay_R3(epdComsHandle, token);
@ -2817,8 +2807,8 @@ int Epd3Base::Epd3U::WriteConfig(void)
}*/
r = RunComsTransaction(eFunctions::WriteAccessLevelOpen, 0 ,
[&]() {
return BeginWriteAccessLevel(epdComsHandle, AccessLevel_t::Open, nullptr, 0, nullptr);
[&](auto cb) {
return BeginWriteAccessLevel(epdComsHandle, AccessLevel_t::Open, nullptr, 0, cb);
},
[&](auto token) {
return EndWriteAccessLevel(epdComsHandle, token);
@ -2856,22 +2846,20 @@ int Epd3Base::Epd3U::SetChirp(float Sensitivity)
if (Sensitivity > 0.001F) {
enable = 1;
r = RunComsTransaction(eFunctions::WriteChirpSensitivity, 0,
[&]() {
return BeginWriteChirpSensitivity(epdComsHandle, Sensitivity, nullptr);
[&](auto cb) {
return BeginWriteChirpSensitivity(epdComsHandle, Sensitivity, cb);
},
[&](auto token) {
return EndWriteChirpSensitivity(epdComsHandle, token);
}, 10
);
}
if (r) goto error;
if (!r) {
r = RunComsTransaction(eFunctions::WriteChirpEnable_R3, 0,
[&]() {
return BeginWriteChirpEnable_R3(epdComsHandle, enable, nullptr);
[&](auto cb) {
return BeginWriteChirpEnable_R3(epdComsHandle, enable, cb);
},
[&](auto token) {
return EndWriteChirpEnable_R3(epdComsHandle, token);
@ -2891,8 +2879,8 @@ int Epd3Base::Epd3U::GetSelfTestData()
{
int r = 1;
r = RunComsTransaction(eFunctions::fReadSelfTestInterval, 0,
[&]() {
return BeginReadSelfTestInterval(epdComsHandle, nullptr);
[&](auto cb) {
return BeginReadSelfTestInterval(epdComsHandle, cb);
},
[&](auto token) {
return EndReadSelfTestInterval(epdComsHandle, token, &SelfTestMinutes);
@ -2925,8 +2913,8 @@ int Epd3Base::Epd3U::DoSelfTest()
r = SetEpdON();
r = RunComsTransaction(eFunctions::fDoSelfTest, 0,
[&]() {
return BeginStartDetectorTest(epdComsHandle, nullptr);
[&](auto cb) {
return BeginStartDetectorTest(epdComsHandle, cb);
},
[&](auto token) {
return EndStartDetectorTest(epdComsHandle, token);

View file

@ -16,6 +16,22 @@
#pragma unmanaged
#ifdef _DEBUG
#define DebugWrite_IsActive() true
#else
#define DebugWrite_IsActive() (g_EnableReleaseLogging)
#endif
#define DebugWrite(f, ...) \
do { \
if (DebugWrite_IsActive()) { \
auto _msg = std::format(f, ##__VA_ARGS__); \
OutputDebugStringA(_msg.c_str()); \
} \
} while (0)
#define MaxPeakRates 10
#define MaxSensitivities 10
#define MaxGains 10
@ -25,7 +41,7 @@
#define MaxAlarmConfig 10
#define MaxTresholds 10
#define MaxSteps 50
#define MaxBatch 4
//#define MaxBatch 4
//ResponseTimeout was set to 2500 in code, but initial this was 500ms
// 0b 1001110010000100
//constexpr int ResponseTimeout = 500;
@ -114,13 +130,14 @@ namespace Epd3Base {
{
public:
const char* LogFileName;
std::ofstream logFile;
char comPort[5] = { "COM4" };
CommsHandle epdComsHandle;
//uint32_t CurrentDeviceID;
EpdGeneration EpdGen;
DiscoveryId Epd;
CompletionToken token, btoken[MaxBatch];
CompletionToken m_activeToken ; //btoken[MaxBatch],
WORD port = 3;
const WORD MaxDevices = 10;
WORD DeviceCount = 0;
@ -435,8 +452,8 @@ namespace Epd3Base {
uint32_t SetEndReturnValue(int step, int rv);
int32_t CommitAndSetRV();
int32_t CommitAndSetRV(int idx[], int len);
int32_t CommitAndEnd2RV(int32_t (WINAPI *endFunction2)(CommsHandle hComms, CompletionToken token), CompletionToken token, int waitTime=10);
//int32_t CommitAndSetRV(int idx[], int len);
//int32_t CommitAndEnd2RV(int32_t (WINAPI *endFunction2)(CommsHandle hComms, CompletionToken token), CompletionToken token, int waitTime=10);
int32_t End2RV(int step, int32_t(WINAPI* endFunction2)(CommsHandle hComms, CompletionToken token), CompletionToken token);
int GetAll(bool Closeconnection);
int GetAllDeissue(bool reconnect);
@ -469,57 +486,95 @@ namespace Epd3Base {
void incrementError(int rv);
void ResetStepReturnValues();
template <typename FBegin, typename FEnd>
bool RunComsTransaction(enum eFunctions f, BYTE CanIgnor, FBegin beginCall, FEnd endCall, int waitTime=10) {
int r = 0, trie = 0;
SetFunctionReturnValue(f, CanIgnor, trie);
auto token = beginCall();
r = Commit3(epdComsHandle);
SetCommitReturnValue(r);
if (!r) {
Sleep(waitTime);
r = endCall(token);
}
else {
SetEndReturnValue(r);
trie++;
ReConnect();
SetFunctionReturnValue(f, CanIgnor, trie);
token = beginCall();
bool RunComsTransaction(enum eFunctions f, BYTE CanIgnor, FBegin beginCall, FEnd endCall, int waitTime = 10, int maxRetries = 1) {
int r = 0;
int trie = 0; // Current retry
while (trie <= maxRetries ) {
if (isCancelled()) break;
ResetEvent(hCompletion);
SetFunctionReturnValue(f, CanIgnor, trie);
m_activeToken = beginCall(completion);
// 1. Commit phase
r = Commit3(epdComsHandle);
SetCommitReturnValue(r);
if (!r) {
Sleep(waitTime);
r = endCall(token);
// 2. End phase if commit succeeded
if (r == 0) {
DWORD waitResult = WaitForSingleObject(hCompletion, 5000);
if (waitResult == WAIT_OBJECT_0) {
Sleep(waitTime);
r = endCall(m_activeToken);
}
else {
// Dll Timeout or failure occurred
m_activeToken = nullptr;
r = -1; // Set your timeout/error code here
}
//r = endCall(token);
}
SetEndReturnValue(r);
if (r == 0) {
break;
}
trie++;
if (trie <= maxRetries) {
#if _DEBUG
DebugWrite("***===*** Retry rv {} trie {}", r, trie);
#endif
//if (r==r_ErrorNotConnected)
ReConnect(); //misschien alleen als error = not connected ?
r= ReadStatusOnly();
}
}
return SetEndReturnValue(r);
m_activeToken = nullptr;
return r;
}
int SetEpdOFF() {
return RunComsTransaction(
eFunctions::EpdOff,
0,
[&]() {
return BeginEpdOnOff(epdComsHandle, 0, nullptr);
[&](auto cb) {
return BeginEpdOnOff(epdComsHandle, 0, cb);
},
[&](auto token) {
return EndEpdOnOff(epdComsHandle, token);
},
1000
100
);
}
int SetEpdON() {
return RunComsTransaction(
eFunctions::EpdOn,
0,
[&]() {
return BeginEpdOnOff(epdComsHandle, 1, nullptr);
[&](auto cb) {
return BeginEpdOnOff(epdComsHandle, 1, cb);
},
[&](auto token) {
return EndEpdOnOff(epdComsHandle, token);
},
1000
200
);
}
inline static Epd3Base::Epd3U* s_pInstance = nullptr; // Tracks the active instance (C++17)
static void WINAPI completion(CommsHandle hComms, CompletionToken token)
{
if (s_pInstance) {
// ONLY signal the event if the token matches our current active request!
if (token == s_pInstance->m_activeToken) {
SetEvent(s_pInstance->hCompletion);
}
}
//SetEvent(s_pInstance->hCompletion);
}
public:

View file

@ -132,7 +132,6 @@ int EpdBaseClr::Epd2::GetSteps()
if (nsteps>0) {
StepReturnValues = gcnew System::Collections::Generic::List<cStepValues^>(nsteps);
cStepValues^ x;
for (int i = 0; i<nsteps; i++)
{
x = gcnew cStepValues();
@ -141,10 +140,10 @@ int EpdBaseClr::Epd2::GetSteps()
x->endrv = epd3->StepReturnValues[i][2];
x->commitms = epd3->StepReturnValues[i][4];
x->endms = epd3->StepReturnValues[i][5];
x->commitcode = epd3->StepReturnValues[i][6];
x->endcode = epd3->StepReturnValues[i][7];
x->commitcode = (Int16)epd3->StepReturnValues[i][6];
x->endcode = epd3->StepReturnValues[i][7];
x->retry = epd3->StepReturnValues[i][8];
StepReturnValues->Add(x);
}
int tm;
if (nsteps>0) {
@ -1034,6 +1033,7 @@ int EpdBaseClr::Epd2::IssueAndCheck(float gain, float ChirpRate, bool WriteConfi
if (!isMK3) {
LogMessage("IssueAndCheck: !isMK3 BeforeSetIssued");
BeforeSetIssued(epd);
rv = epd->IssueAndCheck(gain);
LogMessage("IssueAndCheck: !isMK3 rv={}",rv);
}

View file

@ -38,6 +38,7 @@ namespace EpdBaseClr {
Int32 endms;
Int32 commitcode;
int32_t endcode;
Int32 retry;
cStepValues();
~ cStepValues();
@ -47,7 +48,7 @@ namespace EpdBaseClr {
cStepValues:: cStepValues()
{
func = -1; commitrv = -1; endrv = -1; commitms = -1; endms = -1; commitcode = 0; endcode = 0;
func = -1; commitrv = -1; endrv = -1; commitms = -1; endms = -1; commitcode = 0; endcode = 0; retry = 0;
}
cStepValues::~ cStepValues()

View file

@ -49,7 +49,8 @@ EXPORT_MANAGED enum class EpdStepColumns
commitMS,
endMS,
commitCode,
endCode,
endCode,
retry,
maxStepColumn
};

View file

@ -3,11 +3,11 @@
// C++ / Win32 resource editor vereist getallen met komma's
#define VERSION_MAJOR 4
#define VERSION_MINOR 3
#define VERSION_BUILD 0
#define VERSION_BUILD 2
#define VERSION_REVISION 0
// Strings voor de tekstuele weergave
#define VERSION_STRING "4.3.0.0"
#define VERSION_STRING "4.3.2.0"
#define COPYRIGHT_STRING "Copyright (c) 2019-2026 LSW-Tech Luc Vandenbroucke"
#define COMPANY_STRING "LSW-Tech"
#define PRODUCT_STRING "EpdBaseClr"

View file

@ -33,7 +33,7 @@ AS BEGIN
VALUES(@EPDID, @FirmWare, @ID_Station, @now, @ID_Station, @now, @epdType, 0, @HardWare);
ELSE
UPDATE [dbo].[EPDDevice]
SET [Last_Station]=@ID_Station, [lastseen]=@now, [synced]=0, [HardWare]=@HardWare
SET [Last_Station]=@ID_Station, [lastseen]=@now, [synced]=0, [HardWare]=@HardWare, [FirmWare]=@FirmWare
WHERE [EPDID]=@EPDID;
INSERT [dbo].[EPDDeviceLog]([EPDID], [ID_Station], [ID_Visit], [updated], [BatNoload_mV], [Batload_mV], [CPU_mV], [r_InvalidState], [r_OperationTimeout], [r_InsufficientPriv], [r_OperationFailed], [r_ErrorUnexpectedResponse], [r_OtherError], [WriteTime], [Registered] , [DllVersion])

View file

@ -144,7 +144,7 @@ namespace eDosStation
if (Lst != null && Lst.Count > 0)
for (int s = 0; s < Lst.Count; s++)
{
string msg = $"{s} {GetName(Lst[s].func)} commit: {Getresult(Lst[s].commitrv)} ({Lst[s].commitms} ms) (er {Lst[s].commitcode} ) / end : {Getresult(Lst[s].endrv)} ({Lst[s].endms} ms) (er {Lst[s].endcode} )";
string msg = $"{s} {GetName(Lst[s].func)} commit: {Getresult(Lst[s].commitrv)} ({Lst[s].commitms} ms) (er {Lst[s].commitcode} ) / end : {Getresult(Lst[s].endrv)} ({Lst[s].endms} ms) (er {Lst[s].endcode} ) retry {Lst[s].retry}";
spl?.WriteSplunkLog(module, null,(Lst[s].commitrv == 0 || Lst[s].commitrv == -998 )&& Lst[s].endrv == 0 ? cspl.iseverity.info : cspl.iseverity.err, msg);
}
}

View file

@ -78,5 +78,5 @@ using System.Windows;
//2026-10-16 4.1.9 : testsound only from epd software version 2+
//2026-10-22 4.1.10-12 : register hardware version,r_ErrorUnexpectedResponse
[assembly: AssemblyVersion("4.1.13.0")]
[assembly: AssemblyFileVersion("4.1.13.0")]
[assembly: AssemblyVersion("4.1.15.0")]
[assembly: AssemblyFileVersion("4.1.15.0")]

View file

@ -1 +1 @@
22/10/2026 15:59:17,40
29/10/2026 10:24:54,58

View file

@ -208,17 +208,17 @@ exit
# RGlnaUNlcnQsIEluYy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgVGlt
# ZVN0YW1waW5nIFJTQTQwOTYgU0hBMjU2IDIwMjUgQ0ExAhAIT9wzT35FTtvDD4/5
# khg1MA0GCWCGSAFlAwQCAQUAoGkwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAc
# BgkqhkiG9w0BCQUxDxcNMjYxMDIyMTM1OTMwWjAvBgkqhkiG9w0BCQQxIgQgwGts
# BgkqhkiG9w0BCQUxDxcNMjYxMDI5MDkyNTA3WjAvBgkqhkiG9w0BCQQxIgQgwGts
# hmgwg+1No3Bfq4IiEmxiCsjb9Jy7A/l9sT7ewm0wDQYJKoZIhvcNAQEBBQAEggIA
# aid89A+Uk/vvBwIM8u9hg7hfk0rr0dfhoP/Dtubh54LKBg/0ZzwJa6uSt3zelrvu
# mNQbsSwRRHsqJaWJ0Ao64IPhKov8hPilSJX6NRRitf4SPYXfXikaRI103PZDmusz
# Kl5SpeYPg9VmdAgn25uwFAjQO9Kx9gCWIo6uiq/00zIQfmJRjM55NU9dWr+qWjWS
# xA7gYSN+Len0AOdk/Eo1d7vx2C2n6fCXA079HC/e3cS7eedCEIut1D14xLdif9aH
# qNcOVk50FhHqIqH2TKo2mPrZcyS37fnsHctvKb4CTgKBNGtUD3zD7uRFBWc5aayu
# koe/TgFPpNeevP8AMTbPSkocZp+a5eVvyUwlTdpQ1nNHf9vqzUj7jSsymOhuajn1
# ydD6EM5ZQwXmTzXw+BLbc0XOUHaV/cuu5sBZs/QPa1Qge9WZUh8YGst3Lxc0dmG1
# pJ0fMz/2UG/uZFC+RGJhW4i/yfjeEzd+mpxT0xd1sJF6eyCypP7rJfMn0LO3JufZ
# iGNeHVero2vpG9jaxjeN66I4Fa4zVQ+dmIftHjGWZjmUn7U5GJdfuLmDxeTablCT
# XtYeSgI55nkagDgWx+p4RbQEzsQBPPNlwvhh93Kvz7+x7Jbv3VwlXigyPHuriMc5
# C0QIKQ/mN/n7ERBFGF61LLFWbK9Urd0W7i4N/Ld4sYE=
# J/kRH4P1VU2foQVL58+wLGu6YtqtoUfJ8/VjBeIUOaZdwuSUNWEXACQ8C1gQ66kT
# UeISVgfxC1Ec2Aa/q5cje1cV3/BhOqT1oADVI79tyjsFgzofKAWAGKNp55dBHP99
# H7vIBRJNaDTsNInzkAHj6FlY1Il1BEIhaXS5esaw4ej70Z3ulm1NAEgpiiuh/0kF
# P6Q8dcGLhG+5V/Jz1ZqtXXBp6DIV9e3xycEz4dy19cFTeplPGrijP0oAY0/hdsr+
# 5soraVsz/fjXq7bDKWX3BcA+2E4ueS8lIAFrmLtiF+A5rkHePMh9lS4wv0Q2fnLL
# rjuGrvfvCXs5rQJ6FIC6w1dH3+/5v0aWXP1DQzkByZ8GfUa0hbjJEXlawOoY9AAu
# hbLyDuC09GClslNB40nMRpr9qKKqhlk2i4GcXFmWI66WTx8H9/1GXSpFiUHEOcr+
# zSiu61Yhm2WSlJzJjhv8AEaZa8/FlZsVwsSBlfrXhIVMSS49SWXAYFD9Z0eZElum
# AC1pKCVq2BEf0HG33gaS5NbXtKgxtdThdrcT1SFyfq+jrsRPqOPTml3bFT/yN1y2
# O0nSzyw0HMavS3VxTxPQemV79tHAIYyWQVOvY5dV25KdVUMsuKiGcvxoFi/Aml6i
# kDPk4DVVcs00Ghoz6m78JJBbVZ33+PdLXHS8I2N02pc=
# SIG # End signature block

View file

@ -262,17 +262,17 @@ Write-Host "Database is volledig up-to-date!" -ForegroundColor Green
# RGlnaUNlcnQsIEluYy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgVGlt
# ZVN0YW1waW5nIFJTQTQwOTYgU0hBMjU2IDIwMjUgQ0ExAhAIT9wzT35FTtvDD4/5
# khg1MA0GCWCGSAFlAwQCAQUAoGkwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAc
# BgkqhkiG9w0BCQUxDxcNMjYxMDIyMTM1OTMxWjAvBgkqhkiG9w0BCQQxIgQgX8Jz
# BgkqhkiG9w0BCQUxDxcNMjYxMDI5MDkyNTA4WjAvBgkqhkiG9w0BCQQxIgQgX8Jz
# mt8t4dFlf6dbnq2GYMYV89o+noBMKSYbxRzsddYwDQYJKoZIhvcNAQEBBQAEggIA
# Kj5HuXiR76PIdc4NaMipB1wQHDpXGfBVQaRHsxriX6pw9m+dPTPJSR0MyfD9cjlB
# TR8MppvOv7g6ZlHOyrX5aaNwEtw6h4VSH1oP1cgWLNneO4W7zmmVI+VuwmiA6NMk
# pVWakW03ax9PBVcaB1+qn3ERF5Rnh5sx30GtGdVdODn/qvFl6Mvp1NepePxky3f5
# o7DiTvSuV+unofLopLTf0yYi9DZBGNkfhxUMPTghFmzqhLuNtw3HFzdXzAaqDu3A
# nE8kcUeZ+LpyfMnrvMy/lZV2Sg25yVT/rAwiL8EV7Z4BmjlE2jtZXp50GeltAywY
# Yaer/NwF1rJrkaNT7elgcrjt4HU3Qv9JwcLBVRu65zmaY7QhRAX+ukIQUZ3COjQx
# O9GsQbXUim5nThYA0+Jr/Hl51swoNDp/udNHU7DcdkUhr5znnZQsWIz24Ab7o9OE
# X0bSpr/hAdbzKJCrlc/Uc1BAkKgzv4vZuPtYJVib3V5IW9kX9jdsP/KecwMDdmfH
# c2RJR4fu6sEofQG1vXoKBQGJxx9fRUbg9uvM1ngke4sirbvlDFMCH+ziVa91b+hP
# V1KO64gDNoW2aucjFJ15cGEZ5AFXQEu7nJKI1pBcDLcWimiQ0SR2AEX16B0sQj07
# fohQitfrS1hPn8hx4dIWMOV8wfxOs8MEfyZf+mddtyM=
# AFh3VuR8Qz1QAhq3V2Vib3wluF0flQI7ukrJuwwfKsux95vG6EiWiKpI5jeTKIPJ
# pgpMhSY2zCXuHUBbn/lRso1Fmj6e2Zr7GILj4xD0kT4F7kbYCm7f5oKbHfbT4M0m
# vVZIFlHqyzilCVBJus97OMaU4Je2Wv26lLEn70n6wtmh5hdbUWHycfFssQgPiGIJ
# s1kXwKe5iCy0wNZknUIjYBoxNuqEnRn1wMhCt7dVdadxgJGpbQp169C0qEayrLYl
# d80u3ylQ8eMr9FE+D+aU4nP2GzdzgD//TAbft3tRfxEW+kivzfGJlsO/JsONwXsN
# 5I7D8m34R0InDVp+5TaCWMA2mHk1IArPyDhXEN9zZJPd6xYMI4O6Ffb1BkKqOBzi
# prkE+dyHbVRDokKLEKVjuFI5B3CMPkG4LVRJEsViwVPr72q1xFIAPdLWYBgcVmFr
# vqyIuU+QhkFgGVKFDKfLMUIlzIeG2gbn4rb7kUhPf7kFSvIXwe2WB2PKDyMg0OuI
# ovRLfOasxIDsNCeihCX2HCRMdDnpphLkYSXomYo2eVUm1hPPWdBum71ZhntqMbMQ
# wsrA3YP1N8BYHZLjnWa5/OYRqsJH5O+ak0bP4UTqCICDuQ4OQfsnYJl+smn4Wofl
# hRQnFlC4Ds31XHVESImAqRgdRdV15tgDY5BL2IwzDaA=
# SIG # End signature block

View file

@ -351,17 +351,17 @@ exit
# RGlnaUNlcnQsIEluYy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgVGlt
# ZVN0YW1waW5nIFJTQTQwOTYgU0hBMjU2IDIwMjUgQ0ExAhAIT9wzT35FTtvDD4/5
# khg1MA0GCWCGSAFlAwQCAQUAoGkwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAc
# BgkqhkiG9w0BCQUxDxcNMjYxMDIyMTM1OTMwWjAvBgkqhkiG9w0BCQQxIgQgOHLe
# BgkqhkiG9w0BCQUxDxcNMjYxMDI5MDkyNTA3WjAvBgkqhkiG9w0BCQQxIgQgOHLe
# 10ZbE4bBoaCBq6mdTnn2K0ymg6PqwqP+YaWiyT4wDQYJKoZIhvcNAQEBBQAEggIA
# P+BfQ1XdMydyUvDYUcHiIiOKFhvkbS1nZH1JuK6zpCXhOOhGjf7s5o3KFnYCFG8p
# 80lXtRb9Odpoo7su2+PJxCjEyB1BQv/AL40pIic1fHFF0sxEdtI5WbYAIcvAzAr1
# GAeAw8WMyZw3cBGHSP7SSEfCBpA4nf3a8RMU/3fLGcJmjYtWtSYmbpsi7/A8InUC
# Ly65wl2KlJPpGhxuYBsGzWr0VzkUDLW4qw0yAor77T8xslBsi4giVLKys8/zlJCO
# UKev3VTdEyIQTOdrcP5cbyrN6u8aWpUXKqrHRPiVn7VNS7C+NdRkBIsrbG9SEw1A
# +ALHrDmOKCo10cJiPJmbpLl7FiGKkFR0jcT7m/ojXPFzYZYIN8Lma8HJCRG4j0OQ
# 7mAfhDhusQcL5AMLnNPCy68Wqajinl1+Bo5IlaRJCryUG606HsgKE6JsJ5cFSHm7
# nXCpJSL4sJfCV/t5e/hE2hZfxYGjDgKwPlSppzTjW2GJNiu5ZlURPG8T5txmxnDt
# w0PpVdnfIFX+PsbfeQ5yHzTxDqrgzWM6iz8nHfrpMiswhM7kSCGmHqO7ZOwAsN03
# 8b/z7kI1bQoNbkIXP55I3sLSiabFZCSvDZIgPu+pu0mP0AKBFkBxuy21XRggWmA/
# 2MnoHYCWENpjTWErTWQjni4yAGAbZftM9VB0ECoowxs=
# LTMZGeT68+1HxynHj0bcDAwTr31sysVX9nzUOkFzBaqaQjtrEMpcOdurqhZSwXl6
# o/Ilr50STTUrRlbVsxIflOw60lQzxRQsGK396siaCvcv6A+1efmVg67goEG+xcxh
# Qn54S09awYK/X3wDlbgz8NUNHsmgTR4QoYeHtQa/p2pQ6Cf99v9S/Q4d4KkrU53e
# dPVczxvLcuRwT992aXr6hXNOGRUzDxIOhqT2FHxQPA0hSofCemhtzgyf4opHUmAb
# y6WuCnxz91FVdWrqh8HaJtD7A8hSLU0xgcvp5DahoyHKSPDs9GyFcIkatP5L8Emk
# srGCaF1QGwTTvNa2QbtU6m0/zX7WM4jZmCyk0fHGKvi5GyehUYSv7GZvyt/YPeQu
# 7vIdPWrjy+rYXVFmnXHLlAWfaqz7Na3LGNHT8jyRgEMhO9Wt/aeYwogMnXbuWkSQ
# ac/Wo2B80M4EntIVIv6c5GrmCGxwAw9katccgH1NS3AlkDx/Avpjt0W4OiyfBCMg
# 8jc2uel1r3LpskQO5s4GpduJluRrxrgPoln+SJlmuLUS5CC42FH94h9AKetRNYhw
# C1p+ccLPyPmHqmvxwqFTXEjZJTEwU32vokN4zJDCWXsuVq7OzeOEbcc+EMWzNlfJ
# rlnqr72s+beaKctoSwljRI3mjRIX2AYnN7nntX7guo0=
# SIG # End signature block

View file

@ -333,17 +333,17 @@ exit
# RGlnaUNlcnQsIEluYy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgVGlt
# ZVN0YW1waW5nIFJTQTQwOTYgU0hBMjU2IDIwMjUgQ0ExAhAIT9wzT35FTtvDD4/5
# khg1MA0GCWCGSAFlAwQCAQUAoGkwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAc
# BgkqhkiG9w0BCQUxDxcNMjYxMDIyMTM1OTMxWjAvBgkqhkiG9w0BCQQxIgQgvcaw
# BgkqhkiG9w0BCQUxDxcNMjYxMDI5MDkyNTA3WjAvBgkqhkiG9w0BCQQxIgQgvcaw
# S55NsqsO8cNQM/o5pcLWgsKlsCZImMggqSii8i4wDQYJKoZIhvcNAQEBBQAEggIA
# Pwzbcf1TrlVxZSmIhiv32rVDxPVp1CdY8zyMZuvCCxyvapbHNRCxr+pzanDwdbGc
# pOxAazRL5fcywpQ192N4VUa+2C5bPPZ/GKN+7u42Acs4xXcNytEVsAKHsODqKcFI
# QdreC6bpdCuyIVuFpeyl8TIssjYtN6XQF8Be/qZI1FOPi7EUS1WHlsuXs8YaI9Aw
# 9pNXbLoR03Ry3ChPmepUskrrRmPmqRoL8S6f2KxZRggO0SfnoxjGRgNCu05Yjfgp
# Ly3vuYxUQnlj5VXGmAH0Y0QZ4mSKyC58yq3DIsRWAi7r1gY3+3gTPCwPcaj8FMAB
# Of0jIitHHE10c+dLsCPtl2uVjM/FM3y65e6COat7I/97sbdeNHr0GWhA7haJTUtZ
# C8TkB5kuparhD0KcekQnZDZCOJdbZzI90nRDsj4Hbgk6H/Gp64g5udNdyK7Yf+dX
# DSwkhQ6Zjey6AHSMkIUsa8BODz3WWfSWpoqxLgBBX4BhfD+LjfY4nWUEJDWM7wc5
# OIDaTRjGD3OPcFFOyBqp/lDS5gsi/SuO4tIs87jvVCVN9MruKUdFcT0BOzfFOYv1
# 478HTROFlLty6yoed+am4XFWarGOxyBcHCEm8paPgmZhkxSIiYzKbauBioaYEaZD
# 7a7SGkAR56/s9zpGGmvtt+ID83OtrfUylZ7QcCkd5j0=
# FczbdVVtAh1Kt5kPlzPL2bns/UAU/17lW44vNeH6IZ6Roe9SZ+w+GB5tkMB6vqtR
# DvJ/ynEL1ikYM+JA2G4AsYUVyN+LgDwuMDJkI18Liau+iMkF//wCaHq9UQNsUP3n
# oG1Zyi9YdGAHyglVrYvu7/GF1Kxifon3JLVJHq6/RKwlT03orX+ppwct3xxT8yOA
# GkoSbKKSHEoK/VaeYY4XfFpHwgUNeuweg/94M5GUKbVGJ6QyDNeoLFgS8MzNh8QF
# 0hTOXTmA5LOaukpfW02YnN76jO3X836i2LBWIn9jb9bvXZI+slvCDlmU1L3Qlnew
# /AJZv1JYhRmF6WV9z5Cmc1ETpxii/kbuj85aU1apWPqsS236/Wo0++18RE1dnQrB
# heM4O3waUgJXZRqrhICzQxwr+eEBeEeL8ByFw6cAnPoSr3j7UtPpbjonZLQuVHoC
# lnJqvc/lGs6hmdOmHVEK732F6+dR8S4SNgVis7CLnVQtRkZo7e1doR+/npMDnnAS
# UxMtKbPxoWIC+F48DpejasPS+98rhyZ0yR2Gcd4yRVTf37+1Pgn0zC6hBQlJgt4u
# YexvV2kMJizYFp+KniGVu7bxsrep8/cUnXTFxkzKFb8rqHiOZXM/RCT2dHjgCG4E
# axVIOG+56VD8pnzHyoZgBBHjjsyxCJWFcEXbl3nqFAk=
# SIG # End signature block

View file

@ -193,17 +193,17 @@ exit
# RGlnaUNlcnQsIEluYy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgVGlt
# ZVN0YW1waW5nIFJTQTQwOTYgU0hBMjU2IDIwMjUgQ0ExAhAIT9wzT35FTtvDD4/5
# khg1MA0GCWCGSAFlAwQCAQUAoGkwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAc
# BgkqhkiG9w0BCQUxDxcNMjYxMDIyMTM1OTMxWjAvBgkqhkiG9w0BCQQxIgQg6Tgk
# BgkqhkiG9w0BCQUxDxcNMjYxMDI5MDkyNTA4WjAvBgkqhkiG9w0BCQQxIgQg6Tgk
# d9vgRJTrKaa/aNqr0ugqtMxl17/Df7q35ywcJSEwDQYJKoZIhvcNAQEBBQAEggIA
# HqPO9fcFB/S6MVIdOQbai3zNPkTRN42P6weOB9R9fAthapxxn7ZtdsHrAu6JvbGq
# jo+jkgVgjbPxhuCOhFUFGT1E9jW3bJtgjDuXSdrkdmlqhOlaS5DppFsYgl81sJfd
# uFJPPJsYsx/tgepF2d2p9tXz7EDuAFEiiJmGnLuMP3zWp8pdsdxWcbE+lmjLRGUN
# WOqaFXILagR1UtkzWGriAQd0Z9+7c3OTxLgRYc5Xgjd+ZAuOG+FbBUMBEJCg86jC
# +YQLsAbSWpVlujcu5+d6CfbcLXKmq95E6Vw2kGngfpomK2/VDqyXaoJJG6NCL/Pt
# 61cx/WLJ2JM9LKTTk6iJY7ezg/ai0WH5p5rXcvGfgXbjvpEHrootzwntl/JBmAiv
# WDhsON4udWbQ3NfSXySts+BFzH+DOWWJ7192sPY7y1diDXmB4n3wN7UYQNbxac4D
# NPyf3afWVQvTXxj97R1cXDRH2gA/lLF7Acdr9+FWtUYXgcwRfajk70QR7PEKHM51
# rxMoSB5xRNOX76FymKl3d+aBvvWlI3/547scaSPSCC3qR4A4GU/sOlBDnxloZHEH
# AMiu67w+iRAwpUTneHvEXjgPg0ca1K67svFBI3xlSdChNMngrqF+orOmmc+Upn12
# FhPn4VvV27X3jE58Rq7HqnJ3S4IyQ9KOPwHSsdN/OeY=
# O1suoDc1AD00ILPpPB1JzilxO8zlJCjM/HVCrZgy4d2/9XI7zjbnoqpfQj6U+aEB
# wbNIDx4nX2r8tax29JVfWnpF18vZnKx3L+4b+upJXailgtBRgxf+TOEgayc6z0Ag
# uvEXcp3PI58k0I+DdhHbO+aprMRHXQ/nWVSaHwCjwxIlrGwek95ybGN46bOl+tzk
# BFY4u5sAqr3yXOIjc5Kf51rlVbHxY3T3LKLhBYY7HWv21VnliwmW45AUslbT4/xj
# w2T4jN83Dob1P1JyGg9caBAq1vlZuIPB705zvdV/DvrnC8M39Vy+ZNux4o3b9bHH
# M+lymJ6gw9c7EJtopISGSLmfAow56KAD7RASksGsWAcjzQZJVCQcLml8Ed3+lyYc
# ohu/er6Q+yKT3Ydse/DzkNX6F4H+6MV/hVR9CeI+yJIm2GpB2Y3GWZYyT8knsjB9
# w2Mypk/P8WlimYXLzOxkU1y8BR4KCFbkUFugJmOv31ao0O9+yPfioY1aRZNrtgsk
# cE6QqMgENyPHiJqv5YObmqPnRp9JzhGj6+pThnQbuOucanLocuC1AixioVq+jrNu
# G1/Rmdu2/t0xeJa3/hrThzbB6wMh6exuhJ6Aej84QGb1Q69jBs8Vg2OoPz9IQllq
# VObFs4e0Jyx1G6rAbPivjnApZbHziJZxBSHn2ix2BGo=
# SIG # End signature block