diff --git a/Drivers/ScanLabSMC/ACT/LibMCDriver_ScanLabSMC.xml b/Drivers/ScanLabSMC/ACT/LibMCDriver_ScanLabSMC.xml
index e2ff7582..7e92d2a9 100644
--- a/Drivers/ScanLabSMC/ACT/LibMCDriver_ScanLabSMC.xml
+++ b/Drivers/ScanLabSMC/ACT/LibMCDriver_ScanLabSMC.xml
@@ -100,6 +100,9 @@
+
+
+
@@ -140,6 +143,7 @@
+
@@ -504,6 +508,10 @@ Custom implementation
+
+
+
+
@@ -513,6 +521,10 @@ Custom implementation
+
+
+
+
diff --git a/Drivers/ScanLabSMC/Headers/CppDynamic/libmcdriver_scanlabsmc_dynamic.h b/Drivers/ScanLabSMC/Headers/CppDynamic/libmcdriver_scanlabsmc_dynamic.h
index d0bfcde4..1bf4e6ee 100644
--- a/Drivers/ScanLabSMC/Headers/CppDynamic/libmcdriver_scanlabsmc_dynamic.h
+++ b/Drivers/ScanLabSMC/Headers/CppDynamic/libmcdriver_scanlabsmc_dynamic.h
@@ -626,6 +626,15 @@ typedef LibMCDriver_ScanLabSMCResult (*PLibMCDriver_ScanLabSMCSMCContext_DrawLay
*/
typedef LibMCDriver_ScanLabSMCResult (*PLibMCDriver_ScanLabSMCDriver_ScanLabSMC_SetDLLResourcesPtr) (LibMCDriver_ScanLabSMC_Driver_ScanLabSMC pDriver_ScanLabSMC, const char * pSMCDLLResourceName, const char * pRTCDLLResourceName);
+/**
+* Sets the default resource name of the RTC Service DLL. Overrides custom resource data if set before.
+*
+* @param[in] pDriver_ScanLabSMC - Driver_ScanLabSMC instance.
+* @param[in] pRTCServiceDLLResourceName - Resource name of RTC Service DLL
+* @return error code or 0 (success)
+*/
+typedef LibMCDriver_ScanLabSMCResult (*PLibMCDriver_ScanLabSMCDriver_ScanLabSMC_SetRTCServiceDLLResourceNamePtr) (LibMCDriver_ScanLabSMC_Driver_ScanLabSMC pDriver_ScanLabSMC, const char * pRTCServiceDLLResourceName);
+
/**
* Sets the default resource name of auxiliary resource DLLs. Overrides custom resource data if set before.
*
@@ -647,6 +656,16 @@ typedef LibMCDriver_ScanLabSMCResult (*PLibMCDriver_ScanLabSMCDriver_ScanLabSMC_
*/
typedef LibMCDriver_ScanLabSMCResult (*PLibMCDriver_ScanLabSMCDriver_ScanLabSMC_SetCustomDLLDataPtr) (LibMCDriver_ScanLabSMC_Driver_ScanLabSMC pDriver_ScanLabSMC, LibMCDriver_ScanLabSMC_uint64 nSMCDLLResourceDataBufferSize, const LibMCDriver_ScanLabSMC_uint8 * pSMCDLLResourceDataBuffer, LibMCDriver_ScanLabSMC_uint64 nRTCDLLResourceDataBufferSize, const LibMCDriver_ScanLabSMC_uint8 * pRTCDLLResourceDataBuffer);
+/**
+* Sets custom binaries for the needed RTC Service DLLs. Overrides custom resource data if set before.
+*
+* @param[in] pDriver_ScanLabSMC - Driver_ScanLabSMC instance.
+* @param[in] nRTCServiceDLLResourceDataBufferSize - Number of elements in buffer
+* @param[in] pRTCServiceDLLResourceDataBuffer - uint8 buffer of Resource data of RTC Service DLL
+* @return error code or 0 (success)
+*/
+typedef LibMCDriver_ScanLabSMCResult (*PLibMCDriver_ScanLabSMCDriver_ScanLabSMC_SetRTCServiceDLLResourceDataPtr) (LibMCDriver_ScanLabSMC_Driver_ScanLabSMC pDriver_ScanLabSMC, LibMCDriver_ScanLabSMC_uint64 nRTCServiceDLLResourceDataBufferSize, const LibMCDriver_ScanLabSMC_uint8 * pRTCServiceDLLResourceDataBuffer);
+
/**
* Sets the custom binary for auxiliary resource DLLs. Overrides custom resource data if set before.
*
@@ -856,8 +875,10 @@ typedef struct {
PLibMCDriver_ScanLabSMCSMCContext_GetUnfinishedJobPtr m_SMCContext_GetUnfinishedJob;
PLibMCDriver_ScanLabSMCSMCContext_DrawLayerPtr m_SMCContext_DrawLayer;
PLibMCDriver_ScanLabSMCDriver_ScanLabSMC_SetDLLResourcesPtr m_Driver_ScanLabSMC_SetDLLResources;
+ PLibMCDriver_ScanLabSMCDriver_ScanLabSMC_SetRTCServiceDLLResourceNamePtr m_Driver_ScanLabSMC_SetRTCServiceDLLResourceName;
PLibMCDriver_ScanLabSMCDriver_ScanLabSMC_SetXercesDLLResourcePtr m_Driver_ScanLabSMC_SetXercesDLLResource;
PLibMCDriver_ScanLabSMCDriver_ScanLabSMC_SetCustomDLLDataPtr m_Driver_ScanLabSMC_SetCustomDLLData;
+ PLibMCDriver_ScanLabSMCDriver_ScanLabSMC_SetRTCServiceDLLResourceDataPtr m_Driver_ScanLabSMC_SetRTCServiceDLLResourceData;
PLibMCDriver_ScanLabSMCDriver_ScanLabSMC_SetCustomXercesDLLDataPtr m_Driver_ScanLabSMC_SetCustomXercesDLLData;
PLibMCDriver_ScanLabSMCDriver_ScanLabSMC_LoadSDKPtr m_Driver_ScanLabSMC_LoadSDK;
PLibMCDriver_ScanLabSMCDriver_ScanLabSMC_CreateContextPtr m_Driver_ScanLabSMC_CreateContext;
diff --git a/Drivers/ScanLabSMC/Headers/CppDynamic/libmcdriver_scanlabsmc_dynamic.hpp b/Drivers/ScanLabSMC/Headers/CppDynamic/libmcdriver_scanlabsmc_dynamic.hpp
index 0f0ed0f4..67935366 100644
--- a/Drivers/ScanLabSMC/Headers/CppDynamic/libmcdriver_scanlabsmc_dynamic.hpp
+++ b/Drivers/ScanLabSMC/Headers/CppDynamic/libmcdriver_scanlabsmc_dynamic.hpp
@@ -236,6 +236,9 @@ class ELibMCDriver_ScanLabSMCException : public std::exception {
case LIBMCDRIVER_SCANLABSMC_ERROR_LINEARPOWERVALUESAREINCOMPLETE: return "LINEARPOWERVALUESAREINCOMPLETE";
case LIBMCDRIVER_SCANLABSMC_ERROR_NONLINEARPOWERVALUESAREINCOMPLETE: return "NONLINEARPOWERVALUESAREINCOMPLETE";
case LIBMCDRIVER_SCANLABSMC_ERROR_INTERPOLATIONDATAISNOTINCREASING: return "INTERPOLATIONDATAISNOTINCREASING";
+ case LIBMCDRIVER_SCANLABSMC_ERROR_EMPTYRTCSERVICEDLLRESOURCENAME: return "EMPTYRTCSERVICEDLLRESOURCENAME";
+ case LIBMCDRIVER_SCANLABSMC_ERROR_RTCSERVICERESOURCENOTFOUND: return "RTCSERVICERESOURCENOTFOUND";
+ case LIBMCDRIVER_SCANLABSMC_ERROR_EMPTYRTCSERVICEDLLRESOURCEDATA: return "EMPTYRTCSERVICEDLLRESOURCEDATA";
}
return "UNKNOWN";
}
@@ -302,6 +305,9 @@ class ELibMCDriver_ScanLabSMCException : public std::exception {
case LIBMCDRIVER_SCANLABSMC_ERROR_LINEARPOWERVALUESAREINCOMPLETE: return "Linear power values are incomplete.";
case LIBMCDRIVER_SCANLABSMC_ERROR_NONLINEARPOWERVALUESAREINCOMPLETE: return "Nonlinear power values are incomplete.";
case LIBMCDRIVER_SCANLABSMC_ERROR_INTERPOLATIONDATAISNOTINCREASING: return "Interpolation data is not increasing.";
+ case LIBMCDRIVER_SCANLABSMC_ERROR_EMPTYRTCSERVICEDLLRESOURCENAME: return "Empty RTC Service DLL Resource Name.";
+ case LIBMCDRIVER_SCANLABSMC_ERROR_RTCSERVICERESOURCENOTFOUND: return "RTC Service Resource not found.";
+ case LIBMCDRIVER_SCANLABSMC_ERROR_EMPTYRTCSERVICEDLLRESOURCEDATA: return "Empty RTC Service DLL Resource Data.";
}
return "unknown error";
}
@@ -623,8 +629,10 @@ class CDriver_ScanLabSMC : public CDriver {
}
inline void SetDLLResources(const std::string & sSMCDLLResourceName, const std::string & sRTCDLLResourceName);
+ inline void SetRTCServiceDLLResourceName(const std::string & sRTCServiceDLLResourceName);
inline void SetXercesDLLResource(const std::string & sXercesDLLResourceName);
inline void SetCustomDLLData(const CInputVector & SMCDLLResourceDataBuffer, const CInputVector & RTCDLLResourceDataBuffer);
+ inline void SetRTCServiceDLLResourceData(const CInputVector & RTCServiceDLLResourceDataBuffer);
inline void SetCustomXercesDLLData(const CInputVector & XercesDLLResourceDataBuffer);
inline void LoadSDK();
inline PSMCContext CreateContext(const std::string & sContextName, classParam pSMCConfiguration);
@@ -813,8 +821,10 @@ class CDriver_ScanLabSMC : public CDriver {
pWrapperTable->m_SMCContext_GetUnfinishedJob = nullptr;
pWrapperTable->m_SMCContext_DrawLayer = nullptr;
pWrapperTable->m_Driver_ScanLabSMC_SetDLLResources = nullptr;
+ pWrapperTable->m_Driver_ScanLabSMC_SetRTCServiceDLLResourceName = nullptr;
pWrapperTable->m_Driver_ScanLabSMC_SetXercesDLLResource = nullptr;
pWrapperTable->m_Driver_ScanLabSMC_SetCustomDLLData = nullptr;
+ pWrapperTable->m_Driver_ScanLabSMC_SetRTCServiceDLLResourceData = nullptr;
pWrapperTable->m_Driver_ScanLabSMC_SetCustomXercesDLLData = nullptr;
pWrapperTable->m_Driver_ScanLabSMC_LoadSDK = nullptr;
pWrapperTable->m_Driver_ScanLabSMC_CreateContext = nullptr;
@@ -1384,6 +1394,15 @@ class CDriver_ScanLabSMC : public CDriver {
if (pWrapperTable->m_Driver_ScanLabSMC_SetDLLResources == nullptr)
return LIBMCDRIVER_SCANLABSMC_ERROR_COULDNOTFINDLIBRARYEXPORT;
+ #ifdef _WIN32
+ pWrapperTable->m_Driver_ScanLabSMC_SetRTCServiceDLLResourceName = (PLibMCDriver_ScanLabSMCDriver_ScanLabSMC_SetRTCServiceDLLResourceNamePtr) GetProcAddress(hLibrary, "libmcdriver_scanlabsmc_driver_scanlabsmc_setrtcservicedllresourcename");
+ #else // _WIN32
+ pWrapperTable->m_Driver_ScanLabSMC_SetRTCServiceDLLResourceName = (PLibMCDriver_ScanLabSMCDriver_ScanLabSMC_SetRTCServiceDLLResourceNamePtr) dlsym(hLibrary, "libmcdriver_scanlabsmc_driver_scanlabsmc_setrtcservicedllresourcename");
+ dlerror();
+ #endif // _WIN32
+ if (pWrapperTable->m_Driver_ScanLabSMC_SetRTCServiceDLLResourceName == nullptr)
+ return LIBMCDRIVER_SCANLABSMC_ERROR_COULDNOTFINDLIBRARYEXPORT;
+
#ifdef _WIN32
pWrapperTable->m_Driver_ScanLabSMC_SetXercesDLLResource = (PLibMCDriver_ScanLabSMCDriver_ScanLabSMC_SetXercesDLLResourcePtr) GetProcAddress(hLibrary, "libmcdriver_scanlabsmc_driver_scanlabsmc_setxercesdllresource");
#else // _WIN32
@@ -1402,6 +1421,15 @@ class CDriver_ScanLabSMC : public CDriver {
if (pWrapperTable->m_Driver_ScanLabSMC_SetCustomDLLData == nullptr)
return LIBMCDRIVER_SCANLABSMC_ERROR_COULDNOTFINDLIBRARYEXPORT;
+ #ifdef _WIN32
+ pWrapperTable->m_Driver_ScanLabSMC_SetRTCServiceDLLResourceData = (PLibMCDriver_ScanLabSMCDriver_ScanLabSMC_SetRTCServiceDLLResourceDataPtr) GetProcAddress(hLibrary, "libmcdriver_scanlabsmc_driver_scanlabsmc_setrtcservicedllresourcedata");
+ #else // _WIN32
+ pWrapperTable->m_Driver_ScanLabSMC_SetRTCServiceDLLResourceData = (PLibMCDriver_ScanLabSMCDriver_ScanLabSMC_SetRTCServiceDLLResourceDataPtr) dlsym(hLibrary, "libmcdriver_scanlabsmc_driver_scanlabsmc_setrtcservicedllresourcedata");
+ dlerror();
+ #endif // _WIN32
+ if (pWrapperTable->m_Driver_ScanLabSMC_SetRTCServiceDLLResourceData == nullptr)
+ return LIBMCDRIVER_SCANLABSMC_ERROR_COULDNOTFINDLIBRARYEXPORT;
+
#ifdef _WIN32
pWrapperTable->m_Driver_ScanLabSMC_SetCustomXercesDLLData = (PLibMCDriver_ScanLabSMCDriver_ScanLabSMC_SetCustomXercesDLLDataPtr) GetProcAddress(hLibrary, "libmcdriver_scanlabsmc_driver_scanlabsmc_setcustomxercesdlldata");
#else // _WIN32
@@ -1777,6 +1805,10 @@ class CDriver_ScanLabSMC : public CDriver {
if ( (eLookupError != 0) || (pWrapperTable->m_Driver_ScanLabSMC_SetDLLResources == nullptr) )
return LIBMCDRIVER_SCANLABSMC_ERROR_COULDNOTFINDLIBRARYEXPORT;
+ eLookupError = (*pLookup)("libmcdriver_scanlabsmc_driver_scanlabsmc_setrtcservicedllresourcename", (void**)&(pWrapperTable->m_Driver_ScanLabSMC_SetRTCServiceDLLResourceName));
+ if ( (eLookupError != 0) || (pWrapperTable->m_Driver_ScanLabSMC_SetRTCServiceDLLResourceName == nullptr) )
+ return LIBMCDRIVER_SCANLABSMC_ERROR_COULDNOTFINDLIBRARYEXPORT;
+
eLookupError = (*pLookup)("libmcdriver_scanlabsmc_driver_scanlabsmc_setxercesdllresource", (void**)&(pWrapperTable->m_Driver_ScanLabSMC_SetXercesDLLResource));
if ( (eLookupError != 0) || (pWrapperTable->m_Driver_ScanLabSMC_SetXercesDLLResource == nullptr) )
return LIBMCDRIVER_SCANLABSMC_ERROR_COULDNOTFINDLIBRARYEXPORT;
@@ -1785,6 +1817,10 @@ class CDriver_ScanLabSMC : public CDriver {
if ( (eLookupError != 0) || (pWrapperTable->m_Driver_ScanLabSMC_SetCustomDLLData == nullptr) )
return LIBMCDRIVER_SCANLABSMC_ERROR_COULDNOTFINDLIBRARYEXPORT;
+ eLookupError = (*pLookup)("libmcdriver_scanlabsmc_driver_scanlabsmc_setrtcservicedllresourcedata", (void**)&(pWrapperTable->m_Driver_ScanLabSMC_SetRTCServiceDLLResourceData));
+ if ( (eLookupError != 0) || (pWrapperTable->m_Driver_ScanLabSMC_SetRTCServiceDLLResourceData == nullptr) )
+ return LIBMCDRIVER_SCANLABSMC_ERROR_COULDNOTFINDLIBRARYEXPORT;
+
eLookupError = (*pLookup)("libmcdriver_scanlabsmc_driver_scanlabsmc_setcustomxercesdlldata", (void**)&(pWrapperTable->m_Driver_ScanLabSMC_SetCustomXercesDLLData));
if ( (eLookupError != 0) || (pWrapperTable->m_Driver_ScanLabSMC_SetCustomXercesDLLData == nullptr) )
return LIBMCDRIVER_SCANLABSMC_ERROR_COULDNOTFINDLIBRARYEXPORT;
@@ -2514,6 +2550,15 @@ class CDriver_ScanLabSMC : public CDriver {
CheckError(m_pWrapper->m_WrapperTable.m_Driver_ScanLabSMC_SetDLLResources(m_pHandle, sSMCDLLResourceName.c_str(), sRTCDLLResourceName.c_str()));
}
+ /**
+ * CDriver_ScanLabSMC::SetRTCServiceDLLResourceName - Sets the default resource name of the RTC Service DLL. Overrides custom resource data if set before.
+ * @param[in] sRTCServiceDLLResourceName - Resource name of RTC Service DLL
+ */
+ void CDriver_ScanLabSMC::SetRTCServiceDLLResourceName(const std::string & sRTCServiceDLLResourceName)
+ {
+ CheckError(m_pWrapper->m_WrapperTable.m_Driver_ScanLabSMC_SetRTCServiceDLLResourceName(m_pHandle, sRTCServiceDLLResourceName.c_str()));
+ }
+
/**
* CDriver_ScanLabSMC::SetXercesDLLResource - Sets the default resource name of auxiliary resource DLLs. Overrides custom resource data if set before.
* @param[in] sXercesDLLResourceName - Resource name of the Xerces dependency DLL
@@ -2533,6 +2578,15 @@ class CDriver_ScanLabSMC : public CDriver {
CheckError(m_pWrapper->m_WrapperTable.m_Driver_ScanLabSMC_SetCustomDLLData(m_pHandle, (LibMCDriver_ScanLabSMC_uint64)SMCDLLResourceDataBuffer.size(), SMCDLLResourceDataBuffer.data(), (LibMCDriver_ScanLabSMC_uint64)RTCDLLResourceDataBuffer.size(), RTCDLLResourceDataBuffer.data()));
}
+ /**
+ * CDriver_ScanLabSMC::SetRTCServiceDLLResourceData - Sets custom binaries for the needed RTC Service DLLs. Overrides custom resource data if set before.
+ * @param[in] RTCServiceDLLResourceDataBuffer - Resource data of RTC Service DLL
+ */
+ void CDriver_ScanLabSMC::SetRTCServiceDLLResourceData(const CInputVector & RTCServiceDLLResourceDataBuffer)
+ {
+ CheckError(m_pWrapper->m_WrapperTable.m_Driver_ScanLabSMC_SetRTCServiceDLLResourceData(m_pHandle, (LibMCDriver_ScanLabSMC_uint64)RTCServiceDLLResourceDataBuffer.size(), RTCServiceDLLResourceDataBuffer.data()));
+ }
+
/**
* CDriver_ScanLabSMC::SetCustomXercesDLLData - Sets the custom binary for auxiliary resource DLLs. Overrides custom resource data if set before.
* @param[in] XercesDLLResourceDataBuffer - Resource data of the Xerces dependency DLL
diff --git a/Drivers/ScanLabSMC/Headers/CppDynamic/libmcdriver_scanlabsmc_types.hpp b/Drivers/ScanLabSMC/Headers/CppDynamic/libmcdriver_scanlabsmc_types.hpp
index 0cab9de3..182f1139 100644
--- a/Drivers/ScanLabSMC/Headers/CppDynamic/libmcdriver_scanlabsmc_types.hpp
+++ b/Drivers/ScanLabSMC/Headers/CppDynamic/libmcdriver_scanlabsmc_types.hpp
@@ -154,6 +154,9 @@ typedef void * LibMCDriver_ScanLabSMC_pvoid;
#define LIBMCDRIVER_SCANLABSMC_ERROR_LINEARPOWERVALUESAREINCOMPLETE 1046 /** Linear power values are incomplete. */
#define LIBMCDRIVER_SCANLABSMC_ERROR_NONLINEARPOWERVALUESAREINCOMPLETE 1047 /** Nonlinear power values are incomplete. */
#define LIBMCDRIVER_SCANLABSMC_ERROR_INTERPOLATIONDATAISNOTINCREASING 1048 /** Interpolation data is not increasing. */
+#define LIBMCDRIVER_SCANLABSMC_ERROR_EMPTYRTCSERVICEDLLRESOURCENAME 1049 /** Empty RTC Service DLL Resource Name. */
+#define LIBMCDRIVER_SCANLABSMC_ERROR_RTCSERVICERESOURCENOTFOUND 1050 /** RTC Service Resource not found. */
+#define LIBMCDRIVER_SCANLABSMC_ERROR_EMPTYRTCSERVICEDLLRESOURCEDATA 1051 /** Empty RTC Service DLL Resource Data. */
/*************************************************************************************************************************
Error strings for LibMCDriver_ScanLabSMC
@@ -220,6 +223,9 @@ inline const char * LIBMCDRIVER_SCANLABSMC_GETERRORSTRING (LibMCDriver_ScanLabSM
case LIBMCDRIVER_SCANLABSMC_ERROR_LINEARPOWERVALUESAREINCOMPLETE: return "Linear power values are incomplete.";
case LIBMCDRIVER_SCANLABSMC_ERROR_NONLINEARPOWERVALUESAREINCOMPLETE: return "Nonlinear power values are incomplete.";
case LIBMCDRIVER_SCANLABSMC_ERROR_INTERPOLATIONDATAISNOTINCREASING: return "Interpolation data is not increasing.";
+ case LIBMCDRIVER_SCANLABSMC_ERROR_EMPTYRTCSERVICEDLLRESOURCENAME: return "Empty RTC Service DLL Resource Name.";
+ case LIBMCDRIVER_SCANLABSMC_ERROR_RTCSERVICERESOURCENOTFOUND: return "RTC Service Resource not found.";
+ case LIBMCDRIVER_SCANLABSMC_ERROR_EMPTYRTCSERVICEDLLRESOURCEDATA: return "Empty RTC Service DLL Resource Data.";
default: return "unknown error";
}
}
@@ -264,7 +270,8 @@ namespace LibMCDriver_ScanLabSMC {
enum class eSMCConfigVersion : LibMCDriver_ScanLabSMC_int32 {
Unknown = 0,
Version_0_8 = 8,
- Version_0_9 = 9
+ Version_0_9 = 9,
+ Version_1_0 = 10
};
enum class eJobCharacteristic : LibMCDriver_ScanLabSMC_int32 {
diff --git a/Drivers/ScanLabSMC/Implementation/libmcdriver_scanlabsmc.cpp b/Drivers/ScanLabSMC/Implementation/libmcdriver_scanlabsmc.cpp
index 51fdbf80..de4a02a3 100644
--- a/Drivers/ScanLabSMC/Implementation/libmcdriver_scanlabsmc.cpp
+++ b/Drivers/ScanLabSMC/Implementation/libmcdriver_scanlabsmc.cpp
@@ -84,6 +84,9 @@ IDriver * CWrapper::CreateDriver(const std::string & sName, const std::string &
if (sType == "scanlab-smc-0.9")
return new CDriver_ScanLabSMC(sName, sType, pDriverEnvironment);
+ if (sType == "scanlab-smc-1.0")
+ return new CDriver_ScanLabSMC(sName, sType, pDriverEnvironment);
+
if (sType == "scanlab-smc-latest")
return new CDriver_ScanLabSMC(sName, sType, pDriverEnvironment);
diff --git a/Drivers/ScanLabSMC/Implementation/libmcdriver_scanlabsmc_driver_scanlabsmc.cpp b/Drivers/ScanLabSMC/Implementation/libmcdriver_scanlabsmc_driver_scanlabsmc.cpp
index df303871..e50bdf23 100644
--- a/Drivers/ScanLabSMC/Implementation/libmcdriver_scanlabsmc_driver_scanlabsmc.cpp
+++ b/Drivers/ScanLabSMC/Implementation/libmcdriver_scanlabsmc_driver_scanlabsmc.cpp
@@ -43,6 +43,7 @@ Abstract: This is a stub class definition of CDriver_ScanLabSMC
#define SCANLABSMC_DEFAULT_SMCDLLRESOURCENAME "scanmotioncontrol_x64"
#define SCANLABSMC_DEFAULT_RTCDLLRESOURCENAME "rtc6dllx64"
+#define SCANLABSMC_DEFAULT_RTCSERVICEDLLRESOURCENAME "RtcService_x64"
#define SCANLABSMC_DEFAULT_XERCESDLLRESOURCENAME "xerces-c_3_2"
using namespace LibMCDriver_ScanLabSMC::Impl;
@@ -104,7 +105,31 @@ void CDriver_ScanLabSMC::SetDLLResources(const std::string& sSMCDLLResourceName,
if (m_RTCDLLResourceData.empty())
throw ELibMCDriver_ScanLabSMCInterfaceException(LIBMCDRIVER_SCANLABSMC_ERROR_COULDNOTSTORERTCSDK);
+}
+
+void CDriver_ScanLabSMC::SetRTCServiceDLLResourceName(const std::string& sRTCServiceDLLResourceName)
+{
+ if (m_pSDK.get() != nullptr)
+ throw ELibMCDriver_ScanLabSMCInterfaceException(LIBMCDRIVER_SCANLABSMC_ERROR_SDKALREADYLOADED);
+
+ m_RTCServiceDLLResourceData.resize(0);
+
+ if (sRTCServiceDLLResourceName.empty())
+ throw ELibMCDriver_ScanLabSMCInterfaceException(LIBMCDRIVER_SCANLABSMC_ERROR_EMPTYRTCSERVICEDLLRESOURCENAME);
+ if (m_pDriverEnvironment->MachineHasResourceData(sRTCServiceDLLResourceName)) {
+ m_pDriverEnvironment->RetrieveMachineResourceData(sRTCServiceDLLResourceName, m_RTCServiceDLLResourceData);
+ }
+ else {
+ if (m_pDriverEnvironment->DriverHasResourceData(sRTCServiceDLLResourceName)) {
+ m_pDriverEnvironment->RetrieveDriverResourceData(sRTCServiceDLLResourceName, m_RTCServiceDLLResourceData);
+ }
+ else
+ throw ELibMCDriver_ScanLabSMCInterfaceException(LIBMCDRIVER_SCANLABSMC_ERROR_RTCSERVICERESOURCENOTFOUND, "RTC SDK Resource not found: " + sRTCServiceDLLResourceName);
+ }
+
+ if (m_RTCServiceDLLResourceData.empty())
+ throw ELibMCDriver_ScanLabSMCInterfaceException(LIBMCDRIVER_SCANLABSMC_ERROR_RTCSERVICERESOURCENOTFOUND);
}
void CDriver_ScanLabSMC::SetXercesDLLResource(const std::string& sXercesDLLResourceName)
@@ -164,7 +189,27 @@ void CDriver_ScanLabSMC::SetCustomDLLData(const LibMCDriver_ScanLabSMC_uint64 nS
m_RTCDLLResourceData.at(nRTCIndex) = *pRTCSrc;
pRTCSrc++;
}
+}
+void CDriver_ScanLabSMC::SetRTCServiceDLLResourceData(const LibMCDriver_ScanLabSMC_uint64 nRTCServiceDLLResourceDataBufferSize, const LibMCDriver_ScanLabSMC_uint8* pRTCServiceDLLResourceDataBuffer)
+{
+ if (m_pSDK.get() != nullptr)
+ throw ELibMCDriver_ScanLabSMCInterfaceException(LIBMCDRIVER_SCANLABSMC_ERROR_SDKALREADYLOADED);
+
+ m_RTCServiceDLLResourceData.resize(0);
+
+ if (nRTCServiceDLLResourceDataBufferSize == 0)
+ throw ELibMCDriver_ScanLabSMCInterfaceException(LIBMCDRIVER_SCANLABSMC_ERROR_EMPTYRTCSERVICEDLLRESOURCEDATA);
+
+ if (pRTCServiceDLLResourceDataBuffer == nullptr)
+ throw ELibMCDriver_ScanLabSMCInterfaceException(LIBMCDRIVER_SCANLABSMC_ERROR_INVALIDPARAM);
+
+ m_RTCServiceDLLResourceData.resize(nRTCServiceDLLResourceDataBufferSize);
+ auto pRTCSrvSrc = pRTCServiceDLLResourceDataBuffer;
+ for (size_t nRTCSrvIndex = 0; nRTCSrvIndex < nRTCServiceDLLResourceDataBufferSize; nRTCSrvIndex++) {
+ m_RTCServiceDLLResourceData.at(nRTCSrvIndex) = *pRTCSrvSrc;
+ pRTCSrvSrc++;
+ }
}
void CDriver_ScanLabSMC::SetCustomXercesDLLData(const LibMCDriver_ScanLabSMC_uint64 nXercesDLLResourceDataBufferSize, const LibMCDriver_ScanLabSMC_uint8* pXercesDLLResourceDataBuffer)
@@ -200,11 +245,19 @@ void CDriver_ScanLabSMC::LoadSDK()
if (m_SMCDLLResourceData.empty() || m_RTCDLLResourceData.empty())
SetDLLResources(SCANLABSMC_DEFAULT_SMCDLLRESOURCENAME, SCANLABSMC_DEFAULT_RTCDLLRESOURCENAME);
+
+ if ((m_sType == "scanlab-smc-1.0" || m_sType == "scanlab-smc-latest") && m_RTCServiceDLLResourceData.empty())
+ SetRTCServiceDLLResourceName(SCANLABSMC_DEFAULT_RTCSERVICEDLLRESOURCENAME);
+
if (m_XercesDLLResourceData.empty())
SetXercesDLLResource(SCANLABSMC_DEFAULT_XERCESDLLRESOURCENAME);
m_pSMCDLL = m_pDLLDirectory->StoreCustomData("SCANmotionControl_x64.dll", m_SMCDLLResourceData);
m_pRTCDLL = m_pDLLDirectory->StoreCustomData("RTC6DLLx64.dll", m_RTCDLLResourceData);
+
+ if (m_sType == "scanlab-smc-1.0" || m_sType == "scanlab-smc-latest")
+ m_pRTCServiceDLL = m_pDLLDirectory->StoreCustomData("RtcService_x64.dll", m_RTCServiceDLLResourceData);
+
m_pXercesDLL = m_pDLLDirectory->StoreCustomData("xerces-c_3_2.dll", m_XercesDLLResourceData);
m_pSDK = std::make_shared(m_pSMCDLL->GetAbsoluteFileName (), m_pDLLDirectory->GetAbsoluteFilePath ());
@@ -212,6 +265,7 @@ void CDriver_ScanLabSMC::LoadSDK()
// Free up resource data buffers
m_SMCDLLResourceData.resize(0);
m_RTCDLLResourceData.resize(0);
+ m_RTCServiceDLLResourceData.resize(0);
m_XercesDLLResourceData.resize(0);
auto smcVersionInfo = m_pSDK->slsc_cfg_get_scanmotioncontrol_version();
diff --git a/Drivers/ScanLabSMC/Implementation/libmcdriver_scanlabsmc_driver_scanlabsmc.hpp b/Drivers/ScanLabSMC/Implementation/libmcdriver_scanlabsmc_driver_scanlabsmc.hpp
index a4708844..141bc835 100644
--- a/Drivers/ScanLabSMC/Implementation/libmcdriver_scanlabsmc_driver_scanlabsmc.hpp
+++ b/Drivers/ScanLabSMC/Implementation/libmcdriver_scanlabsmc_driver_scanlabsmc.hpp
@@ -65,12 +65,14 @@ class CDriver_ScanLabSMC : public virtual IDriver_ScanLabSMC, public virtual CDr
std::vector m_SMCDLLResourceData;
std::vector m_RTCDLLResourceData;
+ std::vector m_RTCServiceDLLResourceData;
std::vector m_XercesDLLResourceData;
LibMCEnv::PDriverEnvironment m_pDriverEnvironment;
LibMCEnv::PWorkingDirectory m_pDLLDirectory;
LibMCEnv::PWorkingFile m_pSMCDLL;
LibMCEnv::PWorkingFile m_pRTCDLL;
+ LibMCEnv::PWorkingFile m_pRTCServiceDLL;
LibMCEnv::PWorkingFile m_pXercesDLL;
PScanLabSMCSDK m_pSDK;
@@ -85,10 +87,14 @@ class CDriver_ScanLabSMC : public virtual IDriver_ScanLabSMC, public virtual CDr
void SetDLLResources(const std::string& sSMCDLLResourceName, const std::string& sRTCDLLResourceName) override;
+ void SetRTCServiceDLLResourceName(const std::string& sRTCServiceDLLResourceName) override;
+
void SetXercesDLLResource(const std::string& sXercesDLLResourceName) override;
- void SetCustomDLLData(const LibMCDriver_ScanLabSMC_uint64 nSMCDLLResourceDataBufferSize, const LibMCDriver_ScanLabSMC_uint8* pSMCDLLResourceDataBuffer, const LibMCDriver_ScanLabSMC_uint64 nRTCDLLResourceDataBufferSize, const LibMCDriver_ScanLabSMC_uint8* pRTCDLLResourceDataBuffer) override;
+ void SetCustomDLLData(const LibMCDriver_ScanLabSMC_uint64 nSMCDLLResourceDataBufferSize, const LibMCDriver_ScanLabSMC_uint8* pSMCDLLResourceDataBuffer, const LibMCDriver_ScanLabSMC_uint64 nRTCDLLResourceDataBufferSize, const LibMCDriver_ScanLabSMC_uint8* pRTCDLLResourceDataBuffer) override;
+ void SetRTCServiceDLLResourceData(const LibMCDriver_ScanLabSMC_uint64 nRTCServiceDLLResourceDataBufferSize, const LibMCDriver_ScanLabSMC_uint8* pRTCServiceDLLResourceDataBuffer) override;
+
void SetCustomXercesDLLData(const LibMCDriver_ScanLabSMC_uint64 nXercesDLLResourceDataBufferSize, const LibMCDriver_ScanLabSMC_uint8* pXercesDLLResourceDataBuffer) override;
void LoadSDK() override;
diff --git a/Drivers/ScanLabSMC/Implementation/libmcdriver_scanlabsmc_smcconfiguration.cpp b/Drivers/ScanLabSMC/Implementation/libmcdriver_scanlabsmc_smcconfiguration.cpp
index 57c1e7a0..1bdb9df4 100644
--- a/Drivers/ScanLabSMC/Implementation/libmcdriver_scanlabsmc_smcconfiguration.cpp
+++ b/Drivers/ScanLabSMC/Implementation/libmcdriver_scanlabsmc_smcconfiguration.cpp
@@ -325,6 +325,7 @@ std::string CSMCConfiguration::buildConfigurationXML(LibMCEnv::CWorkingDirectory
std::string sBoardsNodeName;
std::string sVersionString;
std::string sSchemaLocationString;
+ std::string sSimulationMode;
std::vector nodesToCopyFromTemplate;
switch (configVersion) {
@@ -334,6 +335,7 @@ std::string CSMCConfiguration::buildConfigurationXML(LibMCEnv::CWorkingDirectory
sVersionString = "0.8";
sSchemaLocationString = "cfg SCANmotionControl_0_8.xsd";
sBoardsNodeName = "Boards";
+ sSimulationMode = "true";
nodesToCopyFromTemplate.push_back("ScanDeviceConfig");
nodesToCopyFromTemplate.push_back("LaserConfig");
nodesToCopyFromTemplate.push_back("IOConfig");
@@ -345,6 +347,20 @@ std::string CSMCConfiguration::buildConfigurationXML(LibMCEnv::CWorkingDirectory
sVersionString = "0.9";
sSchemaLocationString = "cfg SCANmotionControl_0_9.xsd";
sBoardsNodeName = "BoardList";
+ sSimulationMode = "true";
+ nodesToCopyFromTemplate.push_back("AxesList");
+ nodesToCopyFromTemplate.push_back("ScanheadList");
+ nodesToCopyFromTemplate.push_back("KinematicsList");
+ nodesToCopyFromTemplate.push_back("LaserConfig");
+ nodesToCopyFromTemplate.push_back("IOConfig");
+
+ break;
+ case eSMCConfigVersion::Version_1_0:
+ // Customize writing to SMC Version 1.0
+ sVersionString = "1.0";
+ sSchemaLocationString = "cfg SCANmotionControlConfig_1_0.xsd";
+ sBoardsNodeName = "BoardList";
+ sSimulationMode = "Simulation";
nodesToCopyFromTemplate.push_back("AxesList");
nodesToCopyFromTemplate.push_back("ScanheadList");
nodesToCopyFromTemplate.push_back("KinematicsList");
@@ -386,7 +402,7 @@ std::string CSMCConfiguration::buildConfigurationXML(LibMCEnv::CWorkingDirectory
pGeneralConfigNode->AddChildText("", "BaseDirectoryPath", sBaseDirectoryPath);
auto pSimulationConfigNode = pGeneralConfigNode->AddChild("", "SimulationConfig");
- pSimulationConfigNode->AddChildText("", "SimulationMode", "true");
+ pSimulationConfigNode->AddChildText("", "SimulationMode", sSimulationMode);
pSimulationConfigNode->AddChildText("", "SimOutputFileDirectory", sSimulationDirectory);
pSimulationConfigNode->AddChildText("", "BinaryOutput", "false");
pSimulationConfigNode->AddChildText("", "DisableFileOutput", "false");
@@ -410,7 +426,8 @@ std::string CSMCConfiguration::buildConfigurationXML(LibMCEnv::CWorkingDirectory
break;
}
- case eSMCConfigVersion::Version_0_9: {
+ case eSMCConfigVersion::Version_0_9:
+ case eSMCConfigVersion::Version_1_0: {
if (!sRTCIPAddress.empty()) {
auto pEthSearchNode = pRTCConfigNode->AddChild("", "EthSearch");
auto pIPListNode = pEthSearchNode->AddChild("", "IPList");
diff --git a/Drivers/ScanLabSMC/Implementation/libmcdriver_scanlabsmc_smccontextinstance.cpp b/Drivers/ScanLabSMC/Implementation/libmcdriver_scanlabsmc_smccontextinstance.cpp
index 0d765f2e..8b307fed 100644
--- a/Drivers/ScanLabSMC/Implementation/libmcdriver_scanlabsmc_smccontextinstance.cpp
+++ b/Drivers/ScanLabSMC/Implementation/libmcdriver_scanlabsmc_smccontextinstance.cpp
@@ -81,7 +81,13 @@ CSMCContextInstance::CSMCContextInstance(const std::string& sContextName, ISMCCo
case 9: configVersion = eSMCConfigVersion::Version_0_9; break;
default:
throw ELibMCDriver_ScanLabSMCInterfaceException(LIBMCDRIVER_SCANLABSMC_ERROR_UNKNOWNSMCMINORVERSION, "unknown smc minor version: " + sVersionString);
-
+ }
+ }
+ else if (versionInfo.m_nMajor == 1) {
+ switch (versionInfo.m_nMinor) {
+ case 0: configVersion = eSMCConfigVersion::Version_1_0; break;
+ default:
+ throw ELibMCDriver_ScanLabSMCInterfaceException(LIBMCDRIVER_SCANLABSMC_ERROR_UNKNOWNSMCMINORVERSION, "unknown smc minor version: " + sVersionString);
}
}
else {
diff --git a/Drivers/ScanLabSMC/Interfaces/libmcdriver_scanlabsmc_abi.hpp b/Drivers/ScanLabSMC/Interfaces/libmcdriver_scanlabsmc_abi.hpp
index bc2f2c02..54c60289 100644
--- a/Drivers/ScanLabSMC/Interfaces/libmcdriver_scanlabsmc_abi.hpp
+++ b/Drivers/ScanLabSMC/Interfaces/libmcdriver_scanlabsmc_abi.hpp
@@ -639,6 +639,15 @@ LIBMCDRIVER_SCANLABSMC_DECLSPEC LibMCDriver_ScanLabSMCResult libmcdriver_scanlab
*/
LIBMCDRIVER_SCANLABSMC_DECLSPEC LibMCDriver_ScanLabSMCResult libmcdriver_scanlabsmc_driver_scanlabsmc_setdllresources(LibMCDriver_ScanLabSMC_Driver_ScanLabSMC pDriver_ScanLabSMC, const char * pSMCDLLResourceName, const char * pRTCDLLResourceName);
+/**
+* Sets the default resource name of the RTC Service DLL. Overrides custom resource data if set before.
+*
+* @param[in] pDriver_ScanLabSMC - Driver_ScanLabSMC instance.
+* @param[in] pRTCServiceDLLResourceName - Resource name of RTC Service DLL
+* @return error code or 0 (success)
+*/
+LIBMCDRIVER_SCANLABSMC_DECLSPEC LibMCDriver_ScanLabSMCResult libmcdriver_scanlabsmc_driver_scanlabsmc_setrtcservicedllresourcename(LibMCDriver_ScanLabSMC_Driver_ScanLabSMC pDriver_ScanLabSMC, const char * pRTCServiceDLLResourceName);
+
/**
* Sets the default resource name of auxiliary resource DLLs. Overrides custom resource data if set before.
*
@@ -660,6 +669,16 @@ LIBMCDRIVER_SCANLABSMC_DECLSPEC LibMCDriver_ScanLabSMCResult libmcdriver_scanlab
*/
LIBMCDRIVER_SCANLABSMC_DECLSPEC LibMCDriver_ScanLabSMCResult libmcdriver_scanlabsmc_driver_scanlabsmc_setcustomdlldata(LibMCDriver_ScanLabSMC_Driver_ScanLabSMC pDriver_ScanLabSMC, LibMCDriver_ScanLabSMC_uint64 nSMCDLLResourceDataBufferSize, const LibMCDriver_ScanLabSMC_uint8 * pSMCDLLResourceDataBuffer, LibMCDriver_ScanLabSMC_uint64 nRTCDLLResourceDataBufferSize, const LibMCDriver_ScanLabSMC_uint8 * pRTCDLLResourceDataBuffer);
+/**
+* Sets custom binaries for the needed RTC Service DLLs. Overrides custom resource data if set before.
+*
+* @param[in] pDriver_ScanLabSMC - Driver_ScanLabSMC instance.
+* @param[in] nRTCServiceDLLResourceDataBufferSize - Number of elements in buffer
+* @param[in] pRTCServiceDLLResourceDataBuffer - uint8 buffer of Resource data of RTC Service DLL
+* @return error code or 0 (success)
+*/
+LIBMCDRIVER_SCANLABSMC_DECLSPEC LibMCDriver_ScanLabSMCResult libmcdriver_scanlabsmc_driver_scanlabsmc_setrtcservicedllresourcedata(LibMCDriver_ScanLabSMC_Driver_ScanLabSMC pDriver_ScanLabSMC, LibMCDriver_ScanLabSMC_uint64 nRTCServiceDLLResourceDataBufferSize, const LibMCDriver_ScanLabSMC_uint8 * pRTCServiceDLLResourceDataBuffer);
+
/**
* Sets the custom binary for auxiliary resource DLLs. Overrides custom resource data if set before.
*
diff --git a/Drivers/ScanLabSMC/Interfaces/libmcdriver_scanlabsmc_interfaces.hpp b/Drivers/ScanLabSMC/Interfaces/libmcdriver_scanlabsmc_interfaces.hpp
index 5f0a48f1..0989ff5f 100644
--- a/Drivers/ScanLabSMC/Interfaces/libmcdriver_scanlabsmc_interfaces.hpp
+++ b/Drivers/ScanLabSMC/Interfaces/libmcdriver_scanlabsmc_interfaces.hpp
@@ -709,6 +709,12 @@ class IDriver_ScanLabSMC : public virtual IDriver {
*/
virtual void SetDLLResources(const std::string & sSMCDLLResourceName, const std::string & sRTCDLLResourceName) = 0;
+ /**
+ * IDriver_ScanLabSMC::SetRTCServiceDLLResourceName - Sets the default resource name of the RTC Service DLL. Overrides custom resource data if set before.
+ * @param[in] sRTCServiceDLLResourceName - Resource name of RTC Service DLL
+ */
+ virtual void SetRTCServiceDLLResourceName(const std::string & sRTCServiceDLLResourceName) = 0;
+
/**
* IDriver_ScanLabSMC::SetXercesDLLResource - Sets the default resource name of auxiliary resource DLLs. Overrides custom resource data if set before.
* @param[in] sXercesDLLResourceName - Resource name of the Xerces dependency DLL
@@ -724,6 +730,13 @@ class IDriver_ScanLabSMC : public virtual IDriver {
*/
virtual void SetCustomDLLData(const LibMCDriver_ScanLabSMC_uint64 nSMCDLLResourceDataBufferSize, const LibMCDriver_ScanLabSMC_uint8 * pSMCDLLResourceDataBuffer, const LibMCDriver_ScanLabSMC_uint64 nRTCDLLResourceDataBufferSize, const LibMCDriver_ScanLabSMC_uint8 * pRTCDLLResourceDataBuffer) = 0;
+ /**
+ * IDriver_ScanLabSMC::SetRTCServiceDLLResourceData - Sets custom binaries for the needed RTC Service DLLs. Overrides custom resource data if set before.
+ * @param[in] nRTCServiceDLLResourceDataBufferSize - Number of elements in buffer
+ * @param[in] pRTCServiceDLLResourceDataBuffer - Resource data of RTC Service DLL
+ */
+ virtual void SetRTCServiceDLLResourceData(const LibMCDriver_ScanLabSMC_uint64 nRTCServiceDLLResourceDataBufferSize, const LibMCDriver_ScanLabSMC_uint8 * pRTCServiceDLLResourceDataBuffer) = 0;
+
/**
* IDriver_ScanLabSMC::SetCustomXercesDLLData - Sets the custom binary for auxiliary resource DLLs. Overrides custom resource data if set before.
* @param[in] nXercesDLLResourceDataBufferSize - Number of elements in buffer
diff --git a/Drivers/ScanLabSMC/Interfaces/libmcdriver_scanlabsmc_interfacewrapper.cpp b/Drivers/ScanLabSMC/Interfaces/libmcdriver_scanlabsmc_interfacewrapper.cpp
index b2611244..fc43c1c2 100644
--- a/Drivers/ScanLabSMC/Interfaces/libmcdriver_scanlabsmc_interfacewrapper.cpp
+++ b/Drivers/ScanLabSMC/Interfaces/libmcdriver_scanlabsmc_interfacewrapper.cpp
@@ -1754,6 +1754,33 @@ LibMCDriver_ScanLabSMCResult libmcdriver_scanlabsmc_driver_scanlabsmc_setdllreso
}
}
+LibMCDriver_ScanLabSMCResult libmcdriver_scanlabsmc_driver_scanlabsmc_setrtcservicedllresourcename(LibMCDriver_ScanLabSMC_Driver_ScanLabSMC pDriver_ScanLabSMC, const char * pRTCServiceDLLResourceName)
+{
+ IBase* pIBaseClass = (IBase *)pDriver_ScanLabSMC;
+
+ try {
+ if (pRTCServiceDLLResourceName == nullptr)
+ throw ELibMCDriver_ScanLabSMCInterfaceException (LIBMCDRIVER_SCANLABSMC_ERROR_INVALIDPARAM);
+ std::string sRTCServiceDLLResourceName(pRTCServiceDLLResourceName);
+ IDriver_ScanLabSMC* pIDriver_ScanLabSMC = dynamic_cast(pIBaseClass);
+ if (!pIDriver_ScanLabSMC)
+ throw ELibMCDriver_ScanLabSMCInterfaceException(LIBMCDRIVER_SCANLABSMC_ERROR_INVALIDCAST);
+
+ pIDriver_ScanLabSMC->SetRTCServiceDLLResourceName(sRTCServiceDLLResourceName);
+
+ return LIBMCDRIVER_SCANLABSMC_SUCCESS;
+ }
+ catch (ELibMCDriver_ScanLabSMCInterfaceException & Exception) {
+ return handleLibMCDriver_ScanLabSMCException(pIBaseClass, Exception);
+ }
+ catch (std::exception & StdException) {
+ return handleStdException(pIBaseClass, StdException);
+ }
+ catch (...) {
+ return handleUnhandledException(pIBaseClass);
+ }
+}
+
LibMCDriver_ScanLabSMCResult libmcdriver_scanlabsmc_driver_scanlabsmc_setxercesdllresource(LibMCDriver_ScanLabSMC_Driver_ScanLabSMC pDriver_ScanLabSMC, const char * pXercesDLLResourceName)
{
IBase* pIBaseClass = (IBase *)pDriver_ScanLabSMC;
@@ -1809,6 +1836,32 @@ LibMCDriver_ScanLabSMCResult libmcdriver_scanlabsmc_driver_scanlabsmc_setcustomd
}
}
+LibMCDriver_ScanLabSMCResult libmcdriver_scanlabsmc_driver_scanlabsmc_setrtcservicedllresourcedata(LibMCDriver_ScanLabSMC_Driver_ScanLabSMC pDriver_ScanLabSMC, LibMCDriver_ScanLabSMC_uint64 nRTCServiceDLLResourceDataBufferSize, const LibMCDriver_ScanLabSMC_uint8 * pRTCServiceDLLResourceDataBuffer)
+{
+ IBase* pIBaseClass = (IBase *)pDriver_ScanLabSMC;
+
+ try {
+ if ( (!pRTCServiceDLLResourceDataBuffer) && (nRTCServiceDLLResourceDataBufferSize>0))
+ throw ELibMCDriver_ScanLabSMCInterfaceException (LIBMCDRIVER_SCANLABSMC_ERROR_INVALIDPARAM);
+ IDriver_ScanLabSMC* pIDriver_ScanLabSMC = dynamic_cast(pIBaseClass);
+ if (!pIDriver_ScanLabSMC)
+ throw ELibMCDriver_ScanLabSMCInterfaceException(LIBMCDRIVER_SCANLABSMC_ERROR_INVALIDCAST);
+
+ pIDriver_ScanLabSMC->SetRTCServiceDLLResourceData(nRTCServiceDLLResourceDataBufferSize, pRTCServiceDLLResourceDataBuffer);
+
+ return LIBMCDRIVER_SCANLABSMC_SUCCESS;
+ }
+ catch (ELibMCDriver_ScanLabSMCInterfaceException & Exception) {
+ return handleLibMCDriver_ScanLabSMCException(pIBaseClass, Exception);
+ }
+ catch (std::exception & StdException) {
+ return handleStdException(pIBaseClass, StdException);
+ }
+ catch (...) {
+ return handleUnhandledException(pIBaseClass);
+ }
+}
+
LibMCDriver_ScanLabSMCResult libmcdriver_scanlabsmc_driver_scanlabsmc_setcustomxercesdlldata(LibMCDriver_ScanLabSMC_Driver_ScanLabSMC pDriver_ScanLabSMC, LibMCDriver_ScanLabSMC_uint64 nXercesDLLResourceDataBufferSize, const LibMCDriver_ScanLabSMC_uint8 * pXercesDLLResourceDataBuffer)
{
IBase* pIBaseClass = (IBase *)pDriver_ScanLabSMC;
@@ -2168,10 +2221,14 @@ LibMCDriver_ScanLabSMCResult LibMCDriver_ScanLabSMC::Impl::LibMCDriver_ScanLabSM
*ppProcAddress = (void*) &libmcdriver_scanlabsmc_smccontext_drawlayer;
if (sProcName == "libmcdriver_scanlabsmc_driver_scanlabsmc_setdllresources")
*ppProcAddress = (void*) &libmcdriver_scanlabsmc_driver_scanlabsmc_setdllresources;
+ if (sProcName == "libmcdriver_scanlabsmc_driver_scanlabsmc_setrtcservicedllresourcename")
+ *ppProcAddress = (void*) &libmcdriver_scanlabsmc_driver_scanlabsmc_setrtcservicedllresourcename;
if (sProcName == "libmcdriver_scanlabsmc_driver_scanlabsmc_setxercesdllresource")
*ppProcAddress = (void*) &libmcdriver_scanlabsmc_driver_scanlabsmc_setxercesdllresource;
if (sProcName == "libmcdriver_scanlabsmc_driver_scanlabsmc_setcustomdlldata")
*ppProcAddress = (void*) &libmcdriver_scanlabsmc_driver_scanlabsmc_setcustomdlldata;
+ if (sProcName == "libmcdriver_scanlabsmc_driver_scanlabsmc_setrtcservicedllresourcedata")
+ *ppProcAddress = (void*) &libmcdriver_scanlabsmc_driver_scanlabsmc_setrtcservicedllresourcedata;
if (sProcName == "libmcdriver_scanlabsmc_driver_scanlabsmc_setcustomxercesdlldata")
*ppProcAddress = (void*) &libmcdriver_scanlabsmc_driver_scanlabsmc_setcustomxercesdlldata;
if (sProcName == "libmcdriver_scanlabsmc_driver_scanlabsmc_loadsdk")
diff --git a/Drivers/ScanLabSMC/Interfaces/libmcdriver_scanlabsmc_types.hpp b/Drivers/ScanLabSMC/Interfaces/libmcdriver_scanlabsmc_types.hpp
index 0cab9de3..182f1139 100644
--- a/Drivers/ScanLabSMC/Interfaces/libmcdriver_scanlabsmc_types.hpp
+++ b/Drivers/ScanLabSMC/Interfaces/libmcdriver_scanlabsmc_types.hpp
@@ -154,6 +154,9 @@ typedef void * LibMCDriver_ScanLabSMC_pvoid;
#define LIBMCDRIVER_SCANLABSMC_ERROR_LINEARPOWERVALUESAREINCOMPLETE 1046 /** Linear power values are incomplete. */
#define LIBMCDRIVER_SCANLABSMC_ERROR_NONLINEARPOWERVALUESAREINCOMPLETE 1047 /** Nonlinear power values are incomplete. */
#define LIBMCDRIVER_SCANLABSMC_ERROR_INTERPOLATIONDATAISNOTINCREASING 1048 /** Interpolation data is not increasing. */
+#define LIBMCDRIVER_SCANLABSMC_ERROR_EMPTYRTCSERVICEDLLRESOURCENAME 1049 /** Empty RTC Service DLL Resource Name. */
+#define LIBMCDRIVER_SCANLABSMC_ERROR_RTCSERVICERESOURCENOTFOUND 1050 /** RTC Service Resource not found. */
+#define LIBMCDRIVER_SCANLABSMC_ERROR_EMPTYRTCSERVICEDLLRESOURCEDATA 1051 /** Empty RTC Service DLL Resource Data. */
/*************************************************************************************************************************
Error strings for LibMCDriver_ScanLabSMC
@@ -220,6 +223,9 @@ inline const char * LIBMCDRIVER_SCANLABSMC_GETERRORSTRING (LibMCDriver_ScanLabSM
case LIBMCDRIVER_SCANLABSMC_ERROR_LINEARPOWERVALUESAREINCOMPLETE: return "Linear power values are incomplete.";
case LIBMCDRIVER_SCANLABSMC_ERROR_NONLINEARPOWERVALUESAREINCOMPLETE: return "Nonlinear power values are incomplete.";
case LIBMCDRIVER_SCANLABSMC_ERROR_INTERPOLATIONDATAISNOTINCREASING: return "Interpolation data is not increasing.";
+ case LIBMCDRIVER_SCANLABSMC_ERROR_EMPTYRTCSERVICEDLLRESOURCENAME: return "Empty RTC Service DLL Resource Name.";
+ case LIBMCDRIVER_SCANLABSMC_ERROR_RTCSERVICERESOURCENOTFOUND: return "RTC Service Resource not found.";
+ case LIBMCDRIVER_SCANLABSMC_ERROR_EMPTYRTCSERVICEDLLRESOURCEDATA: return "Empty RTC Service DLL Resource Data.";
default: return "unknown error";
}
}
@@ -264,7 +270,8 @@ namespace LibMCDriver_ScanLabSMC {
enum class eSMCConfigVersion : LibMCDriver_ScanLabSMC_int32 {
Unknown = 0,
Version_0_8 = 8,
- Version_0_9 = 9
+ Version_0_9 = 9,
+ Version_1_0 = 10
};
enum class eJobCharacteristic : LibMCDriver_ScanLabSMC_int32 {