#include "common.h"
// コンストラクタ
BitalMonitor::BitalMonitor(ECTrainer* pEct)
:BaseProcess(pEct)
, _rrInterval(ECTrainer::RINGBUFSIZE, 0)
, _useDevice(false)
{
}
// 初期化
bool BitalMonitor::Init() {
char comBuf[256] = { '\0' };
for (int com = 1; com <= GComPort::COM_SEARCH_MAX; com++) {
if (!_Com.Open(com, _T("baud=19200 parity=N data=8 stop=1"))) continue;
// ポートチェック
DWORD readBytes = _Com.Receive((BYTE*)comBuf, 256);
if (readBytes < 1) continue;
if ((*comBuf >= '0' && *comBuf <= '9') || *comBuf == '#' || *comBuf == LF) {
mwut::DebugPrintf(_T("Bital device found on com%d\n"), com);
_useDevice = true;
return true;
}
}
mwut::DebugPrintf(_T("Bital device not found\n"));
_useDevice = false;
return true;
}
// ループ
bool BitalMonitor::MainLoop() {
if (!_useDevice) return true;
char lastBuf[256] = { '\0' };
char comBuf[256] = { '\0' };
char valueStr[10] = { '\0' };
DWORD lastRR = 0; // 前回のRR取得時間(タイムアウト時 0)
while (_pEct->IsAppRun()) {
// バイタル
DWORD readBytes = _Com.Receive((BYTE*)comBuf, 256);
if (readBytes > 0) {
comBuf[readBytes] = '\0';
//std::cout << "comBuf:" << comBuf << std::endl;
strcat_s(lastBuf, 256, comBuf);
//std::cout << "lastBuf:" << lastBuf << std::endl;
char* sp = lastBuf;
char* pt = sp;
for (; *pt != '\0'; pt++) {
if (*pt == LF) {
//*pt = '\0';
//std::cout << "value:" << sp << std::endl;
if (*sp == '#') {
int RR = atoi(sp + 1);
if (RR > 0) {
_rrInterval.Put(RR);
lastRR = timeGetTime();
}
//std::cout << "Read:" << RR << std::endl;
}
sp = pt + 1;
}
}
if (*sp == '\0') lastBuf[0] = '\0';
else strcpy_s(lastBuf, 256, sp);
//std::cout << "lastBuf2:" << lastBuf << std::endl;
}
// 無信号検出
if (lastRR > 0 && timeGetTime() - lastRR > NO_SIGNAL_TIMEOUT) {
_rrInterval.Put(0);
lastRR = 0;
}
Sleep(10);
}
return true;
}