#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <rt.h>
#include <winerror.h>
#include "SampleAPP.h"
#include "CbController.h"


HRESULT ControllerConnect(CALLBACK_T strCallback)
{
#ifdef USE_TEST
	m_nTestCount = 0;
	m_hr = S_FALSE;
#endif	// USE_TEST
	PrintTime(FALSE, TRUE);
	PrintLog(LOG_INFO, "info   : ControllerConnect() \n");
	PrintReceivePacket(strCallback.vntInPara, strCallback.nInParaNum);
	// 応答：VARIANT(VT_I4)
	strCallback.pvntOutPara->vt = VT_I4;
	strCallback.pvntOutPara->lVal = 1;
	return S_OK;
}

HRESULT ControllerDisconnect(CALLBACK_T strCallback)
{
#ifdef USE_TEST
	m_nTestCount = 0;
#endif	// USE_TEST
	PrintTime(FALSE, TRUE);
	PrintLog(LOG_INFO, "info   : ControllerDisconnect() \n");
	PrintReceivePacket(strCallback.vntInPara, strCallback.nInParaNum);
	// 応答：なし
	return S_OK;
}

HRESULT ControllerGetextension(CALLBACK_T strCallback)
{
	PrintTime(FALSE, TRUE);
	PrintLog(LOG_INFO, "info   : ControllerGetextension() \n");
	PrintReceivePacket(strCallback.vntInPara, strCallback.nInParaNum);
	// 応答：VARIANT
	strCallback.pvntOutPara->vt = VT_I4;
	strCallback.pvntOutPara->lVal = 1;
	return S_OK;
}

HRESULT ControllerGetfile(CALLBACK_T strCallback)
{
	PrintTime(FALSE, TRUE);
	PrintLog(LOG_INFO, "info   : ControllerGetfile() \n");
	PrintReceivePacket(strCallback.vntInPara, strCallback.nInParaNum);
	// 応答：VARIANT
	strCallback.pvntOutPara->vt = VT_I4;
	strCallback.pvntOutPara->lVal = 1;
	return S_OK;
}

HRESULT ControllerGetrobot(CALLBACK_T strCallback)
{
	PrintTime(FALSE, TRUE);
	PrintLog(LOG_INFO, "info   : ControllerGetrobot() \n");
	PrintReceivePacket(strCallback.vntInPara, strCallback.nInParaNum);
	// 応答：VARIANT
	strCallback.pvntOutPara->vt = VT_I4;
	strCallback.pvntOutPara->lVal = 1;
	return S_OK;
}

HRESULT ControllerGettask(CALLBACK_T strCallback)
{
	PrintTime(FALSE, TRUE);
	PrintLog(LOG_INFO, "info   : ControllerGettask() \n");
	PrintReceivePacket(strCallback.vntInPara, strCallback.nInParaNum);
	// 応答：VARIANT
	strCallback.pvntOutPara->vt = VT_I4;
	strCallback.pvntOutPara->lVal = 1;
	return S_OK;
}

HRESULT ControllerGetvariable(CALLBACK_T strCallback)
{
	PrintTime(FALSE, TRUE);
	PrintLog(LOG_INFO, "info   : ControllerGetvariable() \n");
	PrintReceivePacket(strCallback.vntInPara, strCallback.nInParaNum);
	// 応答：VARIANT
	strCallback.pvntOutPara->vt = VT_I4;
	strCallback.pvntOutPara->lVal = 1;
	return S_OK;
}

HRESULT ControllerGetcommand(CALLBACK_T strCallback)
{
	PrintTime(FALSE, TRUE);
	PrintLog(LOG_INFO, "info   : ControllerGetcommand() \n");
	PrintReceivePacket(strCallback.vntInPara, strCallback.nInParaNum);
	// 応答：VARIANT
	strCallback.pvntOutPara->vt = VT_I4;
	strCallback.pvntOutPara->lVal = 1;
	return S_OK;
}

HRESULT ControllerGetextensionnames(CALLBACK_T strCallback)
{
	PrintTime(FALSE, TRUE);
	PrintLog(LOG_INFO, "info   : ControllerGetextensionnames() \n");
	PrintReceivePacket(strCallback.vntInPara, strCallback.nInParaNum);
	// 応答：VARIANT
	// TODO:
	return S_OK;
}

HRESULT ControllerGetfilenames(CALLBACK_T strCallback)
{
	PrintTime(FALSE, TRUE);
	PrintLog(LOG_INFO, "info   : ControllerGetfilenames() \n");
	PrintReceivePacket(strCallback.vntInPara, strCallback.nInParaNum);
	// 応答：VARIANT
	// TODO:
	return S_OK;
}

HRESULT ControllerGetrobotnames(CALLBACK_T strCallback)
{
	PrintTime(FALSE, TRUE);
	PrintLog(LOG_INFO, "info   : ControllerGetrobotnames() \n");
	PrintReceivePacket(strCallback.vntInPara, strCallback.nInParaNum);
	// 応答：VARIANT
	// TODO:
	return S_OK;
}

