Skip to content
Snippets Groups Projects
TaisyncSettings.cc 4 KiB
Newer Older
  • Learn to ignore specific revisions
  • /****************************************************************************
     *
     *   (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.
     *
     ****************************************************************************/
    
    
    #include "TaisyncSettings.h"
    #include "SettingsManager.h"
    #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* kRadioURI    = "/v1/radio.json";
    
    Gus Grubba's avatar
    Gus Grubba committed
    static const char* kVideoURI    = "/v1/video.json";
    
    //-----------------------------------------------------------------------------
    TaisyncSettings::TaisyncSettings(QObject* parent)
        : TaisyncHandler(parent)
    {
    }
    
    //-----------------------------------------------------------------------------
    
        qCDebug(TaisyncLog) << "Start Taisync Settings";
    #if defined(__ios__) || defined(__android__)
        return _start(TAISYNC_SETTINGS_PORT);
    #else
        return _start(80, QHostAddress(TAISYNC_SETTINGS_TARGET));
    #endif
    
    //-----------------------------------------------------------------------------
    bool
    
    Gus Grubba's avatar
    Gus Grubba committed
        return _request("/v1/baseband.json");
    
    }
    
    //-----------------------------------------------------------------------------
    bool
    TaisyncSettings::requestDevInfo()
    {
    
    Gus Grubba's avatar
    Gus Grubba committed
        return _request("/v1/device.json");
    
    }
    
    //-----------------------------------------------------------------------------
    bool
    TaisyncSettings::requestFreqScan()
    {
    
    Gus Grubba's avatar
    Gus Grubba committed
        return _request("/v1/freqscan.json");
    
    //-----------------------------------------------------------------------------
    bool
    TaisyncSettings::requestVideoSettings()
    
    Gus Grubba's avatar
    Gus Grubba committed
    {
    
    Gus Grubba's avatar
    Gus Grubba committed
        return _request(kVideoURI);
    
    Gus Grubba's avatar
    Gus Grubba committed
    }
    
    //-----------------------------------------------------------------------------
    bool
    TaisyncSettings::requestRadioSettings()
    {
    
        return _request(kRadioURI);
    
    Gus Grubba's avatar
    Gus Grubba committed
    }
    
    //-----------------------------------------------------------------------------
    bool
    TaisyncSettings::_request(const QString& request)
    
    Gus Grubba's avatar
    Gus Grubba committed
            QString req = QString(kGetReq).arg(request);
    
            //qCDebug(TaisyncVerbose) << "Request" << req;
            _tcpSocket->write(req.toUtf8());
            return true;
        }
        return false;
    }
    
    
    //-----------------------------------------------------------------------------
    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
            qCDebug(TaisyncVerbose) << "Post" << 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\"}";
    
    Gus Grubba's avatar
    Gus Grubba committed
        QString post = QString(kRadioPost).arg(mode).arg(channel);
    
        return _post(kRadioURI, post);
    }
    
    
    Gus Grubba's avatar
    Gus Grubba committed
    //-----------------------------------------------------------------------------
    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);
    }
    
    
    //-----------------------------------------------------------------------------
    void
    TaisyncSettings::_readBytes()
    {
        QByteArray bytesIn = _tcpSocket->read(_tcpSocket->bytesAvailable());
    
        //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));