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 @@ -release: v4.2.9releasev1.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 @@ - - - - - Svg Vector Icons : http://www.onlinewebfonts.com/icon - + + + + + Svg Vector Icons : http://www.onlinewebfonts.com/icon + \ No newline at end of file diff --git a/custom/res/Images/altitude.svg b/custom-example/res/Images/altitude.svg similarity index 100% rename from custom/res/Images/altitude.svg rename to custom-example/res/Images/altitude.svg diff --git a/custom/res/Images/attitude_crosshair.svg b/custom-example/res/Images/attitude_crosshair.svg similarity index 100% rename from custom/res/Images/attitude_crosshair.svg rename to custom-example/res/Images/attitude_crosshair.svg diff --git a/custom/res/Images/attitude_dial.svg b/custom-example/res/Images/attitude_dial.svg similarity index 100% rename from custom/res/Images/attitude_dial.svg rename to custom-example/res/Images/attitude_dial.svg diff --git a/custom/res/Images/attitude_pointer.svg b/custom-example/res/Images/attitude_pointer.svg similarity index 100% rename from custom/res/Images/attitude_pointer.svg rename to custom-example/res/Images/attitude_pointer.svg diff --git a/custom/res/Images/chronometer.svg b/custom-example/res/Images/chronometer.svg similarity index 100% rename from custom/res/Images/chronometer.svg rename to custom-example/res/Images/chronometer.svg diff --git a/custom/res/Images/compass_needle.svg b/custom-example/res/Images/compass_needle.svg similarity index 100% rename from custom/res/Images/compass_needle.svg rename to custom-example/res/Images/compass_needle.svg diff --git a/custom/res/Images/compass_pointer.svg b/custom-example/res/Images/compass_pointer.svg similarity index 100% rename from custom/res/Images/compass_pointer.svg rename to custom-example/res/Images/compass_pointer.svg diff --git a/custom/res/Images/distance.svg b/custom-example/res/Images/distance.svg similarity index 100% rename from custom/res/Images/distance.svg rename to custom-example/res/Images/distance.svg diff --git a/custom/res/Images/horizontal_speed.svg b/custom-example/res/Images/horizontal_speed.svg similarity index 100% rename from custom/res/Images/horizontal_speed.svg rename to custom-example/res/Images/horizontal_speed.svg diff --git a/custom/res/Images/microSD.svg b/custom-example/res/Images/microSD.svg similarity index 100% rename from custom/res/Images/microSD.svg rename to custom-example/res/Images/microSD.svg diff --git a/custom/res/Images/odometer.svg b/custom-example/res/Images/odometer.svg similarity index 100% rename from custom/res/Images/odometer.svg rename to custom-example/res/Images/odometer.svg diff --git a/custom/res/Images/vertical_speed.svg b/custom-example/res/Images/vertical_speed.svg similarity index 100% rename from custom/res/Images/vertical_speed.svg rename to custom-example/res/Images/vertical_speed.svg diff --git a/custom/res/Images/void.png b/custom-example/res/Images/void.png similarity index 100% rename from custom/res/Images/void.png rename to custom-example/res/Images/void.png diff --git a/custom/src/AutoPilotPlugin/CustomAutoPilotPlugin.cc b/custom-example/src/AutoPilotPlugin/CustomAutoPilotPlugin.cc similarity index 100% rename from custom/src/AutoPilotPlugin/CustomAutoPilotPlugin.cc rename to custom-example/src/AutoPilotPlugin/CustomAutoPilotPlugin.cc diff --git a/custom/src/AutoPilotPlugin/CustomAutoPilotPlugin.h b/custom-example/src/AutoPilotPlugin/CustomAutoPilotPlugin.h similarity index 100% rename from custom/src/AutoPilotPlugin/CustomAutoPilotPlugin.h rename to custom-example/src/AutoPilotPlugin/CustomAutoPilotPlugin.h diff --git a/custom/src/CustomPlugin.cc b/custom-example/src/CustomPlugin.cc similarity index 100% rename from custom/src/CustomPlugin.cc rename to custom-example/src/CustomPlugin.cc diff --git a/custom/src/CustomPlugin.h b/custom-example/src/CustomPlugin.h similarity index 100% rename from custom/src/CustomPlugin.h rename to custom-example/src/CustomPlugin.h diff --git a/custom/src/FirmwarePlugin/CustomFirmwarePlugin.cc b/custom-example/src/FirmwarePlugin/CustomFirmwarePlugin.cc similarity index 100% rename from custom/src/FirmwarePlugin/CustomFirmwarePlugin.cc rename to custom-example/src/FirmwarePlugin/CustomFirmwarePlugin.cc diff --git a/custom/src/FirmwarePlugin/CustomFirmwarePlugin.h b/custom-example/src/FirmwarePlugin/CustomFirmwarePlugin.h similarity index 100% rename from custom/src/FirmwarePlugin/CustomFirmwarePlugin.h rename to custom-example/src/FirmwarePlugin/CustomFirmwarePlugin.h diff --git a/custom/src/FirmwarePlugin/CustomFirmwarePluginFactory.cc b/custom-example/src/FirmwarePlugin/CustomFirmwarePluginFactory.cc similarity index 100% rename from custom/src/FirmwarePlugin/CustomFirmwarePluginFactory.cc rename to custom-example/src/FirmwarePlugin/CustomFirmwarePluginFactory.cc diff --git a/custom/src/FirmwarePlugin/CustomFirmwarePluginFactory.h b/custom-example/src/FirmwarePlugin/CustomFirmwarePluginFactory.h similarity index 100% rename from custom/src/FirmwarePlugin/CustomFirmwarePluginFactory.h rename to custom-example/src/FirmwarePlugin/CustomFirmwarePluginFactory.h diff --git a/custom/updateinstrumentqrc.py b/custom-example/updateinstrumentqrc.py old mode 100644 new mode 100755 similarity index 100% rename from custom/updateinstrumentqrc.py rename to custom-example/updateinstrumentqrc.py diff --git a/custom/updateqrc.py b/custom-example/updateqrc.py old mode 100644 new mode 100755 similarity index 100% rename from custom/updateqrc.py rename to custom-example/updateqrc.py diff --git a/libs/Frameworks/SDL2.framework/Headers b/libs/Frameworks/SDL2.framework/Headers deleted file mode 120000 index a177d2a..0000000 --- a/libs/Frameworks/SDL2.framework/Headers +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Headers \ No newline at end of file diff --git a/libs/Frameworks/SDL2.framework/Resources b/libs/Frameworks/SDL2.framework/Resources deleted file mode 120000 index 953ee36..0000000 --- a/libs/Frameworks/SDL2.framework/Resources +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Resources \ No newline at end of file diff --git a/libs/Frameworks/SDL2.framework/SDL2 b/libs/Frameworks/SDL2.framework/SDL2 deleted file mode 120000 index 9dd4e4f..0000000 --- a/libs/Frameworks/SDL2.framework/SDL2 +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/SDL2 \ No newline at end of file diff --git a/libs/Frameworks/SDL2.framework/Versions/Current b/libs/Frameworks/SDL2.framework/Versions/Current deleted file mode 120000 index 8c7e5a6..0000000 --- a/libs/Frameworks/SDL2.framework/Versions/Current +++ /dev/null @@ -1 +0,0 @@ -A \ No newline at end of file diff --git a/qgroundcontrol.pro b/qgroundcontrol.pro index 21dd80e..359ba6b 100644 --- a/qgroundcontrol.pro +++ b/qgroundcontrol.pro @@ -354,9 +354,9 @@ CustomBuild { RESOURCES += $$PWD/resources/InstrumentValueIcons/InstrumentValueIcons.qrc } } else { - DEFINES += QGC_APPLICATION_NAME=\"\\\"Spiri\\\"\" - DEFINES += QGC_ORG_NAME=\"\\\"Spiri.org\\\"\" - DEFINES += QGC_ORG_DOMAIN=\"\\\"org.spiri\\\"\" + DEFINES += QGC_APPLICATION_NAME=\"\\\"QGroundControl\\\"\" + DEFINES += QGC_ORG_NAME=\"\\\"QGroundControl.org\\\"\" + DEFINES += QGC_ORG_DOMAIN=\"\\\"org.qgroundcontrol\\\"\" RESOURCES += \ $$PWD/qgroundcontrol.qrc \ $$PWD/qgcresources.qrc \ diff --git a/src/Vehicle/Vehicle.cc b/src/Vehicle/Vehicle.cc index 9cf7e3d..0534815 100644 --- a/src/Vehicle/Vehicle.cc +++ b/src/Vehicle/Vehicle.cc @@ -1,4 +1,4 @@ -/**************************************************************************** +/**************************************************************************** * * (c) 2009-2020 QGROUNDCONTROL PROJECT * @@ -722,9 +722,9 @@ void Vehicle::_mavlinkMessageReceived(LinkInterface* link, mavlink_message_t mes case MAVLINK_MSG_ID_VFR_HUD: _handleVfrHud(message); break; - // case MAVLINK_MSG_ID_RANGEFINDER: - // _handleRangefinder(message); - // break; + case MAVLINK_MSG_ID_RANGEFINDER: + _handleRangefinder(message); + break; case MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT: _handleNavControllerOutput(message); break; @@ -1000,9 +1000,9 @@ void Vehicle::_handleVfrHud(mavlink_message_t& message) void Vehicle::_handleRangefinder(mavlink_message_t& message) { - // mavlink_rangefinder_t rangefinder; - // mavlink_msg_rangefinder_decode(&message, &rangefinder); - // _rangeFinderDistFact.setRawValue(qIsNaN(rangefinder.distance) ? 0 : rangefinder.distance); + mavlink_rangefinder_t rangefinder; + mavlink_msg_rangefinder_decode(&message, &rangefinder); + _rangeFinderDistFact.setRawValue(qIsNaN(rangefinder.distance) ? 0 : rangefinder.distance); }