Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions Drivers/ScanLabSMC/Implementation/libmcdriver_scanlabsmc_sdk.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,12 @@ CScanLabSMCSDK::CScanLabSMCSDK(const std::string& sDLLNameUTF8, const std::strin
this->ptr_slsc_ctrl_exec_init_laser_sequence = (PScanLabSMCPtr_slsc_ctrl_exec_init_laser_sequence)_loadScanLabSMCAddress(hLibrary, "slsc_ctrl_exec_init_laser_sequence");
this->ptr_slsc_ctrl_exec_shutdown_laser_sequence = (PScanLabSMCPtr_slsc_ctrl_exec_shutdown_laser_sequence)_loadScanLabSMCAddress(hLibrary, "slsc_ctrl_exec_shutdown_laser_sequence");
this->ptr_slsc_job_write_analog_x = (PScanLabSMCPtr_slsc_job_write_analog_x)_loadScanLabSMCAddress(hLibrary, "slsc_job_write_analog_x");

this->ptr_slsc_ctrl_write_digital_x = (PScanLabSMCPtr_slsc_ctrl_write_digital_x)_loadScanLabSMCAddress(hLibrary, "slsc_ctrl_write_digital_x");
this->ptr_slsc_ctrl_write_digital_mask_x = (PScanLabSMCPtr_slsc_ctrl_write_digital_mask_x)_loadScanLabSMCAddress(hLibrary, "slsc_ctrl_write_digital_mask_x");

this->ptr_slsc_job_write_digital_x = (PScanLabSMCPtr_slsc_job_write_digital_x)_loadScanLabSMCAddress(hLibrary, "slsc_job_write_digital_x");
this->ptr_slsc_job_write_digital_mask_x = (PScanLabSMCPtr_slsc_job_write_digital_mask_x)_loadScanLabSMCAddress(hLibrary, "slsc_job_write_digital_mask_x");

m_LibraryHandle = (void*) hLibrary;
}
Expand Down Expand Up @@ -657,6 +663,38 @@ slscReturnValue CScanLabSMCSDK::slsc_job_write_analog_x(size_t Handle, slsc_Anal
return this->ptr_slsc_job_write_analog_x(Handle, Channel, Value, TimeDelay);
}

slscReturnValue CScanLabSMCSDK::slsc_ctrl_write_digital_x(size_t Handle, slsc_DigitalOutput Channel, uint16_t Value)
{
if (m_pLogJournal.get() != nullptr)
m_pLogJournal->logCall("slsc_ctrl_write_digital_x", std::to_string(Handle) + ", " + std::to_string((uint32_t)Channel) + ", " + std::to_string(Value));

return this->ptr_slsc_ctrl_write_digital_x(Handle, Channel, Value);
}

slscReturnValue CScanLabSMCSDK::slsc_ctrl_write_digital_mask_x(size_t Handle, slsc_DigitalOutput Channel, uint16_t Mask, uint16_t Value)
{
if (m_pLogJournal.get() != nullptr)
m_pLogJournal->logCall("slsc_ctrl_write_digital_mask_x", std::to_string(Handle) + ", " + std::to_string((uint32_t)Channel) + ", " + std::to_string(Mask) + ", " + std::to_string(Value));

return this->ptr_slsc_ctrl_write_digital_mask_x(Handle, Channel, Mask, Value);
}

slscReturnValue CScanLabSMCSDK::slsc_job_write_digital_x(size_t Handle, slsc_DigitalOutput Channel, uint16_t Value, double TimeDelay)
{
if (m_pLogJournal.get() != nullptr)
m_pLogJournal->logCall("slsc_job_write_digital_x", std::to_string(Handle) + ", " + std::to_string((uint32_t)Channel) + ", " + std::to_string(Value) + ", " + std::to_string(TimeDelay));

return this->ptr_slsc_job_write_digital_x(Handle, Channel, Value, TimeDelay);
}

slscReturnValue CScanLabSMCSDK::slsc_job_write_digital_mask_x(size_t Handle, slsc_DigitalOutput Channel, uint16_t Mask, uint16_t Value, double TimeDelay)
{
if (m_pLogJournal.get() != nullptr)
m_pLogJournal->logCall("slsc_job_write_digital_mask_x", std::to_string(Handle) + ", " + std::to_string((uint32_t)Channel) + ", " + std::to_string(Mask) + ", " + std::to_string(Value) + ", " + std::to_string(TimeDelay));

return this->ptr_slsc_job_write_digital_mask_x(Handle, Channel, Mask, Value, TimeDelay);
}

