Skip to content

Commit

Permalink
Nanosecond utc + Connect address and port from ui.
Browse files Browse the repository at this point in the history
Can we merge deviceChoosers ?
TCP, UDP, Egeniouss?
  • Loading branch information
mohsenD98 committed Sep 13, 2024
1 parent 089b1da commit a54ff80
Show file tree
Hide file tree
Showing 6 changed files with 84 additions and 15 deletions.
15 changes: 9 additions & 6 deletions src/core/positioning/egenioussreceiver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
#include <QJsonObject>
#include <QJsonValue>

EgenioussReceiver::EgenioussReceiver( QObject *parent )
: AbstractGnssReceiver( parent ), mTcpSocket( new QTcpSocket( this ) )
EgenioussReceiver::EgenioussReceiver( const QString &address, const int port, QObject *parent )
: AbstractGnssReceiver( parent ), mAddress( address ), mPort( port ), mTcpSocket( new QTcpSocket( this ) )
{
}

Expand All @@ -15,7 +15,7 @@ void EgenioussReceiver::handleConnectDevice()
connect( mTcpSocket, &QTcpSocket::readyRead, this, &EgenioussReceiver::onReadyRead );
connect( mTcpSocket, &QTcpSocket::errorOccurred, this, &EgenioussReceiver::onErrorOccurred );

mTcpSocket->connectToHost( QHostAddress::LocalHost, 1235 );
mTcpSocket->connectToHost( mAddress, mPort );

if ( !mTcpSocket->waitForConnected( 3000 ) )
{
Expand Down Expand Up @@ -50,9 +50,12 @@ QList<QPair<QString, QVariant>> EgenioussReceiver::details()
QJsonDocument jsonDoc = QJsonDocument::fromJson( payload );
QJsonObject jsonObject = jsonDoc.object();

if ( jsonDoc.isNull() || !jsonDoc.isObject() )
{
return dataList; // Failed to parse JSON
}

dataList.append( qMakePair( "q", jsonObject.value( "q" ).toString() ) );
dataList.append( qMakePair( "utc", jsonObject.value( "utc" ).toDouble() ) );
dataList.append( qMakePair( "utc convert", QDateTime( QDateTime::fromMSecsSinceEpoch( jsonObject.value( "utc" ).toDouble(), Qt::UTC ) ).toString() ) );

return dataList;
}
Expand Down Expand Up @@ -105,7 +108,7 @@ void EgenioussReceiver::onReadyRead()
0,
std::numeric_limits<double>::quiet_NaN(),
std::numeric_limits<double>::quiet_NaN(),
QDateTime::fromMSecsSinceEpoch( jsonObject.value( "utc" ).toDouble(), Qt::UTC ),
QDateTime::fromMSecsSinceEpoch( jsonObject.value( "utc" ).toDouble() / 1e6, Qt::UTC ),
QChar(),
0,
1 );
Expand Down
4 changes: 3 additions & 1 deletion src/core/positioning/egenioussreceiver.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ class EgenioussReceiver : public AbstractGnssReceiver
Q_OBJECT

public:
explicit EgenioussReceiver( QObject *parent = nullptr );
explicit EgenioussReceiver( const QString &address = QString(), const int port = 0, QObject *parent = nullptr );

private:
void handleConnectDevice() override;
Expand All @@ -25,6 +25,8 @@ class EgenioussReceiver : public AbstractGnssReceiver

private:
QTcpSocket *mTcpSocket = nullptr;
QString mAddress;
int mPort = 0;
GnssPositionInformation mLastGnssPositionInformation;
QByteArray mReceivedData;
QByteArray payload;
Expand Down
12 changes: 5 additions & 7 deletions src/core/positioning/positioning.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -192,23 +192,21 @@ void Positioning::setupDevice()
}
else
{
const qsizetype portSeparator = mDeviceId.lastIndexOf( ':' );
const QString address = mDeviceId.mid( 4, portSeparator - 4 );
const int port = mDeviceId.mid( portSeparator + 1 ).toInt();

if ( mDeviceId.startsWith( QStringLiteral( "tcp:" ) ) )
{
const qsizetype portSeparator = mDeviceId.lastIndexOf( ':' );
const QString address = mDeviceId.mid( 4, portSeparator - 4 );
const int port = mDeviceId.mid( portSeparator + 1 ).toInt();
mReceiver = new TcpReceiver( address, port, this );
}
else if ( mDeviceId.startsWith( QStringLiteral( "udp:" ) ) )
{
const qsizetype portSeparator = mDeviceId.lastIndexOf( ':' );
const QString address = mDeviceId.mid( 4, portSeparator - 4 );
const int port = mDeviceId.mid( portSeparator + 1 ).toInt();
mReceiver = new UdpReceiver( address, port, this );
}
else if ( mDeviceId.startsWith( QStringLiteral( "egeniouss:" ) ) )
{
mReceiver = new EgenioussReceiver( this );
mReceiver = new EgenioussReceiver( address, port, this );
}
#ifdef WITH_SERIALPORT
else if ( mDeviceId.startsWith( QStringLiteral( "serial:" ) ) )
Expand Down
2 changes: 1 addition & 1 deletion src/core/positioning/positioningdevicemodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ const QString PositioningDeviceModel::deviceId( const Device &device ) const
return QStringLiteral( "serial:%1" ).arg( device.settings.value( QStringLiteral( "address" ) ).toString() );

case EgenioussDevice:
return QStringLiteral( "egeniouss:%1" ).arg( device.settings.value( QStringLiteral( "address" ) ).toString() );
return QStringLiteral( "egeniouss:%1:%2" ).arg( device.settings.value( QStringLiteral( "address" ) ).toString(), QString::number( device.settings.value( QStringLiteral( "port" ) ).toInt() ) );
}

return QString();
Expand Down
65 changes: 65 additions & 0 deletions src/qml/EgenioussDeviceChooser.qml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import org.qfield
import Theme

Item {
width: parent.width

property alias deviceAddress: egenioussDeviceAddress.text
property alias devicePort: egenioussDevicePort.text

function generateName() {
return deviceAddress + ' (' + devicePort + ')';
}

function setSettings(settings) {
deviceAddress = settings['address'];
devicePort = settings['port'];
}

function getSettings() {
return {
"address": deviceAddress.trim(),
"port": parseInt(devicePort)
};
}

GridLayout {
width: parent.width
columns: 1
columnSpacing: 0
rowSpacing: 5

Label {
Layout.fillWidth: true
text: qsTr("Address:")
font: Theme.defaultFont
wrapMode: Text.WordWrap
}

QfTextField {
id: egenioussDeviceAddress
Layout.fillWidth: true
font: Theme.defaultFont
text: '127.0.0.1'
inputMethodHints: Qt.ImhNoPredictiveText | Qt.ImhNoAutoUppercase | Qt.ImhPreferLowercase
}

Label {
Layout.fillWidth: true
text: qsTr("Port:")
font: Theme.defaultFont
wrapMode: Text.WordWrap
}

QfTextField {
id: egenioussDevicePort
Layout.fillWidth: true
font: Theme.defaultFont
text: '1235'
inputMethodHints: Qt.ImhFormattedNumbersOnly
}
}
}
1 change: 1 addition & 0 deletions src/qml/qml.qrc
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
<file>ScaleBar.qml</file>
<file>SensorInformationView.qml</file>
<file>Toast.qml</file>
<file>EgenioussDeviceChooser.qml</file>
<file>TcpDeviceChooser.qml</file>
<file>UdpDeviceChooser.qml</file>
<file>VariableEditor.qml</file>
Expand Down

0 comments on commit a54ff80

Please sign in to comment.