Implement reading range of sensor
This commit is contained in:
parent
98d6860aec
commit
6244f6f8ae
@ -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;
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user