#include "pch.h"
#include "add2.h"
#include <iostream>
#include "math.h"
#include "test_usr.h"

using namespace std;


////////////////////////////////////////////////////////////////////////
//2. 含store 功能的接口函数
////////////////////////////////////////////////////////////////////////
int  InitCtest_Store(void ** pModelInfo, int Parameter_N, int Nin, int Nout, double* Parameter, double* Val_In, double* Val_Out, int Snapshot_Inp, char* Store_Add, double Tnow, double DT)
{
	//新增功能示例
	Ctest_Add2* Ctest_Add2_Model;
	//void * Add_Tmp;

	//1.实例生成
	Ctest_Add2_Model=new Ctest_Add2(); //生成一个实例；
	*pModelInfo = (void*)Ctest_Add2_Model; //指针存储；

	//2.实例检查：检查模型配置是否正确
	//if (*pModelInfo==NULL) {
	//	MsgPrint("instance create failed");
	//	return 1; //实例创建失败；
	//}
	//if (Ctest_Add2_Model->Nin!=Nin){
	//	MsgPrint("Number of Input is concided with the setting");
	//	return 2;// 输入接口不一致
	//}
	//if (Ctest_Add2_Model->Nout!=Nout){
	//	MsgPrint("Number of Output is concided with the setting");
	//	return 3;// 输出接口不一致
	//}
	int tmp_DT  =(int)floor((DT*1e6)); //最小单位是1us
	//if ((tmp_DT% (int)floor(Ctest_Add2_Model->Step*1e6))!=0){
	//	cout<<"DT is "<<tmp_DT<<endl;
	//	MsgPrint("Model timestep is not suitable");
	//	return 4;//输出输入不是仿真步长的整数倍数
	//}

	//3.initial function
	Ctest_Add2_Model->b=0;
	Ctest_Add2_Model->c=0;

	return 0;
}
int  StepCtest_Store(void * pModelInfo, int Mark, double *Val_In, double *Val_Out, int Snapshot_Inp, char* Store_Add, double Tnow)
{
/*
	//新增功能示例
	Ctest_Add2* Ctest_Add2_Model;
	void * Add_Tmp;

	//1.实例引用
	Ctest_Add2_Model=(Ctest_Add2*)pModelInfo; //指针获取；	
	if (&(Ctest_Add2_Model->b) !=NULL ) {}
	else
	{
		MsgPrint("instance create failed");
		return 1; //实例创建失败；
	}
	
	//2.模型输入
	Ctest_Add2_Model->input[0]=Val_in[0];
	Ctest_Add2_Model->input[1]=Val_in[1];

	//3.公共变量区的信息获取
	memcpy(&(Ctest_Add2_Model->b),Store_Add,sizeof(int));

	//4.模型功能
	Ctest_Add2_Model->add2(Ctest_Add2_Model->input[0],Ctest_Add2_Model->input[1]);

	//5.公共变量区的信息回存
	memcpy(Store_Add,&(Ctest_Add2_Model->b),sizeof(int));

	//6.模型输出
	Val_Out[0]=Ctest_Add2_Model->b;
	*/
//============20200218test=====================//	
	//double a, b, c;
	abc_Str abc;
	abc.a =Val_In[0];
	abc.b =Val_In[1];
	memcpy(&abc, &Store_Add[0], sizeof(abc));

  //memcpy(&Wc,&Store_Add[0],sizeof(MI));
  //ConverterInit(&Wc,&UgAbIn,&UgBcIn,&UgCaIn,&UsAbIn,&UsBcIn,&UsCaIn,&IsAIn,&IsBIn,&IsCIn,&IfAIn,&IfBIn,&IfCIn,&IgscL1AIn,
  //&IgscL1BIn,&IgscL1CIn,&ImscL1AIn,&ImscL1BIn,&ImscL1CIn,&UdcIn,&MscUdcIn,&CbUdcIn,&MainBrkSt,&ChargeSt,&ExcitSt,&StatorSt,
  //&QepCnt,&DfigRun,&GscRun,&TorqGive,&PwrFactor,&PwrGive,&SysReset,&SysStart,&PreSet1,&PreSet2,&PreSet3,&PreSet4, 
  //&MainBrkOn,&MainBrkOff,&ChargeOn,&ExciteOn,&StatorOn,&Cp1On,&Cp2On,&Cb1On,&Cb2On,&GscPwmA,&GscPwmB,&GscPwmC,&GscPwmOut,
  //&MscPwmA,&MscPwmB,&MscPwmC,&MscPwmOut,&IsdRef,&IsdFdb,&IsqRef,&IsqFdb,&IrdRef,&IrdFdb,&IrqRef,&IrqFdb,&IgdRef,&IgdFdb,
  //&IgqRef,&IgqFdb,&MainFault1,&MainFault2,&MainFault3,&Test1,&Test2,&Test3,&Test4,&Test5,&Test6,&Test7,&Test8,&Test9,&Test10,
  //&Test11,&Test12,&Test13,&Test14,&Test15,&Test16,&Test17,&Test18,&Test19,&Test20);
  
	add(&abc.a, &abc.b, &abc.c);
	memcpy(&Store_Add[0] , &abc, sizeof(abc));


  //memcpy(&Store_Add[0],&Wc,sizeof(MI));  
  
	Val_Out[0]= abc.c;



  return 0;	 
	

}

int  TerminateCtest_Store(void * pModelInfo)
{
	//新增功能示例
	Ctest_Add2* Ctest_Add2_Model;

	//1.实例引用
	Ctest_Add2_Model=(Ctest_Add2*)pModelInfo; //指针获取；	
	
	//2.实例释放
	delete Ctest_Add2_Model;

	return 0;
}



void MsgPrint(const char* tmp)
{

	cout<<tmp<<endl;
}




	