// LW_AccessDlg.cpp : インプリメンテーション ファイル
//

#include "stdafx.h"
#include "LW_Access.h"
#include "LW_AccessDlg.h"
#include <stdlib.h>
#include <string.h>

#include "IF_50API_Class.h"
#include "IF_50.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

	LW_IF testLW_IF;

/////////////////////////////////////////////////////////////////////////////
// アプリケーションのバージョン情報で使われている CAboutDlg ダイアログ

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// ダイアログ データ
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard は仮想関数のオーバーライドを生成します
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV のサポート
	//}}AFX_VIRTUAL

// インプリメンテーション
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// メッセージ ハンドラがありません。
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CLW_AccessDlg ダイアログ

CLW_AccessDlg::CLW_AccessDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CLW_AccessDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CLW_AccessDlg)
		// メモ: この位置に ClassWizard によってメンバの初期化が追加されます。
	//}}AFX_DATA_INIT
	// メモ: LoadIcon は Win32 の DestroyIcon のサブシーケンスを要求しません。
//	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON2);
}

void CLW_AccessDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CLW_AccessDlg)
		// メモ: この場所には ClassWizard によって DDX と DDV の呼び出しが追加されます。
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CLW_AccessDlg, CDialog)
	//{{AFX_MSG_MAP(CLW_AccessDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
	ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
	ON_BN_CLICKED(IDC_BUTTON7, OnButton7)
	ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
	ON_BN_CLICKED(IDC_BUTTON4, OnButton4)
	ON_BN_CLICKED(IDC_BUTTON5, OnButton5)
	ON_BN_CLICKED(IDC_BUTTON6, OnButton6)
	ON_WM_CLOSE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CLW_AccessDlg メッセージ ハンドラ

BOOL CLW_AccessDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// "バージョン情報..." メニュー項目をシステム メニューへ追加します。

	// IDM_ABOUTBOX はコマンド メニューの範囲でなければなりません。
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// このダイアログ用のアイコンを設定します。フレームワークはアプリケーションのメイン
	// ウィンドウがダイアログでない時は自動的に設定しません。
	SetIcon(m_hIcon, TRUE);			// 大きいアイコンを設定
	SetIcon(m_hIcon, FALSE);		// 小さいアイコンを設定
	
	// TODO: 特別な初期化を行う時はこの場所に追加してください。

	Result0 = testLW_IF.Initialize();	/*　ＡＰＩ関数ハンドルの初期化　*/

	//コンボボックス初期設定
	CComboBox *cbx0,*cbx1,*cbx2;
	CButton *cbt1,*cbt2,*cbt3,*cbt4,*cbt5,*cbt6,*cbt7;
	int index0 ; 
	char buf[5];
		
	cbx0=(CComboBox*)GetDlgItem(IDC_COMBO1);
	cbx1=(CComboBox*)GetDlgItem(IDC_COMBO2);
	cbx2=(CComboBox*)GetDlgItem(IDC_COMBO3);
	cbt1=(CButton*)GetDlgItem(IDC_BUTTON1);
	cbt2=(CButton*)GetDlgItem(IDC_BUTTON2);
	cbt3=(CButton*)GetDlgItem(IDC_BUTTON3);
	cbt4=(CButton*)GetDlgItem(IDC_BUTTON4);
	cbt5=(CButton*)GetDlgItem(IDC_BUTTON5);
	cbt6=(CButton*)GetDlgItem(IDC_BUTTON6);
	cbt7=(CButton*)GetDlgItem(IDC_BUTTON7);
	
	cbx0->AddString("USB");
	cbx0->AddString("GPIB0");
	cbx0->AddString("GPIB1");

	for (index0 = 1 ; index0 < 31 ; index0 ++)
	{
		_itoa(index0 , buf , 10);
		cbx1->AddString(buf);
		cbx2->AddString(buf);		
	}

	cbx0->SelectString (-1 , "USB");
	cbx1->SelectString (-1 , "1");
	cbx2->SelectString (-1 , "1");

	cbt2->EnableWindow(FALSE);
	cbt3->EnableWindow(FALSE);
	cbt4->EnableWindow(FALSE);
	cbt5->EnableWindow(FALSE);
	cbt6->EnableWindow(FALSE);
	cbt7->EnableWindow(FALSE);

	return TRUE;  // TRUE を返すとコントロールに設定したフォーカスは失われません。
}

