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

#include <Windows.h>
#include <tchar.h>
#include <string>

#define TOBII_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,
	SOFTWARE_START = WM_USER,	// ソフトウェア起動
	SOFTWARE_END,	// ソフトウェア終了
	CALIB_START,	// キャリブレーション開始
	CALIB_OK,		// キャリブレーション成功
	CALIB_FAILED,	// キャリブレーション失敗
	CALIB_ERR,		// キャリブレーションエラー
	EXP_START,		// 実験開始
	EXP_STOP,		// 実験停止
	EXP_END,		// 実験終了
	EXP_NEXT,		// 次の刺激に移動
	MOVIE_START,	// 動画再生開始
	MOVIE_STOP,		// 動画再生停止
	MOVIE_END,		// 動画再生終了
	MOVIE_ERROR,	// 動画エラー
	FB_GOOD,		// フィードバック:Good
	FB_NICE,		// フィードバック:Nice
};

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

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

	BaseProcess* _pProcs[(int)PROC::NUM];
	Marker* _pMarker;
	HINSTANCE _hInstance;

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; }
	// アプリケーションを停止
	void StopApp();
	// メッセージボックス表示
	void MsgBox(LPCWSTR msg, UINT icon = 0);
};