diff --git a/.ackrc b/.ackrc
new file mode 100644
index 0000000..6268ded
--- /dev/null
+++ b/.ackrc
@@ -0,0 +1 @@
+--ignore-dir=doc
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
new file mode 100644
index 0000000..e4c1d8a
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -0,0 +1,42 @@
+---
+name: Bug report
+about: Create a report to help us improve
+labels:
+
+---
+
+The following template is for Issue/Bug reporting only. https://docs.qgroundcontrol.com/en/Support/Support.html#github-issues
+
+For questions about how to use or build QGC see: http://qgroundcontrol.com/#resources
+
+If you are using an old stable release please upgrade first and verify your issue before reporting.
+----
+
+## Expected Behavior
+Please tell us what should happen as detailed as possible.
+
+## Current Behavior
+Please describe what happens instead of the expected behavior.
+
+## Steps to Reproduce:
+Please provide an unambiguous set of steps to reproduce the current behavior
+1.
+2.
+3.
+4.
+
+## System Information
+When posting bug reports, include the following information
+- Operating System: [e.g. iOS 12.1, Windows 8, macOS Mojave 10.14.1, Ubuntu 14]
+- QGC Version: [e.g. 3.4.4]
+- QGC build: [e.g., daily, stable, self-built from source, etc...]
+- Flight Controller: [e.g., Pixhawk I, Pixhawk Mini, Pixhawk 2, etc.]
+- Autopilot (with version): [e.g., PX4 1.8.1, Ardupilot Copter 3.6.1]
+
+## Detailed Description
+Provide further details about your issue/bug.
+
+## Log Files and Screenshots
+- [QGC Console Logs](https://docs.qgroundcontrol.com/en/Support/Support.html#reporting-bugs)
+- Autopilot logs when available (post a link).
+- Screenshots of QGC to help identify the current issue/bug behavior.
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
new file mode 100644
index 0000000..b29fac6
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -0,0 +1,15 @@
+---
+name: Feature request
+about: Tell us about your new idea
+
+---
+
+Tell us a bit about the feature:
+- What problem does it solve?
+- What does it do?
+- What flight stacks must it work with? (All, PX4, ArduPilot)
+- Relevant vehicle types? (All, multirotor, fixed-wing, VTOL, submarine, etc.)
+- Are there other systems that have this feature?
+- What communication/integration standards does the feature rely on (e.g. MAVLink commands etc.)
+
+Any additional context you can provide will make the feature easier to evaluate (e.g. mockups, detailed specification, etc.)
diff --git a/.github/workflows/android_32_release.yml b/.github/workflows/android_32_release.yml
new file mode 100644
index 0000000..9cf7249
--- /dev/null
+++ b/.github/workflows/android_32_release.yml
@@ -0,0 +1,144 @@
+# The 32 and 64 bit version of these actions should be kept in sync
+name: Android 32-bit Release
+
+on:
+ push:
+ branches:
+ - 'master'
+ - 'Stable*'
+ tags:
+ - 'v*'
+ pull_request:
+ branches:
+ - '*'
+
+defaults:
+ run:
+ shell: bash
+
+env:
+ SOURCE_DIR: ${{ github.workspace }}
+ QT_VERSION: 5.15.2
+ ARTIFACT: QGroundControl32.apk
+ BUILD_TYPE: ${{ fromJSON('["DailyBuild", "StableBuild"]')[ github.ref_type == 'tag' || contains(github.ref, 'Stable_' ) ] }}
+
+jobs:
+ build:
+ runs-on: ubuntu-20.04
+
+ steps:
+ - name: Checkout repo
+ uses: actions/checkout@v2
+ with:
+ submodules: recursive
+
+ - name: Get all tags for correct version determination
+ working-directory: ${{ github.workspace }}
+ run: |
+ git fetch --all --tags -f
+
+ - name: Install Qt
+ uses: jurplel/install-qt-action@v3
+ with:
+ version: ${{ env.QT_VERSION }}
+ host: linux
+ target: android
+ dir: ${{ runner.temp }}
+ modules: qtcharts
+ setup-python: true
+
+ - name: Install Android NDK
+ uses: nttld/setup-ndk@v1
+ id: setup-ndk
+ with:
+ ndk-version: r21e
+ add-to-path: false
+
+ - name: Remove Android SDK android-33-ext
+ run: |
+ ${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager --uninstall "platforms;android-33-ext5"
+ ${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager --uninstall "platforms;android-33-ext4"
+
+ - name: Install ccache
+ run: sudo apt-get install ccache
+
+ - name: Prepare ccache timestamp
+ id: ccache_cache_timestamp
+ shell: cmake -P {0}
+ run: |
+ string(TIMESTAMP current_date "%Y-%m-%d-%H;%M;%S" UTC)
+ message("::set-output name=timestamp::${current_date}")
+
+ - name: ccache cache files
+ uses: actions/cache@v2
+ with:
+ path: ~/.ccache
+ key: ${{ runner.os }}-ccache-${{steps.ccache_cache_timestamp.outputs.timestamp}}
+ restore-keys: ${{ runner.os }}-ccache-
+
+ - name: Setup ccache
+ run: |
+ mkdir -p ~/.ccache
+ echo "base_dir = ${GITHUB_WORKSPACE}" > ~/.ccache/ccache.conf
+ echo "compression = true" >> ~/.ccache/ccache.conf
+ echo "compression_level = 5" >> ~/.ccache/ccache.conf
+ ccache -s
+ ccache -z
+
+ - name: Create build directory
+ run: mkdir ${{ runner.temp }}/shadow_build_dir
+
+ - name: Install gstreamer
+ working-directory: ${{ github.workspace }}
+ run: |
+ wget --quiet https://gstreamer.freedesktop.org/data/pkg/android/1.18.5/gstreamer-1.0-android-universal-1.18.5.tar.xz
+ mkdir gstreamer-1.0-android-universal-1.18.5
+ tar xf gstreamer-1.0-android-universal-1.18.5.tar.xz -C gstreamer-1.0-android-universal-1.18.5
+
+ # This will set GIT_BRANCH_NAME environment variable
+ - name: Git branch name
+ id: git-branch-name
+ uses: EthanSK/git-branch-name-action@v1
+
+ - name: Update android manifest
+ run: |
+ if [ $GIT_BRANCH_NAME != "Stable*" ]; then
+ ${SOURCE_DIR}/tools/update_android_manifest_package.sh ${GIT_BRANCH_NAME}
+ fi
+
+ - name: Build
+ working-directory: ${{ runner.temp }}/shadow_build_dir
+ env:
+ ANDROID_KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
+ ANDROID_NDK_ROOT: ${{ steps.setup-ndk.outputs.ndk-path }}
+ ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }}
+ ANDROID_NDK_LATEST_HOME: ${{ steps.setup-ndk.outputs.ndk-path }}
+ ANDROID_NDK: ${{ steps.setup-ndk.outputs.ndk-path }}
+ run: |
+ qmake -r ${SOURCE_DIR}/qgroundcontrol.pro -spec android-clang CONFIG+=${BUILD_TYPE} CONFIG+=installer ANDROID_ABIS="armeabi-v7a"
+ make -j2
+
+ - name: ccache post-run
+ run: ccache -s
+
+ - name: Save artifact
+ uses: actions/upload-artifact@master
+ with:
+ name: ${{ env.ARTIFACT }}
+ path: ${{ runner.temp }}/shadow_build_dir/package/${{ env.ARTIFACT }}
+
+ - name: Upload build to S3 Bucket
+ if: github.event_name == 'push'
+ working-directory: ${{ runner.temp }}/shadow_build_dir/package
+ run: |
+ aws configure set aws_access_key_id ${{ secrets.AWS_ACCESS_KEY_ID }}
+ aws configure set aws_secret_access_key ${{ secrets.AWS_SECRET_ACCESS_KEY }}
+ aws s3 cp ${ARTIFACT} s3://qgroundcontrol/builds/${GIT_BRANCH_NAME}/${ARTIFACT} --region us-west-2 --acl public-read
+
+ - name: Upload tagged stable build to S3 latest Bucket
+ if: github.event_name == 'push' && github.ref_type == 'tag'
+ working-directory: ${{ runner.temp }}/shadow_build_dir/package
+ run: |
+ aws configure set aws_access_key_id ${{ secrets.AWS_ACCESS_KEY_ID }}
+ aws configure set aws_secret_access_key ${{ secrets.AWS_SECRET_ACCESS_KEY }}
+ aws s3 cp ${ARTIFACT} s3://qgroundcontrol/latest/${ARTIFACT} --region us-west-2 --acl public-read
diff --git a/.github/workflows/android_64_release.yml b/.github/workflows/android_64_release.yml
new file mode 100644
index 0000000..ec85ae2
--- /dev/null
+++ b/.github/workflows/android_64_release.yml
@@ -0,0 +1,144 @@
+# The 32 and 64 bit version of these actions should be kept in sync
+name: Android 64-bit Release
+
+on:
+ push:
+ branches:
+ - 'master'
+ - 'Stable*'
+ tags:
+ - 'v*'
+ pull_request:
+ branches:
+ - '*'
+
+defaults:
+ run:
+ shell: bash
+
+env:
+ SOURCE_DIR: ${{ github.workspace }}
+ QT_VERSION: 5.15.2
+ ARTIFACT: QGroundControl64.apk
+ BUILD_TYPE: ${{ fromJSON('["DailyBuild", "StableBuild"]')[ github.ref_type == 'tag' || contains(github.ref, 'Stable_' ) ] }}
+
+jobs:
+ build:
+ runs-on: ubuntu-20.04
+
+ steps:
+ - name: Checkout repo
+ uses: actions/checkout@v2
+ with:
+ submodules: recursive
+
+ - name: Get all tags for correct version determination
+ working-directory: ${{ github.workspace }}
+ run: |
+ git fetch --all --tags -f
+
+ - name: Install Qt
+ uses: jurplel/install-qt-action@v3
+ with:
+ version: ${{ env.QT_VERSION }}
+ host: linux
+ target: android
+ dir: ${{ runner.temp }}
+ modules: qtcharts
+ setup-python: true
+
+ - name: Install Android NDK
+ uses: nttld/setup-ndk@v1
+ id: setup-ndk
+ with:
+ ndk-version: r21e
+ add-to-path: false
+
+ - name: Remove Android SDK android-33-ext
+ run: |
+ ${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager --uninstall "platforms;android-33-ext5"
+ ${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager --uninstall "platforms;android-33-ext4"
+
+ - name: Install ccache
+ run: sudo apt-get install ccache
+
+ - name: Prepare ccache timestamp
+ id: ccache_cache_timestamp
+ shell: cmake -P {0}
+ run: |
+ string(TIMESTAMP current_date "%Y-%m-%d-%H;%M;%S" UTC)
+ message("::set-output name=timestamp::${current_date}")
+
+ - name: ccache cache files
+ uses: actions/cache@v2
+ with:
+ path: ~/.ccache
+ key: ${{ runner.os }}-ccache-${{steps.ccache_cache_timestamp.outputs.timestamp}}
+ restore-keys: ${{ runner.os }}-ccache-
+
+ - name: Setup ccache
+ run: |
+ mkdir -p ~/.ccache
+ echo "base_dir = ${GITHUB_WORKSPACE}" > ~/.ccache/ccache.conf
+ echo "compression = true" >> ~/.ccache/ccache.conf
+ echo "compression_level = 5" >> ~/.ccache/ccache.conf
+ ccache -s
+ ccache -z
+
+ - name: Create build directory
+ run: mkdir ${{ runner.temp }}/shadow_build_dir
+
+ - name: Install gstreamer
+ working-directory: ${{ github.workspace }}
+ run: |
+ wget --quiet https://gstreamer.freedesktop.org/data/pkg/android/1.18.5/gstreamer-1.0-android-universal-1.18.5.tar.xz
+ mkdir gstreamer-1.0-android-universal-1.18.5
+ tar xf gstreamer-1.0-android-universal-1.18.5.tar.xz -C gstreamer-1.0-android-universal-1.18.5
+
+ # This will set GIT_BRANCH_NAME environment variable
+ - name: Git branch name
+ id: git-branch-name
+ uses: EthanSK/git-branch-name-action@v1
+
+ - name: Update android manifest
+ run: |
+ if [ $GIT_BRANCH_NAME != "Stable*" ]; then
+ ${SOURCE_DIR}/tools/update_android_manifest_package.sh ${GIT_BRANCH_NAME}
+ fi
+
+ - name: Build
+ working-directory: ${{ runner.temp }}/shadow_build_dir
+ env:
+ ANDROID_KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
+ ANDROID_NDK_ROOT: ${{ steps.setup-ndk.outputs.ndk-path }}
+ ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }}
+ ANDROID_NDK_LATEST_HOME: ${{ steps.setup-ndk.outputs.ndk-path }}
+ ANDROID_NDK: ${{ steps.setup-ndk.outputs.ndk-path }}
+ run: |
+ qmake -r ${SOURCE_DIR}/qgroundcontrol.pro -spec android-clang CONFIG+=${BUILD_TYPE} CONFIG+=installer ANDROID_ABIS="arm64-v8a"
+ make -j2
+
+ - name: ccache post-run
+ run: ccache -s
+
+ - name: Save artifact
+ uses: actions/upload-artifact@master
+ with:
+ name: ${{ env.ARTIFACT }}
+ path: ${{ runner.temp }}/shadow_build_dir/package/${{ env.ARTIFACT }}
+
+ - name: Upload build to S3 Bucket
+ if: github.event_name == 'push'
+ working-directory: ${{ runner.temp }}/shadow_build_dir/package
+ run: |
+ aws configure set aws_access_key_id ${{ secrets.AWS_ACCESS_KEY_ID }}
+ aws configure set aws_secret_access_key ${{ secrets.AWS_SECRET_ACCESS_KEY }}
+ aws s3 cp ${ARTIFACT} s3://qgroundcontrol/builds/${GIT_BRANCH_NAME}/${ARTIFACT} --region us-west-2 --acl public-read
+
+ - name: Upload tagged stable build to S3 latest Bucket
+ if: github.event_name == 'push' && github.ref_type == 'tag'
+ working-directory: ${{ runner.temp }}/shadow_build_dir/package
+ run: |
+ aws configure set aws_access_key_id ${{ secrets.AWS_ACCESS_KEY_ID }}
+ aws configure set aws_secret_access_key ${{ secrets.AWS_SECRET_ACCESS_KEY }}
+ aws s3 cp ${ARTIFACT} s3://qgroundcontrol/latest/${ARTIFACT} --region us-west-2 --acl public-read
diff --git a/.github/workflows/linux_debug.yml b/.github/workflows/linux_debug.yml
new file mode 100644
index 0000000..9c168c5
--- /dev/null
+++ b/.github/workflows/linux_debug.yml
@@ -0,0 +1,98 @@
+name: Linux Debug and Test
+
+on:
+ push:
+ branches:
+ - 'master'
+ pull_request:
+ branches:
+ - '*'
+
+defaults:
+ run:
+ shell: bash
+
+env:
+ SOURCE_DIR: ${{ github.workspace }}
+ QT_VERSION: 5.15.2
+ BUILD_TYPE: ${{ fromJSON('["DailyBuild", "StableBuild"]')[ github.ref_type == 'tag' || contains(github.ref, 'Stable_' ) ] }}
+
+jobs:
+ build:
+ runs-on: ubuntu-20.04
+
+ steps:
+ - name: Checkout repo
+ uses: actions/checkout@v2
+ with:
+ submodules: recursive
+
+ - name: Install Qt
+ uses: jurplel/install-qt-action@v2
+ with:
+ version: ${{ env.QT_VERSION }}
+ host: linux
+ target: desktop
+ dir: ${{ runner.temp }}
+ modules: qtcharts
+ setup-python: true
+
+ - name: Install QGC source dependencies
+ run: sudo apt-get install -y libsdl2-dev
+
+ - name: Install Gstreamer dev packages
+ run: sudo apt-get install -y libgstreamer-plugins-base1.0-dev libgstreamer1.0-0:amd64 libgstreamer1.0-dev
+
+ - name: Install ccache
+ run: sudo apt-get install ccache
+
+ - name: Install post-link dependencies
+ run: sudo apt-get install -y binutils patchelf
+
+ - name: Prepare ccache timestamp
+ id: ccache_cache_timestamp
+ shell: cmake -P {0}
+ run: |
+ string(TIMESTAMP current_date "%Y-%m-%d-%H;%M;%S" UTC)
+ message("::set-output name=timestamp::${current_date}")
+
+ - name: ccache cache files
+ uses: actions/cache@v2
+ with:
+ path: ~/.ccache
+ key: ${{ runner.os }}-ccache-${{steps.ccache_cache_timestamp.outputs.timestamp}}
+ restore-keys: ${{ runner.os }}-ccache-
+
+ - name: Setup ccache
+ run: |
+ mkdir -p ~/.ccache
+ echo "base_dir = ${GITHUB_WORKSPACE}" > ~/.ccache/ccache.conf
+ echo "compression = true" >> ~/.ccache/ccache.conf
+ echo "compression_level = 5" >> ~/.ccache/ccache.conf
+ ccache -s
+ ccache -z
+
+ - name: Create build directory
+ run: mkdir ${{ runner.temp }}/shadow_build_dir
+
+ - name: Build
+ working-directory: ${{ runner.temp }}/shadow_build_dir
+ run: |
+ qmake -r ${SOURCE_DIR}/qgroundcontrol.pro CONFIG+=debug CONFIG+=${BUILD_TYPE}
+ make -j2
+
+ - name: ccache post-run
+ run: ccache -s
+
+ - name: Setup for unit tests
+ working-directory: ${{ runner.temp }}/shadow_build_dir
+ run: |
+ mkdir -p ~/.config/QtProject/
+ cp ${SOURCE_DIR}/test/qtlogging.ini ~/.config/QtProject/
+ export QT_FATAL_WARNINGS=1
+
+ - name: Run unit tests
+ uses: GabrielBB/xvfb-action@v1
+ with:
+ working-directory: ${{ runner.temp }}/shadow_build_dir
+ run: ./staging/qgroundcontrol-start.sh --unittest
diff --git a/.github/workflows/linux_release.yml b/.github/workflows/linux_release.yml
new file mode 100644
index 0000000..1826b5b
--- /dev/null
+++ b/.github/workflows/linux_release.yml
@@ -0,0 +1,125 @@
+name: Linux Release
+
+on:
+ push:
+ branches:
+ - 'master'
+ - 'Stable*'
+ tags:
+ - 'v*'
+ pull_request:
+ branches:
+ - '*'
+
+defaults:
+ run:
+ shell: bash
+
+env:
+ SOURCE_DIR: ${{ github.workspace }}
+ QT_VERSION: 5.15.2
+ ARTIFACT: QGroundControl.AppImage
+ BUILD_TYPE: ${{ fromJSON('["DailyBuild", "StableBuild"]')[ github.ref_type == 'tag' || contains(github.ref, 'Stable_' ) ] }}
+
+jobs:
+ build:
+ runs-on: ubuntu-20.04
+
+ steps:
+ - name: Checkout repo
+ uses: actions/checkout@v2
+ with:
+ submodules: recursive
+
+ - name: Get all tags for correct version determination
+ working-directory: ${{ github.workspace }}
+ run: |
+ git fetch --all --tags -f
+
+ - name: Install Qt
+ uses: jurplel/install-qt-action@v2
+ with:
+ version: ${{ env.QT_VERSION }}
+ host: linux
+ target: desktop
+ dir: ${{ runner.temp }}
+ modules: qtcharts
+ setup-python: true
+
+ - name: Install QGC source dependencies
+ run: sudo apt-get install -y libsdl2-dev
+
+ - name: Install Gstreamer
+ run: sudo apt-get install -y libgstreamer-plugins-base1.0-dev libgstreamer1.0-0:amd64 libgstreamer1.0-dev
+
+ - name: Install ccache
+ run: sudo apt-get install ccache
+
+ - name: Install post-link dependencies
+ run: sudo apt-get install -y binutils patchelf
+
+ - name: Prepare ccache timestamp
+ id: ccache_cache_timestamp
+ shell: cmake -P {0}
+ run: |
+ string(TIMESTAMP current_date "%Y-%m-%d-%H;%M;%S" UTC)
+ message("::set-output name=timestamp::${current_date}")
+
+ - name: ccache cache files
+ uses: actions/cache@v2
+ with:
+ path: ~/.ccache
+ key: ${{ runner.os }}-ccache-${{steps.ccache_cache_timestamp.outputs.timestamp}}
+ restore-keys: ${{ runner.os }}-ccache-
+
+ - name: Setup ccache
+ run: |
+ mkdir -p ~/.ccache
+ echo "base_dir = ${GITHUB_WORKSPACE}" > ~/.ccache/ccache.conf
+ echo "compression = true" >> ~/.ccache/ccache.conf
+ echo "compression_level = 5" >> ~/.ccache/ccache.conf
+ ccache -s
+ ccache -z
+
+ - name: Create build directory
+ run: mkdir ${{ runner.temp }}/shadow_build_dir
+
+ - name: Build
+ working-directory: ${{ runner.temp }}/shadow_build_dir
+ run: |
+ qmake -r ${SOURCE_DIR}/qgroundcontrol.pro CONFIG+=installer CONFIG+=${BUILD_TYPE}
+ make -j2
+
+ - name: ccache post-run
+ run: ccache -s
+
+ - name: Create AppImage
+ working-directory: ${{ runner.temp }}/shadow_build_dir
+ run: ${SOURCE_DIR}/deploy/create_linux_appimage.sh ${SOURCE_DIR} ./staging ./package;
+
+ - name: Save artifact
+ uses: actions/upload-artifact@master
+ with:
+ name: ${{ env.ARTIFACT }}
+ path: ${{ runner.temp }}/shadow_build_dir/package/${{ env.ARTIFACT }}
+
+ # This will set GIT_BRANCH_NAME environment variable
+ - name: Git branch name
+ id: git-branch-name
+ uses: EthanSK/git-branch-name-action@v1
+
+ - name: Upload build to S3 Bucket
+ if: github.event_name == 'push'
+ working-directory: ${{ runner.temp }}/shadow_build_dir/package
+ run: |
+ aws configure set aws_access_key_id ${{ secrets.AWS_ACCESS_KEY_ID }}
+ aws configure set aws_secret_access_key ${{ secrets.AWS_SECRET_ACCESS_KEY }}
+ aws s3 cp ${ARTIFACT} s3://qgroundcontrol/builds/${GIT_BRANCH_NAME}/${ARTIFACT} --region us-west-2 --acl public-read
+
+ - name: Upload tagged stable build to S3 latest Bucket
+ if: github.event_name == 'push' && github.ref_type == 'tag'
+ working-directory: ${{ runner.temp }}/shadow_build_dir/package
+ run: |
+ aws configure set aws_access_key_id ${{ secrets.AWS_ACCESS_KEY_ID }}
+ aws configure set aws_secret_access_key ${{ secrets.AWS_SECRET_ACCESS_KEY }}
+ aws s3 cp ${ARTIFACT} s3://qgroundcontrol/latest/${ARTIFACT} --region us-west-2 --acl public-read
diff --git a/.github/workflows/macos_release.yml b/.github/workflows/macos_release.yml
new file mode 100644
index 0000000..7c43cf0
--- /dev/null
+++ b/.github/workflows/macos_release.yml
@@ -0,0 +1,122 @@
+name: MacOS Release
+
+on:
+ push:
+ branches:
+ - 'master'
+ - 'Stable*'
+ tags:
+ - 'v*'
+ pull_request:
+ branches:
+ - '*'
+
+defaults:
+ run:
+ shell: bash
+
+env:
+ SOURCE_DIR: ${{ github.workspace }}
+ QT_VERSION: 5.15.2
+ ARTIFACT: QGroundControl.dmg
+ BUILD_TYPE: ${{ fromJSON('["DailyBuild", "StableBuild"]')[ github.ref_type == 'tag' || contains(github.ref, 'Stable_' ) ] }}
+
+jobs:
+ build:
+ runs-on: macos-latest
+
+ steps:
+ - name: Checkout repo
+ uses: actions/checkout@v2
+ with:
+ submodules: recursive
+
+ - name: Get all tags for correct version determination
+ working-directory: ${{ github.workspace }}
+ run: |
+ git fetch --all --tags -f
+
+ - name: Install Qt
+ uses: jurplel/install-qt-action@v3
+ with:
+ version: ${{ env.QT_VERSION }}
+ host: mac
+ target: desktop
+ dir: ${{ runner.temp }}
+ modules: qtcharts
+ setup-python: false
+
+ - name: Install Gstreamer
+ run: |
+ wget https://gstreamer.freedesktop.org/data/pkg/osx/1.18.1/gstreamer-1.0-devel-1.18.1-x86_64.pkg
+ wget https://gstreamer.freedesktop.org/data/pkg/osx/1.18.1/gstreamer-1.0-1.18.1-x86_64.pkg
+ for package in *.pkg ;
+ do sudo installer -verbose -pkg "$package" -target /
+ done
+
+ - name: Install ccache
+ run: brew install ccache
+
+ - name: Prepare ccache timestamp
+ id: ccache_cache_timestamp
+ shell: cmake -P {0}
+ run: |
+ string(TIMESTAMP current_date "%Y-%m-%d-%H;%M;%S" UTC)
+ message("::set-output name=timestamp::${current_date}")
+
+ - name: ccache cache files
+ uses: actions/cache@v2
+ with:
+ path: ~/.ccache
+ key: ${{ runner.os }}-ccache-${{steps.ccache_cache_timestamp.outputs.timestamp}}
+ restore-keys: ${{ runner.os }}-ccache-
+
+ - name: Setup ccache
+ run: |
+ mkdir -p ~/.ccache
+ echo "base_dir = ${GITHUB_WORKSPACE}" > ~/.ccache/ccache.conf
+ echo "compression = true" >> ~/.ccache/ccache.conf
+ echo "compression_level = 5" >> ~/.ccache/ccache.conf
+ ccache -s
+ ccache -z
+
+ - name: Create build directory
+ run: mkdir ${{ runner.temp }}/shadow_build_dir
+
+ - name: Build
+ working-directory: ${{ runner.temp }}/shadow_build_dir
+ run: |
+ export JOBS=$((`sysctl -n hw.ncpu`+1))
+ export LIBRARY_PATH=/Library/Frameworks/GStreamer.framework/Versions/1.0/lib/
+ qmake -r ${SOURCE_DIR}/qgroundcontrol.pro CONFIG+=installer CONFIG+=${BUILD_TYPE}
+ make -j$JOBS
+
+ - name: ccache post-run
+ run: ccache -s
+
+ - name: Save artifact
+ uses: actions/upload-artifact@master
+ with:
+ name: ${{ env.ARTIFACT }}
+ path: ${{ runner.temp }}/shadow_build_dir/package/${{ env.ARTIFACT }}
+
+ # This will set GIT_BRANCH_NAME environment variable
+ - name: Git branch name
+ id: git-branch-name
+ uses: EthanSK/git-branch-name-action@v1
+
+ - name: Upload build to S3 Bucket
+ if: github.event_name == 'push'
+ working-directory: ${{ runner.temp }}/shadow_build_dir/package
+ run: |
+ aws configure set aws_access_key_id ${{ secrets.AWS_ACCESS_KEY_ID }}
+ aws configure set aws_secret_access_key ${{ secrets.AWS_SECRET_ACCESS_KEY }}
+ aws s3 cp ${ARTIFACT} s3://qgroundcontrol/builds/${GIT_BRANCH_NAME}/${ARTIFACT} --region us-west-2 --acl public-read
+
+ - name: Upload tagged stable build to S3 latest Bucket
+ if: github.event_name == 'push' && github.ref_type == 'tag'
+ working-directory: ${{ runner.temp }}/shadow_build_dir/package
+ run: |
+ aws configure set aws_access_key_id ${{ secrets.AWS_ACCESS_KEY_ID }}
+ aws configure set aws_secret_access_key ${{ secrets.AWS_SECRET_ACCESS_KEY }}
+ aws s3 cp ${ARTIFACT} s3://qgroundcontrol/latest/${ARTIFACT} --region us-west-2 --acl public-read
diff --git a/.github/workflows/windows_release.yml b/.github/workflows/windows_release.yml
new file mode 100644
index 0000000..a58b683
--- /dev/null
+++ b/.github/workflows/windows_release.yml
@@ -0,0 +1,127 @@
+name: Windows Release
+
+on:
+ push:
+ branches:
+ - 'master'
+ - 'Stable*'
+ tags:
+ - 'v*'
+ pull_request:
+ branches:
+ - '*'
+
+defaults:
+ run:
+ shell: cmd
+
+env:
+ SOURCE_DIR: ${{ github.workspace }}
+ QT_VERSION: 5.15.2
+ ARTIFACT: QGroundControl-installer.exe
+ BUILD_TYPE: ${{ fromJSON('["DailyBuild", "StableBuild"]')[ github.ref_type == 'tag' || contains(github.ref, 'Stable_' ) ] }}
+
+jobs:
+ build:
+ runs-on: windows-2019
+
+ steps:
+ - name: Checkout repo
+ uses: actions/checkout@v2
+ with:
+ submodules: recursive
+
+ - name: Get all tags for correct version determination
+ working-directory: ${{ github.workspace }}
+ run: |
+ git fetch --all --tags -f
+
+ - name: Install Qt
+ uses: jurplel/install-qt-action@v2
+ with:
+ version: ${{ env.QT_VERSION }}
+ host: windows
+ target: desktop
+ arch: win64_msvc2019_64
+ dir: ${{ runner.temp }}
+ modules: qtcharts
+ setup-python: false
+
+ - name: Download JOM
+ uses: suisei-cn/actions-download-file@v1.4.0
+ with:
+ url: http://download.qt.io/official_releases/jom/jom.zip
+ target: ${{ runner.temp }}\
+ retry-times: 10
+
+ - name: Unzip JOM
+ working-directory: ${{ runner.temp }}
+ run: |
+ 7z x jom.zip -ojom
+
+ - name: Download Gstreamer
+ uses: suisei-cn/actions-download-file@v1.4.0
+ with:
+ url: https://s3-us-west-2.amazonaws.com/qgroundcontrol/dependencies/gstreamer-1.0-msvc-x86_64-1.18.1.msi
+ target: ${{ runner.temp }}\
+ retry-times: 10
+
+ - name: Download Gstreamer dev
+ uses: suisei-cn/actions-download-file@v1.4.0
+ with:
+ url: https://s3-us-west-2.amazonaws.com/qgroundcontrol/dependencies/gstreamer-1.0-devel-msvc-x86_64-1.18.1.msi
+ target: ${{ runner.temp }}\
+ retry-times: 10
+
+ - name: Install Gstreamer
+ run: |
+ cmd /c start /wait msiexec /package ${{ runner.temp }}\gstreamer-1.0-msvc-x86_64-1.18.1.msi /passive ADDLOCAL=ALL
+ cmd /c start /wait msiexec /package ${{ runner.temp }}\gstreamer-1.0-devel-msvc-x86_64-1.18.1.msi /passive ADDLOCAL=ALL
+
+ - name: Create build directory
+ run: mkdir ${{ runner.temp }}\shadow_build_dir
+
+ - name: Set up Visual Studio shell
+ uses: egor-tensin/vs-shell@v2
+ with:
+ arch: x64
+
+ - name: Build
+ working-directory: ${{ runner.temp }}\shadow_build_dir
+ run: |
+ qmake -r ${{ env.SOURCE_DIR }}\qgroundcontrol.pro CONFIG+=installer CONFIG+=${{ env. BUILD_TYPE }}
+ ${{ runner.temp }}\jom\jom -j2
+
+ - name: Save installer artifact
+ uses: actions/upload-artifact@master
+ with:
+ name: ${{ env.ARTIFACT }}
+ path: ${{ runner.temp }}\shadow_build_dir\staging\${{ env.ARTIFACT }}
+
+ - name: Save PDB artifact
+ uses: actions/upload-artifact@master
+ with:
+ name: qgroundcontrol.pdb
+ path: ${{ runner.temp }}\shadow_build_dir\staging\qgroundcontrol.pdb
+
+ # This will set GIT_BRANCH_NAME environment variable
+ - name: Git branch name
+ id: git-branch-name
+ uses: EthanSK/git-branch-name-action@v1
+
+ - name: Upload build to S3 Bucket
+ if: github.event_name == 'push'
+ working-directory: ${{ runner.temp }}\shadow_build_dir\staging
+ run: |
+ aws configure set aws_access_key_id ${{ secrets.AWS_ACCESS_KEY_ID }}
+ aws configure set aws_secret_access_key ${{ secrets.AWS_SECRET_ACCESS_KEY }}
+ aws s3 cp ${{ env.ARTIFACT }} s3://qgroundcontrol/builds/${{ env.GIT_BRANCH_NAME }}/${{ env.ARTIFACT }} --region us-west-2 --acl public-read
+
+ - name: Upload tagged stable build to S3 latest Bucket
+ if: github.event_name == 'push' && github.ref_type == 'tag'
+ working-directory: ${{ runner.temp }}\shadow_build_dir\staging
+ run: |
+ aws configure set aws_access_key_id ${{ secrets.AWS_ACCESS_KEY_ID }}
+ aws configure set aws_secret_access_key ${{ secrets.AWS_SECRET_ACCESS_KEY }}
+ aws s3 cp ${{ env.ARTIFACT }} s3://qgroundcontrol/latest/${{ env.ARTIFACT }} --region us-west-2 --acl public-read
+
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..be0c286
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,91 @@
+.idea/
+.vscode/
+cmake-build-*/
+out/
+libs/lib/Frameworks/GStreamer.framework
+*_qmlcache.qrc
+*.swp
+*.nfs
+CMakeFiles
+tags
+build*/
+obj
+.DS_Store
+*.log
+*~
+*~.skp
+bin/*.exe
+bin/*.txt
+bin/mac
+*pro.user*
+.qmake.stash
+qrc_*.cpp
+*.Debug
+*.Release
+tmp
+debug
+release
+/qgroundcontrol
+qgroundcontrol.xcodeproj/**
+doc/html
+doc/doxy.log
+deploy/mac
+deploy/linux
+controller_log*
+user_config.pri
+*.app
+*.ncb
+*.vcproj
+*.vcxproj*
+*.sdf
+*.ipch
+*.pdb
+*.sln
+*.sln
+*.vcproj
+*.user
+*.ncb
+*.idb
+*.project
+*.cproject
+*.sln
+*.suo
+*.uhf.txt
+*.opensdf
+thirdParty/qserialport-build-desktop/
+thirdParty/qserialport/bin/
+thirdParty/qserialport/lib/
+libs/thirdParty/libxbee/lib/
+GeneratedFiles/
+gstreamer-1.0-android*
+src/Airmap/Airmap_api_key.h
+localization/qgroundcontrol/
+
+*.autosave
+.settings/
+
+# iOS Generated files
+ios/iOSForAppStore-Info.plist
+
+# Generated files
+moc_*
+ui_*
+*.o
+*.moc
+*.prl
+
+# android
+android/local.properties
+android/gradle.properties
+
+# doxygen
+src/html/
+src/latex/
+
+# vagrant
+.vagrant/
+Qt*-linux*.tar.*
+
+.vs/
+
+libs/airmapd/include/boost
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..a8bd943
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,24 @@
+[submodule "src/GPS/Drivers"]
+ path = src/GPS/Drivers
+ url = https://github.com/PX4/GpsDrivers.git
+[submodule "libs/mavlink/include/mavlink/v2.0"]
+ path = libs/mavlink/include/mavlink/v2.0
+ url = https://github.com/mavlink/c_library_v2.git
+[submodule "libs/OpenSSL/android_openssl"]
+ path = libs/OpenSSL/android_openssl
+ url = https://github.com/Auterion/android_openssl
+[submodule "libs/qmlglsink/gst-plugins-good"]
+ path = libs/qmlglsink/gst-plugins-good
+ url = https://github.com/mavlink/gst-plugins-good.git
+[submodule "libs/xz-embedded"]
+ path = libs/xz-embedded
+ url = https://github.com/Auterion/xz-embedded.git
+[submodule "libs/libevents/libevents"]
+ path = libs/libevents/libevents
+ url = https://github.com/mavlink/libevents.git
+[submodule "libs/eigen"]
+ path = libs/eigen
+ url = https://gitlab.com/libeigen/eigen.git
+[submodule "libs/qmdnsengine"]
+ path = libs/qmdnsengine
+ url = https://github.com/patrickelectric/qmdnsengine
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..6c98b6e
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,320 @@
+# if you update this file, please consider updating Vagrantfile too
+
+language: cpp
+
+env:
+ global:
+ - JOBS=4
+ - SHADOW_BUILD_DIR=/tmp/shadow_build_dir
+ - CODESIGN=nocodesign
+ - secure: RGovyUnMw3fp/bHZi058JvANT1rYmNqrsuSYew0cIgirO6YbMHr/rsjwCm1FTYpBl8s1zgr+u2b8ftYnfnCz2YT+Aip4NWrVYpVU0FEmfytGILrnUS0pjlt8m7fU9AKR1ElOSll7yw7e1kftynN39Q321etvwbLZcXon6zz0suE=
+
+jobs:
+ fast_finish: true
+ include:
+ - stage: "Build"
+ name: "Linux Installer"
+ if: branch = master
+ os: linux
+ dist: bionic
+ env: SPEC=linux-g++-64 CONFIG=installer
+ sudo: required
+ - stage: "Build"
+ name: "Android 32 bit"
+ dist: xenial
+ language: android
+ env: SPEC=android-clang CONFIG=installer BITNESS=32 GSTREAMER_NAME=armv7
+ sudo: false
+ - stage: "Build"
+ name: "Android 64 bit"
+ dist: xenial
+ language: android
+ env: SPEC=android-clang CONFIG=installer BITNESS=64 GSTREAMER_NAME=arm64
+ sudo: false
+ - stage: "Build"
+ name: "OSX Installer"
+ if: branch = master
+ os: osx
+ osx_image: xcode11.3
+ env: SPEC=macx-clang CONFIG=installer
+ sudo: required
+ - stage: "Google Play Upload"
+ name: "Google Play Upload"
+ dist: trusty
+ language: android
+ env: SPEC=google-play-upload
+ sudo: false
+ before_install: skip
+ install: skip
+ before_script: skip
+ before_deploy: skip
+ after_deploy: skip
+ script: echo "Google Play Upload"
+
+# iOS build needs updating Qt to > 5.10
+# - os: osx
+# osx_image: xcode9.2
+# env: SPEC=macx-ios-clang CONFIG=release
+# sudo: false
+# OSX builds pared back to installer only since travis sucks so bad we can't afford more than one'
+# - os: osx
+# osx_image: xcode10.1
+# env: SPEC=macx-clang CONFIG=debug
+# sudo: required
+
+android:
+ components:
+ - android-29
+ - build-tools-25.0.3
+ - platform-tools
+
+addons:
+ apt:
+ packages:
+ - speech-dispatcher
+ - libgstreamer-plugins-base1.0-dev
+ - libgstreamer1.0-0:amd64
+ - libgstreamer1.0-dev
+ - libudev-dev
+ - wget
+
+before_install:
+ # fetch entire git repo to properly determine the version
+ - cd ${TRAVIS_BUILD_DIR}
+ - git fetch --unshallow
+ - git fetch --all --tags
+
+ # compile threads
+ - if [ "${TRAVIS_OS_NAME}" = "linux" ]; then
+ export JOBS=$((`cat /proc/cpuinfo | grep -c ^processor`+1));
+ elif [ "${TRAVIS_OS_NAME}" = "osx" ]; then
+ export JOBS=$((`sysctl -n hw.ncpu`+1));
+ fi
+
+ # Linux needs sdl2 but not android
+ - if [ "${SPEC}" = "linux-g++-64" ]; then
+ sudo apt-get install -y libsdl2-dev libxkbcommon-x11-0;
+ fi
+
+install:
+ # linux dependencies: qt
+ - if [ "${SPEC}" = "linux-g++-64" ]; then
+ wget --quiet https://s3-us-west-2.amazonaws.com/qgroundcontrol/dependencies/Qt5.12.6-gcc_64-min.tar.bz2 &&
+ tar jxf Qt5.12.6-gcc_64-min.tar.bz2 -C /tmp &&
+ export PATH=/tmp/Qt5.12-gcc_64/5.12.6/gcc_64/bin:$PATH
+ ;
+ fi
+
+ # android dependencies: qt, gstreamer, android-ndk
+ - if [ "${SPEC}" = "android-clang" ]; then
+ wget --quiet https://gstreamer.freedesktop.org/data/pkg/android/1.18.5/gstreamer-1.0-android-universal-1.18.5.tar.xz &&
+ mkdir gstreamer-1.0-android-universal-1.18.5 &&
+ tar xf gstreamer-1.0-android-universal-1.18.5.tar.xz -C gstreamer-1.0-android-universal-1.18.5 &&
+ wget --quiet https://dl.google.com/android/repository/android-ndk-r20-linux-x86_64.zip &&
+ unzip android-ndk-r20-linux-x86_64.zip > /dev/null &&
+ export ANDROID_NDK_ROOT=`pwd`/android-ndk-r20 &&
+ export ANDROID_SDK_ROOT=/usr/local/android-sdk &&
+ export PATH=`pwd`/android-ndk-r20:$PATH
+ ;
+ fi
+
+ - if [[ "${SPEC}" = "android-clang" && "${BITNESS}" = "64" ]]; then
+ wget --quiet https://s3-us-west-2.amazonaws.com/qgroundcontrol/dependencies/Qt5.12.6-android_arm64_v8a-min.tar.bz2 &&
+ tar jxf Qt5.12.6-android_arm64_v8a-min.tar.bz2 -C /tmp &&
+ export PATH=/tmp/Qt5.12-android_arm64_v8a/5.12.6/android_arm64_v8a/bin:$PATH
+ ;
+ fi
+
+ - if [[ "${SPEC}" = "android-clang" && "${BITNESS}" = "32" ]]; then
+ wget --quiet https://s3-us-west-2.amazonaws.com/qgroundcontrol/dependencies/Qt5.12.6-android_armv7-min.tar.bz2 &&
+ tar jxf Qt5.12.6-android_armv7-min.tar.bz2 -C /tmp &&
+ export PATH=/tmp/Qt5.12-android_armv7/5.12.6/android_armv7/bin:$PATH
+ ;
+ fi
+
+ # osx dependencies: qt (master builds only: gstreamer, gstreamer-devel)
+ - if [ "${SPEC}" = "macx-clang" ]; then
+ wget --quiet https://s3-us-west-2.amazonaws.com/qgroundcontrol/dependencies/Qt5.12.6-clang_64-min.tar.bz2 &&
+ tar jxf Qt5.12.6-clang_64-min.tar.bz2 -C /tmp
+ ;
+ fi
+
+ - if [[ "${SPEC}" = "macx-clang" ]]; then
+ wget --quiet https://qgroundcontrol.s3-us-west-2.amazonaws.com/dependencies/gstreamer-osx-1.18.1.tar.bz2 &&
+ sudo tar zxf gstreamer-osx-1.18.1.tar.bz2 -C /Library/Frameworks
+ ;
+ fi
+
+ - if [ "${SPEC}" = "macx-clang" ]; then
+ export QT_DIR=Qt5.12-clang_64/5.12.6/clang_64 &&
+ export QT_QPA_PLATFORM_PLUGIN_PATH=/tmp/$QT_DIR/plugins &&
+ export QML2_IMPORT_PATH=/tmp/$QT_DIR/qml &&
+ export PATH=/tmp/$QT_DIR/bin:$PATH
+ ;
+ fi
+
+ # ios dependencies: qt
+ - if [ "${SPEC}" = "macx-ios-clang" ]; then
+ wget --quiet https://s3-us-west-2.amazonaws.com/qgroundcontrol/dependencies/Qt5.9.3-ios-min.tar.bz2
+ ;
+ fi
+ - if [ "${SPEC}" = "macx-ios-clang" ]; then
+ tar jxf Qt5.9.3-ios-min.tar.bz2 -C /tmp &&
+ export IOS_CCACHE_CC=`/usr/bin/xcrun -sdk iphoneos -find clang` &&
+ export IOS_CCACHE_CXX=`/usr/bin/xcrun -sdk iphoneos -find clang++` &&
+ export PATH=/tmp/Qt5.9-ios/5.9.3/ios/bin:$PATH
+ ;
+ fi
+
+before_script:
+ - cd ${TRAVIS_BUILD_DIR}
+
+ # switch android config from installer to release if the android storepass isn't available
+ - if [[ "${SPEC}" = "android-clang" && "${CONFIG}" = "installer" && -z ${ANDROID_STOREPASS} ]]; then
+ export CONFIG=release;
+ fi
+
+ # Update QGC version in AndroidManifest.xml based on git tag. We do not do this on pull requests
+ # since it is likely the tags out out of date on the pull and may cause an error.
+ - if [ "${SPEC}" = "android-clang" && "${TRAVIS_PULL_REQUEST}" = "false" ]]; then
+ git remote set-branches origin 'master' &&
+ git fetch --tags origin master &&
+ ./tools/update_android_version.sh ${BITNESS} ${TRAVIS_BRANCH};
+ fi
+
+ # Install signing cert into OSX keychain
+ - if [[ "${SPEC}" = "macx-clang" && "${TRAVIS_PULL_REQUEST}" = "false" ]]; then
+ export CODESIGN=codesign;
+ fi
+ - if [[ "${SPEC}" = "macx-clang" && "${TRAVIS_PULL_REQUEST}" = "false" ]]; then
+ openssl aes-256-cbc -K $MAC_CERT_KEY -iv $MAC_CERT_IV -in deploy/MacCertificates.p12.enc -out deploy/MacCertificates.p12 -d;
+ fi
+ - if [[ "${SPEC}" = "macx-clang" && "${TRAVIS_PULL_REQUEST}" = "false" ]]; then
+ source deploy/MacImportCert.sh;
+ fi
+
+script:
+ # run qmake
+ - mkdir ${SHADOW_BUILD_DIR} && cd ${SHADOW_BUILD_DIR}
+ - if [ "${TRAVIS_TAG}" ]; then
+ echo "Stable build" &&
+ export STABLE_OR_DAILY=StableBuild;
+ else
+ echo "Daily build" &&
+ export STABLE_OR_DAILY=DailyBuild;
+ fi
+ - qmake -r ${TRAVIS_BUILD_DIR}/qgroundcontrol.pro CONFIG+=${CONFIG} CONFIG+=${STABLE_OR_DAILY} CONFIG+=${CODESIGN} -spec ${SPEC};
+
+ # compile
+ - if [ "${SPEC}" != "macx-ios-clang" ]; then
+ make -j$JOBS;
+ else
+ xcodebuild -IDEBuildOperationMaxNumberOfConcurrentCompileTasks=$JOBS -configuration Release CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO | xcpretty -c && $(exit ${PIPESTATUS[0]});
+ fi
+ #- ccache -s
+
+ # unit tests linux
+ - if [[ "${SPEC}" = "linux-g++-64" && "${CONFIG}" = "debug" ]]; then
+ mkdir -p ~/.config/QtProject/ &&
+ cp ${TRAVIS_BUILD_DIR}/test/qtlogging.ini ~/.config/QtProject/ &&
+ export QT_FATAL_WARNINGS=1 &&
+ ./staging/qgroundcontrol-start.sh --unittest;
+ fi
+
+after_success:
+ # This is only used to upload android builds to Google Play
+ - cd ${TRAVIS_BUILD_DIR}
+ - if [ "${TRAVIS_TAG}" ]; then
+ GOOGLE_PLAY_PKG=org.mavlink.qgroundcontrol;
+ elif [ "${TRAVIS_BRANCH}" = "master" ]; then
+ GOOGLE_PLAY_PKG=org.mavlink.qgroundcontrolbeta;
+ else
+ GOOGLE_PLAY_PKG=none;
+ fi
+ - if [[ "${SPEC}" = "google-play-upload" && "${TRAVIS_PULL_REQUEST}" = "false" && "${GOOGLE_PLAY_PKG}" != "none" ]]; then
+ wget --quiet https://s3-us-west-2.amazonaws.com/qgroundcontrol/builds/${TRAVIS_BRANCH}/QGroundControl32.apk &&
+ wget --quiet https://s3-us-west-2.amazonaws.com/qgroundcontrol/builds/${TRAVIS_BRANCH}/QGroundControl64.apk &&
+ pip install --user --upgrade oauth2client &&
+ pip install --user google-api-python-client pyopenssl ndg-httpsclient pyasn1 &&
+ openssl aes-256-cbc -K $encrypted_25db6eb7c3fd_key -iv $encrypted_25db6eb7c3fd_iv -in android/Google_Play_Android_Developer-4432a3c4f5d1.json.enc -out android/Google_Play_Android_Developer-4432a3c4f5d1.json -d &&
+ ./deploy/GooglePlayUpload.py ${GOOGLE_PLAY_PKG};
+ fi
+
+before_deploy:
+ # create linux appimage
+ - cd ${TRAVIS_BUILD_DIR}
+ - if [[ "${SPEC}" = "linux-g++-64" && "${CONFIG}" = "installer" ]]; then
+ ./deploy/create_linux_appimage.sh ${TRAVIS_BUILD_DIR} ${SHADOW_BUILD_DIR}/staging ${SHADOW_BUILD_DIR}/package;
+ fi
+
+deploy:
+ # deploy installers to s3 builds/ if on a branch
+ - provider: s3
+ edge: true # Use V2 provider to work around V1 bug
+ access_key_id: AKIAIVORNALE7NHD3T6Q
+ secret_access_key:
+ secure: BsLXeXUPsCJdX4tawrDnO8OFK5Hk4kzlDTiyH93En6TbjUargVAWDMcHVj7TUhr7+3Tao1W1zb0G4SJe9kHv+jrky0yE72KvoG3YAON0VXWKizxBAKkgHE2RxSTNAwDeKbi2G6YJfNDescBBfX7zEohShdXglQu7CGaUQKRaiI4=
+ bucket: qgroundcontrol
+ local_dir: ${SHADOW_BUILD_DIR}/package
+ upload-dir: builds/${TRAVIS_BRANCH}
+ acl: public_read
+ region: us-west-2
+ skip_cleanup: true
+ on:
+ all_branches: true
+ condition: $CONFIG = installer
+
+ # deploy tagged installers to s3 latest/
+ - provider: s3
+ edge: true # Use V2 provider to work around V1 bug
+ access_key_id: AKIAIVORNALE7NHD3T6Q
+ secret_access_key:
+ secure: BsLXeXUPsCJdX4tawrDnO8OFK5Hk4kzlDTiyH93En6TbjUargVAWDMcHVj7TUhr7+3Tao1W1zb0G4SJe9kHv+jrky0yE72KvoG3YAON0VXWKizxBAKkgHE2RxSTNAwDeKbi2G6YJfNDescBBfX7zEohShdXglQu7CGaUQKRaiI4=
+ bucket: qgroundcontrol
+ local_dir: ${SHADOW_BUILD_DIR}/package
+ upload-dir: latest
+ acl: public_read
+ region: us-west-2
+ skip_cleanup: true
+ on:
+ tags: true
+ condition: $CONFIG = installer
+
+ # deploy tagged installers to s3 version folder
+ - provider: s3
+ edge: true # Use V2 provider to work around V1 bug
+ access_key_id: AKIAIVORNALE7NHD3T6Q
+ secret_access_key:
+ secure: BsLXeXUPsCJdX4tawrDnO8OFK5Hk4kzlDTiyH93En6TbjUargVAWDMcHVj7TUhr7+3Tao1W1zb0G4SJe9kHv+jrky0yE72KvoG3YAON0VXWKizxBAKkgHE2RxSTNAwDeKbi2G6YJfNDescBBfX7zEohShdXglQu7CGaUQKRaiI4=
+ bucket: qgroundcontrol
+ local_dir: ${SHADOW_BUILD_DIR}/package
+ upload-dir: ${TRAVIS_BRANCH}
+ acl: public_read
+ region: us-west-2
+ skip_cleanup: true
+ on:
+ tags: true
+ condition: $CONFIG = installer
+
+ # deploy installers to Github releases if on a tag
+ - provider: releases
+ edge: true # Use V2 provider to work around V1 bug
+ api-key:
+ secure: K/Zqr/FCC7QvzFxYvBtCinPkacQq2ubJ2qm982+38Zf/KjibVOF1dEbVdrGZmII6Tg5DaQzNXGYkg5PvYmJgT9xRsqeQjeYIUYqYZpAt+HYWA38AVfMU8jip/1P1wmwqD469nzJOBBa8yfsMs6Ca7tBaNl/zTxCRGnAgEzqtkdQ=
+ file_glob: true
+ file:
+ - ${SHADOW_BUILD_DIR}/qgc-app/package/qgroundcontrol.*
+ - ${SHADOW_BUILD_DIR}/qgc-app/package/QGroundControl.*
+ skip_cleanup: true
+ on:
+ tags: true
+ condition: $CONFIG = installer
+ condition: $SPEC != macx-clang # GitHub OSX deploy broken due to travis problem
+
+notifications:
+ webhooks:
+ urls:
+ - https://webhooks.gitter.im/e/60b033428ae9dc715662
+ on_success: change
+ on_failure: always
+ on_start: never
diff --git a/.vagrantconfig.yml b/.vagrantconfig.yml
new file mode 100644
index 0000000..b08e36d
--- /dev/null
+++ b/.vagrantconfig.yml
@@ -0,0 +1,21 @@
+configs:
+ dev:
+ 'qt_deps_unpack_parent_dir': '/home/vagrant'
+
+ 'qt_deps_unpack_dir': '/home/vagrant/Qt'
+ 'qt_deps_bin_unpack_dir': '/home/vagrant/Qt/5.15.2/gcc_64/bin'
+ 'qt_deps_lib_unpack_dir': '/home/vagrant/Qt/5.15.2/gcc_64/lib'
+ 'qt_deps_plugins_unpack_dir': '/home/vagrant/Qt/5.15.2/gcc_64/plugins'
+ 'qt_deps_qml_unpack_dir': '/home/vagrant/Qt/5.15.2/gcc_64/qml'
+
+ 'project_root_dir': '/vagrant'
+
+ 'qt_deps_dir': '/vagrant/shadow-build/release/Qt'
+ 'qt_deps_bin_dir': '/vagrant/shadow-build/release/Qt/bin'
+ 'qt_deps_lib_dir': '/vagrant/shadow-build/release/Qt/libs'
+ 'qt_deps_plugins_dir': '/vagrant/shadow-build/release/Qt/plugins'
+ 'qt_deps_qml_dir': '/vagrant/shadow-build/release/Qt/qml'
+
+ 'spec': 'linux-g++-64'
+ 'shadow_build_dir': '/vagrant/shadow-build'
+ 'pro': '/vagrant/qgroundcontrol.pro'
diff --git a/.ycm_extra_conf.py b/.ycm_extra_conf.py
new file mode 100644
index 0000000..5dd64cb
--- /dev/null
+++ b/.ycm_extra_conf.py
@@ -0,0 +1,155 @@
+# This file is NOT licensed under the GPLv3, which is the license for the rest
+# of YouCompleteMe.
+#
+# Here's the license text for this file:
+#
+# This is free and unencumbered software released into the public domain.
+#
+# Anyone is free to copy, modify, publish, use, compile, sell, or
+# distribute this software, either in source code form or as a compiled
+# binary, for any purpose, commercial or non-commercial, and by any
+# means.
+#
+# In jurisdictions that recognize copyright laws, the author or authors
+# of this software dedicate any and all copyright interest in the
+# software to the public domain. We make this dedication for the benefit
+# of the public at large and to the detriment of our heirs and
+# successors. We intend this dedication to be an overt act of
+# relinquishment in perpetuity of all present and future rights to this
+# software under copyright law.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+# IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+# OTHER DEALINGS IN THE SOFTWARE.
+#
+# For more information, please refer to
+
+import os
+import ycm_core
+from clang_helpers import PrepareClangFlags
+
+# Set this to the absolute path to the folder (NOT the file!) containing the
+# compile_commands.json file to use that instead of 'flags'. See here for
+# more details: http://clang.llvm.org/docs/JSONCompilationDatabase.html
+# Most projects will NOT need to set this to anything; you can just change the
+# 'flags' list of compilation flags. Notice that YCM itself uses that approach.
+compilation_database_folder = ''
+
+# These are the compilation flags that will be used in case there's no
+# compilation database set.
+flags = [
+# THIS IS IMPORTANT! Without a "-std=" flag, clang won't know which
+# language to use when compiling headers. So it will guess. Badly. So C++
+# headers will be compiled as C headers. You don't want that so ALWAYS specify
+# a "-std=".
+# For a C project, you would set this to something like 'c99' instead of
+# 'c++11'.
+'-std=c++11',
+# ...and the same thing goes for the magic -x option which specifies the
+# language that the files to be compiled are written in. This is mostly
+# relevant for c++ headers.
+# For a C project, you would set this to 'c' instead of 'c++'.
+'-x',
+'c++',
+'-DQT_CORE_LIB',
+'-DQT_GUI_LIB',
+'-DQT_NETWORK_LIB',
+'-DQT_QML_LIB',
+'-DQT_QUICK_LIB',
+'-DQT_SQL_LIB',
+'-DQT_WIDGETS_LIB',
+'-DQT_XML_LIB',
+
+'-I', '/usr/lib/qt/mkspecs/linux-clang',
+'-I', '/usr/include/qt',
+'-I', '/usr/include/qt/QtConcurrent',
+'-I', '/usr/include/qt/QtCore',
+'-I', '/usr/include/qt/QtDBus',
+'-I', '/usr/include/qt/QtGui',
+'-I', '/usr/include/qt/QtHelp',
+'-I', '/usr/include/qt/QtMultimedia',
+'-I', '/usr/include/qt/QtMultimediaWidgets',
+'-I', '/usr/include/qt/QtNetwork',
+'-I', '/usr/include/qt/QtOpenGL',
+'-I', '/usr/include/qt/QtPlatformSupport',
+'-I', '/usr/include/qt/QtPositioning',
+'-I', '/usr/include/qt/QtScript',
+'-I', '/usr/include/qt/QtScriptTools',
+'-I', '/usr/include/qt/QtSql',
+'-I', '/usr/include/qt/QtSvg',
+'-I', '/usr/include/qt/QtTest',
+'-I', '/usr/include/qt/QtUiTools',
+'-I', '/usr/include/qt/QtV8',
+'-I', '/usr/include/qt/QtWebKit',
+'-I', '/usr/include/qt/QtWebKitWidgets',
+'-I', '/usr/include/qt/QtWidgets',
+'-I', '/usr/include/qt/QtXml',
+'-I', '/usr/include/qt/QtXmlPatterns',
+
+'-I', '.',
+'-I', 'Tests',
+'-I', 'build',
+'-I', 'build/Tests'
+]
+
+if compilation_database_folder:
+ database = ycm_core.CompilationDatabase( compilation_database_folder )
+else:
+ database = None
+
+
+def DirectoryOfThisScript():
+ return os.path.dirname( os.path.abspath( __file__ ) )
+
+
+def MakeRelativePathsInFlagsAbsolute( flags, working_directory ):
+ if not working_directory:
+ return flags
+ new_flags = []
+ make_next_absolute = False
+ path_flags = [ '-isystem', '-I', '-iquote', '--sysroot=' ]
+ for flag in flags:
+ new_flag = flag
+
+ if make_next_absolute:
+ make_next_absolute = False
+ if not flag.startswith( '/' ):
+ new_flag = os.path.join( working_directory, flag )
+
+ for path_flag in path_flags:
+ if flag == path_flag:
+ make_next_absolute = True
+ break
+
+ if flag.startswith( path_flag ):
+ path = flag[ len( path_flag ): ]
+ new_flag = path_flag + os.path.join( working_directory, path )
+ break
+
+ if new_flag:
+ new_flags.append( new_flag )
+ return new_flags
+
+
+def FlagsForFile( filename ):
+ if database:
+ # Bear in mind that compilation_info.compiler_flags_ does NOT return a
+ # python list, but a "list-like" StringVec object
+ compilation_info = database.GetCompilationInfoForFile( filename )
+ final_flags = PrepareClangFlags(
+ MakeRelativePathsInFlagsAbsolute(
+ compilation_info.compiler_flags_,
+ compilation_info.compiler_working_dir_ ),
+ filename )
+ else:
+ relative_to = DirectoryOfThisScript()
+ final_flags = MakeRelativePathsInFlagsAbsolute( flags, relative_to )
+
+ return {
+ 'flags': final_flags,
+ 'do_cache': True
+ }
diff --git a/README.md b/README.md
index 3112f0f..8afec74 100644
--- a/README.md
+++ b/README.md
@@ -1,15 +1,16 @@
-# Spiri Ground Control Station
+# QGroundControl Ground Control Station
-[![Releases](https://git.spirirobotics.com/hetongapp/Spiri-App/raw/branch/master/Spiri/resources/images/Spiri-release.svg)](https://git.spirirobotics.com/hetongapp/Spiri-App/releases)
+[![Releases](https://img.shields.io/github/release/mavlink/QGroundControl.svg)](https://github.com/mavlink/QGroundControl/releases)
[![Travis Build Status](https://travis-ci.org/mavlink/qgroundcontrol.svg?branch=master)](https://travis-ci.org/mavlink/qgroundcontrol)
[![Appveyor Build Status](https://ci.appveyor.com/api/projects/status/crxcm4qayejuvh6c/branch/master?svg=true)](https://ci.appveyor.com/project/mavlink/qgroundcontrol)
+[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/mavlink/qgroundcontrol?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
-*Spiri GroundControl* (SGC) is an intuitive and powerful ground control station (GCS) for UAVs.
+*QGroundControl* (QGC) is an intuitive and powerful ground control station (GCS) for UAVs.
-The primary goal of SGC is ease of use for both first time and professional users.
-It provides full flight control and mission planning for any MAVLink enabled drone, and vehicle setup for both PX4 and ArduPilot powered UAVs. Instructions for *using Spiri GroundControl* are provided in the [User Manual](https://docs.qgroundcontrol.com/en/) (you may not need them because the UI is very intuitive!)
+The primary goal of QGC is ease of use for both first time and professional users.
+It provides full flight control and mission planning for any MAVLink enabled drone, and vehicle setup for both PX4 and ArduPilot powered UAVs. Instructions for *using QGroundControl* are provided in the [User Manual](https://docs.qgroundcontrol.com/en/) (you may not need them because the UI is very intuitive!)
All the code is open-source, so you can contribute and evolve it as you want.
The [Developer Guide](https://dev.qgroundcontrol.com/en/) explains how to [build](https://dev.qgroundcontrol.com/en/getting_started/) and extend QGC.
@@ -22,63 +23,3 @@ Key Links:
* [Discussion/Support](https://docs.qgroundcontrol.com/en/Support/Support.html)
* [Contributing](https://dev.qgroundcontrol.com/en/contribute/)
* [License](https://github.com/mavlink/qgroundcontrol/blob/master/COPYING.md)
-
-
-# Setup Installation (Windows)
-
-*Install QT 5.15.2
-* Here is the link and Download: [Website](https://download.qt.io/official_releases/online_installers/) (Windows)
-* Setup the environment for QT!
- * 1. right click the desktop and click the attribution.
- * 2. select the "Advanced System Settings"
- * 3. select the "Environment Variables"
- * 4. create a new qt system variable(using your own QT install Path) (eg. D:\QT5.15.2\5.15.2\msvc2019_64)
-
-*Install Spiri QGC
-* create a folder in your workspace and name it such as "Spiri"
-* git clone https://git.spirirobotics.com/hetongapp/SpiriGroundControl.git
-* Then cd to the "Spiri/SpiriGroundControl" and update the repo: "git submodule update --init --recursive".
-* Open the "qgroundcontrol.pro" in "Spiri/SpiriGroundControl" folder by using the QT creator
-* click "build" and "run"
-
-
-# Setup Installation (MacOS)
-
-* Install the Xcode in Apple Store
-* Install Qt Creator for macOS: [Website](https://info.qt.io/zh-cn/download-qt-for-application-development)
-* Create or open a Qt project and check the "iphonesimulator-clang-..." environment in the project configuration page
-* create a folder in your workspace and name it such as "Spiri"
-* git clone https://git.spirirobotics.com/hetongapp/SpiriGroundControl.git
-* Then cd to the "Spiri/SpiriGroundControl" and update the repo: "git submodule update --init --recursive".
-* Click the hammer compile button in the lower left corner, after the compilation is successful, you can close Qt Creator.
-* After the compilation is complete, there will be an "Info.plist" file in the output folder, open it with Xcode.
-
-
-# Setup Installation (Ubuntu20.04)
-
-*Install QT 5.15.2
-* Setup the environment for QT!
- ```bash
- sudo chmod u+x ./Ubuntu_QT_install.sh && source ./Ubuntu_QT_install.sh
- ```
-*Install Spiri QGC
-* create a folder in your workspace and name it such as "Spiri"
-* git clone https://git.spirirobotics.com/Spiri/SpiriGroundControlTest.git
-* Then cd to the "Spiri/SpiriGroundControlTest" and update the repo: "git submodule update --init --recursive".
-* Open the "qgroundcontrol.pro" in "Spiri/SpiriGroundControlTest" folder by using the QT creator
-* click "build" and "run"
-
-
-# Branch naming rules
-
- * Dev-AndroidAPP-Tong
- * Bug-AndroidAPP-Tong
- * Rev-AndroidAPP-Tong
-
- Note:
-
- * Dev:This branch is for develop
- * Bug: This branch is for bug fix
- * Rev: This branch is for revision
- * Tong:Contributer's name
- * AndroidAPP:The general description of this task
\ No newline at end of file
diff --git a/Spiri/README.md b/Spiri/README.md
deleted file mode 100644
index ddb5b54..0000000
--- a/Spiri/README.md
+++ /dev/null
@@ -1,69 +0,0 @@
-# Spiri Ground Control Station
-
-[![Releases](https://img.shields.io/github/release/mavlink/QGroundControl.svg)](https://git.spirirobotics.com/hetongapp/SpiriGroundControl/releases)
-[![Travis Build Status](https://travis-ci.org/mavlink/qgroundcontrol.svg?branch=master)](https://travis-ci.org/mavlink/qgroundcontrol)
-[![Appveyor Build Status](https://ci.appveyor.com/api/projects/status/crxcm4qayejuvh6c/branch/master?svg=true)](https://ci.appveyor.com/project/mavlink/qgroundcontrol)
-
-
-
-*Spiri GroundControl* (SGC) is an intuitive and powerful ground control station (GCS) for UAVs.
-
-The primary goal of SGC is ease of use for both first time and professional users.
-It provides full flight control and mission planning for any MAVLink enabled drone, and vehicle setup for both PX4 and ArduPilot powered UAVs. Instructions for *using Spiri GroundControl* are provided in the [User Manual](https://docs.qgroundcontrol.com/en/) (you may not need them because the UI is very intuitive!)
-
-All the code is open-source, so you can contribute and evolve it as you want.
-The [Developer Guide](https://dev.qgroundcontrol.com/en/) explains how to [build](https://dev.qgroundcontrol.com/en/getting_started/) and extend QGC.
-
-
-Key Links:
-* [Website](http://qgroundcontrol.com) (qgroundcontrol.com)
-* [User Manual](https://docs.qgroundcontrol.com/en/)
-* [Developer Guide](https://dev.qgroundcontrol.com/en/)
-* [Discussion/Support](https://docs.qgroundcontrol.com/en/Support/Support.html)
-* [Contributing](https://dev.qgroundcontrol.com/en/contribute/)
-* [License](https://github.com/mavlink/qgroundcontrol/blob/master/COPYING.md)
-
-
-# Setup Installation (Windows)
-
-*Install QT 5.15.2
-* Here is the link and Download: [Website](https://download.qt.io/official_releases/online_installers/) (Windows)
-* Setup the environment for QT!
- * 1. right click the desktop and click the attribution.
- * 2. select the "Advanced System Settings"
- * 3. select the "Environment Variables"
- * 4. create a new qt system variable(using your own QT install Path) (eg. D:\QT5.15.2\5.15.2\msvc2019_64)
-
-*Install Spiri QGC
-* create a folder in your workspace and name it such as "Spiri"
-* git clone https://git.spirirobotics.com/hetongapp/SpiriGroundControl.git
-* Then cd to the "Spiri/SpiriGroundControl" and update the repo: "git submodule update --init --recursive".
-* Open the "qgroundcontrol.pro" in "Spiri/SpiriGroundControl" folder by using the QT creator
-* click "build" and "run"
-
-
-# Setup Installation (MacOS)
-
-* Install the Xcode in Apple Store
-* Install Qt Creator for macOS: [Website](https://info.qt.io/zh-cn/download-qt-for-application-development)
-* Create or open a Qt project and check the "iphonesimulator-clang-..." environment in the project configuration page
-* create a folder in your workspace and name it such as "Spiri"
-* git clone https://git.spirirobotics.com/hetongapp/SpiriGroundControl.git
-* Then cd to the "Spiri/SpiriGroundControl" and update the repo: "git submodule update --init --recursive".
-* Click the hammer compile button in the lower left corner, after the compilation is successful, you can close Qt Creator.
-* After the compilation is complete, there will be an "Info.plist" file in the output folder, open it with Xcode.
-
-
-# Setup Installation (Ubuntu20.04)
-
-*Install QT 5.15.2
-* Setup the environment for QT!
- ```bash
- sudo chmod u+x ./Ubuntu_QT_install.sh && source ./Ubuntu_QT_install.sh
- ```
-*Install Spiri QGC
-* create a folder in your workspace and name it such as "Spiri"
-* git clone https://git.spirirobotics.com/Spiri/SpiriGroundControlTest.git
-* Then cd to the "Spiri/SpiriGroundControlTest" and update the repo: "git submodule update --init --recursive".
-* Open the "qgroundcontrol.pro" in "Spiri/SpiriGroundControlTest" folder by using the QT creator
-* click "build" and "run"
\ No newline at end of file
diff --git a/Spiri/config/.gitkeep b/Spiri/config/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/Spiri/data/.gitkeep b/Spiri/data/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/Spiri/model/spiri.mesh b/Spiri/model/spiri.mesh
deleted file mode 100644
index 0137c2e..0000000
Binary files a/Spiri/model/spiri.mesh and /dev/null differ
diff --git a/Spiri/qml/.gitkeep b/Spiri/qml/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/Spiri/resources/icon/spiri.ico b/Spiri/resources/icon/spiri.ico
deleted file mode 100644
index a6081f6..0000000
Binary files a/Spiri/resources/icon/spiri.ico and /dev/null differ
diff --git a/Spiri/resources/icon/spiri1.ico b/Spiri/resources/icon/spiri1.ico
deleted file mode 100644
index fe7d8b3..0000000
Binary files a/Spiri/resources/icon/spiri1.ico and /dev/null differ
diff --git a/Spiri/resources/images/Spiri-release.svg b/Spiri/resources/images/Spiri-release.svg
deleted file mode 100644
index 637f515..0000000
--- a/Spiri/resources/images/Spiri-release.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/Spiri/resources/images/Spiri_black_120.ico b/Spiri/resources/images/Spiri_black_120.ico
deleted file mode 100644
index 7ab5514..0000000
Binary files a/Spiri/resources/images/Spiri_black_120.ico and /dev/null differ
diff --git a/Spiri/resources/images/Spiri_black_160.jpg b/Spiri/resources/images/Spiri_black_160.jpg
deleted file mode 100644
index 2fdf40d..0000000
Binary files a/Spiri/resources/images/Spiri_black_160.jpg and /dev/null differ
diff --git a/Spiri/resources/images/Spiri_black_240.jpg b/Spiri/resources/images/Spiri_black_240.jpg
deleted file mode 100644
index 0fa449e..0000000
Binary files a/Spiri/resources/images/Spiri_black_240.jpg and /dev/null differ
diff --git a/Spiri/resources/images/Spiri_black_320.jpg b/Spiri/resources/images/Spiri_black_320.jpg
deleted file mode 100644
index 634568a..0000000
Binary files a/Spiri/resources/images/Spiri_black_320.jpg and /dev/null differ
diff --git a/Spiri/resources/images/Spiri_black_480.jpg b/Spiri/resources/images/Spiri_black_480.jpg
deleted file mode 100644
index 37c61ac..0000000
Binary files a/Spiri/resources/images/Spiri_black_480.jpg and /dev/null differ
diff --git a/Spiri/resources/images/Spiri_black_640.jpg b/Spiri/resources/images/Spiri_black_640.jpg
deleted file mode 100644
index 7022b11..0000000
Binary files a/Spiri/resources/images/Spiri_black_640.jpg and /dev/null differ
diff --git a/Spiri/resources/images/Spiri_black_bl.ico b/Spiri/resources/images/Spiri_black_bl.ico
deleted file mode 100644
index cb0f00b..0000000
Binary files a/Spiri/resources/images/Spiri_black_bl.ico and /dev/null differ
diff --git a/Spiri/resources/images/Spiri_black_bl.jpg b/Spiri/resources/images/Spiri_black_bl.jpg
deleted file mode 100644
index 3d2e37e..0000000
Binary files a/Spiri/resources/images/Spiri_black_bl.jpg and /dev/null differ
diff --git a/Spiri/resources/images/spiri.png b/Spiri/resources/images/spiri.png
deleted file mode 100644
index 25adf6f..0000000
Binary files a/Spiri/resources/images/spiri.png and /dev/null differ
diff --git a/Spiri/src/.gitkeep b/Spiri/src/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/android.pri b/android.pri
index 3965065..3962196 100644
--- a/android.pri
+++ b/android.pri
@@ -15,7 +15,7 @@ exists($$PWD/custom/android) {
android_source_dir_target.commands = $$QMAKE_MKDIR $$ANDROID_PACKAGE_SOURCE_DIR && \
$$QMAKE_COPY_DIR $$PWD/android/* $$OUT_PWD/ANDROID_PACKAGE_SOURCE_DIR && \
$$QMAKE_COPY_DIR $$PWD/custom/android/* $$OUT_PWD/ANDROID_PACKAGE_SOURCE_DIR && \
- $$QMAKE_STREAM_EDITOR -i \"s/package=\\\"org.mavlink.spiri\\\"/package=\\\"$$QGC_ANDROID_PACKAGE\\\"/\" $$ANDROID_PACKAGE_SOURCE_DIR/AndroidManifest.xml
+ $$QMAKE_STREAM_EDITOR -i \"s/package=\\\"org.mavlink.qgroundcontrol\\\"/package=\\\"$$QGC_ANDROID_PACKAGE\\\"/\" $$ANDROID_PACKAGE_SOURCE_DIR/AndroidManifest.xml
android_source_dir_target.depends = FORCE
}
diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml
index 7fc431b..cd74457 100644
--- a/android/AndroidManifest.xml
+++ b/android/AndroidManifest.xml
@@ -1,5 +1,5 @@
-
-
+
+
diff --git a/android/res/drawable-hdpi/icon.png b/android/res/drawable-hdpi/icon.png
index 490d9ac..f6323cd 100644
Binary files a/android/res/drawable-hdpi/icon.png and b/android/res/drawable-hdpi/icon.png differ
diff --git a/android/res/drawable-ldpi/icon.png b/android/res/drawable-ldpi/icon.png
index b6dc758..8676e65 100644
Binary files a/android/res/drawable-ldpi/icon.png and b/android/res/drawable-ldpi/icon.png differ
diff --git a/android/res/drawable-mdpi/icon.png b/android/res/drawable-mdpi/icon.png
index df8efcb..c1c7603 100644
Binary files a/android/res/drawable-mdpi/icon.png and b/android/res/drawable-mdpi/icon.png differ
diff --git a/android/res/drawable-xhdpi/icon.png b/android/res/drawable-xhdpi/icon.png
index 34c3d76..58a1454 100644
Binary files a/android/res/drawable-xhdpi/icon.png and b/android/res/drawable-xhdpi/icon.png differ
diff --git a/android/res/drawable-xxhdpi/icon.png b/android/res/drawable-xxhdpi/icon.png
index 39e7e39..f74d76f 100644
Binary files a/android/res/drawable-xxhdpi/icon.png and b/android/res/drawable-xxhdpi/icon.png differ
diff --git a/android/res/drawable-xxxhdpi/icon.png b/android/res/drawable-xxxhdpi/icon.png
index c251bc9..f74d76f 100644
Binary files a/android/res/drawable-xxxhdpi/icon.png and b/android/res/drawable-xxxhdpi/icon.png differ
diff --git a/custom/InstrumentValueIcons.qrc b/custom-example/InstrumentValueIcons.qrc
similarity index 100%
rename from custom/InstrumentValueIcons.qrc
rename to custom-example/InstrumentValueIcons.qrc
diff --git a/custom/README.jpg b/custom-example/README.jpg
similarity index 100%
rename from custom/README.jpg
rename to custom-example/README.jpg
diff --git a/custom/README.md b/custom-example/README.md
similarity index 100%
rename from custom/README.md
rename to custom-example/README.md
diff --git a/custom/android-abandon/res/drawable-hdpi/icon.png b/custom-example/android/res/drawable-hdpi/icon.png
similarity index 100%
rename from custom/android-abandon/res/drawable-hdpi/icon.png
rename to custom-example/android/res/drawable-hdpi/icon.png
diff --git a/custom/android-abandon/res/drawable-ldpi/icon.png b/custom-example/android/res/drawable-ldpi/icon.png
similarity index 100%
rename from custom/android-abandon/res/drawable-ldpi/icon.png
rename to custom-example/android/res/drawable-ldpi/icon.png
diff --git a/custom/android-abandon/res/drawable-mdpi/icon.png b/custom-example/android/res/drawable-mdpi/icon.png
similarity index 100%
rename from custom/android-abandon/res/drawable-mdpi/icon.png
rename to custom-example/android/res/drawable-mdpi/icon.png
diff --git a/custom/android-abandon/res/drawable-xhdpi/icon.png b/custom-example/android/res/drawable-xhdpi/icon.png
similarity index 100%
rename from custom/android-abandon/res/drawable-xhdpi/icon.png
rename to custom-example/android/res/drawable-xhdpi/icon.png
diff --git a/custom/android-abandon/res/drawable-xxhdpi/icon.png b/custom-example/android/res/drawable-xxhdpi/icon.png
similarity index 100%
rename from custom/android-abandon/res/drawable-xxhdpi/icon.png
rename to custom-example/android/res/drawable-xxhdpi/icon.png
diff --git a/custom/android-abandon/res/drawable-xxxhdpi/icon.png b/custom-example/android/res/drawable-xxxhdpi/icon.png
similarity index 100%
rename from custom/android-abandon/res/drawable-xxxhdpi/icon.png
rename to custom-example/android/res/drawable-xxxhdpi/icon.png
diff --git a/custom/custom.pri b/custom-example/custom.pri
similarity index 78%
rename from custom/custom.pri
rename to custom-example/custom.pri
index 6d26c44..b55dd86 100644
--- a/custom/custom.pri
+++ b/custom-example/custom.pri
@@ -35,19 +35,19 @@ CONFIG += QGC_DISABLE_PX4_PLUGIN_FACTORY
DEFINES += CUSTOMHEADER=\"\\\"CustomPlugin.h\\\"\"
DEFINES += CUSTOMCLASS=CustomPlugin
-TARGET = Spiri
-DEFINES += QGC_APPLICATION_NAME='"\\\"Spiri\\\""'
+TARGET = CustomQGroundControl
+DEFINES += QGC_APPLICATION_NAME='"\\\"Custom QGroundControl\\\""'
-DEFINES += QGC_ORG_NAME=\"\\\"spiri.org\\\"\"
-DEFINES += QGC_ORG_DOMAIN=\"\\\"org.spiri\\\"\"
+DEFINES += QGC_ORG_NAME=\"\\\"qgroundcontrol.org\\\"\"
+DEFINES += QGC_ORG_DOMAIN=\"\\\"org.qgroundcontrol\\\"\"
-QGC_APP_NAME = "Spiri"
-QGC_BINARY_NAME = "Spiri"
-QGC_ORG_NAME = "Spiri"
-QGC_ORG_DOMAIN = "org.spiri"
-QGC_ANDROID_PACKAGE = "org.spiri.spiri"
-QGC_APP_DESCRIPTION = "Spiri"
-QGC_APP_COPYRIGHT = "Copyright (C) 2023 Spiri Development Team. All rights reserved."
+QGC_APP_NAME = "Custom QGroundControl"
+QGC_BINARY_NAME = "CustomQGroundControl"
+QGC_ORG_NAME = "Custom"
+QGC_ORG_DOMAIN = "org.custom"
+QGC_ANDROID_PACKAGE = "org.custom.qgroundcontrol"
+QGC_APP_DESCRIPTION = "Custom QGroundControl"
+QGC_APP_COPYRIGHT = "Copyright (C) 2020 QGroundControl Development Team. All rights reserved."
# Our own, custom resources
RESOURCES += \
diff --git a/custom/custom.qrc b/custom-example/custom.qrc
similarity index 100%
rename from custom/custom.qrc
rename to custom-example/custom.qrc
diff --git a/custom/custom_deploy.pri b/custom-example/custom_deploy.pri
similarity index 100%
rename from custom/custom_deploy.pri
rename to custom-example/custom_deploy.pri
diff --git a/custom/deploy/qgroundcontrol-start.sh b/custom-example/deploy/qgroundcontrol-start.sh
old mode 100644
new mode 100755
similarity index 100%
rename from custom/deploy/qgroundcontrol-start.sh
rename to custom-example/deploy/qgroundcontrol-start.sh
diff --git a/custom/deploy/qgroundcontrol.desktop b/custom-example/deploy/qgroundcontrol.desktop
similarity index 100%
rename from custom/deploy/qgroundcontrol.desktop
rename to custom-example/deploy/qgroundcontrol.desktop
diff --git a/custom/qgcresources.exclusion b/custom-example/qgcresources.exclusion
similarity index 100%
rename from custom/qgcresources.exclusion
rename to custom-example/qgcresources.exclusion
diff --git a/custom/qgcresources.qrc b/custom-example/qgcresources.qrc
similarity index 97%
rename from custom/qgcresources.qrc
rename to custom-example/qgcresources.qrc
index 23d76dd..c0b4815 100644
--- a/custom/qgcresources.qrc
+++ b/custom-example/qgcresources.qrc
@@ -26,14 +26,11 @@
../resources/JoystickBezel.png
../resources/JoystickBezelLight.png
../resources/land.svg
- ../resources/layout-bottom.svg
- ../resources/layout-right.svg
../resources/LockClosed.svg
../resources/LockOpen.svg
../resources/notile.png
../resources/Pause.svg
../resources/pause-mission.svg
- ../resources/pencil.svg
../resources/Play.svg
../resources/PowerButton.svg
../resources/QGCLogoBlack.svg
diff --git a/custom/qgroundcontrol.exclusion b/custom-example/qgroundcontrol.exclusion
similarity index 100%
rename from custom/qgroundcontrol.exclusion
rename to custom-example/qgroundcontrol.exclusion
diff --git a/custom/qgroundcontrol.qrc b/custom-example/qgroundcontrol.qrc
similarity index 96%
rename from custom/qgroundcontrol.qrc
rename to custom-example/qgroundcontrol.qrc
index d4fce6e..180cf91 100644
--- a/custom/qgroundcontrol.qrc
+++ b/custom-example/qgroundcontrol.qrc
@@ -66,9 +66,6 @@
../src/ui/preferences/MockLink.qml
../src/ui/preferences/MockLinkSettings.qml
../src/AutoPilotPlugins/Common/MotorComponent.qml
- ../src/AutoPilotPlugins/PX4/ActuatorComponent.qml
- ../src/AutoPilotPlugins/PX4/ActuatorFact.qml
- ../src/AutoPilotPlugins/PX4/ActuatorSlider.qml
../src/QtLocationPlugin/QMLControl/OfflineMap.qml
../src/PlanView/PlanToolBar.qml
../src/PlanView/PlanToolBarIndicators.qml
@@ -79,7 +76,6 @@
../src/FlightMap/Widgets/QGCInstrumentWidgetAlternate.qml
../src/AnalyzeView/AnalyzePage.qml
../src/QmlControls/AppMessages.qml
- ../src/QmlControls/AltModeDialog.qml
../src/QmlControls/AxisMonitor.qml
../src/PlanView/CameraCalcCamera.qml
../src/PlanView/CameraCalcGrid.qml
@@ -184,7 +180,6 @@
../src/PlanView/TakeoffItemMapVisual.qml
../src/QmlControls/ToolStrip.qml
../src/QmlControls/ToolStripHoverButton.qml
- ../src/PlanView/TransectStyleComplexItemEditor.qml
../src/PlanView/TransectStyleComplexItemStats.qml
../src/PlanView/TransectStyleComplexItemTabBar.qml
../src/PlanView/TransectStyleComplexItemTerrainFollow.qml
@@ -236,9 +231,6 @@
../src/FlightDisplay/TerrainProgress.qml
../src/FlightDisplay/TelemetryValuesBar.qml
../src/FlightDisplay/VehicleWarnings.qml
- ../src/FlightDisplay/ObstacleDistanceOverlay.qml
- ../src/FlightDisplay/ObstacleDistanceOverlayMap.qml
- ../src/FlightDisplay/ObstacleDistanceOverlayVideo.qml
../src/QmlControls/QGroundControl/FlightDisplay/qmldir
../src/FlightMap/MapItems/CameraTriggerIndicator.qml
../src/FlightMap/Widgets/CenterMapDropButton.qml
@@ -331,15 +323,13 @@
../src/Vehicle/GPSFact.json
../src/Vehicle/GPSRTKFact.json
../src/Vehicle/SetpointFact.json
- ../src/Vehicle/LocalPositionFact.json
- ../src/Vehicle/LocalPositionFact.json
../src/Vehicle/SubmarineFact.json
../src/Vehicle/TemperatureFact.json
../src/Vehicle/TerrainFactGroup.json
../src/Vehicle/VehicleFact.json
../src/Vehicle/VibrationFact.json
../src/Vehicle/WindFact.json
- ../src/Vehicle/HygrometerFact.json
+ ../src/Vehicle/HygrometerFact.json
../src/Settings/Video.SettingsGroup.json
../src/MissionManager/VTOLLandingPattern.FactMetaData.json
@@ -347,8 +337,8 @@
../src/comm/APMArduSubMockLink.params
../src/comm/PX4MockLink.params
../src/comm/MockLink.General.MetaData.json
- ../src/comm/MockLink.General.MetaData.json.xz
- ../src/comm/MockLink.Parameter.MetaData.json.xz
+ src/comm/MockLink.General.MetaData.json.xz
../src/comm/MockLink.Parameter.MetaData.json
+ src/comm/MockLink.Parameter.MetaData.json.xz
diff --git a/custom/res/Custom/Camera/ZoomControl.qml b/custom-example/res/Custom/Camera/ZoomControl.qml
similarity index 100%
rename from custom/res/Custom/Camera/ZoomControl.qml
rename to custom-example/res/Custom/Camera/ZoomControl.qml
diff --git a/custom/res/Custom/Camera/qmldir b/custom-example/res/Custom/Camera/qmldir
similarity index 100%
rename from custom/res/Custom/Camera/qmldir
rename to custom-example/res/Custom/Camera/qmldir
diff --git a/custom/res/Custom/Widgets/CustomArtificialHorizon.qml b/custom-example/res/Custom/Widgets/CustomArtificialHorizon.qml
similarity index 100%
rename from custom/res/Custom/Widgets/CustomArtificialHorizon.qml
rename to custom-example/res/Custom/Widgets/CustomArtificialHorizon.qml
diff --git a/custom/res/Custom/Widgets/CustomAttitudeWidget.qml b/custom-example/res/Custom/Widgets/CustomAttitudeWidget.qml
similarity index 100%
rename from custom/res/Custom/Widgets/CustomAttitudeWidget.qml
rename to custom-example/res/Custom/Widgets/CustomAttitudeWidget.qml
diff --git a/custom/res/Custom/Widgets/CustomIconButton.qml b/custom-example/res/Custom/Widgets/CustomIconButton.qml
similarity index 100%
rename from custom/res/Custom/Widgets/CustomIconButton.qml
rename to custom-example/res/Custom/Widgets/CustomIconButton.qml
diff --git a/custom/res/Custom/Widgets/CustomOnOffSwitch.qml b/custom-example/res/Custom/Widgets/CustomOnOffSwitch.qml
similarity index 100%
rename from custom/res/Custom/Widgets/CustomOnOffSwitch.qml
rename to custom-example/res/Custom/Widgets/CustomOnOffSwitch.qml
diff --git a/custom/res/Custom/Widgets/CustomQuickButton.qml b/custom-example/res/Custom/Widgets/CustomQuickButton.qml
similarity index 100%
rename from custom/res/Custom/Widgets/CustomQuickButton.qml
rename to custom-example/res/Custom/Widgets/CustomQuickButton.qml
diff --git a/custom/res/Custom/Widgets/CustomSignalStrength.qml b/custom-example/res/Custom/Widgets/CustomSignalStrength.qml
similarity index 100%
rename from custom/res/Custom/Widgets/CustomSignalStrength.qml
rename to custom-example/res/Custom/Widgets/CustomSignalStrength.qml
diff --git a/custom/res/Custom/Widgets/CustomToolBarButton.qml b/custom-example/res/Custom/Widgets/CustomToolBarButton.qml
similarity index 100%
rename from custom/res/Custom/Widgets/CustomToolBarButton.qml
rename to custom-example/res/Custom/Widgets/CustomToolBarButton.qml
diff --git a/custom/res/Custom/Widgets/CustomVehicleButton.qml b/custom-example/res/Custom/Widgets/CustomVehicleButton.qml
similarity index 100%
rename from custom/res/Custom/Widgets/CustomVehicleButton.qml
rename to custom-example/res/Custom/Widgets/CustomVehicleButton.qml
diff --git a/custom/res/Custom/Widgets/qmldir b/custom-example/res/Custom/Widgets/qmldir
similarity index 100%
rename from custom/res/Custom/Widgets/qmldir
rename to custom-example/res/Custom/Widgets/qmldir
diff --git a/custom/res/CustomFlyViewOverlay.qml b/custom-example/res/CustomFlyViewOverlay.qml
similarity index 100%
rename from custom/res/CustomFlyViewOverlay.qml
rename to custom-example/res/CustomFlyViewOverlay.qml
diff --git a/custom/res/Images/CustomAppIcon.png b/custom-example/res/Images/CustomAppIcon.png
similarity index 100%
rename from custom/res/Images/CustomAppIcon.png
rename to custom-example/res/Images/CustomAppIcon.png
diff --git a/custom/res/Images/CustomVehicleIcon.svg b/custom-example/res/Images/CustomVehicleIcon.svg
similarity index 99%
rename from custom/res/Images/CustomVehicleIcon.svg
rename to custom-example/res/Images/CustomVehicleIcon.svg
index 671b229..341f04c 100644
--- a/custom/res/Images/CustomVehicleIcon.svg
+++ b/custom-example/res/Images/CustomVehicleIcon.svg
@@ -1,7 +1,7 @@
-
-
-
-