765 lines
31 KiB
C++
765 lines
31 KiB
C++
//////////////////////////////////////////////////////////////////////
|
|
//
|
|
// HSI.cpp : Implementation of the MicroVu HSI supporting:
|
|
// - MicroVu based systems
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
#include "StdAfx.h"
|
|
|
|
#include "..\include\resource.h"
|
|
|
|
#include "HAL.h"
|
|
#include "HSI.h"
|
|
|
|
#include "FGLoad.h"
|
|
|
|
#include "HAL_EventHandler.H"
|
|
#include "HAL_Fixture.H"
|
|
#include "HAL_Illumination.H"
|
|
#include "HAL_LaserProbe.H"
|
|
#include "HAL_Motion.H"
|
|
#include "HAL_Optics.H"
|
|
#include "HAL_Pendant.H"
|
|
#include "HAL_ToolChanger.H"
|
|
#include "HAL_TouchProbe.H"
|
|
#include "HAL_VideoProbe.H"
|
|
|
|
#include "Logger.h"
|
|
|
|
// #define _TEST_MOTION_ONLY
|
|
|
|
#ifdef _MERGE_PROXYSTUB
|
|
extern "C" HINSTANCE hProxyDll;
|
|
#endif
|
|
|
|
extern TCHAR SectionHeader[];
|
|
|
|
//extern CMachineInterface *m_pMachine;
|
|
//HANDLE hEventEStop = NULL;
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// Interface version used in GetVersion()
|
|
//
|
|
#define VERSION _T("1.0")
|
|
//CMachineInterface *m_pMachine = NULL;
|
|
//CPCDpart_program *m_pPartProgram = NULL;
|
|
CWnd *pMessageBox;
|
|
CHAL *g_pHSI = NULL;
|
|
HINSTANCE VPlib = NULL;
|
|
HINSTANCE FGlib = NULL;
|
|
CHALMicroVuExt g_HSIExt; // basic configuration data
|
|
CMv_Proto *g_pMv_Proto = NULL;
|
|
CLogger *pLogger;
|
|
|
|
long g_lFramegrabberType = -1l;
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
#define MACHINE_ID_STRING (m_pMachine ? m_pMachine->m_id : _T("<undefined>"))
|
|
static AFX_EXTENSION_MODULE HSIDLL = { NULL, NULL };
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
extern "C" int APIENTRY DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/)
|
|
{
|
|
if (dwReason == DLL_PROCESS_ATTACH)
|
|
{
|
|
TRACE0("Hsi_MicroVu.DLL Initializing!\n");
|
|
|
|
// Extension DLL one-time initialization
|
|
AfxInitExtensionModule(HSIDLL, hInstance);
|
|
|
|
// Insert this DLL into the resource chain
|
|
new CDynLinkLibrary(HSIDLL);
|
|
}
|
|
else if (dwReason == DLL_PROCESS_DETACH)
|
|
{
|
|
TRACE0("Hsi_MicroVu.DLL Terminating!\n");
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// All required hardware objects
|
|
extern "C" __declspec(dllexport) HAL_STATUS HAL_GetVersion(TCHAR *Version)
|
|
{
|
|
HAL_STATUS Status = HAL_STATUS_NORMAL;
|
|
CString VersionStr;
|
|
#ifdef _DEBUG
|
|
|
|
VersionStr= _T("HSI_MicroVu.dll ") _T(__DATE__) _T(" debug version ") VERSION;
|
|
#else
|
|
VersionStr= _T("HSI_MicroVu.dll ") _T(__DATE__) _T(" release version ") VERSION;
|
|
#endif
|
|
|
|
wcsncpy_s(Version, HAL_MaxStringLength+1, VersionStr, HAL_MaxStringLength);
|
|
HAL_SendDebug(_T("HAL_GetVersion %s\n"), VersionStr);
|
|
return Status;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
//extern "C" __declspec(dllexport) HSI_STATUS HAL_Shutdown()
|
|
HAL_STATUS HAL_Shutdown()
|
|
{
|
|
if (g_pMv_Proto)
|
|
{
|
|
g_pMv_Proto->Exit_MvUsb();
|
|
delete g_pMv_Proto;
|
|
g_pMv_Proto = NULL;
|
|
};
|
|
|
|
return HAL_STATUS_NORMAL;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
extern "C" __declspec(dllexport) HAL_STATUS HAL_GetInterfaceVersion(long &APIVersionMajor, long &APIVersionMinor)
|
|
{
|
|
APIVersionMajor=HAL_APIVersionMajor;
|
|
APIVersionMinor=HAL_APIVersionMinor;
|
|
return HAL_STATUS_NORMAL;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// Start up checks if the m_TestMotion is ON. We will load the needed only.
|
|
//
|
|
extern "C" __declspec(dllexport) HAL_STATUS HAL_Startup(HWND hWnd, CHAL *pHAL, bool bOfflineOnly, long lFrameGrabberType)
|
|
{
|
|
HAL_STATUS Status = HAL_STATUS_NORMAL;
|
|
g_HSIExt.g_bOfflineOnly = bOfflineOnly;
|
|
|
|
// m_pMachine = global_machine_active;
|
|
// m_pPartProgram = m_pMachine->m_pPartProgram;
|
|
|
|
// If no HAL then quit
|
|
if(!pHAL)
|
|
return HAL_STATUS_FAILED;
|
|
|
|
// Set global HAL object
|
|
g_pHSI = pHAL;
|
|
|
|
if(!g_HSIExt.g_bOfflineOnly)
|
|
{
|
|
g_HSIExt.m_bIsInitialised = false;
|
|
|
|
g_pMv_Proto = new CMv_Proto(); // Create the MicroVu object
|
|
SSI_STATUS Status = g_pMv_Proto->Init_MvUsb();
|
|
if (Status != SSI_STATUS_NORMAL)
|
|
{
|
|
#pragma message("Add USB specific HAL event message here")
|
|
return HAL_STATUS_FAILED;
|
|
}
|
|
|
|
Status = g_pMv_Proto->mv_motion_startup(g_HSIExt.m_ScaleResolutionX, g_HSIExt.m_ScaleResolutionY, g_HSIExt.m_ScaleResolutionZ);
|
|
if (Status != SSI_STATUS_NORMAL)
|
|
{
|
|
#pragma message("Add USB specific HAL event message here")
|
|
return HAL_STATUS_FAILED;
|
|
}
|
|
|
|
g_HSIExt.m_bIsInitialised = true;
|
|
}
|
|
|
|
// Initialise the HAL function addresses
|
|
if(g_pHSI)
|
|
{
|
|
// Set exported HAL function addresses
|
|
g_pHSI->Shutdown = (HAL_SHUTDOWN) HAL_Shutdown;
|
|
g_pHSI->GetVersion = (HAL_GET_VERSION) ((HAL_GET_VERSION) HAL_GetVersion);
|
|
g_pHSI->GetInterfaceVersion = (HAL_GET_INTERFACE_VERSION) HAL_GetInterfaceVersion;
|
|
g_pHSI->GetMachineCount = (HAL_GET_MACHINE_COUNT) HAL_GetMachineCount;
|
|
g_pHSI->GetMachineInfo = (HAL_GET_MACHINE_INFO) HAL_GetMachineInfo;
|
|
g_pHSI->SetActiveMachine = (HAL_SET_ACTIVE_MACHINE) HAL_SetActiveMachine;
|
|
g_pHSI->GetActiveMachine = (HAL_GET_ACTIVE_MACHINE) HAL_GetActiveMachine;
|
|
g_pHSI->SetLocale = (HAL_SET_LOCALE) HAL_SetLocale;
|
|
g_pHSI->SetRegistryRootKey = (HAL_SET_REGISTRY_ROOT_KEY) HAL_SetRegistryRootKey;
|
|
g_pHSI->PreSetupDialog = (HAL_PRE_SETUP_DIALOG) HAL_PreSetupDialog;
|
|
g_pHSI->PostSetupDialog = (HAL_POST_SETUP_DIALOG) HAL_PostSetupDialog;
|
|
g_pHSI->EventResponse = (HAL_EVENT_RESPONSE) HAL_EventResponse;
|
|
g_pHSI->GetCustomMessage = (HAL_GET_CUSTOM_MESSAGE) HAL_GetCustomMessage;
|
|
//g_pHSI->GetTemperatureSensor = (HAL_GET_TEMPERATURE_SENSOR) HAL_GetTemperatureSensor;
|
|
//g_pHSI->GetTemperatureSensorCount = (HAL_GET_TEMPERATURE_SENSOR_COUNT) HAL_GetTemperatureSensorCount;
|
|
|
|
if(!g_HSIExt.g_bOfflineOnly)
|
|
{
|
|
g_pHSI->Calibrate = (HAL_CALIBRATE) HAL_Calibrate;
|
|
g_pHSI->Notify = (HAL_NOTIFY) HAL_Notify;
|
|
g_pHSI->GetCustomCalibrationTypeInfo = (HAL_GET_CUSTOM_CALIBRATION_TYPE_INFO) HAL_GetCustomCalibrationTypeInfo;
|
|
}
|
|
|
|
// Map the supported function addresses for the MSI
|
|
HAL_MapSupportedFunctions(pHAL, hWnd, bOfflineOnly);
|
|
|
|
// #ifndef _TEST_MOTION_ONLY
|
|
|
|
HAL_SendDebug(_T("Load VideoProbe library\n"));
|
|
VPlib = ::AfxLoadLibrary(_T("WAI_VideoProbe.dll"));
|
|
if(VPlib)
|
|
{
|
|
g_pHSI->VideoProbe.IsSupported = (HAL_VP_IS_SUPPORTED) ::GetProcAddress(VPlib, "HAL_VP_IsSupported");
|
|
g_pHSI->VideoProbe.IsToolSupported = (HAL_VP_IS_TOOL_SUPPORTED) ::GetProcAddress(VPlib, "HAL_VP_IsToolSupported");
|
|
g_pHSI->VideoProbe.GetProbeCount = (HAL_VP_GET_PROBE_COUNT) ::GetProcAddress(VPlib, "HAL_VP_GetProbeCount");
|
|
|
|
g_pHSI->VideoProbe.GetActiveProbe = (HAL_VP_GET_ACTIVE_PROBE) HAL_VP_GetActiveProbe;
|
|
g_pHSI->VideoProbe.SetActiveProbe = (HAL_VP_SET_ACTIVE_PROBE) HAL_VP_SetActiveProbe;
|
|
|
|
if(g_pHSI->VideoProbe.IsActive())
|
|
{
|
|
if(!bOfflineOnly)
|
|
{
|
|
g_pHSI->VideoProbe.DoMeasure = (HAL_VP_DO_MEASURE) ::GetProcAddress(VPlib, "HAL_VP_DoMeasure");
|
|
g_pHSI->VideoProbe.Enable = (HAL_VP_ENABLE) ::GetProcAddress(VPlib, "HAL_VP_Enable");
|
|
g_pHSI->VideoProbe.IsEnabled = (HAL_VP_IS_ENABLED) ::GetProcAddress(VPlib, "HAL_VP_IsEnabled");
|
|
g_pHSI->VideoProbe.GetToolCustomTypeInfo = (HAL_VP_GET_TOOL_CUSTOM_TYPE_INFO) ::GetProcAddress(VPlib, "HAL_VP_GetToolCustomTypeInfo");
|
|
g_pHSI->VideoProbe.GetMeasureData = (HAL_VP_GET_MEASURE_DATA) ::GetProcAddress(VPlib, "HAL_VP_GetMeasureData");
|
|
g_pHSI->VideoProbe.GetParameterCount = (HAL_VP_GET_PARAMETER_COUNT) ::GetProcAddress(VPlib, "HAL_VP_GetParameterCount");
|
|
g_pHSI->VideoProbe.GetParameterInfo = (HAL_VP_GET_PARAMETER_INFO) ::GetProcAddress(VPlib, "HAL_VP_GetParameterInfo");
|
|
g_pHSI->VideoProbe.GetTipOffset = (HAL_VP_GET_TIP_OFFSET) ::GetProcAddress(VPlib, "HAL_VP_GetTipOffset");
|
|
g_pHSI->VideoProbe.IsMeasuring = (HAL_VP_IS_MEASURING) ::GetProcAddress(VPlib, "HAL_VP_IsMeasuring");
|
|
g_pHSI->VideoProbe.SetTipOffset = (HAL_VP_SET_TIP_OFFSET) ::GetProcAddress(VPlib, "HAL_VP_SetTipOffset");
|
|
g_pHSI->VideoProbe.SetupMeasureEdgeArc = (HAL_VP_SETUP_MEASURE_EDGE_ARC) ::GetProcAddress(VPlib, "HAL_VP_SetupMeasureEdgeArc");
|
|
g_pHSI->VideoProbe.SetupMeasureEdgeBlob = (HAL_VP_SETUP_MEASURE_EDGE_BLOB) ::GetProcAddress(VPlib, "HAL_VP_SetupMeasureEdgeBlob");
|
|
g_pHSI->VideoProbe.SetupMeasureEdgeLine = (HAL_VP_SETUP_MEASURE_EDGE_LINE) ::GetProcAddress(VPlib, "HAL_VP_SetupMeasureEdgeLine");
|
|
g_pHSI->VideoProbe.SetupMeasureEdgePoint = (HAL_VP_SETUP_MEASURE_EDGE_POINT) ::GetProcAddress(VPlib, "HAL_VP_SetupMeasureEdgePoint");
|
|
g_pHSI->VideoProbe.SetupMeasureEdgeTracer = (HAL_VP_SETUP_MEASURE_EDGE_TRACER) ::GetProcAddress(VPlib, "HAL_VP_SetupMeasureEdgeTrace");
|
|
g_pHSI->VideoProbe.SetupMeasureSurfacePoint = (HAL_VP_SETUP_MEASURE_SURFACE_POINT) ::GetProcAddress(VPlib, "HAL_VP_SetupMeasureSurfacePoint");
|
|
g_pHSI->VideoProbe.SetupImage = (HAL_VP_SETUP_IMAGE) ::GetProcAddress(VPlib, "HAL_VP_SetupImage"); //Task104403-- 501919 - 2 - Measure features and pass back points, putting them in the appropriate auto feature—Subtask: MSI grabs the image and pass it to the videoprobe
|
|
g_pHSI->VideoProbe.Shutdown = (HAL_VP_SHUTDOWN) ::GetProcAddress(VPlib, "HAL_VP_ShutDown");
|
|
g_pHSI->VideoProbe.Startup = (HAL_VP_STARTUP) ::GetProcAddress(VPlib, "HAL_VP_Startup");
|
|
|
|
//PVD-29: Remove MSIGlobal from the VideoProbe.dll.
|
|
g_pHSI->VideoProbe.HelperSetupFocusData = (HAL_VP_HELPER_SETUP_FOCUS_DATA) ::GetProcAddress(VPlib, "HAL_VP_Helper_SetupFocusData");
|
|
g_pHSI->VideoProbe.HelperSetupOpticsSupports = (HAL_VP_HELPER_SETUP_OPTICS_SUPPORTS) ::GetProcAddress(VPlib, "HAL_VP_Helper_SetupOpticsSupports");
|
|
g_pHSI->VideoProbe.HelperSetupFrameGrabberData = (HAL_VP_HELPER_SETUP_FRAME_GRABBER_DATA) ::GetProcAddress(VPlib, "HAL_VP_Helper_SetupFrameGrabberData");
|
|
g_pHSI->VideoProbe.HelperSetupProbeData = (HAL_VP_HELPER_SETUP_PROBE_DATA) ::GetProcAddress(VPlib, "HAL_VP_Helper_SetupProbeData");
|
|
g_pHSI->VideoProbe.HelperSetCameraRotationalAngle = (HAL_VP_HELPER_SET_CAMERA_ROTATIONAL_ANGLE) ::GetProcAddress(VPlib, "HAL_VP_Helper_SetCameraRotationalAngle");
|
|
g_pHSI->VideoProbe.HelperSetOpticalFocalCenter = (HAL_VP_HELPER_SET_OPTICAL_FOCAL_CENTER) ::GetProcAddress(VPlib, "HAL_VP_Helper_SetOpticalFocalCenter");
|
|
g_pHSI->VideoProbe.HelperSetOpticsCurrPixelSize = (HAL_VP_HELPER_SET_OPTICS_CURR_PIXEL_SIZE) ::GetProcAddress(VPlib, "HAL_VP_Helper_SetOpticsCurrPixelSize");
|
|
g_pHSI->VideoProbe.HelperSetGlobalUnitInMM = (HAL_VP_HELPER_SET_GLOBAL_UNIT_IN_MM) ::GetProcAddress(VPlib, "HAL_VP_Helper_SetGlobalUnitInMM");
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
HAL_SendDebug(_T("Load VideoProbe library failed\n"));
|
|
CString Message;
|
|
Message.LoadString(IDS_NC_FILE_NOT_FOUND);
|
|
Message = _T("WAI_VideoProbe.dll - ") + Message;
|
|
TCHAR Msg[HAL_MaxStringLength+1];
|
|
wcsncpy_s(Msg, HAL_MaxStringLength+1, Message, HAL_MaxStringLength);
|
|
UINT EventCallbackID = 0;
|
|
g_pHSI->Event(HAL_EVENT_ERROR, 0, Msg, EventCallbackID);
|
|
return HAL_STATUS_FILE_NOT_FOUND;
|
|
}
|
|
|
|
// Set exported HAL FRAME GRABBER function addresses
|
|
if(g_pHSI->FrameGrabber.m_bEnabled)
|
|
{
|
|
// Load FrameGrabber library
|
|
HAL_SendDebug(_T("Load FrameGrabber library\n"));
|
|
CString DLLsFoundWithFailedLoad;
|
|
CString DefFileName;
|
|
BOOL bDefWAIFGFileFound=FALSE;
|
|
BOOL bWAIVenderFGFileFound=FALSE;
|
|
CString LoadingStatus;
|
|
bool bLoadedAndProbed = LoadFramegrabberDLL(lFrameGrabberType, FGlib, DLLsFoundWithFailedLoad, bDefWAIFGFileFound, bWAIVenderFGFileFound, LoadingStatus);
|
|
LoadingStatus += _T("\n");
|
|
// debug.Send(LoadingStatus);
|
|
|
|
if(bLoadedAndProbed)
|
|
{
|
|
// Get startup address and call startup routine
|
|
g_pHSI->FrameGrabber.IsSupported = (HAL_FG_IS_SUPPORTED) ::GetProcAddress(FGlib, "HAL_FG_IsSupported");
|
|
|
|
if (g_pHSI->FrameGrabber.IsActive())
|
|
{
|
|
// HAL FRAMEGRABBER is supported
|
|
g_pHSI->FrameGrabber.GetCameraCount = (HAL_FG_GET_CAMERA_COUNT) ::GetProcAddress(FGlib, "HAL_FG_GetCameraCount");
|
|
g_pHSI->FrameGrabber.GetImageSize = (HAL_FG_GET_IMAGE_SIZE) ::GetProcAddress(FGlib, "HAL_FG_GetImageSize");
|
|
if(!g_HSIExt.g_bOfflineOnly)
|
|
{
|
|
g_pHSI->FrameGrabber.Startup = (HAL_FG_STARTUP) ::GetProcAddress(FGlib, "HAL_FG_Startup");
|
|
g_pHSI->FrameGrabber.ProbeDevice = (HAL_FG_PROBE_DEVICE) ::GetProcAddress(FGlib, "HAL_FG_ProbeDevice");
|
|
g_pHSI->FrameGrabber.IsCameraPresent = (HAL_FG_IS_CAMERA_PRESENT) ::GetProcAddress(FGlib, "HAL_FG_IsCameraPresent");
|
|
g_pHSI->FrameGrabber.SetActiveCamera = (HAL_FG_SET_ACTIVE_CAMERA) ::GetProcAddress(FGlib, "HAL_FG_SetActiveCamera");
|
|
g_pHSI->FrameGrabber.StartLiveVideo = (HAL_FG_START_LIVE_VIDEO) ::GetProcAddress(FGlib, "HAL_FG_StartLiveVideo");
|
|
g_pHSI->FrameGrabber.StopLiveVideo = (HAL_FG_STOP_LIVE_VIDEO) ::GetProcAddress(FGlib, "HAL_FG_StopLiveVideo");
|
|
g_pHSI->FrameGrabber.DoGreyscaleSnapshot = (HAL_FG_DO_GREYSCALE_SNAPSHOT) ::GetProcAddress(FGlib, "HAL_FG_DoGreyscaleSnapshot");
|
|
g_pHSI->FrameGrabber.GetGreyscaleSnapshotImage = (HAL_FG_GET_GREYSCALE_SNAPSHOT_IMAGE) ::GetProcAddress(FGlib, "HAL_FG_GetGreyscaleSnapshotImage");
|
|
g_pHSI->FrameGrabber.DoColorSnapshot = (HAL_FG_DO_COLOR_SNAPSHOT) ::GetProcAddress(FGlib, "HAL_FG_DoColorSnapshot");
|
|
g_pHSI->FrameGrabber.GetColorSnapshotPixel = (HAL_FG_GET_COLOR_SNAPSHOT_PIXEL) ::GetProcAddress(FGlib, "HAL_FG_GetColorSnapshotPixel");
|
|
g_pHSI->FrameGrabber.StartUpdateOverlay = (HAL_FG_START_UPDATE_OVERLAY) ::GetProcAddress(FGlib, "HAL_FG_StartUpdateOverlay");
|
|
g_pHSI->FrameGrabber.GetOverlayDC = (HAL_FG_GET_OVERLAY_DC) ::GetProcAddress(FGlib, "HAL_FG_GetOverlayDC");
|
|
g_pHSI->FrameGrabber.DrawOverlayDot = (HAL_FG_DRAW_OVERLAY_DOT) ::GetProcAddress(FGlib, "HAL_FG_DrawOverlayDot");
|
|
g_pHSI->FrameGrabber.ClearOverlay = (HAL_FG_CLEAR_OVERLAY) ::GetProcAddress(FGlib, "HAL_FG_ClearOverlay");
|
|
g_pHSI->FrameGrabber.EndUpdateOverlay = (HAL_FG_END_UPDATE_OVERLAY) ::GetProcAddress(FGlib, "HAL_FG_EndUpdateOverlay");
|
|
g_pHSI->FrameGrabber.GetTransparentColor = (HAL_FG_GET_TRANSPARENT_COLOR) ::GetProcAddress(FGlib, "HAL_FG_GetTransparentColor");
|
|
g_pHSI->FrameGrabber.GetFieldonetime = (HAL_FG_GET_FIELDONETIME) ::GetProcAddress(FGlib, "HAL_FG_GetFieldonetime");
|
|
g_pHSI->FrameGrabber.GetFieldtwotime = (HAL_FG_GET_FIELDTWOTIME) ::GetProcAddress(FGlib, "HAL_FG_GetFieldtwotime");
|
|
g_pHSI->FrameGrabber.SetGrabHook = (HAL_FG_SET_GRAB_HOOK) ::GetProcAddress(FGlib, "HAL_FG_SetGrabHook");
|
|
g_pHSI->FrameGrabber.ClearGrabHook = (HAL_FG_CLEAR_GRAB_HOOK) ::GetProcAddress(FGlib, "HAL_FG_ClearGrabHook");
|
|
g_pHSI->FrameGrabber.Shutdown = (HAL_FG_SHUTDOWN) ::GetProcAddress(FGlib, "HAL_FG_Shutdown");
|
|
g_pHSI->FrameGrabber.StartOfFocus = (HAL_FG_STARTOFFOCUS) ::GetProcAddress(FGlib, "HAL_FG_StartOfFocus");
|
|
g_pHSI->FrameGrabber.EndOfFocus = (HAL_FG_ENDOFFOCUS) ::GetProcAddress(FGlib, "HAL_FG_EndOfFocus");
|
|
g_pHSI->FrameGrabber.GreyscaleRGB = (HAL_FG_GREYSCALE_RGB) ::GetProcAddress(FGlib, "HAL_FG_GreyscaleRGB");
|
|
g_pHSI->FrameGrabber.IsCameraColor = (HAL_FG_IS_CAMERA_COLOR) ::GetProcAddress(FGlib, "HAL_FG_IsCameraColor"); //109287
|
|
g_pHSI->FrameGrabber.SetTransparency = (HAL_FG_SET_TRANSPARENCY) ::GetProcAddress(FGlib, "HAL_FG_SetTransparency");
|
|
}
|
|
}
|
|
}
|
|
else if(!bOfflineOnly)
|
|
{
|
|
CString Message;
|
|
if(bDefWAIFGFileFound == TRUE || bWAIVenderFGFileFound == TRUE)
|
|
{
|
|
Message.LoadString(IDS_FRAME_GRABBER_MISSING_DEPENDENT_DLL);
|
|
}
|
|
else
|
|
{
|
|
Message.LoadString(IDS_NC_FILE_NOT_FOUND);
|
|
}
|
|
|
|
Message = DLLsFoundWithFailedLoad + _T(" - ") + Message;
|
|
TCHAR Msg[HAL_MaxStringLength+1];
|
|
wcsncpy_s(Msg, HAL_MaxStringLength+1, Message, HAL_MaxStringLength);
|
|
UINT EventCallbackID = 0;
|
|
g_pHSI->Event(HAL_EVENT_FUNCTION, HAL_EVENT_DISPLAY_OK_MESSAGE, Msg, EventCallbackID);
|
|
return HAL_STATUS_FILE_NOT_FOUND;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// debug.Send(_T("Framegrabber not active - Load FrameGrabber library skipped\n"));
|
|
}
|
|
|
|
// #endif
|
|
|
|
}
|
|
else
|
|
return HAL_STATUS_FAILED;
|
|
|
|
return Status;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
HAL_STATUS HAL_MapSupportedFunctions(CHAL *pHAL, HWND hWnd, bool bOfflineOnly)
|
|
{
|
|
HAL_STATUS Status = HAL_STATUS_NORMAL;
|
|
pHAL->Illumination.IsSupported = (HAL_ILLUMINATION_IS_SUPPORTED) HAL_Illumination_IsSupported;
|
|
if(pHAL->Illumination.IsActive(true))
|
|
{
|
|
pHAL->Illumination.GetLampCount = (HAL_ILLUMINATION_GET_LAMP_COUNT) HAL_Illumination_GetLampCount;
|
|
pHAL->Illumination.GetLampInfo = (HAL_ILLUMINATION_GET_LAMP_INFO) HAL_Illumination_GetLampInfo;
|
|
if(!g_HSIExt.g_bOfflineOnly)
|
|
{
|
|
pHAL->Illumination.Startup = (HAL_ILLUMINATION_STARTUP) HAL_Illumination_Startup;
|
|
pHAL->Illumination.GetLampState = (HAL_ILLUMINATION_GET_LAMP_STATE) HAL_Illumination_GetLampState;
|
|
pHAL->Illumination.SetLampState = (HAL_ILLUMINATION_SET_LAMP_STATE) HAL_Illumination_SetLampState;
|
|
pHAL->Illumination.Shutdown = (HAL_ILLUMINATION_SHUTDOWN) HAL_Illumination_Shutdown;
|
|
}
|
|
}
|
|
pHAL->Motion.IsSupported = (HAL_MOTION_IS_SUPPORTED) HAL_Motion_IsSupported;
|
|
if(pHAL->Motion.IsActive(true))
|
|
{
|
|
pHAL->Motion.GetAxisCount = (HAL_MOTION_GET_AXIS_COUNT) HAL_Motion_GetAxisCount;
|
|
pHAL->Motion.GetSpeedXYZ = (HAL_MOTION_GET_SPEED_XYZ) HAL_Motion_GetSpeedXYZ;
|
|
pHAL->Motion.GetSpeedR = (HAL_MOTION_GET_SPEED_R) HAL_Motion_GetSpeedR;
|
|
pHAL->Motion.GetSettleTime = (HAL_MOTION_GET_SETTLE_TIME) HAL_Motion_GetSettleTime;
|
|
pHAL->Motion.GetDeadband = (HAL_MOTION_GET_DEADBAND) HAL_Motion_GetDeadband;
|
|
pHAL->Motion.GetRefreshDeadband = (HAL_MOTION_GET_REFRESH_DEADBAND) HAL_Motion_GetRefreshDeadband;
|
|
pHAL->Motion.GetStageLimits = (HAL_MOTION_GET_STAGE_LIMITS) HAL_Motion_GetStageLimits;
|
|
pHAL->Motion.SetStageLimits = (HAL_MOTION_SET_STAGE_LIMITS) HAL_Motion_SetStageLimits;
|
|
pHAL->Motion.GetMaxSpeed = (HAL_MOTION_GET_MAX_SPEED) HAL_Motion_GetMaxSpeed;
|
|
if(!g_HSIExt.g_bOfflineOnly)
|
|
{
|
|
pHAL->Motion.Startup = (HAL_MOTION_STARTUP) HAL_Motion_Startup;
|
|
pHAL->Motion.SetSpeedXYZ = (HAL_MOTION_SET_SPEED_XYZ) HAL_Motion_SetSpeedXYZ;
|
|
pHAL->Motion.SetSpeedR = (HAL_MOTION_SET_SPEED_R) HAL_Motion_SetSpeedR;
|
|
pHAL->Motion.SetAccelerationXYZ = (HAL_MOTION_SET_ACCELERATION_XYZ) HAL_Motion_SetAccelerationXYZ;
|
|
pHAL->Motion.SetAccelerationR = (HAL_MOTION_SET_ACCELERATION_R) HAL_Motion_SetAccelerationR;
|
|
pHAL->Motion.GetAccelerationXYZ = (HAL_MOTION_GET_ACCELERATION_XYZ) HAL_Motion_GetAccelerationXYZ;
|
|
pHAL->Motion.GetAccelerationR = (HAL_MOTION_GET_ACCELERATION_R) HAL_Motion_GetAccelerationR;
|
|
pHAL->Motion.GetPositionXYZ = (HAL_MOTION_GET_POSITION_XYZ) HAL_Motion_GetPositionXYZ;
|
|
pHAL->Motion.SetPositionXYZ = (HAL_MOTION_SET_POSITION_XYZ) HAL_Motion_SetPositionXYZ;
|
|
pHAL->Motion.GetPositionR = (HAL_MOTION_GET_POSITION_R) HAL_Motion_GetPositionR;
|
|
pHAL->Motion.SetPositionR = (HAL_MOTION_SET_POSITION_R) HAL_Motion_SetPositionR;
|
|
pHAL->Motion.IsHomed = (HAL_MOTION_IS_HOMED) HAL_Motion_IsHomed;
|
|
pHAL->Motion.Shutdown = (HAL_MOTION_SHUTDOWN) HAL_Motion_Shutdown;
|
|
}
|
|
}
|
|
pHAL->Pendant.IsSupported = (HAL_PENDANT_IS_SUPPORTED) HAL_Pendant_IsSupported;
|
|
if(pHAL->Pendant.IsActive(true))
|
|
{
|
|
if(!g_HSIExt.g_bOfflineOnly)
|
|
{
|
|
pHAL->Pendant.Startup = (HAL_PENDANT_STARTUP) HAL_Pendant_Startup;
|
|
pHAL->Pendant.Enable = (HAL_PENDANT_ENABLE) HAL_Pendant_Enable;
|
|
pHAL->Pendant.Shutdown = (HAL_PENDANT_SHUTDOWN) HAL_Pendant_Shutdown;
|
|
}
|
|
}
|
|
|
|
pHAL->Optics.IsSupported = (HAL_OPTICS_IS_SUPPORTED) HAL_Optics_IsSupported;
|
|
if(pHAL->Optics.IsActive(true))
|
|
{
|
|
// pHAL->Optics.GetMagnificationSteps = (HAL_OPTICS_GET_MAGNIFICATION_STEPS) HAL_Optics_GetMagnificationSteps;
|
|
// pHAL->Optics.GetDeadband = (HAL_OPTICS_GET_DEADBAND) HAL_Optics_GetDeadband;
|
|
if(!g_HSIExt.g_bOfflineOnly)
|
|
{
|
|
pHAL->Optics.Startup = (HAL_OPTICS_STARTUP) HAL_Optics_Startup;
|
|
pHAL->Optics.GetScaleRange = (HAL_OPTICS_GET_SCALE_RANGE) HAL_Optics_GetScaleRange;
|
|
pHAL->Optics.GetScalePosition = (HAL_OPTICS_GET_SCALE_POSITION) HAL_Optics_GetScalePosition;
|
|
pHAL->Optics.SetScalePosition = (HAL_OPTICS_SET_SCALE_POSITION) HAL_Optics_SetScalePosition;
|
|
pHAL->Optics.EnableGrid = (HAL_OPTICS_ENABLE_GRID) HAL_Optics_EnableGrid;
|
|
pHAL->Optics.IsGridEnabled = (HAL_OPTICS_IS_GRID_ENABLED) HAL_Optics_IsGridEnabled;
|
|
pHAL->Optics.EnableLaser = (HAL_OPTICS_ENABLE_LASER) HAL_Optics_EnableLaser;
|
|
pHAL->Optics.IsLaserEnabled = (HAL_OPTICS_IS_LASER_ENABLED) HAL_Optics_IsLaserEnabled;
|
|
pHAL->Optics.Shutdown = (HAL_OPTICS_SHUTDOWN) HAL_Optics_Shutdown;
|
|
|
|
// Load HSI library
|
|
HINSTANCE OpticsLib = ::AfxLoadLibrary(_T("WAI_Optics.dll"));
|
|
if(OpticsLib)
|
|
{
|
|
//Get startup address and call startup routine
|
|
HAL_STARTUP Startup = (HAL_STARTUP) ::GetProcAddress(OpticsLib, "HAL_Startup");
|
|
if(Startup)
|
|
{
|
|
//store these function pointers (WAI_Optics.dll will change these)
|
|
HAL_SHUTDOWN pOrginalShutdown = pHAL->Shutdown;
|
|
HAL_GET_VERSION pOrginalGetVersion = pHAL->GetVersion;
|
|
|
|
//TKr/100924: Adaption on V1.84 (new g_lFramegrabberType)
|
|
//if(Startup(hWnd, pHAL, bOfflineOnly, g_lFramegrabberType) == HAL_STATUS_NORMAL)
|
|
#pragma message("do we need a real framegrabber type here")
|
|
if(Startup(hWnd, pHAL, bOfflineOnly, 0) == HAL_STATUS_NORMAL)
|
|
{
|
|
//restore the original function pointers
|
|
pHAL->Shutdown = pOrginalShutdown;
|
|
pHAL->GetVersion = pOrginalGetVersion;
|
|
|
|
//store the function pointers from the WAI_Optics.dll
|
|
//(will be used in HMV-Startup and -Shutdown)
|
|
g_HSIExt.g_lpfnWAIOpticsStartup = pHAL->Optics.Startup;
|
|
g_HSIExt.g_lpfnWALOpticsShutdown = pHAL->Optics.Shutdown;
|
|
|
|
}
|
|
else
|
|
{
|
|
Status = HAL_STATUS_FAILED;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Status = HAL_STATUS_FAILED;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
AfxMessageBox(_T("Failed Startup"));
|
|
Status = HAL_STATUS_FAILED;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Set exported HAL LASERPROBE function addresses
|
|
pHAL->LaserProbe.IsSupported = (HAL_LP_IS_SUPPORTED) HAL_LP_IsSupported;
|
|
|
|
if(pHAL->LaserProbe.IsActive(true))
|
|
{
|
|
// HAL LASERPROBE is supported
|
|
if(!g_HSIExt.g_bOfflineOnly)
|
|
{
|
|
pHAL->LaserProbe.Startup = (HAL_LP_STARTUP) HAL_LP_Startup;
|
|
pHAL->LaserProbe.Enable = (HAL_LP_ENABLE) HAL_LP_Enable;
|
|
pHAL->LaserProbe.IsEnabled = (HAL_LP_IS_ENABLED) HAL_LP_IsEnabled;
|
|
pHAL->LaserProbe.GetActiveProbe = (HAL_LP_GET_ACTIVE_PROBE) HAL_LP_GetActiveProbe;
|
|
pHAL->LaserProbe.SetActiveProbe = (HAL_LP_SET_ACTIVE_PROBE) HAL_LP_SetActiveProbe;
|
|
pHAL->LaserProbe.SetupMeasurePoint = (HAL_LP_SETUP_MEASURE_POINT) HAL_LP_SetupMeasurePoint;
|
|
pHAL->LaserProbe.DoMeasure = (HAL_LP_DO_MEASURE) HAL_LP_DoMeasure;
|
|
pHAL->LaserProbe.GetMeasureData = (HAL_LP_GET_MEASURE_DATA) HAL_LP_GetMeasureData;
|
|
pHAL->LaserProbe.Shutdown = (HAL_LP_SHUTDOWN) HAL_LP_Shutdown;
|
|
}
|
|
}
|
|
|
|
// Set exported HAL TOUCHPROBE function addresses
|
|
pHAL->TouchProbe.IsSupported = (HAL_TP_IS_SUPPORTED) HAL_TP_IsSupported;
|
|
|
|
if(pHAL->TouchProbe.IsActive(true))
|
|
{
|
|
// HAL TOUCHPROBE is supported
|
|
if(!g_HSIExt.g_bOfflineOnly)
|
|
{
|
|
pHAL->TouchProbe.Startup = (HAL_TP_STARTUP) HAL_TP_Startup;
|
|
pHAL->TouchProbe.Enable = (HAL_TP_ENABLE) HAL_TP_Enable;
|
|
pHAL->TouchProbe.GetActiveProbe = (HAL_TP_GET_ACTIVE_PROBE) HAL_TP_GetActiveProbe;
|
|
pHAL->TouchProbe.SetActiveProbe = (HAL_TP_SET_ACTIVE_PROBE) HAL_TP_SetActiveProbe;
|
|
pHAL->TouchProbe.SetManualTouchData = (HAL_TP_SET_MANUAL_TOUCH_DATA) HAL_TP_SetManualTouchData;
|
|
pHAL->TouchProbe.GetTipOffset = (HAL_TP_GET_TIP_OFFSET) HAL_TP_GetTipOffset;
|
|
pHAL->TouchProbe.SetTipOffset = (HAL_TP_SET_TIP_OFFSET) HAL_TP_SetTipOffset;
|
|
pHAL->TouchProbe.SetupMeasurePoint = (HAL_TP_SETUP_MEASURE_POINT) HAL_TP_SetupMeasurePoint;
|
|
pHAL->TouchProbe.DoMeasure = (HAL_TP_DO_MEASURE) HAL_TP_DoMeasure;
|
|
pHAL->TouchProbe.IsMeasuring = (HAL_TP_IS_MEASURING) HAL_TP_IsMeasuring;
|
|
pHAL->TouchProbe.GetMeasureData = (HAL_TP_GET_MEASURE_DATA) HAL_TP_GetMeasureData;
|
|
pHAL->TouchProbe.Shutdown = (HAL_TP_SHUTDOWN) HAL_TP_Shutdown;
|
|
}
|
|
}
|
|
|
|
// Set exported HAL FIXTURE function addresses
|
|
pHAL->Fixture.IsSupported = (HAL_FIXTURE_IS_SUPPORTED) HAL_Fixture_IsSupported;
|
|
|
|
if(pHAL->Fixture.IsActive(true))
|
|
{
|
|
// HAL FIXTURE is supported
|
|
if(!g_HSIExt.g_bOfflineOnly)
|
|
{
|
|
//pHAL->Fixture.Startup = (HAL_FIXTURE_STARTUP) HAL_Fixture_Startup;
|
|
//pHAL->Fixture.Shutdown = (HAL_FIXTURE_SHUTDOWN) HAL_Fixture_Shutdown;
|
|
}
|
|
}
|
|
|
|
// Set exported HAL TOOLCHANGER function addresses
|
|
pHAL->ToolChanger.IsSupported = (HAL_TC_IS_SUPPORTED) HAL_TC_IsSupported;
|
|
|
|
if(pHAL->ToolChanger.IsActive(true))
|
|
{
|
|
// HAL TOOLCHANGER is supported
|
|
if(!g_HSIExt.g_bOfflineOnly)
|
|
{
|
|
//pHAL->ToolChanger.Startup = (HAL_TC_STARTUP) HAL_TC_Startup;
|
|
//pHAL->ToolChanger.Shutdown = (HAL_TC_SHUTDOWN) HAL_TC_Shutdown;
|
|
}
|
|
}
|
|
|
|
return Status;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
HAL_STATUS HAL_GetMachineCount(int &NumMachines)
|
|
{
|
|
NumMachines=HAL_NUM_MACHINE_TYPES;
|
|
return HAL_STATUS_NORMAL;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
HAL_STATUS HAL_GetMachineInfo(int Machine, TCHAR *MachineName, TCHAR *FirmwareVersion)
|
|
{
|
|
switch(Machine)
|
|
{
|
|
case HAL_MACHINE_TYPE_EXCEL:
|
|
wcsncpy_s(MachineName, HAL_MaxStringLength+1, _T("MicroVu Excel"), HAL_MaxStringLength);
|
|
wcsncpy_s(FirmwareVersion, HAL_MaxStringLength+1, _T(""), HAL_MaxStringLength);
|
|
break;
|
|
|
|
case HAL_MACHINE_TYPE_VECTRA:
|
|
wcsncpy_s(MachineName, HAL_MaxStringLength+1, _T("MicroVu Vectra"), HAL_MaxStringLength);
|
|
wcsncpy_s(FirmwareVersion, HAL_MaxStringLength+1, _T(""), HAL_MaxStringLength);
|
|
break;
|
|
|
|
case HAL_MACHINE_TYPE_UNSELECTED:
|
|
default:
|
|
wcsncpy_s(MachineName, HAL_MaxStringLength+1, _T("Not selected"), HAL_MaxStringLength);
|
|
wcsncpy_s(FirmwareVersion, HAL_MaxStringLength+1, _T(""), HAL_MaxStringLength);
|
|
break;
|
|
}
|
|
return HAL_STATUS_NORMAL;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
HAL_STATUS HAL_GetActiveMachine(int &Machine)
|
|
{
|
|
Machine=g_HSIExt.m_ActiveMachineType;
|
|
return HAL_STATUS_NORMAL;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
HAL_STATUS HAL_SetActiveMachine(int Machine)
|
|
{
|
|
g_HSIExt.InitialiseMachineType((HAL_MACHINE_TYPE)Machine);
|
|
return HAL_STATUS_NORMAL;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
HAL_STATUS HAL_SetLocale(UINT /*LCID*/)
|
|
{
|
|
return HAL_STATUS_NORMAL;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
HAL_STATUS HAL_SetRegistryRootKey(TCHAR * /*RegistryKey*/)
|
|
{
|
|
return HAL_STATUS_NORMAL;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
HAL_STATUS HAL_PreSetupDialog(CPropertySheet * /*SetupDlg*/, bool /*bOfflineSetup*/)
|
|
{
|
|
return HAL_STATUS_NORMAL;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
HAL_STATUS HAL_PostSetupDialog(CPropertySheet * /*SetupDlg*/)
|
|
{
|
|
return HAL_STATUS_NORMAL;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
HAL_STATUS HAL_Calibrate(HAL_CALIBRATE_TYPE /*Type*/)
|
|
{
|
|
HAL_STATUS Status = HAL_STATUS_NORMAL;
|
|
|
|
return Status;
|
|
}
|
|
|
|
//***********************************************************************************************
|
|
//
|
|
//***********************************************************************************************
|
|
HAL_STATUS HAL_Notify (HAL_NOTIFY_TYPE Type)
|
|
{
|
|
HAL_STATUS retVal=HAL_STATUS_NORMAL;
|
|
|
|
if(Type==HAL_NOTIFY_PROGRAM_EXECUTION_START)
|
|
{
|
|
TCHAR Msg[HAL_MaxStringLength+1];
|
|
CString MsgStr;
|
|
MsgStr.LoadString(IDS_ALIGN_ROTARY);
|
|
wcsncpy_s(Msg, HAL_MaxStringLength+1, MsgStr, HAL_MaxStringLength);
|
|
|
|
// Do the below event call ONLY if rotary table enabled.
|
|
if(g_HSIExt.m_AxisEnabled[HAL_AXIS_Q] && IsRotaryEnabled())
|
|
{
|
|
// xxxx g_pHSI->Event(HAL_EVENT_FUNCTION, HAL_EVENT_DISPLAY_OK_MESSAGE, Msg, EventCallbackID);
|
|
|
|
// OK - lets store the rotary offset position at this point
|
|
if(IsBoardPresent())
|
|
{
|
|
// Read current position
|
|
//long Position[4] = {0,0,0,0};
|
|
//long Direction[4];
|
|
// UNREFERENCED_PARAMETER(Direction);
|
|
// bool Error[4];
|
|
// gCncBd->getAxisInfo(Position, Direction, Error);
|
|
//g_HSIExt.m_AxisRefMarkOffset[HAL_AXIS_Q] = Position[HAL_AXIS_Q];
|
|
}
|
|
}
|
|
}
|
|
return retVal;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
HAL_STATUS HAL_GetCustomCalibrationTypeInfo(HAL_CALIBRATE_TYPE /*Type*/, TCHAR * /*Name*/)
|
|
{
|
|
HAL_STATUS Status = HAL_STATUS_NORMAL;
|
|
|
|
return Status;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
HAL_STATUS HAL_EventResponse(UINT /*EventCallbackID*/, HAL_EVENT_RESPONSE_TYPE /*ResponseType*/)
|
|
{
|
|
HAL_STATUS Status = HAL_STATUS_NORMAL;
|
|
|
|
return Status;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
HAL_STATUS HAL_GetCustomMessage(HAL_CUSTOM_MESSAGE_TYPE Msg,TCHAR *Message)
|
|
{
|
|
HAL_STATUS Status = HAL_STATUS_NORMAL;
|
|
|
|
if(g_HSIExt.m_HomeManual)
|
|
{
|
|
CString MessageStr;
|
|
switch(Msg)
|
|
{
|
|
case HAL_CUSTOM_MESSAGE_HOME_MACHINE:
|
|
if(g_HSIExt.m_HomeToLimitSwitch)
|
|
MessageStr.LoadString(IDS_HOME_MANUAL_MACHINE_LIMIT);
|
|
else
|
|
MessageStr.LoadString(IDS_HOME_MANUAL_MACHINE_REF);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
wcsncpy_s(Message, HAL_MaxStringLength+1, MessageStr, HAL_MaxStringLength);
|
|
}
|
|
|
|
return Status;
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// For USB, we will initialize this
|
|
// If it is not initialized, we will initialize the Mv_USB.
|
|
// If it is already initialized, we reply with true;
|
|
bool IsBoardPresent()
|
|
{
|
|
return (g_pMv_Proto?true:false);
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
bool IsControllerPresent()
|
|
{
|
|
// return (IsBoardPresent() && gCncBd && gCncBd->isCncAllowed());
|
|
return true;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
bool IsZoomMoving(void)
|
|
{
|
|
long Zoom1=0,Zoom2=-1;
|
|
|
|
g_pHSI->Optics.GetScalePosition(Zoom1);
|
|
Sleep(50);
|
|
g_pHSI->Optics.GetScalePosition(Zoom2);
|
|
|
|
if(labs(Zoom1-Zoom2)>2)
|
|
return true;
|
|
else
|
|
return false;
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
bool IsRotaryEnabled(void)
|
|
{
|
|
ASSERT(g_pHSI->Event);
|
|
|
|
UINT EventCallbackID;
|
|
TCHAR EventData[HAL_MaxStringLength+1];
|
|
wcsncpy_s(EventData,HAL_MaxStringLength+1, _T(""), HAL_MaxStringLength);
|
|
HAL_EVENT_RESPONSE_TYPE EventResponse=g_pHSI->Event(HAL_EVENT_FUNCTION, HAL_EVENT_IS_ROTAB_ENABLED, EventData, EventCallbackID);
|
|
return EventResponse==HAL_EVENT_RESPONSE_YES;
|
|
};
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
void HAL_SendDebug(LPCTSTR format, ...)
|
|
{
|
|
va_list list;
|
|
va_start(list, format);
|
|
// debug.SendAndFlush(format, list);
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
double TimeInMsecs(void)
|
|
{
|
|
double Msecs;
|
|
|
|
LARGE_INTEGER HPCounterTicksPerSecond;
|
|
BOOL HasHPCounter = QueryPerformanceFrequency(&HPCounterTicksPerSecond);
|
|
|
|
if (HasHPCounter == TRUE)
|
|
{
|
|
// Use high resolution clock.
|
|
double HPCounterTicksPerMsec = (DWORD)((double) HPCounterTicksPerSecond.QuadPart / 1000.0);
|
|
LARGE_INTEGER HPTicks;
|
|
QueryPerformanceCounter(&HPTicks);
|
|
Msecs = ((double)HPTicks.QuadPart / HPCounterTicksPerMsec);
|
|
}
|
|
else
|
|
{
|
|
// Use clock with less resolution.
|
|
Msecs = GetTickCount();
|
|
}
|
|
return Msecs;
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|