TaisyncSettings.cc 3.58 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";
24

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

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

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

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

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

63 64 65
//-----------------------------------------------------------------------------
bool
TaisyncSettings::requestVideoSettings()
Gus Grubba's avatar
Gus Grubba committed
66 67 68 69 70 71 72 73
{
    return _request("/v1/video.json");
}

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

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

90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
//-----------------------------------------------------------------------------
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);
}

112 113 114 115 116
//-----------------------------------------------------------------------------
void
TaisyncSettings::_readBytes()
{
    QByteArray bytesIn = _tcpSocket->read(_tcpSocket->bytesAvailable());
117 118 119 120 121 122
    //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));
123
    }
124 125
}