Newer
Older
PrismSoftware / ECTrainer2 / BitalMonitor.cpp
#include "ECTrainer.h"
#include "BitalMonitor.h"
#include <iostream>
#include <string.h>

// コンストラクタ
BitalMonitor::BitalMonitor(ECTrainer* pEct)
	:BaseProcess(pEct)
	, _rrInterval(ECTrainer::RINGBUFSIZE, 0)
	, _useDevice(false)
{
}

// 初期化
bool BitalMonitor::Init() {

	bool rv = _Com.Open(COM_PORT, _T("baud=19200 parity=N data=8 stop=1"));

	// ポートチェック
	char comBuf[256] = { '\0' };
	DWORD readBytes = _Com.Receive((BYTE*)comBuf, 256);
	if (readBytes < 1) return true;
	comBuf[readBytes] = '\0';
	char* pt = strchr(comBuf, LF);
	if (!pt) return true;
	if (atoi(pt + 1) < 1) return true;

	_useDevice = true;
	return true;
}

// ループ
bool BitalMonitor::MainLoop() {

	if (!_useDevice) return true;

	char lastBuf[256] = { '\0' };
	char comBuf[256] = { '\0' };
	char valueStr[10] = { '\0' };

	int count = 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);
						}
						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;
		}
		Sleep(10);
		//if (++count > 20) break;
	}

	return true;
}