22 #ifndef REGILO_SCANCONTROLLER_HPP 23 #define REGILO_SCANCONTROLLER_HPP 25 #include "controller.hpp" 26 #include "scandata.hpp" 53 template<
typename ProtocolController>
57 std::size_t lastScanId = 0;
63 virtual std::string getScanCommand()
const = 0;
71 virtual bool parseScanData(std::istream& in,
ScanData& data) = 0;
74 using ProtocolController::ProtocolController;
84 template<typename ProtocolController>
91 ProtocolController::template sendCommand<>(getScanCommand());
92 data.
time = epoch<std::chrono::milliseconds>().count();
94 parseScanData(this->deviceOutput, data);
98 std::istringstream response(this->log->readCommand(getScanCommand()));
99 if(std::shared_ptr<const ITimedLog> timedLog = std::dynamic_pointer_cast<const ITimedLog>(this->
getLog()))
101 data.
time = timedLog->getLastCommandTimeAs<std::chrono::milliseconds>().count();
104 parseScanData(response, data);
106 if(!data.empty()) data.
scanId = lastScanId++;
113 #endif // REGILO_SCANCONTROLLER_HPP Definition: controller.hpp:35
The IScanController interface is used for all controller classes that implement scanning functionalit...
Definition: scancontroller.hpp:34
long time
The scan time (milliseconds since epoch).
Definition: scandata.hpp:39
virtual ScanData getScan(bool fromDevice=true)=0
Get a scan from the device.
std::size_t scanId
The scan id (starting from zero).
Definition: scandata.hpp:37
The IController interface is used for all controller classes.
Definition: controller.hpp:42
virtual std::shared_ptr< ILog > getLog()=0
Get the current Log.
The ScanController class implements parsing of scanned laser data.
Definition: scancontroller.hpp:54
The ScanData class is used to store laser data.
Definition: scandata.hpp:34
virtual ~IScanController()=default
Default destructor.