using SR7Link;
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
namespace SRAPI
{
///
/// SR7 API 一次性回调实现 / SR7 API one-time callback implementation
///
public class SR7ApiOneTimeCallbackImpl : SR7ApiBase
{
private SR7IF_BatchOneTimeCallBack BatchOneTimeDelegate; //一次回调
public override int Open(int lDeviceId, string strIP, int timeout, ErrConnectCallBack pfErrCallBack)
{
ControllerID = lDeviceId;
string[] ipTmp = strIP.Split('.');
if (ipTmp.Length != 4)
{
throw new SRAPIException($"Failed to resolve IP ");
}
SR7IF_ETHERNET_CONFIG ethernetConfig;
ethernetConfig.abyIpAddress = new Byte[]
{
Convert.ToByte(ipTmp[0]),
Convert.ToByte(ipTmp[1]),
Convert.ToByte(ipTmp[2]),
Convert.ToByte(ipTmp[3])
};
int openRet = SR7LinkFunc.SR7IF_EthernetOpenExt(ControllerID, ref ethernetConfig, 2000, pfErrCallBack);
if (openRet != 0)
return openRet;
int nCameraB = SR7LinkFunc.SR7IF_GetOnlineCameraB(ControllerID);
CameraAOnline = true;
CameraBOnline = (nCameraB==0);
return openRet;
}
public override int Init(int dwProfileCnt, uint ProfileBits, int nTimeout, SR7IFGetDataCallBack pfGetDataCallBack)
{
GetDataCallBack = pfGetDataCallBack;
BatchOneTimeDelegate = new SR7IF_BatchOneTimeCallBack(BatchOneTimeCallBack);
int ret = SR7LinkFunc.SR7IF_SetBatchOneTimeDataHandler(ControllerID, BatchOneTimeDelegate);
if (ret != 0)
return ret;
ret = SR7LinkFunc.SR7IF_StartMeasureWithCallback(ControllerID, 1);
return ret;
}
public override int Start(bool bIOTrigger, int timeout)
{
int ret = 0;
if (!bIOTrigger)
ret = SR7LinkFunc.SR7IF_TriggerOneBatch(ControllerID);
return ret;
}
public override int Stop(int instantStop)
{
int ret = SR7LinkFunc.SR7IF_StopMeasure(ControllerID);
return ret;
}
public SR7IF_STR_CALLBACK_INFO sR7IF_STR_CALLBACK;
///
/// 一次回调函数 / One Time callback function
///
///
///
public void BatchOneTimeCallBack(IntPtr info, IntPtr data)
{
Console.WriteLine("BatchOneTimeCallBack");
SR7IF_STR_CALLBACK_INFO sR7IF_STR_CALLBACK = new SR7IF_STR_CALLBACK_INFO();
sR7IF_STR_CALLBACK = (SR7IF_STR_CALLBACK_INFO)Marshal.PtrToStructure(info, typeof(SR7IF_STR_CALLBACK_INFO));
if (sR7IF_STR_CALLBACK.returnStatus == (int)SR7IF_ERROR.SR7IF_OK)
{
int camIndex = sR7IF_STR_CALLBACK.HeadNumber;//Number of cameras
for (int i = 0; i < camIndex; i++)
{
ImgBuff32[i] = SR7LinkFunc.SR7IF_GetBatchProfilePoint(data, i);//获取相机32bit高度数据 / Get the camera's 32-bit height data
GrayBuff[i] = SR7LinkFunc.SR7IF_GetBatchIntensityPoint(data, i);//获取相机灰度数据 / Get camera grayscale data
Encoder[i] = SR7LinkFunc.SR7IF_GetBatchEncoderPoint(data, i);//获取相机编码器数据 / Get camera encoder data
}
GetDataCallBack(sR7IF_STR_CALLBACK.xPoints, sR7IF_STR_CALLBACK.BatchPoints, 1, sR7IF_STR_CALLBACK.returnStatus,0);
}
else
{
GetDataCallBack(0, 0, 1, sR7IF_STR_CALLBACK.returnStatus,0);
}
}
}
}