#include "common.h"
// コンストラクタ
BitalMonitor::BitalMonitor(ECTrainer* pEct)
:BaseProcess(pEct)
, _rrInterval(ECTrainer::RINGBUFSIZE, 0)
, _useDevice(false)
, _lastRR(0)
{
::ZeroMemory(lastBuf, BUF_LEN);
}
// 初期化
bool BitalMonitor::Init() {
// デバイスの探索
for (int com = 1; com <= GComPort::COM_SEARCH_MAX; com++) {
if (!_Com.Open(com, _T("baud=19200 parity=N data=8 stop=1"))) continue;
// ポートチェック
char comBuf[BUF_LEN] = { '\0' };
DWORD readBytes = _Com.Receive((BYTE*)comBuf, BUF_LEN - 1);
if (readBytes < 1) continue;
std::cout << "com " << com << " '" << comBuf << "'" << std::endl;
//mwut::DebugPrintf(_T("check com %d\n"), com);
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::Routine() {
if (!_useDevice) return true;
// バイタル
char comBuf[BUF_LEN] = { '\0' };
DWORD readBytes = _Com.Receive((BYTE*)comBuf, BUF_LEN /2);
if (readBytes > 0) {
std::cout << "readBytes:" << readBytes << std::endl;
comBuf[readBytes] = '\0';
//std::cout << "comBuf:" << comBuf << std::endl;
strcat_s(lastBuf, BUF_LEN - 1, 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, BUF_LEN - 1, sp);
//std::cout << "lastBuf2:" << lastBuf << std::endl;
}
// 無信号検出
if (_lastRR > 0 && timeGetTime() - _lastRR > NO_SIGNAL_TIMEOUT) {
_rrInterval.Put(0);
_lastRR = 0;
}
Sleep(10);
return true;
}