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

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

#define ADDR "192.168.71.50"
//#define EYEDEVICE_GLASS2
#define EYEDEVICE_NONE

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

// メッセージ一覧
enum class ECTMSG {
	QUIT = WM_QUIT,
	CALIB_START = WM_USER,
	CALIB_END,
};

// アプリケーション状態
enum class APP_STATUS { 
	BOOT, IDLE, CALIB, EXEC 
};

// キャリブレーション結果
enum class CALIB_STATUS { 
	DONE, FAIL, ERR 
};

// 刺激ページ
enum class STIM_PAGE { 
	OPENING, CALIB, CALIB_COMPLETE, CALIB_FAILED, START, STOP, NEXT, BACK, WHITE 
};

class ECTrainer
{
	// プロセス一覧(初期化順) GUI先頭, SCNCAM->ALIVE->EYETR
	enum class PROC { GUI, REST, IMGPROC, STIM, SCNCAM, ALIVE, EYETR, BITAL, WORKER, NUM };

	BaseProcess* _pProcs[(int)PROC::NUM];
	Marker* _pMarker;
	HINSTANCE _hInstance;
	bool _AppRunning;			// 実行中フラグ
	std::wstring _MovieToShow;	// 再生する動画ファイル

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

public:
	static const int RINGBUFSIZE = 4;
	ECTrainer(HINSTANCE hInstance);
	~ECTrainer();
	ECTrainerGUI*	PECTrainerGUI()	{ return (ECTrainerGUI*)_pProcs[(int)PROC::GUI]; }
	ImageProc*		PImageProc()	{ return (ImageProc*)_pProcs[(int)PROC::IMGPROC]; }
	SceneCamera*	PSceneCamera()	{ return (SceneCamera*)_pProcs[(int)PROC::SCNCAM]; }
	Stimulus*		PStimulus()		{ return (Stimulus*)_pProcs[(int)PROC::STIM]; }
	KeepAlive*		PKeepAlive()	{ return (KeepAlive*)_pProcs[(int)PROC::ALIVE]; }
	EyeTrack*		PEyeTrack()		{ return (EyeTrack*)_pProcs[(int)PROC::EYETR]; }
	TobiiREST*		PTobiiREST()	{ return (TobiiREST*)_pProcs[(int)PROC::REST]; }
	BitalMonitor*	PBitalMonitor() { return (BitalMonitor*)_pProcs[(int)PROC::BITAL]; }
	Worker*			PWorker()		{ return (Worker*)_pProcs[(int)PROC::WORKER]; }
	Marker*			PMarker()		{ return _pMarker; }
	bool Process();

	// インライン関数
	HINSTANCE GetInstance() { return _hInstance; }	// インスタンスハンドル
	bool IsAppRun() { return _AppRunning; }	// アプリケーション実行中かどうか
	// アプリケーションを停止
	void StopApp();
	// メッセージボックス表示
	void MsgBox(LPCWSTR msg, UINT icon = 0);
	void SetMovieToShow(std::wstring file) { _MovieToShow = file; }
	std::wstring GetMovieToShow() { return _MovieToShow; }
};