Commit 7a0b738b authored by Valentin Platzgummer's avatar Valentin Platzgummer

version checking added to nemo inteface, testing needed..

parent b098b99a
......@@ -517,6 +517,7 @@ HEADERS += \
src/comm/ros_bridge/include/messages/nemo_msgs/heartbeat.h \
src/comm/ros_bridge/include/messages/nemo_msgs/progress_array.h \
src/comm/ros_bridge/include/messages/nemo_msgs/tile.h \
src/comm/ros_bridge/include/messages/nemo_msgs/tile_array.h \
src/comm/utilities.h
contains (DEFINES, QGC_ENABLE_PAIRING) {
......@@ -559,6 +560,7 @@ SOURCES += \
src/comm/ros_bridge/include/messages/nemo_msgs/progress_array.cpp \
src/comm/ros_bridge/include/messages/nemo_msgs/tile.cpp \
src/Settings/WimaSettings.cc \
src/comm/ros_bridge/include/messages/nemo_msgs/tile_array.cpp
contains (DEFINES, QGC_ENABLE_PAIRING) {
SOURCES += \
......
......@@ -30,6 +30,7 @@ public:
enum class STATUS {
NOT_CONNECTED,
ERROR,
SYNC,
READY,
WEBSOCKET_DETECTED,
......
......@@ -52,13 +52,22 @@ QList<QGeoCoordinate> MeasurementTile::tile() const { return coordinateList(); }
QString MeasurementTile::randomId(int length) {
static const QString values(
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");
static std::uint64_t counter = 0;
static auto firstCall = std::chrono::high_resolution_clock::now();
auto delta = std::chrono::duration_cast<std::chrono::nanoseconds>(
std::chrono::high_resolution_clock::now() - firstCall)
.count();
std::srand((unsigned int)delta ^ counter);
QString str;
std::srand(std::time(nullptr));
for (int i = 0; i < length; ++i) {
int index = std::rand() % values.length();
QChar c = values.at(index);
str.append(c);
}
++counter;
return str;
}
......
......@@ -22,7 +22,8 @@ Rectangle {
property int availableWidth: 300
property bool error: errorString.lenght >= 0
readonly property bool running: _nemoInterface.running
property string errorString: ""
property string warningString: _nemoInterface.warningString
property string infoString: _nemoInterface.infoString
signal abort
......@@ -50,7 +51,13 @@ Rectangle {
color: "orange"
Layout.columnSpan: parent.columns
Layout.fillWidth: true
visible: !_root.areasCorrect
}
QGCLabel {
text: _root.infoString
wrapMode: Text.WordWrap
horizontalAlignment: Text.AlignLeft
Layout.columnSpan: parent.columns
Layout.fillWidth: true
}
QGCButton {
......
......@@ -37,7 +37,7 @@ void Rosbridge::start() {
_impl->moveToThread(_t);
connect(_impl, &RosbridgeImpl::stateChanged, this,
&Rosbridge::_onImplStateChanged);
&Rosbridge::stateChanged);
connect(this, &Rosbridge::_start, _impl, &RosbridgeImpl::start);
connect(this, &Rosbridge::_stop, _impl, &RosbridgeImpl::stop);
......@@ -244,16 +244,6 @@ void Rosbridge::waitForService(const QString &service) {
}
}
void Rosbridge::_onImplStateChanged() {
static STATE oldState = STATE::STOPPED;
auto newState = translate(_impl->state());
if (oldState != newState) {
emit stateChanged();
}
oldState = newState;
}
Rosbridge::STATE translate(RosbridgeImpl::STATE s) {
switch (s) {
case RosbridgeImpl::STATE::STOPPED:
......
......@@ -101,8 +101,6 @@ signals:
void _unadvertiseAllServices();
private:
void _onImplStateChanged();
std::atomic<STATE> _state;
RosbridgeImpl *_impl;
QThread *_t;
......
......@@ -337,6 +337,11 @@ void RosbridgeImpl::_onDisconnected() {
}
}
void RosbridgeImpl::_onError(QAbstractSocket::SocketError e) {
qDebug() << "_onError: socket error: " << e << ", "
<< _webSocket.errorString();
}
void RosbridgeImpl::_setState(RosbridgeImpl::STATE newState) {
if (_state != newState) {
_state = newState;
......@@ -372,7 +377,6 @@ void RosbridgeImpl::_doAction() {
}
void RosbridgeImpl::_onTextMessageReceived(const QString &message) {
qDebug() << "_onTextMessageReceived: " << message;
QJsonParseError e;
auto d = QJsonDocument::fromJson(message.toUtf8(), &e);
if (!d.isNull()) {
......
......@@ -58,6 +58,7 @@ signals:
private slots:
void _onConnected();
void _onDisconnected();
void _onError(QAbstractSocket::SocketError e);
void _doAction();
void _onTextMessageReceived(const QString &message);
......
......@@ -100,7 +100,7 @@ template <class TileType> bool fromJson(const QJsonObject &value, TileType &p) {
PointType;
for (long i = 0; i < jsonArray.size(); ++i) {
PointType pt;
if (!geo_point::fromJson(jsonArray[i], pt)) {
if (!geo_point::fromJson(jsonArray[i].toObject(), pt)) {
return false;
}
p.tile().push_back(std::move(pt));
......
#pragma once
#include "ros_bridge/include/messages/nemo_msgs/tile.h"
#include <QJsonArray>
#include <QString>
namespace ros_bridge {
//! @brief Namespace containing classes and methodes ros message generation.
namespace messages {
//! @brief Namespace containing classes and methodes for nemo_msgs
//! generation.
namespace nemo_msgs {
//! @brief Namespace containing methodes for nemo_msgs/tile_array message
//! generation.
namespace tile_array {
template <class TileArray>
bool toJson(const TileArray &array, QJsonArray &jsonArray) {
for (unsigned long i = 0; i < std::uint64_t(array.size()); ++i) {
QJsonObject jsonTile;
if (!tile::toJson(array[i], jsonTile)) {
return false;
}
jsonArray.push_back(std::move(jsonTile));
}
return true;
}
template <class TileArray>
bool fromJson(const QJsonArray &jsonArray, TileArray &array) {
using namespace geographic_msgs;
array.clear();
array.reserve(jsonArray.size());
typedef decltype(array[0]) TileCVR;
typedef typename std::remove_cv_t<typename std::remove_reference_t<TileCVR>>
Tile;
for (long i = 0; i < jsonArray.size(); ++i) {
Tile t;
if (!tile::fromJson(jsonArray[i], t)) {
return false;
}
array.push_back(std::move(t));
}
return true;
}
} // namespace tile_array
} // namespace nemo_msgs
} // namespace messages
} // namespace ros_bridge
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment