Implement reading range of sensor

This commit is contained in:
BlackMark 2020-07-05 00:31:54 +02:00
parent 98d6860aec
commit 6244f6f8ae
2 changed files with 30 additions and 4 deletions

View File

@ -21,7 +21,14 @@ SensorDriver::Sensor::~Sensor()
std::pair<int, int> SensorDriver::Sensor::readRange() const std::pair<int, int> SensorDriver::Sensor::readRange() const
{ {
return {0, 4 * 1024 - 1}; qDebug(ltr("Reading range of sensor on port %1").arg(m_serialPortName));
const auto rangeCmd = QByteArray(RANGE_CMD.data(), static_cast<int>(RANGE_CMD.size()));
QByteArray response;
if(!getSensorCommandResponse(m_serialPortName, rangeCmd, response))
return {-1, -1};
return parseRangeResponse(response);
} }
std::vector<int> SensorDriver::Sensor::readValues() const std::vector<int> SensorDriver::Sensor::readValues() const
@ -29,6 +36,20 @@ std::vector<int> SensorDriver::Sensor::readValues() const
return {520, 1233, 4233}; return {520, 1233, 4233};
} }
std::pair<int, int> SensorDriver::Sensor::parseRangeResponse(const QByteArray& response) const
{
const auto rangeRegex = std::regex("([0-9]+),([0-9]+)");
const auto strResponse = response.toStdString();
std::smatch rangeMatch;
if(std::regex_search(strResponse, rangeMatch, rangeRegex)) {
qDebug(ltr("Found range response: '%1'").arg(QString().fromStdString(rangeMatch[0].str())));
return std::pair{std::stoi(rangeMatch[1]), std::stoi(rangeMatch[2])};
}
return {-1, -1};
}
SensorDriver::SensorDriver() SensorDriver::SensorDriver()
{ {
qDebug("Initializing sensor driver"); qDebug("Initializing sensor driver");
@ -59,7 +80,7 @@ std::vector<SensorDriver::Sensor> SensorDriver::enumerateSensors() const
return std::move(sensors); return std::move(sensors);
} }
bool SensorDriver::getSensorCommandResponse(const QString& serialPortName, QByteArray command, QByteArray& response) const bool SensorDriver::getSensorCommandResponse(const QString& serialPortName, QByteArray command, QByteArray& response)
{ {
QSerialPort serialPort; QSerialPort serialPort;
serialPort.setPortName(serialPortName); serialPort.setPortName(serialPortName);
@ -114,7 +135,6 @@ bool SensorDriver::getSensorCommandResponse(const QString& serialPortName, QByte
bool SensorDriver::isValidSensor(const QString& serialPortName) const bool SensorDriver::isValidSensor(const QString& serialPortName) const
{ {
constexpr auto VERSION_CMD = std::string_view{"version"};
const auto versionCmd = QByteArray(VERSION_CMD.data(), static_cast<int>(VERSION_CMD.size())); const auto versionCmd = QByteArray(VERSION_CMD.data(), static_cast<int>(VERSION_CMD.size()));
QByteArray response; QByteArray response;

View File

@ -18,6 +18,8 @@ class SensorDriver {
private: private:
QString m_serialPortName; QString m_serialPortName;
std::pair<int, int> parseRangeResponse(const QByteArray& response) const;
}; };
public: public:
@ -27,7 +29,11 @@ class SensorDriver {
std::vector<Sensor> enumerateSensors() const; std::vector<Sensor> enumerateSensors() const;
private: private:
bool getSensorCommandResponse(const QString& serialPortName, QByteArray command, QByteArray& response) const; static constexpr auto VERSION_CMD = std::string_view{"version"};
static constexpr auto RANGE_CMD = std::string_view{"range"};
static constexpr auto READ_CMD = std::string_view{"read csv"};
static bool getSensorCommandResponse(const QString& serialPortName, QByteArray command, QByteArray& response);
bool isValidSensor(const QString& serialPortName) const; bool isValidSensor(const QString& serialPortName) const;
std::string parseVersionResponse(const QByteArray& response) const; std::string parseVersionResponse(const QByteArray& response) const;
}; };