mirror of
https://github.com/alexhopeoconnor/firmware.git
synced 2026-10-13 15:11:20 +10:00
Compare commits
23
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c7b7c3f90d | ||
|
|
fc2316b292 | ||
|
|
263ed1d0ce | ||
|
|
7d10602f6a | ||
|
|
6f0e3c5b68 | ||
|
|
d05232b8b2 | ||
|
|
e42ff3590c | ||
|
|
7527233130 | ||
|
|
197226365b | ||
|
|
eeb95d6bff | ||
|
|
323830c7cc | ||
|
|
a9acd506a8 | ||
|
|
a1d6c6db62 | ||
|
|
0f2d224e74 | ||
|
|
381cefa6b2 | ||
|
|
a50cbdc95b | ||
|
|
e7c7af40ae | ||
|
|
48ae4b6c7a | ||
|
|
ae5019bec6 | ||
|
|
3cd3fd3386 | ||
|
|
839cf554b7 | ||
|
|
216655f05f | ||
|
|
2c633b6458 |
@@ -56,6 +56,25 @@ jobs:
|
|||||||
echo "long=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT
|
echo "long=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT
|
||||||
id: version
|
id: version
|
||||||
|
|
||||||
|
- name: Set up QEMU
|
||||||
|
uses: docker/setup-qemu-action@v4
|
||||||
|
with:
|
||||||
|
cache-image: true
|
||||||
|
|
||||||
|
- name: Docker setup
|
||||||
|
uses: docker/setup-buildx-action@v4
|
||||||
|
with:
|
||||||
|
# Add Google/Amazon DockerHub mirrors to buildkit config
|
||||||
|
# https://docs.docker.com/build/ci/github-actions/configure-builder/#registry-mirror
|
||||||
|
buildkitd-config-inline: |
|
||||||
|
[registry."docker.io"]
|
||||||
|
mirrors = ["mirror.gcr.io", "public.ecr.aws"]
|
||||||
|
|
||||||
|
- name: Sanitize platform string
|
||||||
|
id: sanitize_platform
|
||||||
|
# Replace slashes with underscores
|
||||||
|
run: echo "cleaned_platform=${{ inputs.platform }}" | sed 's/\//_/g' >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Docker login
|
- name: Docker login
|
||||||
if: ${{ inputs.push }}
|
if: ${{ inputs.push }}
|
||||||
uses: docker/login-action@v4
|
uses: docker/login-action@v4
|
||||||
@@ -63,17 +82,6 @@ jobs:
|
|||||||
username: meshtastic
|
username: meshtastic
|
||||||
password: ${{ secrets.DOCKER_FIRMWARE_TOKEN }}
|
password: ${{ secrets.DOCKER_FIRMWARE_TOKEN }}
|
||||||
|
|
||||||
- name: Set up QEMU
|
|
||||||
uses: docker/setup-qemu-action@v4
|
|
||||||
|
|
||||||
- name: Docker setup
|
|
||||||
uses: docker/setup-buildx-action@v4
|
|
||||||
|
|
||||||
- name: Sanitize platform string
|
|
||||||
id: sanitize_platform
|
|
||||||
# Replace slashes with underscores
|
|
||||||
run: echo "cleaned_platform=${{ inputs.platform }}" | sed 's/\//_/g' >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Docker tag
|
- name: Docker tag
|
||||||
id: meta
|
id: meta
|
||||||
uses: docker/metadata-action@v6
|
uses: docker/metadata-action@v6
|
||||||
@@ -95,3 +103,6 @@ jobs:
|
|||||||
platforms: ${{ inputs.platform }}
|
platforms: ${{ inputs.platform }}
|
||||||
build-args: |
|
build-args: |
|
||||||
PIO_ENV=${{ inputs.pio_env }}
|
PIO_ENV=${{ inputs.pio_env }}
|
||||||
|
# Cache image layers in GitHub Actions cache to speed up subsequent builds.
|
||||||
|
cache-from: type=gha
|
||||||
|
cache-to: type=gha,mode=max
|
||||||
|
|||||||
@@ -301,15 +301,17 @@ jobs:
|
|||||||
id: release_notes
|
id: release_notes
|
||||||
run: |
|
run: |
|
||||||
chmod +x ./bin/generate_release_notes.py
|
chmod +x ./bin/generate_release_notes.py
|
||||||
NOTES=$(./bin/generate_release_notes.py ${{ needs.version.outputs.long }})
|
NOTES=$(./bin/generate_release_notes.py ${{ needs.version.outputs.long }} --compare-ref HEAD 2>release_notes.log)
|
||||||
echo "notes<<EOF" >> $GITHUB_OUTPUT
|
echo "notes<<EOF" >> $GITHUB_OUTPUT
|
||||||
echo "$NOTES" >> $GITHUB_OUTPUT
|
echo "$NOTES" >> $GITHUB_OUTPUT
|
||||||
echo "EOF" >> $GITHUB_OUTPUT
|
echo "EOF" >> $GITHUB_OUTPUT
|
||||||
|
echo "### Release note range" >> $GITHUB_STEP_SUMMARY
|
||||||
|
cat release_notes.log >> $GITHUB_STEP_SUMMARY
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
- name: Create release
|
- name: Create release
|
||||||
uses: softprops/action-gh-release@v2
|
uses: softprops/action-gh-release@v3
|
||||||
id: create_release
|
id: create_release
|
||||||
with:
|
with:
|
||||||
draft: true
|
draft: true
|
||||||
@@ -466,7 +468,7 @@ jobs:
|
|||||||
- name: Generate release notes
|
- name: Generate release notes
|
||||||
run: |
|
run: |
|
||||||
chmod +x ./bin/generate_release_notes.py
|
chmod +x ./bin/generate_release_notes.py
|
||||||
./bin/generate_release_notes.py ${{ needs.version.outputs.long }} > ./publish/release_notes.md
|
./bin/generate_release_notes.py ${{ needs.version.outputs.long }} --compare-ref HEAD > ./publish/release_notes.md
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Apply quality label if needed
|
- name: Apply quality label if needed
|
||||||
if: steps.quality.outputs.response != '' && steps.quality.outputs.response != 'ok'
|
if: steps.quality.outputs.response != '' && steps.quality.outputs.response != 'ok'
|
||||||
uses: actions/github-script@v8
|
uses: actions/github-script@v9
|
||||||
env:
|
env:
|
||||||
QUALITY_LABEL: ${{ steps.quality.outputs.response }}
|
QUALITY_LABEL: ${{ steps.quality.outputs.response }}
|
||||||
with:
|
with:
|
||||||
@@ -80,7 +80,7 @@ jobs:
|
|||||||
# ─────────────────────────────────────────────────────────────────────────
|
# ─────────────────────────────────────────────────────────────────────────
|
||||||
- name: Determine if completeness check should be skipped
|
- name: Determine if completeness check should be skipped
|
||||||
if: steps.quality.outputs.response == 'ok' || steps.quality.outputs.response == ''
|
if: steps.quality.outputs.response == 'ok' || steps.quality.outputs.response == ''
|
||||||
uses: actions/github-script@v8
|
uses: actions/github-script@v9
|
||||||
id: check-skip
|
id: check-skip
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
@@ -134,7 +134,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Process analysis result
|
- name: Process analysis result
|
||||||
if: (steps.quality.outputs.response == 'ok' || steps.quality.outputs.response == '') && steps.check-skip.outputs.should_skip != 'true' && steps.analysis.outputs.response != ''
|
if: (steps.quality.outputs.response == 'ok' || steps.quality.outputs.response == '') && steps.check-skip.outputs.should_skip != 'true' && steps.analysis.outputs.response != ''
|
||||||
uses: actions/github-script@v8
|
uses: actions/github-script@v9
|
||||||
id: process
|
id: process
|
||||||
env:
|
env:
|
||||||
AI_RESPONSE: ${{ steps.analysis.outputs.response }}
|
AI_RESPONSE: ${{ steps.analysis.outputs.response }}
|
||||||
@@ -174,7 +174,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Apply triage label
|
- name: Apply triage label
|
||||||
if: steps.process.outputs.label != '' && steps.process.outputs.label != 'none'
|
if: steps.process.outputs.label != '' && steps.process.outputs.label != 'none'
|
||||||
uses: actions/github-script@v8
|
uses: actions/github-script@v9
|
||||||
env:
|
env:
|
||||||
LABEL_NAME: ${{ steps.process.outputs.label }}
|
LABEL_NAME: ${{ steps.process.outputs.label }}
|
||||||
with:
|
with:
|
||||||
@@ -200,7 +200,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Comment on issue
|
- name: Comment on issue
|
||||||
if: steps.process.outputs.should_comment == 'true'
|
if: steps.process.outputs.should_comment == 'true'
|
||||||
uses: actions/github-script@v8
|
uses: actions/github-script@v9
|
||||||
env:
|
env:
|
||||||
COMMENT_BODY: ${{ steps.process.outputs.comment_body }}
|
COMMENT_BODY: ${{ steps.process.outputs.comment_body }}
|
||||||
with:
|
with:
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ jobs:
|
|||||||
# Step 1: Check if PR already has automation/type labels (skip if so)
|
# Step 1: Check if PR already has automation/type labels (skip if so)
|
||||||
# ─────────────────────────────────────────────────────────────────────────
|
# ─────────────────────────────────────────────────────────────────────────
|
||||||
- name: Check existing labels
|
- name: Check existing labels
|
||||||
uses: actions/github-script@v8
|
uses: actions/github-script@v9
|
||||||
id: check-labels
|
id: check-labels
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
@@ -58,7 +58,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Apply quality label if needed
|
- name: Apply quality label if needed
|
||||||
if: steps.check-labels.outputs.skip_all != 'true' && steps.quality.outputs.response != '' && steps.quality.outputs.response != 'ok'
|
if: steps.check-labels.outputs.skip_all != 'true' && steps.quality.outputs.response != '' && steps.quality.outputs.response != 'ok'
|
||||||
uses: actions/github-script@v8
|
uses: actions/github-script@v9
|
||||||
id: quality-label
|
id: quality-label
|
||||||
env:
|
env:
|
||||||
QUALITY_LABEL: ${{ steps.quality.outputs.response }}
|
QUALITY_LABEL: ${{ steps.quality.outputs.response }}
|
||||||
@@ -113,7 +113,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Apply type label
|
- name: Apply type label
|
||||||
if: steps.check-labels.outputs.skip_all != 'true' && steps.check-labels.outputs.has_type_label != 'true' && steps.classify.outputs.response != ''
|
if: steps.check-labels.outputs.skip_all != 'true' && steps.check-labels.outputs.has_type_label != 'true' && steps.classify.outputs.response != ''
|
||||||
uses: actions/github-script@v8
|
uses: actions/github-script@v9
|
||||||
env:
|
env:
|
||||||
TYPE_LABEL: ${{ steps.classify.outputs.response }}
|
TYPE_LABEL: ${{ steps.classify.outputs.response }}
|
||||||
with:
|
with:
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ on:
|
|||||||
secrets:
|
secrets:
|
||||||
PPA_GPG_PRIVATE_KEY:
|
PPA_GPG_PRIVATE_KEY:
|
||||||
required: true
|
required: true
|
||||||
|
PPA_SFTP_PRIVATE_KEY:
|
||||||
|
required: true
|
||||||
inputs:
|
inputs:
|
||||||
ppa_repo:
|
ppa_repo:
|
||||||
description: Meshtastic PPA to target
|
description: Meshtastic PPA to target
|
||||||
@@ -27,6 +29,7 @@ jobs:
|
|||||||
build_location: ppa
|
build_location: ppa
|
||||||
|
|
||||||
package-ppa:
|
package-ppa:
|
||||||
|
if: ${{ github.event_name != 'pull_request_target' && github.event_name != 'pull_request' }}
|
||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
needs: build-debian-src
|
needs: build-debian-src
|
||||||
steps:
|
steps:
|
||||||
@@ -40,7 +43,7 @@ jobs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update -y --fix-missing
|
sudo apt-get update -y --fix-missing
|
||||||
sudo apt-get install -y dput
|
sudo apt-get install -y dput openssh-client
|
||||||
|
|
||||||
- name: Import GPG key
|
- name: Import GPG key
|
||||||
uses: crazy-max/ghaction-import-gpg@v7
|
uses: crazy-max/ghaction-import-gpg@v7
|
||||||
@@ -65,8 +68,42 @@ jobs:
|
|||||||
- name: Display structure of downloaded files
|
- name: Display structure of downloaded files
|
||||||
run: ls -lah
|
run: ls -lah
|
||||||
|
|
||||||
- name: Publish with dput
|
- name: Trust Launchpad's SSH key
|
||||||
if: ${{ github.event_name != 'pull_request_target' && github.event_name != 'pull_request' }}
|
|
||||||
timeout-minutes: 15 # dput is terrible, sometimes runs 'forever'
|
|
||||||
run: |
|
run: |
|
||||||
dput ${{ inputs.ppa_repo }} meshtasticd_${{ steps.version.outputs.deb }}~${{ inputs.series }}_source.changes
|
mkdir -p ~/.ssh
|
||||||
|
ssh-keyscan -H ppa.launchpad.net >> ~/.ssh/known_hosts
|
||||||
|
|
||||||
|
- name: Setup dput config
|
||||||
|
env:
|
||||||
|
ppa_login: meshtasticorg
|
||||||
|
run: |
|
||||||
|
sudo tee /etc/meshtastic-dput.cf >/dev/null <<EOF
|
||||||
|
[ppa]
|
||||||
|
fqdn = ppa.launchpad.net
|
||||||
|
method = ftp
|
||||||
|
incoming = ~%(ppa)s
|
||||||
|
login = anonymous
|
||||||
|
|
||||||
|
[ssh-ppa]
|
||||||
|
fqdn = ppa.launchpad.net
|
||||||
|
method = sftp
|
||||||
|
incoming = ~%(ssh-ppa)s
|
||||||
|
login = ${ppa_login}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
- name: Import SSH key
|
||||||
|
uses: webfactory/ssh-agent@v0.10.0
|
||||||
|
with:
|
||||||
|
ssh-private-key: ${{ secrets.PPA_SFTP_PRIVATE_KEY }}
|
||||||
|
id: ssh
|
||||||
|
|
||||||
|
- name: Publish with dput (sftp)
|
||||||
|
timeout-minutes: 30 # dput is terrible, sometimes runs 'forever'
|
||||||
|
env:
|
||||||
|
up_ppa_repo: ${{ inputs.ppa_repo }}
|
||||||
|
up_series: ${{ inputs.series }}
|
||||||
|
up_version: ${{ steps.version.outputs.deb }}
|
||||||
|
run: >
|
||||||
|
dput -c /etc/meshtastic-dput.cf
|
||||||
|
ssh-${up_ppa_repo}
|
||||||
|
meshtasticd_${up_version}~${up_series}_source.changes
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Check for PR labels
|
- name: Check for PR labels
|
||||||
uses: actions/github-script@v8
|
uses: actions/github-script@v9
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
const labels = context.payload.pull_request.labels.map(label => label.name);
|
const labels = context.payload.pull_request.labels.map(label => label.name);
|
||||||
|
|||||||
@@ -177,7 +177,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Comment test results on PR
|
- name: Comment test results on PR
|
||||||
if: github.event_name == 'pull_request' && needs.native-tests.result != 'skipped'
|
if: github.event_name == 'pull_request' && needs.native-tests.result != 'skipped'
|
||||||
uses: actions/github-script@v8
|
uses: actions/github-script@v9
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ jobs:
|
|||||||
node-version: 24
|
node-version: 24
|
||||||
|
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@v5
|
uses: pnpm/action-setup@v6
|
||||||
with:
|
with:
|
||||||
version: latest
|
version: latest
|
||||||
|
|
||||||
|
|||||||
+3
-3
@@ -8,10 +8,10 @@ plugins:
|
|||||||
uri: https://github.com/trunk-io/plugins
|
uri: https://github.com/trunk-io/plugins
|
||||||
lint:
|
lint:
|
||||||
enabled:
|
enabled:
|
||||||
- checkov@3.2.513
|
- checkov@3.2.517
|
||||||
- renovate@43.104.6
|
- renovate@43.110.9
|
||||||
- prettier@3.8.1
|
- prettier@3.8.1
|
||||||
- trufflehog@3.94.2
|
- trufflehog@3.94.3
|
||||||
- yamllint@1.38.0
|
- yamllint@1.38.0
|
||||||
- bandit@1.9.4
|
- bandit@1.9.4
|
||||||
- trivy@0.69.3
|
- trivy@0.69.3
|
||||||
|
|||||||
@@ -0,0 +1,39 @@
|
|||||||
|
# MeshAdv-Pi E22-900M30S
|
||||||
|
# https://github.com/chrismyers2000/MeshAdv-Pi-Hat
|
||||||
|
Meta:
|
||||||
|
name: MeshAdv-Pi E22-900M30S
|
||||||
|
support: community
|
||||||
|
compatible:
|
||||||
|
- ebyte-ecb41-pge # Armbian
|
||||||
|
|
||||||
|
Lora:
|
||||||
|
Module: sx1262
|
||||||
|
CS: # GPIO0_A1 (physical 40)
|
||||||
|
pin: 1
|
||||||
|
gpiochip: 0
|
||||||
|
line: 1
|
||||||
|
IRQ: # GPIO0_A3 (physical 36)
|
||||||
|
pin: 3
|
||||||
|
gpiochip: 0
|
||||||
|
line: 3
|
||||||
|
Busy: # GPIO0_A0 (physical 38)
|
||||||
|
pin: 0
|
||||||
|
gpiochip: 0
|
||||||
|
line: 0
|
||||||
|
Reset: # GPIO0_B4 (physical 12)
|
||||||
|
pin: 12
|
||||||
|
gpiochip: 0
|
||||||
|
line: 12
|
||||||
|
TXen: # GPIO1_D1 (physical 33)
|
||||||
|
pin: 57
|
||||||
|
gpiochip: 1
|
||||||
|
line: 25
|
||||||
|
RXen: # GPIO1_B3 (physical 32)
|
||||||
|
pin: 43
|
||||||
|
gpiochip: 1
|
||||||
|
line: 11
|
||||||
|
DIO3_TCXO_VOLTAGE: true
|
||||||
|
# Only for E22-900M33S:
|
||||||
|
# Limit the output power to 8 dBm
|
||||||
|
# SX126X_MAX_POWER: 8
|
||||||
|
spidev: spidev0.0
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
# MeshAdv Mini E22-900M22S
|
||||||
|
# https://github.com/chrismyers2000/MeshAdv-Mini
|
||||||
|
Meta:
|
||||||
|
name: MeshAdv Mini E22-900M22S
|
||||||
|
support: community
|
||||||
|
compatible:
|
||||||
|
- ebyte-ecb41-pge # Armbian
|
||||||
|
|
||||||
|
Lora:
|
||||||
|
Module: sx1262 # Ebyte E22-900M22S
|
||||||
|
CS: # GPIO0_B6 (physical 24, SPI1_CSN0)
|
||||||
|
pin: 14
|
||||||
|
gpiochip: 0
|
||||||
|
line: 14
|
||||||
|
IRQ: # GPIO0_A3 (physical 36)
|
||||||
|
pin: 3
|
||||||
|
gpiochip: 0
|
||||||
|
line: 3
|
||||||
|
Busy: # GPIO0_A0 (physical 38)
|
||||||
|
pin: 0
|
||||||
|
gpiochip: 0
|
||||||
|
line: 0
|
||||||
|
Reset: # GPIO1_C3 (physical 18)
|
||||||
|
pin: 51
|
||||||
|
gpiochip: 1
|
||||||
|
line: 19
|
||||||
|
RXen: # GPIO1_B3 (physical 32)
|
||||||
|
pin: 43
|
||||||
|
gpiochip: 1
|
||||||
|
line: 11
|
||||||
|
DIO2_AS_RF_SWITCH: true
|
||||||
|
DIO3_TCXO_VOLTAGE: true
|
||||||
|
spidev: spidev0.0
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
Meta:
|
||||||
|
name: RAK6421 + RAK13300 Slot 1
|
||||||
|
support: community # Promote when tested
|
||||||
|
compatible:
|
||||||
|
- ebyte-ecb41-pge # Armbian
|
||||||
|
|
||||||
|
Lora:
|
||||||
|
Module: sx1262
|
||||||
|
IRQ: # GPIO0_A5 (IO6, physical 15)
|
||||||
|
pin: 5
|
||||||
|
gpiochip: 0
|
||||||
|
line: 5
|
||||||
|
Reset: # GPIO0_A3 (IO4, physical 36)
|
||||||
|
pin: 3
|
||||||
|
gpiochip: 0
|
||||||
|
line: 3
|
||||||
|
Busy: # GPIO1_C3 (IO5, physical 18)
|
||||||
|
pin: 51
|
||||||
|
gpiochip: 1
|
||||||
|
line: 19
|
||||||
|
# Ant_sw: # GPIO1_C2 (IO3, physical 16)
|
||||||
|
# pin: 50
|
||||||
|
# gpiochip: 1
|
||||||
|
# line: 18
|
||||||
|
Enable_Pins:
|
||||||
|
- pin: 43 # GPIO1_B3 (physical 32)
|
||||||
|
gpiochip: 1
|
||||||
|
line: 11
|
||||||
|
- pin: 57 # GPIO1_D1 (physical 33)
|
||||||
|
gpiochip: 1
|
||||||
|
line: 25
|
||||||
|
DIO3_TCXO_VOLTAGE: true
|
||||||
|
DIO2_AS_RF_SWITCH: true
|
||||||
|
spidev: spidev0.0
|
||||||
|
# CS: # GPIO0_B6 (SPI1_CSN0, physical 24)
|
||||||
|
# pin: 14
|
||||||
|
# gpiochip: 0
|
||||||
|
# line: 14
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
Meta:
|
||||||
|
name: RAK6421 + RAK13300 Slot 2
|
||||||
|
support: community # Promote when tested
|
||||||
|
compatible:
|
||||||
|
- ebyte-ecb41-pge # Armbian
|
||||||
|
|
||||||
|
Lora:
|
||||||
|
Module: sx1262
|
||||||
|
IRQ: # GPIO0_B4 (IO6, physical 12)
|
||||||
|
pin: 12
|
||||||
|
gpiochip: 0
|
||||||
|
line: 12
|
||||||
|
Reset: # GPIO1_C3 (IO4, physical 18)
|
||||||
|
pin: 51
|
||||||
|
gpiochip: 1
|
||||||
|
line: 19
|
||||||
|
Busy: # GPIO0_B3 (IO5, physical 35)
|
||||||
|
pin: 11
|
||||||
|
gpiochip: 0
|
||||||
|
line: 11
|
||||||
|
# Ant_sw: # GPIO1_C2 (IO3, physical 16)
|
||||||
|
# pin: 50
|
||||||
|
# gpiochip: 1
|
||||||
|
# line: 18
|
||||||
|
Enable_Pins:
|
||||||
|
- pin: 2 # GPIO0_A2 (physical 37)
|
||||||
|
gpiochip: 0
|
||||||
|
line: 2
|
||||||
|
- pin: 50 # GPIO1_C2 (physical 16)
|
||||||
|
gpiochip: 1
|
||||||
|
line: 18
|
||||||
|
spidev: spidev0.1
|
||||||
|
# CS: # GPIO0_A7 (SPI1_CSN1, physical 26)
|
||||||
|
# pin: 7
|
||||||
|
# gpiochip: 0
|
||||||
|
# line: 7
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
Meta:
|
||||||
|
name: RAK6421 + RAK13302 Slot 1
|
||||||
|
support: community # Promote when tested
|
||||||
|
compatible:
|
||||||
|
- ebyte-ecb41-pge # Armbian
|
||||||
|
|
||||||
|
Lora:
|
||||||
|
Module: sx1262
|
||||||
|
IRQ: # GPIO0_A5 (IO6, physical 15)
|
||||||
|
pin: 5
|
||||||
|
gpiochip: 0
|
||||||
|
line: 5
|
||||||
|
Reset: # GPIO0_A3 (IO4, physical 36)
|
||||||
|
pin: 3
|
||||||
|
gpiochip: 0
|
||||||
|
line: 3
|
||||||
|
Busy: # GPIO1_C3 (IO5, physical 18)
|
||||||
|
pin: 51
|
||||||
|
gpiochip: 1
|
||||||
|
line: 19
|
||||||
|
# Ant_sw: # GPIO1_C2 (IO3, physical 16)
|
||||||
|
# pin: 50
|
||||||
|
# gpiochip: 1
|
||||||
|
# line: 18
|
||||||
|
Enable_Pins:
|
||||||
|
- pin: 43 # GPIO1_B3 (physical 32)
|
||||||
|
gpiochip: 1
|
||||||
|
line: 11
|
||||||
|
- pin: 57 # GPIO1_D1 (physical 33)
|
||||||
|
gpiochip: 1
|
||||||
|
line: 25
|
||||||
|
DIO3_TCXO_VOLTAGE: true
|
||||||
|
DIO2_AS_RF_SWITCH: true
|
||||||
|
spidev: spidev0.0
|
||||||
|
# CS: # GPIO0_B6 (SPI1_CSN0, physical 24)
|
||||||
|
# pin: 14
|
||||||
|
# gpiochip: 0
|
||||||
|
# line: 14
|
||||||
|
TX_GAIN_LORA: [9, 9, 10, 11, 9, 8, 9, 10, 10, 10, 11, 12, 12, 12, 12, 12, 12, 12, 12, 10, 9, 8]
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
Meta:
|
||||||
|
name: RAK6421 + RAK13302 Slot 2
|
||||||
|
support: community # Promote when tested
|
||||||
|
compatible:
|
||||||
|
- ebyte-ecb41-pge # Armbian
|
||||||
|
|
||||||
|
Lora:
|
||||||
|
Module: sx1262
|
||||||
|
IRQ: # GPIO0_B4 (IO6, physical 12)
|
||||||
|
pin: 12
|
||||||
|
gpiochip: 0
|
||||||
|
line: 12
|
||||||
|
Reset: # GPIO1_C3 (IO4, physical 18)
|
||||||
|
pin: 51
|
||||||
|
gpiochip: 1
|
||||||
|
line: 19
|
||||||
|
Busy: # GPIO0_B3 (IO5, physical 35)
|
||||||
|
pin: 11
|
||||||
|
gpiochip: 0
|
||||||
|
line: 11
|
||||||
|
# Ant_sw: # GPIO1_C2 (IO3, physical 16)
|
||||||
|
# pin: 50
|
||||||
|
# gpiochip: 1
|
||||||
|
# line: 18
|
||||||
|
Enable_Pins:
|
||||||
|
- pin: 2 # GPIO0_A2 (physical 37)
|
||||||
|
gpiochip: 0
|
||||||
|
line: 2
|
||||||
|
- pin: 50 # GPIO1_C2 (physical 16)
|
||||||
|
gpiochip: 1
|
||||||
|
line: 18
|
||||||
|
spidev: spidev0.1
|
||||||
|
# CS: # GPIO0_A7 (SPI1_CSN1, physical 26)
|
||||||
|
# pin: 7
|
||||||
|
# gpiochip: 0
|
||||||
|
# line: 7
|
||||||
|
TX_GAIN_LORA: [9, 9, 10, 11, 9, 8, 9, 10, 10, 10, 11, 12, 12, 12, 12, 12, 12, 12, 12, 10, 9, 8]
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
Meta:
|
||||||
|
name: Waveshare SX1262
|
||||||
|
support: deprecated
|
||||||
|
compatible:
|
||||||
|
- ebyte-ecb41-pge # Armbian
|
||||||
|
|
||||||
|
Lora:
|
||||||
|
Module: sx1262 # Waveshare SX126X XXXM
|
||||||
|
DIO2_AS_RF_SWITCH: true
|
||||||
|
CS: # GPIO0_A1 (physical 40)
|
||||||
|
pin: 1
|
||||||
|
gpiochip: 0
|
||||||
|
line: 1
|
||||||
|
IRQ: # GPIO0_A3 (physical 36)
|
||||||
|
pin: 3
|
||||||
|
gpiochip: 0
|
||||||
|
line: 3
|
||||||
|
Busy: # GPIO0_A0 (physical 38)
|
||||||
|
pin: 0
|
||||||
|
gpiochip: 0
|
||||||
|
line: 0
|
||||||
|
Reset: # GPIO0_B4 (physical 12)
|
||||||
|
pin: 12
|
||||||
|
gpiochip: 0
|
||||||
|
line: 12
|
||||||
|
SX126X_ANT_SW: # GPIO1_B2 (physical 31)
|
||||||
|
pin: 42
|
||||||
|
gpiochip: 1
|
||||||
|
line: 10
|
||||||
|
spidev: spidev0.0
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
# !! WARNING: Hats on the OK3506 board are installed "backwards" (facing outwards)
|
||||||
|
|
||||||
|
# MeshAdv-Pi E22-900M30S
|
||||||
|
# https://github.com/chrismyers2000/MeshAdv-Pi-Hat
|
||||||
|
Meta:
|
||||||
|
name: MeshAdv-Pi E22-900M30S
|
||||||
|
support: community
|
||||||
|
compatible:
|
||||||
|
- forlinx-ok3506-s12 # Armbian
|
||||||
|
|
||||||
|
Lora:
|
||||||
|
Module: sx1262
|
||||||
|
CS: # GPIO0_B0 (physical 40)
|
||||||
|
pin: 8
|
||||||
|
gpiochip: 0
|
||||||
|
line: 8
|
||||||
|
IRQ: # GPIO3_B0 (physical 36)
|
||||||
|
pin: 104
|
||||||
|
gpiochip: 3
|
||||||
|
line: 8
|
||||||
|
Busy: # GPIO0_B1 (physical 38)
|
||||||
|
pin: 9
|
||||||
|
gpiochip: 0
|
||||||
|
line: 9
|
||||||
|
Reset: # GPIO0_B6 (physical 12)
|
||||||
|
pin: 14
|
||||||
|
gpiochip: 0
|
||||||
|
line: 14
|
||||||
|
TXen: # GPIO0_A3 (physical 33)
|
||||||
|
pin: 3
|
||||||
|
gpiochip: 0
|
||||||
|
line: 3
|
||||||
|
RXen: # GPIO0_A2 (physical 32)
|
||||||
|
pin: 2
|
||||||
|
gpiochip: 0
|
||||||
|
line: 2
|
||||||
|
DIO3_TCXO_VOLTAGE: true
|
||||||
|
# Only for E22-900M33S:
|
||||||
|
# Limit the output power to 8 dBm
|
||||||
|
# SX126X_MAX_POWER: 8
|
||||||
|
spidev: spidev0.0
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
# !! WARNING: Hats on the OK3506 board are installed "backwards" (facing outwards)
|
||||||
|
|
||||||
|
# MeshAdv Mini E22-900M22S
|
||||||
|
# https://github.com/chrismyers2000/MeshAdv-Mini
|
||||||
|
Meta:
|
||||||
|
name: MeshAdv Mini E22-900M22S
|
||||||
|
support: community
|
||||||
|
compatible:
|
||||||
|
- forlinx-ok3506-s12 # Armbian
|
||||||
|
|
||||||
|
Lora:
|
||||||
|
Module: sx1262 # Ebyte E22-900M22S
|
||||||
|
CS: # GPIO0_C3 (physical 24, SPI0_CSN0)
|
||||||
|
pin: 19
|
||||||
|
gpiochip: 0
|
||||||
|
line: 19
|
||||||
|
IRQ: # GPIO3_B0 (physical 36)
|
||||||
|
pin: 104
|
||||||
|
gpiochip: 3
|
||||||
|
line: 8
|
||||||
|
Busy: # GPIO0_B1 (physical 38)
|
||||||
|
pin: 9
|
||||||
|
gpiochip: 0
|
||||||
|
line: 9
|
||||||
|
Reset: # GPIO3_A6 (physical 18)
|
||||||
|
pin: 102
|
||||||
|
gpiochip: 3
|
||||||
|
line: 6
|
||||||
|
RXen: # GPIO0_A2 (physical 32)
|
||||||
|
pin: 2
|
||||||
|
gpiochip: 0
|
||||||
|
line: 2
|
||||||
|
DIO2_AS_RF_SWITCH: true
|
||||||
|
DIO3_TCXO_VOLTAGE: true
|
||||||
|
spidev: spidev0.0
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
# !! WARNING: Hats on the OK3506 board are installed "backwards" (facing outwards)
|
||||||
|
|
||||||
|
Meta:
|
||||||
|
name: RAK6421 + RAK13300 Slot 1
|
||||||
|
support: community # Promote when tested
|
||||||
|
compatible:
|
||||||
|
- forlinx-ok3506-s12 # Armbian
|
||||||
|
|
||||||
|
Lora:
|
||||||
|
Module: sx1262
|
||||||
|
IRQ: # GPIO3_B5 (IO6, physical 15)
|
||||||
|
pin: 109
|
||||||
|
gpiochip: 3
|
||||||
|
line: 13
|
||||||
|
Reset: # GPIO3_B0 (IO4, physical 36)
|
||||||
|
pin: 104
|
||||||
|
gpiochip: 3
|
||||||
|
line: 8
|
||||||
|
Busy: # GPIO3_A6 (IO5, physical 18)
|
||||||
|
pin: 102
|
||||||
|
gpiochip: 3
|
||||||
|
line: 6
|
||||||
|
# Ant_sw: # GPIO0_A3 (IO3, physical 33)
|
||||||
|
# pin: 3
|
||||||
|
# gpiochip: 0
|
||||||
|
# line: 3
|
||||||
|
Enable_Pins:
|
||||||
|
- pin: 2 # GPIO0_A2 (physical 32)
|
||||||
|
gpiochip: 0
|
||||||
|
line: 2
|
||||||
|
- pin: 3 # GPIO0_A3 (physical 33)
|
||||||
|
gpiochip: 0
|
||||||
|
line: 3
|
||||||
|
DIO3_TCXO_VOLTAGE: true
|
||||||
|
DIO2_AS_RF_SWITCH: true
|
||||||
|
spidev: spidev0.0
|
||||||
|
# CS: # GPIO0_C3 (SPI0_CSN0, physical 24)
|
||||||
|
# pin: 19
|
||||||
|
# gpiochip: 0
|
||||||
|
# line: 19
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
# !! WARNING: Hats on the OK3506 board are installed "backwards" (facing outwards)
|
||||||
|
|
||||||
|
Meta:
|
||||||
|
name: RAK6421 + RAK13300 Slot 2
|
||||||
|
support: community # Promote when tested
|
||||||
|
compatible:
|
||||||
|
- forlinx-ok3506-s12 # Armbian
|
||||||
|
|
||||||
|
Lora:
|
||||||
|
Module: sx1262
|
||||||
|
IRQ: # GPIO0_B6 (IO6, physical 12)
|
||||||
|
pin: 14
|
||||||
|
gpiochip: 0
|
||||||
|
line: 14
|
||||||
|
Reset: # GPIO3_A6 (IO4, physical 18)
|
||||||
|
pin: 102
|
||||||
|
gpiochip: 3
|
||||||
|
line: 6
|
||||||
|
Busy: # GPIO0_B2 (IO5, physical 35)
|
||||||
|
pin: 10
|
||||||
|
gpiochip: 0
|
||||||
|
line: 10
|
||||||
|
# Ant_sw: # GPIO3_A7 (IO3, physical 16)
|
||||||
|
# pin: 103
|
||||||
|
# gpiochip: 3
|
||||||
|
# line: 7
|
||||||
|
Enable_Pins:
|
||||||
|
- pin: 106 # GPIO3_B2 (physical 37)
|
||||||
|
gpiochip: 3
|
||||||
|
line: 10
|
||||||
|
- pin: 103 # GPIO3_A7 (physical 16)
|
||||||
|
gpiochip: 3
|
||||||
|
line: 7
|
||||||
|
spidev: spidev0.1
|
||||||
|
# CS: # GPIO0_B7 (SPI0_CSN1, physical 26)
|
||||||
|
# pin: 15
|
||||||
|
# gpiochip: 0
|
||||||
|
# line: 15
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
# !! WARNING: Hats on the OK3506 board are installed "backwards" (facing outwards)
|
||||||
|
|
||||||
|
Meta:
|
||||||
|
name: RAK6421 + RAK13302 Slot 1
|
||||||
|
support: community # Promote when tested
|
||||||
|
compatible:
|
||||||
|
- forlinx-ok3506-s12 # Armbian
|
||||||
|
|
||||||
|
Lora:
|
||||||
|
Module: sx1262
|
||||||
|
IRQ: # GPIO3_B5 (IO6, physical 15)
|
||||||
|
pin: 109
|
||||||
|
gpiochip: 3
|
||||||
|
line: 13
|
||||||
|
Reset: # GPIO3_B0 (IO4, physical 36)
|
||||||
|
pin: 104
|
||||||
|
gpiochip: 3
|
||||||
|
line: 8
|
||||||
|
Busy: # GPIO3_A6 (IO5, physical 18)
|
||||||
|
pin: 102
|
||||||
|
gpiochip: 3
|
||||||
|
line: 6
|
||||||
|
# Ant_sw: # GPIO0_A3 (IO3, physical 33)
|
||||||
|
# pin: 3
|
||||||
|
# gpiochip: 0
|
||||||
|
# line: 3
|
||||||
|
Enable_Pins:
|
||||||
|
- pin: 2 # GPIO0_A2 (physical 32)
|
||||||
|
gpiochip: 0
|
||||||
|
line: 2
|
||||||
|
- pin: 3 # GPIO0_A3 (physical 33)
|
||||||
|
gpiochip: 0
|
||||||
|
line: 3
|
||||||
|
DIO3_TCXO_VOLTAGE: true
|
||||||
|
DIO2_AS_RF_SWITCH: true
|
||||||
|
spidev: spidev0.0
|
||||||
|
# CS: # GPIO0_C3 (SPI0_CSN0, physical 24)
|
||||||
|
# pin: 19
|
||||||
|
# gpiochip: 0
|
||||||
|
# line: 19
|
||||||
|
TX_GAIN_LORA: [9, 9, 10, 11, 9, 8, 9, 10, 10, 10, 11, 12, 12, 12, 12, 12, 12, 12, 12, 10, 9, 8]
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
# !! WARNING: Hats on the OK3506 board are installed "backwards" (facing outwards)
|
||||||
|
|
||||||
|
Meta:
|
||||||
|
name: RAK6421 + RAK13302 Slot 2
|
||||||
|
support: community # Promote when tested
|
||||||
|
compatible:
|
||||||
|
- forlinx-ok3506-s12 # Armbian
|
||||||
|
|
||||||
|
Lora:
|
||||||
|
Module: sx1262
|
||||||
|
IRQ: # GPIO0_B6 (IO6, physical 12)
|
||||||
|
pin: 14
|
||||||
|
gpiochip: 0
|
||||||
|
line: 14
|
||||||
|
Reset: # GPIO3_A6 (IO4, physical 18)
|
||||||
|
pin: 102
|
||||||
|
gpiochip: 3
|
||||||
|
line: 6
|
||||||
|
Busy: # GPIO0_B2 (IO5, physical 35)
|
||||||
|
pin: 10
|
||||||
|
gpiochip: 0
|
||||||
|
line: 10
|
||||||
|
# Ant_sw: # GPIO3_A7 (IO3, physical 16)
|
||||||
|
# pin: 103
|
||||||
|
# gpiochip: 3
|
||||||
|
# line: 7
|
||||||
|
Enable_Pins:
|
||||||
|
- pin: 106 # GPIO3_B2 (physical 37)
|
||||||
|
gpiochip: 3
|
||||||
|
line: 10
|
||||||
|
- pin: 103 # GPIO3_A7 (physical 16)
|
||||||
|
gpiochip: 3
|
||||||
|
line: 7
|
||||||
|
spidev: spidev0.1
|
||||||
|
# CS: # GPIO0_B7 (SPI0_CSN1, physical 26)
|
||||||
|
# pin: 15
|
||||||
|
# gpiochip: 0
|
||||||
|
# line: 15
|
||||||
|
TX_GAIN_LORA: [9, 9, 10, 11, 9, 8, 9, 10, 10, 10, 11, 12, 12, 12, 12, 12, 12, 12, 12, 10, 9, 8]
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
# !! WARNING: Hats on the OK3506 board are installed "backwards" (facing outwards)
|
||||||
|
|
||||||
|
Meta:
|
||||||
|
name: Waveshare SX1262
|
||||||
|
support: deprecated
|
||||||
|
compatible:
|
||||||
|
- forlinx-ok3506-s12 # Armbian
|
||||||
|
|
||||||
|
Lora:
|
||||||
|
Module: sx1262 # Waveshare SX126X XXXM
|
||||||
|
DIO2_AS_RF_SWITCH: true
|
||||||
|
CS: # GPIO0_B0 (physical 40)
|
||||||
|
pin: 8
|
||||||
|
gpiochip: 0
|
||||||
|
line: 8
|
||||||
|
IRQ: # GPIO3_B0 (physical 36)
|
||||||
|
pin: 104
|
||||||
|
gpiochip: 3
|
||||||
|
line: 8
|
||||||
|
Busy: # GPIO0_B1 (physical 38)
|
||||||
|
pin: 9
|
||||||
|
gpiochip: 0
|
||||||
|
line: 9
|
||||||
|
Reset: # GPIO0_B6 (physical 12)
|
||||||
|
pin: 14
|
||||||
|
gpiochip: 0
|
||||||
|
line: 14
|
||||||
|
SX126X_ANT_SW: # GPIO3_B3 (physical 31)
|
||||||
|
pin: 107
|
||||||
|
gpiochip: 3
|
||||||
|
line: 11
|
||||||
|
spidev: spidev0.0
|
||||||
@@ -1,25 +1,31 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
"""
|
"""Generate release notes from the actual release commit range."""
|
||||||
Generate release notes from merged PRs on develop and master branches.
|
|
||||||
Categorizes PRs into Enhancements and Bug Fixes/Maintenance sections.
|
|
||||||
"""
|
|
||||||
|
|
||||||
import subprocess
|
import argparse
|
||||||
import re
|
|
||||||
import json
|
import json
|
||||||
|
import re
|
||||||
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
from datetime import datetime
|
|
||||||
|
|
||||||
|
|
||||||
def get_last_release_tag():
|
def get_last_release_tag(compare_ref, exclude_tag=None):
|
||||||
"""Get the most recent release tag."""
|
"""Get the most recent version tag merged into compare_ref."""
|
||||||
result = subprocess.run(
|
result = subprocess.run(
|
||||||
["git", "describe", "--tags", "--abbrev=0"],
|
["git", "tag", "--merged", compare_ref, "--sort=-version:refname", "v*"],
|
||||||
capture_output=True,
|
capture_output=True,
|
||||||
text=True,
|
text=True,
|
||||||
check=True,
|
check=True,
|
||||||
)
|
)
|
||||||
return result.stdout.strip()
|
|
||||||
|
for line in result.stdout.splitlines():
|
||||||
|
candidate = line.strip()
|
||||||
|
if not candidate:
|
||||||
|
continue
|
||||||
|
if exclude_tag and candidate == exclude_tag:
|
||||||
|
continue
|
||||||
|
return candidate
|
||||||
|
|
||||||
|
raise subprocess.CalledProcessError(result.returncode, result.args, output=result.stdout, stderr=result.stderr)
|
||||||
|
|
||||||
|
|
||||||
def get_tag_date(tag):
|
def get_tag_date(tag):
|
||||||
@@ -33,18 +39,18 @@ def get_tag_date(tag):
|
|||||||
return result.stdout.strip()
|
return result.stdout.strip()
|
||||||
|
|
||||||
|
|
||||||
def get_merged_prs_since_tag(tag, branch):
|
def get_merged_prs_in_range(tag, compare_ref):
|
||||||
"""Get all merged PRs since the given tag on the specified branch."""
|
"""Get all merged PRs in the git range between tag and compare_ref."""
|
||||||
# Get commits since tag on the branch - look for PR numbers in parentheses
|
|
||||||
result = subprocess.run(
|
result = subprocess.run(
|
||||||
[
|
[
|
||||||
"git",
|
"git",
|
||||||
"log",
|
"log",
|
||||||
f"{tag}..origin/{branch}",
|
f"{tag}..{compare_ref}",
|
||||||
"--oneline",
|
"--oneline",
|
||||||
],
|
],
|
||||||
capture_output=True,
|
capture_output=True,
|
||||||
text=True,
|
text=True,
|
||||||
|
check=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
prs = []
|
prs = []
|
||||||
@@ -65,6 +71,25 @@ def get_merged_prs_since_tag(tag, branch):
|
|||||||
return prs
|
return prs
|
||||||
|
|
||||||
|
|
||||||
|
def parse_args():
|
||||||
|
"""Parse CLI arguments."""
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
description="Generate release notes from the actual release commit range."
|
||||||
|
)
|
||||||
|
parser.add_argument("new_version", help="Version that will be tagged for this release")
|
||||||
|
parser.add_argument(
|
||||||
|
"--base-tag",
|
||||||
|
dest="base_tag",
|
||||||
|
help="Existing version tag to diff from. Defaults to the latest version tag merged into the compare ref.",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--compare-ref",
|
||||||
|
default="HEAD",
|
||||||
|
help="Git ref to diff to. Defaults to HEAD.",
|
||||||
|
)
|
||||||
|
return parser.parse_args()
|
||||||
|
|
||||||
|
|
||||||
def get_pr_details(pr_number):
|
def get_pr_details(pr_number):
|
||||||
"""Get PR details from GitHub API via gh CLI."""
|
"""Get PR details from GitHub API via gh CLI."""
|
||||||
try:
|
try:
|
||||||
@@ -268,28 +293,28 @@ def get_new_contributors(pr_details_list, tag, repo="meshtastic/firmware"):
|
|||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
if len(sys.argv) < 2:
|
args = parse_args()
|
||||||
print("Usage: generate_release_notes.py <new_version>", file=sys.stderr)
|
new_version = args.new_version
|
||||||
sys.exit(1)
|
compare_ref = args.compare_ref
|
||||||
|
current_tag = f"v{new_version}"
|
||||||
new_version = sys.argv[1]
|
|
||||||
|
|
||||||
# Get last release tag
|
# Get last release tag
|
||||||
try:
|
try:
|
||||||
last_tag = get_last_release_tag()
|
last_tag = args.base_tag or get_last_release_tag(compare_ref, exclude_tag=current_tag)
|
||||||
except subprocess.CalledProcessError:
|
except subprocess.CalledProcessError:
|
||||||
print("Error: Could not find last release tag", file=sys.stderr)
|
print("Error: Could not find last release tag", file=sys.stderr)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
# Collect PRs from both branches
|
print(
|
||||||
all_pr_numbers = set()
|
f"Resolved release note range: {last_tag}..{compare_ref}",
|
||||||
|
file=sys.stderr,
|
||||||
|
)
|
||||||
|
|
||||||
for branch in ["develop", "master"]:
|
try:
|
||||||
try:
|
all_pr_numbers = set(get_merged_prs_in_range(last_tag, compare_ref))
|
||||||
prs = get_merged_prs_since_tag(last_tag, branch)
|
except subprocess.CalledProcessError as e:
|
||||||
all_pr_numbers.update(prs)
|
print(f"Error: Could not get PRs for range {last_tag}..{compare_ref}: {e}", file=sys.stderr)
|
||||||
except Exception as e:
|
sys.exit(1)
|
||||||
print(f"Warning: Could not get PRs from {branch}: {e}", file=sys.stderr)
|
|
||||||
|
|
||||||
# Get details for all PRs
|
# Get details for all PRs
|
||||||
enhancements = []
|
enhancements = []
|
||||||
|
|||||||
+90
-82
@@ -131,107 +131,115 @@ lib_deps =
|
|||||||
; Common libs for environmental measurements in telemetry module
|
; Common libs for environmental measurements in telemetry module
|
||||||
[environmental_base]
|
[environmental_base]
|
||||||
lib_deps =
|
lib_deps =
|
||||||
# renovate: datasource=custom.pio depName=Adafruit BusIO packageName=adafruit/library/Adafruit BusIO
|
# renovate: datasource=github-tags depName=Adafruit BusIO packageName=adafruit/Adafruit_BusIO
|
||||||
adafruit/Adafruit BusIO@1.17.4
|
https://github.com/adafruit/Adafruit_BusIO/archive/refs/tags/1.17.4.zip
|
||||||
# renovate: datasource=custom.pio depName=Adafruit Unified Sensor packageName=adafruit/library/Adafruit Unified Sensor
|
# renovate: datasource=github-tags depName=Adafruit Unified Sensor packageName=adafruit/Adafruit_Sensor
|
||||||
adafruit/Adafruit Unified Sensor@1.1.15
|
https://github.com/adafruit/Adafruit_Sensor/archive/refs/tags/1.1.15.zip
|
||||||
# renovate: datasource=custom.pio depName=Adafruit BMP280 packageName=adafruit/library/Adafruit BMP280 Library
|
# renovate: datasource=github-tags depName=Adafruit GFX packageName=adafruit/Adafruit-GFX-Library
|
||||||
adafruit/Adafruit BMP280 Library@3.0.0
|
https://github.com/adafruit/Adafruit-GFX-Library/archive/refs/tags/1.12.6.zip
|
||||||
# renovate: datasource=custom.pio depName=Adafruit BMP085 packageName=adafruit/library/Adafruit BMP085 Library
|
# renovate: datasource=github-tags depName=NeoPixel packageName=adafruit/Adafruit_NeoPixel
|
||||||
adafruit/Adafruit BMP085 Library@1.2.4
|
https://github.com/adafruit/Adafruit_NeoPixel/archive/refs/tags/1.15.4.zip
|
||||||
# renovate: datasource=custom.pio depName=Adafruit BME280 packageName=adafruit/library/Adafruit BME280 Library
|
# renovate: datasource=github-tags depName=Adafruit SSD1306 packageName=adafruit/Adafruit_SSD1306
|
||||||
adafruit/Adafruit BME280 Library@2.3.0
|
https://github.com/adafruit/Adafruit_SSD1306/archive/refs/tags/2.5.16.zip
|
||||||
# renovate: datasource=custom.pio depName=Adafruit DPS310 packageName=adafruit/library/Adafruit DPS310
|
# renovate: datasource=github-tags depName=Adafruit BMP280 packageName=adafruit/Adafruit_BMP280_Library
|
||||||
adafruit/Adafruit DPS310@1.1.6
|
https://github.com/adafruit/Adafruit_BMP280_Library/archive/refs/tags/3.0.0.zip
|
||||||
# renovate: datasource=custom.pio depName=Adafruit MCP9808 packageName=adafruit/library/Adafruit MCP9808 Library
|
# renovate: datasource=github-tags depName=Adafruit BMP085 packageName=adafruit/Adafruit-BMP085-Library
|
||||||
adafruit/Adafruit MCP9808 Library@2.0.2
|
https://github.com/adafruit/Adafruit-BMP085-Library/archive/refs/tags/1.2.4.zip
|
||||||
# renovate: datasource=custom.pio depName=Adafruit INA260 packageName=adafruit/library/Adafruit INA260 Library
|
# renovate: datasource=github-tags depName=Adafruit BME280 packageName=adafruit/Adafruit_BME280_Library
|
||||||
adafruit/Adafruit INA260 Library@1.5.3
|
https://github.com/adafruit/Adafruit_BME280_Library/archive/refs/tags/2.3.0.zip
|
||||||
# renovate: datasource=custom.pio depName=Adafruit INA219 packageName=adafruit/library/Adafruit INA219
|
# renovate: datasource=github-tags depName=Adafruit DPS310 packageName=adafruit/Adafruit_DPS310
|
||||||
adafruit/Adafruit INA219@1.2.3
|
https://github.com/adafruit/Adafruit_DPS310/archive/refs/tags/1.1.6.zip
|
||||||
# renovate: datasource=custom.pio depName=Adafruit MPU6050 packageName=adafruit/library/Adafruit MPU6050
|
# renovate: datasource=github-tags depName=Adafruit SH110x packageName=adafruit/Adafruit_SH110x
|
||||||
adafruit/Adafruit MPU6050@2.2.9
|
https://github.com/adafruit/Adafruit_SH110x/archive/refs/tags/2.1.14.zip
|
||||||
# renovate: datasource=custom.pio depName=Adafruit LIS3DH packageName=adafruit/library/Adafruit LIS3DH
|
# renovate: datasource=github-tags depName=Adafruit MCP9808 packageName=adafruit/Adafruit_MCP9808_Library
|
||||||
adafruit/Adafruit LIS3DH@1.3.0
|
https://github.com/adafruit/Adafruit_MCP9808_Library/archive/refs/tags/2.0.2.zip
|
||||||
# renovate: datasource=custom.pio depName=Adafruit AHTX0 packageName=adafruit/library/Adafruit AHTX0
|
# renovate: datasource=github-tags depName=Adafruit INA260 packageName=adafruit/Adafruit_INA260
|
||||||
adafruit/Adafruit AHTX0@2.0.6
|
https://github.com/adafruit/Adafruit_INA260/archive/refs/tags/1.5.3.zip
|
||||||
# renovate: datasource=custom.pio depName=Adafruit LSM6DS packageName=adafruit/library/Adafruit LSM6DS
|
# renovate: datasource=github-tags depName=Adafruit INA219 packageName=adafruit/Adafruit_INA219
|
||||||
adafruit/Adafruit LSM6DS@4.7.4
|
https://github.com/adafruit/Adafruit_INA219/archive/refs/tags/1.2.3.zip
|
||||||
# renovate: datasource=custom.pio depName=Adafruit TSL2591 packageName=adafruit/library/Adafruit TSL2591 Library
|
# renovate: datasource=github-tags depName=Adafruit MPU6050 packageName=adafruit/Adafruit_MPU6050
|
||||||
adafruit/Adafruit TSL2591 Library@1.4.5
|
https://github.com/adafruit/Adafruit_MPU6050/archive/refs/tags/2.2.9.zip
|
||||||
# renovate: datasource=custom.pio depName=EmotiBit MLX90632 packageName=emotibit/library/EmotiBit MLX90632
|
# renovate: datasource=github-tags depName=Adafruit LIS3DH packageName=adafruit/Adafruit_LIS3DH
|
||||||
emotibit/EmotiBit MLX90632@1.0.8
|
https://github.com/adafruit/Adafruit_LIS3DH/archive/refs/tags/1.3.0.zip
|
||||||
# renovate: datasource=custom.pio depName=Adafruit MLX90614 packageName=adafruit/library/Adafruit MLX90614 Library
|
# renovate: datasource=github-tags depName=Adafruit AHTX0 packageName=adafruit/Adafruit_AHTX0
|
||||||
adafruit/Adafruit MLX90614 Library@2.1.6
|
https://github.com/adafruit/Adafruit_AHTX0/archive/refs/tags/2.0.6.zip
|
||||||
|
# renovate: datasource=github-tags depName=Adafruit LSM6DS packageName=adafruit/Adafruit_LSM6DS
|
||||||
|
https://github.com/adafruit/Adafruit_LSM6DS/archive/refs/tags/4.7.4.zip
|
||||||
|
# renovate: datasource=github-tags depName=Adafruit TSL2591 packageName=adafruit/Adafruit_TSL2591_Library
|
||||||
|
https://github.com/adafruit/Adafruit_TSL2591_Library/archive/refs/tags/1.4.5.zip
|
||||||
|
# renovate: datasource=github-tags depName=EmotiBit MLX90632 packageName=emotibit/EmotiBit_MLX90632
|
||||||
|
https://github.com/EmotiBit/EmotiBit_MLX90632/archive/refs/tags/v1.0.8.zip
|
||||||
|
# renovate: datasource=github-tags depName=Adafruit MLX90614 packageName=adafruit/Adafruit_MLX90614
|
||||||
|
https://github.com/adafruit/Adafruit-MLX90614-Library/archive/refs/tags/2.1.6.zip
|
||||||
# renovate: datasource=git-refs depName=INA3221 packageName=https://github.com/sgtwilko/INA3221 gitBranch=FixOverflow
|
# renovate: datasource=git-refs depName=INA3221 packageName=https://github.com/sgtwilko/INA3221 gitBranch=FixOverflow
|
||||||
https://github.com/sgtwilko/INA3221/archive/bb03d7e9bfcc74fc798838a54f4f99738f29fc6a.zip
|
https://github.com/sgtwilko/INA3221/archive/bb03d7e9bfcc74fc798838a54f4f99738f29fc6a.zip
|
||||||
# renovate: datasource=custom.pio depName=QMC5883L Compass packageName=mprograms/library/QMC5883LCompass
|
# renovate: datasource=github-tags depName=QMC5883L Compass packageName=mprograms/QMC5883LCompass
|
||||||
mprograms/QMC5883LCompass@1.2.3
|
https://github.com/mprograms/QMC5883LCompass/archive/refs/tags/v1.2.3.zip
|
||||||
# renovate: datasource=custom.pio depName=DFRobot_RTU packageName=dfrobot/library/DFRobot_RTU
|
# renovate: datasource=github-tags depName=DFRobot_RTU packageName=dfrobot/DFRobot_RTU
|
||||||
dfrobot/DFRobot_RTU@1.0.6
|
https://github.com/DFRobot/DFRobot_RTU/archive/refs/tags/V1.0.6.zip
|
||||||
# renovate: datasource=git-refs depName=DFRobot_RainfallSensor packageName=https://github.com/DFRobot/DFRobot_RainfallSensor gitBranch=master
|
# renovate: datasource=git-refs depName=DFRobot_RainfallSensor packageName=https://github.com/DFRobot/DFRobot_RainfallSensor gitBranch=master
|
||||||
https://github.com/DFRobot/DFRobot_RainfallSensor/archive/38fea5e02b40a5430be6dab39a99a6f6347d667e.zip
|
https://github.com/DFRobot/DFRobot_RainfallSensor/archive/38fea5e02b40a5430be6dab39a99a6f6347d667e.zip
|
||||||
# renovate: datasource=custom.pio depName=INA226 packageName=robtillaart/library/INA226
|
# renovate: datasource=github-tags depName=INA226 packageName=robtillaart/INA226
|
||||||
robtillaart/INA226@0.6.6
|
https://github.com/RobTillaart/INA226/archive/refs/tags/0.6.6.zip
|
||||||
# renovate: datasource=custom.pio depName=SparkFun MAX3010x packageName=sparkfun/library/SparkFun MAX3010x Pulse and Proximity Sensor Library
|
# renovate: datasource=github-tags depName=SparkFun MAX3010x packageName=sparkfun/SparkFun_MAX3010x_Sensor_Library
|
||||||
sparkfun/SparkFun MAX3010x Pulse and Proximity Sensor Library@1.1.2
|
https://github.com/sparkfun/SparkFun_MAX3010x_Sensor_Library/archive/refs/tags/v1.1.2.zip
|
||||||
# renovate: datasource=custom.pio depName=SparkFun 9DoF IMU Breakout ICM 20948 packageName=sparkfun/library/SparkFun 9DoF IMU Breakout - ICM 20948 - Arduino Library
|
# renovate: datasource=github-tags depName=SparkFun 9DoF IMU Breakout ICM 20948 packageName=sparkfun/SparkFun_ICM-20948_ArduinoLibrary
|
||||||
sparkfun/SparkFun 9DoF IMU Breakout - ICM 20948 - Arduino Library@1.3.2
|
https://github.com/sparkfun/SparkFun_ICM-20948_ArduinoLibrary/archive/refs/tags/v1.3.2.zip
|
||||||
# renovate: datasource=custom.pio depName=Adafruit LTR390 Library packageName=adafruit/library/Adafruit LTR390 Library
|
# renovate: datasource=github-tags depName=Adafruit LTR390 Library packageName=adafruit/Adafruit_LTR390
|
||||||
adafruit/Adafruit LTR390 Library@1.1.2
|
https://github.com/adafruit/Adafruit_LTR390/archive/refs/tags/1.1.2.zip
|
||||||
# renovate: datasource=custom.pio depName=Adafruit PCT2075 packageName=adafruit/library/Adafruit PCT2075
|
# renovate: datasource=github-tags depName=Adafruit PCT2075 packageName=adafruit/Adafruit_PCT2075
|
||||||
adafruit/Adafruit PCT2075@1.0.6
|
https://github.com/adafruit/Adafruit_PCT2075/archive/refs/tags/1.0.6.zip
|
||||||
# renovate: datasource=custom.pio depName=DFRobot_BMM150 packageName=dfrobot/library/DFRobot_BMM150
|
# renovate: datasource=github-tags depName=DFRobot_BMM150 packageName=dfrobot/DFRobot_BMM150
|
||||||
dfrobot/DFRobot_BMM150@1.0.0
|
https://github.com/DFRobot/DFRobot_BMM150/archive/refs/tags/V1.0.0.zip
|
||||||
# renovate: datasource=custom.pio depName=Adafruit_TSL2561 packageName=adafruit/library/Adafruit TSL2561
|
# renovate: datasource=github-tags depName=Adafruit_TSL2561 packageName=adafruit/Adafruit_TSL2561
|
||||||
adafruit/Adafruit TSL2561@1.1.3
|
https://github.com/adafruit/Adafruit_TSL2561/archive/refs/tags/1.1.3.zip
|
||||||
# renovate: datasource=custom.pio depName=BH1750_WE packageName=wollewald/library/BH1750_WE
|
# renovate: datasource=github-tags depName=BH1750_WE packageName=wollewald/BH1750_WE
|
||||||
wollewald/BH1750_WE@1.1.10
|
https://github.com/wollewald/BH1750_WE/archive/refs/tags/1.1.10.zip
|
||||||
|
|
||||||
; Common environmental sensor libraries (not included in native / portduino)
|
; Common environmental sensor libraries (not included in native / portduino)
|
||||||
[environmental_extra_common]
|
[environmental_extra_common]
|
||||||
lib_deps =
|
lib_deps =
|
||||||
# renovate: datasource=custom.pio depName=Adafruit BMP3XX packageName=adafruit/library/Adafruit BMP3XX Library
|
# renovate: datasource=github-tags depName=Adafruit BMP3XX packageName=adafruit/Adafruit_BMP3XX
|
||||||
adafruit/Adafruit BMP3XX Library@2.1.6
|
https://github.com/adafruit/Adafruit_BMP3XX/archive/refs/tags/2.1.6.zip
|
||||||
# renovate: datasource=custom.pio depName=Adafruit MAX1704X packageName=adafruit/library/Adafruit MAX1704X
|
# renovate: datasource=github-tags depName=Adafruit MAX1704X packageName=adafruit/Adafruit_MAX1704X
|
||||||
adafruit/Adafruit MAX1704X@1.0.3
|
https://github.com/adafruit/Adafruit_MAX1704X/archive/refs/tags/1.0.3.zip
|
||||||
# renovate: datasource=custom.pio depName=Adafruit SHTC3 packageName=adafruit/library/Adafruit SHTC3 Library
|
# renovate: datasource=github-tags depName=Adafruit SHTC3 packageName=adafruit/Adafruit_SHTC3
|
||||||
adafruit/Adafruit SHTC3 Library@1.0.2
|
https://github.com/adafruit/Adafruit_SHTC3/archive/refs/tags/1.0.2.zip
|
||||||
# renovate: datasource=custom.pio depName=Adafruit LPS2X packageName=adafruit/library/Adafruit LPS2X
|
# renovate: datasource=github-tags depName=Adafruit LPS2X packageName=adafruit/Adafruit_LPS2X
|
||||||
adafruit/Adafruit LPS2X@2.0.6
|
https://github.com/adafruit/Adafruit_LPS2X/archive/refs/tags/2.0.6.zip
|
||||||
# renovate: datasource=custom.pio depName=Adafruit SHT31 packageName=adafruit/library/Adafruit SHT31 Library
|
# renovate: datasource=github-tags depName=Adafruit SHT31 packageName=adafruit/Adafruit_SHT31
|
||||||
adafruit/Adafruit SHT31 Library@2.2.2
|
https://github.com/adafruit/Adafruit_SHT31/archive/refs/tags/2.2.2.zip
|
||||||
# renovate: datasource=custom.pio depName=Adafruit VEML7700 packageName=adafruit/library/Adafruit VEML7700 Library
|
# renovate: datasource=github-tags depName=Adafruit VEML7700 packageName=adafruit/Adafruit_VEML7700
|
||||||
adafruit/Adafruit VEML7700 Library@2.1.6
|
https://github.com/adafruit/Adafruit_VEML7700/archive/refs/tags/2.1.6.zip
|
||||||
# renovate: datasource=custom.pio depName=Adafruit SHT4x packageName=adafruit/library/Adafruit SHT4x Library
|
# renovate: datasource=github-tags depName=Adafruit SHT4x packageName=adafruit/Adafruit_SHT4X
|
||||||
adafruit/Adafruit SHT4x Library@1.0.5
|
https://github.com/adafruit/Adafruit_SHT4X/archive/refs/tags/1.0.5.zip
|
||||||
# renovate: datasource=custom.pio depName=SparkFun Qwiic Scale NAU7802 packageName=sparkfun/library/SparkFun Qwiic Scale NAU7802 Arduino Library
|
# renovate: datasource=github-tags depName=SparkFun Qwiic Scale NAU7802 packageName=sparkfun/SparkFun_Qwiic_Scale_NAU7802_Arduino_Library
|
||||||
sparkfun/SparkFun Qwiic Scale NAU7802 Arduino Library@1.0.6
|
https://github.com/sparkfun/SparkFun_Qwiic_Scale_NAU7802_Arduino_Library/archive/refs/tags/v1.0.6.zip
|
||||||
# renovate: datasource=custom.pio depName=ClosedCube OPT3001 packageName=closedcube/library/ClosedCube OPT3001
|
# renovate: datasource=custom.pio depName=ClosedCube OPT3001 packageName=closedcube/library/ClosedCube OPT3001
|
||||||
closedcube/ClosedCube OPT3001@1.1.2
|
closedcube/ClosedCube OPT3001@1.1.2
|
||||||
# renovate: datasource=git-refs depName=meshtastic-DFRobot_LarkWeatherStation packageName=https://github.com/meshtastic/DFRobot_LarkWeatherStation gitBranch=master
|
# renovate: datasource=git-refs depName=meshtastic-DFRobot_LarkWeatherStation packageName=https://github.com/meshtastic/DFRobot_LarkWeatherStation gitBranch=master
|
||||||
https://github.com/meshtastic/DFRobot_LarkWeatherStation/archive/4de3a9cadef0f6a5220a8a906cf9775b02b0040d.zip
|
https://github.com/meshtastic/DFRobot_LarkWeatherStation/archive/4de3a9cadef0f6a5220a8a906cf9775b02b0040d.zip
|
||||||
# renovate: datasource=custom.pio depName=Sensirion Core packageName=sensirion/library/Sensirion Core
|
# renovate: datasource=github-tags depName=Sensirion Core packageName=sensirion/arduino-core
|
||||||
sensirion/Sensirion Core@0.7.3
|
https://github.com/Sensirion/arduino-core/archive/refs/tags/0.7.3.zip
|
||||||
# renovate: datasource=custom.pio depName=Sensirion I2C SCD4x packageName=sensirion/library/Sensirion I2C SCD4x
|
# renovate: datasource=github-tags depName=Sensirion I2C SCD4x packageName=sensirion/arduino-i2c-scd4x
|
||||||
sensirion/Sensirion I2C SCD4x@1.1.0
|
https://github.com/Sensirion/arduino-i2c-scd4x/archive/refs/tags/1.1.0.zip
|
||||||
# renovate: datasource=custom.pio depName=Sensirion I2C SFA3x packageName=sensirion/library/Sensirion I2C SFA3x
|
# renovate: datasource=github-tags depName=Sensirion I2C SFA3x packageName=sensirion/arduino-i2c-sfa3x
|
||||||
sensirion/Sensirion I2C SFA3x@1.0.0
|
https://github.com/Sensirion/arduino-i2c-sfa3x/archive/refs/tags/1.0.0.zip
|
||||||
# renovate: datasource=custom.pio depName=Sensirion I2C SCD30 packageName=sensirion/library/Sensirion I2C SCD30
|
# renovate: datasource=github-tags depName=Sensirion I2C SCD30 packageName=sensirion/arduino-i2c-scd30
|
||||||
sensirion/Sensirion I2C SCD30@1.0.0
|
https://github.com/Sensirion/arduino-i2c-scd30/archive/refs/tags/1.0.0.zip
|
||||||
|
|
||||||
; Environmental sensors with BSEC2 (Bosch proprietary IAQ)
|
; Environmental sensors with BSEC2 (Bosch proprietary IAQ)
|
||||||
[environmental_extra]
|
[environmental_extra]
|
||||||
lib_deps =
|
lib_deps =
|
||||||
${environmental_extra_common.lib_deps}
|
${environmental_extra_common.lib_deps}
|
||||||
# renovate: datasource=custom.pio depName=Bosch BSEC2 packageName=boschsensortec/library/bsec2
|
# renovate: datasource=github-tags depName=Bosch BSEC2 packageName=boschsensortec/Bosch-BSEC2-Library
|
||||||
boschsensortec/bsec2@1.10.2610
|
https://github.com/boschsensortec/Bosch-BSEC2-Library/archive/refs/tags/1.10.2610.zip
|
||||||
# renovate: datasource=custom.pio depName=Bosch BME68x packageName=boschsensortec/library/BME68x Sensor Library
|
# renovate: datasource=github-tags depName=Bosch BME68x packageName=boschsensortec/Bosch-BME68x-Library
|
||||||
boschsensortec/BME68x Sensor Library@1.3.40408
|
https://github.com/boschsensortec/Bosch-BME68x-Library/archive/refs/tags/v1.3.40408.zip
|
||||||
|
|
||||||
; Environmental sensors without BSEC (saves ~3.5KB DRAM for original ESP32 targets)
|
; Environmental sensors without BSEC (saves ~3.5KB DRAM for original ESP32 targets)
|
||||||
[environmental_extra_no_bsec]
|
[environmental_extra_no_bsec]
|
||||||
lib_deps =
|
lib_deps =
|
||||||
${environmental_extra_common.lib_deps}
|
${environmental_extra_common.lib_deps}
|
||||||
# renovate: datasource=custom.pio depName=Adafruit_BME680 packageName=adafruit/library/Adafruit BME680 Library
|
# renovate: datasource=github-tags depName=Adafruit_BME680 packageName=adafruit/Adafruit_BME680
|
||||||
adafruit/Adafruit BME680 Library@2.0.6
|
https://github.com/adafruit/Adafruit_BME680/archive/refs/tags/2.0.6.zip
|
||||||
|
|||||||
@@ -21,8 +21,15 @@
|
|||||||
// How many messages are stored (RAM + flash).
|
// How many messages are stored (RAM + flash).
|
||||||
// Define -DMESSAGE_HISTORY_LIMIT=N in build_flags to control memory usage.
|
// Define -DMESSAGE_HISTORY_LIMIT=N in build_flags to control memory usage.
|
||||||
#ifndef MESSAGE_HISTORY_LIMIT
|
#ifndef MESSAGE_HISTORY_LIMIT
|
||||||
|
#if defined(ARCH_ESP32) && \
|
||||||
|
!(defined(CONFIG_IDF_TARGET_ESP32C3) || defined(CONFIG_IDF_TARGET_ESP32S3) || defined(CONFIG_IDF_TARGET_ESP32S2))
|
||||||
|
// Baseline ESP32 (non-PSRAM variants) has limited heap; reduce message history on resource-constrained builds.
|
||||||
|
// Override with -DMESSAGE_HISTORY_LIMIT=N if needed.
|
||||||
|
#define MESSAGE_HISTORY_LIMIT 10
|
||||||
|
#else
|
||||||
#define MESSAGE_HISTORY_LIMIT 20
|
#define MESSAGE_HISTORY_LIMIT 20
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
// Internal alias used everywhere in code – do NOT redefine elsewhere.
|
// Internal alias used everywhere in code – do NOT redefine elsewhere.
|
||||||
#define MAX_MESSAGES_SAVED MESSAGE_HISTORY_LIMIT
|
#define MAX_MESSAGES_SAVED MESSAGE_HISTORY_LIMIT
|
||||||
|
|||||||
@@ -1,10 +1,85 @@
|
|||||||
#include "concurrency/BinarySemaphorePosix.h"
|
#include "concurrency/BinarySemaphorePosix.h"
|
||||||
#include "configuration.h"
|
#include "configuration.h"
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
|
||||||
#ifndef HAS_FREE_RTOS
|
#ifndef HAS_FREE_RTOS
|
||||||
|
|
||||||
namespace concurrency
|
namespace concurrency
|
||||||
{
|
{
|
||||||
|
#ifdef ARCH_PORTDUINO
|
||||||
|
|
||||||
|
BinarySemaphorePosix::BinarySemaphorePosix()
|
||||||
|
{
|
||||||
|
if (pthread_mutex_init(&mutex, NULL) != 0) {
|
||||||
|
throw std::runtime_error("pthread_mutex_init failed");
|
||||||
|
}
|
||||||
|
if (pthread_cond_init(&cond, NULL) != 0) {
|
||||||
|
pthread_mutex_destroy(&mutex);
|
||||||
|
throw std::runtime_error("pthread_cond_init failed");
|
||||||
|
}
|
||||||
|
signaled = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
BinarySemaphorePosix::~BinarySemaphorePosix()
|
||||||
|
{
|
||||||
|
pthread_cond_destroy(&cond);
|
||||||
|
pthread_mutex_destroy(&mutex);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns false if we timed out
|
||||||
|
*/
|
||||||
|
bool BinarySemaphorePosix::take(uint32_t msec)
|
||||||
|
{
|
||||||
|
pthread_mutex_lock(&mutex);
|
||||||
|
|
||||||
|
if (!signaled) {
|
||||||
|
struct timespec ts;
|
||||||
|
clock_gettime(CLOCK_REALTIME, &ts);
|
||||||
|
|
||||||
|
ts.tv_sec += msec / 1000;
|
||||||
|
ts.tv_nsec += (msec % 1000) * 1000000L;
|
||||||
|
if (ts.tv_nsec >= 1000000000L) {
|
||||||
|
ts.tv_sec += 1;
|
||||||
|
ts.tv_nsec -= 1000000000L;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (!signaled) {
|
||||||
|
int rc = pthread_cond_timedwait(&cond, &mutex, &ts);
|
||||||
|
if (rc == ETIMEDOUT)
|
||||||
|
break;
|
||||||
|
if (rc != 0) {
|
||||||
|
// Some other error occurred
|
||||||
|
pthread_mutex_unlock(&mutex);
|
||||||
|
throw std::runtime_error("pthread_cond_timedwait failed: " + std::to_string(rc));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wasSignaled = signaled;
|
||||||
|
signaled = false; // consume the signal (binary semaphore)
|
||||||
|
|
||||||
|
pthread_mutex_unlock(&mutex);
|
||||||
|
return wasSignaled;
|
||||||
|
}
|
||||||
|
|
||||||
|
void BinarySemaphorePosix::give()
|
||||||
|
{
|
||||||
|
pthread_mutex_lock(&mutex);
|
||||||
|
signaled = true;
|
||||||
|
pthread_cond_signal(&cond);
|
||||||
|
pthread_mutex_unlock(&mutex);
|
||||||
|
}
|
||||||
|
|
||||||
|
IRAM_ATTR void BinarySemaphorePosix::giveFromISR(BaseType_t *pxHigherPriorityTaskWoken)
|
||||||
|
{
|
||||||
|
give();
|
||||||
|
if (pxHigherPriorityTaskWoken)
|
||||||
|
*pxHigherPriorityTaskWoken = true;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
|
||||||
BinarySemaphorePosix::BinarySemaphorePosix() {}
|
BinarySemaphorePosix::BinarySemaphorePosix() {}
|
||||||
|
|
||||||
@@ -22,7 +97,8 @@ bool BinarySemaphorePosix::take(uint32_t msec)
|
|||||||
void BinarySemaphorePosix::give() {}
|
void BinarySemaphorePosix::give() {}
|
||||||
|
|
||||||
IRAM_ATTR void BinarySemaphorePosix::giveFromISR(BaseType_t *pxHigherPriorityTaskWoken) {}
|
IRAM_ATTR void BinarySemaphorePosix::giveFromISR(BaseType_t *pxHigherPriorityTaskWoken) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
} // namespace concurrency
|
} // namespace concurrency
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -2,6 +2,10 @@
|
|||||||
|
|
||||||
#include "../freertosinc.h"
|
#include "../freertosinc.h"
|
||||||
|
|
||||||
|
#ifdef ARCH_PORTDUINO
|
||||||
|
#include <pthread.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace concurrency
|
namespace concurrency
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -9,7 +13,12 @@ namespace concurrency
|
|||||||
|
|
||||||
class BinarySemaphorePosix
|
class BinarySemaphorePosix
|
||||||
{
|
{
|
||||||
// SemaphoreHandle_t semaphore;
|
|
||||||
|
#ifdef ARCH_PORTDUINO
|
||||||
|
pthread_mutex_t mutex;
|
||||||
|
pthread_cond_t cond;
|
||||||
|
bool signaled;
|
||||||
|
#endif
|
||||||
|
|
||||||
public:
|
public:
|
||||||
BinarySemaphorePosix();
|
BinarySemaphorePosix();
|
||||||
@@ -27,4 +36,4 @@ class BinarySemaphorePosix
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
} // namespace concurrency
|
} // namespace concurrency
|
||||||
|
|||||||
@@ -202,7 +202,7 @@ void EInkParallelDisplay::display(void)
|
|||||||
|
|
||||||
// Get pointers to internal buffers
|
// Get pointers to internal buffers
|
||||||
uint8_t *cur = epaper->currentBuffer();
|
uint8_t *cur = epaper->currentBuffer();
|
||||||
uint8_t *prev = epaper->previousBuffer(); // may be NULL on first init
|
const uint8_t *prev = epaper->previousBuffer(); // may be NULL on first init
|
||||||
|
|
||||||
// Track changed row range while converting
|
// Track changed row range while converting
|
||||||
int newTop = h; // min changed row (initialized to out-of-range)
|
int newTop = h; // min changed row (initialized to out-of-range)
|
||||||
|
|||||||
@@ -422,6 +422,17 @@ void drawTextMessageFrame(OLEDDisplay *display, OLEDDisplayUiState *state, int16
|
|||||||
std::vector<bool> isMine; // track alignment
|
std::vector<bool> isMine; // track alignment
|
||||||
std::vector<bool> isHeader; // track header lines
|
std::vector<bool> isHeader; // track header lines
|
||||||
std::vector<AckStatus> ackForLine;
|
std::vector<AckStatus> ackForLine;
|
||||||
|
// Hard limit on total cached lines to prevent unbounded growth from a single long message.
|
||||||
|
// Reserve to the actual cache cap up front, because a single message can expand to many more
|
||||||
|
// wrapped display lines than a small per-message estimate would predict. For a display
|
||||||
|
// rendering only ~5-30 lines at a time, caching more than this limit wastes heap. Stop
|
||||||
|
// appending once we reach MAX_CACHED_LINES to prevent a single message from blowing out the
|
||||||
|
// heap.
|
||||||
|
constexpr size_t MAX_CACHED_LINES = 100U; // ~5-6KB for std::string overhead on 32-bit (if each ~50-60 bytes avg)
|
||||||
|
allLines.reserve(MAX_CACHED_LINES);
|
||||||
|
isMine.reserve(MAX_CACHED_LINES);
|
||||||
|
isHeader.reserve(MAX_CACHED_LINES);
|
||||||
|
ackForLine.reserve(MAX_CACHED_LINES);
|
||||||
|
|
||||||
for (auto it = filtered.rbegin(); it != filtered.rend(); ++it) {
|
for (auto it = filtered.rbegin(); it != filtered.rend(); ++it) {
|
||||||
const auto &m = *it;
|
const auto &m = *it;
|
||||||
@@ -565,16 +576,23 @@ void drawTextMessageFrame(OLEDDisplay *display, OLEDDisplayUiState *state, int16
|
|||||||
|
|
||||||
int wrapWidth = mine ? rightTextWidth : leftTextWidth;
|
int wrapWidth = mine ? rightTextWidth : leftTextWidth;
|
||||||
std::vector<std::string> wrapped = generateLines(display, "", msgText, wrapWidth);
|
std::vector<std::string> wrapped = generateLines(display, "", msgText, wrapWidth);
|
||||||
|
// Per-message wrap-line limit: even if wrapping produces many lines, cap them to prevent
|
||||||
|
// a single long message from consuming most or all of the cache.
|
||||||
|
constexpr size_t MAX_WRAPPED_LINES_PER_MSG = 20U;
|
||||||
|
size_t wrappedCount = 0;
|
||||||
for (auto &ln : wrapped) {
|
for (auto &ln : wrapped) {
|
||||||
allLines.push_back(ln);
|
if (allLines.size() >= MAX_CACHED_LINES || wrappedCount >= MAX_WRAPPED_LINES_PER_MSG)
|
||||||
|
break; // Cache limit or per-message limit reached; stop adding lines from this message
|
||||||
|
allLines.emplace_back(std::move(ln));
|
||||||
isMine.push_back(mine);
|
isMine.push_back(mine);
|
||||||
isHeader.push_back(false);
|
isHeader.push_back(false);
|
||||||
ackForLine.push_back(AckStatus::NONE);
|
ackForLine.push_back(AckStatus::NONE);
|
||||||
|
++wrappedCount;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cache lines and heights
|
// Cache lines and heights
|
||||||
cachedLines = allLines;
|
cachedLines.swap(allLines);
|
||||||
cachedHeights = calculateLineHeights(cachedLines, emotes, isHeader);
|
cachedHeights = calculateLineHeights(cachedLines, emotes, isHeader);
|
||||||
|
|
||||||
std::vector<MessageBlock> blocks = buildMessageBlocks(isHeader, isMine);
|
std::vector<MessageBlock> blocks = buildMessageBlocks(isHeader, isMine);
|
||||||
|
|||||||
@@ -121,7 +121,6 @@ void CardputerKeyboard::pressed(uint8_t key)
|
|||||||
modifierFlag = 0;
|
modifierFlag = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t next_key = 0;
|
|
||||||
int row = (key - 1) / 10;
|
int row = (key - 1) / 10;
|
||||||
int col = (key - 1) % 10;
|
int col = (key - 1) % 10;
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,3 @@ board_build.f_cpu = 240000000L
|
|||||||
upload_protocol = esptool
|
upload_protocol = esptool
|
||||||
;upload_port = /dev/ttyUSB0
|
;upload_port = /dev/ttyUSB0
|
||||||
upload_speed = 460800
|
upload_speed = 460800
|
||||||
lib_deps =
|
|
||||||
${esp32_base.lib_deps}
|
|
||||||
# renovate: datasource=custom.pio depName=NeoPixel packageName=adafruit/library/Adafruit NeoPixel
|
|
||||||
adafruit/Adafruit NeoPixel@1.15.4
|
|
||||||
|
|||||||
@@ -5,6 +5,3 @@ build_flags =
|
|||||||
${esp32c3_base.build_flags}
|
${esp32c3_base.build_flags}
|
||||||
-D HELTEC_HRU_3601
|
-D HELTEC_HRU_3601
|
||||||
-I variants/esp32c3/heltec_hru_3601
|
-I variants/esp32c3/heltec_hru_3601
|
||||||
lib_deps = ${esp32c3_base.lib_deps}
|
|
||||||
# renovate: datasource=custom.pio depName=NeoPixel packageName=adafruit/library/Adafruit NeoPixel
|
|
||||||
adafruit/Adafruit NeoPixel@1.15.4
|
|
||||||
|
|||||||
@@ -23,8 +23,6 @@ build_unflags =
|
|||||||
-D HAS_WIFI
|
-D HAS_WIFI
|
||||||
lib_deps =
|
lib_deps =
|
||||||
${esp32c6_base.lib_deps}
|
${esp32c6_base.lib_deps}
|
||||||
# renovate: datasource=custom.pio depName=NeoPixel packageName=adafruit/library/Adafruit NeoPixel
|
|
||||||
adafruit/Adafruit NeoPixel@1.15.4
|
|
||||||
# renovate: datasource=custom.pio depName=NimBLE-Arduino packageName=h2zero/library/NimBLE-Arduino
|
# renovate: datasource=custom.pio depName=NimBLE-Arduino packageName=h2zero/library/NimBLE-Arduino
|
||||||
h2zero/NimBLE-Arduino@2.3.7
|
h2zero/NimBLE-Arduino@2.3.7
|
||||||
build_flags =
|
build_flags =
|
||||||
|
|||||||
@@ -12,8 +12,6 @@ lib_deps =
|
|||||||
${esp32s3_base.lib_deps}
|
${esp32s3_base.lib_deps}
|
||||||
# renovate: datasource=custom.pio depName=GxEPD2 packageName=zinggjm/library/GxEPD2
|
# renovate: datasource=custom.pio depName=GxEPD2 packageName=zinggjm/library/GxEPD2
|
||||||
zinggjm/GxEPD2@1.6.8
|
zinggjm/GxEPD2@1.6.8
|
||||||
# renovate: datasource=custom.pio depName=NeoPixel packageName=adafruit/library/Adafruit NeoPixel
|
|
||||||
adafruit/Adafruit NeoPixel@1.15.4
|
|
||||||
build_unflags =
|
build_unflags =
|
||||||
${esp32s3_base.build_unflags}
|
${esp32s3_base.build_unflags}
|
||||||
-DARDUINO_USB_MODE=1
|
-DARDUINO_USB_MODE=1
|
||||||
|
|||||||
@@ -8,10 +8,6 @@ board_build.f_cpu = 240000000L
|
|||||||
upload_protocol = esptool
|
upload_protocol = esptool
|
||||||
;upload_port = /dev/ttyACM0
|
;upload_port = /dev/ttyACM0
|
||||||
upload_speed = 921600
|
upload_speed = 921600
|
||||||
lib_deps =
|
|
||||||
${esp32s3_base.lib_deps}
|
|
||||||
# renovate: datasource=custom.pio depName=NeoPixel packageName=adafruit/library/Adafruit NeoPixel
|
|
||||||
adafruit/Adafruit NeoPixel@1.15.4
|
|
||||||
build_unflags =
|
build_unflags =
|
||||||
${esp32s3_base.build_unflags}
|
${esp32s3_base.build_unflags}
|
||||||
-DARDUINO_USB_MODE=1
|
-DARDUINO_USB_MODE=1
|
||||||
|
|||||||
@@ -24,5 +24,3 @@ build_flags = ${esp32s3_base.build_flags}
|
|||||||
lib_deps = ${esp32s3_base.lib_deps}
|
lib_deps = ${esp32s3_base.lib_deps}
|
||||||
# renovate: datasource=custom.pio depName=GxEPD2 packageName=zinggjm/library/GxEPD2
|
# renovate: datasource=custom.pio depName=GxEPD2 packageName=zinggjm/library/GxEPD2
|
||||||
zinggjm/GxEPD2@1.6.8
|
zinggjm/GxEPD2@1.6.8
|
||||||
# renovate: datasource=custom.pio depName=NeoPixel packageName=adafruit/library/Adafruit NeoPixel
|
|
||||||
adafruit/Adafruit NeoPixel@1.15.4
|
|
||||||
|
|||||||
@@ -8,7 +8,3 @@ build_flags =
|
|||||||
-I variants/esp32s3/heltec_sensor_hub
|
-I variants/esp32s3/heltec_sensor_hub
|
||||||
-D HELTEC_SENSOR_HUB
|
-D HELTEC_SENSOR_HUB
|
||||||
-ULED_BUILTIN
|
-ULED_BUILTIN
|
||||||
|
|
||||||
lib_deps = ${esp32s3_base.lib_deps}
|
|
||||||
# renovate: datasource=custom.pio depName=NeoPixel packageName=adafruit/library/Adafruit NeoPixel
|
|
||||||
adafruit/Adafruit NeoPixel@1.15.4
|
|
||||||
|
|||||||
@@ -20,5 +20,5 @@ build_flags =
|
|||||||
lib_deps =
|
lib_deps =
|
||||||
${esp32s3_base.lib_deps}
|
${esp32s3_base.lib_deps}
|
||||||
# renovate: datasource=git-refs depName=meshtastic-st7789 packageName=https://github.com/meshtastic/st7789 gitBranch=main
|
# renovate: datasource=git-refs depName=meshtastic-st7789 packageName=https://github.com/meshtastic/st7789 gitBranch=main
|
||||||
https://github.com/meshtastic/st7789/archive/9ee76d6b18b9a8f45a2c5cae06b1134a587691eb.zip
|
https://github.com/meshtastic/st7789/archive/a787beea5c6c8f864ba6787eb432bbefc575e6ad.zip
|
||||||
upload_speed = 921600
|
upload_speed = 921600
|
||||||
|
|||||||
@@ -16,12 +16,10 @@ build_src_filter =
|
|||||||
lib_deps =
|
lib_deps =
|
||||||
${esp32s3_base.lib_deps}
|
${esp32s3_base.lib_deps}
|
||||||
# renovate: datasource=git-refs depName=meshtastic-st7789 packageName=https://github.com/meshtastic/st7789 gitBranch=main
|
# renovate: datasource=git-refs depName=meshtastic-st7789 packageName=https://github.com/meshtastic/st7789 gitBranch=main
|
||||||
https://github.com/meshtastic/st7789/archive/9ee76d6b18b9a8f45a2c5cae06b1134a587691eb.zip
|
https://github.com/meshtastic/st7789/archive/a787beea5c6c8f864ba6787eb432bbefc575e6ad.zip
|
||||||
# renovate: datasource=github-tags depName=pschatzmann_arduino-audio-driver packageName=pschatzmann/arduino-audio-driver
|
# renovate: datasource=github-tags depName=pschatzmann_arduino-audio-driver packageName=pschatzmann/arduino-audio-driver
|
||||||
https://github.com/pschatzmann/arduino-audio-driver/archive/v0.2.1.zip
|
https://github.com/pschatzmann/arduino-audio-driver/archive/v0.2.1.zip
|
||||||
# renovate: datasource=git-refs depName=ESP8266Audio packageName=https://github.com/meshtastic/ESP8266Audio gitBranch=meshtastic-2.0.0-dacfix
|
# renovate: datasource=git-refs depName=ESP8266Audio packageName=https://github.com/meshtastic/ESP8266Audio gitBranch=meshtastic-2.0.0-dacfix
|
||||||
https://github.com/meshtastic/ESP8266Audio/archive/343024632ee78d6216907b2353fc943a62422d80.zip
|
https://github.com/meshtastic/ESP8266Audio/archive/343024632ee78d6216907b2353fc943a62422d80.zip
|
||||||
# renovate: datasource=custom.pio depName=ESP8266SAM packageName=earlephilhower/library/ESP8266SAM
|
# renovate: datasource=custom.pio depName=ESP8266SAM packageName=earlephilhower/library/ESP8266SAM
|
||||||
earlephilhower/ESP8266SAM@1.1.0
|
earlephilhower/ESP8266SAM@1.1.0
|
||||||
# renovate: datasource=custom.pio depName=NeoPixel packageName=adafruit/library/Adafruit NeoPixel
|
|
||||||
adafruit/Adafruit NeoPixel@1.15.4
|
|
||||||
|
|||||||
@@ -98,7 +98,7 @@ void setupNicheGraphics()
|
|||||||
buttons->setTwoWayRockerPressHandlers(
|
buttons->setTwoWayRockerPressHandlers(
|
||||||
[inkhud]() {
|
[inkhud]() {
|
||||||
bool systemHandlingInput = false;
|
bool systemHandlingInput = false;
|
||||||
for (InkHUD::SystemApplet *sa : inkhud->systemApplets) {
|
for (const InkHUD::SystemApplet *sa : inkhud->systemApplets) {
|
||||||
if (sa->handleInput) {
|
if (sa->handleInput) {
|
||||||
systemHandlingInput = true;
|
systemHandlingInput = true;
|
||||||
break;
|
break;
|
||||||
@@ -112,7 +112,7 @@ void setupNicheGraphics()
|
|||||||
},
|
},
|
||||||
[inkhud]() {
|
[inkhud]() {
|
||||||
bool systemHandlingInput = false;
|
bool systemHandlingInput = false;
|
||||||
for (InkHUD::SystemApplet *sa : inkhud->systemApplets) {
|
for (const InkHUD::SystemApplet *sa : inkhud->systemApplets) {
|
||||||
if (sa->handleInput) {
|
if (sa->handleInput) {
|
||||||
systemHandlingInput = true;
|
systemHandlingInput = true;
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -40,8 +40,6 @@ lib_deps = ${esp32s3_base.lib_deps}
|
|||||||
lovyan03/LovyanGFX@1.2.19
|
lovyan03/LovyanGFX@1.2.19
|
||||||
# TODO renovate https://gitlab.com/hamishcunningham/unphonelibrary#meshtastic@9.0.0
|
# TODO renovate https://gitlab.com/hamishcunningham/unphonelibrary#meshtastic@9.0.0
|
||||||
https://gitlab.com/hamishcunningham/unphonelibrary/-/archive/meshtastic/unphonelibrary-meshtastic.zip
|
https://gitlab.com/hamishcunningham/unphonelibrary/-/archive/meshtastic/unphonelibrary-meshtastic.zip
|
||||||
# renovate: datasource=custom.pio depName=NeoPixel packageName=adafruit/library/Adafruit NeoPixel
|
|
||||||
adafruit/Adafruit NeoPixel@1.15.4
|
|
||||||
|
|
||||||
[env:unphone-tft]
|
[env:unphone-tft]
|
||||||
board_level = extra
|
board_level = extra
|
||||||
|
|||||||
@@ -34,8 +34,8 @@ lib_deps =
|
|||||||
adafruit/Adafruit seesaw Library@1.7.9
|
adafruit/Adafruit seesaw Library@1.7.9
|
||||||
# renovate: datasource=git-refs depName=RAK12034-BMX160 packageName=https://github.com/RAKWireless/RAK12034-BMX160 gitBranch=main
|
# renovate: datasource=git-refs depName=RAK12034-BMX160 packageName=https://github.com/RAKWireless/RAK12034-BMX160 gitBranch=main
|
||||||
https://github.com/RAKWireless/RAK12034-BMX160/archive/dcead07ffa267d3c906e9ca4a1330ab989e957e2.zip
|
https://github.com/RAKWireless/RAK12034-BMX160/archive/dcead07ffa267d3c906e9ca4a1330ab989e957e2.zip
|
||||||
# renovate: datasource=custom.pio depName=Adafruit_BME680 packageName=adafruit/library/Adafruit BME680 Library
|
# renovate: datasource=github-tags depName=Adafruit_BME680 packageName=adafruit/Adafruit_BME680
|
||||||
adafruit/Adafruit BME680 Library@2.0.6
|
https://github.com/adafruit/Adafruit_BME680/archive/refs/tags/2.0.6.zip
|
||||||
|
|
||||||
build_flags =
|
build_flags =
|
||||||
${arduino_base.build_flags}
|
${arduino_base.build_flags}
|
||||||
@@ -59,4 +59,5 @@ build_flags =
|
|||||||
lib_ignore =
|
lib_ignore =
|
||||||
Adafruit NeoPixel
|
Adafruit NeoPixel
|
||||||
Adafruit ST7735 and ST7789 Library
|
Adafruit ST7735 and ST7789 Library
|
||||||
|
Adafruit SSD1306
|
||||||
SD
|
SD
|
||||||
|
|||||||
@@ -23,4 +23,4 @@ build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/heltec_
|
|||||||
lib_deps =
|
lib_deps =
|
||||||
${nrf52840_base.lib_deps}
|
${nrf52840_base.lib_deps}
|
||||||
# renovate: datasource=git-refs depName=meshtastic-st7789 packageName=https://github.com/meshtastic/st7789 gitBranch=main
|
# renovate: datasource=git-refs depName=meshtastic-st7789 packageName=https://github.com/meshtastic/st7789 gitBranch=main
|
||||||
https://github.com/meshtastic/st7789/archive/9ee76d6b18b9a8f45a2c5cae06b1134a587691eb.zip
|
https://github.com/meshtastic/st7789/archive/a787beea5c6c8f864ba6787eb432bbefc575e6ad.zip
|
||||||
|
|||||||
@@ -132,4 +132,4 @@ build_flags = ${heltec_mesh_solar_base.build_flags}
|
|||||||
lib_deps =
|
lib_deps =
|
||||||
${heltec_mesh_solar_base.lib_deps}
|
${heltec_mesh_solar_base.lib_deps}
|
||||||
# renovate: datasource=git-refs depName=meshtastic-st7789 packageName=https://github.com/meshtastic/st7789 gitBranch=main
|
# renovate: datasource=git-refs depName=meshtastic-st7789 packageName=https://github.com/meshtastic/st7789 gitBranch=main
|
||||||
https://github.com/meshtastic/st7789/archive/9ee76d6b18b9a8f45a2c5cae06b1134a587691eb.zip
|
https://github.com/meshtastic/st7789/archive/a787beea5c6c8f864ba6787eb432bbefc575e6ad.zip
|
||||||
|
|||||||
Reference in New Issue
Block a user