//***********************************************************************/
//*                                                                     */
//*     IF-40 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" {

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

	// デバイスのオープン
	[DllImport("TMI_API.dll")]
	extern int TMI_HandleOpen(String^ Str_Renamed, String^ Ptr);

    // デバイスのクローズ
    [DllImport("TMI_API.dll")]
    extern int TMI_HandleClose(int hID);

    // タイムアウト時間設定
    [DllImport("TMI_API.dll")]
    extern int TMI_TimeOut(int hID, int time);

    // リフレッシュ動作
    [DllImport("TMI_API.dll")]
    extern int TMI_Refresh(int hID);

    // モデル名の取得
    [DllImport("TMI_API.dll")]
    extern int TMI_ModelNameQ(int hID, StringBuilder^ Model);

    // 出力位置とプリセット位置を指定して電圧値を設定する
    [DllImport("TMI_API.dll")]
    extern int TMI_Voltage(int hID, unsigned char ch, unsigned char  preset, double Data);

    // 出力位置とプリセット位置を指定して電圧値を取得する
    [DllImport("TMI_API.dll")]
    extern int TMI_VoltageQ(int hID, unsigned char ch, unsigned char preset,  double% Voltage);

    // 出力位置とプリセット位置を指定して電流値を設定する
    [DllImport("TMI_API.dll")]
    extern int TMI_Current(int hID, unsigned char ch, unsigned char preset, double Data);

    // 出力位置とプリセット位置を指定して電流値を取得する
    [DllImport("TMI_API.dll")]
    extern int TMI_CurrentQ(int hID, unsigned char ch, unsigned char preset, double% Current);

    // MainOutputのON OFFを行う
    [DllImport("TMI_API.dll")]
    extern int TMI_MainOutput(int hID, unsigned char onoff);

    // MainOutputの状態を取得する
    [DllImport("TMI_API.dll")]
    extern int TMI_MainOutputQ(int hID, unsigned char% Ans);

    // Delay のON OFFを行う
    [DllImport("TMI_API.dll")]
    extern int TMI_Delay(int hID, unsigned char onoff);

    // Delayの状態を取得する
    [DllImport("TMI_API.dll")]
    extern int TMI_DelayQ(int hID, unsigned char% Ans);

    // OutputSelectの出力別ON OFFを行う
    [DllImport("TMI_API.dll")]
    extern int TMI_OutputSel(int hID, unsigned char ch, unsigned char onoff);

    // OutputSelectの出力別の状態を取得する
    [DllImport("TMI_API.dll")]
    extern int TMI_OutputSelQ(int hID, unsigned char ch, unsigned char% Ans);

    // TrackingのON OFFを行う
    [DllImport("TMI_API.dll")]
    extern int TMI_TrackingOnOff(int hID, unsigned char onoff);

    // Trackingの状態を取得する
    [DllImport("TMI_API.dll")]
    extern int TMI_TrackingOnOffQ(int hID, unsigned char% Ans);

    // TrackingModeを設定する
    [DllImport("TMI_API.dll")]
    extern int TMI_TrackingMode(int hID, unsigned char mode);

    // TrackingModeの状態を取得する
    [DllImport("TMI_API.dll")]
    extern int TMI_TrackingModeQ(int hID, unsigned char% Ans);

    // TrackingGroupを出力別に設定する
    [DllImport("TMI_API.dll")]
    extern int TMI_TrackingGroup(int hID, unsigned char ch, unsigned char Tracking_Set);

    // TrackingGroupの出力別設定状態を取得する
    [DllImport("TMI_API.dll")]
    extern int TMI_TrackingGroupQ(int hID, unsigned char ch, unsigned char% Ans);

    // TrackingGroupの電圧・電流値を出力別に増減させる
    [DllImport("TMI_API.dll")]
    extern int TMI_TrackingData(int hID, unsigned char ch, unsigned char va, double Data);

    // TrackingGroupの電圧・電流値を出力別に取得する
    [DllImport("TMI_API.dll")]
    extern int TMI_TrackingDataQ(int hID, unsigned char ch, unsigned char va, double% Data);

    // DELAY時間を出力別に設定する
    [DllImport("TMI_API.dll")]
    extern int TMI_DelayTime(int hID, unsigned char ch, double Data);

    // DELAY時間を出力別に取得する
    [DllImport("TMI_API.dll")]
    extern int TMI_DelayTimeQ(int hID, unsigned char ch, double% Data);

    // Display表示位置を設定する
    [DllImport("TMI_API.dll")]
    extern int TMI_Display(int hID, unsigned char ch);

    // Display表示位置を取得する
    [DllImport("TMI_API.dll")]
    extern int TMI_DisplayQ(int hID, unsigned char% Ans);

    // Preset番号を設定する
    [DllImport("TMI_API.dll")]
    extern int TMI_Preset(int hID, unsigned char preset);

    // Preset番号を取得する
    [DllImport("TMI_API.dll")]
    extern int TMI_PresetQ(int hID, unsigned char% Ans);

    // 指定した出力の電圧・電流モニタ値とCV/CC状態を取得する
    [DllImport("TMI_API.dll")]
    extern int TMI_MoniDataQ(int hID, unsigned char ch, double% Voltage, double% Current, unsigned char% cv_cc);

    // システムアドレスを取得する
    [DllImport("TMI_API.dll")]
    extern int TMI_AdrQ(int hID, unsigned char% Adr);

    // リモートからローカルへ切り替える
    [DllImport("TMI_API.dll")]
    extern int TMI_RemoteLocal(int hID);

    // ローカルロックアウト状態へ移行する
    [DllImport("TMI_API.dll")]
    extern int TMI_LocalLockOut(int hID);

    // データのバックアップを行う
    [DllImport("TMI_API.dll")]
    extern int TMI_DataBackUp(int hID);

    // サービスリクエストの禁止・許可の設定をする
    [DllImport("TMI_API.dll")]
    extern int TMI_SRQEnable(int hID, unsigned char ch);

    // 全出力のPRESET値の取得
    [DllImport("TMI_API.dll")]
    extern int TMI_AllPresetQ(int hID, double% PresetMem);

	// 全出力のPRESET値の取得
    [DllImport("TMI_API.dll")]
    extern int TMI_AllPresetQS(int hID, StringBuilder^ PresetMem);

    // コントロール関数：コマンド送信
    [DllImport("TMI_API.dll")]
    extern int TMI_Out(int hID, String^ Str_Renamed);

    // コントロール関数：コマンド受信
    [DllImport("TMI_API.dll")]
    extern int TMI_In(int hID, StringBuilder^ strbuf);

}
