eDosStation/EpdBase/EpdBase.cpp

605 lines
16 KiB
C++
Raw Normal View History

2019-02-04 11:48:08 +01:00
#include "stdafx.h"
2021-05-28 17:06:41 +02:00
#pragma unmanaged
2019-02-04 11:48:08 +01:00
#include "EpdBase.h"
2021-05-03 13:27:51 +02:00
#include "TimeFunctions.h"
2021-05-03 09:56:58 +02:00
#define DiscoveryTimeslotPeriod 500
2020-02-18 14:06:52 +01:00
#define DiscoveryExpirationPeriod 6000
#define RxRetryCount 5
#define TxRetryCount 5
2021-05-12 12:35:50 +02:00
#pragma unmanaged
2019-02-04 11:48:08 +01:00
EpdBase::Epd2U::Epd2U(int comport)
{
port = comport;
2019-02-27 07:22:39 +01:00
CommsInitialized = 0;
2021-06-02 13:54:22 +02:00
isBG = isNG = VersionOK = hasAlarm = false;
2021-05-27 16:13:53 +02:00
maxDiscoverTime = 10000;
hWaitTimer = CreateWaitableTimer(NULL, TRUE, NULL);
2021-03-26 17:20:57 +01:00
if (port == 0) return;
2019-02-04 11:48:08 +01:00
SetAutoCommit(0);
Error = 123;
//SetTimeouts(port, 20, 1000, 1000);
2019-02-25 09:12:08 +01:00
}
2021-04-16 10:38:48 +02:00
WORD EpdBase::Epd2U::WriteConfig()
2020-03-11 13:23:29 +01:00
{
2021-03-26 17:20:57 +01:00
if (port == 0) return 1;
2020-03-11 13:23:29 +01:00
return WriteDisplayConfig(00,2,40,10, 2,displayConfig, 56);
}
2021-04-16 10:38:48 +02:00
DWORD EpdBase::Epd2U::StartCom()
2019-02-25 09:12:08 +01:00
{
2020-02-18 14:06:52 +01:00
DWORD rv;
ErrorReason = 0;
int mx = 10;
2021-03-26 17:20:57 +01:00
if (port == 0) {
CommsInitialized = 1;
return 1;
}
2020-02-18 14:06:52 +01:00
if (CommsInitialized==0)
do {
InitRv = InitComms(port, 9600, 8, 0, 0);
if (InitRv == 0) {
rv= GetErrorDetails(&ErrorSource, &ErrorReason, &ErrorData);
Sleep(300); DeinitComms(port);
}
else {
SetRetryCounts(RxRetryCount, TxRetryCount);
SetDiscoveryTimeslotPeriod(port, DiscoveryTimeslotPeriod);
2021-05-26 16:20:40 +02:00
SetDiscoveryTimeslotCount(port, 1);
2020-02-18 14:06:52 +01:00
SetDiscoveryExpirationPeriod(port, DiscoveryExpirationPeriod);
}
} while (InitRv == 0 && mx > 0);
CommsInitialized = InitRv;
2021-06-02 13:54:22 +02:00
isBG = isNG = VersionOK = hasAlarm = false;
2020-02-18 14:06:52 +01:00
return ErrorReason;
2019-02-04 11:48:08 +01:00
}
2021-05-28 17:06:41 +02:00
void EpdBase::Epd2U::EndCom()
2019-02-04 11:48:08 +01:00
{
2021-05-28 17:06:41 +02:00
if (port > 0 && CommsInitialized==1) DeinitComms(port);
2020-02-18 14:06:52 +01:00
CommsInitialized = 0;
2019-02-04 11:48:08 +01:00
}
2021-05-28 17:06:41 +02:00
EpdBase::Epd2U::~Epd2U()
{
EndCom();
}
2021-05-12 12:35:50 +02:00
int EpdBase::Epd2U::StartDiscover( int EpdTimeout)
2019-02-04 11:48:08 +01:00
{
2021-05-12 12:35:50 +02:00
maxDiscoverTime = EpdTimeout;
2021-03-26 17:20:57 +01:00
if (port == 0) {
DeviceCount = 1;
DeviceIDs[0] = 768;
return 1;
2021-05-04 12:59:51 +02:00
}
DiscRV = 0;
2021-05-27 16:13:53 +02:00
ConnectTries = 0; ConnectTimerFired = 0;
2021-05-04 12:59:51 +02:00
if (CommsInitialized == 1) {
2021-05-12 12:35:50 +02:00
FlushDiscoveryCache(port);
FlushBuffers(port);
2021-05-27 16:13:53 +02:00
Error = 0;
2021-05-04 12:59:51 +02:00
int maxtries = 100; DeviceCount = 0; DiscRV = 1; DWORD wo = 1; // ongeveer 43 tries in 10 seconden
2021-05-27 16:13:53 +02:00
LARGE_INTEGER wt; //100 nanoseconds *10000 = millisec
//union { LARGE_INTEGER li; FILETIME ft; LONGLONG ll; } t1, t2;
//wt.QuadPart = -300000000LL;
wt.QuadPart = Int32x32To64(maxDiscoverTime, -10000); //10 seconden proberen
if (hWaitTimer != nullptr)
SetWaitableTimer(hWaitTimer, &wt, 0, NULL, NULL, 0);
//GetSystemTimeAsFileTime(&t1.ft);
2021-05-04 12:59:51 +02:00
while (DeviceCount == 0 && wo != 0) //tries-- > 0 &&
{
2021-05-27 16:13:53 +02:00
ConnectTries++;
2021-05-04 12:59:51 +02:00
DiscRV = Discover(port, DeviceIDs, MaxDevices, &DeviceCount);
if (DiscRV == 0) {
Error = GetErrorDetails(&ErrorSource, &ErrorReason, &ErrorData);
}
2021-05-27 16:13:53 +02:00
wo = WaitForSingleObject(hWaitTimer, 100);
if (wo == 0) {ConnectTimerFired = 1; DiscRV = 1; }
2020-02-18 14:06:52 +01:00
}
2021-05-27 16:13:53 +02:00
//GetSystemTimeAsFileTime(&t2.ft);
CancelWaitableTimer(hWaitTimer);
2020-02-05 16:27:38 +01:00
}
2019-02-27 07:22:39 +01:00
return DiscRV;
2019-02-04 11:48:08 +01:00
}
2021-06-02 13:54:22 +02:00
/// <summary>
///
/// </summary>
/// <param name="DeviceID"></param>
/// <returns>0 OK</returns>
2021-05-28 17:06:41 +02:00
int EpdBase::Epd2U::Open(DWORD DeviceID)
2019-02-04 11:48:08 +01:00
{
2021-06-02 13:54:22 +02:00
int rv = 0;
2019-02-04 11:48:08 +01:00
CurrentDeviceID = DeviceID;
2021-03-26 17:20:57 +01:00
if (port > 0) {
ConRV = Connect(DeviceID);
if (ConRV == 0) Error = GetErrorDetails(&ErrorSource, &ErrorReason, &ErrorData);
else {
OpenRV = OpenDevice(port, CurrentDeviceID);
2021-06-02 13:54:22 +02:00
if (OpenRV == 0) rv=Error = GetErrorDetails(&ErrorSource, &ErrorReason, &ErrorData);
2021-03-26 17:20:57 +01:00
}
2019-02-04 11:48:08 +01:00
}
2021-06-02 13:54:22 +02:00
else { OpenRV = ConRV = 1; rv = 0; }
return rv;
2019-02-04 11:48:08 +01:00
}
2021-05-31 15:20:16 +02:00
2019-02-04 11:48:08 +01:00
void EpdBase::Epd2U::Close()
{
2021-06-03 08:37:02 +02:00
if (port > 0) CloseDevice();
CurrentDeviceID = 0;
}
2021-06-02 13:54:22 +02:00
2021-06-03 08:37:02 +02:00
int EpdBase::Epd2U::CloseAndSignal(WORD EndSessionControl, WORD duration)
{
int rv = 0;
WORD r;
Sleep(250);
r = EndSession(EndSessionControl, duration);
if (r == 1) rv = 0; else rv = 1;
Close();
return rv;
2019-02-04 11:48:08 +01:00
}
2021-06-03 08:37:02 +02:00
2019-02-04 11:48:08 +01:00
void EpdBase::Epd2U::DecodeFunctionFlags()
{
2019-02-21 10:11:58 +01:00
EpdType = (FunctionFlags & 0x1F00) >> 8;
2021-05-20 16:13:23 +02:00
//0=BG 3=Neutron 4=BG Mk3 7=Neutron Mk4
2019-02-04 11:48:08 +01:00
}
void EpdBase::Epd2U::DecodeStatus()
{
DetectorsOn = (OperatingStatus & 1) != 0;
EPDIssued = (OperatingStatus & 4) != 0;
EPDLocked = (OperatingStatus & 0x10)!=0;
EPDTesting = (OperatingStatus & 0x20) != 0;
EPDProcSec = (OperatingStatus & 0x40) != 0;
EPDFaulty = (OperatingStatus & 0x80) != 0;
EPDNewFault = (ErrorStatus & 1) != 0;
EPDComFault = (ErrorStatus & 2) != 0;
EPDCalFault = (ErrorStatus & 4) != 0;
EPDDetFault = (ErrorStatus & 8) != 0;
EPDEprFault = (ErrorStatus & 0x10) != 0;
EPDTrhFault = (ErrorStatus & 0x20) != 0;
EPDOthFault = (ErrorStatus & 0x80) != 0;
AlarmDoseHP101G = (AlarmStatus & 1) != 0;
AlarmDoseHP102G = (AlarmStatus & 2) != 0;
AlarmDoseHP07N = (AlarmStatus & 4) != 0;
AlarmRateHP101G = (AlarmStatus & 8) != 0;;
AlarmRateHP102G = (AlarmStatus & 0x10) != 0;
AlarmRateHP07N = (AlarmStatus & 0x20) != 0;
//OtherAlarm
OtherAlarmRateHp101G = (OtherAlarms & 1) != 0;
OtherAlarmRateHp102G = (OtherAlarms & 2) != 0;
OtherAlarmRateHp07N = (OtherAlarms & 4) != 0;
OtherAlarmReturn = (OtherAlarms & 8) != 0;
OtherAlarmBatLow = (OtherAlarms & 0x10) != 0;
OtherAlarmCarrier = (OtherAlarms & 0x20) != 0;
OtherAlarmBatVolt = (OtherAlarms & 0x40) != 0;
2021-06-02 13:54:22 +02:00
if (!VersionOK) OtherAlarms &= 0x7f;
hasAlarm = (OtherAlarms != 0) || (AlarmStatus != 0);
2019-02-04 11:48:08 +01:00
}
2021-06-02 13:54:22 +02:00
/// <summary>
///
/// </summary>
/// <returns>0 = ok</returns>
2021-04-16 10:38:48 +02:00
WORD EpdBase::Epd2U::ReadStatus()
2019-02-04 11:48:08 +01:00
{
2021-06-02 13:54:22 +02:00
int rv = 0;
2020-02-05 14:21:53 +01:00
Error = 0; ReadStatusRV = 0;
2020-02-06 09:37:51 +01:00
memset(WearerID, 0, WearerIDLength + 1);
memset(WearerName, 0, WearerNameLength + 1);
2019-02-04 11:48:08 +01:00
2021-04-16 10:38:48 +02:00
IssueCount = OperatingStatus = ErrorStatus = AlarmStatus = OtherAlarms = EEPROMBadSectors = 0;
RealTime = EpdClock = OffTime = EpdID = 0;
2019-02-04 11:48:08 +01:00
ErrorSource = ErrorReason = ErrorData = 0;
2021-04-16 10:38:48 +02:00
HardVersion = SoftVersion = FunctionFlags = 0;
2019-02-04 11:48:08 +01:00
2021-03-26 17:20:57 +01:00
if (port == 0) {
EpdID = 4567;
EpdType = 0;
FunctionFlags = 0x000;
2021-06-02 13:54:22 +02:00
return 0;
2021-03-26 17:20:57 +01:00
}
2021-05-21 16:22:20 +02:00
RealTime = UnixTimeNow();
2019-02-14 15:56:23 +01:00
CommitRV = ReadEpdStatus(&EpdClock, &RealTime, &IssueCount, &OffTime, &OperatingStatus, &ErrorStatus, &AlarmStatus, &OtherAlarms, &EEPROMBadSectors);
2021-03-30 15:13:22 +02:00
if (port == 0) {
EpdClock = 123; ErrorStatus = 0;
};
2020-02-18 14:06:52 +01:00
if (CommitRV == 1) CommitRV = Commit();
2021-05-21 16:22:20 +02:00
2020-02-06 09:37:51 +01:00
if (CommitRV == 1) CommitRV = ReadEpdID(
2019-02-04 11:48:08 +01:00
&EpdID,
2020-02-06 09:37:51 +01:00
&HardVersion,
2019-02-04 11:48:08 +01:00
&SoftVersion,
&FunctionFlags);
2020-02-06 09:37:51 +01:00
if (CommitRV == 1) CommitRV = Commit();
if (CommitRV == 0) {
2019-02-04 11:48:08 +01:00
Error = GetErrorDetails(&ErrorSource, &ErrorReason, &ErrorData);
2020-02-06 09:37:51 +01:00
ReadStatusRV = ErrorReason;
2021-06-02 13:54:22 +02:00
rv = ErrorReason;
return rv;
2019-02-04 11:48:08 +01:00
}
else {
2021-05-27 16:13:53 +02:00
CurrentDeviceID = EpdID;
2019-02-04 11:48:08 +01:00
time_t t = RealTime;
TimeFunctions::UnixTimeToSystemTime(t, &tRealTime);
DecodeStatus();
DecodeFunctionFlags();
}
2021-06-02 13:54:22 +02:00
byte ff = (FunctionFlags >> 8) & 0x0f;
isBG = ff == 0;
isNG = ff == 3;
VersionOK = (isBG && SoftVersion >= 11) || (isNG && SoftVersion >= 3);
2020-02-06 09:37:51 +01:00
if (CommitRV == 1 && EPDIssued == 1)
2019-02-14 15:56:23 +01:00
{
CommitRV = ReadWearer(
2019-02-04 11:48:08 +01:00
WearerID,
WearerIDLength,
WearerName,
WearerNameLength);
2020-02-06 09:37:51 +01:00
if (CommitRV == 1) CommitRV = Commit();
2019-02-04 11:48:08 +01:00
if (CommitRV == 0) {
Error = GetErrorDetails(&ErrorSource, &ErrorReason, &ErrorData);
2021-06-02 13:54:22 +02:00
rv = ReadStatusRV = ErrorReason;
return rv;
2019-02-04 11:48:08 +01:00
}
2019-02-14 15:56:23 +01:00
else {
2021-06-02 13:54:22 +02:00
rv = 0;
2019-02-14 15:56:23 +01:00
for (int i = 0; i < WearerIDLength; i++)
if (WearerID[i] == 0xb) WearerID[i] = '0'; else WearerID[i] |= 0x30;
}
2019-02-04 11:48:08 +01:00
}
2021-06-02 13:54:22 +02:00
return rv;
2019-02-04 11:48:08 +01:00
}
2021-06-01 16:35:24 +02:00
/// <summary>
///
/// </summary>
/// <returns>0 ok</returns>
2021-04-16 10:38:48 +02:00
WORD EpdBase::Epd2U::EPDReadExtraStatus()
2019-02-12 16:01:47 +01:00
{
2021-05-31 15:20:16 +02:00
int rv = 0;
2021-03-26 17:20:57 +01:00
if (port == 0) return 1;
2019-02-14 15:56:23 +01:00
byBatADC = bySupplyADC = 0;
/*CommitRV = ReadA2ConfigStatus(
2019-02-12 16:01:47 +01:00
&byBatADC,
&bySupplyADC,
&byStatus3,
&byStatus4);
2019-02-14 15:56:23 +01:00
if (CommitRV == 1) CommitRV = Commit();*/
if (CommitRV == 1) CommitRV = ReadCounts(&D1, &D2, &D3, &D4, &CountsClock);
2019-02-12 16:01:47 +01:00
if (CommitRV == 1) CommitRV = Commit();
2019-02-14 15:56:23 +01:00
if (CommitRV == 1) CommitRV = ReadBaseCounts(&BaseD1, &BaseD2, &BaseD3, &BaseD4, &BaseCountsClock);
if (CommitRV == 1) CommitRV = Commit();
2021-06-01 16:35:24 +02:00
if (CommitRV == 1) rv = 0;
else {
2019-02-14 15:56:23 +01:00
Error = GetErrorDetails(&ErrorSource, &ErrorReason, &ErrorData);
2021-05-31 15:20:16 +02:00
rv = ErrorReason;
}
return rv;
2019-02-12 16:01:47 +01:00
}
2021-04-16 10:38:48 +02:00
WORD EpdBase::Epd2U::EPDReadConfig()
2019-02-04 11:48:08 +01:00
{
2021-03-26 17:20:57 +01:00
if (port == 0) return 1;
2019-02-04 11:48:08 +01:00
ReadConfigRV = ReadConfig(
&CountDownTime,
&ReturnTime,
&ChirpRate,
&TeleBaudSetting,
&SelfTestInterval,
&BatteryLoadTestInt,
&GeneralControl,
&CommsTimeout,
&InhibitTimeout,
&MinTxInterval,
&MaxTxIntervals,
&RandomiseWindow,
&DoseIncThresh);
if (ReadConfigRV == 0) Error = GetErrorDetails(&ErrorSource, &ErrorReason, &ErrorData);
CommitRV = Commit();
if (CommitRV == 0) Error = GetErrorDetails(&ErrorSource, &ErrorReason, &ErrorData);
return CommitRV;
}
2021-03-26 17:20:57 +01:00
2021-06-02 13:54:22 +02:00
/// <summary>
///
/// </summary>
/// <returns>0=ok</returns>
2021-04-16 10:38:48 +02:00
WORD EpdBase::Epd2U::WriteCal()
2019-02-12 16:01:47 +01:00
{
2021-06-02 13:54:22 +02:00
int rv = 1;
CommitRV = 0;
if (port == 0 ) return 0;
if (isBG) return 1;
if (K6 > 2000) return 1;
2019-02-12 16:01:47 +01:00
Password = 9;
//((BYTE *)&Password)[0] = 9;
CommitRV = MFRLogin(Password);
if (CommitRV == 1) CommitRV = Commit();
if (CommitRV == 1) CommitRV = MFRWriteCalFactors(K1, K2, K3, K4, K5, K6);
if (CommitRV == 1) CommitRV = Commit();
if (CommitRV == 0) Error = GetErrorDetails(&ErrorSource, &ErrorReason, &ErrorData);
2021-06-02 13:54:22 +02:00
else rv = 0; //ok
return rv;
2019-02-12 16:01:47 +01:00
}
2021-06-01 16:35:24 +02:00
2021-06-02 13:54:22 +02:00
WORD EpdBase::Epd2U::ReadCal()
2019-02-04 11:48:08 +01:00
{
ReadCalibrationDataRV = ReadCalibrationData(
&K1,
&K2,
&K3,
&K4,
&K5,
&K6,
&SG,
&BC,
&FB,
&HG);
CommitRV = Commit();
if (CommitRV == 0) Error = GetErrorDetails(&ErrorSource, &ErrorReason, &ErrorData);
2021-05-28 17:06:41 +02:00
if (CommitRV == 1) return 0; else return 123;
2019-02-04 11:48:08 +01:00
}
2021-06-02 13:54:22 +02:00
/// <summary>
///
/// </summary>
/// <returns>0 Success</returns>
WORD EpdBase::Epd2U::ReadTresHolds()
{
int rv =0;
if (port == 0) {
Hp10THDose1 = Hp10THDose2 = Hp10THDose2 = 123;
Hp10Rate1On = Hp10Rate2On = Hp07RateOn = Hp10Rate1Off = Hp10Rate2Off = Hp07RateOff = 124;
return 1;
}
Hp10THDose1 = Hp10THDose2 = Hp07THDose = 0;
ReadDoseTresholdRV = ReadAlarmDoseThresholds(&Hp10THDose1, &Hp10THDose2, &Hp07THDose);
CommitRV = Commit();
if (CommitRV == 0) rv = Error = GetErrorDetails(&ErrorSource, &ErrorReason, &ErrorData);
if (rv == 0) {
ReadAlarmRateThresholdsRV = ReadAlarmRateThresholds(
&Hp10Rate1On,
&Hp10Rate2On,
&Hp07RateOn,
&Hp10Rate1Off,
&Hp10Rate2Off,
&Hp07RateOff);
CommitRV = Commit();
if (CommitRV == 0) rv = Error = GetErrorDetails(&ErrorSource, &ErrorReason, &ErrorData);
}
if (rv==0) rv = ReadCal();
return rv;
}
2021-06-01 16:35:24 +02:00
/// <summary>
///
/// </summary>
/// <returns>0 OK</returns>
2021-04-16 10:38:48 +02:00
WORD EpdBase::Epd2U::ReadDoses()
2019-02-04 11:48:08 +01:00
{
2021-03-26 17:20:57 +01:00
if (port == 0) {
Hp10Dose = Hp07Dose = Hp10Total = Hp07Total = Knocks = Resets = QualityData = 21;
Hp10Peak = Hp07Peak = Hp10Time = Hp07Time = 1000;
ErrorSource = ErrorReason = ErrorData = 0;
2021-04-16 10:38:48 +02:00
K1 = 1; K2 = 2; K3 = 3; K4 = 4; K5 = 5; K6 = 6;
SG = 7; BC = 8; FB = 9; HG = 10;
2021-03-26 17:20:57 +01:00
return 1;
}
2019-02-04 11:48:08 +01:00
ReadDosesQualityRV = ReadPeaksRV = CommitRV = 0;
2019-02-01 17:35:18 +01:00
ReadDosesQualityRV = ReadDosesQuality(
&Hp10Dose,
&Hp07Dose,
&Hp10Total,
&Hp07Total,
&Knocks,
&Resets,
2019-02-04 11:48:08 +01:00
&QualityData);
if (ReadDosesQualityRV == 0) {
Error = GetErrorDetails(&ErrorSource, &ErrorReason, &ErrorData);
return 0;
}
2019-02-01 17:35:18 +01:00
ReadPeaksRV = ReadPeaks(
&Hp10Peak,
&Hp07Peak,
2019-02-04 11:48:08 +01:00
&Hp10Time,
&Hp07Time);
if (ReadPeaksRV == 0) {
Error = GetErrorDetails(&ErrorSource, &ErrorReason, &ErrorData);
return 0;
}
2021-06-01 16:35:24 +02:00
TimeFunctions::EPD2PeakTimeToFiletime(EpdClock, Hp10Time, (LPFILETIME) &Hp10FTime);
TimeFunctions::EPD2PeakTimeToFiletime(EpdClock, Hp07Time, (LPFILETIME) &Hp07FTime);
2021-05-31 15:20:16 +02:00
2019-02-04 11:48:08 +01:00
CommitRV = Commit();
if (CommitRV == 0) Error = GetErrorDetails(&ErrorSource, &ErrorReason, &ErrorData);
2019-02-11 11:34:52 +01:00
ReadCalibrationData(
&K1,
&K2,
&K3,
&K4,
&K5,
&K6,
&SG,
&BC,
&FB,
&HG);
CommitRV = Commit();
if (CommitRV == 0) Error = GetErrorDetails(&ErrorSource, &ErrorReason, &ErrorData);
2021-06-01 16:35:24 +02:00
return CommitRV==1 ? 0 : 1;
2019-02-04 11:48:08 +01:00
}
2021-04-16 10:38:48 +02:00
WORD EpdBase::Epd2U::PrepareForIssue()
{
2021-05-28 17:06:41 +02:00
int rv = 0;
if (port == 0) return 0;
2020-03-11 13:23:29 +01:00
CommitRV = WriteConfig();
if (CommitRV) CommitRV = Commit();
if (CommitRV) CommitRV = ClearDose();
if (CommitRV) CommitRV = ClearTotalDose();
if (CommitRV) CommitRV = ClearPeakRates();
if (CommitRV) CommitRV = Commit();
2021-05-28 17:06:41 +02:00
if (CommitRV) rv = 0; else rv = 1;
return rv;
}
2021-06-01 16:35:24 +02:00
/// <summary>
/// DeIssue and close
/// </summary>
/// <returns></returns>
2021-04-16 10:38:48 +02:00
WORD EpdBase::Epd2U::DeIssue()
2019-02-04 11:48:08 +01:00
{
2021-05-31 15:20:16 +02:00
int rv = 0;
2019-02-04 11:48:08 +01:00
ClearDoseRV = ClearTotalDoseRV = ClearPeakRatesRV = DeIssueEpdRV = 0;
2021-03-26 17:20:57 +01:00
if (port == 0) return 1;
2019-02-04 11:48:08 +01:00
if (CommitRV) CommitRV = ClearDose();
if (CommitRV) CommitRV = ClearTotalDose();
if (CommitRV) CommitRV = ClearPeakRates();
2020-10-08 13:48:36 +02:00
if (CommitRV) CommitRV = Commit();
if (CommitRV) CommitRV = ClearFaultFlags();
if (CommitRV) CommitRV = ClearLatchedAlarms();//Hp10Rate1; Hp10Rate2; Hp07Rate; ReturnForRead
if (CommitRV) CommitRV = Commit();
CommitRV = ClearFailFlag();
2021-05-31 15:20:16 +02:00
if (CommitRV && EPDIssued) {
CommitRV = DeIssueEpd();
if (CommitRV) CommitRV = Commit();
}
if (CommitRV && DetectorsOn ) {
2019-02-04 11:48:08 +01:00
CommitRV = EpdOff();
CommitRV= Commit();
2021-06-02 13:54:22 +02:00
if (!VersionOK) Sleep(1000);// Versie < .. Commit & Sleep
2019-02-04 11:48:08 +01:00
}
2021-06-03 08:37:02 +02:00
if (CommitRV ) {
CloseAndSignal(EndSessionControl, 12);
2021-05-31 15:20:16 +02:00
rv = 0;
}
2019-02-04 11:48:08 +01:00
else
{
FlushBuffers(port);
2021-06-02 13:54:22 +02:00
Error = GetErrorDetails(&ErrorSource, &ErrorReason, &ErrorData);
2021-06-03 08:37:02 +02:00
CloseAndSignal(EndSessionControl, 40);
2021-05-31 15:20:16 +02:00
rv = ErrorReason;
2019-02-04 11:48:08 +01:00
}
2021-05-31 15:20:16 +02:00
return rv;
2019-02-04 11:48:08 +01:00
}
2021-05-28 17:06:41 +02:00
/// <summary>
///
/// </summary>
/// <returns>O = OK</returns>
2021-04-16 10:38:48 +02:00
WORD EpdBase::Epd2U::Issue()
2019-02-04 11:48:08 +01:00
{
2021-06-03 08:37:02 +02:00
int rv=0;
2019-02-04 11:48:08 +01:00
IssueEpdRV = WriteAlarmDoseThresholdsRV = WriteAlarmRateThresholdsRV = WriteWearerNameRV = OnRV = CommitRV = 0;
2021-05-28 17:06:41 +02:00
if (port == 0) return 0;
2021-04-16 10:38:48 +02:00
WORD OKRV = SetFailFlag(); // all actions have been completed
2019-02-04 11:48:08 +01:00
if (OKRV) OKRV = Commit();
2021-05-21 16:22:20 +02:00
if (OKRV) OKRV = BaseLineCounts();
2019-02-04 11:48:08 +01:00
if (OKRV) OKRV = WriteAlarmDoseThresholds(Hp10THDose1, Hp10THDose2, Hp07THDose);
if (OKRV) OKRV = WriteAlarmRateThresholds(Hp10Rate1On, Hp10Rate2On, Hp07RateOn, Hp10Rate1Off, Hp10Rate2Off, Hp07RateOff);
if (OKRV) OKRV = Commit();
if (OKRV) OKRV = IssueEpd(WearerID, WearerIDLength);
if (OKRV) OKRV = Commit();
2021-04-16 10:38:48 +02:00
if (OKRV) OKRV = WriteWearerName(WearerName,(WORD)strlen((char *)WearerName));
2019-02-11 11:34:52 +01:00
if (OKRV) OKRV = Commit();
2021-06-03 08:37:02 +02:00
if (OKRV == 0)
2019-02-14 15:56:23 +01:00
{
2021-06-03 08:37:02 +02:00
Error = GetErrorDetails(&ErrorSource, &ErrorReason, &ErrorData);
2021-05-28 17:06:41 +02:00
rv = 1;
2019-02-14 15:56:23 +01:00
}
ClearFailFlag(); // all actions have been completed
2021-06-03 08:37:02 +02:00
if (OKRV)
{
if (!DetectorsOn) {
OKRV = EpdOn();
OKRV = Commit();
if (!VersionOK) Sleep(1500);
}
CloseAndSignal(EndSessionControl, 12);
rv = 0;
2021-05-21 16:22:20 +02:00
}
2021-06-03 08:37:02 +02:00
else
2019-02-04 11:48:08 +01:00
{
FlushBuffers(port);
2019-02-14 15:56:23 +01:00
Error = GetErrorDetails(&ErrorSource, &ErrorReason, &ErrorData);
2021-06-03 08:37:02 +02:00
CloseAndSignal(EndSessionControl, 40);
rv = 1;
2019-02-04 11:48:08 +01:00
}
2021-05-28 17:06:41 +02:00
return rv;
2021-05-27 16:13:53 +02:00
}
2021-06-01 16:35:24 +02:00
int EpdBase::Epd2U::GetAllDeissue()
{
int rv = 0;
rv = ReadDoses(); //0 = success
//rv = ReadTresHolds(); //tresholds not needed, only doses
rv = EPDReadExtraStatus();
rv = DeIssue(); //does close
return rv;
}
int EpdBase::Epd2U::GetAll(bool Closeconnection)
{
int rv = 0;
rv = ReadDoses(); //0 = success
rv = ReadTresHolds(); //0 = success Tresholds needed
if (Closeconnection) Close();
return rv;
}
2021-05-27 16:13:53 +02:00
/// <summary>
/// discover, connect and read status
/// </summary>
/// <param name="tokenSourceTimeout"></param>
/// <returns>0=success 1=connect error, 2 = no devices, 3= error reading status</returns>
int EpdBase::Epd2U::ConnectAndStatus(int tokenSourceTimeout)
{
WORD dllStatus;
int rv = 1;
if (CommsInitialized == 0) StartCom();
dllStatus = StartDiscover(tokenSourceTimeout);
if (dllStatus != 1) rv = 1; //Connect error
else if (DeviceCount < 1) rv = 2; //TO
else if (ReadStatus() != 1) rv = 1; //Read Error
else rv = 0;
return rv;
2021-06-02 13:54:22 +02:00
}
int EpdBase::Epd2U::IssueAndCheck(float gain)
{
int rv = 0;
if (isNG) {
int kx = (int)gain;
rv = ReadCal();
if (rv != 0 || K6 != 1310) { rv = 1; goto error; }
if (K3 != kx || K4 != kx)
{
K3 = K4 = kx;
rv = WriteCal();
if (rv != 0) goto error;
}
}
rv = PrepareForIssue();
rv = Issue(); // data already loaded
return rv;
error:
return rv;
2019-02-01 09:54:48 +01:00
}