If you would like to get the image log via F2 or FSF2, we can use this function and method.
Make sure that check out the function BS2_Getimagelog.
Environment.
It was okay until the SDK 2.4.x but the issue happens with SDK 2.5.0 or higher version
Sample code
The order is BS2_GetDeviceInfo ->BS2_SetEventConfig -> BS2_Getimagelog
private void button4_Click(object sender, EventArgs e)
{
IntPtr versionPtr = API.BS2_Version();
textBox1.Text = "SDK version : {0}" + Marshal.PtrToStringAnsi(versionPtr);
IntPtr context = IntPtr.Zero;
context = API.BS2_AllocateContext();
if (context == null) //Returns NULL when there is not enough system memory
{
textBox1.Text = "No memory!";
}
else // if not, returns the allocated Context.
{
textBox1.Text = "Allocate context successfully";
}
BS2ErrorCode result = (BS2ErrorCode)API.BS2_Initialize(context);
if (result == BS2ErrorCode.BS_SDK_SUCCESS)
{
textBox1.Text = "Initialization succeeded";
}
else
{
textBox1.Text = "failed to initialize error code";
}
string ipAddress = textBox2.Text;// "192.168.13.195";
IntPtr ptrIPAddr = Marshal.StringToHGlobalAnsi(ipAddress);
ushort port = 51211;
uint deviceId = 0;
result = (BS2ErrorCode)API.BS2_ConnectDeviceViaIP(context, ptrIPAddr, port, out deviceId);
BS2AuthConfig authConfig;
if (result == BS2ErrorCode.BS_SDK_SUCCESS)
{
textBox1.Text = "Connecting to device succeeded";
}
else
{
textBox1.Text = "Connecting to device failed" + result;
}
#region GetImageLog
//#region GetImageLog
BS2SimpleDeviceInfo deviceInfo;
int structSize = Marshal.SizeOf(typeof(BS2Event));
UInt16 imageLogEventCode = (UInt16)BS2EventCodeEnum.DEVICE_TCP_CONNECTED;
BS2EventConfig eventConfig = Util.AllocateStructure<BS2EventConfig>();
eventConfig.numImageEventFilter = 1;
eventConfig.imageEventFilter[0].mainEventCode = (byte)(imageLogEventCode >> 8);
eventConfig.imageEventFilter[0].scheduleID = (UInt32)BS2ScheduleIDEnum.ALWAYS;
Console.WriteLine("Trying to get the device[{0}] information.", deviceID);
result = (BS2ErrorCode)API.BS2_GetDeviceInfo(context, deviceId, out deviceInfo);
if (result != BS2ErrorCode.BS_SDK_SUCCESS)
{
Console.WriteLine("Can't get device information(errorCode : {0}).", result);
return;
}
Console.WriteLine("Trying to activate image log.");
result = (BS2ErrorCode)API.BS2_SetEventConfig(context, deviceId, ref eventConfig);
if (result != BS2ErrorCode.BS_SDK_SUCCESS)
{
Console.WriteLine("Got error({0}).", result);
return;
}
Console.WriteLine("Trying to clear log for quick test.");
result = (BS2ErrorCode)API.BS2_ClearLog(context, deviceId);
if (result != BS2ErrorCode.BS_SDK_SUCCESS)
{
Console.WriteLine("Got error({0}).", result);
return;
}
Console.WriteLine("Trying to disconnect device[{0}] for quick test.", deviceId);
result = (BS2ErrorCode)API.BS2_DisconnectDevice(context, deviceId);
if (result != BS2ErrorCode.BS_SDK_SUCCESS)
{
Console.WriteLine("Got error({0}).", result);
return;
}
Thread.Sleep(500); //waiting for socket close
Console.WriteLine("Trying to connect device[{0}].", deviceId);
//IntPtr ptrIPAddr = Marshal.StringToHGlobalAnsi(new IPAddress(BitConverter.GetBytes(deviceInfo.ipv4Address)).ToString());
//result = (BS2ErrorCode)API.BS2_ConnectDeviceViaIP(sdkContext, new IPAddress(BitConverter.GetBytes(deviceInfo.ipv4Address)).ToString(), deviceInfo.port, out deviceID);
result = (BS2ErrorCode)API.BS2_ConnectDeviceViaIP(context, ptrIPAddr, deviceInfo.port, out deviceId);
Marshal.FreeHGlobal(ptrIPAddr);
if (result != BS2ErrorCode.BS_SDK_SUCCESS)
{
Console.WriteLine("Got error({0}).", result);
return;
}
IntPtr outEventLogObjs = IntPtr.Zero;
UInt32 outNumEventLogs = 0;
result = (BS2ErrorCode)API.BS2_GetLog(context, deviceId, 0, 1024, out outEventLogObjs, out outNumEventLogs);
if (result != BS2ErrorCode.BS_SDK_SUCCESS)
{
Console.WriteLine("Got error({0}).", result);
return;
}
if (outNumEventLogs > 0)
{
IntPtr curEventLogObjs = outEventLogObjs;
for (int idx = 0; idx < outNumEventLogs; idx++)
{
BS2Event eventLog = (BS2Event)Marshal.PtrToStructure(curEventLogObjs, typeof(BS2Event));
//if (Convert.ToBoolean(eventLog.image))
bool hasImage = Convert.ToBoolean(eventLog.image & (byte)BS2EventImageBitPos.BS2_IMAGEFIELD_POS_IMAGE);
if (hasImage)
{
Console.WriteLine("Trying to get image log[{0}].", eventLog.id);
IntPtr imageObj = IntPtr.Zero;
UInt32 imageSize = 0;
result = (BS2ErrorCode)API.BS2_GetImageLog(context, deviceId, eventLog.id, out imageObj, out imageSize);
if (result != BS2ErrorCode.BS_SDK_SUCCESS)
{
Console.WriteLine("Got error({0}).", result);
}
else
{
int written = 0;
FileStream file = new FileStream(String.Format("{0}.jpg", eventLog.id), FileMode.Create, FileAccess.Write);
Console.WriteLine("Trying to save image log[{0}].", eventLog.id);
WriteFile(file.Handle, imageObj, (int)imageSize, out written, IntPtr.Zero);
file.Close();
if (written != imageSize)
{
Console.WriteLine("Got error({0}).", result);
}
else
{
Console.WriteLine("Successfully saved the image log[{0}].", eventLog.id);
Process.Start(file.Name);
}
}
break;
}
curEventLogObjs = (IntPtr)((long)curEventLogObjs + structSize);
}
API.BS2_ReleaseObject(outEventLogObjs);
}
result = (BS2ErrorCode)API.BS2_GetEventConfig(context, deviceId, out eventConfig);
if (result != BS2ErrorCode.BS_SDK_SUCCESS)
{
textBox1.Text = "Get Error" + result;
return;
}
result = (BS2ErrorCode)API.BS2_SetEventConfig(context, deviceId, ref eventConfig);
if (result != BS2ErrorCode.BS_SDK_SUCCESS)
{
textBox1.Text = "Get Error" + result;
return;
}
//#endregion
#endregion
}