HRESULT ControllerGettasknames(CALLBACK_T strCallback)
{
	PrintTime(FALSE, TRUE);
	PrintLog(LOG_INFO, "info   : ControllerGettasknames() \n");
	PrintReceivePacket(strCallback.vntInPara, strCallback.nInParaNum);
	// 応答：VARIANT
	// TODO:
	return S_OK;
}

HRESULT ControllerGetvariablenames(CALLBACK_T strCallback)
{
	PrintTime(FALSE, TRUE);
	PrintLog(LOG_INFO, "info   : ControllerGetvariablenames() \n");
	PrintReceivePacket(strCallback.vntInPara, strCallback.nInParaNum);
	// 応答：VARIANT
	// TODO:
	return S_OK;
}

HRESULT ControllerGetcommandnames(CALLBACK_T strCallback)
{
	PrintTime(FALSE, TRUE);
	PrintLog(LOG_INFO, "info   : ControllerGetcommandnames() \n");
	PrintReceivePacket(strCallback.vntInPara, strCallback.nInParaNum);
	// 応答：VARIANT
	// TODO:
	return S_OK;
}

HRESULT ControllerExecute(CALLBACK_T strCallback)
{
	PrintTime(FALSE, TRUE);
	PrintLog(LOG_INFO, "info   : ControllerExecute() \n");
	PrintReceivePacket(strCallback.vntInPara, strCallback.nInParaNum);
	// 応答：VARIANT
	strCallback.pvntOutPara->vt = VT_BSTR;
	strCallback.pvntOutPara->bstrVal = SysAllocString(L"OK");
	return S_OK;
}

HRESULT ControllerGetmessage(CALLBACK_T strCallback)
{
	HRESULT hr;
#if 1
	PrintTime(FALSE, TRUE);
	PrintLog(LOG_INFO, "info   : ControllerGetmessage() \n");
	PrintReceivePacket(strCallback.vntInPara, strCallback.nInParaNum);
#endif
	// 応答：VARIANT
	// TODO:
#ifdef USE_TEST
	if (m_nTestCount < TEST_COUNT_MAX) {
		m_nTestCount++;
	}
	else {
		m_nTestCount = 0;
		if (m_hr == S_OK) {
			m_hr = S_FALSE;
		}
		else if (m_hr == S_FALSE) {
			m_hr = S_OK;
		}
	}
	hr = m_hr;
#else	// USE_TEST
//	hr = S_OK;
	hr = E_FAIL;
#endif	// USE_TEST
	return hr;
}

HRESULT ControllerGetattribute(CALLBACK_T strCallback)
{
	PrintTime(FALSE, TRUE);
	PrintLog(LOG_INFO, "info   : ControllerGetattribute() \n");
	PrintReceivePacket(strCallback.vntInPara, strCallback.nInParaNum);
	// 応答：long
	strCallback.pvntOutPara->vt = VT_I4;
	strCallback.pvntOutPara->lVal = 12345;
	return S_OK;
}

HRESULT ControllerGethelp(CALLBACK_T strCallback)
{
	PrintTime(FALSE, TRUE);
	PrintLog(LOG_INFO, "info   : ControllerGethelp() \n");
	PrintReceivePacket(strCallback.vntInPara, strCallback.nInParaNum);
	// 応答：BSTR
	strCallback.pvntOutPara->vt = VT_BSTR;
	strCallback.pvntOutPara->bstrVal = SysAllocString(L"Help");
	return S_OK;
}

HRESULT ControllerGetname(CALLBACK_T strCallback)
{
	PrintTime(FALSE, TRUE);
	PrintLog(LOG_INFO, "info   : ControllerGetname() \n");
	PrintReceivePacket(strCallback.vntInPara, strCallback.nInParaNum);
	// 応答：
	// TODO: 未使用
	return S_OK;
}

HRESULT ControllerGettag(CALLBACK_T strCallback)
{
	PrintTime(FALSE, TRUE);
	PrintLog(LOG_INFO, "info   : ControllerGettag() \n");
	PrintReceivePacket(strCallback.vntInPara, strCallback.nInParaNum);
	// 応答：
	// TODO: 未使用
	return S_OK;
}

HRESULT ControllerPuttag(CALLBACK_T strCallback)
{
	PrintTime(FALSE, TRUE);
	PrintLog(LOG_INFO, "info   : ControllerPuttag() \n");
	PrintReceivePacket(strCallback.vntInPara, strCallback.nInParaNum);
	// 応答：
	// TODO: 未使用
	return S_OK;
}

HRESULT ControllerGetid(CALLBACK_T strCallback)
{
	PrintTime(FALSE, TRUE);
	PrintLog(LOG_INFO, "info   : ControllerGetid() \n");
	PrintReceivePacket(strCallback.vntInPara, strCallback.nInParaNum);
	// 応答：VARIANT
	// TODO:
	return S_OK;
}

HRESULT ControllerPutid(CALLBACK_T strCallback)
{
	PrintTime(FALSE, TRUE);
	PrintLog(LOG_INFO, "info   : ControllerPutid() \n");
	PrintReceivePacket(strCallback.vntInPara, strCallback.nInParaNum);
	// 応答：なし
	return S_OK;
}
