//
//		TEXIO USB488 Access Lib  Ver 1.00
//
//	Copyright(c) 2012  TEXIO TECHNOLOGY CORPORATION.

#include "stdafx.h"
#include  "IF60_API.h"


IF60_API::IF60_API()
{
	m_IF60_APIDll       = NULL;
	m_IF60_DeviceOpen 	= NULL;
	m_IF60_DeviceClose 	= NULL;
	m_IF60_Send			= NULL;
	m_IF60_SendBinary	= NULL;
	m_IF60_Receive		= NULL;
	m_IF60_SetTimeout	= NULL;
	m_IF60_SetRemote	= NULL;
	m_IF60_GetRemote	= NULL;
	m_IF60_DevClear		= NULL;
	m_IF60_GetSTBQuery	= NULL;
	m_IF60_DevClear		= NULL;
	m_IF60_ClearSTB		= NULL;
}

IF60_API::~IF60_API()
{
	if(m_IF60_APIDll != NULL)
		FreeLibrary(m_IF60_APIDll);
}

//////////////////////////////////////////////////
// 関数名 :	IFInitialize						//
// 機能   : USB IF の初期化、					//
//			ライブラリ及び関数のハンドルの取得	//
// 引数	  : なし								//
// 戻り値 : TRUE	正常終了					//
//		    FAULSE	異常終了					//
//////////////////////////////////////////////////

BOOL IF60_API::IFInitialize()
{
	m_IF60_APIDll=LoadLibrary((LPCSTR)"IF_60.dll");
	if( m_IF60_APIDll == NULL )
		return FALSE;

	m_IF60_DeviceOpen = (long ( __stdcall* )( int )) GetProcAddress(m_IF60_APIDll , "USB488_DeviceOpen");
	if( m_IF60_DeviceOpen == NULL )
		return FALSE;

	m_IF60_DeviceClose = (int ( __stdcall* )( int )) GetProcAddress(m_IF60_APIDll , "USB488_DeviceClose");
	if( m_IF60_DeviceClose == NULL )
		return FALSE;

	m_IF60_Send = (int ( __stdcall* )( int , char* )) GetProcAddress(m_IF60_APIDll , "USB488_Send");
	if( m_IF60_Send == NULL )
		return FALSE;

	m_IF60_SendBinary = (int ( __stdcall* )( int ,char *,int , int )) GetProcAddress(m_IF60_APIDll , "USB488_SendBinary");
	if( m_IF60_Send == NULL )
		return FALSE;

	m_IF60_Receive = (int ( __stdcall* )( int  , int , char* )) GetProcAddress(m_IF60_APIDll , "USB488_Receive");
	if( m_IF60_Receive == NULL )
		return FALSE;

	m_IF60_SetTimeout = (int ( __stdcall* )( int  , int )) GetProcAddress(m_IF60_APIDll , "USB488_SetTimeout");
	if( m_IF60_SetTimeout == NULL )
		return FALSE;

	m_IF60_SetRemote = (int ( __stdcall* )( int  , int )) GetProcAddress(m_IF60_APIDll , "USB488_SetRemote");
	if( m_IF60_SetRemote == NULL )
		return FALSE;

	m_IF60_GetRemote  = (int ( __stdcall* )( int )) GetProcAddress(m_IF60_APIDll , "USB488_GetRemote");
	if( m_IF60_GetRemote == NULL )
		return FALSE;

	m_IF60_DevClear  = (int ( __stdcall* )( int )) GetProcAddress(m_IF60_APIDll , "USB488_DevClear");
	if( m_IF60_DevClear == NULL )
		return FALSE;

	m_IF60_GetSTBQuery  = (int ( __stdcall* )( int )) GetProcAddress(m_IF60_APIDll , "USB488_GetSTBQuery");
	if( m_IF60_GetSTBQuery == NULL )
		return FALSE;

	m_IF60_ClearSTB  = (int ( __stdcall* )( int )) GetProcAddress(m_IF60_APIDll , "USB488_ClearSTB");
	if( m_IF60_ClearSTB == NULL )
		return FALSE;

	return TRUE;
} 

//////////////////////////////////////////////////
// 関数名:DeviceOpen							//
// 機能  :ハンドルをオープンさせる				//
// 引数  :long addrs=PCアドレス					//
// 戻り値:正値=成功、負値=失敗					//
//////////////////////////////////////////////////
long IF60_API::DeviceOpen( int addrs )
{

	if(m_IF60_DeviceOpen == NULL)
		return DLL_ERROR;

	return m_IF60_DeviceOpen( addrs );

}

