Mk3 development
This commit is contained in:
parent
861b9efa20
commit
5f1354db40
4 changed files with 81 additions and 30 deletions
100
MK3/MK3Base.cpp
100
MK3/MK3Base.cpp
|
|
@ -2,6 +2,12 @@
|
|||
#include "MK3Base.h"
|
||||
#pragma unmanaged
|
||||
|
||||
HANDLE Ev1 = INVALID_HANDLE_VALUE;
|
||||
void WINAPI completion(CommsHandle hComms, CompletionToken token)
|
||||
{
|
||||
SetEvent(Ev1);
|
||||
}
|
||||
|
||||
MK3::Epd2U::Epd2U(int _comport)
|
||||
{
|
||||
port = _comport;
|
||||
|
|
@ -84,54 +90,82 @@ int MK3::Epd2U::StartDiscover()
|
|||
rv = WaitForSingleObject(Ev1, 10000);
|
||||
}
|
||||
//System::Diagnostics::Trace::WriteLine(System::String::Format("Discover DeviceCount = {0}", DeviceCount));
|
||||
|
||||
return DiscRV;
|
||||
}
|
||||
void MK3::Epd2U::Open(DWORD DeviceID)
|
||||
|
||||
void MK3::Epd2U::Open(DiscoveryId DeviceID)
|
||||
{
|
||||
CurrentDeviceID = DeviceID;
|
||||
CurrentDeviceID = DeviceID.Id;
|
||||
if (port > 0) {
|
||||
ConRV = Connect(DeviceID);
|
||||
if (ConRV == 0) Error = GetErrorDetails(&ErrorSource, &ErrorReason, &ErrorData);
|
||||
else {
|
||||
OpenRV = OpenDevice(port, CurrentDeviceID);
|
||||
if (OpenRV == 0) Error = GetErrorDetails(&ErrorSource, &ErrorReason, &ErrorData);
|
||||
ConRV = Connect(epdComsHandle, DeviceID,true);
|
||||
//if (ConRV == 0) Error = GetErrorDetails(&ErrorSource, &ErrorReason, &ErrorData);
|
||||
//else {
|
||||
Open(DeviceID); // OpenDevice(port, CurrentDeviceID);
|
||||
//if (OpenRV == 0) Error = GetErrorDetails(&ErrorSource, &ErrorReason, &ErrorData);
|
||||
}
|
||||
}
|
||||
//}
|
||||
else { OpenRV = ConRV = 1; }
|
||||
}
|
||||
void MK3::Epd2U::Close()
|
||||
{
|
||||
if (port > 0) CloseDevice();
|
||||
if (port > 0) {
|
||||
Close();// CloseDevice();
|
||||
Disconnect(epdComsHandle);
|
||||
}
|
||||
//DeinitComms(port); CommsInitialized = 0;
|
||||
}
|
||||
|
||||
void MK3::Epd2U::DecodeFunctionFlags()
|
||||
{
|
||||
|
||||
EpdType = (FunctionFlags & 0x1F00) >> 8;
|
||||
}
|
||||
|
||||
void MK3::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;
|
||||
|
||||
DetectorsOn = ((epd3status.OperatingStatus & OpStatusFlags::EpdOn)== OpStatusFlags::EpdOn) ? 1 : 0;
|
||||
EPDIssued = ((epd3status.OperatingStatus & OpStatusFlags::EpdIssued)== OpStatusFlags::EpdIssued) ? 1 : 0;
|
||||
EPDLocked = ((epd3status.OperatingStatus & OpStatusFlags::GainAdjustable)== OpStatusFlags::GainAdjustable) ? 0 : 1;
|
||||
EPDTesting = ((epd3status.OperatingStatus & OpStatusFlags::DetectorTestRequested)== OpStatusFlags::DetectorTestRequested) ? 1 : 0;
|
||||
EPDFaulty = ((epd3status.FaultStatus & FaultStatusFlags::EpdFaulty) == FaultStatusFlags::EpdFaulty) ? 1 : 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;
|
||||
//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 = ((epd3status.FaultStatus & FaultStatusFlags::EpdFaulty)== FaultStatusFlags::EpdFaulty) ? 1 : 0;
|
||||
EPDComFault = ((epd3status.FaultStatus & FaultStatusFlags::EarlyCommsTermination) == FaultStatusFlags::EarlyCommsTermination) ? 1 : 0;
|
||||
EPDCalFault = ((epd3status.FaultStatus & FaultStatusFlags::NotCalibrated) == FaultStatusFlags::NotCalibrated) ? 1 : 0;
|
||||
EPDDetFault = ((epd3status.FaultStatus & FaultStatusFlags::DetectorTestFail) == FaultStatusFlags::DetectorTestFail) ? 1 : 0;
|
||||
EPDEprFault = ((epd3status.FaultStatus & FaultStatusFlags::EepromFailure) == FaultStatusFlags::EepromFailure) ? 1 : 0;
|
||||
EPDTrhFault = ((epd3status.FaultStatus & FaultStatusFlags::BadThreshold) == FaultStatusFlags::BadThreshold) ? 1 : 0;
|
||||
|
||||
|
||||
|
||||
for (int ix =0; ix < 4;ix++ )
|
||||
{
|
||||
DoseAlarmFlags status = epd3status.DoseAlarms[ix].Status;
|
||||
switch ( (MeasurementId) epd3status.DoseAlarms[ix].Id)
|
||||
{
|
||||
case MeasurementId::Meas_Hp07:
|
||||
case MeasurementId::Meas_Hp10N:
|
||||
AlarmDoseHP07N = (status & DoseAlarmFlags::DoseAlarm) == DoseAlarmFlags::DoseAlarm ? 1 : 0;
|
||||
AlarmRateHP07N = (status & DoseAlarmFlags::RateAlarm) == DoseAlarmFlags::RateAlarm ? 1 : 0;
|
||||
break;
|
||||
case MeasurementId::Meas_Hp10:
|
||||
case MeasurementId::Meas_Hp10G:
|
||||
AlarmDoseHP101G = (status & DoseAlarmFlags::DoseAlarm) == DoseAlarmFlags::DoseAlarm ? 1 : 0;
|
||||
AlarmDoseHP102G = AlarmDoseHP101G;
|
||||
AlarmRateHP101G = (status & DoseAlarmFlags::RateAlarm) == DoseAlarmFlags::RateAlarm ? 1 : 0;
|
||||
AlarmRateHP102G = AlarmRateHP101G;
|
||||
break;
|
||||
}
|
||||
|
||||
//OtherAlarm
|
||||
OtherAlarmRateHp101G = (OtherAlarms & 1) != 0;
|
||||
|
|
@ -145,6 +179,14 @@ void MK3::Epd2U::DecodeStatus()
|
|||
}
|
||||
WORD MK3::Epd2U::ReadStatus()
|
||||
{
|
||||
int32_t r;
|
||||
ResetEvent(Ev1);
|
||||
token = BeginReadStatus(epdComsHandle, completion);
|
||||
r = Commit(epdComsHandle);
|
||||
r = WaitForSingleObject(Ev1, 10000); // no time-out interval
|
||||
r = EndReadStatus(epdComsHandle, token, &epd3status);
|
||||
|
||||
|
||||
Error = 0; ReadStatusRV = 0;
|
||||
memset(WearerID, 0, WearerIDLength + 1);
|
||||
memset(WearerName, 0, WearerNameLength + 1);
|
||||
|
|
@ -161,7 +203,7 @@ WORD MK3::Epd2U::ReadStatus()
|
|||
return 1;
|
||||
}
|
||||
|
||||
CommitRV = ReadEpdStatus(&EpdClock, &RealTime, &IssueCount, &OffTime, &OperatingStatus, &ErrorStatus, &AlarmStatus, &OtherAlarms, &EEPROMBadSectors);
|
||||
CommitRV = ReadEpdStatus(&EpdClock, &RealTime, &IssueCount, &OffTime, &OperatingStatus, &ErrorStatus, &AlarmStatus, &OtherAlarms, &EEPROMBadSectors);
|
||||
if (port == 0) {
|
||||
EpdClock = 123; ErrorStatus = 0;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -215,7 +215,7 @@ namespace MK3
|
|||
BYTE byStatus4;
|
||||
|
||||
int StartDiscover();
|
||||
void Open(DWORD DeviceID);
|
||||
void Open(DiscoveryId DeviceID);
|
||||
void Close();
|
||||
|
||||
void DecodeFunctionFlags();
|
||||
|
|
@ -241,9 +241,15 @@ namespace MK3
|
|||
WORD Issue();
|
||||
|
||||
~Epd2U();
|
||||
|
||||
StatusData_t epd3status;
|
||||
|
||||
static HANDLE Ev1 ;
|
||||
static Epd2U* current;
|
||||
static void WINAPI discovery (CommsHandle hComms, DiscoveryId const discovered[], int32_t count);
|
||||
|
||||
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -238,6 +238,7 @@ typedef struct
|
|||
uint16_t DataLength;
|
||||
uint8_t Data[MAX_GRAPHIC_BYTES];
|
||||
} GraphicBitmap_t;
|
||||
|
||||
enum class OpStatusFlags : uint32_t {
|
||||
EpdOn = 0x0001,
|
||||
EpdIssued = 0x0002,
|
||||
|
|
|
|||
|
|
@ -62,6 +62,8 @@ void GetEPD()
|
|||
r = WaitForSingleObject(Ev1, 10000); // no time-out interval
|
||||
std::cout << "got status\n";
|
||||
r = EndReadStatus(epdComsHandle, token, &status);
|
||||
|
||||
|
||||
ResetEvent(Ev1);
|
||||
token = BeginReadDoses(epdComsHandle, new uint8_t[]{0, 1}, 2, completion);
|
||||
r = Commit(epdComsHandle);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue