Browse Source

QGCCameraControl: allow to read camera information xml via ftp

QGC4.4
David Jablonski 3 years ago committed by Ramon Roche
parent
commit
109e84ec88
  1. 36
      src/Camera/QGCCameraControl.cc
  2. 1
      src/Camera/QGCCameraControl.h
  3. 1
      src/Camera/QGCCameraManager.cc
  4. 8
      src/Vehicle/FTPManager.cc
  5. 2
      src/Vehicle/FTPManager.h

36
src/Camera/QGCCameraControl.cc

@ -11,6 +11,7 @@
#include "VideoManager.h" #include "VideoManager.h"
#include "QGCMapEngine.h" #include "QGCMapEngine.h"
#include "QGCCameraManager.h" #include "QGCCameraManager.h"
#include "FTPManager.h"
#include <QDir> #include <QDir>
#include <QStandardPaths> #include <QStandardPaths>
@ -1954,6 +1955,21 @@ QGCCameraControl::_handleDefinitionFile(const QString &url)
{ {
//-- First check and see if we have it cached //-- First check and see if we have it cached
QFile xmlFile(_cacheFile); QFile xmlFile(_cacheFile);
QString ftpPrefix(QStringLiteral("%1://").arg(FTPManager::mavlinkFTPScheme));
if (url.startsWith(ftpPrefix, Qt::CaseInsensitive)) {
int ver = static_cast<int>(_info.cam_definition_version);
QString fileName = QString::asprintf("%s_%s_%03d.xml",
_vendor.toStdString().c_str(),
_modelName.toStdString().c_str(),
ver);
connect(_vehicle->ftpManager(), &FTPManager::downloadComplete, this, &QGCCameraControl::_ftpDownloadComplete);
_vehicle->ftpManager()->download(url,
qgcApp()->toolbox()->settingsManager()->appSettings()->parameterSavePath().toStdString().c_str(),
fileName);
return;
}
if (!xmlFile.exists()) { if (!xmlFile.exists()) {
qCDebug(CameraControlLog) << "No camera definition file cached"; qCDebug(CameraControlLog) << "No camera definition file cached";
_httpRequest(url); _httpRequest(url);
@ -2024,6 +2040,26 @@ QGCCameraControl::_downloadFinished()
//reply->deleteLater(); //reply->deleteLater();
} }
void QGCCameraControl::_ftpDownloadComplete(const QString& fileName, const QString& errorMsg)
{
qCDebug(CameraControlLog) << "QGCCameraControl::_ftpDownloadComplete fileName:errorMsg" << fileName << errorMsg;
disconnect(_vehicle->ftpManager(), &FTPManager::downloadComplete, this, &QGCCameraControl::_ftpDownloadComplete);
QFile xmlFile(fileName);
if (!xmlFile.exists()) {
qCDebug(CameraControlLog) << "No camera definition file present after ftp download completed";
return;
}
if (!xmlFile.open(QIODevice::ReadOnly)) {
qWarning() << "Could not read downloaded camera definition file: " << fileName;
return;
}
QByteArray bytes = xmlFile.readAll();
emit dataReady(bytes);
}
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void void
QGCCameraControl::_dataReady(QByteArray data) QGCCameraControl::_dataReady(QByteArray data)

1
src/Camera/QGCCameraControl.h

@ -372,6 +372,7 @@ private:
void _updateRanges (Fact* pFact); void _updateRanges (Fact* pFact);
void _httpRequest (const QString& url); void _httpRequest (const QString& url);
void _handleDefinitionFile (const QString& url); void _handleDefinitionFile (const QString& url);
void _ftpDownloadComplete (const QString& fileName, const QString& errorMsg);
QStringList _loadExclusions (QDomNode option); QStringList _loadExclusions (QDomNode option);
QStringList _loadUpdates (QDomNode option); QStringList _loadUpdates (QDomNode option);

1
src/Camera/QGCCameraManager.cc

@ -112,6 +112,7 @@ QGCCameraManager::_handleHeartbeat(const mavlink_message_t &message)
mavlink_heartbeat_t heartbeat; mavlink_heartbeat_t heartbeat;
mavlink_msg_heartbeat_decode(&message, &heartbeat); mavlink_msg_heartbeat_decode(&message, &heartbeat);
//-- First time hearing from this one? //-- First time hearing from this one?
qCDebug(CameraManagerLog) << "Another Hearbeat from " << message.compid;
QString sCompID = QString::number(message.compid); QString sCompID = QString::number(message.compid);
if(!_cameraInfoRequest.contains(sCompID)) { if(!_cameraInfoRequest.contains(sCompID)) {
qCDebug(CameraManagerLog) << "Hearbeat from " << message.compid; qCDebug(CameraManagerLog) << "Hearbeat from " << message.compid;

8
src/Vehicle/FTPManager.cc

@ -34,7 +34,7 @@ FTPManager::FTPManager(Vehicle* vehicle)
Q_ASSERT(sizeof(MavlinkFTP::RequestHeader) == 12); Q_ASSERT(sizeof(MavlinkFTP::RequestHeader) == 12);
} }
bool FTPManager::download(const QString& fromURI, const QString& toDir) bool FTPManager::download(const QString& fromURI, const QString& toDir, const QString& fileName)
{ {
qCDebug(FTPManagerLog) << "download fromURI:" << fromURI << "to:" << toDir; qCDebug(FTPManagerLog) << "download fromURI:" << fromURI << "to:" << toDir;
@ -72,7 +72,11 @@ bool FTPManager::download(const QString& fromURI, const QString& toDir)
} }
lastDirSlashIndex++; // move past slash lastDirSlashIndex++; // move past slash
if (fileName.size() == 0) {
_downloadState.fileName = _downloadState.fullPathOnVehicle.right(_downloadState.fullPathOnVehicle.size() - lastDirSlashIndex); _downloadState.fileName = _downloadState.fullPathOnVehicle.right(_downloadState.fullPathOnVehicle.size() - lastDirSlashIndex);
} else {
_downloadState.fileName = fileName;
}
qCDebug(FTPManagerLog) << "_downloadState.fullPathOnVehicle:_downloadState.fileName" << _downloadState.fullPathOnVehicle << _downloadState.fileName; qCDebug(FTPManagerLog) << "_downloadState.fullPathOnVehicle:_downloadState.fileName" << _downloadState.fullPathOnVehicle << _downloadState.fileName;
@ -641,6 +645,8 @@ bool FTPManager::_parseURI(const QString& uri, QString& parsedURI, uint8_t& comp
if (!ok) { if (!ok) {
qCWarning(FTPManagerLog) << "Incorrect format for component id" << uri; qCWarning(FTPManagerLog) << "Incorrect format for component id" << uri;
return false; return false;
} else {
qCDebug(FTPManagerLog) << "Found compId:" << (int)compId;
} }
parsedURI.replace(QRegularExpression("\\[\\;comp\\=\\d+\\]"), ""); parsedURI.replace(QRegularExpression("\\[\\;comp\\=\\d+\\]"), "");
} }

2
src/Vehicle/FTPManager.h

@ -37,7 +37,7 @@ public:
/// @param toDir Local directory to download file to /// @param toDir Local directory to download file to
/// @return true: download has started, false: error, no download /// @return true: download has started, false: error, no download
/// Signals downloadComplete, commandError, commandProgress /// Signals downloadComplete, commandError, commandProgress
bool download(const QString& fromURI, const QString& toDir); bool download(const QString& fromURI, const QString& toDir, const QString& fileName="");
/// Cancel the current operation /// Cancel the current operation
/// This will emit downloadComplete() when done, and if there's currently a download in progress /// This will emit downloadComplete() when done, and if there's currently a download in progress

Loading…
Cancel
Save