/**************************************************************************** * * (c) 2009-2016 QGROUNDCONTROL PROJECT * * QGroundControl is licensed according to the terms in the file * COPYING.md in the root of the source code directory. * ****************************************************************************/ #include "TaisyncManager.h" #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"; static const char* kVideoURI = "/v1/video.json"; //----------------------------------------------------------------------------- TaisyncSettings::TaisyncSettings(QObject* parent) : TaisyncHandler(parent) { } //----------------------------------------------------------------------------- bool TaisyncSettings::start() { 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 TaisyncSettings::requestLinkStatus() { return _request("/v1/baseband.json"); } //----------------------------------------------------------------------------- bool TaisyncSettings::requestDevInfo() { return _request("/v1/device.json"); } //----------------------------------------------------------------------------- bool TaisyncSettings::requestFreqScan() { return _request("/v1/freqscan.json"); } //----------------------------------------------------------------------------- bool TaisyncSettings::requestVideoSettings() { return _request(kVideoURI); } //----------------------------------------------------------------------------- bool TaisyncSettings::requestRadioSettings() { return _request(kRadioURI); } //----------------------------------------------------------------------------- bool TaisyncSettings::_request(const QString& request) { if(_tcpSocket) { 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); 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\"}"; QString post = QString(kRadioPost).arg(mode).arg(channel); return _post(kRadioURI, post); } //----------------------------------------------------------------------------- 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)); } }