Commit 21d9ae69 authored by Gus Grubba's avatar Gus Grubba

Initial work on POST settings (not done yet)

parent 58fd244a
...@@ -13,6 +13,14 @@ ...@@ -13,6 +13,14 @@
#include "QGCApplication.h" #include "QGCApplication.h"
#include "VideoManager.h" #include "VideoManager.h"
static const char *kRADIO_MODE = "RadioMode";
static const char *kRadioModeValues[] = {
"auto",
"manual"
};
static const char *kRADIO_CHANNEL = "RadioChannel";
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
TaisyncManager::TaisyncManager(QGCApplication* app, QGCToolbox* toolbox) TaisyncManager::TaisyncManager(QGCApplication* app, QGCToolbox* toolbox)
: QGCTool(app, toolbox) : QGCTool(app, toolbox)
...@@ -26,6 +34,15 @@ TaisyncManager::TaisyncManager(QGCApplication* app, QGCToolbox* toolbox) ...@@ -26,6 +34,15 @@ TaisyncManager::TaisyncManager(QGCApplication* app, QGCToolbox* toolbox)
_rateList.append(tr("High")); _rateList.append(tr("High"));
} }
//-----------------------------------------------------------------------------
void
TaisyncManager::_radioSettingsChanged(QVariant)
{
if(_taiSettings) {
_taiSettings->setRadioSettings(kRadioModeValues[_radioMode->rawValue().toInt()], _radioChannel->enumStringValue());
}
}
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
TaisyncManager::~TaisyncManager() TaisyncManager::~TaisyncManager()
{ {
...@@ -85,6 +102,37 @@ void ...@@ -85,6 +102,37 @@ void
TaisyncManager::setToolbox(QGCToolbox* toolbox) TaisyncManager::setToolbox(QGCToolbox* toolbox)
{ {
QGCTool::setToolbox(toolbox); QGCTool::setToolbox(toolbox);
{
//-- Radio Mode
FactMetaData* metaData = new FactMetaData(FactMetaData::valueTypeUint32, kRADIO_MODE, this);
QQmlEngine::setObjectOwnership(metaData, QQmlEngine::CppOwnership);
metaData->setShortDescription(kRADIO_MODE);
metaData->setLongDescription(kRADIO_MODE);
metaData->setRawDefaultValue(QVariant(0));
metaData->setHasControl(true);
metaData->setReadOnly(false);
metaData->addEnumInfo(tr("Auto"), QVariant(0));
metaData->addEnumInfo(tr("Manual"), QVariant(1));
_radioMode = new Fact("Taisync", metaData, this);
QQmlEngine::setObjectOwnership(_radioMode, QQmlEngine::CppOwnership);
connect(_radioMode, &Fact::rawValueChanged, this, &TaisyncManager::_radioSettingsChanged);
}
{
//-- Radio Channel
FactMetaData* metaData = new FactMetaData(FactMetaData::valueTypeUint32, kRADIO_CHANNEL, this);
QQmlEngine::setObjectOwnership(metaData, QQmlEngine::CppOwnership);
metaData->setShortDescription(kRADIO_CHANNEL);
metaData->setLongDescription(kRADIO_CHANNEL);
metaData->setRawDefaultValue(QVariant(0));
metaData->setHasControl(true);
metaData->setReadOnly(false);
for(int i = 0; i < 13; i++) {
metaData->addEnumInfo(QString("ch%1").arg(i), QVariant(i));
}
_radioChannel = new Fact("Taisync", metaData, this);
QQmlEngine::setObjectOwnership(_radioChannel, QQmlEngine::CppOwnership);
connect(_radioChannel, &Fact::rawValueChanged, this, &TaisyncManager::_radioSettingsChanged);
}
_reset(); _reset();
} }
...@@ -266,7 +314,6 @@ TaisyncManager::_checkTaisync() ...@@ -266,7 +314,6 @@ TaisyncManager::_checkTaisync()
void void
TaisyncManager::_updateSettings(QByteArray jSonData) TaisyncManager::_updateSettings(QByteArray jSonData)
{ {
qDebug() << jSonData;
QJsonParseError jsonParseError; QJsonParseError jsonParseError;
QJsonDocument doc = QJsonDocument::fromJson(jSonData, &jsonParseError); QJsonDocument doc = QJsonDocument::fromJson(jSonData, &jsonParseError);
if (jsonParseError.error != QJsonParseError::NoError) { if (jsonParseError.error != QJsonParseError::NoError) {
...@@ -301,9 +348,10 @@ TaisyncManager::_updateSettings(QByteArray jSonData) ...@@ -301,9 +348,10 @@ TaisyncManager::_updateSettings(QByteArray jSonData)
} }
//-- Radio Settings? //-- Radio Settings?
} else if(jSonData.contains("\"freq\":")) { } else if(jSonData.contains("\"freq\":")) {
// {\"mode\":\"auto\",\"freq\":\"ch12\"} QString mode = jObj["mode"].toString(_radioMode->enumStringValue());
QString channel = jObj["freq"].toString(_radioChannel->enumStringValue());
_radioMode->_containerSetRawValue(mode);
_radioChannel->_containerSetRawValue(channel);
//-- Video Settings? //-- Video Settings?
} else if(jSonData.contains("\"maxbitrate\":")) { } else if(jSonData.contains("\"maxbitrate\":")) {
//{\"decode\":\"phone\",\"mode\":\"h264\",\"maxbitrate\":\"high\"} //{\"decode\":\"phone\",\"mode\":\"h264\",\"maxbitrate\":\"high\"}
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include "QGCToolbox.h" #include "QGCToolbox.h"
#include "QGCLoggingCategory.h" #include "QGCLoggingCategory.h"
#include "TaisyncSettings.h" #include "TaisyncSettings.h"
#include "Fact.h"
#if defined(__ios__) || defined(__android__) #if defined(__ios__) || defined(__android__)
#include "TaisyncTelemetry.h" #include "TaisyncTelemetry.h"
#include "TaisyncVideoReceiver.h" #include "TaisyncVideoReceiver.h"
...@@ -39,6 +40,8 @@ public: ...@@ -39,6 +40,8 @@ public:
Q_PROPERTY(int decodeIndex READ decodeIndex WRITE setDecodeIndex NOTIFY decodeIndexChanged) Q_PROPERTY(int decodeIndex READ decodeIndex WRITE setDecodeIndex NOTIFY decodeIndexChanged)
Q_PROPERTY(QStringList rateList READ rateList NOTIFY rateIndexChanged) Q_PROPERTY(QStringList rateList READ rateList NOTIFY rateIndexChanged)
Q_PROPERTY(int rateIndex READ rateIndex WRITE setRateIndex NOTIFY rateIndexChanged) Q_PROPERTY(int rateIndex READ rateIndex WRITE setRateIndex NOTIFY rateIndexChanged)
Q_PROPERTY(Fact* radioMode READ radioMode CONSTANT)
Q_PROPERTY(Fact* radioChannel READ radioChannel CONSTANT)
explicit TaisyncManager (QGCApplication* app, QGCToolbox* toolbox); explicit TaisyncManager (QGCApplication* app, QGCToolbox* toolbox);
~TaisyncManager () override; ~TaisyncManager () override;
...@@ -58,6 +61,8 @@ public: ...@@ -58,6 +61,8 @@ public:
QStringList rateList () { return _rateList; } QStringList rateList () { return _rateList; }
int rateIndex () { return _rateIndex; } int rateIndex () { return _rateIndex; }
void setRateIndex (int idx); void setRateIndex (int idx);
Fact* radioMode () { return _radioMode; }
Fact* radioChannel () { return _radioChannel; }
signals: signals:
void linkChanged (); void linkChanged ();
...@@ -74,6 +79,7 @@ private slots: ...@@ -74,6 +79,7 @@ private slots:
void _updateSettings (QByteArray jSonData); void _updateSettings (QByteArray jSonData);
void _setEnabled (); void _setEnabled ();
void _setVideoEnabled (); void _setVideoEnabled ();
void _radioSettingsChanged (QVariant);
#if defined(__ios__) || defined(__android__) #if defined(__ios__) || defined(__android__)
void _readUDPBytes (); void _readUDPBytes ();
void _readTelemBytes (QByteArray bytesIn); void _readTelemBytes (QByteArray bytesIn);
...@@ -105,21 +111,23 @@ private: ...@@ -105,21 +111,23 @@ private:
TaisyncVideoReceiver* _taiVideo = nullptr; TaisyncVideoReceiver* _taiVideo = nullptr;
QUdpSocket* _telemetrySocket= nullptr; QUdpSocket* _telemetrySocket= nullptr;
#endif #endif
bool _enableVideo = true; bool _enableVideo = true;
bool _enabled = true; bool _enabled = true;
bool _linkConnected = false; bool _linkConnected = false;
QTimer _workTimer; QTimer _workTimer;
QString _linkVidFormat; QString _linkVidFormat;
int _downlinkRSSI = 0; int _downlinkRSSI = 0;
int _uplinkRSSI = 0; int _uplinkRSSI = 0;
QStringList _decodeList; QStringList _decodeList;
int _decodeIndex = 0; int _decodeIndex = 0;
QStringList _rateList; QStringList _rateList;
int _rateIndex = 0; int _rateIndex = 0;
bool _savedVideoState = true; bool _savedVideoState = true;
QVariant _savedVideoSource; QVariant _savedVideoSource;
QVariant _savedVideoUDP; QVariant _savedVideoUDP;
QVariant _savedAR; QVariant _savedAR;
QString _serialNumber; QString _serialNumber;
QString _fwVersion; QString _fwVersion;
Fact* _radioMode = nullptr;
Fact* _radioChannel = nullptr;
}; };
...@@ -13,15 +13,14 @@ ...@@ -13,15 +13,14 @@
#include "QGCApplication.h" #include "QGCApplication.h"
#include "VideoManager.h" #include "VideoManager.h"
/*
static const char* kPostReq = static const char* kPostReq =
"POST %1 HTTP/1.1\r\n" "POST %1 HTTP/1.1\r\n"
"Content-Type: application/json\r\n" "Content-Type: application/json\r\n"
"Content-Length: %2\r\n\r\n" "Content-Length: %2\r\n\r\n"
"%3"; "%3";
*/
static const char* kGetReq = "GET %1 HTTP/1.1\r\n\r\n"; static const char* kGetReq = "GET %1 HTTP/1.1\r\n\r\n";
static const char* kRadioURI = "/v1/radio.json";
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
TaisyncSettings::TaisyncSettings(QObject* parent) TaisyncSettings::TaisyncSettings(QObject* parent)
...@@ -72,7 +71,7 @@ TaisyncSettings::requestVideoSettings() ...@@ -72,7 +71,7 @@ TaisyncSettings::requestVideoSettings()
bool bool
TaisyncSettings::requestRadioSettings() TaisyncSettings::requestRadioSettings()
{ {
return _request("/v1/radio.json"); return _request(kRadioURI);
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
...@@ -88,6 +87,28 @@ TaisyncSettings::_request(const QString& request) ...@@ -88,6 +87,28 @@ TaisyncSettings::_request(const QString& request)
return false; return false;
} }
//-----------------------------------------------------------------------------
bool
TaisyncSettings::_post(const QString& post, const QString &postPayload)
{
if(_tcpSocket) {
QString req = QString(kPostReq).arg(post).arg(postPayload.size()).arg(postPayload);
qCDebug(TaisyncVerbose) << "Request" << req;
_tcpSocket->write(req.toUtf8());
return true;
}
return false;
}
//-----------------------------------------------------------------------------
bool
TaisyncSettings::setRadioSettings(const QString& mode, const QString& channel)
{
static const char* kRadioPost = "{\"mode\":\"%1\",\"freq\":\"%2\"}";
QString post = QString(kRadioPost).arg(mode.size()).arg(channel);
return _post(kRadioURI, post);
}
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void void
TaisyncSettings::_readBytes() TaisyncSettings::_readBytes()
......
...@@ -22,6 +22,7 @@ public: ...@@ -22,6 +22,7 @@ public:
bool requestFreqScan (); bool requestFreqScan ();
bool requestVideoSettings (); bool requestVideoSettings ();
bool requestRadioSettings (); bool requestRadioSettings ();
bool setRadioSettings (const QString& mode, const QString& channel);
signals: signals:
void updateSettings (QByteArray jSonData); void updateSettings (QByteArray jSonData);
...@@ -31,4 +32,5 @@ protected slots: ...@@ -31,4 +32,5 @@ protected slots:
private: private:
bool _request (const QString& request); bool _request (const QString& request);
bool _post (const QString& post, const QString& postPayload);
}; };
...@@ -207,6 +207,59 @@ QGCView { ...@@ -207,6 +207,59 @@ QGCView {
} }
} }
} }
//-----------------------------------------------------------------
//-- Radio Settings
Item {
width: _panelWidth
height: radioSettingsLabel.height
anchors.margins: ScreenTools.defaultFontPixelWidth
anchors.horizontalCenter: parent.horizontalCenter
visible: _taisyncEnabled
QGCLabel {
id: radioSettingsLabel
text: qsTr("Radio Settings")
font.family: ScreenTools.demiboldFontFamily
}
}
Rectangle {
height: radioSettingsCol.height + (ScreenTools.defaultFontPixelHeight * 2)
width: _panelWidth
color: qgcPal.windowShade
visible: _taisyncEnabled
anchors.margins: ScreenTools.defaultFontPixelWidth
anchors.horizontalCenter: parent.horizontalCenter
Column {
id: radioSettingsCol
spacing: ScreenTools.defaultFontPixelHeight * 0.5
width: parent.width
anchors.centerIn: parent
GridLayout {
anchors.margins: ScreenTools.defaultFontPixelHeight
columnSpacing: ScreenTools.defaultFontPixelWidth * 2
anchors.horizontalCenter: parent.horizontalCenter
columns: 2
QGCLabel {
text: qsTr("Radio Mode:")
Layout.minimumWidth: _labelWidth
}
FactComboBox {
fact: QGroundControl.taisyncManager.radioMode
indexModel: true
enabled: QGroundControl.taisyncManager.linkConnected
Layout.minimumWidth: _valueWidth
}
QGCLabel {
text: qsTr("Radio Frequency:")
}
FactComboBox {
fact: QGroundControl.taisyncManager.radioChannel
indexModel: true
enabled: QGroundControl.taisyncManager.linkConnected && QGroundControl.taisyncManager.radioMode.rawValue > 0
Layout.minimumWidth: _valueWidth
}
}
}
}
} }
} }
} }
......
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