mirror of
https://github.com/meshtastic/firmware.git
synced 2025-06-24 13:58:09 +00:00
Merge branch 'master' into tft-gui-work
This commit is contained in:
commit
d5720d4824
51
.github/workflows/build_raspbian_armv7l.yml
vendored
Normal file
51
.github/workflows/build_raspbian_armv7l.yml
vendored
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
name: Build Raspbian
|
||||||
|
|
||||||
|
on: workflow_call
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
packages: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-raspbian-armv7l:
|
||||||
|
runs-on: [self-hosted, linux, ARM]
|
||||||
|
steps:
|
||||||
|
- name: Install libbluetooth
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
apt-get install -y libbluetooth-dev libgpiod-dev libyaml-cpp-dev openssl libssl-dev libulfius-dev liborcania-dev
|
||||||
|
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
ref: ${{github.event.pull_request.head.ref}}
|
||||||
|
repository: ${{github.event.pull_request.head.repo.full_name}}
|
||||||
|
|
||||||
|
- name: Upgrade python tools
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
python -m pip install --upgrade pip
|
||||||
|
pip install -U platformio adafruit-nrfutil
|
||||||
|
pip install -U meshtastic --pre
|
||||||
|
|
||||||
|
- name: Upgrade platformio
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
pio upgrade
|
||||||
|
|
||||||
|
- name: Build Raspbian
|
||||||
|
run: bin/build-native.sh
|
||||||
|
|
||||||
|
- name: Get release version string
|
||||||
|
run: echo "version=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT
|
||||||
|
id: version
|
||||||
|
|
||||||
|
- name: Store binaries as an artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: firmware-raspbian-armv7l-${{ steps.version.outputs.version }}.zip
|
||||||
|
overwrite: true
|
||||||
|
path: |
|
||||||
|
release/meshtasticd_linux_armv7l
|
||||||
|
bin/config-dist.yaml
|
16
.github/workflows/main_matrix.yml
vendored
16
.github/workflows/main_matrix.yml
vendored
@ -112,6 +112,9 @@ jobs:
|
|||||||
package-raspbian:
|
package-raspbian:
|
||||||
uses: ./.github/workflows/package_raspbian.yml
|
uses: ./.github/workflows/package_raspbian.yml
|
||||||
|
|
||||||
|
package-raspbian-armv7l:
|
||||||
|
uses: ./.github/workflows/package_raspbian_armv7l.yml
|
||||||
|
|
||||||
build-native:
|
build-native:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
@ -199,6 +202,7 @@ jobs:
|
|||||||
build-native,
|
build-native,
|
||||||
build-rpi2040,
|
build-rpi2040,
|
||||||
package-raspbian,
|
package-raspbian,
|
||||||
|
package-raspbian-armv7l,
|
||||||
]
|
]
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
@ -363,7 +367,7 @@ jobs:
|
|||||||
asset_name: debug-elfs-${{ steps.version.outputs.version }}.zip
|
asset_name: debug-elfs-${{ steps.version.outputs.version }}.zip
|
||||||
asset_content_type: application/zip
|
asset_content_type: application/zip
|
||||||
|
|
||||||
- name: Add raspbian .deb
|
- name: Add raspbian aarch64 .deb
|
||||||
uses: actions/upload-release-asset@v1
|
uses: actions/upload-release-asset@v1
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ github.token }}
|
GITHUB_TOKEN: ${{ github.token }}
|
||||||
@ -373,6 +377,16 @@ jobs:
|
|||||||
asset_name: meshtasticd_${{ steps.version.outputs.version }}_arm64.deb
|
asset_name: meshtasticd_${{ steps.version.outputs.version }}_arm64.deb
|
||||||
asset_content_type: application/vnd.debian.binary-package
|
asset_content_type: application/vnd.debian.binary-package
|
||||||
|
|
||||||
|
- name: Add raspbian armv7l .deb
|
||||||
|
uses: actions/upload-release-asset@v1
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ github.token }}
|
||||||
|
with:
|
||||||
|
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
||||||
|
asset_path: ./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: Bump version.properties
|
- name: Bump version.properties
|
||||||
run: >-
|
run: >-
|
||||||
bin/bump_version.py
|
bin/bump_version.py
|
||||||
|
2
.github/workflows/package_raspbian.yml
vendored
2
.github/workflows/package_raspbian.yml
vendored
@ -72,7 +72,7 @@ jobs:
|
|||||||
|
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: artifact-deb
|
name: meshtasticd_${{ steps.version.outputs.version }}_arm64.deb
|
||||||
overwrite: true
|
overwrite: true
|
||||||
path: |
|
path: |
|
||||||
./*.deb
|
./*.deb
|
||||||
|
78
.github/workflows/package_raspbian_armv7l.yml
vendored
Normal file
78
.github/workflows/package_raspbian_armv7l.yml
vendored
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
name: Package Raspbian
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_call:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
packages: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-raspbian_armv7l:
|
||||||
|
uses: ./.github/workflows/build_raspbian_armv7l.yml
|
||||||
|
|
||||||
|
package-raspbian_armv7l:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: build-raspbian_armv7l
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
ref: ${{github.event.pull_request.head.ref}}
|
||||||
|
repository: ${{github.event.pull_request.head.repo.full_name}}
|
||||||
|
|
||||||
|
- name: Pull web ui
|
||||||
|
uses: dsaltares/fetch-gh-release-asset@master
|
||||||
|
with:
|
||||||
|
repo: meshtastic/web
|
||||||
|
file: build.tar
|
||||||
|
target: build.tar
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Get release version string
|
||||||
|
run: echo "version=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT
|
||||||
|
id: version
|
||||||
|
|
||||||
|
- name: Download artifacts
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: firmware-raspbian-armv7l-${{ steps.version.outputs.version }}.zip
|
||||||
|
merge-multiple: true
|
||||||
|
|
||||||
|
- name: Display structure of downloaded files
|
||||||
|
run: ls -R
|
||||||
|
|
||||||
|
- name: build .debpkg
|
||||||
|
run: |
|
||||||
|
mkdir -p .debpkg/DEBIAN
|
||||||
|
mkdir -p .debpkg/usr/share/doc/meshtasticd/web
|
||||||
|
mkdir -p .debpkg/usr/sbin
|
||||||
|
mkdir -p .debpkg/etc/meshtasticd
|
||||||
|
mkdir -p .debpkg/usr/lib/systemd/system/
|
||||||
|
tar -xf build.tar -C .debpkg/usr/share/doc/meshtasticd/web
|
||||||
|
gunzip .debpkg/usr/share/doc/meshtasticd/web/*.gz
|
||||||
|
cp release/meshtasticd_linux_armv7l .debpkg/usr/sbin/meshtasticd
|
||||||
|
cp bin/config-dist.yaml .debpkg/etc/meshtasticd/config.yaml
|
||||||
|
chmod +x .debpkg/usr/sbin/meshtasticd
|
||||||
|
cp bin/meshtasticd.service .debpkg/usr/lib/systemd/system/meshtasticd.service
|
||||||
|
echo "/etc/meshtasticd/config.yaml" > .debpkg/DEBIAN/conffiles
|
||||||
|
chmod +x .debpkg/DEBIAN/conffiles
|
||||||
|
|
||||||
|
- uses: jiro4989/build-deb-action@v3
|
||||||
|
with:
|
||||||
|
package: meshtasticd
|
||||||
|
package_root: .debpkg
|
||||||
|
maintainer: Jonathan Bennett
|
||||||
|
version: ${{ steps.version.outputs.version }} # refs/tags/v*.*.*
|
||||||
|
arch: armhf
|
||||||
|
depends: libyaml-cpp0.7, openssl, libulfius2.7
|
||||||
|
desc: Native Linux Meshtastic binary.
|
||||||
|
|
||||||
|
- uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: meshtasticd_${{ steps.version.outputs.version }}_armhf.deb
|
||||||
|
overwrite: true
|
||||||
|
path: |
|
||||||
|
./*.deb
|
@ -2,6 +2,17 @@
|
|||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
platformioFailed() {
|
||||||
|
[[ $VIRTUAL_ENV != "" ]] && exit 1 # don't hint at virtualenv if it's already in use
|
||||||
|
echo -e "\nThere were issues running platformio and you are not using a virtual environment." \
|
||||||
|
"\nYou may try setting up virtualenv and downloading the latest platformio from pip:" \
|
||||||
|
"\n\tvirtualenv venv" \
|
||||||
|
"\n\tsource venv/bin/activate" \
|
||||||
|
"\n\tpip install platformio" \
|
||||||
|
"\n\t./bin/build-native.sh # retry building"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
VERSION=$(bin/buildinfo.py long)
|
VERSION=$(bin/buildinfo.py long)
|
||||||
SHORT_VERSION=$(bin/buildinfo.py short)
|
SHORT_VERSION=$(bin/buildinfo.py short)
|
||||||
|
|
||||||
@ -13,8 +24,8 @@ mkdir -p $OUTDIR/
|
|||||||
rm -r $OUTDIR/* || true
|
rm -r $OUTDIR/* || true
|
||||||
|
|
||||||
# Important to pull latest version of libs into all device flavors, otherwise some devices might be stale
|
# Important to pull latest version of libs into all device flavors, otherwise some devices might be stale
|
||||||
platformio pkg update --environment native
|
platformio pkg update --environment native || platformioFailed
|
||||||
pio run --environment native
|
pio run --environment native || platformioFailed
|
||||||
cp .pio/build/native/program "$OUTDIR/meshtasticd_linux_$(uname -m)"
|
cp .pio/build/native/program "$OUTDIR/meshtasticd_linux_$(uname -m)"
|
||||||
cp bin/device-install.* $OUTDIR
|
cp bin/device-install.* $OUTDIR
|
||||||
cp bin/device-update.* $OUTDIR
|
cp bin/device-update.* $OUTDIR
|
||||||
|
@ -311,7 +311,10 @@ bool perhapsDecode(meshtastic_MeshPacket *p)
|
|||||||
if (channels.decryptForHash(chIndex, p->channel)) {
|
if (channels.decryptForHash(chIndex, p->channel)) {
|
||||||
// Try to decrypt the packet if we can
|
// Try to decrypt the packet if we can
|
||||||
size_t rawSize = p->encrypted.size;
|
size_t rawSize = p->encrypted.size;
|
||||||
assert(rawSize <= sizeof(bytes));
|
if (rawSize > sizeof(bytes)) {
|
||||||
|
LOG_ERROR("Packet too large to attempt decription! (rawSize=%d > 256)\n", rawSize);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
memcpy(bytes, p->encrypted.bytes,
|
memcpy(bytes, p->encrypted.bytes,
|
||||||
rawSize); // we have to copy into a scratch buffer, because these bytes are a union with the decoded protobuf
|
rawSize); // we have to copy into a scratch buffer, because these bytes are a union with the decoded protobuf
|
||||||
crypto->decrypt(p->from, p->id, rawSize, bytes);
|
crypto->decrypt(p->from, p->id, rawSize, bytes);
|
||||||
|
@ -64,40 +64,33 @@ void AtakPluginModule::alterReceivedProtobuf(meshtastic_MeshPacket &mp, meshtast
|
|||||||
{
|
{
|
||||||
// From Phone (EUD)
|
// From Phone (EUD)
|
||||||
if (mp.from == 0) {
|
if (mp.from == 0) {
|
||||||
LOG_DEBUG("Received uncompressed TAK payload from phone with %d bytes\n", mp.decoded.payload.size);
|
LOG_DEBUG("Received uncompressed TAK payload from phone: %d bytes\n", mp.decoded.payload.size);
|
||||||
// Compress for LoRA transport
|
// Compress for LoRA transport
|
||||||
auto compressed = cloneTAKPacketData(t);
|
auto compressed = cloneTAKPacketData(t);
|
||||||
compressed.is_compressed = true;
|
compressed.is_compressed = true;
|
||||||
if (t->has_contact) {
|
if (t->has_contact) {
|
||||||
auto length = unishox2_compress_simple(t->contact.callsign, strlen(t->contact.callsign), compressed.contact.callsign);
|
auto length = unishox2_compress_simple(t->contact.callsign, strlen(t->contact.callsign), compressed.contact.callsign);
|
||||||
LOG_DEBUG("Uncompressed callsign '%s' - %d bytes\n", t->contact.callsign, strlen(t->contact.callsign));
|
LOG_DEBUG("Compressed callsign: %d bytes\n", length);
|
||||||
LOG_DEBUG("Compressed callsign '%s' - %d bytes\n", t->contact.callsign, length);
|
|
||||||
|
|
||||||
length = unishox2_compress_simple(t->contact.device_callsign, strlen(t->contact.device_callsign),
|
length = unishox2_compress_simple(t->contact.device_callsign, strlen(t->contact.device_callsign),
|
||||||
compressed.contact.device_callsign);
|
compressed.contact.device_callsign);
|
||||||
LOG_DEBUG("Uncompressed device_callsign '%s' - %d bytes\n", t->contact.device_callsign,
|
LOG_DEBUG("Compressed device_callsign: %d bytes\n", length);
|
||||||
strlen(t->contact.device_callsign));
|
|
||||||
LOG_DEBUG("Compressed device_callsign '%s' - %d bytes\n", compressed.contact.device_callsign, length);
|
|
||||||
}
|
}
|
||||||
if (t->which_payload_variant == meshtastic_TAKPacket_chat_tag) {
|
if (t->which_payload_variant == meshtastic_TAKPacket_chat_tag) {
|
||||||
auto length = unishox2_compress_simple(t->payload_variant.chat.message, strlen(t->payload_variant.chat.message),
|
auto length = unishox2_compress_simple(t->payload_variant.chat.message, strlen(t->payload_variant.chat.message),
|
||||||
compressed.payload_variant.chat.message);
|
compressed.payload_variant.chat.message);
|
||||||
LOG_DEBUG("Uncompressed chat message '%s' - %d bytes\n", t->payload_variant.chat.message,
|
LOG_DEBUG("Compressed chat message: %d bytes\n", length);
|
||||||
strlen(t->payload_variant.chat.message));
|
|
||||||
LOG_DEBUG("Compressed chat message '%s' - %d bytes\n", compressed.payload_variant.chat.message, length);
|
|
||||||
|
|
||||||
if (t->payload_variant.chat.has_to) {
|
if (t->payload_variant.chat.has_to) {
|
||||||
compressed.payload_variant.chat.has_to = true;
|
compressed.payload_variant.chat.has_to = true;
|
||||||
length = unishox2_compress_simple(t->payload_variant.chat.to, strlen(t->payload_variant.chat.to),
|
length = unishox2_compress_simple(t->payload_variant.chat.to, strlen(t->payload_variant.chat.to),
|
||||||
compressed.payload_variant.chat.to);
|
compressed.payload_variant.chat.to);
|
||||||
LOG_DEBUG("Uncompressed chat to '%s' - %d bytes\n", t->payload_variant.chat.to,
|
LOG_DEBUG("Compressed chat to: %d bytes\n", length);
|
||||||
strlen(t->payload_variant.chat.to));
|
|
||||||
LOG_DEBUG("Compressed chat to '%s' - %d bytes\n", compressed.payload_variant.chat.to, length);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mp.decoded.payload.size = pb_encode_to_bytes(mp.decoded.payload.bytes, sizeof(mp.decoded.payload.bytes),
|
mp.decoded.payload.size = pb_encode_to_bytes(mp.decoded.payload.bytes, sizeof(mp.decoded.payload.bytes),
|
||||||
meshtastic_TAKPacket_fields, &compressed);
|
meshtastic_TAKPacket_fields, &compressed);
|
||||||
LOG_DEBUG("Final payload size of %d bytes\n", mp.decoded.payload.size);
|
LOG_DEBUG("Final payload: %d bytes\n", mp.decoded.payload.size);
|
||||||
} else {
|
} else {
|
||||||
if (!t->is_compressed) {
|
if (!t->is_compressed) {
|
||||||
// Not compressed. Something is wrong
|
// Not compressed. Something is wrong
|
||||||
@ -113,27 +106,23 @@ void AtakPluginModule::alterReceivedProtobuf(meshtastic_MeshPacket &mp, meshtast
|
|||||||
auto length =
|
auto length =
|
||||||
unishox2_decompress_simple(t->contact.callsign, strlen(t->contact.callsign), uncompressed.contact.callsign);
|
unishox2_decompress_simple(t->contact.callsign, strlen(t->contact.callsign), uncompressed.contact.callsign);
|
||||||
|
|
||||||
LOG_DEBUG("Compressed callsign: %d bytes\n", strlen(t->contact.callsign));
|
LOG_DEBUG("Decompressed callsign: %d bytes\n", length);
|
||||||
LOG_DEBUG("Decompressed callsign: '%s' @ %d bytes\n", uncompressed.contact.callsign, length);
|
|
||||||
|
|
||||||
length = unishox2_decompress_simple(t->contact.device_callsign, strlen(t->contact.device_callsign),
|
length = unishox2_decompress_simple(t->contact.device_callsign, strlen(t->contact.device_callsign),
|
||||||
uncompressed.contact.device_callsign);
|
uncompressed.contact.device_callsign);
|
||||||
|
|
||||||
LOG_DEBUG("Compressed device_callsign: %d bytes\n", strlen(t->contact.device_callsign));
|
LOG_DEBUG("Decompressed device_callsign: %d bytes\n", length);
|
||||||
LOG_DEBUG("Decompressed device_callsign: '%s' @ %d bytes\n", uncompressed.contact.device_callsign, length);
|
|
||||||
}
|
}
|
||||||
if (uncompressed.which_payload_variant == meshtastic_TAKPacket_chat_tag) {
|
if (uncompressed.which_payload_variant == meshtastic_TAKPacket_chat_tag) {
|
||||||
auto length = unishox2_decompress_simple(t->payload_variant.chat.message, strlen(t->payload_variant.chat.message),
|
auto length = unishox2_decompress_simple(t->payload_variant.chat.message, strlen(t->payload_variant.chat.message),
|
||||||
uncompressed.payload_variant.chat.message);
|
uncompressed.payload_variant.chat.message);
|
||||||
LOG_DEBUG("Compressed chat message: %d bytes\n", strlen(t->payload_variant.chat.message));
|
LOG_DEBUG("Decompressed chat message: %d bytes\n", length);
|
||||||
LOG_DEBUG("Decompressed chat message: '%s' @ %d bytes\n", uncompressed.payload_variant.chat.message, length);
|
|
||||||
|
|
||||||
if (t->payload_variant.chat.has_to) {
|
if (t->payload_variant.chat.has_to) {
|
||||||
uncompressed.payload_variant.chat.has_to = true;
|
uncompressed.payload_variant.chat.has_to = true;
|
||||||
length = unishox2_decompress_simple(t->payload_variant.chat.to, strlen(t->payload_variant.chat.to),
|
length = unishox2_decompress_simple(t->payload_variant.chat.to, strlen(t->payload_variant.chat.to),
|
||||||
uncompressed.payload_variant.chat.to);
|
uncompressed.payload_variant.chat.to);
|
||||||
LOG_DEBUG("Compressed chat to: %d bytes\n", strlen(t->payload_variant.chat.to));
|
LOG_DEBUG("Decompressed chat to: %d bytes\n", length);
|
||||||
LOG_DEBUG("Decompressed chat to: '%s' @ %d bytes\n", uncompressed.payload_variant.chat.to, length);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
decompressedCopy->decoded.payload.size =
|
decompressedCopy->decoded.payload.size =
|
||||||
|
Loading…
Reference in New Issue
Block a user