1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-01-30 15:52:12 +01:00

Adapted osgearth branch to msys2

Merge remote-tracking branch 'upstream/next' into filnet/LP-29_osgearth_integration

# Conflicts:
#	Makefile
#	ground/gcs/src/libs/osgearth/copydata.pro
#	make/tools.mk
This commit is contained in:
Philippe Renon 2016-01-12 02:32:16 +01:00
commit c0613fe6d0
29 changed files with 325 additions and 2037 deletions

View File

@ -1,40 +1,53 @@
How to build from source?
=========================
# How to build from source?
Both development environment and GCS are supported on Windows, Linux and Mac OS X
## Install prerequisites
The first step is to Install all OS specific prerequisites.
###Mac OS X
### Mac OS X
Install XCode and its relatated command line tools (follow Apple documentation).
Install git, curl and p7zip. You can use brew `brew install git curl p7zip` or macport: `sudo port install git curl p7zip`
###Ubuntu
sudo apt-get install git build-essential curl gdb wget debhelper p7zip-full unzip flex bison libsdl1.2-dev libudev-dev libusb-1.0-0-dev libc6-i386 mesa-common-dev
###Windows
Install [msysGIT](https://msysgit.github.io/) under `C:\git`
### Ubuntu
Clone LibrePilot Git repository.
Open Git Bash and run
sudo apt-get install git build-essential curl gdb wget debhelper p7zip-full unzip flex bison libsdl1.2-dev libudev-dev libusb-1.0-0-dev libc6-i386 mesa-common-dev
cd /path/to/LibrePilot_root
./make/scripts/win_sdk_install.sh
You can build using the `/path/to/LibrePilot_root/make/winx86/bin/make` wrapper to call `mingw32-make.exe` as:
### Windows
./make/winx86/bin/make all_sdk_install
or call `mingw32-make` directly
Install [Msys2](https://msys2.github.io/) following the instructions on the web site. You can either install the i686 (32 bit) or x86_64 (64 bit) version.
mingw32-make all_sdk_install
Start a "MinGW-w64 Win32 Shell" or "MinGW-w64 Win32 Win64 Shell" (NOT "MSYS2 Shell")
Install the dependent packages (32 bit):
pacman -S --needed git unzip tar mingw-w64-i686-toolchain mingw-w64-i686-qt5 mingw-w64-i686-SDL mingw-w64-i686-mesa mingw-w64-i686-openssl
Or for a 64 bit build:
pacman -S --needed git unzip tar mingw-w64-x86_64-toolchain mingw-w64-x86_64-qt5 mingw-w64-x86_64-SDL mingw-w64-x86_64-mesa mingw-w64-x86_64-openssl
*NOTE* On Windows you need to run the mingw version of make, which is 'mingw32-make'
## Setup the build environment and build
##Setup the build environment and build
The `all_sdk_install` target will automatically retrieve and install all needed tools (qt, arm gcc etc.) in a local folder `/path/to/LibrePilot_root/tools`
### Ubuntu / Mac OS X
make all_sdk_install
make package
make all_sdk_install
make package
The `package` target will build the complete installable package for the current platform.
### Windows
mingw32-make all_sdk_install
mingw32-make package
The `package` target will build the complete installable package for the current platform. You can build the 'all' target to just build the software.
Run make with no arguments to show the complete list of supported targets.

View File

@ -130,14 +130,7 @@ else ifeq ($(V), 0)
else ifeq ($(V), 1)
endif
# Make sure we know few things about the architecture before including
# the tools.mk to ensure that we download/install the right tools.
UNAME := $(shell uname)
ARCH := $(shell uname -m)
# Here and everywhere if not Linux or Mac then assume Windows
ifeq ($(filter Linux Darwin, $(UNAME)), )
UNAME := Windows
endif
ARCH := $(call get_arch)
# Include tools installers
include $(ROOT_DIR)/make/tools.mk
@ -147,13 +140,10 @@ include $(ROOT_DIR)/make/tools.mk
# We almost need to consider autoconf/automake instead of this
ifeq ($(UNAME), Linux)
QT_SPEC := linux-g++
UAVOBJGENERATOR := $(BUILD_DIR)/uavobjgenerator/uavobjgenerator
else ifeq ($(UNAME), Darwin)
QT_SPEC := macx-g++
UAVOBJGENERATOR := $(BUILD_DIR)/uavobjgenerator/uavobjgenerator
else ifeq ($(UNAME), Windows)
QT_SPEC := win32-g++
UAVOBJGENERATOR := $(BUILD_DIR)/uavobjgenerator/uavobjgenerator.exe
endif
@ -192,7 +182,7 @@ uavobjgenerator: $(UAVOBJGENERATOR)
$(UAVOBJGENERATOR): | $(UAVOBJGENERATOR_DIR)
$(V1) cd $(UAVOBJGENERATOR_DIR) && \
( [ -f Makefile ] || $(QMAKE) $(ROOT_DIR)/ground/uavobjgenerator/uavobjgenerator.pro \
-spec $(QT_SPEC) CONFIG+=$(GCS_BUILD_CONF) CONFIG+=$(GCS_SILENT) ) && \
CONFIG+=$(GCS_BUILD_CONF) CONFIG+=$(GCS_SILENT) ) && \
$(MAKE) --no-print-directory -w
UAVOBJ_TARGETS := gcs flight python matlab java wireshark
@ -266,7 +256,7 @@ GCS_MAKEFILE := $(GCS_DIR)/Makefile
gcs_qmake $(GCS_MAKEFILE): | $(GCS_DIR)
$(V1) cd $(GCS_DIR) && \
$(QMAKE) $(ROOT_DIR)/ground/gcs/gcs.pro \
-spec $(QT_SPEC) -r CONFIG+=$(GCS_BUILD_CONF) CONFIG+=$(GCS_SILENT) \
-r CONFIG+=$(GCS_BUILD_CONF) CONFIG+=$(GCS_SILENT) \
'GCS_BIG_NAME="$(GCS_BIG_NAME)"' GCS_SMALL_NAME=$(GCS_SMALL_NAME) \
'ORG_BIG_NAME="$(ORG_BIG_NAME)"' ORG_SMALL_NAME=$(ORG_SMALL_NAME) \
'WIKI_URL_ROOT="$(WIKI_URL_ROOT)"' \
@ -300,7 +290,7 @@ UPLOADER_MAKEFILE := $(UPLOADER_DIR)/Makefile
uploader_qmake $(UPLOADER_MAKEFILE): | $(UPLOADER_DIR)
$(V1) cd $(UPLOADER_DIR) && \
$(QMAKE) $(ROOT_DIR)/ground/gcs/src/experimental/USB_UPLOAD_TOOL/upload.pro \
-spec $(QT_SPEC) -r CONFIG+=$(GCS_BUILD_CONF) CONFIG+=$(GCS_SILENT) $(GCS_QMAKE_OPTS)
-r CONFIG+=$(GCS_BUILD_CONF) CONFIG+=$(GCS_SILENT) $(GCS_QMAKE_OPTS)
.PHONY: uploader
uploader: $(UPLOADER_MAKEFILE)
@ -506,7 +496,7 @@ OPFW_FILES := $(foreach fw_targ, $(PACKAGE_FW_TARGETS), $(FIRMWARE_DIR)/$(fw_tar
OPFW_CONTENTS := \
<!DOCTYPE RCC><RCC version="1.0"> \
<qresource prefix="/firmware"> \
$(foreach fw_file, $(OPFW_FILES), <file alias="$(notdir $(fw_file))">$(fw_file)</file>) \
$(foreach fw_file, $(OPFW_FILES), <file alias="$(notdir $(fw_file))">$(call system_path,$(fw_file))</file>) \
</qresource> \
</RCC>

View File

@ -280,11 +280,11 @@ void INSSetBaroVar(float baro_var)
void INSSetMagNorth(float B[3])
{
float mag = sqrtf(B[0] * B[0] + B[1] * B[1] + B[2] * B[2]);
float invmag = invsqrtf(B[0] * B[0] + B[1] * B[1] + B[2] * B[2]);
ekf.Be[0] = B[0] / mag;
ekf.Be[1] = B[1] / mag;
ekf.Be[2] = B[2] / mag;
ekf.Be[0] = B[0] * invmag;
ekf.Be[1] = B[1] * invmag;
ekf.Be[2] = B[2] * invmag;
}
void INSStatePrediction(float gyro_data[3], float accel_data[3], float dT)
@ -305,7 +305,7 @@ void INSStatePrediction(float gyro_data[3], float accel_data[3], float dT)
// EKF prediction step
LinearizeFG(ekf.X, U, ekf.F, ekf.G);
RungeKutta(ekf.X, U, dT);
invqmag = fast_invsqrtf(ekf.X[6] * ekf.X[6] + ekf.X[7] * ekf.X[7] + ekf.X[8] * ekf.X[8] + ekf.X[9] * ekf.X[9]);
invqmag = invsqrtf(ekf.X[6] * ekf.X[6] + ekf.X[7] * ekf.X[7] + ekf.X[8] * ekf.X[8] + ekf.X[9] * ekf.X[9]);
ekf.X[6] *= invqmag;
ekf.X[7] *= invqmag;
ekf.X[8] *= invqmag;
@ -390,7 +390,7 @@ void INSCorrection(float mag_data[3], float Pos[3], float Vel[3],
if (SensorsUsed & MAG_SENSORS) {
float invBmag = fast_invsqrtf(mag_data[0] * mag_data[0] + mag_data[1] * mag_data[1] + mag_data[2] * mag_data[2]);
float invBmag = invsqrtf(mag_data[0] * mag_data[0] + mag_data[1] * mag_data[1] + mag_data[2] * mag_data[2]);
Z[6] = mag_data[0] * invBmag;
Z[7] = mag_data[1] * invBmag;
Z[8] = mag_data[2] * invBmag;
@ -404,7 +404,7 @@ void INSCorrection(float mag_data[3], float Pos[3], float Vel[3],
MeasurementEq(ekf.X, ekf.Be, Y);
SerialUpdate(ekf.H, ekf.R, Z, Y, ekf.P, ekf.X, SensorsUsed);
float invqmag = fast_invsqrtf(ekf.X[6] * ekf.X[6] + ekf.X[7] * ekf.X[7] + ekf.X[8] * ekf.X[8] + ekf.X[9] * ekf.X[9]);
float invqmag = invsqrtf(ekf.X[6] * ekf.X[6] + ekf.X[7] * ekf.X[7] + ekf.X[8] * ekf.X[8] + ekf.X[9] * ekf.X[9]);
ekf.X[6] *= invqmag;
ekf.X[7] *= invqmag;
ekf.X[8] *= invqmag;

View File

@ -119,28 +119,12 @@ static inline float y_on_curve(float x, const pointf points[], int num_points)
// Find the y value on the selected line.
return y_on_line(x, &points[end_point - 1], &points[end_point]);
}
// Fast inverse square root implementation from "quake3-1.32b/code/game/q_math.c"
// http://en.wikipedia.org/wiki/Fast_inverse_square_root
static inline float fast_invsqrtf(float number)
static inline float invsqrtf(float number)
{
float x2, y;
const float threehalfs = 1.5F;
union {
float f;
uint32_t u;
} i;
x2 = number * 0.5F;
y = number;
i.f = y; // evil floating point bit level hacking
i.u = 0x5f3759df - (i.u >> 1); // what the fxck?
y = i.f;
y = y * (threehalfs - (x2 * y * y)); // 1st iteration
// y = y * ( threehalfs - ( x2 * y * y ) ); // 2nd iteration, this can be removed
float y;
y = 1.0f / sqrtf(number);
return y;
}

View File

@ -628,7 +628,7 @@ __attribute__((optimize("O3"))) static void updateAttitude(AccelStateData *accel
CrossProduct((const float *)accels_filtered, (const float *)grot_filtered, accel_err);
// Account for accel magnitude
float inv_accel_mag = fast_invsqrtf(accels_filtered[0] * accels_filtered[0] + accels_filtered[1] * accels_filtered[1] + accels_filtered[2] * accels_filtered[2]);
float inv_accel_mag = invsqrtf(accels_filtered[0] * accels_filtered[0] + accels_filtered[1] * accels_filtered[1] + accels_filtered[2] * accels_filtered[2]);
if (inv_accel_mag > 1e3f) {
return;
}
@ -637,7 +637,7 @@ __attribute__((optimize("O3"))) static void updateAttitude(AccelStateData *accel
float inv_grot_mag;
if (accel_filter_enabled) {
inv_grot_mag = fast_invsqrtf(grot_filtered[0] * grot_filtered[0] + grot_filtered[1] * grot_filtered[1] + grot_filtered[2] * grot_filtered[2]);
inv_grot_mag = invsqrtf(grot_filtered[0] * grot_filtered[0] + grot_filtered[1] * grot_filtered[1] + grot_filtered[2] * grot_filtered[2]);
} else {
inv_grot_mag = 1.0f;
}
@ -685,8 +685,8 @@ __attribute__((optimize("O3"))) static void updateAttitude(AccelStateData *accel
}
}
// Renomalize
float inv_qmag = fast_invsqrtf(q[0] * q[0] + q[1] * q[1] + q[2] * q[2] + q[3] * q[3]);
// Renormalize
float inv_qmag = invsqrtf(q[0] * q[0] + q[1] * q[1] + q[2] * q[2] + q[3] * q[3]);
// If quaternion has become inappropriately short or is nan reinit.
// THIS SHOULD NEVER ACTUALLY HAPPEN

View File

@ -438,16 +438,16 @@ static filterResult complementaryFilter(struct data *this, float gyro[3], float
attitude[3] = -attitude[3];
}
// Renomalize
float qmag = sqrtf(attitude[0] * attitude[0] + attitude[1] * attitude[1] + attitude[2] * attitude[2] + attitude[3] * attitude[3]);
attitude[0] = attitude[0] / qmag;
attitude[1] = attitude[1] / qmag;
attitude[2] = attitude[2] / qmag;
attitude[3] = attitude[3] / qmag;
// Renormalize
float inv_qmag = invsqrtf(attitude[0] * attitude[0] + attitude[1] * attitude[1] + attitude[2] * attitude[2] + attitude[3] * attitude[3]);
attitude[0] = attitude[0] * inv_qmag;
attitude[1] = attitude[1] * inv_qmag;
attitude[2] = attitude[2] * inv_qmag;
attitude[3] = attitude[3] * inv_qmag;
// If quaternion has become inappropriately short or is nan reinit.
// THIS SHOULD NEVER ACTUALLY HAPPEN
if ((fabsf(qmag) < 1.0e-3f) || isnan(qmag)) {
if ((fabsf(inv_qmag) > 1e3f) || isnan(inv_qmag)) {
this->first_run = 1;
return FILTERRESULT_WARNING;
}

View File

@ -341,6 +341,11 @@ static void PIOS_PPM_tim_edge_cb(__attribute__((unused)) uint32_t tim_id,
}
}
#endif /* USE_FREERTOS */
} else {
for (uint32_t i = 0;
i < PIOS_PPM_IN_MAX_NUM_CHANNELS; i++) {
ppm_dev->CaptureValue[i] = PIOS_RCVR_TIMEOUT;
}
}
ppm_dev->Fresh = TRUE;

View File

@ -330,6 +330,11 @@ static void PIOS_PPM_tim_edge_cb(__attribute__((unused)) uint32_t tim_id, uint32
}
}
#endif /* USE_FREERTOS */
} else {
for (uint32_t i = 0;
i < PIOS_PPM_IN_MAX_NUM_CHANNELS; i++) {
ppm_dev->CaptureValue[i] = PIOS_RCVR_TIMEOUT;
}
}
ppm_dev->Fresh = true;

View File

@ -31,7 +31,7 @@ equals(copyqt, 1) {
libicui18n.so.54 \
libicuuc.so.54 \
libicudata.so.54
*-64 {
contains(QT_ARCH, x86_64) {
QT_LIBS += libqgsttools_p.so.1
}
for(lib, QT_LIBS) {
@ -48,12 +48,11 @@ equals(copyqt, 1) {
platforms/libqxcb.so \
xcbglintegrations/libqxcb-glx-integration.so \
sqldrivers/libqsqlite.so
*-32 {
QT_PLUGINS += mediaservice/libqtmedia_audioengine.so
}
*-64 {
contains(QT_ARCH, x86_64) {
QT_PLUGINS += mediaservice/libgstaudiodecoder.so \
mediaservice/libgstmediaplayer.so
} else {
QT_PLUGINS += mediaservice/libqtmedia_audioengine.so
}
}
@ -81,13 +80,26 @@ equals(copyqt, 1) {
Qt5Quick$${DS}.dll \
Qt5QuickWidgets$${DS}.dll \
Qt5Qml$${DS}.dll \
icuin54.dll \
icudt54.dll \
icuuc54.dll
# it is more robust to take the following DLLs from Qt rather than from MinGW
QT_DLLS += libgcc_s_dw2-1.dll \
libstdc++-6.dll \
libwinpthread-1.dll
libicuin56.dll \
libicudt56.dll \
libicuuc56.dll \
libstdc++-6.dll \
libwinpthread-1.dll \
libpcre16-0.dll \
zlib1.dll \
libharfbuzz-0.dll \
libfreetype-6.dll \
libbz2-1.dll \
libpng16-16.dll \
libglib-2.0-0.dll \
libintl-8.dll \
libiconv-2.dll
contains(QT_ARCH, i386) {
QT_DLLS += libgcc_s_dw2-1.dll
} else {
QT_DLLS += libgcc_s_seh-1.dll
}
for(dll, QT_DLLS) {
addCopyFileTarget($${dll},$$[QT_INSTALL_BINS],$${GCS_APP_PATH})
}
@ -97,14 +109,14 @@ equals(copyqt, 1) {
ssleay32.dll \
libeay32.dll
for(dll, OPENSSL_DLLS) {
addCopyFileTarget($${dll},$${OPENSSL_DIR},$${GCS_APP_PATH})
addCopyFileTarget($${dll},$$[QT_INSTALL_BINS],$${GCS_APP_PATH})
}
# copy OpenGL DLL
OPENGL_DLLS = \
opengl32_32/opengl32.dll
opengl32.dll
for(dll, OPENGL_DLLS) {
addCopyFileTarget($${dll},$${MESAWIN_DIR},$${GCS_APP_PATH})
addCopyFileTarget($${dll},$$[QT_INSTALL_BINS],$${GCS_APP_PATH}/opengl32)
}
QT_PLUGINS = iconengines/qsvgicon$${DS}.dll \

View File

@ -46,15 +46,15 @@ osg:win32 {
OSG_LIBS = \
libcurl-4.dll \
libfreetype-6.dll \
libgdal.dll \
libgeos-3-3-8.dll \
libgeos_c-1.dll \
libjpeg-9.dll \
libgdal-20.dll \
libgeos.dll \
libgeos_c.dll \
libjpeg-8.dll \
libpng16-16.dll \
libproj-0.dll \
libproj-9.dll \
libtiff-5.dll \
libtiffxx-5.dll \
zlib1.dll
zlib1.dll \
# osg libraries
OSG_LIBS += \

View File

@ -2,7 +2,10 @@ TEMPLATE = lib
TARGET = GCSOsgEarth
DEFINES += OSGEARTH_LIBRARY
OSG_VERSION = 3.4.0
#CONFIG += mys2
!msys2:OSG_VERSION = 3.4.0
msys2:OSG_VERSION = 3.5.1
CONFIG += osg
DEFINES += USE_OSG

View File

@ -4,7 +4,7 @@ equals(copydata, 1) {
SDL_DLLS = \
SDL.dll
for(dll, SDL_DLLS) {
addCopyFileTarget($${dll},$${SDL_DIR}/bin,$${GCS_APP_PATH})
addCopyFileTarget($${dll},$$[QT_INSTALL_BINS],$${GCS_APP_PATH})
}
}
}

View File

@ -230,9 +230,9 @@ void ConfigMultiRotorWidget::setupUI(QString frameType)
setComboCurrentIndex(m_aircraft->multirotorFrameType,
m_aircraft->multirotorFrameType->findText("Hexacopter Y6"));
m_aircraft->mrRollMixLevel->setValue(100);
m_aircraft->mrPitchMixLevel->setValue(50);
setYawMixLevel(66);
m_aircraft->mrRollMixLevel->setValue(86);
m_aircraft->mrPitchMixLevel->setValue(100);
setYawMixLevel(100);
} else if (frameType == "Octo" || frameType == "Octocopter") {
setComboCurrentIndex(m_aircraft->multirotorFrameType, m_aircraft->multirotorFrameType->findText("Octocopter"));

View File

@ -245,8 +245,22 @@ void ConfigStabilizationWidget::refreshWidgetsValues(UAVObject *o)
updateThrottleCurveFromObject();
ui->basicResponsivenessCheckBox->setChecked(ui->rateRollKp_3->value() == ui->ratePitchKp_4->value() &&
ui->rateRollKi_3->value() == ui->ratePitchKi_4->value());
// Check and update basic/advanced checkboxes only if something connected
// Jump to advanced tab if something not "basic": Rate value out of slider limits or different Pitch/Roll values
if (ui->lowThrottleZeroIntegral_8->isEnabled()) {
if ((ui->attitudeRollResponse->value() == ui->attitudePitchResponse->value()) &&
(ui->rateRollResponse->value() == ui->ratePitchResponse->value()) &&
(ui->rateRollResponse->value() <= ui->RateResponsivenessSlider->maximum()) &&
(ui->ratePitchResponse->value() <= ui->RateResponsivenessSlider->maximum())) {
ui->basicResponsivenessCheckBox->setChecked(true);
ui->advancedResponsivenessCheckBox->setChecked(false);
ui->tabWidget->setCurrentIndex(0);
} else {
ui->basicResponsivenessCheckBox->setChecked(false);
ui->advancedResponsivenessCheckBox->setChecked(true);
ui->tabWidget->setCurrentIndex(1);
}
}
}
void ConfigStabilizationWidget::updateObjectsFromWidgets()
@ -611,9 +625,11 @@ void ConfigStabilizationWidget::processLinkedWidgets(QWidget *widget)
if (ui->basicResponsivenessCheckBox->isChecked()) {
if (widget == ui->AttitudeResponsivenessSlider) {
ui->ratePitchKp_4->setValue(ui->AttitudeResponsivenessSlider->value());
ui->attitudePitchResponse->setValue(ui->AttitudeResponsivenessSlider->value());
ui->attitudeRollResponse->setValue(ui->AttitudeResponsivenessSlider->value());
} else if (widget == ui->RateResponsivenessSlider) {
ui->ratePitchKi_4->setValue(ui->RateResponsivenessSlider->value());
ui->ratePitchResponse->setValue(ui->RateResponsivenessSlider->value());
ui->rateRollResponse->setValue(ui->RateResponsivenessSlider->value());
}
}
if (ui->checkBoxLinkAcroFactors->isChecked()) {

View File

@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>974</width>
<width>901</width>
<height>755</height>
</rect>
</property>
@ -135,9 +135,9 @@
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>950</width>
<height>775</height>
<y>-104</y>
<width>866</width>
<height>767</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
@ -195,29 +195,28 @@ margin-top: -1px;
<string>Acro+</string>
</property>
<layout class="QGridLayout" name="gridLayout_26">
<item row="0" column="0">
<widget class="QCheckBox" name="checkBoxLinkAcroFactors">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Link roll &amp;amp; pitch sliders to move together&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string>Link Roll and Pitch</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QCheckBox" name="checkBoxLinkAcroFactors">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Link roll &amp;amp; pitch sliders to move together&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string>Link Roll and Pitch</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QPushButton" name="pushButton_21">
<property name="sizePolicy">
@ -1002,7 +1001,7 @@ margin-top: -1px;
<string>Use Basic Configuration</string>
</property>
<property name="checked">
<bool>true</bool>
<bool>false</bool>
</property>
</widget>
</item>
@ -1036,7 +1035,7 @@ margin-top: -1px;
<number>100</number>
</property>
<property name="maximum">
<number>800</number>
<number>5000</number>
</property>
<property name="value">
<number>400</number>
@ -2296,7 +2295,7 @@ border-radius: 5;</string>
<number>100</number>
</property>
<property name="maximum">
<number>800</number>
<number>5000</number>
</property>
<property name="value">
<number>400</number>
@ -6248,7 +6247,7 @@ Then lower the value by 5 or so.</string>
</disabled>
</palette>
</property>
<layout class="QGridLayout" name="gridLayout_12" columnstretch="0,1,0,1,0,1,0">
<layout class="QGridLayout" name="gridLayout_12" columnstretch="0,0,0,0,0,0,0,0">
<property name="leftMargin">
<number>0</number>
</property>
@ -7358,556 +7357,6 @@ border-radius: 5;</string>
</property>
</widget>
</item>
<item row="0" column="5">
<widget class="QLabel" name="label_152">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>20</height>
</size>
</property>
<property name="palette">
<palette>
<active>
<colorrole role="WindowText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
<colorrole role="Button">
<brush brushstyle="LinearGradientPattern">
<gradient startx="0.507000000000000" starty="0.000000000000000" endx="0.507000000000000" endy="0.772000000000000" type="LinearGradient" spread="ReflectSpread" coordinatemode="ObjectBoundingMode">
<gradientstop position="0.208955000000000">
<color alpha="255">
<red>74</red>
<green>74</green>
<blue>74</blue>
</color>
</gradientstop>
<gradientstop position="0.786070000000000">
<color alpha="255">
<red>36</red>
<green>36</green>
<blue>36</blue>
</color>
</gradientstop>
</gradient>
</brush>
</colorrole>
<colorrole role="Light">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>58</red>
<green>58</green>
<blue>58</blue>
</color>
</brush>
</colorrole>
<colorrole role="Midlight">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>48</red>
<green>48</green>
<blue>48</blue>
</color>
</brush>
</colorrole>
<colorrole role="Dark">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>19</red>
<green>19</green>
<blue>19</blue>
</color>
</brush>
</colorrole>
<colorrole role="Mid">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>26</red>
<green>26</green>
<blue>26</blue>
</color>
</brush>
</colorrole>
<colorrole role="Text">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
<colorrole role="BrightText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
<colorrole role="ButtonText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
<colorrole role="Base">
<brush brushstyle="LinearGradientPattern">
<gradient startx="0.507000000000000" starty="0.000000000000000" endx="0.507000000000000" endy="0.772000000000000" type="LinearGradient" spread="ReflectSpread" coordinatemode="ObjectBoundingMode">
<gradientstop position="0.208955000000000">
<color alpha="255">
<red>74</red>
<green>74</green>
<blue>74</blue>
</color>
</gradientstop>
<gradientstop position="0.786070000000000">
<color alpha="255">
<red>36</red>
<green>36</green>
<blue>36</blue>
</color>
</gradientstop>
</gradient>
</brush>
</colorrole>
<colorrole role="Window">
<brush brushstyle="LinearGradientPattern">
<gradient startx="0.507000000000000" starty="0.000000000000000" endx="0.507000000000000" endy="0.772000000000000" type="LinearGradient" spread="ReflectSpread" coordinatemode="ObjectBoundingMode">
<gradientstop position="0.208955000000000">
<color alpha="255">
<red>74</red>
<green>74</green>
<blue>74</blue>
</color>
</gradientstop>
<gradientstop position="0.786070000000000">
<color alpha="255">
<red>36</red>
<green>36</green>
<blue>36</blue>
</color>
</gradientstop>
</gradient>
</brush>
</colorrole>
<colorrole role="Shadow">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
</brush>
</colorrole>
<colorrole role="AlternateBase">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>19</red>
<green>19</green>
<blue>19</blue>
</color>
</brush>
</colorrole>
<colorrole role="ToolTipBase">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>220</blue>
</color>
</brush>
</colorrole>
<colorrole role="ToolTipText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
</brush>
</colorrole>
</active>
<inactive>
<colorrole role="WindowText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
<colorrole role="Button">
<brush brushstyle="LinearGradientPattern">
<gradient startx="0.507000000000000" starty="0.000000000000000" endx="0.507000000000000" endy="0.772000000000000" type="LinearGradient" spread="ReflectSpread" coordinatemode="ObjectBoundingMode">
<gradientstop position="0.208955000000000">
<color alpha="255">
<red>74</red>
<green>74</green>
<blue>74</blue>
</color>
</gradientstop>
<gradientstop position="0.786070000000000">
<color alpha="255">
<red>36</red>
<green>36</green>
<blue>36</blue>
</color>
</gradientstop>
</gradient>
</brush>
</colorrole>
<colorrole role="Light">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>58</red>
<green>58</green>
<blue>58</blue>
</color>
</brush>
</colorrole>
<colorrole role="Midlight">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>48</red>
<green>48</green>
<blue>48</blue>
</color>
</brush>
</colorrole>
<colorrole role="Dark">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>19</red>
<green>19</green>
<blue>19</blue>
</color>
</brush>
</colorrole>
<colorrole role="Mid">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>26</red>
<green>26</green>
<blue>26</blue>
</color>
</brush>
</colorrole>
<colorrole role="Text">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
<colorrole role="BrightText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
<colorrole role="ButtonText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
<colorrole role="Base">
<brush brushstyle="LinearGradientPattern">
<gradient startx="0.507000000000000" starty="0.000000000000000" endx="0.507000000000000" endy="0.772000000000000" type="LinearGradient" spread="ReflectSpread" coordinatemode="ObjectBoundingMode">
<gradientstop position="0.208955000000000">
<color alpha="255">
<red>74</red>
<green>74</green>
<blue>74</blue>
</color>
</gradientstop>
<gradientstop position="0.786070000000000">
<color alpha="255">
<red>36</red>
<green>36</green>
<blue>36</blue>
</color>
</gradientstop>
</gradient>
</brush>
</colorrole>
<colorrole role="Window">
<brush brushstyle="LinearGradientPattern">
<gradient startx="0.507000000000000" starty="0.000000000000000" endx="0.507000000000000" endy="0.772000000000000" type="LinearGradient" spread="ReflectSpread" coordinatemode="ObjectBoundingMode">
<gradientstop position="0.208955000000000">
<color alpha="255">
<red>74</red>
<green>74</green>
<blue>74</blue>
</color>
</gradientstop>
<gradientstop position="0.786070000000000">
<color alpha="255">
<red>36</red>
<green>36</green>
<blue>36</blue>
</color>
</gradientstop>
</gradient>
</brush>
</colorrole>
<colorrole role="Shadow">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
</brush>
</colorrole>
<colorrole role="AlternateBase">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>19</red>
<green>19</green>
<blue>19</blue>
</color>
</brush>
</colorrole>
<colorrole role="ToolTipBase">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>220</blue>
</color>
</brush>
</colorrole>
<colorrole role="ToolTipText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
</brush>
</colorrole>
</inactive>
<disabled>
<colorrole role="WindowText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
<colorrole role="Button">
<brush brushstyle="LinearGradientPattern">
<gradient startx="0.507000000000000" starty="0.000000000000000" endx="0.507000000000000" endy="0.772000000000000" type="LinearGradient" spread="ReflectSpread" coordinatemode="ObjectBoundingMode">
<gradientstop position="0.208955000000000">
<color alpha="255">
<red>74</red>
<green>74</green>
<blue>74</blue>
</color>
</gradientstop>
<gradientstop position="0.786070000000000">
<color alpha="255">
<red>36</red>
<green>36</green>
<blue>36</blue>
</color>
</gradientstop>
</gradient>
</brush>
</colorrole>
<colorrole role="Light">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>58</red>
<green>58</green>
<blue>58</blue>
</color>
</brush>
</colorrole>
<colorrole role="Midlight">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>48</red>
<green>48</green>
<blue>48</blue>
</color>
</brush>
</colorrole>
<colorrole role="Dark">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>19</red>
<green>19</green>
<blue>19</blue>
</color>
</brush>
</colorrole>
<colorrole role="Mid">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>26</red>
<green>26</green>
<blue>26</blue>
</color>
</brush>
</colorrole>
<colorrole role="Text">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
<colorrole role="BrightText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
<colorrole role="ButtonText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
<colorrole role="Base">
<brush brushstyle="LinearGradientPattern">
<gradient startx="0.507000000000000" starty="0.000000000000000" endx="0.507000000000000" endy="0.772000000000000" type="LinearGradient" spread="ReflectSpread" coordinatemode="ObjectBoundingMode">
<gradientstop position="0.208955000000000">
<color alpha="255">
<red>74</red>
<green>74</green>
<blue>74</blue>
</color>
</gradientstop>
<gradientstop position="0.786070000000000">
<color alpha="255">
<red>36</red>
<green>36</green>
<blue>36</blue>
</color>
</gradientstop>
</gradient>
</brush>
</colorrole>
<colorrole role="Window">
<brush brushstyle="LinearGradientPattern">
<gradient startx="0.507000000000000" starty="0.000000000000000" endx="0.507000000000000" endy="0.772000000000000" type="LinearGradient" spread="ReflectSpread" coordinatemode="ObjectBoundingMode">
<gradientstop position="0.208955000000000">
<color alpha="255">
<red>74</red>
<green>74</green>
<blue>74</blue>
</color>
</gradientstop>
<gradientstop position="0.786070000000000">
<color alpha="255">
<red>36</red>
<green>36</green>
<blue>36</blue>
</color>
</gradientstop>
</gradient>
</brush>
</colorrole>
<colorrole role="Shadow">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
</brush>
</colorrole>
<colorrole role="AlternateBase">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>39</red>
<green>39</green>
<blue>39</blue>
</color>
</brush>
</colorrole>
<colorrole role="ToolTipBase">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>220</blue>
</color>
</brush>
</colorrole>
<colorrole role="ToolTipText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
</brush>
</colorrole>
</disabled>
</palette>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="autoFillBackground">
<bool>false</bool>
</property>
<property name="styleSheet">
<string notr="true">background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255));
color: rgb(255, 255, 255);
border-radius: 5;</string>
</property>
<property name="text">
<string>Yaw</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_153">
<property name="sizePolicy">
@ -8085,83 +7534,39 @@ border-radius: 5;</string>
</property>
</widget>
</item>
<item row="1" column="5">
<widget class="QSlider" name="horizontalSlider_84">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;This adjusts how much leveling stability is set into Attitude mode (outer loop). Too much will make your vehicle oscillate in Attitude Mode.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="maximum">
<number>100</number>
</property>
<property name="sliderPosition">
<number>50</number>
</property>
<item row="1" column="7">
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="tickPosition">
<enum>QSlider::TicksBelow</enum>
<property name="sizeType">
<enum>QSizePolicy::Minimum</enum>
</property>
<property name="tickInterval">
<number>20</number>
<property name="sizeHint" stdset="0">
<size>
<width>60</width>
<height>20</height>
</size>
</property>
<property name="objrelation" stdset="0">
<stringlist>
<string>objname:StabilizationSettingsBankX</string>
<string>fieldname:YawPI</string>
<string>element:Kp</string>
<string>scale:0.1</string>
<string>haslimits:yes</string>
<string>buttongroup:2,10</string>
</stringlist>
</spacer>
</item>
<item row="1" column="5">
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
<property name="sizeType">
<enum>QSizePolicy::Minimum</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>10</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="6">
<widget class="QSpinBox" name="spinBox_15">
<property name="minimumSize">
<size>
<width>60</width>
<height>22</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>60</width>
<height>22</height>
</size>
</property>
<property name="maximum">
<number>200</number>
</property>
<property name="value">
<number>200</number>
</property>
<property name="objrelation" stdset="0">
<stringlist>
<string>objname:StabilizationSettingsBankX</string>
<string>fieldname:YawPI</string>
<string>element:Kp</string>
<string>scale:0.1</string>
<string>haslimits:yes</string>
<string>buttongroup:2,10</string>
</stringlist>
</property>
</widget>
</item>
<item row="2" column="5">
<spacer name="horizontalSpacer_48">
<property name="orientation">
<enum>Qt::Horizontal</enum>
@ -8169,7 +7574,7 @@ border-radius: 5;</string>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>1</height>
<height>20</height>
</size>
</property>
</spacer>
@ -8368,8 +7773,8 @@ border-radius: 5;</string>
<rect>
<x>0</x>
<y>0</y>
<width>950</width>
<height>736</height>
<width>866</width>
<height>697</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_29">
@ -9504,7 +8909,7 @@ border-radius: 5;</string>
</widget>
</item>
<item row="1" column="2">
<widget class="QDoubleSpinBox" name="ratePitchKp_4">
<widget class="QDoubleSpinBox" name="attitudePitchResponse">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
@ -9584,7 +8989,7 @@ response (deg/s)</string>
</widget>
</item>
<item row="2" column="1">
<widget class="QDoubleSpinBox" name="rateRollKi_3">
<widget class="QDoubleSpinBox" name="rateRollResponse">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
@ -9637,7 +9042,7 @@ response (deg/s)</string>
</widget>
</item>
<item row="3" column="1">
<widget class="QDoubleSpinBox" name="rateRollILimit_3">
<widget class="QDoubleSpinBox" name="maxRateRollLimit">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
@ -9703,58 +9108,6 @@ response (deg)</string>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QDoubleSpinBox" name="rateYawKp_3">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>22</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>22</height>
</size>
</property>
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;This sets the maximum deg your vehicle will tilt at full stick input when in Attitude mode.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="decimals">
<number>0</number>
</property>
<property name="maximum">
<double>180.000000000000000</double>
</property>
<property name="singleStep">
<double>1.000000000000000</double>
</property>
<property name="objrelation" stdset="0">
<stringlist>
<string>objname:StabilizationSettingsBankX</string>
<string>fieldname:YawMax</string>
<string>haslimits:no</string>
<string>scale:1</string>
<string>buttongroup:6,20</string>
</stringlist>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QLabel" name="label_37">
<property name="sizePolicy">
@ -10306,7 +9659,7 @@ border-radius: 5;</string>
</widget>
</item>
<item row="2" column="3">
<widget class="QDoubleSpinBox" name="rateYawKi_3">
<widget class="QDoubleSpinBox" name="rateYawResponse">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
@ -10909,7 +10262,7 @@ border-radius: 5;</string>
</widget>
</item>
<item row="1" column="1">
<widget class="QDoubleSpinBox" name="rateRollKp_3">
<widget class="QDoubleSpinBox" name="attitudeRollResponse">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
@ -10964,7 +10317,7 @@ border-radius: 5;</string>
</widget>
</item>
<item row="3" column="2">
<widget class="QDoubleSpinBox" name="ratePitchILimit_4">
<widget class="QDoubleSpinBox" name="maxRatePitchLimit">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
@ -11017,7 +10370,7 @@ border-radius: 5;</string>
</widget>
</item>
<item row="2" column="2">
<widget class="QDoubleSpinBox" name="ratePitchKi_4">
<widget class="QDoubleSpinBox" name="ratePitchResponse">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
@ -11070,7 +10423,7 @@ border-radius: 5;</string>
</widget>
</item>
<item row="3" column="3">
<widget class="QDoubleSpinBox" name="rateYawILimit_3">
<widget class="QDoubleSpinBox" name="maxRateYawLimit">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
@ -16169,7 +15522,7 @@ border-radius: 5;</string>
</disabled>
</palette>
</property>
<layout class="QGridLayout" name="gridLayout_2" columnstretch="0,0,0,0">
<layout class="QGridLayout" name="gridLayout_2" columnstretch="0,0,0">
<property name="leftMargin">
<number>0</number>
</property>
@ -16229,56 +15582,6 @@ border-radius: 5;</string>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QDoubleSpinBox" name="AttitudeYawKp">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>85</width>
<height>22</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>22</height>
</size>
</property>
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;This adjusts how much leveling stability is set into Attitude mode (outer loop). Too much will make your vehicle oscillate in Attitude Mode.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="decimals">
<number>3</number>
</property>
<property name="singleStep">
<double>0.100000000000000</double>
</property>
<property name="objrelation" stdset="0">
<stringlist>
<string>objname:StabilizationSettingsBankX</string>
<string>fieldname:YawPI</string>
<string>element:Kp</string>
<string>haslimits:no</string>
<string>scale:1</string>
<string>buttongroup:5,20</string>
</stringlist>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_31">
<property name="sizePolicy">
@ -16904,606 +16207,6 @@ border-radius: 5;</string>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QLabel" name="label_29">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>20</height>
</size>
</property>
<property name="palette">
<palette>
<active>
<colorrole role="WindowText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
<colorrole role="Button">
<brush brushstyle="LinearGradientPattern">
<gradient startx="0.507000000000000" starty="0.000000000000000" endx="0.507000000000000" endy="0.772000000000000" type="LinearGradient" spread="ReflectSpread" coordinatemode="ObjectBoundingMode">
<gradientstop position="0.208955000000000">
<color alpha="255">
<red>74</red>
<green>74</green>
<blue>74</blue>
</color>
</gradientstop>
<gradientstop position="0.786070000000000">
<color alpha="255">
<red>36</red>
<green>36</green>
<blue>36</blue>
</color>
</gradientstop>
</gradient>
</brush>
</colorrole>
<colorrole role="Light">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>58</red>
<green>58</green>
<blue>58</blue>
</color>
</brush>
</colorrole>
<colorrole role="Midlight">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>48</red>
<green>48</green>
<blue>48</blue>
</color>
</brush>
</colorrole>
<colorrole role="Dark">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>19</red>
<green>19</green>
<blue>19</blue>
</color>
</brush>
</colorrole>
<colorrole role="Mid">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>26</red>
<green>26</green>
<blue>26</blue>
</color>
</brush>
</colorrole>
<colorrole role="Text">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
<colorrole role="BrightText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
<colorrole role="ButtonText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
<colorrole role="Base">
<brush brushstyle="LinearGradientPattern">
<gradient startx="0.507000000000000" starty="0.000000000000000" endx="0.507000000000000" endy="0.772000000000000" type="LinearGradient" spread="ReflectSpread" coordinatemode="ObjectBoundingMode">
<gradientstop position="0.208955000000000">
<color alpha="255">
<red>74</red>
<green>74</green>
<blue>74</blue>
</color>
</gradientstop>
<gradientstop position="0.786070000000000">
<color alpha="255">
<red>36</red>
<green>36</green>
<blue>36</blue>
</color>
</gradientstop>
</gradient>
</brush>
</colorrole>
<colorrole role="Window">
<brush brushstyle="LinearGradientPattern">
<gradient startx="0.507000000000000" starty="0.000000000000000" endx="0.507000000000000" endy="0.772000000000000" type="LinearGradient" spread="ReflectSpread" coordinatemode="ObjectBoundingMode">
<gradientstop position="0.208955000000000">
<color alpha="255">
<red>74</red>
<green>74</green>
<blue>74</blue>
</color>
</gradientstop>
<gradientstop position="0.786070000000000">
<color alpha="255">
<red>36</red>
<green>36</green>
<blue>36</blue>
</color>
</gradientstop>
</gradient>
</brush>
</colorrole>
<colorrole role="Shadow">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
</brush>
</colorrole>
<colorrole role="AlternateBase">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>19</red>
<green>19</green>
<blue>19</blue>
</color>
</brush>
</colorrole>
<colorrole role="ToolTipBase">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>220</blue>
</color>
</brush>
</colorrole>
<colorrole role="ToolTipText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
</brush>
</colorrole>
</active>
<inactive>
<colorrole role="WindowText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
<colorrole role="Button">
<brush brushstyle="LinearGradientPattern">
<gradient startx="0.507000000000000" starty="0.000000000000000" endx="0.507000000000000" endy="0.772000000000000" type="LinearGradient" spread="ReflectSpread" coordinatemode="ObjectBoundingMode">
<gradientstop position="0.208955000000000">
<color alpha="255">
<red>74</red>
<green>74</green>
<blue>74</blue>
</color>
</gradientstop>
<gradientstop position="0.786070000000000">
<color alpha="255">
<red>36</red>
<green>36</green>
<blue>36</blue>
</color>
</gradientstop>
</gradient>
</brush>
</colorrole>
<colorrole role="Light">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>58</red>
<green>58</green>
<blue>58</blue>
</color>
</brush>
</colorrole>
<colorrole role="Midlight">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>48</red>
<green>48</green>
<blue>48</blue>
</color>
</brush>
</colorrole>
<colorrole role="Dark">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>19</red>
<green>19</green>
<blue>19</blue>
</color>
</brush>
</colorrole>
<colorrole role="Mid">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>26</red>
<green>26</green>
<blue>26</blue>
</color>
</brush>
</colorrole>
<colorrole role="Text">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
<colorrole role="BrightText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
<colorrole role="ButtonText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
<colorrole role="Base">
<brush brushstyle="LinearGradientPattern">
<gradient startx="0.507000000000000" starty="0.000000000000000" endx="0.507000000000000" endy="0.772000000000000" type="LinearGradient" spread="ReflectSpread" coordinatemode="ObjectBoundingMode">
<gradientstop position="0.208955000000000">
<color alpha="255">
<red>74</red>
<green>74</green>
<blue>74</blue>
</color>
</gradientstop>
<gradientstop position="0.786070000000000">
<color alpha="255">
<red>36</red>
<green>36</green>
<blue>36</blue>
</color>
</gradientstop>
</gradient>
</brush>
</colorrole>
<colorrole role="Window">
<brush brushstyle="LinearGradientPattern">
<gradient startx="0.507000000000000" starty="0.000000000000000" endx="0.507000000000000" endy="0.772000000000000" type="LinearGradient" spread="ReflectSpread" coordinatemode="ObjectBoundingMode">
<gradientstop position="0.208955000000000">
<color alpha="255">
<red>74</red>
<green>74</green>
<blue>74</blue>
</color>
</gradientstop>
<gradientstop position="0.786070000000000">
<color alpha="255">
<red>36</red>
<green>36</green>
<blue>36</blue>
</color>
</gradientstop>
</gradient>
</brush>
</colorrole>
<colorrole role="Shadow">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
</brush>
</colorrole>
<colorrole role="AlternateBase">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>19</red>
<green>19</green>
<blue>19</blue>
</color>
</brush>
</colorrole>
<colorrole role="ToolTipBase">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>220</blue>
</color>
</brush>
</colorrole>
<colorrole role="ToolTipText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
</brush>
</colorrole>
</inactive>
<disabled>
<colorrole role="WindowText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
<colorrole role="Button">
<brush brushstyle="LinearGradientPattern">
<gradient startx="0.507000000000000" starty="0.000000000000000" endx="0.507000000000000" endy="0.772000000000000" type="LinearGradient" spread="ReflectSpread" coordinatemode="ObjectBoundingMode">
<gradientstop position="0.208955000000000">
<color alpha="255">
<red>74</red>
<green>74</green>
<blue>74</blue>
</color>
</gradientstop>
<gradientstop position="0.786070000000000">
<color alpha="255">
<red>36</red>
<green>36</green>
<blue>36</blue>
</color>
</gradientstop>
</gradient>
</brush>
</colorrole>
<colorrole role="Light">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>58</red>
<green>58</green>
<blue>58</blue>
</color>
</brush>
</colorrole>
<colorrole role="Midlight">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>48</red>
<green>48</green>
<blue>48</blue>
</color>
</brush>
</colorrole>
<colorrole role="Dark">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>19</red>
<green>19</green>
<blue>19</blue>
</color>
</brush>
</colorrole>
<colorrole role="Mid">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>26</red>
<green>26</green>
<blue>26</blue>
</color>
</brush>
</colorrole>
<colorrole role="Text">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
<colorrole role="BrightText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
<colorrole role="ButtonText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
<colorrole role="Base">
<brush brushstyle="LinearGradientPattern">
<gradient startx="0.507000000000000" starty="0.000000000000000" endx="0.507000000000000" endy="0.772000000000000" type="LinearGradient" spread="ReflectSpread" coordinatemode="ObjectBoundingMode">
<gradientstop position="0.208955000000000">
<color alpha="255">
<red>74</red>
<green>74</green>
<blue>74</blue>
</color>
</gradientstop>
<gradientstop position="0.786070000000000">
<color alpha="255">
<red>36</red>
<green>36</green>
<blue>36</blue>
</color>
</gradientstop>
</gradient>
</brush>
</colorrole>
<colorrole role="Window">
<brush brushstyle="LinearGradientPattern">
<gradient startx="0.507000000000000" starty="0.000000000000000" endx="0.507000000000000" endy="0.772000000000000" type="LinearGradient" spread="ReflectSpread" coordinatemode="ObjectBoundingMode">
<gradientstop position="0.208955000000000">
<color alpha="255">
<red>74</red>
<green>74</green>
<blue>74</blue>
</color>
</gradientstop>
<gradientstop position="0.786070000000000">
<color alpha="255">
<red>36</red>
<green>36</green>
<blue>36</blue>
</color>
</gradientstop>
</gradient>
</brush>
</colorrole>
<colorrole role="Shadow">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
</brush>
</colorrole>
<colorrole role="AlternateBase">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>39</red>
<green>39</green>
<blue>39</blue>
</color>
</brush>
</colorrole>
<colorrole role="ToolTipBase">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>220</blue>
</color>
</brush>
</colorrole>
<colorrole role="ToolTipText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
</brush>
</colorrole>
</disabled>
</palette>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="autoFillBackground">
<bool>false</bool>
</property>
<property name="styleSheet">
<string notr="true">background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255));
color: rgb(255, 255, 255);
border-radius: 5;</string>
</property>
<property name="text">
<string>Yaw</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="2" column="3">
<widget class="QDoubleSpinBox" name="AttitudeYawKi">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>22</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>22</height>
</size>
</property>
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;This adjusts how much stability your vehicle will have when flying tilted (ie forward flight) in Attitude Mode. Adding Ki in Attitude when Ki is present in Rate is not recommended.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="decimals">
<number>3</number>
</property>
<property name="singleStep">
<double>0.100000000000000</double>
</property>
<property name="objrelation" stdset="0">
<stringlist>
<string>objname:StabilizationSettingsBankX</string>
<string>fieldname:YawPI</string>
<string>element:Ki</string>
<string>haslimits:no</string>
<string>scale:1</string>
<string>buttongroup:5,20</string>
</stringlist>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QDoubleSpinBox" name="AttitudePitchKi_2">
<property name="sizePolicy">
@ -18360,8 +17063,8 @@ border-radius: 5;</string>
<rect>
<x>0</x>
<y>0</y>
<width>950</width>
<height>671</height>
<width>879</width>
<height>663</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_8" stretch="0,0,0,0,0,0">
@ -24206,8 +22909,8 @@ font:bold;</string>
<rect>
<x>0</x>
<y>0</y>
<width>950</width>
<height>671</height>
<width>879</width>
<height>663</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_18">
@ -27452,22 +26155,19 @@ Useful if you have accidentally changed some settings.</string>
<tabstop>spinBox_13</tabstop>
<tabstop>horizontalSlider_83</tabstop>
<tabstop>spinBox_14</tabstop>
<tabstop>horizontalSlider_84</tabstop>
<tabstop>spinBox_15</tabstop>
<tabstop>lowThrottleZeroIntegral_8</tabstop>
<tabstop>realTimeUpdates_8</tabstop>
<tabstop>scrollArea_2</tabstop>
<tabstop>advancedResponsivenessCheckBox</tabstop>
<tabstop>pushButton_3</tabstop>
<tabstop>rateRollKp_3</tabstop>
<tabstop>ratePitchKp_4</tabstop>
<tabstop>rateYawKp_3</tabstop>
<tabstop>rateRollKi_3</tabstop>
<tabstop>ratePitchKi_4</tabstop>
<tabstop>rateYawKi_3</tabstop>
<tabstop>rateRollILimit_3</tabstop>
<tabstop>ratePitchILimit_4</tabstop>
<tabstop>rateYawILimit_3</tabstop>
<tabstop>attitudeRollResponse</tabstop>
<tabstop>attitudePitchResponse</tabstop>
<tabstop>rateRollResponse</tabstop>
<tabstop>ratePitchResponse</tabstop>
<tabstop>rateYawResponse</tabstop>
<tabstop>maxRateRollLimit</tabstop>
<tabstop>maxRatePitchLimit</tabstop>
<tabstop>maxRateYawLimit</tabstop>
<tabstop>enableThrustPIDScalingCheckBox</tabstop>
<tabstop>ThrustPIDSource</tabstop>
<tabstop>ThrustPIDTarget</tabstop>
@ -27488,10 +26188,8 @@ Useful if you have accidentally changed some settings.</string>
<tabstop>pushButton_2</tabstop>
<tabstop>AttitudeRollKp</tabstop>
<tabstop>AttitudePitchKp_2</tabstop>
<tabstop>AttitudeYawKp</tabstop>
<tabstop>AttitudeRollKi</tabstop>
<tabstop>AttitudePitchKi_2</tabstop>
<tabstop>AttitudeYawKi</tabstop>
<tabstop>enableThrustPIDScalingCheckBox_2</tabstop>
<tabstop>pushButton_13</tabstop>
<tabstop>realTimeUpdates_12</tabstop>

View File

@ -54,26 +54,10 @@
#include <windows.h>
#include <dbt.h>
#include <setupapi.h>
extern "C"
{
#include <hidsdi.h>
// from working mingw hidsdi.h
#ifdef __cplusplus
extern "C" {
#endif
HIDAPI VOID WINAPI HidD_GetHidGuid(LPGUID);
HIDAPI BOOL WINAPI HidD_GetPreparsedData(HANDLE, PHIDP_PREPARSED_DATA *);
HIDAPI BOOL WINAPI HidD_FreePreparsedData(PHIDP_PREPARSED_DATA);
HIDAPI BOOL WINAPI HidD_FlushQueue(HANDLE);
HIDAPI BOOL WINAPI HidD_GetConfiguration(HANDLE, PHIDD_CONFIGURATION, ULONG);
HIDAPI BOOL WINAPI HidD_SetConfiguration(HANDLE, PHIDD_CONFIGURATION, ULONG);
HIDAPI BOOL WINAPI HidD_GetPhysicalDescriptor(HANDLE, PVOID, ULONG);
HIDAPI BOOL WINAPI HidD_GetIndexedString(HANDLE, ULONG, PVOID, ULONG);
HIDAPI BOOL WINAPI HidD_GetSerialNumberString(HANDLE, PVOID, ULONG);
#ifdef __cplusplus
}
#endif
#endif // if defined(Q_OS_MAC)

View File

@ -785,9 +785,9 @@ void VehicleConfigurationHelper::applyMixerConfiguration(mixerChannelSettings ch
mSettings->setMixerValueYaw((qint8)50);
break;
case VehicleConfigurationSource::MULTI_ROTOR_HEXA_COAX_Y:
mSettings->setMixerValueRoll((qint8)100);
mSettings->setMixerValuePitch((qint8)50);
mSettings->setMixerValueYaw((qint8)66);
mSettings->setMixerValueRoll((qint8)86);
mSettings->setMixerValuePitch((qint8)100);
mSettings->setMixerValueYaw((qint8)100);
break;
case VehicleConfigurationSource::MULTI_ROTOR_OCTO:
case VehicleConfigurationSource::MULTI_ROTOR_OCTO_X:

View File

@ -15,7 +15,7 @@ Linux prerequisites
----------------------------------
$ sudo apt-get install libzip-dev libpng-dev lipjpeg-dev libtiff5-dev libcurl4-openssl-dev
$ sudo apt-get install libgeos++-dev libgdal-dev
$ sudo apt-get install libgeos++-dev libgdal-dev
Alternative (not tested recently but could work):
$ sudo apt-get build-dep openscenegraph
@ -38,8 +38,7 @@ brew install gdal
Windows prerequisites
----------------------------------
Windows requires many libraries to be build.
See osg_win.sh for more details.
pacman -S mingw-w64-i686-cmake mingw-w64-i686-gdal
Building

View File

@ -1,48 +0,0 @@
Index: GNUmakefile
===================================================================
--- GNUmakefile (revision 22722)
+++ GNUmakefile (copie de travail)
@@ -1,13 +1,13 @@
include GDALmake.opt
-GDAL_OBJ = $(GDAL_ROOT)/frmts/o/*.o \
- $(GDAL_ROOT)/gcore/*.o \
- $(GDAL_ROOT)/port/*.o \
- $(GDAL_ROOT)/alg/*.o
+GDAL_OBJ = ./frmts/o/*.o \
+ ./gcore/*.o \
+ ./port/*.o \
+ ./alg/*.o
ifeq ($(OGR_ENABLED),yes)
-GDAL_OBJ += $(GDAL_ROOT)/ogr/ogrsf_frmts/o/*.o
+GDAL_OBJ += ./ogr/ogrsf_frmts/o/*.o
endif
include ./ogr/file.lst
@@ -28,13 +28,8 @@
$(LD_SHARED) $(GDAL_SLIB_SONAME) $(GDAL_OBJ) $(GDAL_LIBS) $(LDFLAGS) $(LIBS) \
-o $(GDAL_SLIB)
-$(GDAL_LIB): $(GDAL_OBJ) GDALmake.opt
- rm -f libgdal.a
- $(AR) r $(GDAL_LIB) $(GDAL_OBJ)
- $(RANLIB) $(GDAL_LIB)
-
-$(GDAL_SLIB): $(GDAL_OBJ) $(GDAL_LIB)
- $(LD_SHARED) $(GDAL_SLIB_SONAME) $(GDAL_OBJ) $(GDAL_LIBS) $(LDFLAGS) $(LIBS) \
+$(GDAL_SLIB): $(GDAL_OBJ)
+ $(LD_SHARED) $(GDAL_SLIB_SONAME) $(GDAL_OBJ) $(LDFLAGS) $(LIBS) \
-o $(GDAL_SLIB)
$(LIBGDAL): $(GDAL_OBJ:.o=.lo)
@@ -47,7 +42,7 @@
endif
check-lib: port-target core-target frmts-target ogr-target
- $(MAKE) $(LIBGDAL-yes)
+ $(MAKE) $(GDAL_SLIB)
port-target:
(cd port; $(MAKE))

View File

@ -1,388 +0,0 @@
#!/bin/sh -e
################################################################################
#
# This script compiles OSG and OSGEarth dependencies (GDAL, GEOS, ...)
#
# Known to work with MSYS 1.0.11
# A zip file is provided here http://librepilot.github.io/tools/MSYS-1.0.11.zip
# This zip is based on the official http://downloads.sourceforge.net/mingw/MSYS-1.0.11.exe
# It was generated by installing MSYS-1.0.11.exe and adding to it:
# - http://gnuwin32.sourceforge.net/packages/wget.htm
# - http://gnuwin32.sourceforge.net/packages/libintl.htm
# - http://gnuwin32.sourceforge.net/packages/libiconv.htm
# And finally zipping the resulting directory (minus Readme.txt)
#
# A good source for building with mingw :
# http://www.gaia-gis.it/gaia-sins/mingw_how_to.html
#
# Sample command line to execute this script from a MS shell :
# .\tools\msys\bin\sh --login -i -c /d/Projects/LibrePilot/make/3rdparty/osgearth/osg_win.sh
#
# Executing this script from git bash does not seem to work.
#
################################################################################
# turn -x on if DEBUG is set to a non-empty string
[ -n "$DEBUG" ] && set -x
################################################################################
# MinGW
################################################################################
#MINGW_DIR=D:/Projects/LibrePilotTools/qt-5.4.1/Tools/mingw491_32
if [ -z "$MINGW_DIR" ]; then
echo MINGW_DIR not defined. Exiting...
exit 1
fi
umount /mingw || true
mount $MINGW_DIR /mingw
################################################################################
# Environment
################################################################################
BASE_DIR=$(dirname $0)
WORK_DIR=$BASE_DIR
ROOT_DIR=$BASE_DIR/../../..
DOWNLOAD_DIR=$ROOT_DIR/downloads/osg
SOURCE_DIR=$ROOT_DIR/3rdparty/osg_dependencies
BUILD_DIR=$ROOT_DIR/build/3rdparty/osg_dependencies
HOST=mingw32
DOWNLOAD_FILES=1
echo Root dir : $ROOT_DIR
echo Work dir : $WORK_DIR
echo Build dir : $BUILD_DIR
echo MinGW dir : $MINGW_DIR
################################################################################
# download sources
################################################################################
if [ "$DOWNLOAD_FILES" -eq 1 ]; then
SRC_FILES="
http://pkgconfig.freedesktop.org/releases/pkg-config-0.28.tar.gz
http://zlib.net/zlib-1.2.8.tar.gz
http://www.ijg.org/files/jpegsrc.v9a.tar.gz
http://sourceforge.net/projects/libpng/files/libpng16/older-releases/1.6.16/libpng-1.6.16.tar.gz
ftp://ftp.remotesensing.org/pub/libtiff/tiff-4.0.3.tar.gz
http://sourceforge.net/projects/freetype/files/freetype2/2.5.3/freetype-2.5.3.tar.gz
http://curl.haxx.se/download/curl-7.38.0.tar.gz
http://download.osgeo.org/proj/proj-4.8.0.tar.gz
http://download.osgeo.org/proj/proj-datumgrid-1.5.tar.gz
http://download.osgeo.org/geos/geos-3.3.8.tar.bz2
http://download.osgeo.org/gdal/1.10.1/gdal-1.10.1.tar.gz
"
mkdir -p $DOWNLOAD_DIR/
for f in $SRC_FILES
do
filename=$(basename "$f")
if [ ! -f $DOWNLOAD_DIR/$filename ]; then
echo "****************************************"
echo "Downloading $filename"
echo "****************************************"
wget -P $DOWNLOAD_DIR/ $f
fi
done
fi
################################################################################
# build all
################################################################################
# list of libraries to build
# other candidates include bzip2, libxml2, gif, geotiff, ssl, gl...
BUILD_PKGCONFIG=1
BUILD_ZLIB=1
BUILD_LIBJPEG=1
BUILD_LIBPNG=1
BUILD_LIBTIFF=1
BUILD_FREETYPE=1
BUILD_OPENSSL=2
BUILD_CURL=1
BUILD_PROJ4=1
BUILD_GEOS=1
BUILD_GDAL=1
# TODO
# libcurl needs to be built with and ssl support
# gdal does not seem to link with shared proj4
# Clean src and build dirs
rm -rf $SOURCE_DIR/*
rm -rf $BUILD_DIR/*
mkdir -p $SOURCE_DIR/
mkdir -p $BUILD_DIR/
mkdir -p $BUILD_DIR/bin/
mkdir -p $BUILD_DIR/include/
mkdir -p $BUILD_DIR/lib/
# make sure all libraries see each others
export PATH=$BUILD_DIR/bin:$PATH
export CPATH=$BUILD_DIR/include
export LIBRARY_PATH=$BUILD_DIR/lib
export PKG_CONFIG_PATH=$BUILD_DIR/lib/pkgconfig
# compiler flags
export CFLAGS=-O2
export CXXFLAGS=-O2
################################################################################
# pkg-config
# required by libcurl, gdal, osg, osgearth
################################################################################
if [ "$BUILD_PKGCONFIG" -eq 1 ]; then
echo "****************************************"
echo "Building pkg-config..."
echo "****************************************"
cd $SOURCE_DIR
tar xzf $DOWNLOAD_DIR/pkg-config-0.28.tar.gz -C .
cd pkg-config-0.28
./configure --prefix=$BUILD_DIR --build=$HOST \
--with-internal-glib
make
make install
fi
################################################################################
# ZLIB
# required by libcurl, gdal, osg, osgearth
################################################################################
if [ "$BUILD_ZLIB" -eq 1 ]; then
echo "****************************************"
echo "Building zlib..."
echo "****************************************"
cd $SOURCE_DIR
tar xzf $DOWNLOAD_DIR/zlib-1.2.8.tar.gz -C .
cd zlib-1.2.8
make -f win32/Makefile.gcc clean
make -f win32/Makefile.gcc
cp -f zlib1.dll $BUILD_DIR/bin/
cp -f zconf.h $BUILD_DIR/include/
cp -f zlib.h $BUILD_DIR/include/
cp -f libz.a $BUILD_DIR/lib/
cp -f libz.dll.a $BUILD_DIR/lib/
fi
################################################################################
# LIBJPEG
# required by gdal, osg, osgearth
################################################################################
if [ "$BUILD_LIBJPEG" -eq 1 ]; then
echo "****************************************"
echo "Building libjpeg..."
echo "****************************************"
cd $SOURCE_DIR
tar xzf $DOWNLOAD_DIR/jpegsrc.v9a.tar.gz -C .
cd jpeg-9a
./configure --prefix=$BUILD_DIR --build=$HOST
make
make install-strip
fi
################################################################################
# LIBPNG
# required by gdal, osg, osgearth
################################################################################
if [ "$BUILD_LIBPNG" -eq 1 ]; then
echo "****************************************"
echo "Building libpng..."
echo "****************************************"
cd $SOURCE_DIR
tar xzf $DOWNLOAD_DIR/libpng-1.6.16.tar.gz -C .
cd libpng-1.6.16
./configure --prefix=$BUILD_DIR --build=$HOST
make
make install-strip
fi
################################################################################
# LIBTIFF
# reqires zlib
# required by gdal, osg, osgearth
################################################################################
if [ "$BUILD_LIBTIFF" -eq 1 ]; then
echo "****************************************"
echo "Building libtiff..."
echo "****************************************"
cd $SOURCE_DIR
tar xzf $DOWNLOAD_DIR/tiff-4.0.3.tar.gz -C .
cd tiff-4.0.3
./configure --prefix=$BUILD_DIR --build=$HOST
make
make install-strip
fi
################################################################################
# FreeType
################################################################################
if [ "$BUILD_FREETYPE" -eq 1 ]; then
echo "****************************************"
echo "Building FreeType..."
echo "****************************************"
cd $SOURCE_DIR
tar xzf $DOWNLOAD_DIR/freetype-2.5.3.tar.gz -C .
cd freetype-2.5.3
./configure --prefix=$BUILD_DIR
make
make install
fi
################################################################################
# OpenSSL
################################################################################
if [ "$BUILD_OPENSSL" -eq 1 ]; then
echo "****************************************"
echo "Building OpenSSL..."
echo "****************************************"
cd $SOURCE_DIR
tar xzf $DOWNLOAD_DIR/curl-7.38.0.tar.gz -C .
cd curl-7.38.0
./configure --prefix=$BUILD_DIR --build=$HOST
make
make install
fi
################################################################################
# cURL
# required by gdal, osgearth
################################################################################
if [ "$BUILD_CURL" -eq 1 ]; then
echo "****************************************"
echo "Building cURL..."
echo "****************************************"
cd $SOURCE_DIR
tar xzf $DOWNLOAD_DIR/curl-7.38.0.tar.gz -C .
cd curl-7.38.0
./configure --prefix=$BUILD_DIR --build=$HOST \
--enable-shared=yes --with-zlib=$BUILD_DIR
make
make install-strip
fi
################################################################################
# PROJ.4
# required by osgearth
################################################################################
if [ "$BUILD_PROJ4" -eq 1 ]; then
echo "****************************************"
echo "Building PROJ.4..."
echo "****************************************"
cd $SOURCE_DIR
tar -xzf $DOWNLOAD_DIR/proj-4.8.0.tar.gz -C .
tar -xzf $DOWNLOAD_DIR/proj-datumgrid-1.5.tar.gz -C proj-4.8.0/nad/
cd proj-4.8.0
./configure --prefix=$BUILD_DIR --build=$HOST \
--enable-static=no --enable-shared=yes
make
make install
fi
################################################################################
# GEOS
# required by gdal
################################################################################
if [ "$BUILD_GEOS" -eq 1 ]; then
echo "****************************************"
echo "Building GEOS..."
echo "****************************************"
cd $SOURCE_DIR
tar xjf $DOWNLOAD_DIR/geos-3.3.8.tar.bz2 -C .
cd geos-3.3.8
# TODO why --disable-inline?
./configure --prefix=$BUILD_DIR --build=$HOST \
--enable-static=no --enable-shared=yes --disable-inline
make
make install
fi
################################################################################
# GDAL
# requires zlib, libcurl, libpng, libjpeg, libtiff, geos
# required by osgearth
################################################################################
if [ "$BUILD_GDAL" -eq 1 ]; then
echo "****************************************"
echo "Building GDAL..."
echo "****************************************"
cd $SOURCE_DIR
tar xzf $DOWNLOAD_DIR/gdal-1.10.1.tar.gz -C .
cd gdal-1.10.1
# fix GNUmakefile as described here http://trac.osgeo.org/gdal/wiki/BuildingWithMinGW
patch < $WORK_DIR/gdal_GNUmakefile_fix.patch
./configure --prefix=$BUILD_DIR --build=$HOST \
--without-python --without-libtool \
--with-xerces=no \
--with-libz=$BUILD_DIR --with-curl=$BUILD_DIR \
--with-png=$BUILD_DIR --with-jpeg=$BUILD_DIR --with-libtiff=$BUILD_DIR \
--with-geos=$BUILD_DIR/bin/geos-config
make
make install
fi

View File

@ -35,8 +35,7 @@
# Windows prerequisites
################################
#
# Windows versions of osg and osgearth require many additional libraries to be build
# See osg_win.sh
# pacman -S mingw-w64-i686-cmake mingw-w64-i686-gdal
#
################################
# OSX prerequisites
@ -104,19 +103,23 @@ ifeq ($(UNAME), Linux)
OSG_NAME := $(OSG_BASE_NAME)-linux-x86
endif
OSG_CMAKE_GENERATOR := "Unix Makefiles"
OSG_CMAKE_MAKE_PROGRAM := make
OSG_WINDOWING_SYSTEM := "X11"
# for some reason Qt is not added to the path in make/tools.mk
OSG_BUILD_PATH := $(QT_SDK_PREFIX)/bin:$(PATH)
else ifeq ($(UNAME), Darwin)
OSG_NAME := $(OSG_BASE_NAME)-clang_64
OSG_CMAKE_GENERATOR := "Unix Makefiles"
OSG_CMAKE_MAKE_PROGRAM := make
OSG_WINDOWING_SYSTEM := "Cocoa"
OSG_BUILD_PATH := $(QT_SDK_PREFIX)/bin:$(PATH)
else ifeq ($(UNAME), Windows)
OSG_NAME := $(OSG_BASE_NAME)-$(QT_SDK_ARCH)
OSG_CMAKE_GENERATOR := "MinGW Makefiles"
OSG_CMAKE_MAKE_PROGRAM := /mingw32/bin/mingw32-make
# CMake is quite picky about its PATH and will complain if sh.exe is found in it
OSG_BUILD_PATH := $(MINGW_DIR)/bin:$(QT_SDK_PREFIX)/bin
#OSG_BUILD_PATH := $(MINGW_DIR)/bin:$(QT_SDK_PREFIX)/bin:/usr/bin:
#OSG_BUILD_PATH := $(PATH)
endif
OSG_NAME := $(OSG_NAME_PREFIX)$(OSG_NAME)$(OSG_NAME_SUFIX)
@ -130,15 +133,17 @@ osg:
@$(ECHO) "Building osg $(call toprel, $(OSG_SRC_DIR)) into $(call toprel, $(OSG_BUILD_DIR))"
$(V1) $(MKDIR) -p $(OSG_BUILD_DIR)
$(V1) ( $(CD) $(OSG_BUILD_DIR) && \
PATH=$(OSG_BUILD_PATH) && \
if [ $(OSG_BUILD_PATH) != "" ]; then \
PATH=$(OSG_BUILD_PATH) ; \
fi ; \
$(CMAKE) -G $(OSG_CMAKE_GENERATOR) -DCMAKE_BUILD_TYPE=$(OSG_BUILD_CONF) \
-DCMAKE_MAKE_PROGRAM=$(OSG_CMAKE_MAKE_PROGRAM) \
-DOSG_USE_QT=ON \
-DBUILD_OSG_APPLICATIONS=ON \
-DBUILD_OSG_EXAMPLES=OFF \
-DBUILD_OPENTHREADS_WITH_QT=OFF \
-DOSG_GL3_AVAILABLE=OFF \
-DOSG_PLUGIN_SEARCH_INSTALL_DIR_FOR_PLUGINS=OFF \
-DCMAKE_PREFIX_PATH=$(BUILD_DIR)/3rdparty/osg_dependencies \
-DCMAKE_OSX_ARCHITECTURES="x86_64" \
-DOSG_WINDOWING_SYSTEM=$(OSG_WINDOWING_SYSTEM) \
-DCMAKE_INSTALL_NAME_DIR=@executable_path/../Plugins \
@ -160,8 +165,17 @@ package_osg:
.PHONY: install_win_osg
install_win_osg:
$(V1) $(CP) $(BUILD_DIR)/3rdparty/osg_dependencies/bin/*.dll $(OSG_INSTALL_DIR)/bin/
$(V1) $(CP) $(BUILD_DIR)/3rdparty/osg_dependencies/lib/*.dll $(OSG_INSTALL_DIR)/bin/
$(V1) $(CP) /mingw32/bin/libcurl-4.dll $(OSG_INSTALL_DIR)/bin/
$(V1) $(CP) /mingw32/bin/libfreetype-6.dll $(OSG_INSTALL_DIR)/bin/
$(V1) $(CP) /mingw32/bin/libgdal-20.dll $(OSG_INSTALL_DIR)/bin/
$(V1) $(CP) /mingw32/bin/libgeos.dll $(OSG_INSTALL_DIR)/bin/
$(V1) $(CP) /mingw32/bin/libgeos_c.dll $(OSG_INSTALL_DIR)/bin/
$(V1) $(CP) /mingw32/bin/libjpeg-8.dll $(OSG_INSTALL_DIR)/bin/
$(V1) $(CP) /mingw32/bin/libpng16-16.dll $(OSG_INSTALL_DIR)/bin/
$(V1) $(CP) /mingw32/bin/libproj-9.dll $(OSG_INSTALL_DIR)/bin/
$(V1) $(CP) /mingw32/bin/libtiff-5.dll $(OSG_INSTALL_DIR)/bin/
$(V1) $(CP) /mingw32/bin/libtiffxx-5.dll $(OSG_INSTALL_DIR)/bin/
$(V1) $(CP) /mingw32/bin/zlib1.dll $(OSG_INSTALL_DIR)/bin/
.NOTPARALLEL:
.PHONY: prepare_osg
@ -223,6 +237,7 @@ ifeq ($(UNAME), Linux)
OSGEARTH_NAME := $(OSGEARTH_BASE_NAME)-linux-x86
endif
OSGEARTH_CMAKE_GENERATOR := "Unix Makefiles"
OSGEARTH_CMAKE_MAKE_PROGRAM := make
# for some reason Qt is not added to the path in make/tools.mk
OSGEARTH_BUILD_PATH := $(QT_SDK_PREFIX)/bin:$(OSG_INSTALL_DIR)/bin:$(PATH)
ifeq ($(ARCH), x86_64)
@ -233,13 +248,15 @@ ifeq ($(UNAME), Linux)
else ifeq ($(UNAME), Darwin)
OSGEARTH_NAME := $(OSGEARTH_BASE_NAME)-clang_64
OSGEARTH_CMAKE_GENERATOR := "Unix Makefiles"
OSGEARTH_CMAKE_MAKE_PROGRAM := make
OSGEARTH_BUILD_PATH := $(QT_SDK_PREFIX)/bin:$(OSG_INSTALL_DIR)/bin:$(PATH)
OSGEARTH_LIB_PATH := $(OSG_INSTALL_DIR)/lib
else ifeq ($(UNAME), Windows)
OSGEARTH_NAME := $(OSGEARTH_BASE_NAME)-$(QT_SDK_ARCH)
OSGEARTH_CMAKE_GENERATOR := "MinGW Makefiles"
OSGEARTH_CMAKE_MAKE_PROGRAM := /mingw32/bin/mingw32-make
# CMake is quite picky about its PATH and will complain if sh.exe is found in it
OSGEARTH_BUILD_PATH := $(MINGW_DIR)/bin:$(QT_SDK_PREFIX)/bin:$(OSG_INSTALL_DIR)/bin
#OSGEARTH_BUILD_PATH := $(MINGW_DIR)/bin:$(QT_SDK_PREFIX)/bin:$(OSG_INSTALL_DIR)/bin
OSGEARTH_LIB_PATH := $(OSG_INSTALL_DIR)/lib
endif
@ -254,17 +271,20 @@ osgearth:
@$(ECHO) "Building osgEarth $(call toprel, $(OSGEARTH_SRC_DIR)) into $(call toprel, $(OSGEARTH_BUILD_DIR))"
$(V1) $(MKDIR) -p $(OSGEARTH_BUILD_DIR)
$(V1) ( $(CD) $(OSGEARTH_BUILD_DIR) && \
PATH=$(OSGEARTH_BUILD_PATH) && \
if [ $(OSGEARTH_BUILD_PATH) != "" ]; then \
PATH=$(OSGEARTH_BUILD_PATH) ; \
fi ; \
LD_LIBRARY_PATH=$(OSGEARTH_LIB_PATH) && \
export DYLD_LIBRARY_PATH=$(OSGEARTH_LIB_PATH) && \
unset OSG_NOTIFY_LEVEL && \
$(CMAKE) -G $(OSGEARTH_CMAKE_GENERATOR) -DCMAKE_BUILD_TYPE=$(OSGEARTH_BUILD_CONF) \
-DCMAKE_MAKE_PROGRAM=$(OSGEARTH_CMAKE_MAKE_PROGRAM) \
-DOSGEARTH_USE_QT=ON \
-DINSTALL_TO_OSG_DIR=OFF \
-DOSG_DIR=$(OSG_INSTALL_DIR) \
-DCMAKE_INCLUDE_PATH=$(OSG_INSTALL_DIR)/include \
-DCMAKE_LIBRARY_PATH=$(OSG_INSTALL_DIR)/lib \
-DCMAKE_PREFIX_PATH=$(BUILD_DIR)/3rdparty/osg_dependencies \
-DCMAKE_PREFIX_PATH=$(OSGEARTH_LIB_PATH) \
-DCMAKE_OSX_ARCHITECTURES="x86_64" \
-DCMAKE_INSTALL_NAME_DIR=@executable_path/../Plugins \
-DCMAKE_INSTALL_PREFIX=$(OSGEARTH_INSTALL_DIR) $(OSGEARTH_SRC_DIR) && \

View File

@ -16,6 +16,20 @@
# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# Make sure we know few things about the architecture before including
# the tools.mk to ensure that we download/install the right tools.
UNAME := $(shell uname)
# Here and everywhere if not Linux or Mac then assume Windows
ifeq ($(filter Linux Darwin, $(UNAME)), )
UNAME := Windows
endif
ifeq ($(UNAME),Windows)
system_path = $(shell cygpath -w $(1))
else
system_path = $(1)
endif
# Function for converting Windows style slashes into Unix style
slashfix = $(subst \,/,$(1))
@ -36,3 +50,4 @@ endef
smallify = $(subst $(SPACE),-,$(call lc,$1))
get_arch = $(shell $(CC) -dumpmachine | sed s/-.*//)

View File

@ -195,6 +195,25 @@ class Repo:
except:
return None
def version_four_num(self):
"""Return package version in format X.X.X.X using only numbers"""
try:
(release, junk, candidate) = self._last_tag.partition("-RC")
(year, dot, month_and_patch) = release.partition(".")
(month, dot, patch) = month_and_patch.partition(".")
if candidate == "":
candidate = "64" # Need to stay below 65536 for last part
if patch == "":
patch = "0"
return "{}.{}.{}.{}{:0>3.3}".format(year,month,patch,candidate,self._num_commits_past_tag)
except:
return None
def revision(self):
"""Return full revison string (tag if defined, or branch:hash date time if no tag)"""
try:
@ -463,6 +482,7 @@ string given.
TAG_OR_BRANCH = r.tag(r.branch('unreleased')),
TAG_OR_HASH8 = r.tag(r.hash(8, 'untagged')),
LABEL = r.label(),
VERSION_FOUR_NUM = r.version_four_num(),
REVISION = r.revision(),
DIRTY = r.dirty(),
FWTAG = xtrim(r.tag(r.branch('unreleased')), r.dirty(), 25),

View File

@ -174,9 +174,11 @@ QT_SDK_PREFIX := $(QT_SDK_DIR)
#
##############################
BUILD_SDK_TARGETS := arm_sdk qt_sdk osg
BUILD_SDK_TARGETS := arm_sdk osg
ifeq ($(UNAME), Windows)
BUILD_SDK_TARGETS += sdl osgearth nsis mesawin openssl ccache
BUILD_SDK_TARGETS += nsis osgearth
else
BUILD_SDK_TARGETS += qt_sdk
endif
ALL_SDK_TARGETS := $(BUILD_SDK_TARGETS) gtest uncrustify doxygen

View File

@ -54,9 +54,9 @@ install: uninstall
$(V1) $(MKDIR) -p $(DESTDIR)$(datadir)
$(V1) $(MKDIR) -p $(DESTDIR)$(datadir)/applications
$(V1) $(MKDIR) -p $(DESTDIR)$(datadir)/pixmaps
$(V1) $(INSTALL) $(BUILD_DIR)/$(GCS_SMALL_NAME)_$(GCS_BUILD_CONF)/bin/$(GCS_SMALL_NAME) $(DESTDIR)$(bindir)
$(V1) $(INSTALL) $(BUILD_DIR)/$(GCS_SMALL_NAME)_$(GCS_BUILD_CONF)/$(libbasename)/$(GCS_SMALL_NAME) $(DESTDIR)$(libdir)
$(V1) $(INSTALL) $(BUILD_DIR)/$(GCS_SMALL_NAME)_$(GCS_BUILD_CONF)/share/$(GCS_SMALL_NAME) $(DESTDIR)$(datadir)
$(V1) $(INSTALL) $(GCS_DIR)/bin/$(GCS_SMALL_NAME) $(DESTDIR)$(bindir)
$(V1) $(INSTALL) $(GCS_DIR)/$(libbasename)/$(GCS_SMALL_NAME) $(DESTDIR)$(libdir)
$(V1) $(INSTALL) $(GCS_DIR)/share/$(GCS_SMALL_NAME) $(DESTDIR)$(datadir)
$(V1) $(INSTALL) -T $(ROOT_DIR)/package/linux/gcs.desktop $(DESTDIR)$(datadir)/applications/$(ORG_SMALL_NAME).desktop
$(V1) $(INSTALL) -T $(ROOT_DIR)/ground/gcs/src/plugins/coreplugin/images/$(ORG_SMALL_NAME)_logo_128.png \
$(DESTDIR)$(datadir)/pixmaps/$(ORG_SMALL_NAME).png

View File

@ -6,31 +6,36 @@ ifndef TOP_LEVEL_MAKEFILE
$(error Top level Makefile must be used to build this target)
endif
VERSION_CMD := $(VERSION_INFO)
PACKAGE_EXE := $(BUILD_DIR)/$(PACKAGE_FULL_NAME)_$(ARCH).exe
NSIS_OPTS := /V3
NSIS_OPTS := -V3
NSIS_WINX86 := $(ROOT_DIR)/package/winx86
NSIS_SCRIPT := $(NSIS_WINX86)/gcs.nsi
NSIS_TEMPLATE := $(NSIS_WINX86)/gcs.tpl
NSIS_HEADER := $(OPGCSSYNTHDIR)/gcs.nsh
ifeq ($(ARCH),x86_64)
WIN_DEF = -DW64
endif
.PHONY: package
package: gcs uavobjects_matlab | $(PACKAGE_DIR)
package: $(PACKAGE_EXE)
$(PACKAGE_EXE): $(NSIS_SCRIPT) gcs uavobjects_matlab | $(PACKAGE_DIR)
ifneq ($(GCS_BUILD_CONF),release)
# We can only package release builds
$(error Packaging is currently supported for release builds only)
endif
$(V1) mkdir -p "$(dir $(NSIS_HEADER))"
$(VERSION_CMD) \
--template='$(NSIS_TEMPLATE)' \
--outfile='$(NSIS_HEADER)' \
ORG_BIG_NAME='$(ORG_BIG_NAME)' \
GCS_BIG_NAME='$(GCS_BIG_NAME)' \
GCS_SMALL_NAME='$(GCS_SMALL_NAME)' \
PACKAGE_LBL='$(PACKAGE_LBL)' \
PACKAGE_NAME='$(PACKAGE_NAME)' \
PACKAGE_SEP='$(PACKAGE_SEP)'
$(V1) echo "Building Windows installer, please wait..."
$(V1) echo "If you have a script error in line 1 - use Unicode NSIS 2.46+"
$(V1) echo " http://www.scratchpaper.com"
$(NSIS) $(NSIS_OPTS) $(NSIS_SCRIPT)
$(NSIS) $(NSIS_OPTS) \
-DORG_BIG_NAME='$(ORG_BIG_NAME)' \
-DGCS_BIG_NAME='$(GCS_BIG_NAME)' \
-DGCS_SMALL_NAME='$(GCS_SMALL_NAME)' \
-DPACKAGE_LBL='$(PACKAGE_LBL)' \
-DVERSION_FOUR_NUM='$(shell $(VERSION_INFO) --format=\$${VERSION_FOUR_NUM})' \
-DOUT_FILE='$(call system_path,$(PACKAGE_EXE))' \
-DPROJECT_ROOT='$(call system_path,$(ROOT_DIR))' \
-DGCS_BUILD_TREE='$(call system_path,$(GCS_DIR))' \
-DUAVO_SYNTH_TREE='$(call system_path,$(UAVOBJ_OUT_DIR))' \
$(WIN_DEF) \
$(NSIS_SCRIPT)

View File

@ -29,20 +29,19 @@
; Includes
!include "x64.nsh"
!include "..\..\build\gcs-synthetics\gcs.nsh"
;--------------------------------
; Paths
; Tree root locations (relative to this script location)
!define PROJECT_ROOT "..\.."
!define NSIS_DATA_TREE "."
!define GCS_BUILD_TREE "..\..\build\${GCS_SMALL_NAME}_release"
!define UAVO_SYNTH_TREE "..\..\build\uavobject-synthetics"
!define AEROSIMRC_TREE "${GCS_BUILD_TREE}\misc\AeroSIM-RC"
; Default installation folder
InstallDir "$PROGRAMFILES\${ORG_BIG_NAME}"
!ifdef W64
InstallDir "$PROGRAMFILES64\${ORG_BIG_NAME}"
!else
InstallDir "$PROGRAMFILES32\${ORG_BIG_NAME}"
!endif
; Get installation folder from registry if available
InstallDirRegKey HKLM "Software\${ORG_BIG_NAME}" "Install Location"
@ -50,21 +49,15 @@
;--------------------------------
; Version information
; Program name and installer file
!define PRODUCT_NAME "${GCS_BIG_NAME}"
!define INSTALLER_NAME "${GCS_BIG_NAME} Installer"
Name "${GCS_BIG_NAME}"
OutFile "${OUT_FILE}"
Name "${PRODUCT_NAME}"
OutFile "${PACKAGE_DIR}\..\${OUT_FILE}"
VIProductVersion ${PRODUCT_VERSION}
VIAddVersionKey "ProductName" "${INSTALLER_NAME}"
VIAddVersionKey "FileVersion" "${FILE_VERSION}"
VIAddVersionKey "Comments" "${INSTALLER_NAME}. ${BUILD_DESCRIPTION}"
VIProductVersion ${VERSION_FOUR_NUM}
VIAddVersionKey "ProductName" "${GCS_BIG_NAME}"
VIAddVersionKey "ProductVersion" "${VERSION_FOUR_NUM}"
VIAddVersionKey "CompanyName" "The LibrePilot Team, http://www.librepilot.org"
VIAddVersionKey "LegalTrademarks" "${PRODUCT_NAME} is a trademark of The LibrePilot Team"
VIAddVersionKey "LegalCopyright" "© 2015 The LibrePilot Team"
VIAddVersionKey "FileDescription" "${INSTALLER_NAME}"
VIAddVersionKey "FileDescription" "${GCS_BIG_NAME} Installer"
;--------------------------------
; Installer interface and base settings
@ -182,13 +175,6 @@ Section "-Plugins" InSecPlugins
File /r "${GCS_BUILD_TREE}\lib\${GCS_SMALL_NAME}\plugins\*.pluginspec"
SectionEnd
; Copy OSG libs
Section "-OsgLibs" InSecOsgLibs
SectionIn RO
SetOutPath "$INSTDIR\lib\${GCS_SMALL_NAME}\osg"
File /r "${GCS_BUILD_TREE}\lib\${GCS_SMALL_NAME}\osg\*.dll"
SectionEnd
; Copy GCS resources
Section "-Resources" InSecResources
SetOutPath "$INSTDIR\share"
@ -222,7 +208,7 @@ SectionEnd
; Copy Opengl32.dll if needed (disabled by default)
Section /o "Mesa OpenGL driver" InSecInstallOpenGL
SetOutPath "$INSTDIR\bin"
File /r "${GCS_BUILD_TREE}\bin\opengl32_32\opengl32.dll"
File /r "${GCS_BUILD_TREE}\bin\opengl32\opengl32.dll"
SectionEnd
; AeroSimRC plugin files
@ -236,9 +222,9 @@ Section "Shortcuts" InSecShortcuts
SetOutPath "$INSTDIR"
CreateDirectory "$SMPROGRAMS\${ORG_BIG_NAME}"
CreateShortCut "$SMPROGRAMS\${ORG_BIG_NAME}\${GCS_BIG_NAME}.lnk" "$INSTDIR\bin\${GCS_SMALL_NAME}.exe" \
"" "$INSTDIR\bin\${GCS_SMALL_NAME}.exe" 0 "" "" "${PRODUCT_NAME} ${PRODUCT_VERSION}. ${BUILD_DESCRIPTION}"
"" "$INSTDIR\bin\${GCS_SMALL_NAME}.exe" 0
CreateShortCut "$SMPROGRAMS\${ORG_BIG_NAME}\${GCS_BIG_NAME} (clean configuration).lnk" "$INSTDIR\bin\${GCS_SMALL_NAME}.exe" \
"-reset" "$INSTDIR\bin\${GCS_SMALL_NAME}.exe" 0 "" "" "${PRODUCT_NAME} ${PRODUCT_VERSION}. ${BUILD_DESCRIPTION}"
"-reset" "$INSTDIR\bin\${GCS_SMALL_NAME}.exe" 0
CreateShortCut "$SMPROGRAMS\${ORG_BIG_NAME}\License.lnk" "$INSTDIR\LICENSE.txt" \
"" "$INSTDIR\bin\${GCS_SMALL_NAME}.exe" 0
CreateShortCut "$SMPROGRAMS\${ORG_BIG_NAME}\ReadMe.lnk" "$INSTDIR\README.txt" \
@ -254,7 +240,7 @@ Section "Shortcuts" InSecShortcuts
CreateShortCut "$SMPROGRAMS\${ORG_BIG_NAME}\Forums.lnk" "http://forum.librepilot.org" \
"" "$INSTDIR\bin\${GCS_SMALL_NAME}.exe" 0
CreateShortCut "$DESKTOP\${GCS_BIG_NAME}.lnk" "$INSTDIR\bin\${GCS_SMALL_NAME}.exe" \
"" "$INSTDIR\bin\${GCS_SMALL_NAME}.exe" 0 "" "" "${PRODUCT_NAME} ${PRODUCT_VERSION}. ${BUILD_DESCRIPTION}"
"" "$INSTDIR\bin\${GCS_SMALL_NAME}.exe" 0
CreateShortCut "$SMPROGRAMS\${ORG_BIG_NAME}\Uninstall.lnk" "$INSTDIR\Uninstall.exe" "" "$INSTDIR\Uninstall.exe" 0
SectionEnd

View File

@ -1,28 +0,0 @@
#
# *****************************************************************************
#
# @file ${OUTFILENAME}
# @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2011-2015.
# @brief Autogenerated NSIS header file, built using template
# ${TEMPLATE}
#
# @see The GNU Public License (GPL) Version 3
#
# *****************************************************************************
#
; Some names, paths and constants
!define ORG_BIG_NAME "${ORG_BIG_NAME}"
!define GCS_BIG_NAME "${GCS_BIG_NAME}"
!define GCS_SMALL_NAME "${GCS_SMALL_NAME}"
!define PACKAGE_LBL "${PACKAGE_LBL}"
!define PACKAGE_NAME "${PACKAGE_NAME}"
!define PACKAGE_SEP "${PACKAGE_SEP}"
!define PACKAGE_DIR "..\..\build\package"
!define FIRMWARE_DIR "firmware"
!define OUT_FILE "$${PACKAGE_NAME}$${PACKAGE_SEP}$${PACKAGE_LBL}$${PACKAGE_SEP}win32.exe"
; Installer version info
!define PRODUCT_VERSION "0.0.0.0"
!define FILE_VERSION "${TAG_OR_BRANCH}:${HASH8}${DIRTY} ${DATETIME}"
!define BUILD_DESCRIPTION "${PACKAGE_LBL} built from ${ORIGIN}, committed ${DATETIME} as ${HASH}"

View File

@ -76,12 +76,7 @@ function download_file
#2 The output directory
function zip_extract
{
if [ "$uname" = Windows ]
then
7za.exe x -o"$2" "$1"
else
unzip "$1" -d "$2"
fi
unzip "$1" -d "$2"
}
## Extracts a 7zip file