From 35534c33d8d73a3da7200e7cd5fe614217f726a3 Mon Sep 17 00:00:00 2001
From: Don Gagne <don@thegagnes.com>
Date: Wed, 17 Feb 2016 13:02:21 -0800
Subject: [PATCH] Keep ParameterLoader on first seen dedicated link

---
 src/FactSystem/ParameterLoader.cc | 11 ++++++-----
 src/FactSystem/ParameterLoader.h  |  2 ++
 2 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/src/FactSystem/ParameterLoader.cc b/src/FactSystem/ParameterLoader.cc
index b5fded3..24947c7 100644
--- a/src/FactSystem/ParameterLoader.cc
+++ b/src/FactSystem/ParameterLoader.cc
@@ -50,6 +50,7 @@ ParameterLoader::ParameterLoader(AutoPilotPlugin* autopilot, Vehicle* vehicle, Q
     , _autopilot(autopilot)
     , _vehicle(vehicle)
     , _mavlink(qgcApp()->toolbox()->mavlinkProtocol())
+    , _dedicatedLink(_vehicle->priorityLink())
     , _parametersReady(false)
     , _initialLoadComplete(false)
     , _defaultComponentId(FactSystem::defaultComponentId)
@@ -327,7 +328,7 @@ void ParameterLoader::refreshAllParameters(uint8_t componentID)
 
     mavlink_message_t msg;
     mavlink_msg_param_request_list_pack(mavlink->getSystemId(), mavlink->getComponentId(), &msg, _vehicle->id(), componentID);
-    _vehicle->sendMessageOnLink(_vehicle->priorityLink(), msg);
+    _vehicle->sendMessageOnLink(_dedicatedLink, msg);
 
     QString what = (componentID == MAV_COMP_ID_ALL) ? "MAV_COMP_ID_ALL" : QString::number(componentID);
     qCDebug(ParameterLoaderLog) << "Request to refresh all parameters for component ID:" << what;
@@ -529,7 +530,7 @@ void ParameterLoader::_tryCacheLookup()
 
     mavlink_message_t msg;
     mavlink_msg_param_request_read_pack(mavlink->getSystemId(), mavlink->getComponentId(), &msg, _vehicle->id(), MAV_COMP_ID_ALL, "_HASH_CHECK", -1);
-    _vehicle->sendMessageOnLink(_vehicle->priorityLink(), msg);
+    _vehicle->sendMessageOnLink(_dedicatedLink, msg);
 }
 
 void ParameterLoader::_readParameterRaw(int componentId, const QString& paramName, int paramIndex)
@@ -545,7 +546,7 @@ void ParameterLoader::_readParameterRaw(int componentId, const QString& paramNam
                                         componentId,                // Target component id
                                         fixedParamName,             // Named parameter being requested
                                         paramIndex);                // Parameter index being requested, -1 for named
-    _vehicle->sendMessageOnLink(_vehicle->priorityLink(), msg);
+    _vehicle->sendMessageOnLink(_dedicatedLink, msg);
 }
 
 void ParameterLoader::_writeParameterRaw(int componentId, const QString& paramName, const QVariant& value)
@@ -598,7 +599,7 @@ void ParameterLoader::_writeParameterRaw(int componentId, const QString& paramNa
 
     mavlink_message_t msg;
     mavlink_msg_param_set_encode(_mavlink->getSystemId(), _mavlink->getComponentId(), &msg, &p);
-    _vehicle->sendMessageOnLink(_vehicle->priorityLink(), msg);
+    _vehicle->sendMessageOnLink(_dedicatedLink, msg);
 }
 
 void ParameterLoader::_writeLocalParamCache()
@@ -675,7 +676,7 @@ void ParameterLoader::_saveToEEPROM(void)
     if (_vehicle->firmwarePlugin()->isCapable(FirmwarePlugin::MavCmdPreflightStorageCapability)) {
         mavlink_message_t msg;
         mavlink_msg_command_long_pack(_mavlink->getSystemId(), _mavlink->getComponentId(), &msg, _vehicle->id(), 0, MAV_CMD_PREFLIGHT_STORAGE, 1, 1, -1, -1, -1, 0, 0, 0);
-        _vehicle->sendMessageOnLink(_vehicle->priorityLink(), msg);
+        _vehicle->sendMessageOnLink(_dedicatedLink, msg);
         qCDebug(ParameterLoaderLog) << "_saveToEEPROM";
     } else {
         qCDebug(ParameterLoaderLog) << "_saveToEEPROM skipped due to FirmwarePlugin::isCapable";
diff --git a/src/FactSystem/ParameterLoader.h b/src/FactSystem/ParameterLoader.h
index f4cbd6c..a46d433 100644
--- a/src/FactSystem/ParameterLoader.h
+++ b/src/FactSystem/ParameterLoader.h
@@ -127,6 +127,8 @@ private:
     FactMetaData::ValueType_t _mavTypeToFactType(MAV_PARAM_TYPE mavType);
     void _saveToEEPROM(void);
     void _checkInitialLoadComplete(void);
+
+    LinkInterface* _dedicatedLink; ///< Parameter protocol stays on this link
     
     /// First mapping is by component id
     /// Second mapping is parameter name, to Fact* in QVariant