//////////////////////////////////////////////////
// 関数名:DeviceClose							//
// 機能  :ハンドルをクローズさせる				//
// 引数  :int hID=ID No.						//
// 戻り値:0=成功,Else=失敗						//
//////////////////////////////////////////////////

int IF60_API::DeviceClose( int hID )
{
	if(m_IF60_DeviceClose == NULL)
		return DLL_ERROR;

	return m_IF60_DeviceClose( hID );

}



//////////////////////////////////////////////////
// 関数名:Send									//
// 機能  :コマンド送信							//
//		  int hID :ID番号						//
//		  char *str:送信コマンド				//
//////////////////////////////////////////////////

int IF60_API::Send( int hID , char *str )
{
	if(m_IF60_Send == NULL)
		return DLL_ERROR;

	return	m_IF60_Send( hID ,str );
}

//////////////////////////////////////////////////
// 関数名:SendBinary							//
// 機能  :データ送信							//
//		  int hID :ID番号						//
//		  char *str:送信データ					//
//        int iCount:転送バイト数               //
//        int iMode:終了モード、ヌルパケット付加//
//////////////////////////////////////////////////

int IF60_API::SendBinary( int hID , char *str ,int iCount , int iMode )
{
	if(m_IF60_SendBinary == NULL)
		return DLL_ERROR;

	return	m_IF60_SendBinary( hID ,str , iCount , iMode);
}


//////////////////////////////////////////////////
// 関数名:Receive								//
// 機能  :メッセージ受信						//
//		  int hID :ID番号						//
//		  char &Query:受信メッセージ			//
//////////////////////////////////////////////////

int IF60_API::Receive( int hID , int iCount ,char *Query )
{
	if(m_IF60_Receive == NULL)
		return DLL_ERROR;

	return	m_IF60_Receive( hID , iCount ,Query );
}


//////////////////////////////////////////////////
// 関数名:SetTimeout							//
// 機能  :タイムアウト設定						//
//		  int hID :ID番号						//
//		  int tTime:タイムアウト（ms）			//
//////////////////////////////////////////////////

int IF60_API::SetTimeout( int hID , int tTime )
{
	if(m_IF60_SetTimeout == NULL)
		return DLL_ERROR;

	return	m_IF60_SetTimeout( hID ,tTime );
}
//////////////////////////////////////////////////
// 関数名:SetRemote								//
// 機能  :リモートモード設定					//
//		  int hID :ID番号						//
//		  int iMode:モード	0:ローカル			//
//							1:リモート			//
//							2:リモート：ロック	//
//////////////////////////////////////////////////

int IF60_API::SetRemote( int hID , int iMode )
{
	if(m_IF60_SetRemote == NULL)
		return DLL_ERROR;

	return	m_IF60_SetRemote( hID ,iMode );
}

//////////////////////////////////////////////////
// 関数名:GetRemote								//
// 機能  :リモート状態を獲得する				//
// 引数  :int hID=ID No.						//
// 戻り値:int　mode モード						//
//////////////////////////////////////////////////

int IF60_API::GetRemote( int hID )
{
	if(m_IF60_GetRemote == NULL)
		return DLL_ERROR;

	return m_IF60_GetRemote( hID );

}
//////////////////////////////////////////////////
// 関数名:DevClear								//
// 機能  :デバイスクリア出力					//
// 引数  :int hID=ID No.						//
// 戻り値:0=成功,Else=失敗						//
//////////////////////////////////////////////////

int IF60_API::DevClear( int hID )
{
	if(m_IF60_DevClear == NULL)
		return DLL_ERROR;

	return m_IF60_DevClear( hID );

}
//////////////////////////////////////////////////
// 関数名:GetSTBQuery							//
// 機能  :STBを取り込む							//
// 引数  :int hID=ID No.						//
// 戻り値:int STB								//
//////////////////////////////////////////////////

int IF60_API::GetSTBQuery( int hID )
{
	if(m_IF60_GetSTBQuery == NULL)
		return DLL_ERROR;

	return m_IF60_GetSTBQuery( hID );

}
//////////////////////////////////////////////////
// 関数名:ClearSTB								//
// 機能  :STBをクリアする						//
// 引数  :int hID=ID No.						//
// 戻り値:0=成功,Else=失敗						//
//////////////////////////////////////////////////

int IF60_API::ClearSTB( int hID )
{
	if(m_IF60_ClearSTB == NULL)
		return DLL_ERROR;

	return m_IF60_ClearSTB( hID );

}
