Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Q
qgroundcontrol
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Valentin Platzgummer
qgroundcontrol
Commits
6bc50564
Commit
6bc50564
authored
Aug 09, 2013
by
tstellanova
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix pending parameter change check
parent
15355644
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
80 additions
and
82 deletions
+80
-82
QGCUASParamManager.cc
src/uas/QGCUASParamManager.cc
+1
-1
UASParameterCommsMgr.cc
src/uas/UASParameterCommsMgr.cc
+7
-4
UASParameterDataModel.cc
src/uas/UASParameterDataModel.cc
+39
-44
UASParameterDataModel.h
src/uas/UASParameterDataModel.h
+18
-22
QGCParamWidget.cc
src/ui/QGCParamWidget.cc
+15
-11
No files found.
src/uas/QGCUASParamManager.cc
View file @
6bc50564
...
...
@@ -26,7 +26,7 @@ QGCUASParamManager::QGCUASParamManager(UASInterface* uas, QWidget *parent) :
bool
QGCUASParamManager
::
getParameterValue
(
int
component
,
const
QString
&
parameter
,
QVariant
&
value
)
const
{
return
paramDataModel
->
getOnboardParam
eter
Value
(
component
,
parameter
,
value
);
return
paramDataModel
->
getOnboardParamValue
(
component
,
parameter
,
value
);
}
...
...
src/uas/UASParameterCommsMgr.cc
View file @
6bc50564
...
...
@@ -168,7 +168,6 @@ void UASParameterCommsMgr::resendReadWriteRequests()
// Re-request at maximum retransmissionBurstRequestSize parameters at once
// to prevent link flooding'
int
requestedReadCount
=
0
;
compIds
=
transmissionMissingPackets
.
keys
();
foreach
(
compId
,
compIds
)
{
// Request n parameters from this component (at maximum)
...
...
@@ -214,6 +213,10 @@ void UASParameterCommsMgr::resendReadWriteRequests()
transmissionActive
=
false
;
}
}
else
{
//restart the timer now that we've sent
setRetransmissionGuardEnabled
(
true
);
}
}
void
UASParameterCommsMgr
::
resetAfterListReceive
()
...
...
@@ -354,7 +357,7 @@ void UASParameterCommsMgr::setParameter(int component, QString parameterName, QV
}
QVariant
onboardVal
;
paramDataModel
->
getOnboardParam
eter
Value
(
component
,
parameterName
,
onboardVal
);
paramDataModel
->
getOnboardParamValue
(
component
,
parameterName
,
onboardVal
);
if
(
onboardVal
==
value
)
{
setParameterStatusMsg
(
tr
(
"REJ. %1 already %2"
).
arg
(
parameterName
).
arg
(
dblValue
),
ParamCommsStatusLevel_Warning
...
...
@@ -408,7 +411,7 @@ void UASParameterCommsMgr::receivedParameterUpdate(int uas, int compId, int para
Q_UNUSED
(
uas
);
//this object is assigned to one UAS only
//notify the data model that we have an updated param
paramDataModel
->
handleParam
eter
Update
(
compId
,
paramName
,
value
);
paramDataModel
->
handleParamUpdate
(
compId
,
paramName
,
value
);
// Missing packets list has to be instantiated for all components
if
(
!
transmissionMissingPackets
.
contains
(
compId
))
{
...
...
@@ -554,7 +557,7 @@ void UASParameterCommsMgr::sendPendingParameters()
{
// Iterate through all components, through all pending parameters and send them to UAS
int
parametersSent
=
0
;
QMap
<
int
,
QMap
<
QString
,
QVariant
>*>*
changedValues
=
paramDataModel
->
get
PendingParameter
s
();
QMap
<
int
,
QMap
<
QString
,
QVariant
>*>*
changedValues
=
paramDataModel
->
get
AllPendingParam
s
();
QMap
<
int
,
QMap
<
QString
,
QVariant
>*>::
iterator
i
;
for
(
i
=
changedValues
->
begin
();
i
!=
changedValues
->
end
();
++
i
)
{
// Iterate through the parameters of the component
...
...
src/uas/UASParameterDataModel.cc
View file @
6bc50564
...
...
@@ -18,53 +18,58 @@ UASParameterDataModel::UASParameterDataModel(QObject *parent) :
bool
UASParameterDataModel
::
checkParameterChanged
(
int
compId
,
const
QString
&
key
,
const
QVariant
&
value
)
bool
UASParameterDataModel
::
updatePendingParamWithValue
(
int
compId
,
QString
&
key
,
QVariant
&
value
)
{
bool
changed
=
true
;
bool
pending
=
true
;
//ensure we have this component in our onboard and pending lists already
addComponent
(
compId
);
QMap
<
QString
,
QVariant
>*
existParams
=
getOnbardParametersForComponent
(
compId
);
QMap
<
QString
,
QVariant
>*
existParams
=
getOnboardParamsForComponent
(
compId
);
if
(
existParams
->
contains
(
key
))
{
QVariant
existValue
=
existParams
->
value
(
key
);
if
(
existValue
==
value
)
{
changed
=
false
;
pending
=
false
;
}
}
return
changed
;
}
if
(
pending
)
{
setPendingParam
(
compId
,
key
,
value
);
}
else
{
removePendingParam
(
compId
,
key
);
}
bool
UASParameterDataModel
::
addPendingIfParameterChanged
(
int
componentId
,
QString
&
key
,
QVariant
&
value
)
return
pending
;
}
void
UASParameterDataModel
::
removePendingParam
(
int
compId
,
QString
&
key
)
{
bool
changed
=
checkParameterChanged
(
componentId
,
key
,
value
);
if
(
changed
)
{
setPendingParameter
(
componentId
,
key
,
value
);
QMap
<
QString
,
QVariant
>
*
params
=
getPendingParamsForComponent
(
compId
);
if
(
params
)
{
params
->
remove
(
key
);
}
return
changed
;
}
void
UASParameterDataModel
::
setPendingParam
eter
(
int
component
Id
,
QString
&
key
,
const
QVariant
&
value
)
void
UASParameterDataModel
::
setPendingParam
(
int
comp
Id
,
QString
&
key
,
const
QVariant
&
value
)
{
//ensure we have a placeholder map for this component
addComponent
(
comp
onent
Id
);
QMap
<
QString
,
QVariant
>
*
params
=
getPendingParam
etersForComponent
(
component
Id
);
addComponent
(
compId
);
QMap
<
QString
,
QVariant
>
*
params
=
getPendingParam
sForComponent
(
comp
Id
);
params
->
insert
(
key
,
value
);
}
void
UASParameterDataModel
::
setOnboardParam
eter
(
int
component
Id
,
QString
&
key
,
const
QVariant
&
value
)
void
UASParameterDataModel
::
setOnboardParam
(
int
comp
Id
,
QString
&
key
,
const
QVariant
&
value
)
{
//ensure we have a placeholder map for this component
addComponent
(
comp
onent
Id
);
QMap
<
QString
,
QVariant
>
*
params
=
getOnb
ardParametersForComponent
(
component
Id
);
addComponent
(
compId
);
QMap
<
QString
,
QVariant
>
*
params
=
getOnb
oardParamsForComponent
(
comp
Id
);
params
->
insert
(
key
,
value
);
}
void
UASParameterDataModel
::
setOnboardParam
eterWithType
(
int
component
Id
,
QString
&
key
,
QVariant
&
value
)
void
UASParameterDataModel
::
setOnboardParam
WithType
(
int
comp
Id
,
QString
&
key
,
QVariant
&
value
)
{
// switch ((int)onboardParameters.value(componentId)->value(key).type())
...
...
@@ -73,25 +78,25 @@ void UASParameterDataModel::setOnboardParameterWithType(int componentId, QString
case
QVariant
:
:
Int
:
{
QVariant
fixedValue
(
value
.
toInt
());
onboardParameters
.
value
(
comp
onent
Id
)
->
insert
(
key
,
fixedValue
);
onboardParameters
.
value
(
compId
)
->
insert
(
key
,
fixedValue
);
}
break
;
case
QVariant
:
:
UInt
:
{
QVariant
fixedValue
(
value
.
toUInt
());
onboardParameters
.
value
(
comp
onent
Id
)
->
insert
(
key
,
fixedValue
);
onboardParameters
.
value
(
compId
)
->
insert
(
key
,
fixedValue
);
}
break
;
case
QMetaType
:
:
Float
:
{
QVariant
fixedValue
(
value
.
toFloat
());
onboardParameters
.
value
(
comp
onent
Id
)
->
insert
(
key
,
fixedValue
);
onboardParameters
.
value
(
compId
)
->
insert
(
key
,
fixedValue
);
}
break
;
case
QMetaType
:
:
QChar
:
{
QVariant
fixedValue
(
QChar
((
unsigned
char
)
value
.
toUInt
()));
onboardParameters
.
value
(
comp
onent
Id
)
->
insert
(
key
,
fixedValue
);
onboardParameters
.
value
(
compId
)
->
insert
(
key
,
fixedValue
);
}
break
;
default:
...
...
@@ -111,7 +116,7 @@ void UASParameterDataModel::addComponent(int compId)
}
void
UASParameterDataModel
::
handleParam
eter
Update
(
int
compId
,
QString
&
key
,
QVariant
&
value
)
void
UASParameterDataModel
::
handleParamUpdate
(
int
compId
,
QString
&
key
,
QVariant
&
value
)
{
//verify that the value requested by the user matches the set value
//if it doesn't match, leave the pending parameter in the pending list!
...
...
@@ -128,13 +133,13 @@ void UASParameterDataModel::handleParameterUpdate(int compId, QString& key, QVar
}
}
setOnboardParam
eter
(
compId
,
key
,
value
);
setOnboardParam
(
compId
,
key
,
value
);
emit
parameterUpdated
(
compId
,
key
,
value
);
}
bool
UASParameterDataModel
::
getOnboardParam
eter
Value
(
int
componentId
,
const
QString
&
key
,
QVariant
&
value
)
const
bool
UASParameterDataModel
::
getOnboardParamValue
(
int
componentId
,
const
QString
&
key
,
QVariant
&
value
)
const
{
if
(
onboardParameters
.
contains
(
componentId
))
{
...
...
@@ -147,14 +152,13 @@ bool UASParameterDataModel::getOnboardParameterValue(int componentId, const QStr
return
false
;
}
void
UASParameterDataModel
::
forgetAllOnboardParam
eter
s
()
void
UASParameterDataModel
::
forgetAllOnboardParams
()
{
onboardParameters
.
clear
();
}
void
UASParameterDataModel
::
readUpdateParam
eter
sFromStream
(
QTextStream
&
stream
)
void
UASParameterDataModel
::
readUpdateParamsFromStream
(
QTextStream
&
stream
)
{
bool
userWarned
=
false
;
while
(
!
stream
.
atEnd
())
{
...
...
@@ -165,7 +169,7 @@ void UASParameterDataModel::readUpdateParametersFromStream( QTextStream& stream)
if
(
wpParams
.
size
()
==
5
)
{
// Only load parameters for right mav
if
(
!
userWarned
&&
(
uasId
!=
lineMavId
))
{
//TODO warn the user somehow
//TODO warn the user somehow
??
QString
msg
=
tr
(
"The parameters in the stream have been saved from system %1, but the currently selected system has the ID %2."
).
arg
(
lineMavId
).
arg
(
uasId
);
// MainWindow::instance()->showCriticalMessage(
// tr("Parameter loading warning"),
...
...
@@ -199,26 +203,17 @@ void UASParameterDataModel::readUpdateParametersFromStream( QTextStream& stream)
switch
(
paramType
)
{
case
MAV_PARAM_TYPE_REAL32
:
//receivedParameterUpdate(wpParams.at(0).toInt(), componentId, key, valStr.toFloat());
setPendingParameter
(
componentId
,
key
,
QVariant
(
valStr
.
toFloat
()));
//setParameter(componentId, key, valStr.toFloat());
setPendingParam
(
componentId
,
key
,
QVariant
(
valStr
.
toFloat
()));
break
;
case
MAV_PARAM_TYPE_UINT32
:
//receivedParameterUpdate(wpParams.at(0).toInt(), componentId, key, valStr.toUInt());
setPendingParameter
(
componentId
,
key
,
QVariant
(
valStr
.
toUInt
()));
//setParameter(componentId, key, QVariant(valStr.toUInt()));
setPendingParam
(
componentId
,
key
,
QVariant
(
valStr
.
toUInt
()));
break
;
case
MAV_PARAM_TYPE_INT32
:
//receivedParameterUpdate(wpParams.at(0).toInt(), componentId, key, valStr.toInt());
setPendingParameter
(
componentId
,
key
,
QVariant
(
valStr
.
toInt
()));
//setParameter(componentId, key, QVariant(valStr.toInt()));
setPendingParam
(
componentId
,
key
,
QVariant
(
valStr
.
toInt
()));
break
;
default:
qDebug
()
<<
"FAILED LOADING PARAM"
<<
key
<<
"UNKNOWN DATA TYPE"
;
}
//TODO update display
}
...
...
@@ -228,7 +223,7 @@ void UASParameterDataModel::readUpdateParametersFromStream( QTextStream& stream)
}
void
UASParameterDataModel
::
writeOnboardParam
eter
sToStream
(
QTextStream
&
stream
,
const
QString
&
name
)
void
UASParameterDataModel
::
writeOnboardParamsToStream
(
QTextStream
&
stream
,
const
QString
&
name
)
{
stream
<<
"# Onboard parameters for system "
<<
name
<<
"
\n
"
;
stream
<<
"#
\n
"
;
...
...
src/uas/UASParameterDataModel.h
View file @
6bc50564
...
...
@@ -35,55 +35,51 @@ public:
virtual
void
addComponent
(
int
compId
);
/** @brief Write a new pending parameter value that may be eventually sent to the UAS */
virtual
void
setPendingParameter
(
int
componentId
,
QString
&
key
,
const
QVariant
&
value
);
virtual
void
setOnboardParameter
(
int
componentId
,
QString
&
key
,
const
QVariant
&
value
);
virtual
void
setPendingParam
(
int
componentId
,
QString
&
key
,
const
QVariant
&
value
);
virtual
void
removePendingParam
(
int
compId
,
QString
&
key
);
/** @brief Save the onboard parameter with a the type specified in the QVariant as fixed */
virtual
void
setOnboardParam
eter
WithType
(
int
componentId
,
QString
&
key
,
QVariant
&
value
);
virtual
void
setOnboardParamWithType
(
int
componentId
,
QString
&
key
,
QVariant
&
value
);
/** @brief clears every parameter for every loaded component */
virtual
void
forgetAllOnboardParameters
();
/**
* @return true if the given value for the parameter is different from the existing value
*/
virtual
bool
checkParameterChanged
(
int
componentId
,
const
QString
&
key
,
const
QVariant
&
value
);
virtual
void
forgetAllOnboardParams
();
/** @brief add this parameter to pending list iff it has changed from onboard value
* @return true if the parameter
has changed
* @return true if the parameter
is now pending
*/
virtual
bool
addPendingIfParameterChanged
(
int
componentId
,
QString
&
key
,
QVariant
&
value
);
virtual
bool
updatePendingParamWithValue
(
int
componentId
,
QString
&
key
,
QVariant
&
value
);
virtual
void
handleParamUpdate
(
int
componentId
,
QString
&
key
,
QVariant
&
value
);
virtual
bool
getOnboardParamValue
(
int
componentId
,
const
QString
&
key
,
QVariant
&
value
)
const
;
virtual
void
handleParameterUpdate
(
int
componentId
,
QString
&
key
,
QVariant
&
value
);
virtual
bool
getOnboardParameterValue
(
int
componentId
,
const
QString
&
key
,
QVariant
&
value
)
const
;
QMap
<
QString
,
QVariant
>*
getPendingParametersForComponent
(
int
componentId
)
{
QMap
<
QString
,
QVariant
>*
getPendingParamsForComponent
(
int
componentId
)
{
return
pendingParameters
.
value
(
componentId
);
}
QMap
<
QString
,
QVariant
>*
getOnb
ardParameter
sForComponent
(
int
componentId
)
{
QMap
<
QString
,
QVariant
>*
getOnb
oardParam
sForComponent
(
int
componentId
)
{
return
onboardParameters
.
value
(
componentId
);
}
QMap
<
int
,
QMap
<
QString
,
QVariant
>*
>*
get
PendingParameter
s
()
{
QMap
<
int
,
QMap
<
QString
,
QVariant
>*
>*
get
AllPendingParam
s
()
{
return
&
pendingParameters
;
}
QMap
<
int
,
QMap
<
QString
,
QVariant
>*
>*
get
OnboardParameter
s
()
{
QMap
<
int
,
QMap
<
QString
,
QVariant
>*
>*
get
AllOnboardParam
s
()
{
return
&
onboardParameters
;
}
virtual
void
writeOnboardParam
eter
sToStream
(
QTextStream
&
stream
,
const
QString
&
uasName
);
virtual
void
readUpdateParam
eter
sFromStream
(
QTextStream
&
stream
);
virtual
void
writeOnboardParamsToStream
(
QTextStream
&
stream
,
const
QString
&
uasName
);
virtual
void
readUpdateParamsFromStream
(
QTextStream
&
stream
);
virtual
void
loadParamMetaInfoFromStream
(
QTextStream
&
stream
);
void
setUASID
(
int
anId
)
{
this
->
uasId
=
anId
;
}
protected:
virtual
void
setOnboardParam
(
int
componentId
,
QString
&
key
,
const
QVariant
&
value
);
signals:
/** @brief We've received an update of a parameter's value */
...
...
src/ui/QGCParamWidget.cc
View file @
6bc50564
...
...
@@ -213,7 +213,7 @@ void QGCParamWidget::handleParameterListUpToDate()
//rewrite the component item tree after receiving the full list
QMap
<
int
,
QMap
<
QString
,
QVariant
>*>::
iterator
i
;
QMap
<
int
,
QMap
<
QString
,
QVariant
>*>*
onboardParams
=
paramDataModel
->
get
OnboardParameter
s
();
QMap
<
int
,
QMap
<
QString
,
QVariant
>*>*
onboardParams
=
paramDataModel
->
get
AllOnboardParam
s
();
for
(
i
=
onboardParams
->
begin
();
i
!=
onboardParams
->
end
();
++
i
)
{
int
compId
=
i
.
key
();
...
...
@@ -352,13 +352,12 @@ void QGCParamWidget::parameterItemChanged(QTreeWidgetItem* current, int column)
QString
key
=
current
->
data
(
0
,
Qt
::
DisplayRole
).
toString
();
QVariant
value
=
current
->
data
(
1
,
Qt
::
DisplayRole
);
bool
changed
=
paramDataModel
->
addPendingIfParameterChanged
(
componentId
,
key
,
value
);
// If the value was numerically changed, display it differently
if
(
changed
)
{
bool
pending
=
paramDataModel
->
updatePendingParamWithValue
(
componentId
,
key
,
value
);
// If the value will result in an update
if
(
pending
)
{
// Set parameter on changed list to be transmitted to MAV
statusLabel
->
setText
(
tr
(
"
Transmit pend.
%1:%2: %3"
).
arg
(
componentId
).
arg
(
key
).
arg
(
value
.
toFloat
(),
5
,
'f'
,
1
,
QChar
(
' '
)));
statusLabel
->
setText
(
tr
(
"
Pending:
%1:%2: %3"
).
arg
(
componentId
).
arg
(
key
).
arg
(
value
.
toFloat
(),
5
,
'f'
,
1
,
QChar
(
' '
)));
if
(
current
==
tree
->
currentItem
())
{
//need to unset current item to clear highlighting (green by default)
...
...
@@ -366,9 +365,14 @@ void QGCParamWidget::parameterItemChanged(QTreeWidgetItem* current, int column)
}
current
->
setBackground
(
0
,
QBrush
(
QColor
(
QGC
::
colorOrange
)));
current
->
setBackground
(
1
,
QBrush
(
QColor
(
QGC
::
colorOrange
)));
tree
->
update
();
}
else
{
QMap
<
QString
,
QVariant
>*
pendingParams
=
paramDataModel
->
getOnboardParamsForComponent
(
componentId
);
int
pendingCount
=
pendingParams
->
count
();
statusLabel
->
setText
(
tr
(
"Pending items: %1"
).
arg
(
pendingCount
));
current
->
setBackground
(
0
,
Qt
::
NoBrush
);
current
->
setBackground
(
1
,
Qt
::
NoBrush
);
}
}
}
...
...
@@ -385,7 +389,7 @@ void QGCParamWidget::saveParametersToFile()
}
QTextStream
outstream
(
&
file
);
paramDataModel
->
writeOnboardParam
eter
sToStream
(
outstream
,
mav
->
getUASName
());
paramDataModel
->
writeOnboardParamsToStream
(
outstream
,
mav
->
getUASName
());
file
.
close
();
}
...
...
@@ -399,7 +403,7 @@ void QGCParamWidget::loadParametersFromFile()
return
;
QTextStream
in
(
&
file
);
paramDataModel
->
readUpdateParam
eter
sFromStream
(
in
);
paramDataModel
->
readUpdateParamsFromStream
(
in
);
file
.
close
();
}
...
...
@@ -431,7 +435,7 @@ void QGCParamWidget::writeParameters()
int
changedParamCount
=
0
;
QMap
<
int
,
QMap
<
QString
,
QVariant
>*>::
iterator
i
;
QMap
<
int
,
QMap
<
QString
,
QVariant
>*>*
changedValues
=
paramDataModel
->
get
PendingParameter
s
();
QMap
<
int
,
QMap
<
QString
,
QVariant
>*>*
changedValues
=
paramDataModel
->
get
AllPendingParam
s
();
for
(
i
=
changedValues
->
begin
();
(
i
!=
changedValues
->
end
())
&&
(
0
==
changedParamCount
);
++
i
)
{
// Iterate through the pending parameters of the component, break on the first changed parameter
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment