//***********************************************************************/
//*                                                                     */
//*     IF-50 API Sample Program                                        */
//*                                                                     */
//*	Copyright(c) 2012  TEXIO TECHNOLOGY CORPORATION						*/
//***********************************************************************/

#pragma once

using namespace System;
using namespace System::Text;
using namespace System::Runtime::InteropServices;

extern "C" {

	// ********************************************************************************
	//   構造体宣言
	// ********************************************************************************
	// モニターデータ構造体
	[StructLayout(LayoutKind::Sequential)]
	public value struct MONITOR_DATA
	{
		public:
			double	Current;	// 電流モニター値
			double	Voltage;	// 電圧モニター値
			double	Wattage;	// 電力モニター値
	};

	// 放電負荷モード設定データ構造体
	[StructLayout(LayoutKind::Sequential)]
	public value struct MODE_DATA
	{
		public:
			int	Mode;			//放電負荷モード設定
			int	Reference;		// コントロールリファレンス設定
	};

	// スイッチング時間設定データ構造体
	[StructLayout(LayoutKind::Sequential)]
	public value struct TIME_DATA{
		public:
			double	Ta;			// 時間ｔａ設定
			double	Tb;			// 時間ｔｂ設定
	};

	// トラッキング設定データ構造体
	[StructLayout(LayoutKind::Sequential)]
	public value struct TRACK_DATA{
		public:
			int	Ch_A;			// ＣＨ－Ａ
			int	Ch_B;			// ＣＨ－Ｂ
			int	Ch_C;			// ＣＨ－Ｃ
			int	Ch_D;			// ＣＨ－Ｄ
	};

	// アラームデータ構造体
	[StructLayout(LayoutKind::Sequential)]
	public value struct ALARM_DATA{
		public:
			int	Eta;			// 外部アラーム
			int	Oha;			// オーバーヒートアラーム
			int	Ova_A;
			int	Ova_B;
			int	Ova_C;
			int	Ova_D;
			int	Oca_A;
			int	Oca_B;
			int	Oca_C;
			int	Oca_D;
			int	Ora_A;
			int	Ora_B;
			int	Ora_C;
			int	Ora_D;
	};

	// リミットデータ構造体
	[StructLayout(LayoutKind::Sequential)]
	public value struct LIMIT_DATA{
		public:
			int	Current_A;
			int	Current_B;
			int	Current_C;
			int	Current_D;
			int	Power_A;
			int	Power_B;
			int	Power_C;
			int	Power_D;
	};

	// ＣＨ実装データ構造体
	[StructLayout(LayoutKind::Sequential)]
	public value struct CH_DATA{
		public:
			int	Ch_A;			// ＣＨ－Ａ
			int	Ch_B;			// ＣＨ－Ｂ
			int	Ch_C;			// ＣＨ－Ｃ
			int	Ch_D;			// ＣＨ－Ｄ
	};


	// C++/CLI - LWインターフェース定義
	// 各関数の詳細はデバイスドライバ取扱説明書を参照。

	// デバイスのオープン
	[DllImport("IF_50.dll")]
	extern int LW_DeviceOpen(int Class_Renamed , int BoardAdrs , int PcAdrs , int SysAdrs);
	// デバイスハンドルのクローズ
	[DllImport("IF_50.dll")]
	extern int LW_DeviceClose(int DeviceId);

	[DllImport("IF_50.dll")]
	extern int LW_DeviceRefresh(int DeviceId);
	// タイムアウト時間の設定
	[DllImport("IF_50.dll")]
	extern int LW_SetTimeOut(int DeviceId , int Time);
	// メインインプットの設定
	[DllImport("IF_50.dll")]
	extern int LW_SetMainInput(int DeviceId , int Flag);
	// メインインプットの状態読出し
	[DllImport("IF_50.dll")]
	extern int LW_GetMainInput(int DeviceId);
	// インプットセレクトの設定
	[DllImport("IF_50.dll")]
	extern int LW_SetInputSelect(int DeviceId , int CH , int Flag);
	// インプットセレクトの状態読出し
	[DllImport("IF_50.dll")]
	extern int LW_GetInputSelect(int DeviceId , int CH);
	// プリセット指定の設定
	[DllImport("IF_50.dll")]
	extern int LW_SetPresetNumber(int DeviceId , int Preset);
	// プリセット指定の状態読出し
	[DllImport("IF_50.dll")]
	extern int LW_GetPresetNumber(int DeviceId);
	// プリセットデータのコピー指示
	[DllImport("IF_50.dll")]
	extern int LW_SavePreset(int DeviceId , int Src , int Dest);
	// モニタデータの読出し
	[DllImport("IF_50.dll")]
	extern int LW_GetMonitor(int DeviceId , int CH , MONITOR_DATA* Monitor);
	// モニタ表示の設定
	[DllImport("IF_50.dll")]
	extern int LW_SetMonitorSelect(int DeviceId , int Flag);
	// モニタ表示の状態読出し
	[DllImport("IF_50.dll")]
	extern int LW_GetMonitorSelect(int DeviceId);
	// 表示CHの設定
	[DllImport("IF_50.dll")]
	extern int LW_SetDisplaySelect(int DeviceId , int CH);
	// 表示CHの状態読出し
	[DllImport("IF_50.dll")]
	extern int LW_GetDisplaySelect(int DeviceId);
	// 負荷モードの設定
	[DllImport("IF_50.dll")]
	extern int LW_SetLoadMode(int DeviceId , int Preset , int CH , int Mode , int Ref);
	// 負荷モードの状態読出し
	[DllImport("IF_50.dll")]
	extern int LW_GetLoadMode(int DeviceId , int Preset , int CH , MODE_DATA* ModeData);
	// 負荷設定値の設定
	[DllImport("IF_50.dll")]
	extern int LW_SetLoadValue(int DeviceId , int Preset , int CH , double Data);
	// 負荷設定値の読出し
	[DllImport("IF_50.dll")]
	extern int LW_GetLoadValue(int DeviceId , int Preset , int CH , double Data);
	// 負荷設定値の設定（シーメンス値）
	[DllImport("IF_50.dll")]
	extern int LW_SetSiemensValue(int DeviceId , int Preset , int CH , int Data);
	// 負荷設定値の読出し（シーメンス値）
	[DllImport("IF_50.dll")]
	extern int LW_GetSiemensValue(int DeviceId , int Preset , int CH , int Data);
	// 電流制限値の設定
	[DllImport("IF_50.dll")]
	extern int LW_SetCurrentLimit(int DeviceId , int Preset , int CH , double Data);
	// 電流制限値の読出し
	[DllImport("IF_50.dll")]
	extern int LW_GetCurrentLimit(int DeviceId , int Preset , int CH , double Data);
	// 負荷設定値の記憶指示
	[DllImport("IF_50.dll")]
	extern int LW_SaveLoadValue(int DeviceId , int Preset , int CH);
	// 電流制限値の記憶指示
	[DllImport("IF_50.dll")]
	extern int LW_SaveCurrentLimit(int DeviceId , int Preset , int CH);
	// 設定情報の記憶指示
	[DllImport("IF_50.dll")]
	extern int LW_SaveMemoryData(int DeviceId , int Object_Renamed);
	// スイッチング動作指定
	[DllImport("IF_50.dll")]
	extern int LW_SetSwSelect(int DeviceId , int CH , int Flag);
	// スイッチング動作状態読出し
	[DllImport("IF_50.dll")]
	extern int LW_GetSwSelect(int DeviceId , int CH);
	// スイッチング周波数設定
	[DllImport("IF_50.dll")]
	extern int LW_SetSwFreq(int DeviceId , int Freq);
	// スイッチング周波数読出し
	[DllImport("IF_50.dll")]
	extern int LW_GetSwFreq(int DeviceId , int Freq);
	// デューティー値設定
	[DllImport("IF_50.dll")]
	extern int LW_SetSwDuty(int DeviceId , int Duty);
	// デューティー値読出し
	[DllImport("IF_50.dll")]
	extern int LW_GetSwDuty(int DeviceId , int Duty);
	// スイッチング時間設定
	[DllImport("IF_50.dll")]
	extern int LW_SetSwTime(int DeviceId , double Ta , double Tb);
	// スイッチング時間読出し
	[DllImport("IF_50.dll")]
	extern int LW_GetSwTime(int DeviceId , TIME_DATA* Time);
	// スイッチング状態設定
	[DllImport("IF_50.dll")]
	extern int LW_SetSwMethod(int DeviceId , int Flag);
	// スイッチング状態読出し
	[DllImport("IF_50.dll")]
	extern int LW_GetSwMethod(int DeviceId);
	// ディレイ動作設定
	[DllImport("IF_50.dll")]
	extern int LW_SetDelayFunction(int DeviceId , int Flag);
	// ディレイ動作状態読出し
	[DllImport("IF_50.dll")]
	extern int LW_GetDelayFunction(int DeviceId);
	// ディレイ時間設定
	[DllImport("IF_50.dll")]
	extern int LW_SetDelayTime(int DeviceId , int CH , double Time);
	// ディレイ時間読出し
	[DllImport("IF_50.dll")]
	extern int LW_GetDelayTime(int DeviceId , int CH , double Time);
	// トラッキング動作設定
	[DllImport("IF_50.dll")]
	extern int LW_SetTrackFunction(int DeviceId , int Flag);
	// トラッキング動作情報読出し
	[DllImport("IF_50.dll")]
	extern int LW_GetTrackFunction(int DeviceId);
	// トラッキング方向設定
	[DllImport("IF_50.dll")]
	extern int LW_SetTrackDirection(int DeviceId , int ChA , int ChB , int ChC , int ChD);
	// トラッキング方向状態読出し
	[DllImport("IF_50.dll")]
	extern int LW_GetTrackDirection(int DeviceId , TRACK_DATA*  Track);
	// トラッキングモード設定
	[DllImport("IF_50.dll")]
	extern int LW_SetTrackMode(int DeviceId , int Mode);
	// トラッキングモード読出し
	[DllImport("IF_50.dll")]
	extern int LW_GetTrackMode(int DeviceId);
	// トラッキング変位量設定
	[DllImport("IF_50.dll")]
	extern int LW_SetTrackValue(int DeviceId , double Data);
	// トラッキング変位量読出し
	[DllImport("IF_50.dll")]
	extern int LW_GetTrackValue(int DeviceId , double Data);
	// アラームクリア
	[DllImport("IF_50.dll")]
	extern int LW_ResetAlarm(int DeviceId);
	// アラーム状態読出し
	[DllImport("IF_50.dll")]
	extern int LW_GetAlarm(int DeviceId , ALARM_DATA* Alarm);
	// リミット情報読出し
	[DllImport("IF_50.dll")]
	extern int LW_GetLimit(int DeviceId , LIMIT_DATA* Limit);
	// 操作タイムアウト時間の設定
	[DllImport("IF_50.dll")]
	extern int LW_SetOperationTimeOut(int DeviceId , int Time);
	// 操作タイムアウト時間の読出し
	[DllImport("IF_50.dll")]
	extern int LW_GetOperationTimeOut(int DeviceId);
	// ローカル状態への移行
	[DllImport("IF_50.dll")]
	extern int LW_SetLocal(int DeviceId);
	// ローカルロックアウトの設定
	[DllImport("IF_50.dll")]
	extern int LW_SetLocalLockOut(int DeviceId , int Flag);
	// ローカルロックアウトの状態読出し
	[DllImport("IF_50.dll")]
	extern int LW_GetLocalLockOut(int DeviceId);
	// 本体IDの読出し
	[DllImport("IF_50.dll")]
	extern int LW_GetIdNumber(int DeviceId);
	// チャンネル装備状態の読出し
	[DllImport("IF_50.dll")]
	extern int LW_GetChExist(int DeviceId , CH_DATA* ChData);

}
