mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-03-01 18:29:16 +01:00
Merge branch 'next' into Mathieu/OP-958_HID_plugin_basic_cleanup
This commit is contained in:
commit
660a175a53
7
Makefile
7
Makefile
@ -440,7 +440,7 @@ sim_osx_%: uavobjects_flight
|
|||||||
all_ground: openpilotgcs
|
all_ground: openpilotgcs
|
||||||
|
|
||||||
# Convenience target for the GCS
|
# Convenience target for the GCS
|
||||||
.PHONY: gcs gcs_clean gcs_all_clean
|
.PHONY: gcs gcs_clean
|
||||||
gcs: openpilotgcs
|
gcs: openpilotgcs
|
||||||
gcs_clean: openpilotgcs_clean
|
gcs_clean: openpilotgcs_clean
|
||||||
|
|
||||||
@ -563,7 +563,7 @@ $$(UAVO_COLLECTION_DIR)/$(1)/uavohash: $$(UAVO_COLLECTION_DIR)/$(1)/uavo-xml
|
|||||||
# The sed bit truncates the UAVO hash to 16 hex digits
|
# The sed bit truncates the UAVO hash to 16 hex digits
|
||||||
$$(V1) $$(VERSION_INFO) \
|
$$(V1) $$(VERSION_INFO) \
|
||||||
--uavodir=$$(UAVO_COLLECTION_DIR)/$(1)/uavo-xml/shared/uavobjectdefinition \
|
--uavodir=$$(UAVO_COLLECTION_DIR)/$(1)/uavo-xml/shared/uavobjectdefinition \
|
||||||
--format='$$$${UAVOSHA1TXT}' | \
|
--format='$$$${UAVO_HASH}' | \
|
||||||
$(SED) -e 's|\(................\).*|\1|' > $$@
|
$(SED) -e 's|\(................\).*|\1|' > $$@
|
||||||
|
|
||||||
$$(V0) @$(ECHO) " UAVOHASH $(1) ->" $$$$(cat $$(UAVO_COLLECTION_DIR)/$(1)/uavohash)
|
$$(V0) @$(ECHO) " UAVOHASH $(1) ->" $$$$(cat $$(UAVO_COLLECTION_DIR)/$(1)/uavohash)
|
||||||
@ -764,7 +764,7 @@ package: all_fw all_ground uavobjects_matlab
|
|||||||
$(V1) [ ! -d "$(PACKAGE_DIR)" ] || $(RM) -rf "$(PACKAGE_DIR)"
|
$(V1) [ ! -d "$(PACKAGE_DIR)" ] || $(RM) -rf "$(PACKAGE_DIR)"
|
||||||
$(V1) $(MKDIR) -p "$(PACKAGE_DIR)/firmware"
|
$(V1) $(MKDIR) -p "$(PACKAGE_DIR)/firmware"
|
||||||
$(foreach fw_targ, $(PACKAGE_FW_TARGETS), $(call COPY_FW_FILES,$(fw_targ),.opfw,.opfw))
|
$(foreach fw_targ, $(PACKAGE_FW_TARGETS), $(call COPY_FW_FILES,$(fw_targ),.opfw,.opfw))
|
||||||
$(foreach fw_targ, $(PACKAGE_ELF_TARGETS), $(call COPY_FW_FILES,$(fw_targ),.elf,))
|
$(foreach fw_targ, $(PACKAGE_ELF_TARGETS), $(call COPY_FW_FILES,$(fw_targ),.elf,.elf))
|
||||||
$(MAKE) --no-print-directory -C $(ROOT_DIR)/package --file=$(UNAME).mk $@
|
$(MAKE) --no-print-directory -C $(ROOT_DIR)/package --file=$(UNAME).mk $@
|
||||||
|
|
||||||
##############################
|
##############################
|
||||||
@ -946,7 +946,6 @@ help:
|
|||||||
@$(ECHO) " gcs - Build the Ground Control System (GCS) application (debug|release)"
|
@$(ECHO) " gcs - Build the Ground Control System (GCS) application (debug|release)"
|
||||||
@$(ECHO) " gcs_clean - Remove the Ground Control System (GCS) application (debug|release)"
|
@$(ECHO) " gcs_clean - Remove the Ground Control System (GCS) application (debug|release)"
|
||||||
@$(ECHO) " Supported build configurations: GCS_BUILD_CONF=debug|release (default is $(GCS_BUILD_CONF))"
|
@$(ECHO) " Supported build configurations: GCS_BUILD_CONF=debug|release (default is $(GCS_BUILD_CONF))"
|
||||||
@$(ECHO) " gcs_all_clean - Remove the Ground Control System (GCS) application (all build confgurations)"
|
|
||||||
@$(ECHO)
|
@$(ECHO)
|
||||||
@$(ECHO) " [AndroidGCS]"
|
@$(ECHO) " [AndroidGCS]"
|
||||||
@$(ECHO) " androidgcs - Build the Android Ground Control System (GCS) application"
|
@$(ECHO) " androidgcs - Build the Android Ground Control System (GCS) application"
|
||||||
|
@ -1185,7 +1185,7 @@ static void settingsUpdatedCb(UAVObjEvent *ev)
|
|||||||
AttitudeSettingsGet(&attitudeSettings);
|
AttitudeSettingsGet(&attitudeSettings);
|
||||||
|
|
||||||
// Calculate accel filter alpha, in the same way as for gyro data in stabilization module.
|
// Calculate accel filter alpha, in the same way as for gyro data in stabilization module.
|
||||||
const float fakeDt = 0.0025f;
|
const float fakeDt = 0.0015f;
|
||||||
if (attitudeSettings.AccelTau < 0.0001f) {
|
if (attitudeSettings.AccelTau < 0.0001f) {
|
||||||
accel_alpha = 0; // not trusting this to resolve to 0
|
accel_alpha = 0; // not trusting this to resolve to 0
|
||||||
accel_filter_enabled = false;
|
accel_filter_enabled = false;
|
||||||
|
@ -30,7 +30,6 @@
|
|||||||
/**
|
/**
|
||||||
* We have 100 bytes for the whole description.
|
* We have 100 bytes for the whole description.
|
||||||
*
|
*
|
||||||
*
|
|
||||||
* Structure is:
|
* Structure is:
|
||||||
* 4 bytes: header: "OpFw".
|
* 4 bytes: header: "OpFw".
|
||||||
* 4 bytes: GIT commit tag (short version of SHA1).
|
* 4 bytes: GIT commit tag (short version of SHA1).
|
||||||
@ -66,6 +65,6 @@ const struct fw_version_info fw_version_blob __attribute__((used)) __attribute__
|
|||||||
.board_type = ${BOARD_TYPE},
|
.board_type = ${BOARD_TYPE},
|
||||||
.board_revision = ${BOARD_REVISION},
|
.board_revision = ${BOARD_REVISION},
|
||||||
.commit_tag_name = "${FWTAG}",
|
.commit_tag_name = "${FWTAG}",
|
||||||
.sha1sum = { ${SHA1} },
|
.sha1sum = { ${IMAGE_HASH_ARRAY} },
|
||||||
.uavosha1 = { ${UAVOSHA1} },
|
.uavosha1 = { ${UAVO_HASH_ARRAY} },
|
||||||
};
|
};
|
||||||
|
@ -27,22 +27,102 @@ VersionInfo::VersionInfo()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString VersionInfo::origin()
|
||||||
|
{
|
||||||
|
return "${ORIGIN}";
|
||||||
|
}
|
||||||
|
|
||||||
QString VersionInfo::revision()
|
QString VersionInfo::revision()
|
||||||
{
|
{
|
||||||
return "${REVISION}";
|
return "${REVISION}";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString VersionInfo::hash()
|
||||||
|
{
|
||||||
|
return "${HASH}";
|
||||||
|
}
|
||||||
|
|
||||||
|
QString VersionInfo::uavoHash()
|
||||||
|
{
|
||||||
|
return "${UAVO_HASH}";
|
||||||
|
}
|
||||||
|
|
||||||
|
QString VersionInfo::uavoHashArray()
|
||||||
|
{
|
||||||
|
return "{ ${UAVO_HASH_ARRAY} }";
|
||||||
|
}
|
||||||
|
|
||||||
|
QString VersionInfo::label()
|
||||||
|
{
|
||||||
|
return "${LABEL}";
|
||||||
|
}
|
||||||
|
|
||||||
|
QString VersionInfo::tag()
|
||||||
|
{
|
||||||
|
return "${TAG}";
|
||||||
|
}
|
||||||
|
|
||||||
|
QString VersionInfo::tagOrBranch()
|
||||||
|
{
|
||||||
|
return "${TAG_OR_BRANCH}";
|
||||||
|
}
|
||||||
|
|
||||||
|
QString VersionInfo::tagOrHash8()
|
||||||
|
{
|
||||||
|
return "${TAG_OR_HASH8}";
|
||||||
|
}
|
||||||
|
|
||||||
|
QString VersionInfo::hash8()
|
||||||
|
{
|
||||||
|
return "${HASH8}";
|
||||||
|
}
|
||||||
|
|
||||||
|
QString VersionInfo::fwTag()
|
||||||
|
{
|
||||||
|
return "${FWTAG}";
|
||||||
|
}
|
||||||
|
|
||||||
|
QString VersionInfo::unixTime()
|
||||||
|
{
|
||||||
|
return "${UNIXTIME}";
|
||||||
|
}
|
||||||
|
|
||||||
|
QString VersionInfo::dateTime()
|
||||||
|
{
|
||||||
|
return "${DATETIME}";
|
||||||
|
}
|
||||||
|
|
||||||
|
QString VersionInfo::date()
|
||||||
|
{
|
||||||
|
return "${DATE}";
|
||||||
|
}
|
||||||
|
|
||||||
|
QString VersionInfo::day()
|
||||||
|
{
|
||||||
|
return "${DAY}";
|
||||||
|
}
|
||||||
|
|
||||||
|
QString VersionInfo::month()
|
||||||
|
{
|
||||||
|
return "${MONTH}";
|
||||||
|
}
|
||||||
|
|
||||||
QString VersionInfo::year()
|
QString VersionInfo::year()
|
||||||
{
|
{
|
||||||
return "${YEAR}";
|
return "${YEAR}";
|
||||||
}
|
}
|
||||||
|
|
||||||
QString VersionInfo::origin()
|
QString VersionInfo::hour()
|
||||||
{
|
{
|
||||||
return "${ORIGIN}";
|
return "${HOUR}";
|
||||||
}
|
}
|
||||||
|
|
||||||
QString VersionInfo::uavoHash()
|
QString VersionInfo::minute()
|
||||||
{
|
{
|
||||||
return "{ ${UAVOSHA1} }";
|
return "${MINUTE}";
|
||||||
|
}
|
||||||
|
|
||||||
|
QString VersionInfo::dirty()
|
||||||
|
{
|
||||||
|
return "${DIRTY}";
|
||||||
}
|
}
|
||||||
|
@ -27,12 +27,40 @@
|
|||||||
|
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @class VersionInfo
|
||||||
|
* @brief Library class to provide version info information extracted from a git repository.
|
||||||
|
*
|
||||||
|
* Class static members return read-only strings extracted from a git repository at compile time.
|
||||||
|
* The content is generated by the version-info.py utility using template.
|
||||||
|
*
|
||||||
|
* @note If repository or git utility is unavailable, strings can be empty or be "None".
|
||||||
|
* So do not assume they have some particular format when used, use them as strings only.
|
||||||
|
*
|
||||||
|
* More info: http://wiki.openpilot.org/display/Doc/Building+and+Packaging+Overview
|
||||||
|
*/
|
||||||
class VersionInfo {
|
class VersionInfo {
|
||||||
public:
|
public:
|
||||||
static QString revision();
|
|
||||||
static QString year();
|
|
||||||
static QString origin();
|
static QString origin();
|
||||||
|
static QString revision();
|
||||||
|
static QString hash();
|
||||||
static QString uavoHash();
|
static QString uavoHash();
|
||||||
|
static QString uavoHashArray();
|
||||||
|
static QString label();
|
||||||
|
static QString tag();
|
||||||
|
static QString tagOrBranch();
|
||||||
|
static QString tagOrHash8();
|
||||||
|
static QString hash8();
|
||||||
|
static QString fwTag();
|
||||||
|
static QString unixTime();
|
||||||
|
static QString dateTime();
|
||||||
|
static QString date();
|
||||||
|
static QString day();
|
||||||
|
static QString month();
|
||||||
|
static QString year();
|
||||||
|
static QString hour();
|
||||||
|
static QString minute();
|
||||||
|
static QString dirty();
|
||||||
private:
|
private:
|
||||||
VersionInfo();
|
VersionInfo();
|
||||||
};
|
};
|
||||||
|
@ -234,15 +234,15 @@ void ConfigPipXtremeWidget::updateStatus(UAVObject *object)
|
|||||||
UAVObjectField *descField = object->getField("Description");
|
UAVObjectField *descField = object->getField("Description");
|
||||||
if (descField) {
|
if (descField) {
|
||||||
/*
|
/*
|
||||||
* This looks like a binary with a description at the end
|
* This looks like a binary with a description at the end:
|
||||||
* 4 bytes: header: "OpFw"
|
* 4 bytes: header: "OpFw".
|
||||||
* 4 bytes: git commit hash (short version of SHA1)
|
* 4 bytes: GIT commit tag (short version of SHA1).
|
||||||
* 4 bytes: Unix timestamp of last git commit
|
* 4 bytes: Unix timestamp of compile time.
|
||||||
* 2 bytes: target platform. Should follow same rule as BOARD_TYPE and BOARD_REVISION in board define files.
|
* 2 bytes: target platform. Should follow same rule as BOARD_TYPE and BOARD_REVISION in board define files.
|
||||||
* 26 bytes: commit tag if it is there, otherwise "Unreleased". Zero-padded
|
* 26 bytes: commit tag if it is there, otherwise branch name. '-dirty' may be added if needed. Zero-padded.
|
||||||
* ---- 40 bytes limit ---
|
|
||||||
* 20 bytes: SHA1 sum of the firmware.
|
* 20 bytes: SHA1 sum of the firmware.
|
||||||
* 40 bytes: free for now.
|
* 20 bytes: SHA1 sum of the uavo definitions.
|
||||||
|
* 20 bytes: free for now.
|
||||||
*/
|
*/
|
||||||
char buf[OPLinkStatus::DESCRIPTION_NUMELEM];
|
char buf[OPLinkStatus::DESCRIPTION_NUMELEM];
|
||||||
for (unsigned int i = 0; i < 26; ++i) {
|
for (unsigned int i = 0; i < 26; ++i) {
|
||||||
|
@ -75,31 +75,10 @@ AuthorsDialog::AuthorsDialog(QWidget *parent)
|
|||||||
// : This gets conditionally inserted as argument %8 into the description string.
|
// : This gets conditionally inserted as argument %8 into the description string.
|
||||||
ideRev = tr("From revision %1<br/>").arg(VersionInfo::revision().left(10));
|
ideRev = tr("From revision %1<br/>").arg(VersionInfo::revision().left(10));
|
||||||
|
|
||||||
QString uavoHashStr;
|
|
||||||
if (VersionInfo::uavoHash().length() > 15) {
|
|
||||||
// : This gets conditionally inserted as argument %11 into the description string.
|
|
||||||
QByteArray uavoHashArray;
|
|
||||||
QString uavoHash = VersionInfo::uavoHash();
|
|
||||||
uavoHash.chop(2);
|
|
||||||
uavoHash.remove(0, 2);
|
|
||||||
uavoHash = uavoHash.trimmed();
|
|
||||||
bool ok;
|
|
||||||
foreach(QString str, uavoHash.split(",")) {
|
|
||||||
uavoHashArray.append(str.toInt(&ok, 16));
|
|
||||||
}
|
|
||||||
QString gcsUavoHashStr;
|
|
||||||
foreach(char i, uavoHashArray) {
|
|
||||||
gcsUavoHashStr.append(QString::number(i, 16).right(2));
|
|
||||||
}
|
|
||||||
uavoHashStr = gcsUavoHashStr;
|
|
||||||
} else {
|
|
||||||
uavoHashStr = "N/A";
|
|
||||||
}
|
|
||||||
|
|
||||||
const QString description = tr(
|
const QString description = tr(
|
||||||
"<h3>OpenPilot Ground Control Station</h3>"
|
"<h3>OpenPilot Ground Control Station</h3>"
|
||||||
"GCS Revision: <b>%1</b><br/>"
|
"GCS Revision: <b>%1</b><br/>"
|
||||||
"UAVO Hash: %2<br/>"
|
"UAVO Hash: <b>%2</b><br/>"
|
||||||
"<br/>"
|
"<br/>"
|
||||||
"Built from %3<br/>"
|
"Built from %3<br/>"
|
||||||
"Built on %4 at %5<br/>"
|
"Built on %4 at %5<br/>"
|
||||||
@ -117,7 +96,7 @@ AuthorsDialog::AuthorsDialog(QWidget *parent)
|
|||||||
"PARTICULAR PURPOSE.</small>"
|
"PARTICULAR PURPOSE.</small>"
|
||||||
).arg(
|
).arg(
|
||||||
VersionInfo::revision().left(60), // %1
|
VersionInfo::revision().left(60), // %1
|
||||||
uavoHashStr, // %2
|
VersionInfo::uavoHash().left(8), // %2
|
||||||
VersionInfo::origin(), // $3
|
VersionInfo::origin(), // $3
|
||||||
QLatin1String(__DATE__), // %4
|
QLatin1String(__DATE__), // %4
|
||||||
QLatin1String(__TIME__), // %5
|
QLatin1String(__TIME__), // %5
|
||||||
|
@ -59,31 +59,10 @@ VersionDialog::VersionDialog(QWidget *parent)
|
|||||||
QGridLayout *layout = new QGridLayout(this);
|
QGridLayout *layout = new QGridLayout(this);
|
||||||
layout->setSizeConstraint(QLayout::SetFixedSize);
|
layout->setSizeConstraint(QLayout::SetFixedSize);
|
||||||
|
|
||||||
QString uavoHashStr;
|
|
||||||
if (VersionInfo::uavoHash().length() > 15) {
|
|
||||||
// : This gets conditionally inserted as argument %11 into the description string.
|
|
||||||
QByteArray uavoHashArray;
|
|
||||||
QString uavoHash = VersionInfo::uavoHash();
|
|
||||||
uavoHash.chop(2);
|
|
||||||
uavoHash.remove(0, 2);
|
|
||||||
uavoHash = uavoHash.trimmed();
|
|
||||||
bool ok;
|
|
||||||
foreach(QString str, uavoHash.split(",")) {
|
|
||||||
uavoHashArray.append(str.toInt(&ok, 16));
|
|
||||||
}
|
|
||||||
QString gcsUavoHashStr;
|
|
||||||
foreach(char i, uavoHashArray) {
|
|
||||||
gcsUavoHashStr.append(QString::number(i, 16).right(2));
|
|
||||||
}
|
|
||||||
uavoHashStr = gcsUavoHashStr;
|
|
||||||
} else {
|
|
||||||
uavoHashStr = "N/A";
|
|
||||||
}
|
|
||||||
|
|
||||||
const QString description = tr(
|
const QString description = tr(
|
||||||
"<h3>OpenPilot Ground Control Station</h3>"
|
"<h3>OpenPilot Ground Control Station</h3>"
|
||||||
"GCS Revision: <b>%1</b><br/>"
|
"GCS Revision: <b>%1</b><br/>"
|
||||||
"UAVO Hash: %2<br/>"
|
"UAVO Hash: <b>%2</b><br/>"
|
||||||
"<br/>"
|
"<br/>"
|
||||||
"Built from %3<br/>"
|
"Built from %3<br/>"
|
||||||
"Built on %4 at %5<br/>"
|
"Built on %4 at %5<br/>"
|
||||||
@ -101,7 +80,7 @@ VersionDialog::VersionDialog(QWidget *parent)
|
|||||||
"PARTICULAR PURPOSE.</small>"
|
"PARTICULAR PURPOSE.</small>"
|
||||||
).arg(
|
).arg(
|
||||||
VersionInfo::revision().left(60), // %1
|
VersionInfo::revision().left(60), // %1
|
||||||
uavoHashStr, // %2
|
VersionInfo::uavoHash().left(8), // %2
|
||||||
VersionInfo::origin(), // $3
|
VersionInfo::origin(), // $3
|
||||||
QLatin1String(__DATE__), // %4
|
QLatin1String(__DATE__), // %4
|
||||||
QLatin1String(__TIME__), // %5
|
QLatin1String(__TIME__), // %5
|
||||||
|
@ -187,6 +187,12 @@ color: rgba(0, 0, 0, 128);
|
|||||||
</property>
|
</property>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QPushButton" name="startButton">
|
<widget class="QPushButton" name="startButton">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string>Request update</string>
|
<string>Request update</string>
|
||||||
</property>
|
</property>
|
||||||
@ -208,7 +214,7 @@ color: rgba(0, 0, 0, 128);
|
|||||||
</property>
|
</property>
|
||||||
<property name="sizeHint" stdset="0">
|
<property name="sizeHint" stdset="0">
|
||||||
<size>
|
<size>
|
||||||
<width>10</width>
|
<width>5</width>
|
||||||
<height>20</height>
|
<height>20</height>
|
||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
@ -219,6 +225,12 @@ color: rgba(0, 0, 0, 128);
|
|||||||
<property name="enabled">
|
<property name="enabled">
|
||||||
<bool>false</bool>
|
<bool>false</bool>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string>Send update</string>
|
<string>Send update</string>
|
||||||
</property>
|
</property>
|
||||||
@ -347,22 +359,6 @@ color: rgba(0, 0, 0, 128);
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
|
||||||
<spacer name="horizontalSpacer_2">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sizeType">
|
|
||||||
<enum>QSizePolicy::Preferred</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sizeHint" stdset="0">
|
|
||||||
<size>
|
|
||||||
<width>10</width>
|
|
||||||
<height>20</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</spacer>
|
|
||||||
</item>
|
|
||||||
<item>
|
<item>
|
||||||
<spacer name="horizontalSpacer_6">
|
<spacer name="horizontalSpacer_6">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
@ -390,7 +386,7 @@ color: rgba(0, 0, 0, 128);
|
|||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="horizontalSpacer_8">
|
<spacer name="horizontalSpacer_3">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Horizontal</enum>
|
<enum>Qt::Horizontal</enum>
|
||||||
</property>
|
</property>
|
||||||
@ -399,27 +395,44 @@ color: rgba(0, 0, 0, 128);
|
|||||||
</property>
|
</property>
|
||||||
<property name="sizeHint" stdset="0">
|
<property name="sizeHint" stdset="0">
|
||||||
<size>
|
<size>
|
||||||
<width>5</width>
|
<width>10</width>
|
||||||
<height>20</height>
|
<height>20</height>
|
||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
</spacer>
|
</spacer>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item alignment="Qt::AlignRight">
|
||||||
<spacer name="horizontalSpacer_3">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sizeHint" stdset="0">
|
|
||||||
<size>
|
|
||||||
<width>40</width>
|
|
||||||
<height>20</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</spacer>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QPushButton" name="buttonClearLog">
|
<widget class="QPushButton" name="buttonClearLog">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>140</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="sizeIncrement">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="baseSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="autoFillBackground">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Clear Log</string>
|
<string>Clear Log</string>
|
||||||
</property>
|
</property>
|
||||||
@ -466,6 +479,12 @@ color: rgba(0, 0, 0, 128);
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
|
<tabstops>
|
||||||
|
<tabstop>startButton</tabstop>
|
||||||
|
<tabstop>stopButton</tabstop>
|
||||||
|
<tabstop>buttonClearLog</tabstop>
|
||||||
|
<tabstop>textBrowser</tabstop>
|
||||||
|
</tabstops>
|
||||||
<resources/>
|
<resources/>
|
||||||
<connections/>
|
<connections/>
|
||||||
</ui>
|
</ui>
|
||||||
|
@ -2170,21 +2170,30 @@ bool OPMapGadgetWidget::getUAVPosition(double &latitude, double &longitude, doub
|
|||||||
|
|
||||||
Q_ASSERT(obm != NULL);
|
Q_ASSERT(obm != NULL);
|
||||||
|
|
||||||
|
PositionActual *positionActual = PositionActual::GetInstance(obm);
|
||||||
|
Q_ASSERT(positionActual != NULL);
|
||||||
|
PositionActual::DataFields positionActualData = positionActual->getData();
|
||||||
|
if (positionActualData.North == 0 && positionActualData.East == 0 && positionActualData.Down == 0) {
|
||||||
|
GPSPosition *gpsPositionObj = GPSPosition::GetInstance(obm);
|
||||||
|
Q_ASSERT(gpsPositionObj);
|
||||||
|
|
||||||
|
GPSPosition::DataFields gpsPositionData = gpsPositionObj->getData();
|
||||||
|
latitude = gpsPositionData.Latitude / 1.0e7;
|
||||||
|
longitude = gpsPositionData.Longitude / 1.0e7;
|
||||||
|
altitude = gpsPositionData.Altitude;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
HomeLocation *homeLocation = HomeLocation::GetInstance(obm);
|
HomeLocation *homeLocation = HomeLocation::GetInstance(obm);
|
||||||
Q_ASSERT(homeLocation != NULL);
|
Q_ASSERT(homeLocation != NULL);
|
||||||
HomeLocation::DataFields homeLocationData = homeLocation->getData();
|
HomeLocation::DataFields homeLocationData = homeLocation->getData();
|
||||||
|
|
||||||
homeLLA[0] = homeLocationData.Latitude / 1e7;
|
homeLLA[0] = homeLocationData.Latitude / 1.0e7;
|
||||||
homeLLA[1] = homeLocationData.Longitude / 1e7;
|
homeLLA[1] = homeLocationData.Longitude / 1.0e7;
|
||||||
homeLLA[2] = homeLocationData.Altitude;
|
homeLLA[2] = homeLocationData.Altitude;
|
||||||
|
|
||||||
PositionActual *positionActual = PositionActual::GetInstance(obm);
|
NED[0] = positionActualData.North;
|
||||||
Q_ASSERT(positionActual != NULL);
|
NED[1] = positionActualData.East;
|
||||||
PositionActual::DataFields positionActualData = positionActual->getData();
|
NED[2] = positionActualData.Down;
|
||||||
|
|
||||||
NED[0] = positionActualData.North;
|
|
||||||
NED[1] = positionActualData.East;
|
|
||||||
NED[2] = positionActualData.Down;
|
|
||||||
|
|
||||||
Utils::CoordinateConversions().NED2LLA_HomeLLA(homeLLA, NED, LLA);
|
Utils::CoordinateConversions().NED2LLA_HomeLLA(homeLLA, NED, LLA);
|
||||||
|
|
||||||
|
@ -321,11 +321,11 @@ void VehicleConfigurationHelper::applyFlighModeConfiguration()
|
|||||||
data.Stabilization3Settings[2] = ManualControlSettings::STABILIZATION3SETTINGS_RATE;
|
data.Stabilization3Settings[2] = ManualControlSettings::STABILIZATION3SETTINGS_RATE;
|
||||||
data.FlightModeNumber = 3;
|
data.FlightModeNumber = 3;
|
||||||
data.FlightModePosition[0] = ManualControlSettings::FLIGHTMODEPOSITION_STABILIZED1;
|
data.FlightModePosition[0] = ManualControlSettings::FLIGHTMODEPOSITION_STABILIZED1;
|
||||||
data.FlightModePosition[1] = ManualControlSettings::FLIGHTMODEPOSITION_STABILIZED1;
|
data.FlightModePosition[1] = ManualControlSettings::FLIGHTMODEPOSITION_STABILIZED2;
|
||||||
data.FlightModePosition[2] = ManualControlSettings::FLIGHTMODEPOSITION_STABILIZED1;
|
data.FlightModePosition[2] = ManualControlSettings::FLIGHTMODEPOSITION_STABILIZED3;
|
||||||
data.FlightModePosition[3] = ManualControlSettings::FLIGHTMODEPOSITION_STABILIZED1;
|
data.FlightModePosition[3] = ManualControlSettings::FLIGHTMODEPOSITION_ALTITUDEHOLD;
|
||||||
data.FlightModePosition[4] = ManualControlSettings::FLIGHTMODEPOSITION_STABILIZED1;
|
data.FlightModePosition[4] = ManualControlSettings::FLIGHTMODEPOSITION_POSITIONHOLD;
|
||||||
data.FlightModePosition[5] = ManualControlSettings::FLIGHTMODEPOSITION_STABILIZED1;
|
data.FlightModePosition[5] = ManualControlSettings::FLIGHTMODEPOSITION_MANUAL;
|
||||||
controlSettings->setData(data);
|
controlSettings->setData(data);
|
||||||
addModifiedObject(controlSettings, tr("Writing flight mode settings"));
|
addModifiedObject(controlSettings, tr("Writing flight mode settings"));
|
||||||
}
|
}
|
||||||
|
@ -423,14 +423,14 @@ bool UAVObjectUtilManager::descriptionToStructure(QByteArray desc, deviceDescrip
|
|||||||
{
|
{
|
||||||
if (desc.startsWith("OpFw")) {
|
if (desc.startsWith("OpFw")) {
|
||||||
/*
|
/*
|
||||||
* This looks like a binary with a description at the end
|
* This looks like a binary with a description at the end:
|
||||||
* 4 bytes: header: "OpFw"
|
* 4 bytes: header: "OpFw".
|
||||||
* 4 bytes: git commit hash (short version of SHA1)
|
* 4 bytes: GIT commit tag (short version of SHA1).
|
||||||
* 4 bytes: Unix timestamp of last git commit
|
* 4 bytes: Unix timestamp of compile time.
|
||||||
* 2 bytes: target platform. Should follow same rule as BOARD_TYPE and BOARD_REVISION in board define files.
|
* 2 bytes: target platform. Should follow same rule as BOARD_TYPE and BOARD_REVISION in board define files.
|
||||||
* 26 bytes: commit tag if it is there, otherwise "Unreleased". Zero-padded
|
* 26 bytes: commit tag if it is there, otherwise branch name. '-dirty' may be added if needed. Zero-padded.
|
||||||
* 20 bytes: SHA1 sum of the firmware.
|
* 20 bytes: SHA1 sum of the firmware.
|
||||||
* 20 bytes: SHA1 sum of the UAVO definition files.
|
* 20 bytes: SHA1 sum of the uavo definitions.
|
||||||
* 20 bytes: free for now.
|
* 20 bytes: free for now.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -241,20 +241,18 @@ QString UAVSettingsImportExportFactory::createXMLDocument(const enum storedData
|
|||||||
versionInfo.appendChild(hw);
|
versionInfo.appendChild(hw);
|
||||||
|
|
||||||
QDomElement fw = doc.createElement("firmware");
|
QDomElement fw = doc.createElement("firmware");
|
||||||
|
QString uavo = board.uavoHash.toHex();
|
||||||
|
fw.setAttribute("tag", board.gitTag);
|
||||||
fw.setAttribute("date", board.gitDate);
|
fw.setAttribute("date", board.gitDate);
|
||||||
fw.setAttribute("hash", board.gitHash);
|
fw.setAttribute("hash", board.gitHash);
|
||||||
fw.setAttribute("tag", board.gitTag);
|
fw.setAttribute("uavo", uavo.left(8));
|
||||||
versionInfo.appendChild(fw);
|
versionInfo.appendChild(fw);
|
||||||
|
|
||||||
QString gcsRevision = VersionInfo::revision();
|
QDomElement gcs = doc.createElement("gcs");
|
||||||
QString gcsGitDate = gcsRevision.mid(gcsRevision.indexOf(" ") + 1, 14);
|
gcs.setAttribute("tag", VersionInfo::tagOrBranch() + VersionInfo::dirty());
|
||||||
QString gcsGitHash = gcsRevision.mid(gcsRevision.indexOf(":") + 1, 8);
|
gcs.setAttribute("date", VersionInfo::dateTime());
|
||||||
QString gcsGitTag = gcsRevision.left(gcsRevision.indexOf(":"));
|
gcs.setAttribute("hash", VersionInfo::hash().left(8));
|
||||||
|
gcs.setAttribute("uavo", VersionInfo::uavoHash().left(8));
|
||||||
QDomElement gcs = doc.createElement("gcs");
|
|
||||||
gcs.setAttribute("date", gcsGitDate);
|
|
||||||
gcs.setAttribute("hash", gcsGitHash);
|
|
||||||
gcs.setAttribute("tag", gcsGitTag);
|
|
||||||
versionInfo.appendChild(gcs);
|
versionInfo.appendChild(gcs);
|
||||||
|
|
||||||
// create settings and/or data elements
|
// create settings and/or data elements
|
||||||
|
@ -957,7 +957,7 @@ void UploaderGadgetWidget::versionMatchCheck()
|
|||||||
UAVObjectUtilManager *utilMngr = pm->getObject<UAVObjectUtilManager>();
|
UAVObjectUtilManager *utilMngr = pm->getObject<UAVObjectUtilManager>();
|
||||||
deviceDescriptorStruct boardDescription = utilMngr->getBoardDescriptionStruct();
|
deviceDescriptorStruct boardDescription = utilMngr->getBoardDescriptionStruct();
|
||||||
QByteArray uavoHashArray;
|
QByteArray uavoHashArray;
|
||||||
QString uavoHash = VersionInfo::uavoHash();
|
QString uavoHash = VersionInfo::uavoHashArray();
|
||||||
|
|
||||||
uavoHash.chop(2);
|
uavoHash.chop(2);
|
||||||
uavoHash.remove(0, 2);
|
uavoHash.remove(0, 2);
|
||||||
|
@ -271,7 +271,7 @@ def xtrim(string, suffix, length):
|
|||||||
assert n > 0, "length of truncated string+suffix exceeds maximum length"
|
assert n > 0, "length of truncated string+suffix exceeds maximum length"
|
||||||
return ''.join([string[:n], '+', suffix])
|
return ''.join([string[:n], '+', suffix])
|
||||||
|
|
||||||
def get_hash_of_dirs(directory, verbose = 0, raw = 0):
|
def get_hash_of_dirs(directory, verbose = 0, raw = 0, n = 40):
|
||||||
"""Return hash of XML files from UAVObject definition directory"""
|
"""Return hash of XML files from UAVObject definition directory"""
|
||||||
import hashlib, os
|
import hashlib, os
|
||||||
SHAhash = hashlib.sha1()
|
SHAhash = hashlib.sha1()
|
||||||
@ -322,7 +322,7 @@ def get_hash_of_dirs(directory, verbose = 0, raw = 0):
|
|||||||
print 'Final hash is', SHAhash.hexdigest()
|
print 'Final hash is', SHAhash.hexdigest()
|
||||||
|
|
||||||
if raw == 1:
|
if raw == 1:
|
||||||
return SHAhash.hexdigest()
|
return SHAhash.hexdigest()[:n]
|
||||||
else:
|
else:
|
||||||
hex_stream = lambda s:",".join(['0x'+hex(ord(c))[2:].zfill(2) for c in s])
|
hex_stream = lambda s:",".join(['0x'+hex(ord(c))[2:].zfill(2) for c in s])
|
||||||
return hex_stream(SHAhash.digest())
|
return hex_stream(SHAhash.digest())
|
||||||
@ -417,9 +417,10 @@ string given.
|
|||||||
MINUTE = r.time('%M'),
|
MINUTE = r.time('%M'),
|
||||||
BOARD_TYPE = args.type,
|
BOARD_TYPE = args.type,
|
||||||
BOARD_REVISION = args.revision,
|
BOARD_REVISION = args.revision,
|
||||||
SHA1 = sha1(args.image),
|
UAVO_HASH = get_hash_of_dirs(args.uavodir, verbose = 0, raw = 1),
|
||||||
UAVOSHA1TXT = get_hash_of_dirs(args.uavodir, verbose = 0, raw = 1),
|
UAVO_HASH8 = get_hash_of_dirs(args.uavodir, verbose = 0, raw = 1, n = 8),
|
||||||
UAVOSHA1 = get_hash_of_dirs(args.uavodir, verbose = 0, raw = 0),
|
UAVO_HASH_ARRAY = get_hash_of_dirs(args.uavodir, verbose = 0, raw = 0),
|
||||||
|
IMAGE_HASH_ARRAY = sha1(args.image),
|
||||||
)
|
)
|
||||||
|
|
||||||
# Process positional arguments in the form of:
|
# Process positional arguments in the form of:
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
ORIGIN='${ORIGIN}'
|
ORIGIN='${ORIGIN}'
|
||||||
REVISION='${REVISION}'
|
REVISION='${REVISION}'
|
||||||
HASH='${HASH}'
|
HASH='${HASH}'
|
||||||
UAVOSHA1='${UAVOSHA1TXT}'
|
UAVO_HASH='${UAVO_HASH}'
|
||||||
LABEL='${LABEL}'
|
LABEL='${LABEL}'
|
||||||
TAG='${TAG}'
|
TAG='${TAG}'
|
||||||
TAG_OR_BRANCH='${TAG_OR_BRANCH}'
|
TAG_OR_BRANCH='${TAG_OR_BRANCH}'
|
||||||
|
@ -43,7 +43,7 @@ install:
|
|||||||
cp -arp package/linux/openpilot_menu.menu debian/openpilot/etc/xdg/menus/applications-merged
|
cp -arp package/linux/openpilot_menu.menu debian/openpilot/etc/xdg/menus/applications-merged
|
||||||
cp -arp package/linux/openpilot_menu.directory debian/openpilot/usr/share/desktop-directories
|
cp -arp package/linux/openpilot_menu.directory debian/openpilot/usr/share/desktop-directories
|
||||||
ifdef PACKAGE_DIR
|
ifdef PACKAGE_DIR
|
||||||
cp -a $(PACKAGE_DIR)/* debian/openpilot/usr/local/OpenPilot/firmware/
|
cp -a $(PACKAGE_DIR)/*.elf debian/openpilot/usr/local/OpenPilot/firmware/
|
||||||
else
|
else
|
||||||
$(error PACKAGE_DIR not defined! $(PACKAGE_DIR))
|
$(error PACKAGE_DIR not defined! $(PACKAGE_DIR))
|
||||||
endif
|
endif
|
||||||
|
@ -20,7 +20,7 @@ device=$(hdiutil attach "${TEMP_FILE}" | \
|
|||||||
|
|
||||||
# packaging goes here
|
# packaging goes here
|
||||||
cp -a "${APP_PATH}" "/Volumes/${VOL_NAME}"
|
cp -a "${APP_PATH}" "/Volumes/${VOL_NAME}"
|
||||||
ls "${FW_DIR}" | xargs -n 1 -I {} cp "${FW_DIR}/{}" "/Volumes/${VOL_NAME}/Firmware"
|
#ls "${FW_DIR}" | xargs -n 1 -I {} cp "${FW_DIR}/{}" "/Volumes/${VOL_NAME}/Firmware"
|
||||||
cp "${BUILD_DIR}/uavobject-synthetics/matlab/OPLogConvert.m" "/Volumes/${VOL_NAME}/Utilities"
|
cp "${BUILD_DIR}/uavobject-synthetics/matlab/OPLogConvert.m" "/Volumes/${VOL_NAME}/Utilities"
|
||||||
cp "${ROOT_DIR}/HISTORY.txt" "/Volumes/${VOL_NAME}"
|
cp "${ROOT_DIR}/HISTORY.txt" "/Volumes/${VOL_NAME}"
|
||||||
|
|
||||||
|
@ -202,7 +202,7 @@ Section "-Localization" InSecLocalization
|
|||||||
SectionEnd
|
SectionEnd
|
||||||
|
|
||||||
; Copy firmware files
|
; Copy firmware files
|
||||||
Section "Firmware" InSecFirmware
|
Section /o "-Firmware" InSecFirmware
|
||||||
SetOutPath "$INSTDIR\firmware"
|
SetOutPath "$INSTDIR\firmware"
|
||||||
File /r "${PACKAGE_DIR}\${FIRMWARE_DIR}\*"
|
File /r "${PACKAGE_DIR}\${FIRMWARE_DIR}\*"
|
||||||
SectionEnd
|
SectionEnd
|
||||||
|
@ -7,13 +7,13 @@
|
|||||||
<field name="GyroGain" units="(rad/s)/lsb" type="float" elements="1" defaultvalue="0.42"/>
|
<field name="GyroGain" units="(rad/s)/lsb" type="float" elements="1" defaultvalue="0.42"/>
|
||||||
<field name="AccelKp" units="channel" type="float" elements="1" defaultvalue="0.05"/>
|
<field name="AccelKp" units="channel" type="float" elements="1" defaultvalue="0.05"/>
|
||||||
<field name="AccelKi" units="channel" type="float" elements="1" defaultvalue="0.0001"/>
|
<field name="AccelKi" units="channel" type="float" elements="1" defaultvalue="0.0001"/>
|
||||||
<field name="MagKi" units="" type="float" elements="1" defaultvalue="0"/>
|
<field name="MagKi" units="" type="float" elements="1" defaultvalue="0"/>
|
||||||
<field name="MagKp" units="" type="float" elements="1" defaultvalue="0"/>
|
<field name="MagKp" units="" type="float" elements="1" defaultvalue="0"/>
|
||||||
<field name="AccelTau" units="" type="float" elements="1" defaultvalue="0"/>
|
<field name="AccelTau" units="" type="float" elements="1" defaultvalue="0"/>
|
||||||
<field name="YawBiasRate" units="channel" type="float" elements="1" defaultvalue="0.000001"/>
|
<field name="YawBiasRate" units="channel" type="float" elements="1" defaultvalue="0.000001"/>
|
||||||
<field name="ZeroDuringArming" units="channel" type="enum" elements="1" options="FALSE,TRUE" defaultvalue="TRUE"/>
|
<field name="ZeroDuringArming" units="channel" type="enum" elements="1" options="FALSE,TRUE" defaultvalue="TRUE"/>
|
||||||
<field name="BiasCorrectGyro" units="channel" type="enum" elements="1" options="FALSE,TRUE" defaultvalue="TRUE"/>
|
<field name="BiasCorrectGyro" units="channel" type="enum" elements="1" options="FALSE,TRUE" defaultvalue="TRUE"/>
|
||||||
<field name="TrimFlight" units="channel" type="enum" elements="1" options="NORMAL,START,LOAD" defaultvalue="NORMAL"/>
|
<field name="TrimFlight" units="channel" type="enum" elements="1" options="NORMAL,START,LOAD" defaultvalue="NORMAL"/>
|
||||||
<access gcs="readwrite" flight="readwrite"/>
|
<access gcs="readwrite" flight="readwrite"/>
|
||||||
<telemetrygcs acked="true" updatemode="onchange" period="0"/>
|
<telemetrygcs acked="true" updatemode="onchange" period="0"/>
|
||||||
<telemetryflight acked="true" updatemode="onchange" period="0"/>
|
<telemetryflight acked="true" updatemode="onchange" period="0"/>
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
<field name="Stabilization1Settings" units="" type="enum"
|
<field name="Stabilization1Settings" units="" type="enum"
|
||||||
elementnames="Roll,Pitch,Yaw"
|
elementnames="Roll,Pitch,Yaw"
|
||||||
options="None,Rate,Attitude,AxisLock,WeakLeveling,VirtualBar,RelayRate,RelayAttitude"
|
options="None,Rate,Attitude,AxisLock,WeakLeveling,VirtualBar,RelayRate,RelayAttitude"
|
||||||
defaultvalue="Attitude,Attitude,Rate"
|
defaultvalue="Attitude,Attitude,AxisLock"
|
||||||
limits="%NE:RelayRate:RelayAttitude; %NE:RelayRate:RelayAttitude; %NE:RelayRate:RelayAttitude;"/>
|
limits="%NE:RelayRate:RelayAttitude; %NE:RelayRate:RelayAttitude; %NE:RelayRate:RelayAttitude;"/>
|
||||||
<field name="Stabilization2Settings" units="" type="enum"
|
<field name="Stabilization2Settings" units="" type="enum"
|
||||||
elementnames="Roll,Pitch,Yaw"
|
elementnames="Roll,Pitch,Yaw"
|
||||||
@ -33,7 +33,7 @@
|
|||||||
<field name="Stabilization3Settings" units="" type="enum"
|
<field name="Stabilization3Settings" units="" type="enum"
|
||||||
elementnames="Roll,Pitch,Yaw"
|
elementnames="Roll,Pitch,Yaw"
|
||||||
options="None,Rate,Attitude,AxisLock,WeakLeveling,VirtualBar,RelayRate,RelayAttitude"
|
options="None,Rate,Attitude,AxisLock,WeakLeveling,VirtualBar,RelayRate,RelayAttitude"
|
||||||
defaultvalue="Attitude,Attitude,Rate"
|
defaultvalue="Rate,Rate,Rate"
|
||||||
limits="%NE:RelayRate:RelayAttitude; %NE:RelayRate:RelayAttitude; %NE:RelayRate:RelayAttitude;"/>
|
limits="%NE:RelayRate:RelayAttitude; %NE:RelayRate:RelayAttitude; %NE:RelayRate:RelayAttitude;"/>
|
||||||
|
|
||||||
<!-- Note these options values should be identical to those defined in FlightMode -->
|
<!-- Note these options values should be identical to those defined in FlightMode -->
|
||||||
@ -44,7 +44,7 @@
|
|||||||
type="enum"
|
type="enum"
|
||||||
elements="6"
|
elements="6"
|
||||||
options="Manual,Stabilized1,Stabilized2,Stabilized3,Autotune,AltitudeHold,VelocityControl,PositionHold,ReturnToBase,Land,PathPlanner,POI"
|
options="Manual,Stabilized1,Stabilized2,Stabilized3,Autotune,AltitudeHold,VelocityControl,PositionHold,ReturnToBase,Land,PathPlanner,POI"
|
||||||
defaultvalue="Manual,Stabilized1,Stabilized2,Stabilized3,AltitudeHold,PositionHold"
|
defaultvalue="Stabilized1,Stabilized2,Stabilized3,AltitudeHold,PositionHold,Manual"
|
||||||
limits="\
|
limits="\
|
||||||
%0401NE:Autotune:AltitudeHold:VelocityControl:PositionHold:ReturnToBase:Land:PathPlanner:POI,\
|
%0401NE:Autotune:AltitudeHold:VelocityControl:PositionHold:ReturnToBase:Land:PathPlanner:POI,\
|
||||||
%0402NE:Autotune:AltitudeHold:VelocityControl:PositionHold:ReturnToBase:Land:PathPlanner:POI,\
|
%0402NE:Autotune:AltitudeHold:VelocityControl:PositionHold:ReturnToBase:Land:PathPlanner:POI,\
|
||||||
|
Loading…
x
Reference in New Issue
Block a user