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

#pragma once

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


    /// <summary>
    /// TEXIO USB Driver API
    /// </summary>
ref struct IF_60
{
    //********************************************************************************
    //   構造体宣言
    //********************************************************************************
    //モニターデータ構造体
    [StructLayout(LayoutKind::Sequential)]
    ref struct MONITOR_DATA
    {
        double Current;     // 電流モニター値
        double Voltage;     // 電圧モニター値
        double Wattage;     // 電力モニター値
    };

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

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

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

    // アラームデータ構造体
    [StructLayout(LayoutKind::Sequential)]
    ref struct ALARM_DATA
    {
        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)]
    ref struct LIMIT_DATA
    {
        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)]
    ref struct CH_DATA
    {
        int Ch_A;           // ＣＨ−Ａ
        int Ch_B;           // ＣＨ−Ｂ
        int Ch_C;           // ＣＨ−Ｃ
        int Ch_D;           // ＣＨ−Ｄ
    };

    //********************************************************************************
    //  ＡＰＩ宣言
    //********************************************************************************
    [DllImport("IF_50.dll")]
    static int LW_DeviceOpen(int Class, int BoardAdrs, int PcAdrs, int SysAdrs);

    [DllImport("IF_50.dll")]
    static int LW_DeviceClose(int DeviceId);

    [DllImport("IF_50.dll")]
    static int LW_DeviceRefresh(int DeviceId);

    [DllImport("IF_50.dll")]
    static int LW_SetTimeOut(int DeviceId, int Time);

    [DllImport("IF_50.dll")]
    static int LW_SetMainInput(int DeviceId, int Flag);

    [DllImport("IF_50.dll")]
    static int LW_GetMainInput(int DeviceId);

    [DllImport("IF_50.dll")]
    static int LW_SetInputSelect(int DeviceId, int CH, int Flag);

    [DllImport("IF_50.dll")]
    static int LW_GetInputSelect(int DeviceId, int CH);

    [DllImport("IF_50.dll")]
    static int LW_SetPresetNumber(int DeviceId, int Preset);

    [DllImport("IF_50.dll")]
    static int LW_GetPresetNumber(int DeviceId);

    [DllImport("IF_50.dll")]
    static int LW_SavePreset(int DeviceId, int Src, int Dest);

    [DllImport("IF_50.dll")]
    static int LW_GetMonitor(int DeviceId, int CH, MONITOR_DATA% Monitor);

    [DllImport("IF_50.dll")]
    static int LW_SetMonitorSelect(int DeviceId, int Flag);

    [DllImport("IF_50.dll")]
    static int LW_GetMonitorSelect(int DeviceId);

    [DllImport("IF_50.dll")]
    static int LW_SetDisplaySelect(int DeviceId, int CH);

    [DllImport("IF_50.dll")]
    static int LW_GetDisplaySelect(int DeviceId);

    [DllImport("IF_50.dll")]
    static int LW_SetLoadMode(int DeviceId, int Preset, int CH, int Mode, int Ref);

    [DllImport("IF_50.dll")]
    static int LW_GetLoadMode(int DeviceId, int Preset, int CH, MODE_DATA% ModeData);

    [DllImport("IF_50.dll")]
    static int LW_SetLoadValue(int DeviceId, int Preset, int CH, double Data);

    [DllImport("IF_50.dll")]
    static int LW_GetLoadValue(int DeviceId, int Preset, int CH, double% Data);

    [DllImport("IF_50.dll")]
    static int LW_SetSiemensValue(int DeviceId, int Preset, int CH, int Data);

    [DllImport("IF_50.dll")]
    static int LW_GetSiemensValue(int DeviceId, int Preset, int CH, int% Data);

    [DllImport("IF_50.dll")]
    static int LW_SetCurrentLimit(int DeviceId, int Preset, int CH, double Data);

    [DllImport("IF_50.dll")]
    static int LW_GetCurrentLimit(int DeviceId, int Preset, int CH, double% Data);

    [DllImport("IF_50.dll")]
    static int LW_SaveLoadValue(int DeviceId, int Preset, int CH);

    [DllImport("IF_50.dll")]
    static int LW_SaveCurrentLimit(int DeviceId, int Preset, int CH);

    [DllImport("IF_50.dll")]
    static int LW_SaveMemoryData(int DeviceId, int Object);

    [DllImport("IF_50.dll")]
    static int LW_SetSwSelect(int DeviceId, int CH, int Flag);

    [DllImport("IF_50.dll")]
    static int LW_GetSwSelect(int DeviceId, int CH);

    [DllImport("IF_50.dll")]
    static int LW_SetSwFreq(int DeviceId, int Freq);

    [DllImport("IF_50.dll")]
    static int LW_GetSwFreq(int DeviceId, int% Freq);

    [DllImport("IF_50.dll")]
    static int LW_SetSwDuty(int DeviceId, int Duty);

    [DllImport("IF_50.dll")]
    static int LW_GetSwDuty(int DeviceId, int% Duty);

    [DllImport("IF_50.dll")]
    static int LW_SetSwTime(int DeviceId, double Ta, double Tb);

    [DllImport("IF_50.dll")]
    static int LW_GetSwTime(int DeviceId, TIME_DATA% Time);

    [DllImport("IF_50.dll")]
    static int LW_SetSwMethod(int DeviceId, int Flag);

    [DllImport("IF_50.dll")]
    static int LW_GetSwMethod(int DeviceId);

    [DllImport("IF_50.dll")]
    static int LW_SetDelayFunction(int DeviceId, int Flag);

    [DllImport("IF_50.dll")]
    static int LW_GetDelayFunction(int DeviceId);

    [DllImport("IF_50.dll")]
    static int LW_SetDelayTime(int DeviceId, int CH, double Time);

    [DllImport("IF_50.dll")]
    static int LW_GetDelayTime(int DeviceId, int CH, double% Time);

    [DllImport("IF_50.dll")]
    static int LW_SetTrackFunction(int DeviceId, int Flag);

    [DllImport("IF_50.dll")]
    static int LW_GetTrackFunction(int DeviceId);

    [DllImport("IF_50.dll")]
    static int LW_SetTrackDirection(int DeviceId, int ChA, int ChB, int ChC, int ChD);

    [DllImport("IF_50.dll")]
    static int LW_GetTrackDirection(int DeviceId, TRACK_DATA% Track);

    [DllImport("IF_50.dll")]
    static int LW_SetTrackMode(int DeviceId, int Mode);

    [DllImport("IF_50.dll")]
    static int LW_GetTrackMode(int DeviceId);

    [DllImport("IF_50.dll")]
    static int LW_SetTrackValue(int DeviceId, double Data);

    [DllImport("IF_50.dll")]
    static int LW_GetTrackValue(int DeviceId, double% Data);

    [DllImport("IF_50.dll")]
    static int LW_ResetAlarm(int DeviceId);

    [DllImport("IF_50.dll")]
    static int LW_GetAlarm(int DeviceId, ALARM_DATA% Alarm);

    [DllImport("IF_50.dll")]
    static int LW_GetLimit(int DeviceId, LIMIT_DATA% Limit);

    [DllImport("IF_50.dll")]
    static int LW_SetOperationTimeOut(int DeviceId, int Time);

    [DllImport("IF_50.dll")]
    static int LW_GetOperationTimeOut(int DeviceId);

    [DllImport("IF_50.dll")]
    static int LW_SetLocal(int DeviceId);

    [DllImport("IF_50.dll")]
    static int LW_SetLocalLockOut(int DeviceId, int Flag);

    [DllImport("IF_50.dll")]
    static int LW_GetLocalLockOut(int DeviceId);

    [DllImport("IF_50.dll")]
    static int LW_GetIdNumber(int DeviceId);

    [DllImport("IF_50.dll")]
    static int LW_GetChExist(int DeviceId, CH_DATA% ChData);

    //********************************************************************************
    //   定数宣言
    //********************************************************************************

    //デバイス種別
    static const int GPIB = 1;         // ＧＰＩＢ
    static const int USB = 2;          // ＵＳＢ

    //エラーフラグ
    static const int DEV_ERR = -1;      // デバイスエラー
    static const int TO_ERR = -2;      // タイムアウトエラー
    static const int PAR_ERR = -3;      // パラメータエラー
    static const int RCV_ERR = -4;      // 受信エラー

    //制御フラグ
    static const int XOFF = 0;          // ＯＦＦ
    static const int XON = 1;           // ＯＮ

    //表示切り替えフラグ
    static const int VOLT = 0;          // 電流／電圧表示
    static const int WATT = 1;          // 電流／電力表示

    //ＣＨ設定値
    static const int Ch_A = 1;          // ＣＨ−Ａ
    static const int Ch_B = 2;          // ＣＨ−Ｂ
    static const int Ch_C = 3;          // ＣＨ−Ｃ
    static const int Ch_D = 4;          // ＣＨ−Ｄ

    //プリセット設定値
    static const int PR_1 = 1;          // プリセット番号１
    static const int PR_2 = 2;          // プリセット番号２
    static const int PR_3 = 3;          // プリセット番号３
    static const int PR_4 = 4;          // プリセット番号４

    //放電負荷モード設定値
    static const int M_CCH = 1;         // ＣＣモード、電流レンジ「Ｈ」
    static const int M_CCL = 2;         // ＣＣモード、電流レンジ「Ｌ」
    static const int M_CRH = 3;         // ＣＲモード、電流レンジ「Ｈ」
    static const int M_CRL = 4;         // ＣＲモード、電流レンジ「Ｌ」
    static const int M_CVH = 5;         // ＣＶモード、電流レンジ「Ｈ」
    static const int M_CVL = 6;         // ＣＶモード、電流レンジ「Ｌ」
    static const int M_CPHL = 7;        // ＣＰモード、電流レンジ「Ｈ」、電圧レンジ「Ｌ」
    static const int M_CPHH = 8;        // ＣＰモード、電流レンジ「Ｈ」、電圧レンジ「Ｈ」
    static const int M_CPLL = 9;        // ＣＰモード、電流レンジ「Ｌ」、電圧レンジ「Ｌ」
    static const int M_CPLH = 10;       // ＣＰモード、電流レンジ「Ｌ」、電圧レンジ「Ｈ」
    static const int M_SHORT = 11;      // ショートモード

    //コントロールリファレンス設定値
    static const int REF_IN = 0;        // 内部電圧コントロール
    static const int REF_EXT = 1;       // 外部電圧コントロール

    //保存対象データ設定値
    static const int OBJ_FREQ = 1;      // ＳＷ周波数
    static const int OBJ_DUTY = 2;      // ＳＷデューティ
    static const int OBJ_TAB = 3;       // ＳＷ時間ｔａ、ｔｂ
    static const int OBJ_DELAY = 4;     // ディレイ時間
    static const int OBJ_TRACK = 5;     // トラッキング設定

    //スイッチング方法設定値
    static const int SW_FREQ = 0;       // 周波数＆デューティ
    static const int SW_TAB = 1;        // 時間ｔａ＆ｔｂ

    //トラッキング方向設定値
    static const int TRC_NO = 0;        // トラッキング無し
    static const int TRC_PLUS = 1;      //「＋」トラッキング
    static const int TRC_MINUS = 2;     //「−」トラッキング

    //トラッキングモード設定値
    static const int TRC_PERCENT = 0;   // ％トラッキングモード
    static const int TRC_ABS = 1;       // 絶対値トラッキングモード

    //ローカルロックアウト設定値
    static const int LOCK_FREE = 0;     // 解除可能
    static const int LOCK_OUT = 1;      // 解除不可
};
