TaisyncSettings.cc 4 KB
Newer Older
1 2 3 4 5 6 7 8 9
/****************************************************************************
 *
 *   (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
 *
 * QGroundControl is licensed according to the terms in the file
 * COPYING.md in the root of the source code directory.
 *
 ****************************************************************************/

10
#include "TaisyncManager.h"
11 12 13 14 15
#include "TaisyncSettings.h"
#include "SettingsManager.h"
#include "QGCApplication.h"
#include "VideoManager.h"

16 17 18 19 20 21
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";

22 23
static const char* kGetReq      = "GET %1 HTTP/1.1\r\n\r\n";
static const char* kRadioURI    = "/v1/radio.json";
Gus Grubba's avatar
Gus Grubba committed
24
static const char* kVideoURI    = "/v1/video.json";
25

26 27 28 29 30 31 32
//-----------------------------------------------------------------------------
TaisyncSettings::TaisyncSettings(QObject* parent)
    : TaisyncHandler(parent)
{
}

//-----------------------------------------------------------------------------
33
bool TaisyncSettings::start()
34
{
35 36 37 38 39 40
    qCDebug(TaisyncLog) << "Start Taisync Settings";
#if defined(__ios__) || defined(__android__)
    return _start(TAISYNC_SETTINGS_PORT);
#else
    return _start(80, QHostAddress(TAISYNC_SETTINGS_TARGET));
#endif
41 42
}

43 44
//-----------------------------------------------------------------------------
bool
45
TaisyncSettings::requestLinkStatus()
46
{
Gus Grubba's avatar
Gus Grubba committed
47
    return _request("/v1/baseband.json");
48 49 50 51 52 53
}

//-----------------------------------------------------------------------------
bool
TaisyncSettings::requestDevInfo()
{
Gus Grubba's avatar
Gus Grubba committed
54
    return _request("/v1/device.json");
55 56 57 58 59 60
}

//-----------------------------------------------------------------------------
bool
TaisyncSettings::requestFreqScan()
{
Gus Grubba's avatar
Gus Grubba committed
61
    return _request("/v1/freqscan.json");
62 63
}

64 65 66
//-----------------------------------------------------------------------------
bool
TaisyncSettings::requestVideoSettings()
Gus Grubba's avatar
Gus Grubba committed
67
{
Gus Grubba's avatar
Gus Grubba committed
68
    return _request(kVideoURI);
Gus Grubba's avatar
Gus Grubba committed
69 70 71 72 73 74
}

//-----------------------------------------------------------------------------
bool
TaisyncSettings::requestRadioSettings()
{
75
    return _request(kRadioURI);
Gus Grubba's avatar
Gus Grubba committed
76 77 78 79 80
}

//-----------------------------------------------------------------------------
bool
TaisyncSettings::_request(const QString& request)
81 82
{
    if(_tcpSocket) {
Gus Grubba's avatar
Gus Grubba committed
83
        QString req = QString(kGetReq).arg(request);
84 85 86 87 88 89 90
        //qCDebug(TaisyncVerbose) << "Request" << req;
        _tcpSocket->write(req.toUtf8());
        return true;
    }
    return false;
}

91 92 93 94 95 96
//-----------------------------------------------------------------------------
bool
TaisyncSettings::_post(const QString& post, const QString &postPayload)
{
    if(_tcpSocket) {
        QString req = QString(kPostReq).arg(post).arg(postPayload.size()).arg(postPayload);
Gus Grubba's avatar
Gus Grubba committed
97
        qCDebug(TaisyncVerbose) << "Post" << req;
98 99 100 101 102 103 104 105 106 107 108
        _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\"}";
Gus Grubba's avatar
Gus Grubba committed
109
    QString post = QString(kRadioPost).arg(mode).arg(channel);
110 111 112
    return _post(kRadioURI, post);
}

Gus Grubba's avatar
Gus Grubba committed
113 114 115 116 117 118 119 120 121
//-----------------------------------------------------------------------------
bool
TaisyncSettings::setVideoSettings(const QString& output, const QString& mode, const QString& rate)
{
    static const char* kVideoPost = "{\"decode\":\"%1\",\"mode\":\"%2\",\"maxbitrate\":\"%3\"}";
    QString post = QString(kVideoPost).arg(output).arg(mode).arg(rate);
    return _post(kVideoURI, post);
}

122 123 124 125 126
//-----------------------------------------------------------------------------
void
TaisyncSettings::_readBytes()
{
    QByteArray bytesIn = _tcpSocket->read(_tcpSocket->bytesAvailable());
127 128 129 130 131 132
    //qCDebug(TaisyncVerbose) << "Taisync settings data:" << bytesIn.size();
    //qCDebug(TaisyncVerbose) << QString(bytesIn);
    //-- Go straight to Json payload
    int idx = bytesIn.indexOf('{');
    if(idx > 0) {
        emit updateSettings(bytesIn.mid(idx));
133
    }
134 135
}