闫刚 qgc模块mavlinklog实现过程

mavlink log

qml部分

这样logController就和LogDownloadController进行了绑定。

AnalyzeView.qml

Rectangle {
    id:     setupView

     
    GeoTagController {
        id: geoController
    }

    LogDownloadController {
        id: logController
	}

    MavlinkConsoleController {
        id: conController
    }
}

LogDownloadPage.qml
定义4个button,reflash, download, erase, cancel

Column {
    spacing:            _margin
    Layout.alignment:   Qt.AlignTop | Qt.AlignLeft

    QGCButton {
        enabled:   
        text:       qsTr("Refresh")
        width:      _butttonWidth

    QGCButton {

       logController.refresh()


    QGCButton {
            onAcceptedForLoad: {
                logController.download(file)

    QGCButton {
            onClicked:  logController.cancel()

cpp部分

log下载的对象创建

class LogDownloadController : public QObject
{

Q_INVOKABLE void refresh                ();
Q_INVOKABLE void download               (QString path = QString());
Q_INVOKABLE void eraseAll               ();
Q_INVOKABLE void cancel                 ();

LogDownloadController声明

    qmlRegisterType<LogDownloadController>          (kQGCControllers,                       1, 0, "LogDownloadController");

    qmlRegisterType<GeoTagController>               (kQGCControllers,                       1, 0, "GeoTagController");

    qmlRegisterType<MavlinkConsoleController>       (kQGCControllers,                       1, 0, "MavlinkConsoleController");

下载log的实现过程

mavlink_msg_log_request_data_pack_chan是mavlink包的接口了

LogDownloadController::download(QString path)
   downloadToDirectory(dir);//选择文件
    -> LogDownloadController::_setDownloading(bool active)
     -> emit downloadingLogsChanged();
     -> LogDownloadController::_receivedAllData()
       -> LogDownloadController::_prepareLogDownload()
       ->_downloadData = new LogDownloadData(entry);
        -> _downloadData->file.open(QIODevice::WriteOnly) //创建文件
         ->    _requestLogData(_downloadData->ID, 0, _downloadData->chunk_table.size()*MAVLINK_MSG_LOG_DATA_FIELD_DATA_LEN);
        _timer.start(kTimeOutMilliseconds);
          ->  mavlink_msg_log_request_data_pack_chan(
          -> _vehicle->sendMessageOnLink(_vehicle->priorityLink(), msg);

LogDownloadController::_setActiveVehicle(Vehicle* vehicle)
connect(_uas, &UASInterface::logEntry, this, &LogDownloadController::_logEntry);
connect(_uas, &UASInterface::logData, this, &LogDownloadController::_logData);

接收数据的过程

_logData就是从mavlink发送过程

LogDownloadController::_logData(UASInterface* uas,
    -> const QString status = QString("%1 (%2/s)").arg(QGCMapEngine::bigSizeToString(_downloadData->written),
                                                    QGCMapEngine::bigSizeToString(_downloadData->rate_avg));
    -> _downloadData->entry->setStatus(status); 
    -> if(_downloadData->file.write((const char*)data, count)) {
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值