#include <mil.h>
#define IMAGE_FILE M_IMAGE_PATH MIL_TEXT("Board.mim")
#define NB_LOOP 100
#define USE_C 0
#define USE_MIL 1
#define NB_VERSIONS 2
static const MIL_TEXT_CHAR *VersionName[] = {MIL_TEXT("C"), MIL_TEXT("MIL")};
#if M_MIL_USE_CE
#define SLAVE_SYSTEM_DESCRIPTOR MIL_TEXT("dmiltcp:
#else
#define SLAVE_SYSTEM_DESCRIPTOR M_SYSTEM_DEFAULT
#endif
#define SLAVE_DLL_NAME MIL_TEXT("dmiladdconstantslave")
#if M_MIL_USE_WINDOWS && !M_MIL_USE_CE
#define SLAVE_DLL_TARGET_NAME INSTALL_DIR MIL_TEXT("mil\\dll\\") SLAVE_DLL_NAME MIL_TEXT(".dll")
#elif M_MIL_USE_CE
#define SLAVE_DLL_TARGET_NAME INSTALL_DIR SLAVE_DLL_NAME MIL_TEXT(".dll")
#elif M_MIL_USE_LINUX
#define SLAVE_DLL_TARGET_NAME INSTALL_DIR MIL_TEXT("mil/lib/lib") SLAVE_DLL_NAME MIL_TEXT(".so")
#endif
#if M_MIL_USE_CE
#define DISPLAY_FORMAT MIL_TEXT("M_REMOTEVIEW_RGB")
#else
#define DISPLAY_FORMAT MIL_TEXT("M_DEFAULT")
#endif
void MFTYPE AddConstantC(MIL_ID SrcImage, MIL_ID DstImage, MIL_UINT Constant);
int MosMain(void)
{
MIL_ID MilApplication,
MilSystem,
MilDisplay,
MilImageDisp,
MilImageSrc,
MilImageDst,
MilSystemOwnerApplication;
int Version, n;
MIL_DOUBLE Time;
bool CheckExistence = false;
MappAlloc(M_NULL, M_DEFAULT, &MilApplication);
MsysAlloc(M_DEFAULT, SLAVE_SYSTEM_DESCRIPTOR, M_DEFAULT, M_DEFAULT, &MilSystem);
if(MsysInquire(MilSystem, M_LOCATION, M_NULL) != M_REMOTE)
{
MosPrintf(MIL_TEXT("This example requires the default system to be a remote system.\n"));
MosPrintf(MIL_TEXT("Please select a remote system as the default.\n"));
MosPrintf(MIL_TEXT("If no remote systems are registered "));
MosPrintf(MIL_TEXT("please go to the DistributedMIL->Connections page, "));
MosPrintf(MIL_TEXT("register a remote system, "));
MosPrintf(MIL_TEXT("and then select it as the default system.\n"));
MsysFree(MilSystem);
MappFree(MilApplication);
MosGetch();
return -1;
}
MsysInquire(MilSystem, M_OWNER_APPLICATION, &MilSystemOwnerApplication);
if((MappInquire(M_DEFAULT, M_PLATFORM_BITNESS, M_NULL) ==
MappInquire(MilSystemOwnerApplication, M_PLATFORM_BITNESS, M_NULL)) &&
(MappInquire(M_DEFAULT, M_PLATFORM_OS_TYPE, M_NULL) ==
MappInquire(MilSystemOwnerApplication, M_PLATFORM_OS_TYPE, M_NULL)))
{
MappControl(M_DEFAULT, M_ERROR, M_PRINT_DISABLE);
MappFileOperation(M_DEFAULT, SLAVE_DLL_TARGET_NAME, MilSystemOwnerApplication, M_NULL,
M_FILE_COPY_MIL_DLL, M_DEFAULT, M_NULL);
if(0 != MappGetError(M_DEFAULT, M_CURRENT, M_NULL))
{
MosPrintf(MIL_TEXT("There was an error while copying the slave library.\n"));
MosPrintf(MIL_TEXT("Checking if one is present on the remote system.\n"));
CheckExistence = true;
}
MappControl(M_DEFAULT, M_ERROR, M_PRINT_ENABLE);
}
else
CheckExistence = true;
if(CheckExistence)
{
MIL_INT DllExists = M_NO;
MappFileOperation(MilSystemOwnerApplication, SLAVE_DLL_NAME, M_NULL, M_NULL,
M_FILE_EXISTS_MIL_DLL, M_DEFAULT, &DllExists);
if(DllExists != M_YES)
{
MosPrintf(MIL_TEXT("The slave library was NOT copied to the remote system.\n"));
MosPrintf(MIL_TEXT("Make sure it is present for the example to work properly.\n"));
MosPrintf(MIL_TEXT("See DistributedMILExamples.txt in the DistributedMIL examples "));
MosPrintf(MIL_TEXT("folder\nfor more information.\n"));
MsysFree(MilSystem);
MappFree(MilApplication);
MosPrintf(MIL_TEXT("Press a key to terminate.\n\n"));
MosGetch();
return -1;
}
}
MdispAlloc(MilSystem, M_DEFAULT, DISPLAY_FORMAT, M_DEFAULT, &MilDisplay);
MbufRestore(IMAGE_FILE, MilSystem, &MilImageDisp);
MbufRestore(IMAGE_FILE, MilSystem, &MilImageSrc);
MbufRestore(IMAGE_FILE, MilSystem, &MilImageDst);
MdispSelect(MilDisplay, MilImageDisp);
MosPrintf(MIL_TEXT("\nMIL DTK:\n"));
MosPrintf(MIL_TEXT("--------\n\n"));
MosPrintf(MIL_TEXT("This example tests and times a custom asynchronous MIL function\n"));
MosPrintf(MIL_TEXT("that adds a constant to an image and compare it's speed with the\n"));
MosPrintf(MIL_TEXT("equivalent MimArith() MIL function.\n"));
MosPrintf(MIL_TEXT("Press a key to continue.\n\n"));
MosGetch();
AddConstantC(MilImageSrc, MilImageDisp, 0x40);
MosPrintf(MIL_TEXT("A constant was added to the image using a user-made MIL function.\n\n"));
for (Version = 0; Version < NB_VERSIONS; Version++)
{
for (n= 0; n < NB_LOOP+1; n++)
{
if (n == 1)
MappTimer(M_DEFAULT, M_TIMER_RESET+M_SYNCHRONOUS, M_NULL);
switch(Version)
{
case USE_C:
AddConstantC(MilImageSrc, MilImageDst, 0x40);
break;
case USE_MIL:
MimArith(MilImageSrc, 0x40, MilImageDst, M_ADD_CONST+M_SATURATION);
break;
}
}
MappTimer(M_DEFAULT, M_TIMER_READ+M_SYNCHRONOUS, &Time);
MosPrintf(MIL_TEXT("Add constant time (%s version): %.3f ms.\n"), VersionName[Version],
Time*1000/NB_LOOP);
}
MosPrintf(MIL_TEXT("Press a key to terminate.\n\n"));
MosGetch();
MbufFree(MilImageSrc);
MbufFree(MilImageDst);
MbufFree(MilImageDisp);
MdispFree(MilDisplay);
MsysFree(MilSystem);
MappFree(MilApplication);
return 0;
}