eDosStation/EpdBase3/Epd3Base.h
Luc Vandenbroucke 5285d3fe7f wait messages
2024-09-09 11:24:35 +02:00

330 lines
7.9 KiB
C++

#pragma once
#pragma unmanaged
#include <windows.h>
#pragma unmanaged
#include "EpdCommon.h"
#include "Epd3.h"
#include "Epd2.h"
#pragma unmanaged
#define MaxPeakRates 10
#define MaxSensitivities 10
#define MaxDoses 4
#define MaxCounts 6
#define MaxAlarmConfig 10
#define MaxTresholds 10
#define MaxSteps 50
#define MaxBatch 4
#define ResponseTimeout 2500
namespace Epd3Base {
enum eFunctions {
ReadSensitivities, ReadDetectorThresholds, fReadDoses, ReadTotalDoses, ReadQualityData, ReadPeakRates, ClearTotalDose, ClearDose, ClearPeakRates, ClearFaultStatus, ClearLatchedAlarms, EpdOnOff, ReadAlarmConfiguration, ReadAlarmThresholds, WriteAlarmThresholds, WriteRateOffPercentage, DeissueEPD, SetBaselineCounters, WriteWearerId, ReadBaselineCounts, MfrLogin_R2, WriteSensitivities_R2, WriteAccessLevel
, WriteQuickAccessDisplays_R3, WriteDisplayEnables_R3, WriteDisplayEnablePermissions_R3, WriteAlarmConfiguration_R3, WriteOffModeDisplay_R3, WriteSwitchOnFromButton_R3
, WriteChirpSensitivity, WriteChirpEnable_R3
, WriteRTC_R3
, ReadStatus, ReadEpdIdentities, ReadCounts, ReadWearerId, ReadRTC
, fDestroyReaderInterface
, fDisconnect , fDisconnectAndNotify
, fStartDiscover
, IssueEPD, EnableProtectedSession
};
class Epd3U
{
public:
char comPort[5] = { "COM4" };
CommsHandle epdComsHandle;
uint32_t CurrentDeviceID;
EpdGeneration EpdGen;
DiscoveryId Epd;
CompletionToken token, btoken[MaxBatch];
WORD port = 3;
const WORD MaxDevices = 10;
WORD DeviceCount = 0;
DWORD DeviceIDs[10];
int32_t StepReturnValues[MaxSteps][4];
int CurrentStep;
BYTE HasStepError = 0;
WORD WriteConfig32 = 1;
WORD Error = 0;
WORD ErrorStep = 0;
WORD ErrorSource;
WORD ErrorReason;
WORD ErrorData;
int ConnectRetries = 0;
BYTE isConnected = 0;
int32_t Dll3RV;
UINT16 EndSessionControl;
public:
//HANDLE hWaitTimer = 0;
HANDLE hCompletion = 0;
private:
WORD CommsInitialized = 0;
public:
Epd3U(int _comport);
~Epd3U();
DWORD StartCom();
void EndCom(bool doDiscon);
int StartDiscover(int tokentimeout);
//OperatingStatus
BYTE DetectorsOn = 0;
BYTE EPDIssued = 0;
BYTE EPDLocked = 0;
BYTE EPDTesting = 0;
BYTE EPDProcSec = 0;
BYTE EPDFaulty = 0;
//ErrorStatus
BYTE EPDNewFault = 0;
BYTE EPDComFault = 0;
BYTE EPDCalFault = 0;
BYTE EPDDetFault = 0;
BYTE EPDEprFault = 0;
BYTE EPDTrhFault = 0;
BYTE EPDOthFault = 0;
//AlarmStatus
BYTE AlarmDoseHP101G = 0;
BYTE AlarmDoseHP102G = 0;
BYTE AlarmDoseHP07N = 0;
BYTE AlarmRateHP101G = 0;
BYTE AlarmRateHP102G = 0;
BYTE AlarmRateHP07N = 0;
//OtherAlarm
BYTE OtherAlarmRateHp101G = 0;
BYTE OtherAlarmRateHp102G = 0;
BYTE OtherAlarmRateHp07N = 0;
BYTE OtherAlarmReturn = 0;
BYTE OtherAlarmBatLow = 0;
BYTE OtherAlarmCarrier = 0;
BYTE OtherAlarmBatVolt = 0;
//New fields
BYTE eDosDose07Warning = 0;
BYTE eDosDose07Alarm = 0;
BYTE eDosDose10Warning = 0;
BYTE eDosDose10Alarm = 0;
BYTE eDosRate07Warning = 0;
BYTE eDosRate07Alarm = 0;
BYTE eDosRate10Warning = 0;
BYTE eDosRate10Alarm = 0;
BYTE eDosBatteryWarning = 0;
BYTE eDosDoseAlarm = 0;
BYTE eDosRateAlarm = 0;
DWORD Password = 9;
//Identification
DWORD EpdID = 0;
WORD HardVersion, HardVersionMinor;
WORD SoftVersion;
WORD FunctionFlags;
DWORD EpdClock;
DWORD RealTime;
WORD IssueCount;
DWORD OffTime;
WORD OtherAlarms;
WORD EEPROMBadSectors;
EpdTypes EpdType = EpdTypes::Mk2Gamma;
bool isBG = false;
bool isNG = false;
bool VersionOK = false;
bool isMK3 = false;
bool hasAlarm = false;
bool hasFault = false;
SYSTEMTIME tRealTime;
//Wearer
#define WearerIDLength 12
BYTE WearerID[(WearerIDLength)+1];
#define WearerNameLength 22
BYTE WearerName[WearerNameLength + 1];
// Dose
float Hp10Dose;
float Hp07Dose;
float Hp10Total;
float Hp07Total;
WORD Knocks;
WORD Resets;
WORD QualityData;
//Peaks
float Hp10Peak;
float Hp07Peak;
DWORD Hp10Time;
DWORD Hp07Time;
long long Hp10FTime,Hp07FTime;
//AlarmDoseTreshold
float Hp10THDose1;
float Hp10THDose2;
float Hp07THDoseA; //Alarm
float Hp07THDose;
float Hp10Rate1On;
float Hp10Rate2On;
float Hp07RateOn;
float Hp07RateAOn;
float Hp10Rate1Off;
float Hp10Rate2Off;
float Hp07RateOff;
float Hp07RateAOff;
float K1;
float K2;
float K3;
float K4;
float K5;
float K6;
uint32_t SG;
uint32_t BC;
uint32_t FB;
uint32_t HG;
DWORD D1;
DWORD D2;
DWORD D3;
DWORD D4;
DWORD CountsClock;
DWORD BaseD1;
DWORD BaseD2;
DWORD BaseD3;
DWORD BaseD4;
DWORD BaseCountsClock;
BYTE ConnectTimerFired;
OpStatusFlags OperatingStatus;
FaultStatusFlags ErrorStatus;
AlarmStatusFlags AlarmStatus;
StatusData_t epd3status;
uint8_t counterIds[MaxCounts]; //max 6 for mk3
uint8_t counterIdLen;
MeasurementId mIDs[MAX_MEASUREMENTS];
uint8_t nmIDs = 0;
MeasValue_t doses[MaxDoses];
MeasValue_t totdoses[MaxDoses];
PeakRate_t peakRates[MaxPeakRates];
AlarmConfig_t alarmConfig[MaxAlarmConfig];
CalSensitivity_t sensitivities[MaxSensitivities];
Counter_t Counts[MaxCounts];
uint8_t countsRead;
uint32_t seconds;
uint8_t numDoses, numtotDoses, numRates, numSensitivities, numTresholds;
uint16_t numAlarm;
uint32_t utc;
Mk3QualityData_t quality;
Mk3AlarmThresholds_t hp07tresholds;
Mk3RatePercentage_t RatePct[2];
Mk3AlarmThresholds_t hp10tresholds;
DetectorThreshold_t dTresholds[MaxTresholds];
DisplayAttributeMap_t* enables;
uint8_t numItems;
QuickAccessDisplay_t* displayIds;
uint8_t numDisplays;
AlarmConfig_t* alarmConfigIds;
uint16_t alarmConfigLen = 20;
OffModeDutyCycle dutyCycle;
OffModeDisplayId_t offModeDispId;
uint8_t OnOfenabled;
EncryptionKey EC { 0xE7 ,0xD3 ,0xE7 ,0x69 ,0xF3 ,0xF5 ,0x93 ,0xDA ,0xDC ,0xB8 ,0x63 ,0x4C ,0xC5 ,0xB0 ,0x9F ,0xC9 ,0x0D ,0xD3 ,0xA6 ,0x1C ,0x4A ,0x06 ,0xA7 ,0x9C ,0xB0 ,0x92 ,0x36 ,0x62 ,0xFE ,0x6F ,0xAE ,0x6B };
uint8_t ECLen=32;
//Functions
int OpenDev(DiscoveryId DeviceID);
int ReOpenDev();
int DisCon(UINT16 alarm);
void CloseDev(bool CloseAll);
void DecodeStatus();
int SetTime();
int ReadStatus();
protected:
void decodeCounters(int count);
void decodeBaseCounters(int count);
void decodeTreshold(Mk3AlarmThresholds_t* th);
void encodeTreshold(Mk3AlarmThresholds_t* th);
void decodedTresholds(int numdTresholds);
void decodeSensitivities(int count);
void decodetotDoses(int count);
void decodeDoses(int count);
void decodePeakRates(int count);
public:
int SetFunctionReturnValue(eFunctions f, BYTE CanIgnore);
void SetCommitReturnValue(int rv);
void SetCommitReturnValue(int step, int rv);
uint32_t SetEndReturnValue(int rv);
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);
int32_t End2RV(int step, int32_t(WINAPI* endFunction2)(CommsHandle hComms, CompletionToken token), CompletionToken token);
int GetAll(bool Closeconnection);
int GetAllDeissue(bool reconnect);
int IssueAndCheck(float gain, float ChirpRate);
int SetChirp(float Sensitivity);
WORD ReadCal();
WORD ReadSensitivitiesAndTresholds();
WORD ReadDoses();
int ClearDoses();
int ClearAlarms();
WORD ReadAlarmConfig();
int ConnectAndStatus(int tokenSourceTimeout);
WORD ReadAlarmTresholds();
WORD WriteAlarmTresholds();
WORD DeIssue();
WORD WriteWearer();
WORD Issue(bool Preparedone);
WORD EPDReadExtraStatus();
WORD WriteCal();
WORD PrepareForIssue();
private:
int WriteConfig(void);
void ResetStepReturnValues();
};
}