void CScanLabSMCSDK::setJournal(PScanLabSMCSDKJournal pLogJournal)
{
m_pLogJournal = pLogJournal;
Expand Down
19 changes: 19 additions & 0 deletions Drivers/ScanLabSMC/Implementation/libmcdriver_scanlabsmc_sdk.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,11 @@ namespace LibMCDriver_ScanLabSMC {
slsc_AnalogOutput_2 = 1
};

enum class slsc_DigitalOutput : uint8_t
{
slsc_DigitalOutput_1 = 0,
slsc_DigitalOutput_2 = 1,
};

typedef struct _slsc_PolylineOptions slsc_PolylineOptions;
typedef struct _slsc_VersionInfo slsc_VersionInfo;
Expand Down Expand Up @@ -250,6 +255,11 @@ namespace LibMCDriver_ScanLabSMC {

typedef slscReturnValue(SCANLABSMC_CALLINGCONVENTION* PScanLabSMCPtr_slsc_job_write_analog_x) (size_t Handle, slsc_AnalogOutput Channel, double Value, double TimeDelay);

typedef slscReturnValue(SCANLABSMC_CALLINGCONVENTION* PScanLabSMCPtr_slsc_ctrl_write_digital_x) (size_t Handle, slsc_DigitalOutput Channel, uint16_t Value);
typedef slscReturnValue(SCANLABSMC_CALLINGCONVENTION* PScanLabSMCPtr_slsc_ctrl_write_digital_mask_x) (size_t Handle, slsc_DigitalOutput Channel, uint16_t Mask, uint16_t Value);
typedef slscReturnValue(SCANLABSMC_CALLINGCONVENTION* PScanLabSMCPtr_slsc_job_write_digital_x) (size_t Handle, slsc_DigitalOutput Channel, uint16_t Value, double TimeDelay);
typedef slscReturnValue(SCANLABSMC_CALLINGCONVENTION* PScanLabSMCPtr_slsc_job_write_digital_mask_x) (size_t Handle, slsc_DigitalOutput Channel, uint16_t Mask, uint16_t Value, double TimeDelay);

class CScanLabSMCSDKJournal {
private:
std::map<std::string, uint32_t> m_DefinedVariables;
Expand Down Expand Up @@ -336,6 +346,10 @@ namespace LibMCDriver_ScanLabSMC {
PScanLabSMCPtr_slsc_ctrl_exec_init_laser_sequence ptr_slsc_ctrl_exec_init_laser_sequence = nullptr;
PScanLabSMCPtr_slsc_ctrl_exec_shutdown_laser_sequence ptr_slsc_ctrl_exec_shutdown_laser_sequence = nullptr;
PScanLabSMCPtr_slsc_job_write_analog_x ptr_slsc_job_write_analog_x = nullptr;
PScanLabSMCPtr_slsc_ctrl_write_digital_x ptr_slsc_ctrl_write_digital_x = nullptr;
PScanLabSMCPtr_slsc_ctrl_write_digital_mask_x ptr_slsc_ctrl_write_digital_mask_x = nullptr;
PScanLabSMCPtr_slsc_job_write_digital_x ptr_slsc_job_write_digital_x = nullptr;
PScanLabSMCPtr_slsc_job_write_digital_mask_x ptr_slsc_job_write_digital_mask_x = nullptr;

public:

Expand Down Expand Up @@ -393,6 +407,11 @@ namespace LibMCDriver_ScanLabSMC {

slscReturnValue slsc_job_write_analog_x(size_t Handle, slsc_AnalogOutput Channel, double Value, double TimeDelay);

slscReturnValue slsc_ctrl_write_digital_x(size_t Handle, slsc_DigitalOutput Channel, uint16_t Value);
slscReturnValue slsc_ctrl_write_digital_mask_x(size_t Handle, slsc_DigitalOutput Channel, uint16_t Mask, uint16_t Value);

slscReturnValue slsc_job_write_digital_x(size_t Handle, slsc_DigitalOutput Channel, uint16_t Value, double TimeDelay);
slscReturnValue slsc_job_write_digital_mask_x(size_t Handle, slsc_DigitalOutput Channel, uint16_t Mask, uint16_t Value, double TimeDelay);

};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,13 +77,20 @@ CSMCJobInstance::CSMCJobInstance(PSMCContextHandle pContextHandle, double dStart
m_pSDK = m_pContextHandle->getSDK();

auto contextHandle = m_pContextHandle->getHandle();

// Initialize digital output to 0
m_pSDK->checkError(contextHandle, m_pSDK->slsc_ctrl_write_digital_x(contextHandle, slsc_DigitalOutput::slsc_DigitalOutput_1, 0));

// Begin job
m_pSDK->checkError(contextHandle, m_pSDK->slsc_job_begin(contextHandle, &m_JobID));

// Set digital output to 1
m_pSDK->checkError(contextHandle, m_pSDK->slsc_job_write_digital_x(contextHandle, slsc_DigitalOutput::slsc_DigitalOutput_1, 1, 0 ) );

slsc_RecordSet eRecordSetA = slsc_RecordSet::slsc_RecordSet_SetPositions;
slsc_RecordSet eRecordSetB = slsc_RecordSet::slsc_RecordSet_LaserSwitches;

//m_pSDK->checkError(contextHandle, m_pSDK->slsc_job_start_record(contextHandle, eRecordSetA, eRecordSetB));
m_pSDK->checkError(contextHandle, m_pSDK->slsc_job_start_record(contextHandle, eRecordSetA, eRecordSetB));

if (dMaxPowerInWatts < SCANLABSMC_MIN_MAXPOWERINWATTS || dMaxPowerInWatts > SCANLABSMC_MAX_MAXPOWERINWATTS)
throw ELibMCDriver_ScanLabSMCInterfaceException(LIBMCDRIVER_SCANLABSMC_ERROR_INVALIDMAXPOWERVALUE);
Expand All @@ -106,7 +113,11 @@ void CSMCJobInstance::Finalize()

auto contextHandle = m_pContextHandle->getHandle();

//m_pSDK->checkError(contextHandle, m_pSDK->slsc_job_stop_record(contextHandle));
// Set digital output to 0
m_pSDK->checkError(contextHandle, m_pSDK->slsc_job_write_digital_x(contextHandle, slsc_DigitalOutput::slsc_DigitalOutput_1, 0, 0));

// Stop recording
m_pSDK->checkError(contextHandle, m_pSDK->slsc_job_stop_record(contextHandle));

m_pSDK->checkError(contextHandle, m_pSDK->slsc_job_end(contextHandle));
m_bIsFinalized = true;
Expand Down
Loading