Newer
Older
PrismSoftware / ECTrainer2 / ECTrainer.h
#pragma once

#include <Windows.h>
#include "myOpenCV.h"

#define ADDR "192.168.71.50"

class BaseProcess;
class ECTrainerGUI;
class ImageProc;
class SceneCamera;
class Stimulus;
class EyeTrack;
class TobiiREST;
class BitalMonitor;
class Worker;
class KeepAlive;
class Marker;

class ECTrainer
{
private:
	// プロセス一覧 KeepAlive -> EyeTrack の順必須
	enum PROC { IMGPROC, SCNCAM, STIM, ALIVE, EYETR, REST, BITAL, WORKER, GUI, NUM };
	BaseProcess* _pProcs[PROC::NUM];
	HINSTANCE _hInstance;
	Marker* _pMarker;
	bool _AppRunning;			// 実行中フラグ
	int _CalibResult;		// キャリブレーション結果 0:未実施 1:成功 -1:失敗
	std::wstring _MovieToShow;	// 再生する動画ファイル

	// スレッド開始点
	static DWORD WINAPI ThreadEntry(LPVOID lpParameter);
	//static DWORD WINAPI KeepAliveThreadEntry(LPVOID lpParameter);

public:
	static const int RINGBUFSIZE = 4;
	ECTrainer(HINSTANCE hInstance);
	~ECTrainer();
	ECTrainerGUI*	PECTrainerGUI()	{ return (ECTrainerGUI*)_pProcs[GUI]; }
	ImageProc*		PImageProc()	{ return (ImageProc*)_pProcs[IMGPROC]; }
	SceneCamera*	PSceneCamera()	{ return (SceneCamera*)_pProcs[SCNCAM]; }
	Stimulus*		PStimulus()		{ return (Stimulus*)_pProcs[STIM]; }
	KeepAlive*		PKeepAlive()	{ return (KeepAlive*)_pProcs[ALIVE]; }
	EyeTrack*		PEyeTrack()		{ return (EyeTrack*)_pProcs[EYETR]; }
	TobiiREST*		PTobiiREST()	{ return (TobiiREST*)_pProcs[REST]; }
	BitalMonitor*	PBitalMonitor() { return (BitalMonitor*)_pProcs[BITAL]; }
	Worker*			PWorker()		{ return (Worker*)_pProcs[WORKER]; }
	Marker*			PMarker()		{ return _pMarker; }
	bool Process();
	void CalibStart();
	int CheckCalibResult();
	void StartStim();
	void StopStim();
	void NextStim();
	//void SetSceneBuffer(cv::Mat& img);
	void SetDispBuffer(cv::Mat& img);
	void SetGazeV(cv::Point gazeV);
	int BatteryLevel();
	cv::Point GetGazeV();
	//cv::Point2f GetGazeI();
	cv::Point2f GetEyeR();
	cv::Point2f GetEyeL();

	// インライン関数
	bool IsAppRun() { return _AppRunning; }	// アプリケーション実行中かどうか
	void StopApp() { _AppRunning = false; }	// アプリケーションを停止
	//void SetHomographyStatus(bool ok) { _HomographyOK = ok; }
	//bool GetHomographyStatus() { return _HomographyOK; }
	//void SetSceneSize(cv::Size s) { _SceneSize = s; }
	//cv::Size GetSceneSize() { return _SceneSize; }
	void SetCalibResult(int result) { _CalibResult = result; }
	void SetMovieToShow(std::wstring file) { _MovieToShow = file; }
	std::wstring GetMovieToShow() { return _MovieToShow; }
};