soms alarm

This commit is contained in:
Luc Vandenbroucke 2024-05-29 16:08:18 +02:00
parent 54ec2e1084
commit ac283fdb0e
15 changed files with 328 additions and 252 deletions

View file

@ -608,7 +608,7 @@ int EpdBase::Epd2U::ConnectAndStatus(int tokenSourceTimeoutms)
{ {
WORD dllStatus; WORD dllStatus;
int rv = 1; int rv = 1;
if (CommsInitialized == 0) StartCom(); if (CommsInitialized == 0) StartCom();
if (CommsInitialized == 0) rv = 1; if (CommsInitialized == 0) rv = 1;
else { else {
dllStatus = StartDiscover(tokenSourceTimeoutms); dllStatus = StartDiscover(tokenSourceTimeoutms);

View file

@ -16,18 +16,25 @@ void WINAPI discovery(CommsHandle hComms, DiscoveryId const discovered[], int32_
{ {
if (count > 0) if (count > 0)
{ {
memcpy(&current->Epd, &discovered[0], sizeof(DiscoveryId));
current->CurrentDeviceID = discovered[0].Id; current->CurrentDeviceID = discovered[0].Id;
current->DeviceCount = count; current->DeviceCount = count;
memcpy(&current->Epd, &discovered[0], sizeof(DiscoveryId));
SetEvent(current->hCompletion); SetEvent(current->hCompletion);
current->isMK3 = (current->Epd.Gen == EpdGeneration::Mk3); current->isMK3 = (current->Epd.Gen == EpdGeneration::Mk3);
current->EpdID = current->Epd.Id; current->EpdID = current->Epd.Id;
} }
} }
void WINAPI connectcallback(CommsHandle hComms, DiscoveryId ID)
{
current->isConnected = 1;
current->CurrentDeviceID = ID.Id;
current->DeviceCount = 1;
}
void WINAPI disconnectcallback(CommsHandle hComms, DiscoveryId ID) void WINAPI disconnectcallback(CommsHandle hComms, DiscoveryId ID)
{ {
current->EpdID = 0; current->isConnected = 0;
current->CurrentDeviceID = 0; current->CurrentDeviceID = 0;
current->DeviceCount = 0; current->DeviceCount = 0;
SetEvent(current->hCompletion); SetEvent(current->hCompletion);
@ -38,7 +45,7 @@ Epd3Base::Epd3U::Epd3U(int _comport)
port = _comport; port = _comport;
comPort[3] = 48 + _comport; comPort[3] = 48 + _comport;
CommsInitialized = 0; CommsInitialized = 0;
epdComsHandle = INVALID_HANDLE_VALUE; epdComsHandle = nullptr;
isBG = isNG = VersionOK = 0; isBG = isNG = VersionOK = 0;
Error = 123; Error = 123;
current = this; current = this;
@ -64,8 +71,10 @@ Epd3Base::Epd3U::Epd3U(int _comport)
ErrorStatus = (FaultStatusFlags)0; ErrorStatus = (FaultStatusFlags)0;
IssueCount = OtherAlarms = EEPROMBadSectors = 0; IssueCount = OtherAlarms = EEPROMBadSectors = 0;
RealTime = EpdClock = OffTime = EpdID = 0; RealTime = EpdClock = OffTime = EpdID = 0;
EPDFaulty = false;
hasAlarm = hasFault = 0;
ErrorSource = ErrorReason = ErrorData = 0; ErrorSource = ErrorReason = ErrorData = 0;
HardVersion = HardVersionMinor= SoftVersion = FunctionFlags = 0; HardVersion = HardVersionMinor = SoftVersion = FunctionFlags = 0;
K1 = K2 = K3 = K4 = K4 = K6 = 0.0F; K1 = K2 = K3 = K4 = K4 = K6 = 0.0F;
HG = SG = BC = FB = 0; HG = SG = BC = FB = 0;
@ -90,28 +99,60 @@ Epd3Base::Epd3U::Epd3U(int _comport)
Epd3Base::Epd3U::~Epd3U() Epd3Base::Epd3U::~Epd3U()
{ {
EndCom(); EndCom();
if (hCompletion != 0) { CloseHandle(hCompletion); hCompletion = 0; } if (hCompletion != 0) { CloseHandle(hCompletion); hCompletion = 0; }
//if (hWaitTimer != 0) { CloseHandle(hWaitTimer); hWaitTimer = 0; } //if (hWaitTimer != 0) { CloseHandle(hWaitTimer); hWaitTimer = 0; }
} }
DWORD Epd3Base::Epd3U::StartCom() DWORD Epd3Base::Epd3U::StartCom()
{ {
ErrorReason = 0; ErrorReason = 0;
ConnectRetries = 0;
int step = 1;
int mx = 10; int mx = 10;
epdComsHandle = INVALID_HANDLE_VALUE;
epdComsHandle = nullptr;
if (port == 0) { if (port == 0) {
CommsInitialized = 1; CommsInitialized = 1;
return 1; return 1;
} }
if (CommsInitialized == 0) {
if (CommsInitialized == 0 || epdComsHandle == nullptr) {
step = 2;
epdComsHandle = CreateReaderInterface(); epdComsHandle = CreateReaderInterface();
Dll3RV = OpenReader(epdComsHandle, comPort); if (epdComsHandle == nullptr) {
if (Dll3RV == 0) ++ConnectRetries;
{ step = 3;
Dll3RV = SetMultipleDiscoveryMode(epdComsHandle, false); Sleep(100);
CommsInitialized = 1; epdComsHandle = CreateReaderInterface(); //try again;
}
if (epdComsHandle != nullptr) {
step = 4;
Dll3RV = OpenReader(epdComsHandle, comPort); //-6 = r_OperationFailed
if (Dll3RV) { //retry
++ConnectRetries;
step = 5;
Sleep(100);
Dll3RV = OpenReader(epdComsHandle, comPort);
}
if (Dll3RV == 0)
{
step = 7;
CommsInitialized = 1;
Dll3RV = SetMultipleDiscoveryMode(epdComsHandle, false);
Dll3RV = SetResponseTimeout(epdComsHandle, 1000);
//Dll3RV = GetRetryCount(epdComsHandle, &retries); = 3
}
}
else {
Dll3RV = r_FunctionFail;
} }
} }
if (Dll3RV) goto error;
return Dll3RV;
error:
ErrorStep = step;
Error = Dll3RV;
return Dll3RV; return Dll3RV;
} }
@ -120,7 +161,7 @@ void Epd3Base::Epd3U::EndCom()
int rv; int rv;
if (CommsInitialized == 1 || CurrentDeviceID != 0) { if (CommsInitialized == 1 || CurrentDeviceID != 0) {
if (CommsInitialized == 1) { if (CommsInitialized == 1) {
if (epdComsHandle != INVALID_HANDLE_VALUE) { if (epdComsHandle != nullptr) {
DisCon(0); DisCon(0);
Dll3RV = CloseReader(epdComsHandle); Dll3RV = CloseReader(epdComsHandle);
if (Dll3RV) { if (Dll3RV) {
@ -135,7 +176,7 @@ void Epd3Base::Epd3U::EndCom()
Epd.Id = 0; Epd.Id = 0;
CurrentDeviceID = 0; CurrentDeviceID = 0;
CommsInitialized = 0; CommsInitialized = 0;
epdComsHandle = INVALID_HANDLE_VALUE; epdComsHandle = nullptr;
} }
} }
@ -146,38 +187,42 @@ void Epd3Base::Epd3U::EndCom()
/// <returns>rv=1 ,ook bij timeout <>1 voor error</returns> /// <returns>rv=1 ,ook bij timeout <>1 voor error</returns>
int Epd3Base::Epd3U::StartDiscover(int tokentimeout) int Epd3Base::Epd3U::StartDiscover(int tokentimeout)
{ {
int32_t rv=1; int32_t rv = 1;
int32_t rv2 = 0; int32_t rv2 = 0;
Error = 0; Error = 0;
if (port == 0) { if (port == 0) {
DeviceCount = 1; DeviceCount = 1;
isBG = 1; isBG = 1;
DeviceIDs[0] = 768; DeviceIDs[0] = 768;
return 0; return 0;
} }
current = this;
Dll3RV = SetDiscoveryCacheTimeout(epdComsHandle, tokentimeout); Dll3RV = SetDiscoveryCacheTimeout(epdComsHandle, tokentimeout);
//Dll3RV = Commit3(epdComsHandle); DeviceCount = 0;
DeviceCount = 0; ConnectTries = 1;
//rv2 = Cancel(epdComsHandle); Cancel bestaat niet
ResetEvent(hCompletion); ResetEvent(hCompletion);
ConnectTimerFired = 0; ConnectTimerFired = 0;
current = this; isConnected = 0;
Dll3RV = StartDiscovery(epdComsHandle, discovery); Dll3RV = StartDiscovery(epdComsHandle, discovery);
if (Dll3RV == 0) { if (Dll3RV == 0) {
Dll3RV = WaitForSingleObject(hCompletion, tokentimeout); Dll3RV = WaitForSingleObject(hCompletion, tokentimeout);
if (Dll3RV == WAIT_OBJECT_0) rv = 1; if (Dll3RV == WAIT_OBJECT_0) rv = 1;
else if (Dll3RV == WAIT_TIMEOUT) { else if (Dll3RV == WAIT_TIMEOUT) {
rv = 1; ConnectTimerFired = 1; rv = 1;
rv2= StopDiscovery(epdComsHandle); ConnectTimerFired = 1;
DeviceCount = 0; rv2 = StopDiscovery(epdComsHandle);
} else rv = 2; DeviceCount = 0;
}
else rv = 2;
} }
if ( DeviceCount > 0) { if (DeviceCount > 0) {
Dll3RV = SetConnectCallback(epdComsHandle, connectcallback);
Dll3RV = Connect3(epdComsHandle, Epd, true); Dll3RV = Connect3(epdComsHandle, Epd, true);
if (Dll3RV != 0) rv = 2; if (Dll3RV != 0) rv = 2;
else Dll3RV = SetDisconnectCallback(epdComsHandle, disconnectcallback); else {
Dll3RV = SetDisconnectCallback(epdComsHandle, disconnectcallback);
}
} }
return rv; return rv;
} }
@ -185,7 +230,7 @@ int Epd3Base::Epd3U::StartDiscover(int tokentimeout)
int Epd3Base::Epd3U::OpenDev(DiscoveryId DeviceID) int Epd3Base::Epd3U::OpenDev(DiscoveryId DeviceID)
{ {
CurrentDeviceID = DeviceID.Id; CurrentDeviceID = DeviceID.Id;
if (epdComsHandle != INVALID_HANDLE_VALUE) if (epdComsHandle != nullptr)
{ {
Dll3RV = Connect3(epdComsHandle, DeviceID, true); Dll3RV = Connect3(epdComsHandle, DeviceID, true);
} }
@ -195,12 +240,13 @@ int Epd3Base::Epd3U::OpenDev(DiscoveryId DeviceID)
int Epd3Base::Epd3U::ReOpenDev() int Epd3Base::Epd3U::ReOpenDev()
{ {
if (epdComsHandle != INVALID_HANDLE_VALUE) if (epdComsHandle != nullptr)
{ {
Dll3RV = Connect3(epdComsHandle, Epd, true); Dll3RV = Connect3(epdComsHandle, Epd, true);
} }
else { else {
Dll3RV = r_InvalidCommsHandle; } //no handle .. Dll3RV = r_InvalidCommsHandle;
} //no handle ..
return Dll3RV; return Dll3RV;
} }
@ -219,17 +265,17 @@ int Epd3Base::Epd3U::DisCon(UINT16 alarm)
Dll3RV = Disconnect(epdComsHandle); Dll3RV = Disconnect(epdComsHandle);
if (Dll3RV) { rv = Dll3RV; goto error; } if (Dll3RV) { rv = Dll3RV; goto error; }
step = 2; step = 2;
Dll3RV = WaitForSingleObject(hCompletion, 3000); Dll3RV = WaitForSingleObject(hCompletion, 3000);
switch (Dll3RV) { switch (Dll3RV) {
case WAIT_OBJECT_0: rv = 0; break; case WAIT_OBJECT_0: rv = 0; break;
case WAIT_TIMEOUT: case WAIT_TIMEOUT:
rv = 0; rv = 0;
current->CurrentDeviceID = 0; current->CurrentDeviceID = 0;
current->DeviceCount = 0; current->DeviceCount = 0;
break; break;
default: rv = 3; break; default: rv = 3; break;
} }
} }
return rv; return rv;
@ -239,12 +285,12 @@ error:
void Epd3Base::Epd3U::CloseDev(bool CloseAll) void Epd3Base::Epd3U::CloseDev(bool CloseAll)
{ {
if (epdComsHandle != INVALID_HANDLE_VALUE) { if (epdComsHandle != nullptr) {
DisCon(0); DisCon(0);
if (CloseAll) { if (CloseAll) {
CloseReader(epdComsHandle); CloseReader(epdComsHandle);
DestroyReaderInterface(epdComsHandle); DestroyReaderInterface(epdComsHandle);
epdComsHandle = INVALID_HANDLE_VALUE; epdComsHandle = nullptr;
} }
} }
} }
@ -280,9 +326,9 @@ void Epd3Base::Epd3U::DecodeStatus()
EPDIssued = checkStatus(epd3status.OperatingStatus, OpStatusFlags::EpdIssued); EPDIssued = checkStatus(epd3status.OperatingStatus, OpStatusFlags::EpdIssued);
EPDLocked = checkStatus(epd3status.OperatingStatus, OpStatusFlags::GainAdjustable); EPDLocked = checkStatus(epd3status.OperatingStatus, OpStatusFlags::GainAdjustable);
EPDTesting = checkStatus(epd3status.OperatingStatus, OpStatusFlags::DetectorTestRequested); EPDTesting = checkStatus(epd3status.OperatingStatus, OpStatusFlags::DetectorTestRequested);
EPDFaulty = checkStatus(epd3status.FaultStatus, FaultStatusFlags::EpdFaulty);
EPDNewFault = checkStatus(epd3status.FaultStatus, FaultStatusFlags::EpdFaulty); EPDFaulty = checkStatus(epd3status.FaultStatus, FaultStatusFlags::EpdFaulty);
EPDNewFault = checkStatus(epd3status.FaultStatus, FaultStatusFlags::ErrorLogged);
EPDComFault = checkStatus(epd3status.FaultStatus, FaultStatusFlags::EarlyCommsTermination); EPDComFault = checkStatus(epd3status.FaultStatus, FaultStatusFlags::EarlyCommsTermination);
EPDCalFault = checkStatus(epd3status.FaultStatus, FaultStatusFlags::NotCalibrated); EPDCalFault = checkStatus(epd3status.FaultStatus, FaultStatusFlags::NotCalibrated);
EPDDetFault = checkStatus(epd3status.FaultStatus, FaultStatusFlags::DetectorTestFail); EPDDetFault = checkStatus(epd3status.FaultStatus, FaultStatusFlags::DetectorTestFail);
@ -300,7 +346,7 @@ void Epd3Base::Epd3U::DecodeStatus()
eDosDose07Alarm = checkStatus(status, DoseAlarmFlags::DoseAlarm); eDosDose07Alarm = checkStatus(status, DoseAlarmFlags::DoseAlarm);
eDosRate07Warning = checkStatus(status, DoseAlarmFlags::LatchedRateWarning) | checkStatus(status, DoseAlarmFlags::RateWarning); eDosRate07Warning = checkStatus(status, DoseAlarmFlags::LatchedRateWarning) | checkStatus(status, DoseAlarmFlags::RateWarning);
eDosRate07Alarm = checkStatus(status, DoseAlarmFlags::LatchedRateAlarm) | checkStatus(status, DoseAlarmFlags::RateAlarm); eDosRate07Alarm = checkStatus(status, DoseAlarmFlags::LatchedRateAlarm) | checkStatus(status, DoseAlarmFlags::RateAlarm);
AlarmDoseHP07N = checkStatus(status, DoseAlarmFlags::DoseAlarm) ; AlarmDoseHP07N = checkStatus(status, DoseAlarmFlags::DoseAlarm);
AlarmRateHP07N = checkStatus(status, DoseAlarmFlags::RateAlarm) | checkStatus(status, DoseAlarmFlags::LatchedRateAlarm); AlarmRateHP07N = checkStatus(status, DoseAlarmFlags::RateAlarm) | checkStatus(status, DoseAlarmFlags::LatchedRateAlarm);
break; break;
case MeasurementId::Meas_Hp10: case MeasurementId::Meas_Hp10:
@ -316,18 +362,17 @@ void Epd3Base::Epd3U::DecodeStatus()
break; break;
} }
} }
OtherAlarmReturn = checkStatus(epd3status.AlarmStatus, AlarmStatusFlags::ReturnForRead); OtherAlarmReturn = checkStatus(epd3status.AlarmStatus, AlarmStatusFlags::ReturnForRead);
OtherAlarmBatLow = checkStatus(epd3status.AlarmStatus, AlarmStatusFlags::LowBattery); OtherAlarmBatLow = checkStatus(epd3status.AlarmStatus, AlarmStatusFlags::LowBattery);
OtherAlarmCarrier = checkStatus(epd3status.AlarmStatus, AlarmStatusFlags::TelemetryAlert); OtherAlarmCarrier = checkStatus(epd3status.AlarmStatus, AlarmStatusFlags::TelemetryAlert);
OtherAlarmBatVolt = checkStatus(epd3status.AlarmStatus, AlarmStatusFlags::LowBattery); OtherAlarmBatVolt = checkStatus(epd3status.AlarmStatus, AlarmStatusFlags::LowBattery);
eDosDoseAlarm = eDosDose10Alarm || eDosDose07Alarm || checkStatus(epd3status.AlarmStatus, AlarmStatusFlags::DoseAlarm); eDosDoseAlarm = eDosDose10Alarm || eDosDose07Alarm || checkStatus(epd3status.AlarmStatus, AlarmStatusFlags::DoseAlarm);
eDosRateAlarm = eDosRate07Alarm || eDosRate10Alarm || checkStatus(epd3status.AlarmStatus, AlarmStatusFlags::RateAlarm); eDosRateAlarm = eDosRate07Alarm || eDosRate10Alarm || checkStatus(epd3status.AlarmStatus, AlarmStatusFlags::RateAlarm);
hasAlarm = eDosDoseAlarm || eDosRateAlarm ;
if (hasAlarm) {
} hasAlarm = eDosDoseAlarm || eDosRateAlarm;
hasFault = (int)epd3status.FaultStatus != 0; hasFault = ((uint32_t)epd3status.FaultStatus & ~(uint32_t)FaultStatusFlags::ErrorLogged) != 0;
eDosBatteryWarning = OtherAlarmBatLow | OtherAlarmBatVolt; eDosBatteryWarning = OtherAlarmBatLow | OtherAlarmBatVolt;
} }
@ -337,7 +382,7 @@ void Epd3Base::Epd3U::SetTime() //Only R3
utc = TimeFunctions::NowToEpdTime(Epd.Gen == EpdGeneration::Mk2); utc = TimeFunctions::NowToEpdTime(Epd.Gen == EpdGeneration::Mk2);
token = BeginWriteRTC_R3(epdComsHandle, utc, nullptr); token = BeginWriteRTC_R3(epdComsHandle, utc, nullptr);
uint32_t r = Commit3(epdComsHandle); uint32_t r = Commit3(epdComsHandle);
Dll3RV = EndWriteRTC_R3(epdComsHandle, token); if (!r) Dll3RV = EndWriteRTC_R3(epdComsHandle, token);
} }
} }
/// <summary> /// <summary>
@ -375,14 +420,12 @@ int Epd3Base::Epd3U::ReadStatus()
ErrorSource = ErrorReason = ErrorData = 0; ErrorSource = ErrorReason = ErrorData = 0;
HardVersion = HardVersionMinor = SoftVersion = FunctionFlags = 0; HardVersion = HardVersionMinor = SoftVersion = FunctionFlags = 0;
r = ReOpenDev();
step = 1; step = 1;
token = BeginReadStatus(epdComsHandle, nullptr); token = BeginReadStatus(epdComsHandle, nullptr);
r = Commit3(epdComsHandle); r = Commit3(epdComsHandle);
r = EndReadStatus(epdComsHandle, token, &epd3status); if (!r) r = EndReadStatus(epdComsHandle, token, &epd3status);
if (r != 0) { if (r != 0) {
Error = GetErrorCode(); Error = GetErrorCode();
goto error; goto error;
} }
@ -396,16 +439,16 @@ int Epd3Base::Epd3U::ReadStatus()
uint32_t capabilities; uint32_t capabilities;
MarkNumber_t MarkNumber; MarkNumber_t MarkNumber;
VersionNumber_t VersionNumber; VersionNumber_t VersionNumber;
step = 2; step = 2;
token = BeginReadEpdIdentities(epdComsHandle, nullptr); token = BeginReadEpdIdentities(epdComsHandle, nullptr);
r = Commit3(epdComsHandle); r = Commit3(epdComsHandle);
r = EndReadEpdIdentities(epdComsHandle, token, &EpdID32, (EpdTypes*)&EpdType, &capabilities, &MarkNumber, &VersionNumber, NULL, 0); if (!r) r = EndReadEpdIdentities(epdComsHandle, token, &EpdID32, (EpdTypes*)&EpdType, &capabilities, &MarkNumber, &VersionNumber, NULL, 0);
if (r != 0) { if (r != 0) {
Error = GetErrorCode(); Error = GetErrorCode();
goto error; goto error;
} }
EpdID = EpdID32; EpdID = EpdID32;
isBG = (EpdType == EpdTypes::Mk2BetaGamma || EpdType == EpdTypes::Mk3BetaGamma); isBG = (EpdType == EpdTypes::Mk2BetaGamma || EpdType == EpdTypes::Mk3BetaGamma);
isNG = (EpdType == EpdTypes::Mk2Neutron || EpdType == EpdTypes::Mk3Neutron); isNG = (EpdType == EpdTypes::Mk2Neutron || EpdType == EpdTypes::Mk3Neutron);
@ -413,16 +456,17 @@ int Epd3Base::Epd3U::ReadStatus()
HardVersionMinor = MarkNumber.Minor; HardVersionMinor = MarkNumber.Minor;
SoftVersion = VersionNumber.Major; SoftVersion = VersionNumber.Major;
VersionOK = true; VersionOK = true;
DecodeStatus(); //Alarm status... DecodeStatus(); //Alarm status...
step = 3; step = 3;
token = BeginReadCounts(epdComsHandle, nullptr, 0, nullptr); token = BeginReadCounts(epdComsHandle, nullptr, 0, nullptr);
r = Commit3(epdComsHandle); r = Commit3(epdComsHandle);
r = EndReadCounts(epdComsHandle, token, Counts, MaxCounts, &countsRead, &utc, &seconds); if (!r) r = EndReadCounts(epdComsHandle, token, Counts, MaxCounts, &countsRead, &utc, &seconds);
// - 101 = InvalidParam // - 101 = InvalidParam
// - 104 = FunctionFail, // - 104 = FunctionFail,
if (r != 0 && r != -104) { if (r != 0 && r != -104) {
Error = GetErrorCode(); Error = GetErrorCode();
goto error; goto error;
} }
decodeCounters(countsRead); //HG,SG .. decodeCounters(countsRead); //HG,SG ..
@ -436,7 +480,7 @@ int Epd3Base::Epd3U::ReadStatus()
r = Commit3(epdComsHandle); r = Commit3(epdComsHandle);
r = EndReadWearerId(epdComsHandle, token, &mk3WearerID); r = EndReadWearerId(epdComsHandle, token, &mk3WearerID);
if (r != 0) { if (r != 0) {
Error = GetErrorCode(); Error = GetErrorCode();
goto error; goto error;
} }
@ -446,9 +490,9 @@ int Epd3Base::Epd3U::ReadStatus()
step = 5; step = 5;
token = BeginReadWearerId(epdComsHandle, static_cast<uint16_t>(WearerIdType::WearerId_Primary), nullptr); token = BeginReadWearerId(epdComsHandle, static_cast<uint16_t>(WearerIdType::WearerId_Primary), nullptr);
r = Commit3(epdComsHandle); r = Commit3(epdComsHandle);
r = EndReadWearerId(epdComsHandle, token, &mk3WearerID); if (!r) r = EndReadWearerId(epdComsHandle, token, &mk3WearerID);
if (r != 0) { if (r != 0) {
Error = GetErrorCode(); Error = GetErrorCode();
goto error; goto error;
} }
@ -465,7 +509,7 @@ int Epd3Base::Epd3U::ReadStatus()
if (utc == 0) { if (utc == 0) {
token = BeginReadRTC(epdComsHandle, nullptr); token = BeginReadRTC(epdComsHandle, nullptr);
r = Commit3(epdComsHandle); r = Commit3(epdComsHandle);
r = EndReadRTC(epdComsHandle, token, &utc); //EpdClock for MK2 if (!r) r = EndReadRTC(epdComsHandle, token, &utc); //EpdClock for MK2
if (r) goto error; if (r) goto error;
EpdClock = utc; EpdClock = utc;
utc = TimeFunctions::NowToEpdTime(true); utc = TimeFunctions::NowToEpdTime(true);
@ -484,7 +528,7 @@ error:
Error = r; Error = r;
ErrorStep = step; ErrorStep = step;
return r; return r;
} }
/// <summary> /// <summary>
/// discover, connect and read status /// discover, connect and read status
@ -495,7 +539,7 @@ int Epd3Base::Epd3U::ConnectAndStatus(int tokenSourceTimeout)
{ {
WORD dllStatus; WORD dllStatus;
int rv = 1; int rv = 1;
Error = 0; ErrorStep = 0; Error = 0; ErrorStep = 0; hasAlarm = hasFault = 0;
if (CommsInitialized == 0) StartCom(); if (CommsInitialized == 0) StartCom();
if (CommsInitialized) { if (CommsInitialized) {
dllStatus = StartDiscover(tokenSourceTimeout); dllStatus = StartDiscover(tokenSourceTimeout);
@ -505,7 +549,7 @@ int Epd3Base::Epd3U::ConnectAndStatus(int tokenSourceTimeout)
else rv = 0; else rv = 0;
} }
else rv = 1; else rv = 1;
return rv; return rv;
} }
/// <summary> /// <summary>
@ -780,9 +824,9 @@ WORD Epd3Base::Epd3U::ReadSensitivitiesAndTresholds()
if (r != 0) if (r != 0)
goto error; goto error;
decodedTresholds(numTresholds); // HG, SG, BC, FB, BC, FB decodedTresholds(numTresholds); // HG, SG, BC, FB, BC, FB
r = ReadCal();// K1 = K2 = K3 = K4 = K4 = K6 r = ReadCal();// K1 = K2 = K3 = K4 = K4 = K6
} }
return r; return r;
error: error:
@ -807,12 +851,11 @@ WORD Epd3Base::Epd3U::ReadDoses()
ErrorSource = ErrorReason = ErrorData = 0; ErrorSource = ErrorReason = ErrorData = 0;
K1 = 1; K2 = 2; K3 = 3; K4 = 4; K5 = 5; K6 = 6; K1 = 1; K2 = 2; K3 = 3; K4 = 4; K5 = 5; K6 = 6;
SG = 7; BC = 8; FB = 9; HG = 10; SG = 7; BC = 8; FB = 9; HG = 10;
return 0; return r_OK;
} }
numDoses = 0; utc = 0; numDoses = 0; utc = 0;
SetResponseTimeout(epdComsHandle, 2000);
step = 1; step = 1;
token = BeginReadDoses(epdComsHandle, nullptr, 0, nullptr); token = BeginReadDoses(epdComsHandle, nullptr, 0, nullptr);
r = Commit3(epdComsHandle); r = Commit3(epdComsHandle);
@ -839,7 +882,7 @@ WORD Epd3Base::Epd3U::ReadDoses()
Knocks = quality.Knocks; Knocks = quality.Knocks;
Resets = quality.PowerCycles; Resets = quality.PowerCycles;
step = 4; step = 4;
token = BeginReadPeakRates(epdComsHandle, nullptr, 0, nullptr); token = BeginReadPeakRates(epdComsHandle, nullptr, 0, nullptr);
r = Commit3(epdComsHandle); r = Commit3(epdComsHandle);
@ -849,12 +892,15 @@ WORD Epd3Base::Epd3U::ReadDoses()
decodePeakRates(numRates); decodePeakRates(numRates);
step = 5; step = 5;
r= ReadSensitivitiesAndTresholds(); //K1 .. K6, SG , BC ,FB , HG r = ReadSensitivitiesAndTresholds(); //K1 .. K6, SG , BC ,FB , HG
if (r != 0) if (r != 0)
goto error; goto error;
return r; return r;
error: error:
Error = r;
ErrorStep = step;
return r; return r;
} }
/// <summary> /// <summary>
@ -869,28 +915,30 @@ int Epd3Base::Epd3U::ClearDoses()
token = BeginClearTotalDose(epdComsHandle, nullptr); token = BeginClearTotalDose(epdComsHandle, nullptr);
r = Commit3(epdComsHandle); r = Commit3(epdComsHandle);
if (!r) r = EndClearTotalDose(epdComsHandle, token); if (!r) r = EndClearTotalDose(epdComsHandle, token);
if (r != 0 && r!= -105 ) if (r != 0 && r != r_InvalidOp)
goto error; goto error;
step++; step++;
token = BeginClearDose(epdComsHandle, nullptr); token = BeginClearDose(epdComsHandle, nullptr);
r = Commit3(epdComsHandle); r = Commit3(epdComsHandle);
if (!r) r = EndClearDose(epdComsHandle, token); if (!r) r = EndClearDose(epdComsHandle, token);
if (r != 0 && r != -105) if (r != 0 && r != r_InvalidOp)
goto error; goto error;
step++; step++;
token = BeginClearPeakRates(epdComsHandle, nullptr); token = BeginClearPeakRates(epdComsHandle, nullptr);
r = Commit3(epdComsHandle); r = Commit3(epdComsHandle);
if (!r) r = EndClearPeakRates(epdComsHandle, token); if (!r) r = EndClearPeakRates(epdComsHandle, token);
if (r != 0 && r != -105) if (r != 0 && r != r_InvalidOp)
goto error; goto error;
if (r == -105) r = 0; if (r == r_InvalidOp) r = 0;
return r;
error:
ErrorStep = step;
Error = r;
return r; return r;
error:
return r;
} }
int Epd3Base::Epd3U::ClearAlarms() int Epd3Base::Epd3U::ClearAlarms()
@ -911,7 +959,7 @@ int Epd3Base::Epd3U::ClearAlarms()
if (!r) r = EndClearLatchedAlarms(epdComsHandle, token); if (!r) r = EndClearLatchedAlarms(epdComsHandle, token);
if (r != 0 && r != -105) if (r != 0 && r != -105)
goto error; goto error;
if (r == -105) r = 0; if (r == -105) r = 0;
return r; return r;
@ -925,7 +973,7 @@ WORD Epd3Base::Epd3U::PrepareForIssue()
int rv = 0; int rv = 0;
int step = 0; int step = 0;
if (port == 0) return 0; if (port == 0) return 0;
step = 1; step = 1;
if (DetectorsOn) { if (DetectorsOn) {
token = BeginEpdOnOff(epdComsHandle, 0, nullptr); token = BeginEpdOnOff(epdComsHandle, 0, nullptr);
@ -945,7 +993,7 @@ WORD Epd3Base::Epd3U::PrepareForIssue()
step = 3; step = 3;
rv = ReOpenDev(); rv = ReOpenDev();
step = 4; step = 4;
rv = ClearDoses(); rv = ClearDoses();
if (rv != 0) if (rv != 0)
@ -955,7 +1003,7 @@ WORD Epd3Base::Epd3U::PrepareForIssue()
rv = ClearAlarms(); rv = ClearAlarms();
if (rv != 0) if (rv != 0)
goto error; goto error;
return rv; return rv;
@ -1008,7 +1056,7 @@ WORD Epd3Base::Epd3U::WriteAlarmTresholds() {
if (isNeutron) measID = (uint8_t)MeasurementId::Meas_Hp10G; else measID = (uint8_t)MeasurementId::Meas_Hp10; if (isNeutron) measID = (uint8_t)MeasurementId::Meas_Hp10G; else measID = (uint8_t)MeasurementId::Meas_Hp10;
hp10tresholds.MeasId = measID; hp10tresholds.MeasId = measID;
encodeTreshold(&hp10tresholds); encodeTreshold(&hp10tresholds);
token = BeginWriteAlarmThresholds(epdComsHandle, (uint8_t)hp10tresholds.MeasId, (uint8_t)hp10tresholds.NumberThresholds, hp10tresholds.Thresholds, nullptr); token = BeginWriteAlarmThresholds(epdComsHandle, (uint8_t)hp10tresholds.MeasId, (uint8_t)hp10tresholds.NumberThresholds, hp10tresholds.Thresholds, nullptr);
r = Commit3(epdComsHandle); r = Commit3(epdComsHandle);
if (r != 0) if (r != 0)
@ -1048,9 +1096,10 @@ error:
WORD Epd3Base::Epd3U::DeIssue() WORD Epd3Base::Epd3U::DeIssue()
{ {
int r = 1; int r = 1;
int ErrorStep = 0; int ErrorStep = 0;
if (port == 0) return 0; if (port == 0) return 0;
if (CurrentDeviceID==0) return 0; if (CurrentDeviceID == 0) return 0;
//ReOpenDev(); //ReOpenDev();
ErrorStep = 1; ErrorStep = 1;
@ -1058,21 +1107,21 @@ WORD Epd3Base::Epd3U::DeIssue()
ErrorStep = 2; ErrorStep = 2;
r = ClearDoses(); r = ClearDoses();
ErrorStep = 3; ErrorStep = 3;
if (EPDIssued) { if (EPDIssued) {
token = BeginDeissueEPD(epdComsHandle, nullptr); token = BeginDeissueEPD(epdComsHandle, nullptr);
r = Commit3(epdComsHandle); r = Commit3(epdComsHandle);
r = EndDeissueEPD(epdComsHandle, token); if (!r) r = EndDeissueEPD(epdComsHandle, token);
if (r != 0) if (r)
r = 0; // goto error; r = 0; // goto error;
} }
ErrorStep = 4; ErrorStep = 4;
token = BeginEpdOnOff(epdComsHandle, 0, nullptr); token = BeginEpdOnOff(epdComsHandle, 0, nullptr);
r = Commit3(epdComsHandle); r = Commit3(epdComsHandle);
r = EndEpdOnOff(epdComsHandle, token); if (!r) r = EndEpdOnOff(epdComsHandle, token);
if (r != 0) if (r)
goto error; goto error;
ErrorStep = 5; ErrorStep = 5;
@ -1093,7 +1142,7 @@ WORD Epd3Base::Epd3U::WriteWearer() {
token = BeginSetBaselineCounters(epdComsHandle, nullptr); token = BeginSetBaselineCounters(epdComsHandle, nullptr);
r = Commit3(epdComsHandle); r = Commit3(epdComsHandle);
r = EndSetBaselineCounters(epdComsHandle, token); r = EndSetBaselineCounters(epdComsHandle, token);
if (r != 0) if (r != 0)
goto error; goto error;
IdString_t mk3WearerID; IdString_t mk3WearerID;
@ -1102,7 +1151,7 @@ WORD Epd3Base::Epd3U::WriteWearer() {
mk3WearerID.IdType = (uint16_t)WearerIdType::WearerId_Name; mk3WearerID.IdType = (uint16_t)WearerIdType::WearerId_Name;
mk3WearerID.Length = 23; mk3WearerID.Length = 23;
memcpy(mk3WearerID.Utf8String, WearerName, 23); memcpy(mk3WearerID.Utf8String, WearerName, 23);
step = 1; step = 1;
token = BeginWriteWearerId(epdComsHandle, mk3WearerID, nullptr); token = BeginWriteWearerId(epdComsHandle, mk3WearerID, nullptr);
r = Commit3(epdComsHandle); r = Commit3(epdComsHandle);
@ -1113,7 +1162,7 @@ WORD Epd3Base::Epd3U::WriteWearer() {
mk3WearerID.IdType = (uint16_t)WearerIdType::WearerId_Primary; mk3WearerID.IdType = (uint16_t)WearerIdType::WearerId_Primary;
mk3WearerID.Length = 13; mk3WearerID.Length = 13;
memcpy(mk3WearerID.Utf8String, WearerID, 13); memcpy(mk3WearerID.Utf8String, WearerID, 13);
step = 2; step = 2;
token = BeginWriteWearerId(epdComsHandle, mk3WearerID, nullptr); token = BeginWriteWearerId(epdComsHandle, mk3WearerID, nullptr);
r = Commit3(epdComsHandle); r = Commit3(epdComsHandle);
@ -1135,7 +1184,7 @@ error:
WORD Epd3Base::Epd3U::Issue(bool PrepareDone) WORD Epd3Base::Epd3U::Issue(bool PrepareDone)
{ {
int r=0; int r = 0;
int step = 0; int step = 0;
int tries = 0; int tries = 0;
if (port == 0) return r; if (port == 0) return r;
@ -1145,7 +1194,7 @@ WORD Epd3Base::Epd3U::Issue(bool PrepareDone)
r = PrepareForIssue(); r = PrepareForIssue();
if (r) goto error; if (r) goto error;
} }
/*if (isMK3) { /*if (isMK3) {
token = BeginEnableProtectedSession_R3(epdComsHandle, 1, nullptr); token = BeginEnableProtectedSession_R3(epdComsHandle, 1, nullptr);
@ -1155,14 +1204,14 @@ WORD Epd3Base::Epd3U::Issue(bool PrepareDone)
goto error; goto error;
}*/ }*/
step = 1; step = 1;
r=ReOpenDev(); r = ReOpenDev();
if (r) goto error; if (r) goto error;
step = 2; step = 2;
r = WriteAlarmTresholds(); r = WriteAlarmTresholds();
if (r != 0) if (r != 0)
goto error; goto error;
step = 3; step = 3;
r = WriteWearer(); r = WriteWearer();
if (r != 0) if (r != 0)
@ -1172,14 +1221,14 @@ WORD Epd3Base::Epd3U::Issue(bool PrepareDone)
step = 4; step = 4;
//EPDIssued //EPDIssued
//if (!DetectorsOn) { //if (!DetectorsOn) {
token = BeginEpdOnOff(epdComsHandle, 1, nullptr); token = BeginEpdOnOff(epdComsHandle, 1, nullptr);
r = Commit3(epdComsHandle); r = Commit3(epdComsHandle);
if (!r) r = EndEpdOnOff(epdComsHandle, token); if (!r) r = EndEpdOnOff(epdComsHandle, token);
// OKRV = EpdOn(); OKRV = Commit3(); // OKRV = EpdOn(); OKRV = Commit3();
if (r != 0) if (r != 0)
r=0; r = 0;
//} //}
//step = 5; //step = 5;
//ReOpenDev(); //ReOpenDev();
@ -1196,13 +1245,13 @@ WORD Epd3Base::Epd3U::Issue(bool PrepareDone)
r = EndIssueEPD(epdComsHandle, token); r = EndIssueEPD(epdComsHandle, token);
} }
if (r) if (r)
goto error; goto error;
/*if (isMK3) { /*if (isMK3) {
token = BeginEnableProtectedSession_R3(epdComsHandle, 0, nullptr); token = BeginEnableProtectedSession_R3(epdComsHandle, 0, nullptr);
r = Commit3(epdComsHandle); r = Commit3(epdComsHandle);
r = EndEnableProtectedSession_R3(epdComsHandle, token); r = EndEnableProtectedSession_R3(epdComsHandle, token);
if (r) if (r)
goto error; goto error;
}*/ }*/
@ -1227,6 +1276,7 @@ error:
WORD Epd3Base::Epd3U::EPDReadExtraStatus() WORD Epd3Base::Epd3U::EPDReadExtraStatus()
{ {
if (port == 0) return 1; if (port == 0) return 1;
uint32_t r;
//byBatADC = bySupplyADC = 0; //byBatADC = bySupplyADC = 0;
/*CommitRV = ReadA2ConfigStatus( /*CommitRV = ReadA2ConfigStatus(
&byBatADC, &byBatADC,
@ -1236,9 +1286,9 @@ WORD Epd3Base::Epd3U::EPDReadExtraStatus()
if (CommitRV == 1) CommitRV = Commit3();*/ if (CommitRV == 1) CommitRV = Commit3();*/
token = BeginReadBaselineCounts(epdComsHandle, nullptr); token = BeginReadBaselineCounts(epdComsHandle, nullptr);
uint32_t r = Commit3(epdComsHandle); r = Commit3(epdComsHandle);
r = EndReadBaselineCounts(epdComsHandle, token, Counts, 10, &utc, &countsRead); if (!r) r = EndReadBaselineCounts(epdComsHandle, token, Counts, 10, &utc, &countsRead);
decodeBaseCounters(countsRead); if (!r) decodeBaseCounters(countsRead);
//if (CommitRV == 1) CommitRV = ReadCounts(&D1, &D2, &D3, &D4, &CountsClock); //if (CommitRV == 1) CommitRV = ReadCounts(&D1, &D2, &D3, &D4, &CountsClock);
//if (CommitRV == 1) CommitRV = Commit3(); //if (CommitRV == 1) CommitRV = Commit3();
//if (CommitRV == 1) CommitRV = ReadBaseCounts(&BaseD1, &BaseD2, &BaseD3, &BaseD4, &BaseCountsClock); //if (CommitRV == 1) CommitRV = ReadBaseCounts(&BaseD1, &BaseD2, &BaseD3, &BaseD4, &BaseCountsClock);
@ -1283,11 +1333,10 @@ error:
int Epd3Base::Epd3U::GetAll(bool Closeconnection) int Epd3Base::Epd3U::GetAll(bool Closeconnection)
{ {
int rv = 0, step=1; int rv = 0, step = 1;
rv = ReadDoses(); rv = ReadDoses();
step++; step=2;
if (!rv) rv = ReadAlarmTresholds(); if (!rv) rv = ReadAlarmTresholds();
if (Closeconnection) EndCom(); if (Closeconnection) EndCom();
return rv; return rv;
} }
@ -1296,20 +1345,16 @@ int Epd3Base::Epd3U::GetAllDeissue(bool reconnect)
{ {
int rv = 0; int rv = 0;
int step = 0; int step = 0;
/*if (reconnect)
rv = ReOpenDev();
if (!rv) goto error;*/
step = 1; step = 1;
rv = ReadDoses(); //0 = success rv = ReadDoses(); //0 = success
if (rv) goto error; if (rv) goto error;
//rv = ReadAlarmTresholds(); //0 = success //rv = ReadAlarmTresholds(); //0 = success
step = 2; step = 2;
rv = EPDReadExtraStatus(); rv = EPDReadExtraStatus();
if (rv) goto error; if (rv) goto error;
step = 3; step = 3;
rv = DeIssue(); //does close rv = DeIssue(); //does close
if (rv) goto error; if (rv) goto error;
@ -1321,12 +1366,12 @@ error:
return rv; return rv;
} }
int Epd3Base::Epd3U::IssueAndCheck(float gain,float ChirpRate) int Epd3Base::Epd3U::IssueAndCheck(float gain, float ChirpRate)
{ {
int rv = 0; int rv = 0;
int step = 0; int step = 0;
rv = ReOpenDev(); if (!isConnected) rv = ReOpenDev();
if (rv) goto error; if (rv) goto error;
if (isNG) { if (isNG) {
@ -1343,7 +1388,7 @@ int Epd3Base::Epd3U::IssueAndCheck(float gain,float ChirpRate)
} }
} }
step = 3; step = 3;
rv = SetChirp( ChirpRate); rv = SetChirp(ChirpRate);
if (rv) goto error; if (rv) goto error;
step = 4; step = 4;
@ -1363,11 +1408,11 @@ error:
int Epd3Base::Epd3U::WriteConfig(void) int Epd3Base::Epd3U::WriteConfig(void)
{ {
if (port == 0 || WriteConfig32==0) return 1; if (port == 0 || WriteConfig32 == 0) return 1;
int32_t r = 0; int32_t r = 0;
ECLen = 32; ECLen = 32;
token = BeginWriteAccessLevel(epdComsHandle, AccessLevel_t::Admin, EC, ECLen, nullptr); token = BeginWriteAccessLevel(epdComsHandle, AccessLevel_t::Admin, EC, ECLen, nullptr);
r = Commit3(epdComsHandle); r = Commit3(epdComsHandle);
r = EndWriteAccessLevel(epdComsHandle, token); r = EndWriteAccessLevel(epdComsHandle, token);
@ -1399,7 +1444,7 @@ int Epd3Base::Epd3U::WriteConfig(void)
{ 6,0x97FF,0xFFF9 }, { 6,0x97FF,0xFFF9 },
{ 7,0x97FF,0xFFD3 }, { 7,0x97FF,0xFFD3 },
{ 8,0x97FF,0xFFFF } { 8,0x97FF,0xFFFF }
}; };
// 0x1 Operation Menu Back /0x2 On / Off 0x4 Clear Dose 0x8 Toggle Telemtry 0x10 Responder Trigger // 0x1 Operation Menu Back /0x2 On / Off 0x4 Clear Dose 0x8 Toggle Telemtry 0x10 Responder Trigger
// 1 0 0 0 0 // 1 0 0 0 0
@ -1474,7 +1519,7 @@ int Epd3Base::Epd3U::SetChirp(float Sensitivity)
if (Sensitivity > 0.001F) { if (Sensitivity > 0.001F) {
enable = 1; enable = 1;
token = BeginWriteChirpSensitivity(epdComsHandle, Sensitivity, nullptr); token = BeginWriteChirpSensitivity(epdComsHandle, Sensitivity, nullptr);
r = Commit3(epdComsHandle); r = Commit3(epdComsHandle);
if (!r) r = EndWriteChirpSensitivity(epdComsHandle, token); if (!r) r = EndWriteChirpSensitivity(epdComsHandle, token);
} }

View file

@ -37,6 +37,9 @@ namespace Epd3Base {
WORD ErrorReason; WORD ErrorReason;
WORD ErrorData; WORD ErrorData;
int ConnectRetries = 0;
BYTE isConnected = 0;
int32_t Dll3RV; int32_t Dll3RV;
UINT16 EndSessionControl; UINT16 EndSessionControl;
public: public:
@ -47,13 +50,17 @@ namespace Epd3Base {
private: private:
WORD CommsInitialized = 0; WORD CommsInitialized = 0;
public: public:
Epd3U(int _comport); Epd3U(int _comport);
~Epd3U(); ~Epd3U();
DWORD StartCom(); DWORD StartCom();
void EndCom(); void EndCom();
int StartDiscover(int tokentimeout); int StartDiscover(int tokentimeout);
//OperatingStatus //OperatingStatus
BYTE DetectorsOn = 0; BYTE DetectorsOn = 0;
BYTE EPDIssued = 0; BYTE EPDIssued = 0;
@ -127,6 +134,7 @@ namespace Epd3Base {
bool isMK3 = false; bool isMK3 = false;
bool hasAlarm = false; bool hasAlarm = false;
bool hasFault = false; bool hasFault = false;
SYSTEMTIME tRealTime; SYSTEMTIME tRealTime;
//Wearer //Wearer
@ -196,7 +204,7 @@ namespace Epd3Base {
BYTE ConnectTimerFired; BYTE ConnectTimerFired;
int ConnectTries;
OpStatusFlags OperatingStatus; OpStatusFlags OperatingStatus;
FaultStatusFlags ErrorStatus; FaultStatusFlags ErrorStatus;

View file

@ -82,7 +82,7 @@ int EpdBaseClr::Epd2::Close()
} }
int EpdBaseClr::Epd2::DecodeStatus(Epd3Base::Epd3U* epd) int EpdBaseClr::Epd2::DecodeStatus(Epd3Base::Epd3U* epd)
{ {
epd->DecodeStatus(); epd->DecodeStatus(); // set hasAlarm
//OperatingStatus //OperatingStatus
DetectorsOn = epd->DetectorsOn; DetectorsOn = epd->DetectorsOn;
EPDIssued = epd->EPDIssued; EPDIssued = epd->EPDIssued;
@ -180,7 +180,9 @@ int EpdBaseClr::Epd2::AfterGetStatus(EpdBase::Epd2U *epd)
otherAlarms = epd->OtherAlarms; otherAlarms = epd->OtherAlarms;
errorStatus = epd->ErrorStatus; errorStatus = epd->ErrorStatus;
operatingStatus = epd->OperatingStatus; operatingStatus = epd->OperatingStatus;
hasAlarm = epd->hasAlarm; //hasAlarm = epd->hasAlarm; //?1
eDoshasAlarm = epd->hasAlarm;
eDosHasFault = epd->hasFault;
EpdID = epd->EpdID; EpdID = epd->EpdID;
HardVersion = epd->HardVersion / 100; HardVersion = epd->HardVersion / 100;
HardVersionMinor = epd->HardVersion % 100; HardVersionMinor = epd->HardVersion % 100;
@ -190,6 +192,7 @@ int EpdBaseClr::Epd2::AfterGetStatus(EpdBase::Epd2U *epd)
DecodeStatus(epd); DecodeStatus(epd);
return 0; return 0;
} }
int EpdBaseClr::Epd2::AfterGetStatus(Epd3Base::Epd3U* epd) int EpdBaseClr::Epd2::AfterGetStatus(Epd3Base::Epd3U* epd)
{ {
EPDIssued= epd->EPDIssued; EPDIssued= epd->EPDIssued;
@ -205,14 +208,16 @@ int EpdBaseClr::Epd2::AfterGetStatus(Epd3Base::Epd3U* epd)
otherAlarms = (int)epd->OtherAlarms; otherAlarms = (int)epd->OtherAlarms;
errorStatus = (int)epd->ErrorStatus; errorStatus = (int)epd->ErrorStatus;
operatingStatus = (int)epd->OperatingStatus; operatingStatus = (int)epd->OperatingStatus;
hasAlarm = epd->hasAlarm;
eDoshasAlarm = epd->hasAlarm;
eDosHasFault = epd->hasFault;
EpdID = epd->EpdID; EpdID = epd->EpdID;
HardVersion = epd->HardVersion; HardVersion = epd->HardVersion;
HardVersionMinor = epd->HardVersionMinor; HardVersionMinor = epd->HardVersionMinor;
SoftVersion = epd->SoftVersion; SoftVersion = epd->SoftVersion;
FunctionFlags = epd->FunctionFlags; FunctionFlags = epd->FunctionFlags;
CountsClock = epd->EpdClock; CountsClock = epd->EpdClock;
DecodeStatus( epd); DecodeStatus( epd); // zet hasAlarm
return 0; return 0;
} }
int EpdBaseClr::Epd2::AfterGetStatus() int EpdBaseClr::Epd2::AfterGetStatus()
@ -251,6 +256,7 @@ int EpdBaseClr::Epd2::GetDoses(EpdBase::Epd2U* epd)
} }
int EpdBaseClr::Epd2::AfterGetDoses(Epd3Base::Epd3U* epd) int EpdBaseClr::Epd2::AfterGetDoses(Epd3Base::Epd3U* epd)
{ {
eDoshasAlarm = eDosHasFault = false;
int rv = 0; int rv = 0;
rv = 0; rv = 0;
GetDosesError = 0; GetDosesError = 0;
@ -316,8 +322,8 @@ int EpdBaseClr::Epd2::GetDoses(Epd3Base::Epd3U* epd)
{ {
int rv = 1; int rv = 1;
Hp10 = Hp07 = 0.0; Hp10 = Hp07 = 0.0;
int ReadDosesRV = epd->ReadDoses(); int ReadDosesRV = epd->ReadDoses(); //0 = succes
if (ReadDosesRV == 0) { if (ReadDosesRV == 0) {
rv = AfterGetDoses(epd3); rv = AfterGetDoses(epd3);
} }
@ -828,14 +834,15 @@ void EpdBaseClr::Epd2::InitData()
/// <returns>0=success 1=Connect error 2=TO 3=StatusReadError</returns> /// <returns>0=success 1=Connect error 2=TO 3=StatusReadError</returns>
int EpdBaseClr::Epd2::ConnectAndStatus() int EpdBaseClr::Epd2::ConnectAndStatus()
{ {
//0 = ok, 2=TO , anders error
int rv = 1; int rv = 1;
int step = 0; int step = 0;
ErrorStep = ErrorRV = 0; ErrorStep = ErrorRV = 0; ConnectError = 0; eDoshasAlarm = eDosHasFault = false;
if (!onlyMK2) epd->EndCom(); //indien Mk2 if (!onlyMK2) epd->EndCom(); //indien Mk2
InitData(); InitData();
//Sleep(100); Sleep(100);
step = 1; step = 1;
if (onlyMK2 || !epd3) if (onlyMK2 || !epd3)
rv = epd->ConnectAndStatus(tokenSourceTimeout); rv = epd->ConnectAndStatus(tokenSourceTimeout);
@ -889,6 +896,7 @@ error:
ErrorRV = rv; ErrorRV = rv;
return rv; return rv;
} }
void EpdBaseClr::Epd2::WaitEpd() void EpdBaseClr::Epd2::WaitEpd()
{ {
int rv = 0; //start int rv = 0; //start
@ -905,10 +913,11 @@ void EpdBaseClr::Epd2::WaitEpd()
_EpdTO(this, gcnew EpdTOEventArgs(0, 0)); // epd3->ConnectTries, epd3->ConnectTimerFired)); _EpdTO(this, gcnew EpdTOEventArgs(0, 0)); // epd3->ConnectTries, epd3->ConnectTimerFired));
} }
else if (rv > 0 && _EpdError != nullptr) { else if (rv > 0 && _EpdError != nullptr) {
_EpdError(this, gcnew EpdErrorEventArgs(rv,ErrorRV,ErrorStep)); _EpdError(this, gcnew EpdErrorEventArgs(rv, ErrorRV, ErrorStep));
} }
return; return;
} }
System::Threading::Tasks::Task^ EpdBaseClr::Epd2::Wait(int timeout, int Retries) System::Threading::Tasks::Task^ EpdBaseClr::Epd2::Wait(int timeout, int Retries)
{ {
if (waitTask == nullptr) if (waitTask == nullptr)

View file

@ -136,6 +136,8 @@ namespace EpdBaseClr {
} }
} }
//private:
//bool hasAlarm = false;
public: public:
bool onlyMK2; bool onlyMK2;
@ -153,7 +155,7 @@ namespace EpdBaseClr {
bool isOn; bool isOn;
bool isBG, isNG, VersionOK; bool isBG, isNG, VersionOK;
bool isMK3; bool isMK3;
bool hasAlarm = false;
int InitRV; int InitRV;
int DiscRV; int DiscRV;

View file

@ -387,8 +387,8 @@ namespace eDosStation
VisitExitCommand.SetBoolParam("eDosRate10Warning", ep.eDosRate10Warning); VisitExitCommand.SetBoolParam("eDosRate10Warning", ep.eDosRate10Warning);
VisitExitCommand.SetBoolParam("eDosRate10Alarm", ep.eDosRate10Alarm); VisitExitCommand.SetBoolParam("eDosRate10Alarm", ep.eDosRate10Alarm);
VisitExitCommand.SetBoolParam("isAlarm", ep.hasAlarm); VisitExitCommand.SetBoolParam("isAlarm", ep.eDoshasAlarm, splunkLog);
VisitExitCommand.SetBoolParam("isFault", ep.eDosHasFault); VisitExitCommand.SetBoolParam("isFault", ep.eDosHasFault, splunkLog);
checkCon(true); checkCon(true);
VisitExitCommand.Connection = localConnection; VisitExitCommand.Connection = localConnection;
VisitExitCommand.ExecuteNonQuery(); VisitExitCommand.ExecuteNonQuery();

View file

@ -1,55 +1,55 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows.Controls; using System.Windows.Controls;
namespace eDosStation namespace eDosStation
{ {
static class Decoder static class Decoder
{ {
static StackPanel sp; static StackPanel sp;
private static void tb_Add( string s) private static void tb_Add( string s)
{ {
TextBlock x = new TextBlock(); TextBlock x = new TextBlock();
x.Text = s; x.Text = s;
sp.Children.Add(x); sp.Children.Add(x);
} }
public static void AlarmToTextBox(StackPanel s,EpdBaseClr.Epd2 ep) public static void AlarmToTextBox(StackPanel s,EpdBaseClr.Epd2 ep)
{ {
sp = s; sp = s;
if (ep.DetectorsOn > 0) tb_Add("DetectorsOn"); if (ep.DetectorsOn > 0) tb_Add("DetectorsOn");
if (ep.EPDIssued ) tb_Add("EPD Issued"); if (ep.EPDIssued ) tb_Add("EPD Issued");
//if (ep.EPDLocked > 0) tb_Add("EPD Locked"); //if (ep.EPDLocked > 0) tb_Add("EPD Locked");
if (ep.EPDTesting > 0) tb_Add("EPD Detector test active"); if (ep.EPDTesting > 0) tb_Add("EPD Detector test active");
if (ep.EPDProcSec > 0) tb_Add("EPD Processing every second"); if (ep.EPDProcSec > 0) tb_Add("EPD Processing every second");
if (ep.EPDFaulty > 0) tb_Add("EPD Faulty"); if (ep.EPDFaulty > 0) tb_Add("EPD Faulty");
if (ep.EPDNewFault > 0) tb_Add("EPD New Fault in History"); if (ep.EPDNewFault > 0) tb_Add("EPD New Fault in History");
if (ep.EPDComFault > 0) tb_Add("EPD Communication fault"); if (ep.EPDComFault > 0) tb_Add("EPD Communication fault");
if (ep.EPDCalFault > 0) tb_Add("EPD Calibration factors faulty"); if (ep.EPDCalFault > 0) tb_Add("EPD Calibration factors faulty");
if (ep.EPDDetFault > 0) tb_Add("EPD Detector faulty"); if (ep.EPDDetFault > 0) tb_Add("EPD Detector faulty");
if (ep.EPDEprFault > 0) tb_Add("EPD Eprom faulty"); if (ep.EPDEprFault > 0) tb_Add("EPD Eprom faulty");
if (ep.EPDTrhFault > 0) tb_Add("EPD Tresholds faulty"); if (ep.EPDTrhFault > 0) tb_Add("EPD Tresholds faulty");
if (ep.EPDOthFault > 0) tb_Add("EPD Other Fault"); if (ep.EPDOthFault > 0) tb_Add("EPD Other Fault");
if (ep.AlarmDoseHP101G > 0) tb_Add("Alarm Dose HP10"); if (ep.AlarmDoseHP101G > 0) tb_Add("Alarm Dose HP10l");
if (ep.AlarmDoseHP102G > 0) tb_Add("Alarm Dose HP10"); if (ep.AlarmDoseHP102G > 0) tb_Add("Alarm Dose HP10h");
if (ep.AlarmDoseHP07N > 0) tb_Add("Alarm Dose HP07"); if (ep.AlarmDoseHP07N > 0) tb_Add("Alarm Dose HP07");
if (ep.AlarmRateHP101G > 0) tb_Add("Alarm RateHP10 "); if (ep.AlarmRateHP101G > 0) tb_Add("Alarm RateHP10 ");
if (ep.AlarmRateHP102G > 0) tb_Add("Alarm RateHP10 "); if (ep.AlarmRateHP102G > 0) tb_Add("Alarm RateHP10 ");
if (ep.AlarmRateHP07N > 0) tb_Add("Alarm Rate HP07"); if (ep.AlarmRateHP07N > 0) tb_Add("Alarm Rate HP07");
if (ep.OtherAlarmRateHp101G > 0) tb_Add("Alarm Rate Hp10 /G"); if (ep.OtherAlarmRateHp101G > 0) tb_Add("Alarm Rate Hp10 /G");
if (ep.OtherAlarmRateHp102G > 0) tb_Add("Alarm Rate Hp10 /G"); if (ep.OtherAlarmRateHp102G > 0) tb_Add("Alarm Rate Hp10 /G");
if (ep.OtherAlarmRateHp07N > 0) tb_Add("Alarm Rate Hp07 /HPN"); if (ep.OtherAlarmRateHp07N > 0) tb_Add("Alarm Rate Hp07 /HPN");
if (ep.OtherAlarmReturn > 0) tb_Add("Please Return"); if (ep.OtherAlarmReturn > 0) tb_Add("Please Return");
if (ep.OtherAlarmBatLow > 0) tb_Add("Battery Low"); if (ep.OtherAlarmBatLow > 0) tb_Add("Battery Low");
if (ep.OtherAlarmCarrier > 0) tb_Add("Carrier present"); if (ep.OtherAlarmCarrier > 0) tb_Add("Carrier present");
if (ep.OtherAlarmBatVolt > 0) tb_Add("Battery Volt"); if (ep.OtherAlarmBatVolt > 0) tb_Add("Battery Volt");
} }
} }
} }

View file

@ -104,7 +104,7 @@ namespace eDosStation
endPage(); endPage();
return false; return false;
} }
if (ep.hasAlarm && ep.OtherAlarmBatLow > 0) if (ep.eDoshasAlarm || ep.OtherAlarmBatLow > 0 || ep.eDosHasFault)
{ {
TextBlock il = new TextBlock(); TextBlock il = new TextBlock();
il.Inlines.Add(new Run("EPD is in alarm status\n\n") il.Inlines.Add(new Run("EPD is in alarm status\n\n")

View file

@ -17,14 +17,12 @@ namespace eDosStation
private bool EpdReading = false; private bool EpdReading = false;
private bool FinalTimeOut = false; private bool FinalTimeOut = false;
#if SimulateEPD #if SimulateEPD
public SimulateData simulData = new SimulateData(); public SimulateData simulData = new SimulateData();
#endif #endif
public EpdExit(Station curStation) public EpdExit(Station curStation)
{ {
InitializeComponent(); InitializeComponent();
thisStation = curStation; thisStation = curStation;
dataInterface = curStation.dataInterface; dataInterface = curStation.dataInterface;
} }
@ -147,7 +145,7 @@ namespace eDosStation
} }
//bool NoTimeout = false; //bool NoTimeout = false;
if (ep.alarmStatus != 0) if (ep.alarmStatus != 0)
{ {
DosePanel.Background = AlarmBrush; DosePanel.Background = AlarmBrush;

View file

@ -1 +1 @@
Tue 05/28/2024 7:59:42.11 Wed 05/29/2024 15:58:06.78

View file

@ -84,7 +84,7 @@ namespace eDosStation
HardVersion.Text = ep.HardVersion.ToString() + '.' + ep.HardVersionMinor.ToString(); // ep.SoftVersion.ToString(); HardVersion.Text = ep.HardVersion.ToString() + '.' + ep.HardVersionMinor.ToString(); // ep.SoftVersion.ToString();
if (ep.hasAlarm) if (ep.eDoshasAlarm)
{ {
hasAlarm.Text = "Yes"; hasAlarm.Text = "Yes";
} else } else

View file

@ -68,7 +68,21 @@ static public class extensions
} }
return found; return found;
} }
public static bool BoolOrDefault( this System.Data.SqlClient.SqlDataReader rs, string colName, bool defaultValue) static public bool SetBoolParam(this System.Data.SqlClient.SqlCommand c, string paramname, bool value, LSWLib.CLog spl=null )
{
bool found = true;
if (c.Parameters.Contains(paramname)) c.Parameters[paramname].Value = value;
else
{
if (paramname[0] != '@') paramname = "@" + paramname; else paramname = paramname.Substring(1);
if (c.Parameters.Contains(paramname)) c.Parameters[paramname].Value = value;
else found = false;
}
if (!found && spl != null) spl.WriteSplunkLog("SetBoolParam", LSWLib.CLog.iseverity.err, paramname);
return found;
}
public static bool BoolOrDefault( this System.Data.SqlClient.SqlDataReader rs, string colName, bool defaultValue)
{ {
bool rv = defaultValue; bool rv = defaultValue;
try try

View file

@ -213,17 +213,17 @@ exit
# aWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQgVHJ1c3RlZCBHNCBSU0E0 # aWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQgVHJ1c3RlZCBHNCBSU0E0
# MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEAVEr/OUnQg5pr/bP1/lYRYwDQYJ # MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEAVEr/OUnQg5pr/bP1/lYRYwDQYJ
# YIZIAWUDBAIBBQCgaTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3 # YIZIAWUDBAIBBQCgaTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3
# DQEJBTEPFw0yNDA1MjgwNTM0MTJaMC8GCSqGSIb3DQEJBDEiBCDbjZuxJgcSDufz # DQEJBTEPFw0yNDA1MjkxMzU4MzFaMC8GCSqGSIb3DQEJBDEiBCDbjZuxJgcSDufz
# +ekiprJJKPMdOid8HFavnX4C8hgeWzANBgkqhkiG9w0BAQEFAASCAgCH9lWfpp5t # +ekiprJJKPMdOid8HFavnX4C8hgeWzANBgkqhkiG9w0BAQEFAASCAgBGjdQr8S+I
# b00PHQlLYC1Jy5yb4gosf7fEOR4TS0cduRMhLuUEqij7nUSwPiqAZjNV1eaH3eb9 # nwuGA0gDFbifrx8gb9772uSbSfgF4GM3zmVlNC21F2ZVJruG6N8MN/W3uZxsRjVD
# QFzcr9kxcFAtoY8R8pf4G+YSJaiQ7QB2DfbEdkusuxrOtxCIRNwhbaynT0Hhuysj # /pY0v7kXTJ3ygrvmcKt0reuUkj+qv0HMLa7gd3yTLealUT7+JtzraalEzEsVCGiI
# t0VxhU828B1iYpoWTPYnapExqgVokEmuK4kbNNSGJI1BYfE0iqSyMxHvj3brmAnW # OzM/7S2N1Z5YgsjfudW0v5sP4sDjUAUGYIgs2lH+qBFBSH2l/I9pV7gi/obxC7+4
# OzacfYfX//MMvbxno+JP/ynbg8EnAfVxZVL9W8CRTCTEotQFtEVdz/XPfFRQy1IU # EYKLcGWsuXf+q2KRoEPnr5p3fYOrNuNXaVRJkn8NPxRArupcMUddIDV6eMBQ85Xn
# fN2e4FDuzXS9tf1a6Dn6F8F6FTkCDFP/qZtHIgGI6pk1Kad+vfZh/hpGnvFo+A6B # wPPdap/jjTV839y89km8h/zf70XYrGJDBeevl2VCa2TmlmMJYmQF+6T+zVzSTPyU
# SGh3qNdayL1XGcpnKTm/Yz2faZ05xas+VgmnZ+qO6i6L5Ia1zcsPzQUzylFpqE+v # dnGAoC1ing+ky9U9WZ14K5DNRgbxkAnIgV723BEsI6Vkj55WYQ3a4OKwx080a+rV
# 0rt2OO8yC+UcDhihny09vtnaZvGSg2QCagKqx/lVQEmfBxx4e2zbCKL/NvMm0CB+ # GeeMKYjhbgnTyD9exX8TkFYdklKY+A1Vurhxjq5BiektiXriw93w5Dsrwq8TnT0o
# VyFxku4NvMu28vCVQ029incGJMCsYaOdW8HUFdT6ei9HPU0B5p9dzprqU7xJibkb # GvaDt3FO+kXRWYBXUMvFBu3ID5wYw/q688g9IF7G0VAxDa73lBF4GC15TkSALVLR
# t3eplK/KgSyHRDnzg2h1DnkY7VzA+cn2WWs9hXX+5PeoDJ3rT4zhkYPQi7gxj0r0 # eliiwBfdRnoLfxMYurGne4Iux7G4iSxBDlonsHur7Lcc/6jrtIIM8mHn11GWZwXv
# Ong4FIclb9y/xVx9y+j//hQKN4SOulJv9xkdGPrIrwpZCdndQjgOcJ8uZBwaOA2g # Dk+CJBvtno+UU2VCCelL+7mZEFQ1cwQLaCM3A8MY+3tgenFke+4HnYLN1AG+D68o
# CmZ92tG+4gn8CNOp9zi042M5EwkTtq4u2g== # h4eZTK9m9nojRGxKVYFVZJc+VhsdkQhHyQ==
# SIG # End signature block # SIG # End signature block

View file

@ -328,17 +328,17 @@ exit
# aWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQgVHJ1c3RlZCBHNCBSU0E0 # aWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQgVHJ1c3RlZCBHNCBSU0E0
# MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEAVEr/OUnQg5pr/bP1/lYRYwDQYJ # MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEAVEr/OUnQg5pr/bP1/lYRYwDQYJ
# YIZIAWUDBAIBBQCgaTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3 # YIZIAWUDBAIBBQCgaTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3
# DQEJBTEPFw0yNDA1MjgwNTM0MTJaMC8GCSqGSIb3DQEJBDEiBCAcllG2mSPxCJ8u # DQEJBTEPFw0yNDA1MjkxMzU4MzFaMC8GCSqGSIb3DQEJBDEiBCAcllG2mSPxCJ8u
# oQsIqOunNyELPZuVN2PuUwDZLmIbpTANBgkqhkiG9w0BAQEFAASCAgArsQWfdjSe # oQsIqOunNyELPZuVN2PuUwDZLmIbpTANBgkqhkiG9w0BAQEFAASCAgBnR/5a25Cy
# QOVAwFE2Axz5OLj8HMNdSIp0fBDZRJyiL0Pu7JkAcSPvK44kQ/yK9+pLJyLKN3hC # oS6Ylo3RZzQJZkih7pEQYAzzhnhueErTJjKQ/xxdvN+IUn/RvUPkas7QRboqfrJm
# 1s9GtSMGdYdqpmrVPvVS8WA0sOH+YtxN+VgudyJ0f1QWHJGJT4BQDRxMYQInBePB # 4xGwmBbEsZuQyt7XBXz7ZS2sVuzpBwN96JhRmIuTZk5uIGbQ0EI9cy1m84MCjOaC
# 79VJIveRqlSkxjRHLtrZQ56rr5HHukBWkxP0mxEkl8g6U/VbfxgwkgMcm63kv5xT # dF0+XITTunQBIZs91fQWdhQhi0oDES6yrmi4ziTd2auFoMCD0l4xDQm0AXZ0aGGZ
# 8tY5jqBj3tRkYg3zoirNEUNH8VzVvtQ6hBfoMM1gZmj7A/QbB4jd3ssawEDY/P3+ # H9mGwuYA5kP8GWj/2Q90wG7/ivnqE7vVQ2ogRuqTQSfYJhy45n1yZh3MC2lHiA83
# TQ1Pr4T5wP+0XPis24qwpxjJ6IDFoGodM18MJkAczC6lLraf4DfwdszVJy3yRZov # yOiWlr2CZP1vn7kTiPHwDaWJn8YuEhG45Xg9DYSd+yhwmIG+Cy7h3BDE2XTVdhwi
# ShR3ueUDeQHZzUEmVh7ZmWv/YYyWexuVHhyR4HBR1Brb3W1XF+/ouSyPba3z06WU # CvzLpfCPTJq5xS9G2wMGpxrQYff+EKlXNrVYZCYvlvSm+p5cLGfitgJvUy9Neyuq
# UmIMZzy/7VxNtSIBbwFx9le0cn5c5mi4+cNx6nOoT/JAQ4TVckcTOPcTbp3xNbcx # FMAqzdTcBgf+TBmOP4hwryQKeE1/ZghZ+DnOb3g5JMPyOjqqeMf37aLObl+jiQrN
# Ez1nekS/6hksT5bzogwN9Q7h/yB+kkEKeNc8+5UKtIE6s+5y4+i7RNz5a54549iL # 6apWTPysMla2x1f7QCTqv5a0kElKqdVt/zF/lJekCtWpK//tznXPHDtnyPnb3w0c
# Sbg35F+ZyqOpB3bAPafj0p9RpXoqugMISQ5STklSKDmU69/bFsnEPGmMQKfW590G # 9/1j2oClQc0+pVWUnoq8mBb61bvi/9E6EemMSRJ9qHio4+H6J+SHqNKPgiOu4VFT
# XuhscXk1bSPvx/0decysPJU/tMbj0U1mDMTfXL2pmt+MKcwYirw35t4zGsB31Zpx # sfHBV6h649yroU8bHMlYkc+52YNoBbJANgeA5ihS02+C2N74mdlmkUEE52unk+2J
# kf8GhZRTzB0PRN1R0WuQStX3XlF3IsH41A== # oQ2vybH262KiIJSPgIQb91KPw4+FjaCtQg==
# SIG # End signature block # SIG # End signature block

View file

@ -192,17 +192,17 @@ exit
# aWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQgVHJ1c3RlZCBHNCBSU0E0 # aWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQgVHJ1c3RlZCBHNCBSU0E0
# MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEAVEr/OUnQg5pr/bP1/lYRYwDQYJ # MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEAVEr/OUnQg5pr/bP1/lYRYwDQYJ
# YIZIAWUDBAIBBQCgaTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3 # YIZIAWUDBAIBBQCgaTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3
# DQEJBTEPFw0yNDA1MjgwNTM0MTJaMC8GCSqGSIb3DQEJBDEiBCDpOCR32+BElOsp # DQEJBTEPFw0yNDA1MjkxMzU4MzFaMC8GCSqGSIb3DQEJBDEiBCDpOCR32+BElOsp
# pr9o2qvS6Cq0zGXXv8N/urfnLBwlITANBgkqhkiG9w0BAQEFAASCAgCfTHsVbpZf # pr9o2qvS6Cq0zGXXv8N/urfnLBwlITANBgkqhkiG9w0BAQEFAASCAgALWrY16T9Q
# W4dpipchv87UBpejQZy21Uu7uYXTZtVQuyRItstCVQ0xeZU96pBIlhC+o38O+K4O # jGcDVEEOobysVU7id8rnqKMXfCLAIlVyI44uEwXMk854ZoUmv7lItRGpLto03sTs
# w/VF79BzDe0mA+xbKM7XX3g4JSWgNTARzYSoA5f3UIYWiECk2zkR3s9XHzzBg11D # 9NI4LOp2rJA90bN1EZZbL05a10elnxbGarZNnHUEA5LKyIFrcTrnASLJ2Hz7PCmW
# 3DnaVOhpxnz3X9r7dTNHI5iV8pqFQN6L6Hyuc6J4nH+6vLp80BVG4rp29wz6expK # /QBO2lb0AtBtyxmXfzjxAJj+RLbD+lJxWkgEaTidT36foaCbNQvb0qap3B8g+r0K
# 78+nozPHE4lgFEedom0cgDCe6p3UEx77xI2JzlKdl0B3E5B+zY9tAfhMmmtGoZ1y # SG9THPmYivEmme2gThHZSJ5emre6cUdZ3cpvKoCuqCMErXKik1az4KDMX6Ym/3AU
# DqhHWiNYCGxVnalkmru9Hte4AiHFpvxUPnPFqRUFuzbyzAZZvePftrRadE4SLIn+ # EW5/WmZkCAiYCEOHlaOLoW3X/XiPW5p72viy5qwaO0f9NfleXU0FkChAvYUgL2jq
# 2h7ckT7BAB42y78o7b/DLCAKK5MF6HCuNbmbBMzb0FlnYujGR3wTOFiTTw3gDtPy # UjKszVphMrqYJFwc9zLU5zVP+WyA/kOxW7uNs2HzYxMZribDsOaJQQro8T+5iO13
# pH3gSlZVx4pRD5o9lyEv/Vi7yJy7PGt1bikFKA4C57NWtbZn76ZFrfaz2u4KUZEz # 2Ws5tH/hHxPvVH4NHOFctdUg/j2ntJfoAcGYo4j+o6zJQOmInNA3vi0IM8BNSfar
# 0SjK1gPy1ZgF3XksGCRMuL5UtEQH5qP3hVhyL31KeNsadrVpsOQSkCPcQVi7SVe6 # BogdNzBVYW5f4giwGLfCN0SEjL8l1m/Rmf7DWhyLpK9T6Lr+t9Fuh6PAE1Icr3Wv
# UVLSjVFxZDTheYy6/zGmzuCJp6i/3+xubSPTIiQSgYcR4C0S8OIGY+2LItXIaNNb # PXeS237UKqfEr25i6mDfIEOCiltJfZa88ooJE5eruv6ZD/2nc4U+UZDLYPB/inlZ
# j4A20QZPx41CnpMz+8jkHpkXl3j5GNDLxFgI+m83T7efbzOyzPu5RpQQx3eITnZD # b1bU17qxfue5MhOA7UQY8xNifuPaf21tgTUAHW71ub3dY4r1FE/7k9uQbU0BxsGA
# KJPM7nx/c1O6IgKPN3YIMJjmZ0SE1rwyYA== # PAD79tEAEFh6FCBKOQtKG0lE2ntikNRQ5Q==
# SIG # End signature block # SIG # End signature block