void CLW_AccessDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// もしダイアログボックスに最小化ボタンを追加するならば、アイコンを描画する
// コードを以下に記述する必要があります。MFC アプリケーションは document/view
// モデルを使っているので、この処理はフレームワークにより自動的に処理されます。

void CLW_AccessDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // 描画用のデバイス コンテキスト

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// クライアントの矩形領域内の中央
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// アイコンを描画します。
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// システムは、ユーザーが最小化ウィンドウをドラッグしている間、
// カーソルを表示するためにここを呼び出します。
HCURSOR CLW_AccessDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CLW_AccessDlg::OnClose() 
{
	// TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォルトの処理を呼び出してください
	if (DeviceId0 != 0)		// オープン時はクロースしてから終了する
	{
		Result0 = testLW_IF.SetMainInput( DeviceId0, OFF );
		Result0 = testLW_IF.SetLocal (DeviceId0);
		Result0 = testLW_IF.DeviceClose (DeviceId0);
	}
	
	CDialog::OnClose();
}


//	Open/Closeボタン
void CLW_AccessDlg::OnButton1() 
{
	// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
	CComboBox *cbx0,*cbx1,*cbx2;
	CButton *cbt1,*cbt2,*cbt3,*cbt4,*cbt5,*cbt6,*cbt7;
	CEdit *ced1;

	int Pc_Addr,Sys_Addr,Bd_Addr,IF_Addr;
	char buf[10];
	char buf_open[] = "OPEN" ;
	
	cbx0=(CComboBox*)GetDlgItem(IDC_COMBO1);
	cbx1=(CComboBox*)GetDlgItem(IDC_COMBO2);
	cbx2=(CComboBox*)GetDlgItem(IDC_COMBO3);

	cbt1=(CButton*)GetDlgItem(IDC_BUTTON1);
	cbt2=(CButton*)GetDlgItem(IDC_BUTTON2);
	cbt3=(CButton*)GetDlgItem(IDC_BUTTON3);
	cbt4=(CButton*)GetDlgItem(IDC_BUTTON4);
	cbt5=(CButton*)GetDlgItem(IDC_BUTTON5);
	cbt6=(CButton*)GetDlgItem(IDC_BUTTON6);
	cbt7=(CButton*)GetDlgItem(IDC_BUTTON7);
	ced1=(CEdit*)GetDlgItem(IDC_EDIT1);
	
	cbt1->GetWindowText (buf , 10) ;
	if ( strcmp( buf , buf_open) == 0){


		cbx1->GetWindowText (buf , 10) ;	//PC ADDR read
		Pc_Addr = atoi(buf);
		cbx2->GetWindowText (buf , 10) ;	//SYS ADDR read
		Sys_Addr = atoi(buf);
		cbx0->GetWindowText (buf , 10) ;	//IF read
		if ( strcmp( "USB" , buf) == 0){
			Bd_Addr = 0 ;
			IF_Addr = 2 ;
		}
		else if( strcmp( "GPIB0" , buf) == 0){
			Bd_Addr = 0 ;
			IF_Addr = 1 ;
		}
		else {
			Bd_Addr = 1 ;
			IF_Addr = 1 ;
		}

		DeviceId0 = testLW_IF.DeviceOpen( IF_Addr, Bd_Addr, Pc_Addr, Sys_Addr );
		if (DeviceId0 < 0){
			ced1->SetWindowText("Device Open Error");
			return;
		}
		Result0 = testLW_IF.SetMainInput( DeviceId0, OFF );
		Result0 = testLW_IF.SetInputSelect( DeviceId0, 1 , 0 );
		Result0 = testLW_IF.SetDisplaySelect( DeviceId0, 1 );
		Result0 = testLW_IF.SetTimeOut( DeviceId0, 3 );

		cbt1->SetWindowText ("CLOSE");
		cbt2->EnableWindow(TRUE);
		cbt3->EnableWindow(TRUE);
		cbt4->EnableWindow(TRUE);
		cbt5->EnableWindow(TRUE);
		cbt6->EnableWindow(TRUE);
		cbt7->EnableWindow(TRUE);
		ced1->SetWindowText("");
	}
	else
	{
		Result0 = testLW_IF.SetMainInput( DeviceId0, OFF );
		Result0 = testLW_IF.SetLocal (DeviceId0);
		Result0 = testLW_IF.DeviceClose (DeviceId0);
		cbt1->SetWindowText ("OPEN");
		cbt2->EnableWindow(FALSE);
		cbt3->EnableWindow(FALSE);
		cbt4->EnableWindow(FALSE);
		cbt5->EnableWindow(FALSE);
		cbt6->EnableWindow(FALSE);
		cbt7->EnableWindow(FALSE);
		cbt2->SetWindowText("ON");
		ced1->SetWindowText("");
		DeviceId0 = 0 ;

	}
	
}

