/** @file CAOSYSTEM.h
 *
 *  @brief CAO　エンジン・プロバイダ共通で使用する情報の定義
 *
 *  @version	1.0
 *	@date		2003/8/8
 *	@author		DENSO WAVE
 *
 */

// >>>>>>>>>> このファイルは編集しないで下さい．<<<<<<<<<<
#ifndef __CAOSYSTEM_H_
#define __CAOSYSTEM_H_

#define SAFE_RELEASE(p) { if(p) { (p)->Release(); (p)=NULL; } }
#define SAFE_DELETE(p) { if(p) { delete (p); (p)=NULL; } }
#define SAFE_DELETE_ARRAY(p) { if(p) { delete [](p); (p)=NULL; } }
#define SAFE_CLOSE(p) { if(p) { CloseHandle(p); (p)=NULL; } }
#define SAFE_FREESTRING(p) { if(p) { SysFreeString(p); (p)=NULL; } }
#define FAILED_RETURN(p) { if(FAILED(p)) { return p; } }

#define FAILED_DISCONNECT_RETURN(p) { if(FAILED(p)) { FinalDisconnect(); return p; } }

#define E_CRDIMPL _HRESULT_TYPEDEF_(0x80000400L)

// >>>>>>>>>> これ以下は，CAOエンジンで使う情報です．<<<<<<<<<<
#define CAO_REG_KEY_SIZE		256			// キー名のバッファサイズ

#define CAO_MSG_MAX				1000		// プール可能な最大メッセージ数
#define CAO_MSG_LEN_MAX			256			// メッセージ文字列の最大長

// メッセージオプション
#define CAO_MSG_DATA_MASK		0x0000ffff
#define CAO_MSG_NORMAL			0x00000000	// 一般メッセージ
#define CAO_MSG_SYNC			0x00010000	// 同期処理メッセージ
#define CAO_MSG_OUTPUT_LOG		0x00020000	// ログ出力
#define CAO_MSG_SYSTEM			0x00040000	// システムメッセージ
#define CAO_MSG_BYPASS			0x00080000	// 緊急メッセージ
#define CAO_MSG_PROVIDER		0x00100000	// プロバイダメッセージ

// システムメッセージ
#define CAO_MSG_SYS_EVT_ON		(CAO_MSG_SYSTEM | 0x01)
#define CAO_MSG_SYS_EVT_OFF		(CAO_MSG_SYSTEM | 0x02)

// ログ出力レベル
#define CAO_LOG_DEBUG			0
#define CAO_LOG_INFO			1
#define CAO_LOG_WARN			2
#define CAO_LOG_ERROR			3
#define CAO_LOG_FATAL			4	// default

// クラス識別番号
#define CLS_NO_ENGINE			0
#define CLS_NO_WORKSPACES		1
#define CLS_NO_WORKSPACE		2
#define CLS_NO_CONTROLLERS		3
#define CLS_NO_CONTROLLER		4
#define CLS_NO_EXTENSIONS		5
#define CLS_NO_EXTENSION		6
#define CLS_NO_FILES			7
#define CLS_NO_FILE				8
#define CLS_NO_ROBOTS			9
#define CLS_NO_ROBOT			10
#define CLS_NO_TASKS			11
#define CLS_NO_TASK				12
#define CLS_NO_VARIABLES		13
#define CLS_NO_VARIABLE			14
#define CLS_NO_COMMANDS			15
#define CLS_NO_COMMAND			16
#define CLS_NO_MESSAGE			17
#define CLS_NO_STATUS			18
#define CLS_NO_MAX				19			// CAOクラスの数

// オプション文字列
#define CAO_CREATE_NONE			0			// @Createオプション値
#define CAO_CREATE				1


// >>>>>>>>>> これ以下は，CAOプロバイダでのみ使う情報です．<<<<<<<<<<

// ========== System Variable ==========
#define SYS_CLS_CONTROLLER 0x00010000
#define SYS_CLS_VARIABLE   0x00020000
#define SYS_CLS_ROBOT      0x00040000
#define SYS_CLS_FILE       0x00080000
#define SYS_CLS_TASK       0x00100000
#define SYS_CLS_EXTENSION  0x00200000

#endif // __CAOSYSTEM_H_

