Newer
Older
PrismSoftware / ECTrainer2 / BitalMonitor.cpp
@Toshiya Nakaguchi Toshiya Nakaguchi on 6 Jul 2020 1 KB バイタル無信号検出
#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;
}