// MainInput ON/OFF
void CLW_AccessDlg::OnButton2() 
{
	// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
	CButton *cbt2;
	char buf[10];
	char buf_on[] = "ON" ;
	
	cbt2=(CButton*)GetDlgItem(IDC_BUTTON2);
	cbt2->GetWindowText (buf , 10) ;
	if ( strcmp( buf , buf_on) == 0){	// OFF -> ON
		cbt2->SetWindowText ("OFF");
		Result0 = testLW_IF.SetMainInput( DeviceId0, ON );
	}
	else								// ON -> OFF
	{
		cbt2->SetWindowText ("ON");
		Result0 = testLW_IF.SetMainInput( DeviceId0, OFF );
	}
}

// Preset 1
void CLW_AccessDlg::OnButton3() 
{
	// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
		Result0 = testLW_IF.SetPresetNumber (DeviceId0 , 1 );
}

// Preset 2
void CLW_AccessDlg::OnButton4() 
{
	// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
		Result0 = testLW_IF.SetPresetNumber (DeviceId0 , 2 );
}

// Preset 3
void CLW_AccessDlg::OnButton5() 
{
	// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
		Result0 = testLW_IF.SetPresetNumber (DeviceId0 , 3 );	
}

// Preset 4
void CLW_AccessDlg::OnButton6() 
{
	// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
		Result0 = testLW_IF.SetPresetNumber (DeviceId0 , 4 );
}

//Readback
void CLW_AccessDlg::OnButton7() 
{
	// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
	
	CEdit *ced1;
	struct MONITOR_DATA Monitor;
	char buf[50];
	int ret;

	Result0 = testLW_IF.GetMonitor( DeviceId0, 1, &Monitor );
	ret = sprintf(buf,"V : %5.2fV\r\nC : %5.2fA\r\nP : %5.2fW\r\n", Monitor.Voltage , Monitor.Current , Monitor.Wattage);
	ced1=(CEdit*)GetDlgItem(IDC_EDIT1);
	ced1->SetWindowText(buf);	
}

