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

Initial work on POST settings (not done yet)

parent 58fd244a
......@@ -13,6 +13,14 @@
#include "QGCApplication.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)
: QGCTool(app, toolbox)
......@@ -26,6 +34,15 @@ TaisyncManager::TaisyncManager(QGCApplication* app, QGCToolbox* toolbox)
_rateList.append(tr("High"));
}
//-----------------------------------------------------------------------------
void
TaisyncManager::_radioSettingsChanged(QVariant)
{
if(_taiSettings) {
_taiSettings->setRadioSettings(kRadioModeValues[_radioMode->rawValue().toInt()], _radioChannel->enumStringValue());
}
}
//-----------------------------------------------------------------------------
TaisyncManager::~TaisyncManager()
{
......@@ -85,6 +102,37 @@ void
TaisyncManager::setToolbox(QGCToolbox* 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();
}
......@@ -266,7 +314,6 @@ TaisyncManager::_checkTaisync()
void
TaisyncManager::_updateSettings(QByteArray jSonData)
{
qDebug() << jSonData;
QJsonParseError jsonParseError;
QJsonDocument doc = QJsonDocument::fromJson(jSonData, &jsonParseError);
if (jsonParseError.error != QJsonParseError::NoError) {
......@@ -301,9 +348,10 @@ TaisyncManager::_updateSettings(QByteArray jSonData)
}
//-- Radio Settings?
} 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?
} else if(jSonData.contains("\"maxbitrate\":")) {
//{\"decode\":\"phone\",\"mode\":\"h264\",\"maxbitrate\":\"high\"}
......
......@@ -12,6 +12,7 @@
#include "QGCToolbox.h"
#include "QGCLoggingCategory.h"
#include "TaisyncSettings.h"
#include "Fact.h"
#if defined(__ios__) || defined(__android__)
#include "TaisyncTelemetry.h"
#include "TaisyncVideoReceiver.h"
......@@ -39,6 +40,8 @@ public:
Q_PROPERTY(int decodeIndex READ decodeIndex WRITE setDecodeIndex NOTIFY decodeIndexChanged)
Q_PROPERTY(QStringList rateList READ rateList 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);
~TaisyncManager () override;
......@@ -58,6 +61,8 @@ public:
QStringList rateList () { return _rateList; }
int rateIndex () { return _rateIndex; }
void setRateIndex (int idx);
Fact* radioMode () { return _radioMode; }
Fact* radioChannel () { return _radioChannel; }
signals:
void linkChanged ();
......@@ -74,6 +79,7 @@ private slots:
void _updateSettings (QByteArray jSonData);
void _setEnabled ();
void _setVideoEnabled ();
void _radioSettingsChanged (QVariant);
#if defined(__ios__) || defined(__android__)
void _readUDPBytes ();
void _readTelemBytes (QByteArray bytesIn);
......@@ -105,21 +111,23 @@ private:
TaisyncVideoReceiver* _taiVideo = nullptr;
QUdpSocket* _telemetrySocket= nullptr;
#endif
bool _enableVideo = true;
bool _enabled = true;
bool _linkConnected = false;
QTimer _workTimer;
QString _linkVidFormat;
int _downlinkRSSI = 0;
int _uplinkRSSI = 0;
QStringList _decodeList;
int _decodeIndex = 0;
QStringList _rateList;
int _rateIndex = 0;
bool _savedVideoState = true;
QVariant _savedVideoSource;
QVariant _savedVideoUDP;
QVariant _savedAR;
QString _serialNumber;
QString _fwVersion;
bool _enableVideo = true;
bool _enabled = true;
bool _linkConnected = false;
QTimer _workTimer;
QString _linkVidFormat;
int _downlinkRSSI = 0;
int _uplinkRSSI = 0;
QStringList _decodeList;
int _decodeIndex = 0;
QStringList _rateList;
int _rateIndex = 0;
bool _savedVideoState = true;
QVariant _savedVideoSource;
QVariant _savedVideoUDP;
QVariant _savedAR;
QString _serialNumber;
QString _fwVersion;
Fact* _radioMode = nullptr;
Fact* _radioChannel = nullptr;
};
......@@ -13,15 +13,14 @@
#include "QGCApplication.h"
#include "VideoManager.h"
/*
static const char* kPostReq =
"POST %1 HTTP/1.1\r\n"
"Content-Type: application/json\r\n"
"Content-Length: %2\r\n\r\n"
"%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)
......@@ -72,7 +71,7 @@ TaisyncSettings::requestVideoSettings()
bool
TaisyncSettings::requestRadioSettings()
{
return _request("/v1/radio.json");
return _request(kRadioURI);
}
//-----------------------------------------------------------------------------
......@@ -88,6 +87,28 @@ TaisyncSettings::_request(const QString& request)
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
TaisyncSettings::_readBytes()
......
......@@ -22,6 +22,7 @@ public:
bool requestFreqScan ();
bool requestVideoSettings ();
bool requestRadioSettings ();
bool setRadioSettings (const QString& mode, const QString& channel);
signals:
void updateSettings (QByteArray jSonData);
......@@ -31,4 +32,5 @@ protected slots:
private:
bool _request (const QString& request);
bool _post (const QString& post, const QString& postPayload);
};
......@@ -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