PST SDK  5.2.0.0-0eac0f6
exposure.cpp
#ifdef WIN32
#include <windows.h>
#else
#include <csignal>
#endif
/*
* Define handler functions required to ensure a clean shutdown of the PST Tracker when the
* application is terminated.
*/
static void Exithandler(int sig);
#ifdef WIN32
BOOL WINAPI ConsoleHandler(DWORD CEvent)
{
Exithandler(CEvent);
return TRUE;
}
#endif
/* End of handler functions */
#include <iostream>
#include <thread>
#include <chrono>
#include "pstsdk_cpp.h"
/* Control variable for main loop */
static bool running = true;
/* Number of data points to grab before application termination */
static const uint32_t numberOfSamplesToGrab = 1000;
/*
* Implementation of the PSTech::pstsdk::Listener class to receive tracking data.
* The OnTrackerData() callback function receives the data as soon as it becomes
* available.
*/
class MyListener : public PSTech::pstsdk::Listener
{
{
static uint32_t samplesGrabbed = 0;
if (samplesGrabbed++ >= numberOfSamplesToGrab)
running = false;
// Do something with the received data.
}
} listener;
/*
* Implement the exit handler to shut-down the PST Tracker connection on application termination.
*/
static void Exithandler(int sig)
{
running = false;
}
int main(int argc, char *argv[])
{
// Register the exit handler with the application
#ifdef WIN32
SetConsoleCtrlHandler((PHANDLER_ROUTINE)ConsoleHandler, TRUE);
#else
signal(SIGTERM, Exithandler);
signal(SIGKILL, Exithandler);
signal(SIGQUIT, Exithandler);
signal(SIGINT, Exithandler);
#endif
// Implement error handling of PSTech::TrackerException exceptions to prevent
// improper PST Tracker shutdown on errors.
try
{
// Create an instance of the Tracker object using the default configuration path and file names.
#ifdef WIN32
#else
// On Linux, specify the type of grabber that needs to be used as the last parameter:
// "basler_ace" for PST HD or "basler_dart" for PST Pico
PSTech::pstsdk::Tracker pst("","config.cfg","models.db",argv[1]);
#endif
// Print version number of the tracker server being used.
std::cout << "Running PST Server version " << pst.GetVersionInfo() << "\n";
// Register the listener object to the tracker server.
pst.AddTrackerListener(&listener);
// Start the tracker server.
pst.Start();
// Perform a system check to see if the tracker server is running OK and print the result.
std::cout << "System check: " << (int)pst.Systemcheck() << "\n\n";
std::cout << "***************************\n\n";
// Set the frame rate to 30 Hz.
pst.SetFramerate(30);
// Print the new frame rate to see if it was set correctly. Note that for PST HD and Pico
// trackers the frame rate actually being set can differ from the value provided to SetFramerate().
std::cout << "Frame rate set to " << pst.GetFramerate() << " Hz\n";
// Query available exposure range for the current frame rate and try setting the maximum exposure value
double min, max;
pst.GetExposureRange(min, max);
std::cout << "Exposure range: " << min << " s - " << max << " s\n";
std::cout << "Set exposure to " << max << "\n";
pst.SetExposure(max);
std::cout << "Check new exposure: " << pst.GetExposure() << " s\n\n";
std::cout << "***************************\n\n";
// Increase frame rate and check exposure value. For PST HD and PST Pico trackers, maximum exposure
// depends on frame rate. Exposure will be automatically decreased when necessary.
std::cout << "Set frame rate to 60 Hz\n";
pst.SetFramerate(60);
std::cout << "Frame rate set to " << pst.GetFramerate() << " Hz\n";
std::cout << "Check exposure: " << pst.GetExposure() << " s\n";
// Check new exposure range
pst.GetExposureRange(min, max);
std::cout << "New exposure range " << min << " s - " << max << " s\n\n";
std::cout << "***************************\n\n";
// Set exposure half-way
double exposureHalf = min + (max - min) / 2.0;
std::cout << "Set exposure half way: " << exposureHalf << " s\n";
pst.SetExposure(exposureHalf);
std::cout << "New exposure: " << pst.GetExposure() << " s\n\n";
std::cout << "***************************\n\n";
// Main loop, wait for auto-termination.
while (running)
{
std::this_thread::sleep_for(std::chrono::milliseconds(100));
}
}
{
// Catch PSTech::TrackerException exceptions and print error messages.
std::cout << e.full_description() << "\n";
}
// Make sure that the connection to the PST Tracker is shut down properly.
// Pause command line to see results.
std::cout << "Press enter to continue...\n";
std::cin.get();
return 0;
}
PSTech::pstsdk::Tracker
Main PST SDK class implementing tracker communication.
Definition: pstsdk_cpp.h:74
PSTech::pstsdk::Listener::OnTrackerData
virtual void OnTrackerData(TrackerData &data)
Callback function receiving tracking information from the tracker.
Definition: pstsdk_cpp.h:46
PSTech::pstsdk::Tracker::GetVersionInfo
Utils::PstString GetVersionInfo() const
Get version information of the SDK.
PSTech::pstsdk::TrackerData
Tracking information retrieved from tracker.
Definition: PstTypes.h:154
PSTech::pstsdk::Listener
Abstract listener class for receiving tracking information.
Definition: pstsdk_cpp.h:34
PSTech::pstsdk::Tracker::Shutdown
static void Shutdown()
Shutdown the tracking system, stopping tracking.
PSTech::pstsdk::Tracker::GetFramerate
double GetFramerate() const
Get current frame rate.
PSTech::pstsdk::Tracker::AddTrackerListener
void AddTrackerListener(Listener *listener)
Add a listener for tracker data.
PSTech::pstsdk::Tracker::Systemcheck
StatusMessage Systemcheck() const
Check if the tracker is running correctly.
PSTech::pstsdk::Tracker::Start
void Start()
Start tracking.
PSTech::pstsdk::Tracker::GetExposure
double GetExposure() const
Get the current exposure time.
pstsdk_cpp.h
PSTech::pstsdk::Tracker::SetFramerate
void SetFramerate(double fps)
Set tracker frame rate.
PSTech::pstsdk::Tracker::GetExposureRange
void GetExposureRange(double &min, double &max) const
Get the allowed exposure range.
TrackerExceptions.h
PSTech::PSTException::full_description
virtual const char * full_description() const
PSTech::TrackerException
Definition: TrackerExceptions.h:49
PSTech::pstsdk::Tracker::SetExposure
void SetExposure(double time)
Set the exposure time.
PstStringIoStream.h