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
{
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
@ -29,6 +36,20 @@ std::vector<int> SensorDriver::Sensor::readValues() const
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()
{
qDebug("Initializing sensor driver");
@ -59,7 +80,7 @@ std::vector<SensorDriver::Sensor> SensorDriver::enumerateSensors() const
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;
serialPort.setPortName(serialPortName);
@ -114,7 +135,6 @@ bool SensorDriver::getSensorCommandResponse(const QString& serialPortName, QByte
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()));
QByteArray response;

View File

@ -18,6 +18,8 @@ class SensorDriver {
private:
QString m_serialPortName;
std::pair<int, int> parseRangeResponse(const QByteArray& response) const;
};
public:
@ -27,7 +29,11 @@ class SensorDriver {
std::vector<Sensor> enumerateSensors() const;
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;
std::string parseVersionResponse(const QByteArray& response) const;
};