void CLW_AccessDlg::Sample()
{
	struct CH_DATA ChData;
	struct LIMIT_DATA Limit;
	struct ALARM_DATA Alarm;
	struct TRACK_DATA Track;
	struct TIME_DATA Time;
	struct MONITOR_DATA Monitor;
	struct MODE_DATA ModeData;
	double Data;
	long LData;
	int IData;

	
	Result0 = testLW_IF.SetMainInput( DeviceId0, ON );
	Result0 = testLW_IF.GetMainInput( DeviceId0 );
	Result0 = testLW_IF.SetInputSelect( DeviceId0, CH_A, ON );
	Result0 = testLW_IF.GetInputSelect( DeviceId0, CH_A );
	Result0 = testLW_IF.SetPresetNumber( DeviceId0, PR_2 );
	Result0 = testLW_IF.GetPresetNumber( DeviceId0 );
	Result0 = testLW_IF.SavePreset( DeviceId0, PR_1, PR_3 );
	Result0 = testLW_IF.GetMonitor( DeviceId0, CH_A, &Monitor );
	Result0 = testLW_IF.SetMonitorSelect( DeviceId0, WATT );
	Result0 = testLW_IF.GetMonitorSelect( DeviceId0 );
	Result0 = testLW_IF.SetDisplaySelect( DeviceId0, CH_A );
	Result0 = testLW_IF.GetDisplaySelect( DeviceId0 );
	Result0 = testLW_IF.SetLoadMode( DeviceId0, PR_1, CH_A, M_CC_H, REF_INT );
	Result0 = testLW_IF.GetLoadMode( DeviceId0, PR_1, CH_A, &ModeData );
	Result0 = testLW_IF.SetLoadValue( DeviceId0, PR_1, CH_A, 1.0 );
	Result0 = testLW_IF.GetLoadValue( DeviceId0, PR_1, CH_A, &Data );

	Result0 = testLW_IF.SetMainInput( DeviceId0, OFF );
	Result0 = testLW_IF.SetInputSelect( DeviceId0, CH_A, OFF );
	Result0 = testLW_IF.SetLoadMode( DeviceId0, PR_1, CH_A, M_CR_H, REF_INT );
	Result0 = testLW_IF.SetSiemensValue( DeviceId0, PR_1, CH_A, 100 );
	Result0 = testLW_IF.GetSiemensValue( DeviceId0, PR_1, CH_A, &LData );
	Result0 = testLW_IF.SetCurrentLimit( DeviceId0, PR_1, CH_A, 1.1 );
	Result0 = testLW_IF.GetCurrentLimit( DeviceId0, PR_1, CH_A, &Data );
	Result0 = testLW_IF.SetLoadMode( DeviceId0, PR_1, CH_A, M_CC_H, REF_INT );
	Result0 = testLW_IF.SetMainInput( DeviceId0, ON );
	Result0 = testLW_IF.SetInputSelect( DeviceId0, CH_A, ON );

	Result0 = testLW_IF.SaveLoadValue( DeviceId0, PR_1, CH_A );
	Result0 = testLW_IF.SaveCurrentLimit( DeviceId0, PR_1, CH_A );
	Result0 = testLW_IF.SaveMemoryData( DeviceId0, OBJ_DELAY );
	Result0 = testLW_IF.SetSwSelect( DeviceId0, CH_A, OFF );
	Result0 = testLW_IF.GetSwSelect( DeviceId0, CH_A );
	Result0 = testLW_IF.SetSwFreq( DeviceId0, 10 );
	Result0 = testLW_IF.GetSwFreq( DeviceId0, &IData );
	Result0 = testLW_IF.SetSwDuty( DeviceId0, 60 );
	Result0 = testLW_IF.GetSwDuty( DeviceId0, &IData );
	Result0 = testLW_IF.SetSwTime( DeviceId0, 600.0, 400.0 );
	Result0 = testLW_IF.GetSwTime( DeviceId0, &Time );
	Result0 = testLW_IF.SetSwMethod( DeviceId0, SW_FREQ );
	Result0 = testLW_IF.GetSwMethod( DeviceId0 );
	Result0 = testLW_IF.SetDelayFunction( DeviceId0, OFF );
	Result0 = testLW_IF.GetDelayFunction( DeviceId0 );
	Result0 = testLW_IF.SetDelayTime( DeviceId0, CH_A, 2.0 );
	Result0 = testLW_IF.GetDelayTime( DeviceId0, CH_A, &Data );
	Result0 = testLW_IF.SetTrackFunction( DeviceId0, ON );
	Result0 = testLW_IF.GetTrackFunction( DeviceId0 );
	Result0 = testLW_IF.SetTrackDirection( DeviceId0, TRC_MINUS,TRC_MINUS,TRC_PLUS,TRC_PLUS );
	Result0 = testLW_IF.GetTrackDirection( DeviceId0, &Track );
	Result0 = testLW_IF.SetTrackMode( DeviceId0, TRC_PERCENT );
	Result0 = testLW_IF.GetTrackMode( DeviceId0 );
	Result0 = testLW_IF.SetTrackValue( DeviceId0, 110.0 );
	Result0 = testLW_IF.GetTrackValue( DeviceId0, &Data );
	Result0 = testLW_IF.ResetAlarm( DeviceId0 );
	Result0 = testLW_IF.GetAlarm( DeviceId0, &Alarm );
	Result0 = testLW_IF.GetLimit( DeviceId0, &Limit );
	Result0 = testLW_IF.SetOperationTimeOut( DeviceId0, 5 );
	Result0 = testLW_IF.GetOperationTimeOut( DeviceId0 );
	Result0 = testLW_IF.SetLocalLockOut( DeviceId0, OFF );
	Result0 = testLW_IF.GetLocalLockOut( DeviceId0 );
	Result0 = testLW_IF.GetIdNumber( DeviceId0 );
	Result0 = testLW_IF.GetChExist( DeviceId0, &ChData );

	Result0 = testLW_IF.SetMainInput( DeviceId0, OFF );
	Result0 = testLW_IF.SetLocal( DeviceId0 );

}
