Merge branch 'master' into NextHopRouter

This commit is contained in:
GUVWAF 2025-01-11 15:24:02 +01:00 committed by GitHub
commit d5a8587deb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
35 changed files with 373 additions and 277 deletions

View File

@ -83,13 +83,13 @@ runs:
- name: Get release version string - name: Get release version string
shell: bash shell: bash
run: echo "version=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT run: echo "long=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT
id: version id: version
- name: Store binaries as an artifact - name: Store binaries as an artifact
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
with: with:
name: firmware-${{ inputs.arch }}-${{ inputs.board }}-${{ steps.version.outputs.version }}.zip name: firmware-${{ inputs.arch }}-${{ inputs.board }}-${{ steps.version.outputs.long }}.zip
overwrite: true overwrite: true
path: | path: |
${{ inputs.artifact-paths }} ${{ inputs.artifact-paths }}

View File

@ -7,7 +7,11 @@ on:
required: true required: true
inputs: inputs:
series: series:
description: Ubuntu series to target description: Ubuntu/Debian series to target
required: true
type: string
build_location:
description: Location where build will execute
required: true required: true
type: string type: string
@ -47,6 +51,8 @@ jobs:
working-directory: meshtasticd working-directory: meshtasticd
run: | run: |
echo "deb=$(./bin/buildinfo.py deb)" >> $GITHUB_OUTPUT echo "deb=$(./bin/buildinfo.py deb)" >> $GITHUB_OUTPUT
env:
BUILD_LOCATION: ${{ inputs.build_location }}
id: version id: version
- name: Fetch libdeps, package debian source - name: Fetch libdeps, package debian source

View File

@ -18,7 +18,7 @@ jobs:
repository: ${{github.event.pull_request.head.repo.full_name}} repository: ${{github.event.pull_request.head.repo.full_name}}
- name: Get release version string - name: Get release version string
run: echo "version=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT run: echo "long=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT
id: version id: version
- name: Docker login - name: Docker login
@ -39,7 +39,7 @@ jobs:
context: . context: .
file: ./Dockerfile file: ./Dockerfile
push: true push: true
tags: meshtastic/meshtasticd:${{ steps.version.outputs.version }} tags: meshtastic/meshtasticd:${{ steps.version.outputs.long }}
- name: Docker build and push - name: Docker build and push
if: ${{ github.ref == 'refs/heads/master' && github.event_name != 'pull_request_target' && github.event_name != 'pull_request' }} if: ${{ github.ref == 'refs/heads/master' && github.event_name != 'pull_request_target' && github.event_name != 'pull_request' }}

View File

@ -25,13 +25,13 @@ jobs:
run: bin/build-native.sh run: bin/build-native.sh
- name: Get release version string - name: Get release version string
run: echo "version=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT run: echo "long=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT
id: version id: version
- name: Store binaries as an artifact - name: Store binaries as an artifact
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
with: with:
name: firmware-native-${{ steps.version.outputs.version }}.zip name: firmware-native-${{ steps.version.outputs.long }}.zip
overwrite: true overwrite: true
path: | path: |
release/meshtasticd_linux_x86_64 release/meshtasticd_linux_x86_64

View File

@ -39,13 +39,13 @@ jobs:
run: bin/build-native.sh run: bin/build-native.sh
- name: Get release version string - name: Get release version string
run: echo "version=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT run: echo "long=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT
id: version id: version
- name: Store binaries as an artifact - name: Store binaries as an artifact
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
with: with:
name: firmware-raspbian-${{ steps.version.outputs.version }}.zip name: firmware-raspbian-${{ steps.version.outputs.long }}.zip
overwrite: true overwrite: true
path: | path: |
release/meshtasticd_linux_aarch64 release/meshtasticd_linux_aarch64

View File

@ -39,13 +39,13 @@ jobs:
run: bin/build-native.sh run: bin/build-native.sh
- name: Get release version string - name: Get release version string
run: echo "version=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT run: echo "long=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT
id: version id: version
- name: Store binaries as an artifact - name: Store binaries as an artifact
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
with: with:
name: firmware-raspbian-armv7l-${{ steps.version.outputs.version }}.zip name: firmware-raspbian-armv7l-${{ steps.version.outputs.long }}.zip
overwrite: true overwrite: true
path: | path: |
release/meshtasticd_linux_armv7l release/meshtasticd_linux_armv7l

View File

@ -137,6 +137,13 @@ jobs:
package-native: package-native:
uses: ./.github/workflows/package_amd64.yml uses: ./.github/workflows/package_amd64.yml
build-debian-src:
uses: ./.github/workflows/build_debian_src.yml
with:
series: UNRELEASED
build_location: local
secrets: inherit
test-native: test-native:
uses: ./.github/workflows/test_native.yml uses: ./.github/workflows/test_native.yml
@ -192,7 +199,7 @@ jobs:
run: ls -R run: ls -R
- name: Get release version string - name: Get release version string
run: echo "version=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT run: echo "long=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT
id: version id: version
- name: Move files up - name: Move files up
@ -201,7 +208,7 @@ jobs:
- name: Repackage in single firmware zip - name: Repackage in single firmware zip
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
with: with:
name: firmware-${{matrix.arch}}-${{ steps.version.outputs.version }} name: firmware-${{matrix.arch}}-${{ steps.version.outputs.long }}
overwrite: true overwrite: true
path: | path: |
./firmware-*.bin ./firmware-*.bin
@ -218,7 +225,7 @@ jobs:
- uses: actions/download-artifact@v4 - uses: actions/download-artifact@v4
with: with:
name: firmware-${{matrix.arch}}-${{ steps.version.outputs.version }} name: firmware-${{matrix.arch}}-${{ steps.version.outputs.long }}
merge-multiple: true merge-multiple: true
path: ./output path: ./output
@ -232,12 +239,12 @@ jobs:
chmod +x ./output/device-update.sh chmod +x ./output/device-update.sh
- name: Zip firmware - name: Zip firmware
run: zip -j -9 -r ./firmware-${{matrix.arch}}-${{ steps.version.outputs.version }}.zip ./output run: zip -j -9 -r ./firmware-${{matrix.arch}}-${{ steps.version.outputs.long }}.zip ./output
- name: Repackage in single elfs zip - name: Repackage in single elfs zip
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
with: with:
name: debug-elfs-${{matrix.arch}}-${{ steps.version.outputs.version }}.zip name: debug-elfs-${{matrix.arch}}-${{ steps.version.outputs.long }}.zip
overwrite: true overwrite: true
path: ./*.elf path: ./*.elf
retention-days: 30 retention-days: 30
@ -245,8 +252,8 @@ jobs:
- uses: scruplelesswizard/comment-artifact@main - uses: scruplelesswizard/comment-artifact@main
if: ${{ github.event_name == 'pull_request' }} if: ${{ github.event_name == 'pull_request' }}
with: with:
name: firmware-${{matrix.arch}}-${{ steps.version.outputs.version }} name: firmware-${{matrix.arch}}-${{ steps.version.outputs.long }}
description: "Download firmware-${{matrix.arch}}-${{ steps.version.outputs.version }}.zip. This artifact will be available for 90 days from creation" description: "Download firmware-${{matrix.arch}}-${{ steps.version.outputs.long }}.zip. This artifact will be available for 90 days from creation"
github-token: ${{ secrets.GITHUB_TOKEN }} github-token: ${{ secrets.GITHUB_TOKEN }}
release-artifacts: release-artifacts:
@ -260,6 +267,7 @@ jobs:
package-raspbian, package-raspbian,
package-raspbian-armv7l, package-raspbian-armv7l,
package-native, package-native,
build-debian-src,
] ]
steps: steps:
- name: Checkout - name: Checkout
@ -271,62 +279,55 @@ jobs:
python-version: 3.x python-version: 3.x
- name: Get release version string - name: Get release version string
run: echo "version=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT run: |
echo "long=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT
echo "deb=$(./bin/buildinfo.py deb)" >> $GITHUB_OUTPUT
id: version id: version
env:
BUILD_LOCATION: local
- name: Create release - name: Create release
uses: actions/create-release@v1 uses: softprops/action-gh-release@v2
id: create_release id: create_release
with: with:
draft: true draft: true
prerelease: true prerelease: true
release_name: Meshtastic Firmware ${{ steps.version.outputs.version }} Alpha name: Meshtastic Firmware ${{ steps.version.outputs.long }} Alpha
tag_name: v${{ steps.version.outputs.version }} tag_name: v${{ steps.version.outputs.long }}
body: | body: |
Autogenerated by github action, developer should edit as required before publishing... Autogenerated by github action, developer should edit as required before publishing...
env:
GITHUB_TOKEN: ${{ github.token }}
- name: Download deb files - name: Download deb files
uses: actions/download-artifact@v4 uses: actions/download-artifact@v4
with: with:
pattern: meshtasticd_${{ steps.version.outputs.version }}_*.deb pattern: meshtasticd_${{ steps.version.outputs.long }}_*.deb
merge-multiple: true merge-multiple: true
path: ./output path: ./output
- name: Download source deb
uses: actions/download-artifact@v4
with:
pattern: firmware-debian-${{ steps.version.outputs.deb }}~UNRELEASED-src
merge-multiple: true
path: ./output/debian-src
- name: Zip source deb
working-directory: output
run: zip -j -9 -r ./meshtasticd-${{ steps.version.outputs.deb }}-src.zip ./debian-src
# For diagnostics # For diagnostics
- name: Display structure of downloaded files - name: Display structure of downloaded files
run: ls -lR run: ls -lR
- name: Add raspbian aarch64 .deb - name: Add deb files to release
uses: actions/upload-release-asset@v1 uses: softprops/action-gh-release@v2
env:
GITHUB_TOKEN: ${{ github.token }}
with: with:
upload_url: ${{ steps.create_release.outputs.upload_url }} tag_name: v${{ steps.version.outputs.long }}
asset_path: ./output/meshtasticd_${{ steps.version.outputs.version }}_arm64.deb files: |
asset_name: meshtasticd_${{ steps.version.outputs.version }}_arm64.deb ./output/meshtasticd_${{ steps.version.outputs.long }}_arm64.deb
asset_content_type: application/vnd.debian.binary-package ./output/meshtasticd_${{ steps.version.outputs.long }}_armhf.deb
./output/meshtasticd_${{ steps.version.outputs.long }}_amd64.deb
- name: Add raspbian armv7l .deb ./output/meshtasticd-${{ steps.version.outputs.deb }}-src.zip
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ github.token }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./output/meshtasticd_${{ steps.version.outputs.version }}_armhf.deb
asset_name: meshtasticd_${{ steps.version.outputs.version }}_armhf.deb
asset_content_type: application/vnd.debian.binary-package
- name: Add raspbian amd64 .deb
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ github.token }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./output/meshtasticd_${{ steps.version.outputs.version }}_amd64.deb
asset_name: meshtasticd_${{ steps.version.outputs.version }}_amd64.deb
asset_content_type: application/vnd.debian.binary-package
- name: Bump version.properties - name: Bump version.properties
run: >- run: >-
@ -362,12 +363,12 @@ jobs:
python-version: 3.x python-version: 3.x
- name: Get release version string - name: Get release version string
run: echo "version=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT run: echo "long=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT
id: version id: version
- uses: actions/download-artifact@v4 - uses: actions/download-artifact@v4
with: with:
pattern: firmware-${{matrix.arch}}-${{ steps.version.outputs.version }} pattern: firmware-${{matrix.arch}}-${{ steps.version.outputs.long }}
merge-multiple: true merge-multiple: true
path: ./output path: ./output
@ -380,37 +381,25 @@ jobs:
chmod +x ./output/device-update.sh chmod +x ./output/device-update.sh
- name: Zip firmware - name: Zip firmware
run: zip -j -9 -r ./firmware-${{matrix.arch}}-${{ steps.version.outputs.version }}.zip ./output run: zip -j -9 -r ./firmware-${{matrix.arch}}-${{ steps.version.outputs.long }}.zip ./output
- uses: actions/download-artifact@v4 - uses: actions/download-artifact@v4
with: with:
name: debug-elfs-${{matrix.arch}}-${{ steps.version.outputs.version }}.zip name: debug-elfs-${{matrix.arch}}-${{ steps.version.outputs.long }}.zip
merge-multiple: true merge-multiple: true
path: ./elfs path: ./elfs
- name: Zip firmware - name: Zip debug elfs
run: zip -j -9 -r ./debug-elfs-${{matrix.arch}}-${{ steps.version.outputs.version }}.zip ./elfs run: zip -j -9 -r ./debug-elfs-${{matrix.arch}}-${{ steps.version.outputs.long }}.zip ./elfs
# For diagnostics # For diagnostics
- name: Display structure of downloaded files - name: Display structure of downloaded files
run: ls -lR run: ls -lR
- name: Add bins to release - name: Add bins and debug elfs to release
uses: actions/upload-release-asset@v1 uses: softprops/action-gh-release@v2
env:
GITHUB_TOKEN: ${{ github.token }}
with: with:
upload_url: ${{needs.release-artifacts.outputs.upload_url}} tag_name: v${{ steps.version.outputs.long }}
asset_path: ./firmware-${{matrix.arch}}-${{ steps.version.outputs.version }}.zip files: |
asset_name: firmware-${{matrix.arch}}-${{ steps.version.outputs.version }}.zip ./firmware-${{matrix.arch}}-${{ steps.version.outputs.long }}.zip
asset_content_type: application/zip ./debug-elfs-${{matrix.arch}}-${{ steps.version.outputs.long }}.zip
- name: Add debug elfs to release
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ github.token }}
with:
upload_url: ${{needs.release-artifacts.outputs.upload_url}}
asset_path: ./debug-elfs-${{matrix.arch}}-${{ steps.version.outputs.version }}.zip
asset_name: debug-elfs-${{matrix.arch}}-${{ steps.version.outputs.version }}.zip
asset_content_type: application/zip

View File

@ -17,13 +17,3 @@ jobs:
uses: trunk-io/trunk-action@782e83f803ca6e369f035d64c6ba2768174ba61b uses: trunk-io/trunk-action@782e83f803ca6e369f035d64c6ba2768174ba61b
with: with:
trunk-token: ${{ secrets.TRUNK_TOKEN }} trunk-token: ${{ secrets.TRUNK_TOKEN }}
package-ppa:
strategy:
fail-fast: false
matrix:
series: [plucky, oracular, noble, jammy]
uses: ./.github/workflows/package_ppa.yml
with:
ppa_repo: daily
series: ${{ matrix.series }}
secrets: inherit

37
.github/workflows/nightly_debian.yml vendored Normal file
View File

@ -0,0 +1,37 @@
name: Nightly Debian Packaging
on:
schedule:
- cron: 0 9 * * *
workflow_dispatch:
push:
branches:
- master
paths:
- debian/**
- .github/workflows/nightly_debian.yml
- .github/workflows/build_debian_src.yml
- .github/workflows/package_ppa.yml
- .github/workflows/package_obs.yml
permissions:
contents: write
packages: write
jobs:
package-ppa:
strategy:
fail-fast: false
matrix:
series: [plucky, oracular, noble, jammy]
uses: ./.github/workflows/package_ppa.yml
with:
ppa_repo: ppa:meshtastic/daily
series: ${{ matrix.series }}
secrets: inherit
package-obs:
uses: ./.github/workflows/package_obs.yml
with:
obs_project: home:meshtastic:daily
series: unstable
secrets: inherit

View File

@ -32,13 +32,13 @@ jobs:
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
- name: Get release version string - name: Get release version string
run: echo "version=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT run: echo "long=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT
id: version id: version
- name: Download artifacts - name: Download artifacts
uses: actions/download-artifact@v4 uses: actions/download-artifact@v4
with: with:
name: firmware-native-${{ steps.version.outputs.version }}.zip name: firmware-native-${{ steps.version.outputs.long }}.zip
merge-multiple: true merge-multiple: true
- name: Display structure of downloaded files - name: Display structure of downloaded files
@ -77,14 +77,14 @@ jobs:
package: meshtasticd package: meshtasticd
package_root: .debpkg package_root: .debpkg
maintainer: Jonathan Bennett maintainer: Jonathan Bennett
version: ${{ steps.version.outputs.version }} # refs/tags/v*.*.* version: ${{ steps.version.outputs.long }} # refs/tags/v*.*.*
arch: amd64 arch: amd64
depends: libyaml-cpp0.7, openssl, libulfius2.7, libi2c0 depends: libyaml-cpp0.7, openssl, libulfius2.7, libi2c0
desc: Native Linux Meshtastic binary. desc: Native Linux Meshtastic binary.
- uses: actions/upload-artifact@v4 - uses: actions/upload-artifact@v4
with: with:
name: meshtasticd_${{ steps.version.outputs.version }}_amd64.deb name: meshtasticd_${{ steps.version.outputs.long }}_amd64.deb
overwrite: true overwrite: true
path: | path: |
./*.deb ./*.deb

110
.github/workflows/package_obs.yml vendored Normal file
View File

@ -0,0 +1,110 @@
name: Package for OpenSUSE Build Service
on:
workflow_call:
secrets:
OBS_PASSWORD:
required: true
PPA_GPG_PRIVATE_KEY:
required: true
inputs:
obs_project:
description: Meshtastic OBS project to target
required: true
type: string
series:
description: Debian series to target
required: true
type: string
permissions:
contents: write
packages: write
jobs:
build-debian-src:
uses: ./.github/workflows/build_debian_src.yml
secrets: inherit
with:
series: ${{ inputs.series }}
build_location: obs
package-obs:
runs-on: ubuntu-24.04
needs: build-debian-src
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
submodules: recursive
path: meshtasticd
ref: ${{github.event.pull_request.head.ref}}
repository: ${{github.event.pull_request.head.repo.full_name}}
- name: Install OpenSUSE Build Service deps
shell: bash
run: |
echo 'deb http://download.opensuse.org/repositories/openSUSE:/Tools/xUbuntu_24.04/ /' | sudo tee /etc/apt/sources.list.d/openSUSE:Tools.list
curl -fsSL https://download.opensuse.org/repositories/openSUSE:Tools/xUbuntu_24.04/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/openSUSE_Tools.gpg > /dev/null
sudo apt-get update -y --fix-missing
sudo apt-get install -y osc
- name: Get release version string
working-directory: meshtasticd
run: |
echo "deb=$(./bin/buildinfo.py deb)" >> $GITHUB_OUTPUT
env:
BUILD_LOCATION: obs
id: version
- name: Download artifacts
uses: actions/download-artifact@v4
with:
name: firmware-debian-${{ steps.version.outputs.deb }}~${{ inputs.series }}-src
merge-multiple: true
- name: Display structure of downloaded files
run: ls -lah
- name: Configure osc
env:
OBS_USERNAME: meshtastic
run: |
# Setup OpenSUSE Build Service credentials
mkdir -p ~/.config/osc
echo "[general]" > ~/.config/osc/oscrc
echo "apiurl=https://api.opensuse.org" >> ~/.config/osc/oscrc
echo "[https://api.opensuse.org]" >> ~/.config/osc/oscrc
echo "user=${{ env.OBS_USERNAME }}" >> ~/.config/osc/oscrc
echo "pass=${{ secrets.OBS_PASSWORD }}" >> ~/.config/osc/oscrc
echo "credentials_mgr_class=osc.credentials.PlaintextConfigFileCredentialsManager" >> ~/.config/osc/oscrc
# Create a temporary directory for osc checkout
mkdir -p osc
# Intentionally fail if credentials are invalid
# Update secrets if this returns `401`
- name: Verify OBS authentication
run: osc token
- name: Upload package to OBS
shell: bash
working-directory: osc
env:
OBS_PROJECT: ${{ inputs.obs_project }}
OBS_PACKAGE: meshtasticd
run: |
# Initialize the package in the current directory
osc checkout --output-dir . $OBS_PROJECT $OBS_PACKAGE
# Remove the existing package files
rm -rf *.dsc *.tar.xz
# Copy new package files to the directory
cp $GITHUB_WORKSPACE/*.dsc .
cp $GITHUB_WORKSPACE/*.tar.xz .
# Add/Remove the files
osc addremove
# Commit changes and push to OpenSUSE Build Service
osc commit -m "GitHub Actions: ${{ steps.version.outputs.deb }}~${{ inputs.series }}"

View File

@ -1,4 +1,4 @@
name: Package Launchpad PPA name: Package for Launchpad PPA
on: on:
workflow_call: workflow_call:
@ -14,7 +14,6 @@ on:
description: Ubuntu series to target description: Ubuntu series to target
required: true required: true
type: string type: string
workflow_dispatch:
permissions: permissions:
contents: write contents: write
@ -26,6 +25,7 @@ jobs:
secrets: inherit secrets: inherit
with: with:
series: ${{ inputs.series }} series: ${{ inputs.series }}
build_location: ppa
package-ppa: package-ppa:
runs-on: ubuntu-24.04 runs-on: ubuntu-24.04
@ -55,6 +55,8 @@ jobs:
working-directory: meshtasticd working-directory: meshtasticd
run: | run: |
echo "deb=$(./bin/buildinfo.py deb)" >> $GITHUB_OUTPUT echo "deb=$(./bin/buildinfo.py deb)" >> $GITHUB_OUTPUT
env:
BUILD_LOCATION: ppa
id: version id: version
- name: Download artifacts - name: Download artifacts
@ -69,4 +71,4 @@ jobs:
- name: Publish with dput - name: Publish with dput
if: ${{ github.event_name != 'pull_request_target' && github.event_name != 'pull_request' }} if: ${{ github.event_name != 'pull_request_target' && github.event_name != 'pull_request' }}
run: | run: |
dput ppa:meshtastic/${{ inputs.ppa_repo }} meshtasticd_${{ steps.version.outputs.deb }}~${{ inputs.series }}_source.changes dput ${{ inputs.ppa_repo }} meshtasticd_${{ steps.version.outputs.deb }}~${{ inputs.series }}_source.changes

View File

@ -32,13 +32,13 @@ jobs:
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
- name: Get release version string - name: Get release version string
run: echo "version=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT run: echo "long=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT
id: version id: version
- name: Download artifacts - name: Download artifacts
uses: actions/download-artifact@v4 uses: actions/download-artifact@v4
with: with:
name: firmware-raspbian-${{ steps.version.outputs.version }}.zip name: firmware-raspbian-${{ steps.version.outputs.long }}.zip
merge-multiple: true merge-multiple: true
- name: Display structure of downloaded files - name: Display structure of downloaded files
@ -77,14 +77,14 @@ jobs:
package: meshtasticd package: meshtasticd
package_root: .debpkg package_root: .debpkg
maintainer: Jonathan Bennett maintainer: Jonathan Bennett
version: ${{ steps.version.outputs.version }} # refs/tags/v*.*.* version: ${{ steps.version.outputs.long }} # refs/tags/v*.*.*
arch: arm64 arch: arm64
depends: libyaml-cpp0.7, openssl, libulfius2.7, libi2c0 depends: libyaml-cpp0.7, openssl, libulfius2.7, libi2c0
desc: Native Linux Meshtastic binary. desc: Native Linux Meshtastic binary.
- uses: actions/upload-artifact@v4 - uses: actions/upload-artifact@v4
with: with:
name: meshtasticd_${{ steps.version.outputs.version }}_arm64.deb name: meshtasticd_${{ steps.version.outputs.long }}_arm64.deb
overwrite: true overwrite: true
path: | path: |
./*.deb ./*.deb

View File

@ -32,13 +32,13 @@ jobs:
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
- name: Get release version string - name: Get release version string
run: echo "version=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT run: echo "long=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT
id: version id: version
- name: Download artifacts - name: Download artifacts
uses: actions/download-artifact@v4 uses: actions/download-artifact@v4
with: with:
name: firmware-raspbian-armv7l-${{ steps.version.outputs.version }}.zip name: firmware-raspbian-armv7l-${{ steps.version.outputs.long }}.zip
merge-multiple: true merge-multiple: true
- name: Display structure of downloaded files - name: Display structure of downloaded files
@ -77,14 +77,14 @@ jobs:
package: meshtasticd package: meshtasticd
package_root: .debpkg package_root: .debpkg
maintainer: Jonathan Bennett maintainer: Jonathan Bennett
version: ${{ steps.version.outputs.version }} # refs/tags/v*.*.* version: ${{ steps.version.outputs.long }} # refs/tags/v*.*.*
arch: armhf arch: armhf
depends: libyaml-cpp0.7, openssl, libulfius2.7, libi2c0 depends: libyaml-cpp0.7, openssl, libulfius2.7, libi2c0
desc: Native Linux Meshtastic binary. desc: Native Linux Meshtastic binary.
- uses: actions/upload-artifact@v4 - uses: actions/upload-artifact@v4
with: with:
name: meshtasticd_${{ steps.version.outputs.version }}_armhf.deb name: meshtasticd_${{ steps.version.outputs.long }}_armhf.deb
overwrite: true overwrite: true
path: | path: |
./*.deb ./*.deb

View File

@ -2,7 +2,7 @@ name: Trigger release workflows upon Publish
on: on:
release: release:
types: [published] types: [published, released]
permissions: read-all permissions: read-all
@ -15,6 +15,15 @@ jobs:
uses: ./.github/workflows/package_ppa.yml uses: ./.github/workflows/package_ppa.yml
with: with:
ppa_repo: |- ppa_repo: |-
${{ contains(github.event.release.name, 'Beta') && 'beta' || contains(github.event.release.name, 'Alpha') && 'alpha' }} ppa:meshtastic/${{ contains(github.event.release.name, 'Beta') && 'beta' || contains(github.event.release.name, 'Alpha') && 'alpha' }}
series: ${{ matrix.series }} series: ${{ matrix.series }}
secrets: inherit secrets: inherit
package-obs:
uses: ./.github/workflows/package_obs.yml
with:
obs_project: |-
home:meshtastic:${{ contains(github.event.release.name, 'Beta') && 'beta' || contains(github.event.release.name, 'Alpha') && 'alpha' }}
series: |-
${{ contains(github.event.release.name, 'Beta') && 'beta' || contains(github.event.release.name, 'Alpha') && 'alpha' }}
secrets: inherit

View File

@ -55,14 +55,14 @@ jobs:
- name: Get release version string - name: Get release version string
if: always() # run this step even if previous step failed if: always() # run this step even if previous step failed
run: echo "version=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT run: echo "long=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT
id: version id: version
- name: Save coverage information - name: Save coverage information
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
if: always() # run this step even if previous step failed if: always() # run this step even if previous step failed
with: with:
name: lcov-coverage-info-native-simulator-test-${{ steps.version.outputs.version }}.zip name: lcov-coverage-info-native-simulator-test-${{ steps.version.outputs.long }}.zip
overwrite: true overwrite: true
path: ./coverage_*.info path: ./coverage_*.info
@ -81,7 +81,7 @@ jobs:
uses: ./.github/actions/setup-native uses: ./.github/actions/setup-native
- name: Get release version string - name: Get release version string
run: echo "version=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT run: echo "long=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT
id: version id: version
# Disable (comment-out) BUILD_EPOCH. It causes a full rebuild between tests and resets the # Disable (comment-out) BUILD_EPOCH. It causes a full rebuild between tests and resets the
@ -96,7 +96,7 @@ jobs:
if: always() # run this step even if previous step failed if: always() # run this step even if previous step failed
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
with: with:
name: platformio-test-report-${{ steps.version.outputs.version }}.zip name: platformio-test-report-${{ steps.version.outputs.long }}.zip
overwrite: true overwrite: true
path: ./testreport.xml path: ./testreport.xml
@ -111,7 +111,7 @@ jobs:
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
if: always() # run this step even if previous step failed if: always() # run this step even if previous step failed
with: with:
name: lcov-coverage-info-native-platformio-tests-${{ steps.version.outputs.version }}.zip name: lcov-coverage-info-native-platformio-tests-${{ steps.version.outputs.long }}.zip
overwrite: true overwrite: true
path: ./coverage_*.info path: ./coverage_*.info
@ -133,13 +133,13 @@ jobs:
repository: ${{github.event.pull_request.head.repo.full_name}} repository: ${{github.event.pull_request.head.repo.full_name}}
- name: Get release version string - name: Get release version string
run: echo "version=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT run: echo "long=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT
id: version id: version
- name: Download test artifacts - name: Download test artifacts
uses: actions/download-artifact@v4 uses: actions/download-artifact@v4
with: with:
name: platformio-test-report-${{ steps.version.outputs.version }}.zip name: platformio-test-report-${{ steps.version.outputs.long }}.zip
merge-multiple: true merge-multiple: true
- name: Test Report - name: Test Report
@ -152,7 +152,7 @@ jobs:
- name: Download coverage artifacts - name: Download coverage artifacts
uses: actions/download-artifact@v4 uses: actions/download-artifact@v4
with: with:
pattern: lcov-coverage-info-native-*-${{ steps.version.outputs.version }}.zip pattern: lcov-coverage-info-native-*-${{ steps.version.outputs.long }}.zip
path: code-coverage-report path: code-coverage-report
merge-multiple: true merge-multiple: true
@ -165,5 +165,5 @@ jobs:
- name: Save Code Coverage Report - name: Save Code Coverage Report
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
with: with:
name: code-coverage-report-${{ steps.version.outputs.version }}.zip name: code-coverage-report-${{ steps.version.outputs.long }}.zip
path: code-coverage-report path: code-coverage-report

View File

@ -22,12 +22,16 @@ jobs:
- name: Run Trunk Fmt - name: Run Trunk Fmt
run: trunk fmt run: trunk fmt
- name: Get release version string
run: echo "long=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT
id: version
- name: Commit and push changes - name: Commit and push changes
run: | run: |
git config --global user.name "github-actions[bot]" git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com" git config --global user.email "github-actions[bot]@users.noreply.github.com"
git add . git add .
git commit -m "Add firmware version ${{ steps.version.outputs.version }}" git commit -m "Add firmware version ${{ steps.version.outputs.long }}"
git push git push
- name: Comment on PR - name: Comment on PR

View File

@ -12,6 +12,7 @@ jobs:
submodules: true submodules: true
- name: Update submodule - name: Update submodule
if: ${{ github.ref == 'refs/heads/master' }}
run: | run: |
git submodule update --remote protobufs git submodule update --remote protobufs

View File

@ -73,7 +73,7 @@ shift "$((OPTIND - 1))"
if [ -f "${FILENAME}" ] && [ -n "${FILENAME##*"update"*}" ]; then if [ -f "${FILENAME}" ] && [ -n "${FILENAME##*"update"*}" ]; then
echo "Trying to flash ${FILENAME}, but first erasing and writing system information" echo "Trying to flash ${FILENAME}, but first erasing and writing system information"
$ESPTOOL_CMD erase_flash $ESPTOOL_CMD erase_flash
$ESPTOOL_CMD write_flash 0x00 ${FILENAME} $ESPTOOL_CMD write_flash 0x00 "${FILENAME}"
# Account for S3 board's different OTA partition # Account for S3 board's different OTA partition
if [ -n "${FILENAME##*"s3"*}" ] && [ -n "${FILENAME##*"-v3"*}" ] && [ -n "${FILENAME##*"t-deck"*}" ] && [ -n "${FILENAME##*"wireless-paper"*}" ] && [ -n "${FILENAME##*"wireless-tracker"*}" ] && [ -n "${FILENAME##*"station-g2"*}" ] && [ -n "${FILENAME##*"unphone"*}" ]; then if [ -n "${FILENAME##*"s3"*}" ] && [ -n "${FILENAME##*"-v3"*}" ] && [ -n "${FILENAME##*"t-deck"*}" ] && [ -n "${FILENAME##*"wireless-paper"*}" ] && [ -n "${FILENAME##*"wireless-tracker"*}" ] && [ -n "${FILENAME##*"station-g2"*}" ] && [ -n "${FILENAME##*"unphone"*}" ]; then
if [ -n "${FILENAME##*"esp32c3"*}" ]; then if [ -n "${FILENAME##*"esp32c3"*}" ]; then

View File

@ -2,6 +2,7 @@ import configparser
import subprocess import subprocess
import os import os
run_number = os.getenv('GITHUB_RUN_NUMBER', '0') run_number = os.getenv('GITHUB_RUN_NUMBER', '0')
build_location = os.getenv('BUILD_LOCATION', 'local')
def readProps(prefsLoc): def readProps(prefsLoc):
"""Read the version of our project as a string""" """Read the version of our project as a string"""
@ -11,8 +12,8 @@ def readProps(prefsLoc):
version = dict(config.items("VERSION")) version = dict(config.items("VERSION"))
verObj = dict( verObj = dict(
short="{}.{}.{}".format(version["major"], version["minor"], version["build"]), short="{}.{}.{}".format(version["major"], version["minor"], version["build"]),
deb="unset",
long="unset", long="unset",
deb="unset",
) )
# Try to find current build SHA if if the workspace is clean. This could fail if git is not installed # Try to find current build SHA if if the workspace is clean. This could fail if git is not installed
@ -30,15 +31,15 @@ def readProps(prefsLoc):
# # short for 'dirty', we want to keep our verstrings source for protobuf reasons # # short for 'dirty', we want to keep our verstrings source for protobuf reasons
# suffix = sha + "-d" # suffix = sha + "-d"
verObj["long"] = "{}.{}".format(verObj["short"], suffix) verObj["long"] = "{}.{}".format(verObj["short"], suffix)
verObj["deb"] = "{}-{}~ppa{}".format(verObj["short"], run_number, sha) verObj["deb"] = "{}.{}~{}{}".format(verObj["short"], run_number, build_location, sha)
except: except:
# print("Unexpected error:", sys.exc_info()[0]) # print("Unexpected error:", sys.exc_info()[0])
# traceback.print_exc() # traceback.print_exc()
verObj["long"] = verObj["short"] verObj["long"] = verObj["short"]
verObj["deb"] = "{}-{}~ppa".format(verObj["short"], run_number) verObj["deb"] = "{}.{}~{}".format(verObj["short"], run_number, build_location)
# print("firmware version " + verStr) # print("firmware version " + verStr)
return verObj return verObj
# print("path is" + ','.join(sys.path)) # print("path is" + ','.join(sys.path))

2
debian/changelog vendored
View File

@ -1,4 +1,4 @@
meshtasticd (2.5.19) UNRELEASED; urgency=medium meshtasticd (2.5.19.0) UNRELEASED; urgency=medium
* Initial packaging * Initial packaging

View File

@ -2,6 +2,6 @@
export DEBEMAIL="github-actions[bot]@users.noreply.github.com" export DEBEMAIL="github-actions[bot]@users.noreply.github.com"
PKG_VERSION=$(python3 bin/buildinfo.py short) PKG_VERSION=$(python3 bin/buildinfo.py short)
dch --newversion "$PKG_VERSION-1" \ dch --newversion "$PKG_VERSION.0" \
--distribution UNRELEASED \ --distribution UNRELEASED \
"GitHub Actions Automatic version bump" "GitHub Actions Automatic version bump"

View File

@ -35,7 +35,11 @@ template <typename T, std::size_t N> std::size_t array_count(const T (&)[N])
} }
#if defined(NRF52840_XXAA) || defined(NRF52833_XXAA) || defined(ARCH_ESP32) || defined(ARCH_PORTDUINO) #if defined(NRF52840_XXAA) || defined(NRF52833_XXAA) || defined(ARCH_ESP32) || defined(ARCH_PORTDUINO)
#if defined(RAK2560)
HardwareSerial *GPS::_serial_gps = &Serial2;
#else
HardwareSerial *GPS::_serial_gps = &Serial1; HardwareSerial *GPS::_serial_gps = &Serial1;
#endif
#elif defined(ARCH_RP2040) #elif defined(ARCH_RP2040)
SerialUART *GPS::_serial_gps = &Serial1; SerialUART *GPS::_serial_gps = &Serial1;
#else #else

View File

@ -92,6 +92,7 @@ NRF52Bluetooth *nrf52Bluetooth = nullptr;
#include "mesh/raspihttp/PiWebServer.h" #include "mesh/raspihttp/PiWebServer.h"
#include "platform/portduino/PortduinoGlue.h" #include "platform/portduino/PortduinoGlue.h"
#include "platform/portduino/USBHal.h" #include "platform/portduino/USBHal.h"
#include <cstdlib>
#include <fstream> #include <fstream>
#include <iostream> #include <iostream>
#include <string> #include <string>
@ -1159,6 +1160,7 @@ void setup()
#if __has_include(<ulfius.h>) #if __has_include(<ulfius.h>)
if (settingsMap[webserverport] != -1) { if (settingsMap[webserverport] != -1) {
piwebServerThread = new PiWebServerThread(); piwebServerThread = new PiWebServerThread();
std::atexit([] { delete piwebServerThread; });
} }
#endif #endif
initApiServer(TCPPort); initApiServer(TCPPort);
@ -1278,4 +1280,4 @@ void loop()
mainDelay.delay(delayMsec); mainDelay.delay(delayMsec);
} }
} }
#endif #endif

View File

@ -297,7 +297,7 @@ uint32_t RadioInterface::getTxDelayMsecWeighted(float snr)
void printPacket(const char *prefix, const meshtastic_MeshPacket *p) void printPacket(const char *prefix, const meshtastic_MeshPacket *p)
{ {
#ifdef DEBUG_PORT #if defined(DEBUG_PORT) && !defined(DEBUG_MUTE)
std::string out = DEBUG_PORT.mt_sprintf("%s (id=0x%08x fr=0x%08x to=0x%08x, WantAck=%d, HopLim=%d Ch=0x%x", prefix, p->id, std::string out = DEBUG_PORT.mt_sprintf("%s (id=0x%08x fr=0x%08x to=0x%08x, WantAck=%d, HopLim=%d Ch=0x%x", prefix, p->id,
p->from, p->to, p->want_ack, p->hop_limit, p->channel); p->from, p->to, p->want_ack, p->hop_limit, p->channel);
if (p->which_payload_variant == meshtastic_MeshPacket_decoded_tag) { if (p->which_payload_variant == meshtastic_MeshPacket_decoded_tag) {
@ -641,4 +641,4 @@ size_t RadioInterface::beginSending(meshtastic_MeshPacket *p)
sendingPacket = p; sendingPacket = p;
return p->encrypted.size + sizeof(PacketHeader); return p->encrypted.size + sizeof(PacketHeader);
} }

View File

@ -510,14 +510,13 @@ bool RadioLibInterface::startSend(meshtastic_MeshPacket *txp)
powerMon->clearState(meshtastic_PowerMon_State_Lora_TXOn); // Transmitter off now powerMon->clearState(meshtastic_PowerMon_State_Lora_TXOn); // Transmitter off now
startReceive(); // Restart receive mode (because startTransmit failed to put us in xmit mode) startReceive(); // Restart receive mode (because startTransmit failed to put us in xmit mode)
} else { } else {
// Must be done AFTER, starting transmit, because startTransmit clears (possibly stale) interrupt pending register
// bits
enableInterrupt(isrTxLevel0);
lastTxStart = millis(); lastTxStart = millis();
printPacket("Started Tx", txp); printPacket("Started Tx", txp);
} }
// Must be done AFTER, starting transmit, because startTransmit clears (possibly stale) interrupt pending register
// bits
enableInterrupt(isrTxLevel0);
return res == RADIOLIB_ERR_NONE; return res == RADIOLIB_ERR_NONE;
} }
} }

View File

@ -187,7 +187,7 @@ ErrorCode Router::sendLocal(meshtastic_MeshPacket *p, RxSource src)
} }
// don't override if a channel was requested and no need to set it when PKI is enforced // don't override if a channel was requested and no need to set it when PKI is enforced
if (!p->channel && !p->pki_encrypted) { if (!p->channel && !p->pki_encrypted && !isBroadcast(p->to)) {
meshtastic_NodeInfoLite *node = nodeDB->getMeshNode(p->to); meshtastic_NodeInfoLite *node = nodeDB->getMeshNode(p->to);
if (node) { if (node) {
p->channel = node->channel; p->channel = node->channel;
@ -691,4 +691,4 @@ void Router::perhapsHandleReceived(meshtastic_MeshPacket *p)
// cache/learn of the existence of nodes (i.e. FloodRouter) that they should not // cache/learn of the existence of nodes (i.e. FloodRouter) that they should not
handleReceived(p); handleReceived(p);
packetPool.release(p); packetPool.release(p);
} }

View File

@ -82,8 +82,6 @@ char contentTypes[][2][32] = {{".txt", "text/plain"}, {".html", "text/html"
volatile bool isWebServerReady; volatile bool isWebServerReady;
volatile bool isCertReady; volatile bool isCertReady;
HttpAPI webAPI;
PiWebServerThread *piwebServerThread; PiWebServerThread *piwebServerThread;
/** /**
@ -247,7 +245,7 @@ int handleAPIv1ToRadio(const struct _u_request *req, struct _u_response *res, vo
portduinoVFS->mountpoint(configWeb.rootPath); portduinoVFS->mountpoint(configWeb.rootPath);
LOG_DEBUG("Received %d bytes from PUT request", s); LOG_DEBUG("Received %d bytes from PUT request", s);
webAPI.handleToRadio(buffer, s); static_cast<HttpAPI *>(user_data)->handleToRadio(buffer, s);
LOG_DEBUG("end web->radio "); LOG_DEBUG("end web->radio ");
return U_CALLBACK_COMPLETE; return U_CALLBACK_COMPLETE;
} }
@ -279,7 +277,7 @@ int handleAPIv1FromRadio(const struct _u_request *req, struct _u_response *res,
if (valueAll == "true") { if (valueAll == "true") {
while (len) { while (len) {
len = webAPI.getFromRadio(txBuf); len = static_cast<HttpAPI *>(user_data)->getFromRadio(txBuf);
ulfius_set_response_properties(res, U_OPT_STATUS, 200, U_OPT_BINARY_BODY, txBuf, len); ulfius_set_response_properties(res, U_OPT_STATUS, 200, U_OPT_BINARY_BODY, txBuf, len);
const char *tmpa = (const char *)txBuf; const char *tmpa = (const char *)txBuf;
ulfius_set_string_body_response(res, 200, tmpa); ulfius_set_string_body_response(res, 200, tmpa);
@ -289,7 +287,7 @@ int handleAPIv1FromRadio(const struct _u_request *req, struct _u_response *res,
} }
// Otherwise, just return one protobuf // Otherwise, just return one protobuf
} else { } else {
len = webAPI.getFromRadio(txBuf); len = static_cast<HttpAPI *>(user_data)->getFromRadio(txBuf);
const char *tmpa = (const char *)txBuf; const char *tmpa = (const char *)txBuf;
ulfius_set_binary_body_response(res, 200, tmpa, len); ulfius_set_binary_body_response(res, 200, tmpa, len);
// LOG_DEBUG("\n----webAPI response:"); // LOG_DEBUG("\n----webAPI response:");
@ -497,10 +495,10 @@ PiWebServerThread::PiWebServerThread()
u_map_put(instanceWeb.default_headers, "Access-Control-Allow-Origin", "*"); u_map_put(instanceWeb.default_headers, "Access-Control-Allow-Origin", "*");
// Maximum body size sent by the client is 1 Kb // Maximum body size sent by the client is 1 Kb
instanceWeb.max_post_body_size = 1024; instanceWeb.max_post_body_size = 1024;
ulfius_add_endpoint_by_val(&instanceWeb, "GET", PREFIX, "/api/v1/fromradio/*", 1, &handleAPIv1FromRadio, NULL); ulfius_add_endpoint_by_val(&instanceWeb, "GET", PREFIX, "/api/v1/fromradio/*", 1, &handleAPIv1FromRadio, &webAPI);
ulfius_add_endpoint_by_val(&instanceWeb, "OPTIONS", PREFIX, "/api/v1/fromradio/*", 1, &handleAPIv1FromRadio, NULL); ulfius_add_endpoint_by_val(&instanceWeb, "OPTIONS", PREFIX, "/api/v1/fromradio/*", 1, &handleAPIv1FromRadio, &webAPI);
ulfius_add_endpoint_by_val(&instanceWeb, "PUT", PREFIX, "/api/v1/toradio/*", 1, &handleAPIv1ToRadio, configWeb.rootPath); ulfius_add_endpoint_by_val(&instanceWeb, "PUT", PREFIX, "/api/v1/toradio/*", 1, &handleAPIv1ToRadio, &webAPI);
ulfius_add_endpoint_by_val(&instanceWeb, "OPTIONS", PREFIX, "/api/v1/toradio/*", 1, &handleAPIv1ToRadio, NULL); ulfius_add_endpoint_by_val(&instanceWeb, "OPTIONS", PREFIX, "/api/v1/toradio/*", 1, &handleAPIv1ToRadio, &webAPI);
// Add callback function to all endpoints for the Web Server // Add callback function to all endpoints for the Web Server
ulfius_add_endpoint_by_val(&instanceWeb, "GET", NULL, "/*", 2, &callback_static_file, &configWeb); ulfius_add_endpoint_by_val(&instanceWeb, "GET", NULL, "/*", 2, &callback_static_file, &configWeb);
@ -525,13 +523,12 @@ PiWebServerThread::~PiWebServerThread()
u_map_clean(&configWeb.mime_types); u_map_clean(&configWeb.mime_types);
ulfius_stop_framework(&instanceWeb); ulfius_stop_framework(&instanceWeb);
ulfius_stop_framework(&instanceWeb); ulfius_clean_instance(&instanceWeb);
free(configWeb.rootPath); free(configWeb.rootPath);
ulfius_clean_instance(&instanceService); free(key_pem);
ulfius_clean_instance(&instanceService);
free(cert_pem); free(cert_pem);
LOG_INFO("End framework"); LOG_INFO("End framework");
} }
#endif #endif
#endif #endif

View File

@ -23,24 +23,6 @@ struct _file_config {
char *rootPath; char *rootPath;
}; };
class PiWebServerThread
{
private:
char *key_pem = NULL;
char *cert_pem = NULL;
// struct _u_map mime_types;
std::string webrootpath;
public:
PiWebServerThread();
~PiWebServerThread();
int CreateSSLCertificate();
int CheckSSLandLoad();
uint32_t requestRestart = 0;
struct _u_instance instanceWeb;
struct _u_instance instanceService;
};
class HttpAPI : public PhoneAPI class HttpAPI : public PhoneAPI
{ {
@ -55,6 +37,24 @@ class HttpAPI : public PhoneAPI
virtual bool checkIsConnected() override { return true; } // FIXME, be smarter about this virtual bool checkIsConnected() override { return true; } // FIXME, be smarter about this
}; };
class PiWebServerThread
{
private:
char *key_pem = NULL;
char *cert_pem = NULL;
// struct _u_map mime_types;
std::string webrootpath;
HttpAPI webAPI;
public:
PiWebServerThread();
~PiWebServerThread();
int CreateSSLCertificate();
int CheckSSLandLoad();
uint32_t requestRestart = 0;
struct _u_instance instanceWeb;
};
extern PiWebServerThread *piwebServerThread; extern PiWebServerThread *piwebServerThread;
#endif #endif

View File

@ -131,7 +131,6 @@ void AtakPluginModule::alterReceivedProtobuf(meshtastic_MeshPacket &mp, meshtast
} }
// Decompress for Phone (EUD) // Decompress for Phone (EUD)
auto decompressedCopy = packetPool.allocCopy(mp);
auto uncompressed = cloneTAKPacketData(t); auto uncompressed = cloneTAKPacketData(t);
uncompressed.is_compressed = false; uncompressed.is_compressed = false;
if (t->has_contact) { if (t->has_contact) {
@ -188,6 +187,7 @@ void AtakPluginModule::alterReceivedProtobuf(meshtastic_MeshPacket &mp, meshtast
LOG_DEBUG("Decompressed chat to_callsign: %d bytes", length); LOG_DEBUG("Decompressed chat to_callsign: %d bytes", length);
} }
} }
auto decompressedCopy = packetPool.allocCopy(mp);
decompressedCopy->decoded.payload.size = decompressedCopy->decoded.payload.size =
pb_encode_to_bytes(decompressedCopy->decoded.payload.bytes, sizeof(decompressedCopy->decoded.payload), pb_encode_to_bytes(decompressedCopy->decoded.payload.bytes, sizeof(decompressedCopy->decoded.payload),
meshtastic_TAKPacket_fields, &uncompressed); meshtastic_TAKPacket_fields, &uncompressed);

View File

@ -56,18 +56,10 @@ build_src_filter = ${esp32_base.build_src_filter}
lib_deps = ${esp32_base.lib_deps} lib_deps = ${esp32_base.lib_deps}
lovyan03/LovyanGFX@^1.1.16 lovyan03/LovyanGFX@^1.1.16
; 3.2" TN TFT ST7789 / XPT2046: https://vi.aliexpress.com/item/1005005933490544.html [mesh_tab_xpt2046]
[env:mesh-tab-3-2-TN-resistive]
extends = mesh_tab_base extends = mesh_tab_base
build_flags = ${mesh_tab_base.build_flags} build_flags = ${mesh_tab_base.build_flags}
-D LGFX_SCREEN_WIDTH=240
-D LGFX_SCREEN_HEIGHT=320
-D LGFX_PANEL=ST7789
-D LGFX_INVERT_COLOR=false
-D LGFX_RGB_ORDER=false
-D LGFX_ROTATION=3
-D LGFX_TOUCH=XPT2046 -D LGFX_TOUCH=XPT2046
-D SPI_FREQUENCY=60000000
-D LGFX_TOUCH_SPI_FREQ=2500000 -D LGFX_TOUCH_SPI_FREQ=2500000
-D LGFX_TOUCH_SPI_HOST=2 -D LGFX_TOUCH_SPI_HOST=2
-D LGFX_TOUCH_CS=7 -D LGFX_TOUCH_CS=7
@ -78,156 +70,109 @@ build_flags = ${mesh_tab_base.build_flags}
-D LGFX_TOUCH_X_MAX=3900 -D LGFX_TOUCH_X_MAX=3900
-D LGFX_TOUCH_Y_MIN=400 -D LGFX_TOUCH_Y_MIN=400
-D LGFX_TOUCH_Y_MAX=3900 -D LGFX_TOUCH_Y_MAX=3900
[mesh_tab_ft5x06]
extends = mesh_tab_base
build_flags = ${mesh_tab_base.build_flags}
-D LGFX_TOUCH=FT5x06
-D LGFX_TOUCH_I2C_FREQ=400000
-D LGFX_TOUCH_I2C_PORT=0
-D LGFX_TOUCH_I2C_ADDR=0x38
-D LGFX_TOUCH_I2C_SDA=8
-D LGFX_TOUCH_I2C_SCL=9
-D LGFX_TOUCH_RST=7
; 3.2" TN TFT ST7789 / XPT2046: https://vi.aliexpress.com/item/1005005933490544.html
[env:mesh-tab-3-2-TN-resistive]
extends = mesh_tab_base
build_flags = ${mesh_tab_xpt2046.build_flags}
-D SPI_FREQUENCY=60000000
-D LGFX_SCREEN_WIDTH=240
-D LGFX_SCREEN_HEIGHT=320
-D LGFX_PANEL=ST7789
-D LGFX_INVERT_COLOR=false
-D LGFX_ROTATION=3
-D LGFX_TOUCH_ROTATION=4 -D LGFX_TOUCH_ROTATION=4
; 3.2" IPS TFT ILI9341 / XPT2046: https://www.aliexpress.com/item/1005006258575617.html ; 3.2" IPS TFT ILI9341 / XPT2046: https://www.aliexpress.com/item/1005006258575617.html
[env:mesh-tab-3-2-IPS-resistive] [env:mesh-tab-3-2-IPS-resistive]
extends = mesh_tab_base extends = mesh_tab_base
build_flags = ${mesh_tab_base.build_flags} build_flags = ${mesh_tab_xpt2046.build_flags}
-D SPI_FREQUENCY=60000000 ; if image is distorted then lower to 40 MHz
-D LGFX_SCREEN_WIDTH=240 -D LGFX_SCREEN_WIDTH=240
-D LGFX_SCREEN_HEIGHT=320 -D LGFX_SCREEN_HEIGHT=320
-D LGFX_PANEL=ILI9341 -D LGFX_PANEL=ILI9341
-D LGFX_INVERT_COLOR=true
-D LGFX_RGB_ORDER=false
-D LGFX_ROTATION=1 -D LGFX_ROTATION=1
-D LGFX_TOUCH=XPT2046
-D SPI_FREQUENCY=60000000 ; if image is distorted then lower to 40 MHz
-D LGFX_TOUCH_SPI_FREQ=2500000
-D LGFX_TOUCH_SPI_HOST=2
-D LGFX_TOUCH_CS=7
-D LGFX_TOUCH_CLK=12
-D LGFX_TOUCH_DO=11
-D LGFX_TOUCH_DIN=13
-D LGFX_TOUCH_X_MIN=300
-D LGFX_TOUCH_X_MAX=3900
-D LGFX_TOUCH_Y_MIN=400
-D LGFX_TOUCH_Y_MAX=3900
-D LGFX_TOUCH_ROTATION=4 -D LGFX_TOUCH_ROTATION=4
; 3.5" IPS TFT ILI9488 / XPT2046: https://vi.aliexpress.com/item/1005006333922639.html ; 3.5" IPS TFT ILI9488 / XPT2046: https://vi.aliexpress.com/item/1005006333922639.html
[env:mesh-tab-3-5-IPS-resistive] [env:mesh-tab-3-5-IPS-resistive]
extends = mesh_tab_base extends = mesh_tab_base
build_flags = ${mesh_tab_base.build_flags} build_flags = ${mesh_tab_xpt2046.build_flags}
-D SPI_FREQUENCY=60000000 ; may go higher upto 40/60/80 MHz
-D DISPLAY_SET_RESOLUTION -D DISPLAY_SET_RESOLUTION
-D LGFX_SCREEN_WIDTH=320 -D LGFX_SCREEN_WIDTH=320
-D LGFX_SCREEN_HEIGHT=480 -D LGFX_SCREEN_HEIGHT=480
-D LGFX_PANEL=ILI9488 -D LGFX_PANEL=ILI9488
-D LGFX_INVERT_COLOR=true
-D LGFX_RGB_ORDER=false
-D LGFX_DLEN_16BITS=false
-D LGFX_ROTATION=0 -D LGFX_ROTATION=0
-D LGFX_TOUCH=XPT2046
-D SPI_FREQUENCY=40000000 ; may go higher upto 40/60/80 MHz
-D LGFX_TOUCH_SPI_FREQ=2500000
-D LGFX_TOUCH_SPI_HOST=2
-D LGFX_TOUCH_CS=7
-D LGFX_TOUCH_CLK=12
-D LGFX_TOUCH_DO=11
-D LGFX_TOUCH_DIN=13
-D LGFX_TOUCH_X_MIN=300
-D LGFX_TOUCH_X_MAX=3900
-D LGFX_TOUCH_Y_MIN=400
-D LGFX_TOUCH_Y_MAX=3900
-D LGFX_TOUCH_ROTATION=0 -D LGFX_TOUCH_ROTATION=0
; 3.5" TN TFT ILI9488 / XPT2046: https://vi.aliexpress.com/item/32985467436.html ; 3.5" TN TFT ILI9488 / XPT2046: https://vi.aliexpress.com/item/32985467436.html
[env:mesh-tab-3-5-TN-resistive] [env:mesh-tab-3-5-TN-resistive]
extends = mesh_tab_base extends = mesh_tab_base
build_flags = ${mesh_tab_base.build_flags} build_flags = ${mesh_tab_xpt2046.build_flags}
-D SPI_FREQUENCY=60000000
-D DISPLAY_SET_RESOLUTION -D DISPLAY_SET_RESOLUTION
-D LGFX_SCREEN_WIDTH=320 -D LGFX_SCREEN_WIDTH=320
-D LGFX_SCREEN_HEIGHT=480 -D LGFX_SCREEN_HEIGHT=480
-D LGFX_PANEL=HX8357B -D LGFX_PANEL=HX8357B
-D SPI_FREQUENCY=60000000
-D LGFX_INVERT_COLOR=false -D LGFX_INVERT_COLOR=false
-D LGFX_RGB_ORDER=false
-D LGFX_DLEN_16BITS=false
-D LGFX_ROTATION=4 -D LGFX_ROTATION=4
-D LGFX_TOUCH=XPT2046
-D LGFX_TOUCH_SPI_FREQ=2500000
-D LGFX_TOUCH_SPI_HOST=2
-D LGFX_TOUCH_CS=7
-D LGFX_TOUCH_CLK=12
-D LGFX_TOUCH_DO=11
-D LGFX_TOUCH_DIN=13
-D LGFX_TOUCH_X_MIN=300
-D LGFX_TOUCH_X_MAX=3900
-D LGFX_TOUCH_Y_MIN=400
-D LGFX_TOUCH_Y_MAX=3900
-D LGFX_TOUCH_ROTATION=2 -D LGFX_TOUCH_ROTATION=2
; 3.2" IPS TFT ILI9341 / FT6236: https://vi.aliexpress.com/item/1005006624072350.html ; 3.2" IPS TFT ILI9341 / FT6236: https://vi.aliexpress.com/item/1005006624072350.html
[env:mesh-tab-3-2-IPS-capacitive] [env:mesh-tab-3-2-IPS-capacitive]
extends = mesh_tab_base extends = mesh_tab_base
build_flags = ${mesh_tab_base.build_flags} build_flags = ${mesh_tab_ft5x06.build_flags}
-D SPI_FREQUENCY=75000000 ; may go higher upto 60/80 MHz
-D LGFX_SCREEN_WIDTH=240 -D LGFX_SCREEN_WIDTH=240
-D LGFX_SCREEN_HEIGHT=320 -D LGFX_SCREEN_HEIGHT=320
-D LGFX_PANEL=ILI9341 -D LGFX_PANEL=ILI9341
-D LGFX_INVERT_COLOR=true
-D LGFX_RGB_ORDER=false
-D LGFX_ROTATION=1 -D LGFX_ROTATION=1
-D LGFX_TOUCH=FT5x06 -D LGFX_TOUCH_X_MIN=0
-D SPI_FREQUENCY=40000000 ; may go higher upto 60/80 MHz -D LGFX_TOUCH_X_MAX=239
-D LGFX_TOUCH_I2C_PORT=0 -D LGFX_TOUCH_Y_MIN=0
-D LGFX_TOUCH_I2C_ADDR=0x38 -D LGFX_TOUCH_Y_MAX=319
-D LGFX_TOUCH_I2C_SDA=8 -D LGFX_TOUCH_ROTATION=2
-D LGFX_TOUCH_I2C_SCL=9
-D LGFX_TOUCH_RST=7 ; 3.5" IPS TFT ILI9488 / FT6236: https://vi.aliexpress.com/item/1005006893699919.html
[env:mesh-tab-3-5-IPS-capacitive]
extends = mesh_tab_base
build_flags = ${mesh_tab_ft5x06.build_flags}
-D SPI_FREQUENCY=75000000 ; may go higher upto 40/60/80 MHz
-D DISPLAY_SET_RESOLUTION
-D LGFX_SCREEN_WIDTH=320
-D LGFX_SCREEN_HEIGHT=480
-D LGFX_PANEL=ILI9488
-D LGFX_ROTATION=2
-D LGFX_TOUCH_X_MIN=0 -D LGFX_TOUCH_X_MIN=0
-D LGFX_TOUCH_X_MAX=319 -D LGFX_TOUCH_X_MAX=319
-D LGFX_TOUCH_Y_MIN=0 -D LGFX_TOUCH_Y_MIN=0
-D LGFX_TOUCH_Y_MAX=479 -D LGFX_TOUCH_Y_MAX=479
-D LGFX_TOUCH_ROTATION=0 -D LGFX_TOUCH_ROTATION=0
-D LGFX_TOUCH_I2C_FREQ=400000
; 3.5" IPS TFT ILI9488 / FT6236: https://vi.aliexpress.com/item/1005006893699919.html
[env:mesh-tab-3-5-IPS-capacitive]
extends = mesh_tab_base
build_flags = ${mesh_tab_base.build_flags}
-D DISPLAY_SET_RESOLUTION
-D LGFX_SCREEN_WIDTH=320
-D LGFX_SCREEN_HEIGHT=480
-D LGFX_PANEL=ILI9488
-D LGFX_INVERT_COLOR=true
-D LGFX_RGB_ORDER=false
-D LGFX_DLEN_16BITS=false
-D LGFX_ROTATION=1
-D LGFX_TOUCH=FT5x06
-D SPI_FREQUENCY=30000000 ; may go higher upto 40/60/80 MHz
-D LGFX_TOUCH_I2C_PORT=0
-D LGFX_TOUCH_I2C_ADDR=0x38
-D LGFX_TOUCH_I2C_SDA=8
-D LGFX_TOUCH_I2C_SCL=9
-D LGFX_TOUCH_RST=7
-D LGFX_TOUCH_X_MIN=0
-D LGFX_TOUCH_X_MAX=319
-D LGFX_TOUCH_Y_MIN=0
-D LGFX_TOUCH_Y_MAX=479
-D LGFX_TOUCH_ROTATION=1
-D LGFX_TOUCH_I2C_FREQ=400000
; 4.0" IPS TFT ILI9488 / FT6236: https://vi.aliexpress.com/item/1005007082906950.html ; 4.0" IPS TFT ILI9488 / FT6236: https://vi.aliexpress.com/item/1005007082906950.html
[env:mesh-tab-4-0-IPS-capacitive] [env:mesh-tab-4-0-IPS-capacitive]
extends = mesh_tab_base extends = mesh_tab_base
build_flags = ${mesh_tab_base.build_flags} build_flags = ${mesh_tab_ft5x06.build_flags}
-D SPI_FREQUENCY=75000000
-D DISPLAY_SET_RESOLUTION -D DISPLAY_SET_RESOLUTION
-D LGFX_SCREEN_WIDTH=320 -D LGFX_SCREEN_WIDTH=320
-D LGFX_SCREEN_HEIGHT=480 -D LGFX_SCREEN_HEIGHT=480
-D LGFX_PANEL=HX8357B -D LGFX_PANEL=HX8357B
-D LGFX_INVERT_COLOR=true
-D LGFX_RGB_ORDER=false
-D LGFX_DLEN_16BITS=false
-D LGFX_ROTATION=4 -D LGFX_ROTATION=4
-D LGFX_TOUCH=FT5x06
-D SPI_FREQUENCY=30000000 ; may go higher upto 40/60/80 MHz
-D LGFX_TOUCH_I2C_PORT=0
-D LGFX_TOUCH_I2C_ADDR=0x38
-D LGFX_TOUCH_I2C_SDA=8
-D LGFX_TOUCH_I2C_SCL=9
-D LGFX_TOUCH_RST=7
-D LGFX_TOUCH_X_MIN=0 -D LGFX_TOUCH_X_MIN=0
-D LGFX_TOUCH_X_MAX=319 -D LGFX_TOUCH_X_MAX=319
-D LGFX_TOUCH_Y_MIN=0 -D LGFX_TOUCH_Y_MIN=0
-D LGFX_TOUCH_Y_MAX=479 -D LGFX_TOUCH_Y_MAX=479
-D LGFX_TOUCH_ROTATION=1 -D LGFX_TOUCH_ROTATION=6
-D LGFX_TOUCH_I2C_FREQ=400000

View File

@ -1,4 +1,4 @@
; The very slick RAK wireless RAK 4631 / 4630 board - Unified firmware for 5005/19003, with or without OLED RAK 1921 ; Firmware for the WisMesh HUB RAK2560, including a onewire module to talk to the RAK 9154 solar battery.
[env:rak2560] [env:rak2560]
extends = nrf52840_base extends = nrf52840_base
board = wiscore_rak4631 board = wiscore_rak4631
@ -6,17 +6,18 @@ board_check = true
build_flags = ${nrf52840_base.build_flags} -Ivariants/rak2560 -D RAK_4631 build_flags = ${nrf52840_base.build_flags} -Ivariants/rak2560 -D RAK_4631
-L "${platformio.libdeps_dir}/${this.__env__}/bsec2/src/cortex-m4/fpv4-sp-d16-hard" -L "${platformio.libdeps_dir}/${this.__env__}/bsec2/src/cortex-m4/fpv4-sp-d16-hard"
-DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely. -DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
-DMESHTASTIC_EXCLUDE_GPS=1 -DRADIOLIB_EXCLUDE_SX128X=1
-DRADIOLIB_EXCLUDE_SX127X=1
-DRADIOLIB_EXCLUDE_LR11X0=1
-DHAS_RAKPROT=1 ; Define if RAk OneWireSerial is used (disables GPS) -DHAS_RAKPROT=1 ; Define if RAk OneWireSerial is used (disables GPS)
build_src_filter = ${nrf52_base.build_src_filter} +<../variants/rak2560> +<mesh/eth/> +<mesh/api/> +<mqtt/> build_src_filter = ${nrf52_base.build_src_filter} +<../variants/rak2560> +<mesh/api/> +<mqtt/>
lib_deps = lib_deps =
${nrf52840_base.lib_deps} ${nrf52840_base.lib_deps}
${networking_base.lib_deps} ${networking_base.lib_deps}
melopero/Melopero RV3028@^1.1.0 melopero/Melopero RV3028@^1.1.0
https://github.com/RAKWireless/RAK13800-W5100S.git#1.0.2
rakwireless/RAKwireless NCP5623 RGB LED library@^1.0.2 rakwireless/RAKwireless NCP5623 RGB LED library@^1.0.2
beegee-tokyo/RAKwireless RAK12034@^1.0.0 beegee-tokyo/RAKwireless RAK12034@^1.0.0
https://github.com/beegee-tokyo/RAK-OneWireSerial.git https://github.com/beegee-tokyo/RAK-OneWireSerial.git#0.0.2
debug_tool = jlink debug_tool = jlink
; If not set we will default to uploading over serial (first it forces bootloader entry by talking 1200bps to cdcacm) ; If not set we will default to uploading over serial (first it forces bootloader entry by talking 1200bps to cdcacm)
;upload_protocol = jlink ;upload_protocol = jlink

View File

@ -250,8 +250,6 @@ SO GPIO 39/TXEN MAY NOT BE DEFINED FOR SUCCESSFUL OPERATION OF THE SX1262 - TG
#define HAS_RTC 1 #define HAS_RTC 1
#define HAS_ETHERNET 1
#define RAK_4631 1 #define RAK_4631 1
#define HALF_UART_PIN PIN_SERIAL1_RX #define HALF_UART_PIN PIN_SERIAL1_RX
@ -265,9 +263,6 @@ SO GPIO 39/TXEN MAY NOT BE DEFINED FOR SUCCESSFUL OPERATION OF THE SX1262 - TG
#error pin 15 collision #error pin 15 collision
#endif #endif
#define PIN_ETHERNET_RESET 21
#define PIN_ETHERNET_SS PIN_EINK_CS
#define ETH_SPI_PORT SPI1
#define AQ_SET_PIN 10 #define AQ_SET_PIN 10
#ifdef __cplusplus #ifdef __cplusplus

View File

@ -28,6 +28,8 @@ build_flags =
-DHAL_TIM_MODULE_DISABLED -DHAL_TIM_MODULE_DISABLED
-DHAL_WWDG_MODULE_DISABLED -DHAL_WWDG_MODULE_DISABLED
-DHAL_EXTI_MODULE_DISABLED -DHAL_EXTI_MODULE_DISABLED
-DHAL_SAI_MODULE_DISABLED
-DHAL_ICACHE_MODULE_DISABLED
-DRADIOLIB_EXCLUDE_SX128X=1 -DRADIOLIB_EXCLUDE_SX128X=1
-DRADIOLIB_EXCLUDE_SX127X=1 -DRADIOLIB_EXCLUDE_SX127X=1
-DRADIOLIB_EXCLUDE_LR11X0=1 -DRADIOLIB_EXCLUDE_LR11X0=1

View File

@ -28,6 +28,8 @@ build_flags =
-DHAL_TIM_MODULE_DISABLED -DHAL_TIM_MODULE_DISABLED
-DHAL_WWDG_MODULE_DISABLED -DHAL_WWDG_MODULE_DISABLED
-DHAL_EXTI_MODULE_DISABLED -DHAL_EXTI_MODULE_DISABLED
-DHAL_SAI_MODULE_DISABLED
-DHAL_ICACHE_MODULE_DISABLED
-DRADIOLIB_EXCLUDE_SX128X=1 -DRADIOLIB_EXCLUDE_SX128X=1
-DRADIOLIB_EXCLUDE_SX127X=1 -DRADIOLIB_EXCLUDE_SX127X=1
-DRADIOLIB_EXCLUDE_LR11X0=1 -DRADIOLIB_EXCLUDE_LR11X0=1