Compare commits
12
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
29a7f74e97 | ||
|
|
523bc584fd | ||
|
|
6da131f43c | ||
|
|
bb491af421 | ||
|
|
fb90fdcee2 | ||
|
|
ffe88feddc | ||
|
|
e55431ad94 | ||
|
|
5432016c29 | ||
|
|
cf81631026 | ||
|
|
46160c64d0 | ||
|
|
91b7d53cdd | ||
|
|
7a3fae61e2 |
No files matched your search
@@ -0,0 +1,192 @@
|
||||
name: Build and Release OpenMQTTGateway Firmware
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- development
|
||||
tags:
|
||||
- '*'
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
env:
|
||||
# PlatformIO environment to build (see environments.ini)
|
||||
PIO_ENV: heltec-rtl_433
|
||||
# Chip / flash layout used to create the merged (factory) image
|
||||
ESP_CHIP: esp32
|
||||
BOOTLOADER_OFFSET: '0x1000'
|
||||
|
||||
jobs:
|
||||
build-and-release:
|
||||
name: Build Firmware & Publish Gitea Release
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Cache PlatformIO packages
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: |
|
||||
~/.platformio
|
||||
.pio/libdeps
|
||||
key: ${{ runner.os }}-pio-${{ hashFiles('platformio.ini', 'environments.ini') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-pio-
|
||||
|
||||
- name: Install Python & PlatformIO
|
||||
run: |
|
||||
if ! python3 -m venv /tmp/pio-venv >/dev/null 2>&1; then
|
||||
rm -rf /tmp/pio-venv
|
||||
apt-get update && apt-get install -y python3 python3-venv python3-pip curl git
|
||||
python3 -m venv /tmp/pio-venv
|
||||
fi
|
||||
/tmp/pio-venv/bin/pip install --upgrade pip
|
||||
/tmp/pio-venv/bin/pip install -U platformio setuptools
|
||||
echo "/tmp/pio-venv/bin" >> "$GITHUB_PATH"
|
||||
|
||||
- name: Determine version
|
||||
id: version
|
||||
run: |
|
||||
SHORT_SHA="${GITHUB_SHA::7}"
|
||||
if [ "${GITHUB_REF_TYPE}" = "tag" ]; then
|
||||
TAG_NAME="${GITHUB_REF_NAME}"
|
||||
else
|
||||
BASE_VERSION="$(git describe --tags --abbrev=0 2>/dev/null || echo v1.7.0)"
|
||||
TAG_NAME="${BASE_VERSION}-b${GITHUB_RUN_NUMBER}-${SHORT_SHA}"
|
||||
fi
|
||||
echo "tag_name=${TAG_NAME}" >> "$GITHUB_OUTPUT"
|
||||
echo "short_sha=${SHORT_SHA}" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Set version tag in sources
|
||||
env:
|
||||
TAG_NAME: ${{ steps.version.outputs.tag_name }}
|
||||
run: |
|
||||
sed -i "s/version_tag/${TAG_NAME}/g" main/User_config.h scripts/latest_version.json
|
||||
|
||||
- name: Build OpenMQTTGateway Firmware (${{ env.PIO_ENV }})
|
||||
run: |
|
||||
pio run -e "${PIO_ENV}"
|
||||
|
||||
- name: Prepare Release Artifacts
|
||||
env:
|
||||
TAG_NAME: ${{ steps.version.outputs.tag_name }}
|
||||
run: |
|
||||
BUILD_DIR=".pio/build/${PIO_ENV}"
|
||||
PREFIX="OpenMQTTGateway-${PIO_ENV}-${TAG_NAME}"
|
||||
BOOT_APP0="${HOME}/.platformio/packages/framework-arduinoespressif32/tools/partitions/boot_app0.bin"
|
||||
|
||||
mkdir -p dist
|
||||
# OTA / update image
|
||||
cp "${BUILD_DIR}/firmware.bin" dist/firmware.bin
|
||||
cp "${BUILD_DIR}/firmware.bin" "dist/${PREFIX}-firmware.bin"
|
||||
cp "${BUILD_DIR}/firmware.elf" "dist/${PREFIX}-firmware.elf"
|
||||
cp "${BUILD_DIR}/partitions.bin" "dist/${PREFIX}-partitions.bin"
|
||||
cp "${BUILD_DIR}/bootloader.bin" "dist/${PREFIX}-bootloader.bin"
|
||||
cp "${BOOT_APP0}" "dist/${PREFIX}-boot_app0.bin"
|
||||
|
||||
# Merged factory image (flash at 0x0 on an erased chip)
|
||||
pio pkg exec -p tool-esptoolpy -- esptool.py --chip "${ESP_CHIP}" merge_bin \
|
||||
-o "dist/${PREFIX}-factory.bin" \
|
||||
"${BOOTLOADER_OFFSET}" "${BUILD_DIR}/bootloader.bin" \
|
||||
0x8000 "${BUILD_DIR}/partitions.bin" \
|
||||
0xe000 "${BOOT_APP0}" \
|
||||
0x10000 "${BUILD_DIR}/firmware.bin"
|
||||
|
||||
(cd dist && sha256sum * > SHA256SUMS.txt)
|
||||
ls -lA dist
|
||||
|
||||
- name: Create Gitea Release and Upload Binaries
|
||||
env:
|
||||
GITEA_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
TAG_NAME: ${{ steps.version.outputs.tag_name }}
|
||||
SHORT_SHA: ${{ steps.version.outputs.short_sha }}
|
||||
run: |
|
||||
python3 - << 'EOF'
|
||||
import json
|
||||
import os
|
||||
import subprocess
|
||||
import urllib.request
|
||||
import urllib.error
|
||||
|
||||
server_url = os.environ["GITHUB_SERVER_URL"].rstrip("/")
|
||||
repo = os.environ["GITHUB_REPOSITORY"]
|
||||
token = os.environ["GITEA_TOKEN"]
|
||||
tag_name = os.environ["TAG_NAME"]
|
||||
sha = os.environ["GITHUB_SHA"]
|
||||
short_sha = os.environ["SHORT_SHA"]
|
||||
pio_env = os.environ["PIO_ENV"]
|
||||
bootloader_offset = os.environ["BOOTLOADER_OFFSET"]
|
||||
|
||||
api_base = f"{server_url}/api/v1/repos/{repo}"
|
||||
headers = {
|
||||
"Authorization": f"token {token}",
|
||||
"Content-Type": "application/json",
|
||||
"Accept": "application/json",
|
||||
}
|
||||
|
||||
release_notes = (
|
||||
f"Automated OpenMQTTGateway firmware build.\n\n"
|
||||
f"- **Environment:** `{pio_env}`\n"
|
||||
f"- **Commit:** `{short_sha}`\n"
|
||||
f"- **OTA update:** Upload `firmware.bin` via the WebUI / OTA.\n"
|
||||
f"- **Fresh install:** Flash `*-factory.bin` at offset `0x0`, or flash "
|
||||
f"`*-bootloader.bin` @ `{bootloader_offset}`, `*-partitions.bin` @ `0x8000`, "
|
||||
f"`*-boot_app0.bin` @ `0xe000` and `*-firmware.bin` @ `0x10000`."
|
||||
)
|
||||
|
||||
# Check if a release for this tag already exists
|
||||
release_id = None
|
||||
existing_assets = {}
|
||||
req = urllib.request.Request(f"{api_base}/releases/tags/{tag_name}", headers=headers)
|
||||
try:
|
||||
with urllib.request.urlopen(req) as resp:
|
||||
data = json.loads(resp.read().decode("utf-8"))
|
||||
release_id = data["id"]
|
||||
existing_assets = {a["name"]: a["id"] for a in data.get("assets", [])}
|
||||
print(f"Found existing release ID {release_id} for tag {tag_name}")
|
||||
except urllib.error.HTTPError as e:
|
||||
if e.code != 404:
|
||||
raise
|
||||
|
||||
# Create a new release if none exists
|
||||
if release_id is None:
|
||||
payload = json.dumps({
|
||||
"tag_name": tag_name,
|
||||
"target_commitish": sha,
|
||||
"name": f"OpenMQTTGateway {tag_name} ({pio_env})",
|
||||
"body": release_notes,
|
||||
"draft": False,
|
||||
"prerelease": os.environ.get("GITHUB_REF_TYPE") != "tag",
|
||||
}).encode("utf-8")
|
||||
req = urllib.request.Request(f"{api_base}/releases", data=payload, headers=headers, method="POST")
|
||||
with urllib.request.urlopen(req) as resp:
|
||||
data = json.loads(resp.read().decode("utf-8"))
|
||||
release_id = data["id"]
|
||||
print(f"Created release ID {release_id} for tag {tag_name}")
|
||||
|
||||
# Upload firmware binaries in dist/
|
||||
for filename in sorted(os.listdir("dist")):
|
||||
if filename in existing_assets:
|
||||
del_req = urllib.request.Request(
|
||||
f"{api_base}/releases/{release_id}/assets/{existing_assets[filename]}",
|
||||
headers=headers,
|
||||
method="DELETE",
|
||||
)
|
||||
urllib.request.urlopen(del_req).close()
|
||||
filepath = os.path.join("dist", filename)
|
||||
print(f"Uploading {filename}...")
|
||||
subprocess.run([
|
||||
"curl", "--fail", "-sS", "-X", "POST",
|
||||
"-H", f"Authorization: token {token}",
|
||||
"-F", f"attachment=@{filepath}",
|
||||
f"{api_base}/releases/{release_id}/assets?name={filename}"
|
||||
], check=True)
|
||||
print(f"Uploaded {filename} successfully.")
|
||||
EOF
|
||||
|
||||
@@ -1,126 +0,0 @@
|
||||
name: Build
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
environments:
|
||||
- "rfbridge"
|
||||
- "rfbridge-direct"
|
||||
- "esp32dev-all-test"
|
||||
- "esp32dev-rf"
|
||||
- "esp32dev-pilight-cc1101"
|
||||
- "esp32dev-somfy-cc1101"
|
||||
- "esp32dev-pilight-somfy-cc1101"
|
||||
- "esp32dev-weatherstation"
|
||||
- "esp32dev-gf-sun-inverter"
|
||||
- "esp32dev-ir"
|
||||
- "esp32dev-ble"
|
||||
- "esp32dev-ble-mqtt-undecoded"
|
||||
- "esp32dev-ble-aws"
|
||||
- "esp32feather-ble"
|
||||
- "esp32-lolin32lite-ble"
|
||||
- "esp32-olimex-gtw-ble-eth"
|
||||
- "esp32-olimex-gtw-ble-poe"
|
||||
- "esp32-olimex-gtw-ble-poe-iso"
|
||||
- "esp32-wt32-eth01-ble-eth"
|
||||
- "esp32-olimex-gtw-ble-wifi"
|
||||
- "esp32-m5stick-ble"
|
||||
- "esp32-m5stack-ble"
|
||||
- "esp32-m5tough-ble"
|
||||
- "esp32-m5stick-c-ble"
|
||||
- "esp32-m5stick-cp-ble"
|
||||
- "esp32s3-atomS3U"
|
||||
- "esp32-m5atom-matrix"
|
||||
- "esp32-m5atom-lite"
|
||||
- "esp32dev-rtl_433"
|
||||
- "esp32doitv1-aithinker-r01-sx1278"
|
||||
- "heltec-rtl_433"
|
||||
- "heltec-rtl_433-fsk"
|
||||
- "heltec-ble"
|
||||
- "lilygo-rtl_433"
|
||||
- "lilygo-rtl_433-fsk"
|
||||
- "lilygo-ble"
|
||||
- "esp32dev-multi_receiver"
|
||||
- "esp32dev-multi_receiver-pilight"
|
||||
- "tinypico-ble"
|
||||
- "ttgo-lora32-v1"
|
||||
- "ttgo-lora32-v21"
|
||||
- "ttgo-t-beam"
|
||||
- "heltec-wifi-lora-32"
|
||||
- "shelly-plus1"
|
||||
- "nodemcuv2-all-test"
|
||||
- "nodemcuv2-fastled-test"
|
||||
- "nodemcuv2-2g"
|
||||
- "nodemcuv2-ir"
|
||||
- "nodemcuv2-rs232"
|
||||
- "avatto-bakeey-ir"
|
||||
- "nodemcuv2-rf"
|
||||
- "nodemcuv2-rf-cc1101"
|
||||
- "nodemcuv2-somfy-cc1101"
|
||||
- "manual-wifi-test"
|
||||
- "nodemcuv2-mqtt-fw-test"
|
||||
- "rf-wifi-gateway"
|
||||
- "nodemcuv2-rf2"
|
||||
- "nodemcuv2-rf2-cc1101"
|
||||
- "nodemcuv2-pilight"
|
||||
- "nodemcuv2-weatherstation"
|
||||
- "sonoff-basic"
|
||||
- "sonoff-basic-rfr3"
|
||||
- "atmega-all-test"
|
||||
- "uno-rf"
|
||||
- "uno-fastled"
|
||||
- "esp32dev-ble-datatest"
|
||||
- "esp32s3-dev-c1-ble"
|
||||
- "esp32c3-dev-m1-ble"
|
||||
- "airm2m_core_esp32c3"
|
||||
- "esp32c3_lolin_mini"
|
||||
- "esp32c3-m5stamp"
|
||||
- "thingpulse-espgateway"
|
||||
- "theengs-bridge"
|
||||
runs-on: ubuntu-latest
|
||||
name: Build with PlatformIO
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: "3.x"
|
||||
- name: Install platformio
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install platformio
|
||||
- name: Extract ESP32 platform version from platformio.ini
|
||||
run: |
|
||||
ESP32_VERSION=$(grep 'esp32_platform\s*=' platformio.ini | cut -d'@' -f2 | tr -d '[:space:]')
|
||||
echo "ESP32_PLATFORM_VERSION=${ESP32_VERSION}" >> $GITHUB_ENV
|
||||
- name: Run PlatformIO
|
||||
run: platformio run -e ${{ matrix.environments }}
|
||||
- name: Upload Assets
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: ${{ matrix.environments }}
|
||||
path: |
|
||||
.pio/build/*/firmware.bin
|
||||
.pio/build/*/partitions.bin
|
||||
retention-days: 7
|
||||
|
||||
documentation:
|
||||
runs-on: ubuntu-latest
|
||||
name: Create the documentation
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Set up Node.js
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: "14.x"
|
||||
- name: Download Common Config
|
||||
run: |
|
||||
curl -o docs/.vuepress/public/commonConfig.js https://www.theengs.io/commonConfig.js
|
||||
- name: Install build dependencies
|
||||
run: npm install
|
||||
- name: Build documentation
|
||||
run: npm run docs:build
|
||||
@@ -1,67 +0,0 @@
|
||||
name: Build binaries, docs and publish to dev folder
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '0 0 * * *'
|
||||
jobs:
|
||||
build-upload:
|
||||
runs-on: ubuntu-latest
|
||||
if: github.repository_owner == '1technophile'
|
||||
name: Build and upload Assets to Release
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: benjlevesque/short-sha@v2.1
|
||||
id: short-sha
|
||||
with:
|
||||
length: 6
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: "3.7"
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install platformio requests shutils
|
||||
npm install
|
||||
- name: Set sha tag
|
||||
run: |
|
||||
sed -i "s/version_tag/${{ steps.short-sha.outputs.sha }}/g" main/User_config.h scripts/latest_version_dev.json
|
||||
sed -i "s/version_tag/DEVELOPMENT SHA:${{ steps.short-sha.outputs.sha }} TEST ONLY/g" docs/.vuepress/config.js
|
||||
sed -i "s|base: '/'|base: '/dev/'|g" docs/.vuepress/config.js
|
||||
- name: Extract ESP32 platform version from platformio.ini
|
||||
run: |
|
||||
ESP32_VERSION=$(grep 'esp32_platform\s*=' platformio.ini | cut -d'@' -f2 | tr -d '[:space:]')
|
||||
echo "ESP32_PLATFORM_VERSION=${ESP32_VERSION}" >> $GITHUB_ENV
|
||||
- name: Run PlatformIO
|
||||
run: |
|
||||
export PLATFORMIO_BUILD_FLAGS="'-DDEVELOPMENTOTA=true'"
|
||||
platformio run
|
||||
- name: Prepare Release Assets
|
||||
run: |
|
||||
sudo apt install rename
|
||||
./scripts/prepare_deploy.sh
|
||||
- name: Set up Node.js
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: "14.x"
|
||||
- name: Download Common Config
|
||||
run: |
|
||||
curl -o docs/.vuepress/public/commonConfig.js https://www.theengs.io/commonConfig.js
|
||||
- name: Build documentation
|
||||
run: |
|
||||
python ./scripts/gen_wu.py --dev
|
||||
npm run docs:build
|
||||
- name: Deploy to GitHub Pages
|
||||
uses: peaceiris/actions-gh-pages@v3
|
||||
with:
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
publish_dir: ./docs/.vuepress/dist
|
||||
destination_dir: dev
|
||||
cname: docs.openmqttgateway.com
|
||||
- name: Running Page Speed Insights
|
||||
uses: jakepartusch/psi-action@v1.3
|
||||
id: psi
|
||||
with:
|
||||
url: "https://docs.openmqttgateway.com/dev/"
|
||||
threshold: 70
|
||||
key: ${{ secrets.APIKEY }}
|
||||
@@ -1,16 +0,0 @@
|
||||
name: Check Code Format
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Check main format
|
||||
uses: DoozyX/clang-format-lint-action@v0.6
|
||||
with:
|
||||
source: "./main"
|
||||
extensions: "h,ino"
|
||||
clangFormatVersion: 9
|
||||
@@ -1,45 +0,0 @@
|
||||
name: Create and publish documentation
|
||||
on:
|
||||
workflow_dispatch:
|
||||
workflow_call:
|
||||
jobs:
|
||||
documentation:
|
||||
runs-on: ubuntu-latest
|
||||
name: Create the documentation and deploy it to GitHub Pages
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Set up Node.js
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: "14.x"
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: "3.7"
|
||||
- name: Install build dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install requests pandas markdown pytablereader tabulate
|
||||
npm install
|
||||
- name: Download Common Config
|
||||
run: |
|
||||
curl -o docs/.vuepress/public/commonConfig.js https://www.theengs.io/commonConfig.js
|
||||
- name: get lastest release tag
|
||||
id: last_release
|
||||
uses: InsonusK/get-latest-release@v1.0.1
|
||||
with:
|
||||
myToken: ${{ github.token }}
|
||||
view_top: 1
|
||||
- name: Set version tag from git
|
||||
run: sed -i "s/version_tag/${{steps.last_release.outputs.tag_name}}/g" docs/.vuepress/config.js scripts/latest_version.json
|
||||
- name: Build documentation
|
||||
run: |
|
||||
python ./scripts/generate_board_docs.py
|
||||
python ./scripts/gen_wu.py ${GITHUB_REPOSITORY}
|
||||
npm run docs:build
|
||||
- name: Deploy to GitHub Pages
|
||||
uses: peaceiris/actions-gh-pages@v3
|
||||
with:
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
publish_dir: ./docs/.vuepress/dist
|
||||
cname: docs.openmqttgateway.com
|
||||
@@ -1,47 +0,0 @@
|
||||
name: Release
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
jobs:
|
||||
build-upload:
|
||||
runs-on: ubuntu-latest
|
||||
name: Build and upload Assets to Release
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: "3.7"
|
||||
- name: Install platformio
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install platformio
|
||||
- name: Set version tag from git
|
||||
run: sed -i "s/version_tag/${GITHUB_REF#refs/tags/}/g" main/User_config.h scripts/latest_version.json
|
||||
- name: Extract ESP32 platform version from platformio.ini
|
||||
run: |
|
||||
ESP32_VERSION=$(grep 'esp32_platform\s*=' platformio.ini | cut -d'@' -f2 | tr -d '[:space:]')
|
||||
echo "ESP32_PLATFORM_VERSION=${ESP32_VERSION}" >> $GITHUB_ENV
|
||||
- name: Run PlatformIO
|
||||
run: platformio run
|
||||
- name: Prepare Release Assets
|
||||
run: |
|
||||
sudo apt install rename
|
||||
./scripts/prepare_deploy.sh
|
||||
- name: Get upload url
|
||||
id: release-id
|
||||
run: |
|
||||
RELEASE_ID=$(jq --raw-output '.release.id' $GITHUB_EVENT_PATH)
|
||||
echo "::set-output name=upload_url::https://uploads.github.com/repos/${GITHUB_REPOSITORY}/releases/${RELEASE_ID}/assets{?name,label}"
|
||||
- name: Upload Release Assets
|
||||
uses: bgpat/release-asset-action@03b0c30db1c4031ce3474740b0e4275cd7e126a3
|
||||
with:
|
||||
pattern: "toDeploy/*"
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
release-url: ${{ steps.release-id.outputs.upload_url }}
|
||||
allow-overwrite: true
|
||||
call-workflow-passing-data:
|
||||
needs: build-upload
|
||||
uses: ./.github/workflows/manual_docs.yml
|
||||
@@ -1,23 +0,0 @@
|
||||
name: Close inactive issues or PR
|
||||
on:
|
||||
schedule:
|
||||
- cron: "30 0 * * *"
|
||||
|
||||
jobs:
|
||||
close-issues:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
issues: write
|
||||
pull-requests: write
|
||||
steps:
|
||||
- uses: actions/stale@v4.1.1
|
||||
with:
|
||||
days-before-issue-stale: 90
|
||||
days-before-issue-close: 14
|
||||
stale-issue-label: "stale"
|
||||
stale-issue-message: "This issue is stale because it has been open for 90 days with no activity."
|
||||
close-issue-message: "This issue was closed because it has been inactive for 14 days since being marked as stale."
|
||||
days-before-pr-stale: 90
|
||||
days-before-pr-close: 14
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
exempt-issue-labels: "enhancement"
|
||||
@@ -7,3 +7,7 @@ node_modules
|
||||
main/certs/private*
|
||||
lib/*
|
||||
!lib/esp32-bt-lib
|
||||
CMakeLists.txt
|
||||
dependencies.lock
|
||||
sdkconfig.*
|
||||
!sdkconfig.defaults
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 38 KiB |
@@ -141,8 +141,8 @@ The frequency key is optional, if not set the gateway will use the default frequ
|
||||
|
||||
Send PROG command with remote 0:
|
||||
|
||||
`mosquitto_pub -t home/OpenMQTTGateway_Somfy/commands/MQTTtoSomfy -m '{"remote":0,"command":"Prog","frequency":433.92}'`
|
||||
`mosquitto_pub -t home/OpenMQTTGateway_Somfy/commands/MQTTtoSomfy -m '{"remote":0,"command":"Prog","frequency":433.42}'`
|
||||
|
||||
Send Up command with remote 1:
|
||||
|
||||
`mosquitto_pub -t home/OpenMQTTGateway_Somfy/commands/MQTTtoSomfy -m '{"remote":1,"command":"Up","frequency":433.92}'`
|
||||
`mosquitto_pub -t home/OpenMQTTGateway_Somfy/commands/MQTTtoSomfy -m '{"remote":1,"command":"Up","frequency":433.42}'`
|
||||
+23
-4
@@ -776,7 +776,7 @@ build_flags =
|
||||
'-DRF_MODULE_GDO0=12' ; CC1101 pin GDO0
|
||||
'-DRF_MODULE_GDO2=27' ; CC1101 pin GDO2
|
||||
; *** RadioLib Options ***
|
||||
; '-DRADIOLIB_DEBUG=true'
|
||||
; '-DRADIOLIB_DEBUG=true'<
|
||||
; '-DRADIOLIB_VERBOSE=true'
|
||||
custom_description = Gateway using RTL_433_ESP library, need CC1101
|
||||
|
||||
@@ -799,12 +799,12 @@ build_flags =
|
||||
'-DZgatewayRTL_433="rtl_433"'
|
||||
'-DZradioSX127x="SX127x"'
|
||||
; *** ssd1306 Display Options ***
|
||||
'-DZdisplaySSD1306="HELTEC_SSD1306"'
|
||||
; '-DZdisplaySSD1306="HELTEC_SSD1306"'
|
||||
; '-DLOG_TO_OLED=false' ; Enable log to OLED
|
||||
; '-DJSON_TO_OLED=true'
|
||||
; '-DLOG_LEVEL_OLED=LOG_LEVEL_NOTICE'
|
||||
; '-DDISPLAY_IDLE_LOGO=false'
|
||||
; '-DDISPLAY_BRIGHTNESS=80'
|
||||
; '-DDISPLAY_IDLE_LOGO=true'
|
||||
; '-DDISPLAY_BRIGHTNESS=20'
|
||||
; '-DDISPLAY_METRIC=false'
|
||||
custom_description = Gateway using RTL_433_ESP and RadioLib
|
||||
custom_hardware = ESP32 HELTEC LORA32 V2
|
||||
@@ -1810,3 +1810,22 @@ build_flags =
|
||||
; '-DsimplePublishing=true'
|
||||
custom_description = BLE Gateway using ethernet or wifi with external antenna
|
||||
custom_hardware = ThingPulse gateway single ESP32
|
||||
|
||||
[env:esp32dev-ble-idf]
|
||||
platform = ${com.esp32_platform}
|
||||
framework = arduino, espidf
|
||||
board = esp32dev
|
||||
extra_scripts = ${com-esp32.extra_scripts}
|
||||
board_build.partitions = partitions/min_spiffs.csv
|
||||
lib_deps =
|
||||
${com-esp32.lib_deps}
|
||||
${libraries.ble}
|
||||
${libraries.decoder}
|
||||
build_flags =
|
||||
${com-esp32.build_flags}
|
||||
'-DZgatewayBT="BT"'
|
||||
'-DLED_SEND_RECEIVE=2'
|
||||
'-DLED_SEND_RECEIVE_ON=0'
|
||||
'-DGateway_Name="OMG_ESP32_BLE"'
|
||||
'-DUSE_BLUFI=1'
|
||||
custom_description = Regular BLE gateway with adaptive scanning activated, automatically adapts the scan parameters depending on your devices
|
||||
+1
-1
@@ -674,7 +674,7 @@ Adafruit_NeoPixel leds2(ANEOPIX_IND_NUM_LEDS, ANEOPIX_IND_DATA_GPIO2, ANEOPIX_IN
|
||||
#endif
|
||||
|
||||
#if defined(ESP32)
|
||||
# define JSON_MSG_BUFFER 768
|
||||
# define JSON_MSG_BUFFER 816 // adjusted to minimum size covering largest Theengs device JSON properties (RuuviTag_RAWv2)
|
||||
# define SIGNAL_SIZE_UL_ULL uint64_t
|
||||
# define STRTO_UL_ULL strtoull
|
||||
#elif defined(ESP8266)
|
||||
|
||||
+265
@@ -0,0 +1,265 @@
|
||||
/*
|
||||
OpenMQTTGateway - ESP8266 or Arduino program for home automation
|
||||
|
||||
Act as a wifi or ethernet gateway between your 433mhz/infrared IR signal and a MQTT broker
|
||||
Send and receiving command by MQTT
|
||||
|
||||
This program enables to:
|
||||
- receive MQTT data from a topic and send signal (RF, IR, BLE, GSM) corresponding to the received MQTT data
|
||||
- publish MQTT data to a different topic related to received signals (RF, IR, BLE, GSM)
|
||||
|
||||
Copyright: (c)Florian ROBERT
|
||||
|
||||
This file is part of OpenMQTTGateway.
|
||||
|
||||
OpenMQTTGateway is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
OpenMQTTGateway is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#if defined(ESP32) && defined(USE_BLUFI)
|
||||
|
||||
# include "esp_blufi_api.h"
|
||||
|
||||
extern "C" {
|
||||
# include "esp_blufi.h"
|
||||
}
|
||||
|
||||
/* store the station info for send back to phone */
|
||||
//static bool gl_sta_connected = false;
|
||||
bool omg_blufi_ble_connected = false;
|
||||
static uint8_t gl_sta_bssid[6];
|
||||
static uint8_t gl_sta_ssid[32];
|
||||
static uint8_t gl_sta_passwd[64];
|
||||
static int gl_sta_ssid_len;
|
||||
static bool gl_sta_is_connecting = false;
|
||||
static esp_blufi_extra_info_t gl_sta_conn_info;
|
||||
|
||||
static void example_event_callback(esp_blufi_cb_event_t event, esp_blufi_cb_param_t* param);
|
||||
void wifi_event_handler(arduino_event_id_t event);
|
||||
esp_err_t blufi_security_init(void);
|
||||
void blufi_dh_negotiate_data_handler(uint8_t* data, int len, uint8_t** output_data, int* output_len, bool* need_free);
|
||||
int blufi_aes_encrypt(uint8_t iv8, uint8_t* crypt_data, int crypt_len);
|
||||
int blufi_aes_decrypt(uint8_t iv8, uint8_t* crypt_data, int crypt_len);
|
||||
uint16_t blufi_crc_checksum(uint8_t iv8, uint8_t* data, int len);
|
||||
void blufi_security_deinit(void);
|
||||
|
||||
static void example_event_callback(esp_blufi_cb_event_t event, esp_blufi_cb_param_t* param) {
|
||||
/* actually, should post to blufi_task handle the procedure,
|
||||
* now, as a example, we do it more simply */
|
||||
switch (event) {
|
||||
case ESP_BLUFI_EVENT_INIT_FINISH:
|
||||
Log.notice(F("BLUFI init finish" CR));
|
||||
esp_blufi_adv_start();
|
||||
break;
|
||||
case ESP_BLUFI_EVENT_DEINIT_FINISH:
|
||||
Log.notice(F("BLUFI deinit finish" CR));
|
||||
NimBLEDevice::deinit(true);
|
||||
break;
|
||||
case ESP_BLUFI_EVENT_BLE_CONNECT:
|
||||
omg_blufi_ble_connected = true;
|
||||
esp_blufi_adv_stop();
|
||||
blufi_security_init();
|
||||
break;
|
||||
case ESP_BLUFI_EVENT_BLE_DISCONNECT:
|
||||
omg_blufi_ble_connected = false;
|
||||
blufi_security_deinit();
|
||||
if (WiFi.isConnected()) {
|
||||
esp_blufi_deinit();
|
||||
} else {
|
||||
esp_blufi_adv_start();
|
||||
}
|
||||
break;
|
||||
case ESP_BLUFI_EVENT_REQ_CONNECT_TO_AP:
|
||||
Log.notice(F("BLUFI requset wifi connect to AP" CR));
|
||||
WiFi.begin((char*)gl_sta_ssid, (char*)gl_sta_passwd);
|
||||
gl_sta_is_connecting = true;
|
||||
break;
|
||||
case ESP_BLUFI_EVENT_REQ_DISCONNECT_FROM_AP:
|
||||
Log.notice(F("BLUFI requset wifi disconnect from AP\n" CR));
|
||||
WiFi.disconnect();
|
||||
break;
|
||||
case ESP_BLUFI_EVENT_REPORT_ERROR:
|
||||
Log.notice(F("BLUFI report error, error code %d\n" CR), param->report_error.state);
|
||||
esp_blufi_send_error_info(param->report_error.state);
|
||||
break;
|
||||
case ESP_BLUFI_EVENT_GET_WIFI_STATUS: {
|
||||
esp_blufi_extra_info_t info;
|
||||
if (WiFi.isConnected()) {
|
||||
memset(&info, 0, sizeof(esp_blufi_extra_info_t));
|
||||
memcpy(info.sta_bssid, gl_sta_bssid, 6);
|
||||
info.sta_bssid_set = true;
|
||||
info.sta_ssid = gl_sta_ssid;
|
||||
info.sta_ssid_len = gl_sta_ssid_len;
|
||||
esp_blufi_send_wifi_conn_report(WIFI_MODE_STA, ESP_BLUFI_STA_CONN_SUCCESS, 0, &info);
|
||||
} else if (gl_sta_is_connecting) {
|
||||
esp_blufi_send_wifi_conn_report(WIFI_MODE_STA, ESP_BLUFI_STA_CONNECTING, 0, &gl_sta_conn_info);
|
||||
} else {
|
||||
esp_blufi_send_wifi_conn_report(WIFI_MODE_STA, ESP_BLUFI_STA_CONN_FAIL, 0, &gl_sta_conn_info);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case ESP_BLUFI_EVENT_RECV_SLAVE_DISCONNECT_BLE:
|
||||
esp_blufi_disconnect();
|
||||
break;
|
||||
case ESP_BLUFI_EVENT_RECV_STA_SSID:
|
||||
strncpy((char*)gl_sta_ssid, (char*)param->sta_ssid.ssid, param->sta_ssid.ssid_len);
|
||||
gl_sta_ssid[param->sta_ssid.ssid_len] = '\0';
|
||||
Log.notice(F("Recv STA SSID %s" CR), gl_sta_ssid);
|
||||
break;
|
||||
case ESP_BLUFI_EVENT_RECV_STA_PASSWD:
|
||||
strncpy((char*)gl_sta_passwd, (char*)param->sta_passwd.passwd, param->sta_passwd.passwd_len);
|
||||
gl_sta_passwd[param->sta_passwd.passwd_len] = '\0';
|
||||
Log.notice(F("Recv STA PASSWORD %s" CR), gl_sta_passwd);
|
||||
break;
|
||||
case ESP_BLUFI_EVENT_GET_WIFI_LIST: {
|
||||
WiFi.scanNetworks(true);
|
||||
break;
|
||||
}
|
||||
case ESP_BLUFI_EVENT_RECV_CUSTOM_DATA: {
|
||||
Log.notice(F("Recv Custom Data %" PRIu32 CR), param->custom_data.data_len);
|
||||
esp_log_buffer_hex("Custom Data", param->custom_data.data, param->custom_data.data_len);
|
||||
|
||||
DynamicJsonDocument json(1024);
|
||||
auto error = deserializeJson(json, param->custom_data.data);
|
||||
if (error) {
|
||||
Log.error(F("deserialize config failed: %s, buffer capacity: %u" CR), error.c_str(), json.capacity());
|
||||
break;
|
||||
}
|
||||
if (!json.isNull()) {
|
||||
Log.trace(F("\nparsed json, size: %u" CR), json.memoryUsage());
|
||||
if (json.containsKey("mqtt_server"))
|
||||
strcpy(mqtt_server, json["mqtt_server"]);
|
||||
if (json.containsKey("mqtt_port"))
|
||||
strcpy(mqtt_port, json["mqtt_port"]);
|
||||
if (json.containsKey("mqtt_user"))
|
||||
strcpy(mqtt_user, json["mqtt_user"]);
|
||||
if (json.containsKey("mqtt_pass"))
|
||||
strcpy(mqtt_pass, json["mqtt_pass"]);
|
||||
if (json.containsKey("mqtt_topic"))
|
||||
strcpy(mqtt_topic, json["mqtt_topic"]);
|
||||
if (json.containsKey("mqtt_broker_secure"))
|
||||
mqtt_secure = json["mqtt_broker_secure"].as<bool>();
|
||||
if (json.containsKey("gateway_name"))
|
||||
strcpy(gateway_name, json["gateway_name"]);
|
||||
saveConfig();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case ESP_BLUFI_EVENT_RECV_USERNAME:
|
||||
break;
|
||||
case ESP_BLUFI_EVENT_RECV_CA_CERT:
|
||||
break;
|
||||
case ESP_BLUFI_EVENT_RECV_CLIENT_CERT:
|
||||
break;
|
||||
case ESP_BLUFI_EVENT_RECV_SERVER_CERT:
|
||||
break;
|
||||
case ESP_BLUFI_EVENT_RECV_CLIENT_PRIV_KEY:
|
||||
break;
|
||||
;
|
||||
case ESP_BLUFI_EVENT_RECV_SERVER_PRIV_KEY:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void wifi_event_handler(arduino_event_id_t event) {
|
||||
switch (event) {
|
||||
case ARDUINO_EVENT_WIFI_STA_GOT_IP6:
|
||||
case ARDUINO_EVENT_WIFI_STA_GOT_IP: {
|
||||
gl_sta_is_connecting = false;
|
||||
esp_blufi_extra_info_t info;
|
||||
memset(&info, 0, sizeof(esp_blufi_extra_info_t));
|
||||
memcpy(info.sta_bssid, gl_sta_bssid, 6);
|
||||
info.sta_bssid_set = true;
|
||||
info.sta_ssid = gl_sta_ssid;
|
||||
info.sta_ssid_len = gl_sta_ssid_len;
|
||||
if (omg_blufi_ble_connected == true) {
|
||||
esp_blufi_send_wifi_conn_report(WIFI_MODE_STA, ESP_BLUFI_STA_CONN_SUCCESS, 0, &info);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case ARDUINO_EVENT_WIFI_SCAN_DONE: {
|
||||
uint16_t apCount = WiFi.scanComplete();
|
||||
if (apCount == 0) {
|
||||
Log.notice(F("No AP found" CR));
|
||||
break;
|
||||
}
|
||||
wifi_ap_record_t* ap_list = (wifi_ap_record_t*)malloc(sizeof(wifi_ap_record_t) * apCount);
|
||||
if (!ap_list) {
|
||||
Log.error(F("malloc error, ap_list is NULL"));
|
||||
break;
|
||||
}
|
||||
ESP_ERROR_CHECK(esp_wifi_scan_get_ap_records(&apCount, ap_list));
|
||||
esp_blufi_ap_record_t* blufi_ap_list = (esp_blufi_ap_record_t*)malloc(apCount * sizeof(esp_blufi_ap_record_t));
|
||||
if (!blufi_ap_list) {
|
||||
if (ap_list) {
|
||||
free(ap_list);
|
||||
}
|
||||
Log.error(F("malloc error, blufi_ap_list is NULL" CR));
|
||||
break;
|
||||
}
|
||||
for (int i = 0; i < apCount; ++i) {
|
||||
blufi_ap_list[i].rssi = ap_list[i].rssi;
|
||||
memcpy(blufi_ap_list[i].ssid, ap_list[i].ssid, sizeof(ap_list[i].ssid));
|
||||
}
|
||||
|
||||
if (omg_blufi_ble_connected == true) {
|
||||
esp_blufi_send_wifi_list(apCount, blufi_ap_list);
|
||||
}
|
||||
|
||||
free(ap_list);
|
||||
free(blufi_ap_list);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
static esp_blufi_callbacks_t example_callbacks = {
|
||||
.event_cb = example_event_callback,
|
||||
.negotiate_data_handler = blufi_dh_negotiate_data_handler,
|
||||
.encrypt_func = blufi_aes_encrypt,
|
||||
.decrypt_func = blufi_aes_decrypt,
|
||||
.checksum_func = blufi_crc_checksum,
|
||||
};
|
||||
|
||||
bool startBlufi() {
|
||||
esp_err_t ret = ESP_OK;
|
||||
WiFi.onEvent(wifi_event_handler);
|
||||
|
||||
ret = esp_blufi_register_callbacks(&example_callbacks);
|
||||
if (ret) {
|
||||
Log.error(F("%s blufi register failed, error code = %x" CR), __func__, ret);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (NimBLEDevice::getInitialized()) {
|
||||
NimBLEDevice::deinit(true);
|
||||
delay(50);
|
||||
}
|
||||
esp_blufi_btc_init();
|
||||
uint8_t mac[6];
|
||||
esp_read_mac(mac, ESP_MAC_WIFI_STA);
|
||||
char advName[20] = {0};
|
||||
snprintf(advName, sizeof(advName), "OMGBFI_%02X%02X%02X%02X%02X%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
|
||||
NimBLEDevice::init(advName);
|
||||
esp_blufi_gatt_svr_init();
|
||||
ble_gatts_start();
|
||||
return esp_blufi_profile_init() == ESP_OK;
|
||||
}
|
||||
|
||||
#endif // defined(ESP32) && defined(USE_BLUFI)
|
||||
@@ -0,0 +1,197 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
||||
*/
|
||||
|
||||
#if defined(ESP32) && defined(USE_BLUFI)
|
||||
|
||||
# include "esp_blufi_api.h"
|
||||
# include "esp_crc.h"
|
||||
# include "mbedtls/aes.h"
|
||||
# include "mbedtls/dhm.h"
|
||||
# include "mbedtls/md5.h"
|
||||
|
||||
/*
|
||||
The SEC_TYPE_xxx is for self-defined packet data type in the procedure of "BLUFI negotiate key"
|
||||
If user use other negotiation procedure to exchange(or generate) key, should redefine the type by yourself.
|
||||
*/
|
||||
# define SEC_TYPE_DH_PARAM_LEN 0x00
|
||||
# define SEC_TYPE_DH_PARAM_DATA 0x01
|
||||
# define SEC_TYPE_DH_P 0x02
|
||||
# define SEC_TYPE_DH_G 0x03
|
||||
# define SEC_TYPE_DH_PUBLIC 0x04
|
||||
|
||||
struct blufi_security {
|
||||
# define DH_SELF_PUB_KEY_LEN 128
|
||||
# define DH_SELF_PUB_KEY_BIT_LEN (DH_SELF_PUB_KEY_LEN * 8)
|
||||
uint8_t self_public_key[DH_SELF_PUB_KEY_LEN];
|
||||
# define SHARE_KEY_LEN 128
|
||||
# define SHARE_KEY_BIT_LEN (SHARE_KEY_LEN * 8)
|
||||
uint8_t share_key[SHARE_KEY_LEN];
|
||||
size_t share_len;
|
||||
# define PSK_LEN 16
|
||||
uint8_t psk[PSK_LEN];
|
||||
uint8_t* dh_param;
|
||||
int dh_param_len;
|
||||
uint8_t iv[16];
|
||||
mbedtls_dhm_context dhm;
|
||||
mbedtls_aes_context aes;
|
||||
};
|
||||
static struct blufi_security* blufi_sec;
|
||||
|
||||
static int myrand(void* rng_state, unsigned char* output, size_t len) {
|
||||
esp_fill_random(output, len);
|
||||
return (0);
|
||||
}
|
||||
|
||||
extern "C" void btc_blufi_report_error(esp_blufi_error_state_t state);
|
||||
|
||||
void blufi_dh_negotiate_data_handler(uint8_t* data, int len, uint8_t** output_data, int* output_len, bool* need_free) {
|
||||
int ret;
|
||||
uint8_t type = data[0];
|
||||
|
||||
if (blufi_sec == NULL) {
|
||||
Log.error(F("BLUFI Security is not initialized" CR));
|
||||
btc_blufi_report_error(ESP_BLUFI_INIT_SECURITY_ERROR);
|
||||
return;
|
||||
}
|
||||
|
||||
switch (type) {
|
||||
case SEC_TYPE_DH_PARAM_LEN:
|
||||
blufi_sec->dh_param_len = ((data[1] << 8) | data[2]);
|
||||
if (blufi_sec->dh_param) {
|
||||
free(blufi_sec->dh_param);
|
||||
blufi_sec->dh_param = NULL;
|
||||
}
|
||||
blufi_sec->dh_param = (uint8_t*)malloc(blufi_sec->dh_param_len);
|
||||
if (blufi_sec->dh_param == NULL) {
|
||||
btc_blufi_report_error(ESP_BLUFI_DH_MALLOC_ERROR);
|
||||
Log.error(F("%s, malloc failed\n" CR), __func__);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case SEC_TYPE_DH_PARAM_DATA: {
|
||||
if (blufi_sec->dh_param == NULL) {
|
||||
Log.error(F("%s, blufi_sec->dh_param == NULL" CR), __func__);
|
||||
btc_blufi_report_error(ESP_BLUFI_DH_PARAM_ERROR);
|
||||
return;
|
||||
}
|
||||
uint8_t* param = blufi_sec->dh_param;
|
||||
memcpy(blufi_sec->dh_param, &data[1], blufi_sec->dh_param_len);
|
||||
ret = mbedtls_dhm_read_params(&blufi_sec->dhm, ¶m, ¶m[blufi_sec->dh_param_len]);
|
||||
if (ret) {
|
||||
Log.error(F("%s read param failed %d" CR), __func__, ret);
|
||||
btc_blufi_report_error(ESP_BLUFI_READ_PARAM_ERROR);
|
||||
return;
|
||||
}
|
||||
free(blufi_sec->dh_param);
|
||||
blufi_sec->dh_param = NULL;
|
||||
|
||||
ret = mbedtls_dhm_make_public(&blufi_sec->dhm, (int)mbedtls_mpi_size(&blufi_sec->dhm.P), blufi_sec->self_public_key, blufi_sec->dhm.len, myrand, NULL);
|
||||
if (ret) {
|
||||
Log.error(F("%s make public failed %d" CR), __func__, ret);
|
||||
btc_blufi_report_error(ESP_BLUFI_MAKE_PUBLIC_ERROR);
|
||||
return;
|
||||
}
|
||||
|
||||
ret = mbedtls_dhm_calc_secret(&blufi_sec->dhm,
|
||||
blufi_sec->share_key,
|
||||
SHARE_KEY_BIT_LEN,
|
||||
&blufi_sec->share_len,
|
||||
myrand, NULL);
|
||||
if (ret) {
|
||||
Log.error(F("%s mbedtls_dhm_calc_secret failed %d" CR), __func__, ret);
|
||||
btc_blufi_report_error(ESP_BLUFI_DH_PARAM_ERROR);
|
||||
return;
|
||||
}
|
||||
|
||||
mbedtls_md5(blufi_sec->share_key, blufi_sec->share_len, blufi_sec->psk);
|
||||
|
||||
mbedtls_aes_setkey_enc(&blufi_sec->aes, blufi_sec->psk, 128);
|
||||
|
||||
/* alloc output data */
|
||||
*output_data = &blufi_sec->self_public_key[0];
|
||||
*output_len = blufi_sec->dhm.len;
|
||||
*need_free = false;
|
||||
|
||||
} break;
|
||||
case SEC_TYPE_DH_P:
|
||||
break;
|
||||
case SEC_TYPE_DH_G:
|
||||
break;
|
||||
case SEC_TYPE_DH_PUBLIC:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
int blufi_aes_encrypt(uint8_t iv8, uint8_t* crypt_data, int crypt_len) {
|
||||
int ret;
|
||||
size_t iv_offset = 0;
|
||||
uint8_t iv0[16];
|
||||
|
||||
memcpy(iv0, blufi_sec->iv, sizeof(blufi_sec->iv));
|
||||
iv0[0] = iv8; /* set iv8 as the iv0[0] */
|
||||
|
||||
ret = mbedtls_aes_crypt_cfb128(&blufi_sec->aes, MBEDTLS_AES_ENCRYPT, crypt_len, &iv_offset, iv0, crypt_data, crypt_data);
|
||||
if (ret) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return crypt_len;
|
||||
}
|
||||
|
||||
int blufi_aes_decrypt(uint8_t iv8, uint8_t* crypt_data, int crypt_len) {
|
||||
int ret;
|
||||
size_t iv_offset = 0;
|
||||
uint8_t iv0[16];
|
||||
|
||||
memcpy(iv0, blufi_sec->iv, sizeof(blufi_sec->iv));
|
||||
iv0[0] = iv8; /* set iv8 as the iv0[0] */
|
||||
|
||||
ret = mbedtls_aes_crypt_cfb128(&blufi_sec->aes, MBEDTLS_AES_DECRYPT, crypt_len, &iv_offset, iv0, crypt_data, crypt_data);
|
||||
if (ret) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return crypt_len;
|
||||
}
|
||||
|
||||
uint16_t blufi_crc_checksum(uint8_t iv8, uint8_t* data, int len) {
|
||||
/* This iv8 ignore, not used */
|
||||
return esp_crc16_be(0, data, len);
|
||||
}
|
||||
|
||||
esp_err_t blufi_security_init(void) {
|
||||
blufi_sec = (struct blufi_security*)malloc(sizeof(struct blufi_security));
|
||||
if (blufi_sec == NULL) {
|
||||
return ESP_FAIL;
|
||||
}
|
||||
|
||||
memset(blufi_sec, 0x0, sizeof(struct blufi_security));
|
||||
|
||||
mbedtls_dhm_init(&blufi_sec->dhm);
|
||||
mbedtls_aes_init(&blufi_sec->aes);
|
||||
|
||||
memset(blufi_sec->iv, 0x0, 16);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void blufi_security_deinit(void) {
|
||||
if (blufi_sec == NULL) {
|
||||
return;
|
||||
}
|
||||
if (blufi_sec->dh_param) {
|
||||
free(blufi_sec->dh_param);
|
||||
blufi_sec->dh_param = NULL;
|
||||
}
|
||||
mbedtls_dhm_free(&blufi_sec->dhm);
|
||||
mbedtls_aes_free(&blufi_sec->aes);
|
||||
|
||||
memset(blufi_sec, 0x0, sizeof(struct blufi_security));
|
||||
|
||||
free(blufi_sec);
|
||||
blufi_sec = NULL;
|
||||
}
|
||||
|
||||
#endif // defined(ESP32) && defined(USE_BLUFI)
|
||||
+16
-2
@@ -43,7 +43,6 @@ QueueHandle_t BLEQueue;
|
||||
# include <decoder.h>
|
||||
# include <driver/adc.h>
|
||||
# include <esp_bt.h>
|
||||
# include <esp_bt_main.h>
|
||||
# include <esp_wifi.h>
|
||||
|
||||
# include <atomic>
|
||||
@@ -892,7 +891,11 @@ void setupBTTasksAndBLE() {
|
||||
xTaskCreatePinnedToCore(
|
||||
procBLETask, /* Function to implement the task */
|
||||
"procBLETask", /* Name of the task */
|
||||
# ifdef USE_BLUFI
|
||||
13000,
|
||||
# else
|
||||
8500, /* Stack size in bytes */
|
||||
# endif
|
||||
NULL, /* Task input parameter */
|
||||
2, /* Priority of the task (set higher than core task) */
|
||||
&xProcBLETaskHandle, /* Task handle. */
|
||||
@@ -1020,7 +1023,18 @@ void launchBTDiscovery(bool overrideDiscovery) {
|
||||
}
|
||||
if (!properties.empty()) {
|
||||
StaticJsonDocument<JSON_MSG_BUFFER> jsonBuffer;
|
||||
deserializeJson(jsonBuffer, properties);
|
||||
auto error = deserializeJson(jsonBuffer, properties);
|
||||
if (error) {
|
||||
if (jsonBuffer.overflowed()) {
|
||||
// This should not happen if JSON_MSG_BUFFER is large enough for
|
||||
// the Theengs json properties
|
||||
Log.error(F("JSON deserialization of Theengs properties overflowed (error %s), buffer capacity: %u. Program might crash. Properties json: %s" CR),
|
||||
error.c_str(), jsonBuffer.capacity(), properties.c_str());
|
||||
} else {
|
||||
Log.error(F("JSON deserialization of Theengs properties errored: %" CR),
|
||||
error.c_str());
|
||||
}
|
||||
}
|
||||
for (JsonPair prop : jsonBuffer["properties"].as<JsonObject>()) {
|
||||
Log.trace(F("Key: %s"), prop.key().c_str());
|
||||
Log.trace(F("Unit: %s"), prop.value()["unit"].as<const char*>());
|
||||
|
||||
@@ -76,7 +76,7 @@ void MeasureGPIOInput() {
|
||||
}
|
||||
# endif
|
||||
Log.notice(F("Erasing ESP Config, restarting" CR));
|
||||
setup_wifimanager(true);
|
||||
setupwifi(true);
|
||||
}
|
||||
} else {
|
||||
resetTime = 0;
|
||||
|
||||
@@ -64,7 +64,7 @@ void MeasureHCSR501() {
|
||||
# ifdef HCSR501_LED_NOTIFY_GPIO
|
||||
digitalWrite(HCSR501_LED_NOTIFY_GPIO, pirState == HCSR501_LED_ON);
|
||||
# endif
|
||||
if (HCSR501data.size() > 1) {
|
||||
if (HCSR501data.size() > 0) {
|
||||
HCSR501data["origin"] = subjectHCSR501toMQTT;
|
||||
handleJsonEnqueue(HCSR501data);
|
||||
}
|
||||
|
||||
+20
-6
@@ -1133,14 +1133,14 @@ void setup() {
|
||||
# ifdef ESP32_ETHERNET
|
||||
setup_ethernet_esp32();
|
||||
# endif
|
||||
if (!failSafeMode && !ethConnected) setup_wifimanager(false);
|
||||
if (!failSafeMode && !ethConnected) setupwifi(false);
|
||||
} else {
|
||||
# ifdef ESP32_ETHERNET
|
||||
setup_ethernet_esp32();
|
||||
# endif
|
||||
Log.notice(F("No config in flash, launching wifi manager" CR));
|
||||
// In failSafeMode we don't want to setup wifi manager as it has already been done before
|
||||
if (!failSafeMode) setup_wifimanager(false);
|
||||
if (!failSafeMode) setupwifi(false);
|
||||
}
|
||||
|
||||
# endif
|
||||
@@ -1362,6 +1362,13 @@ void setup() {
|
||||
#if defined(ESP8266) || defined(ESP32)
|
||||
// Bypass for ESP not reconnecting automaticaly the second time https://github.com/espressif/arduino-esp32/issues/2501
|
||||
bool wifi_reconnect_bypass() {
|
||||
# if defined(ESP32) && defined(USE_BLUFI)
|
||||
extern bool omg_blufi_ble_connected;
|
||||
if (omg_blufi_ble_connected) {
|
||||
Log.notice(F("BLUFI is connected, bypassing wifi reconnect" CR));
|
||||
return true;
|
||||
}
|
||||
# endif
|
||||
uint8_t wifi_autoreconnect_cnt = 0;
|
||||
# ifdef ESP32
|
||||
while (WiFi.status() != WL_CONNECTED && wifi_autoreconnect_cnt < maxConnectionRetryNetwork) {
|
||||
@@ -1628,7 +1635,7 @@ void blockingWaitForReset() {
|
||||
Log.trace(F("mounted file system" CR));
|
||||
if (SPIFFS.exists("/config.json")) {
|
||||
Log.notice(F("Erasing ESP Config, restarting" CR));
|
||||
setup_wifimanager(true);
|
||||
setupwifi(true);
|
||||
}
|
||||
}
|
||||
delay(30000);
|
||||
@@ -1636,7 +1643,7 @@ void blockingWaitForReset() {
|
||||
Log.notice(F("Going into failsafe mode without peripherals" CR));
|
||||
// Failsafe mode enable to connect to Wifi or change the firmware without the peripherals setup
|
||||
failSafeMode = true;
|
||||
setup_wifimanager(false);
|
||||
setupwifi(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1766,13 +1773,20 @@ bool loadConfigFromFlash() {
|
||||
return result;
|
||||
}
|
||||
|
||||
void setup_wifimanager(bool reset_settings) {
|
||||
void setupwifi(bool reset_settings) {
|
||||
delay(10);
|
||||
WiFi.mode(WIFI_STA);
|
||||
|
||||
if (reset_settings)
|
||||
eraseAndRestart();
|
||||
|
||||
# if defined(ESP32) && defined(USE_BLUFI)
|
||||
if (!wifi_reconnect_bypass()) {
|
||||
startBlufi();
|
||||
return;
|
||||
}
|
||||
# endif
|
||||
|
||||
# ifdef USE_MAC_AS_GATEWAY_NAME
|
||||
String s = WiFi.macAddress();
|
||||
snprintf(WifiManager_ssid, MAC_NAME_MAX_LEN, "%s_%.2s%.2s", Gateway_Short_Name, s.c_str(), s.c_str() + 3);
|
||||
@@ -2881,7 +2895,7 @@ void MQTTtoSYS(char* topicOri, JsonObject& SYSdata) { // json object decoding
|
||||
ESPRestart(5);
|
||||
} else if (strstr(cmd, eraseCmd) != NULL) { //erase and restart
|
||||
# ifndef ESPWifiManualSetup
|
||||
setup_wifimanager(true);
|
||||
setupwifi(true);
|
||||
# endif
|
||||
} else if (strstr(cmd, statusCmd) != NULL) { //erase and restart
|
||||
stateMeasures();
|
||||
|
||||
Generated
+12
-12
@@ -7144,9 +7144,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/follow-redirects": {
|
||||
"version": "1.15.4",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz",
|
||||
"integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==",
|
||||
"version": "1.15.6",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
|
||||
"integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
|
||||
"dev": true,
|
||||
"funding": [
|
||||
{
|
||||
@@ -8413,9 +8413,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/ip": {
|
||||
"version": "1.1.8",
|
||||
"resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz",
|
||||
"integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==",
|
||||
"version": "1.1.9",
|
||||
"resolved": "https://registry.npmjs.org/ip/-/ip-1.1.9.tgz",
|
||||
"integrity": "sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/ip-regex": {
|
||||
@@ -21003,9 +21003,9 @@
|
||||
}
|
||||
},
|
||||
"follow-redirects": {
|
||||
"version": "1.15.4",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz",
|
||||
"integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==",
|
||||
"version": "1.15.6",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
|
||||
"integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
|
||||
"dev": true
|
||||
},
|
||||
"for-each": {
|
||||
@@ -21960,9 +21960,9 @@
|
||||
}
|
||||
},
|
||||
"ip": {
|
||||
"version": "1.1.8",
|
||||
"resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz",
|
||||
"integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==",
|
||||
"version": "1.1.9",
|
||||
"resolved": "https://registry.npmjs.org/ip/-/ip-1.1.9.tgz",
|
||||
"integrity": "sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ==",
|
||||
"dev": true
|
||||
},
|
||||
"ip-regex": {
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
# Name, Type, SubType, Offset, Size, Flags
|
||||
nvs, data, nvs, 0x9000, 0x5000,
|
||||
otadata, data, ota, 0xe000, 0x2000,
|
||||
app0, app, ota_0, 0x10000, 0x140000,
|
||||
app1, app, ota_1, 0x150000,0x140000,
|
||||
spiffs, data, spiffs, 0x290000,0x160000,
|
||||
coredump, data, coredump,0x3F0000,0x10000,
|
||||
|
@@ -0,0 +1,7 @@
|
||||
# Name, Type, SubType, Offset, Size, Flags
|
||||
nvs, data, nvs, 0x9000, 0x5000,
|
||||
otadata, data, ota, 0xe000, 0x2000,
|
||||
app0, app, ota_0, 0x10000, 0x640000,
|
||||
app1, app, ota_1, 0x650000,0x640000,
|
||||
spiffs, data, spiffs, 0xc90000,0x360000,
|
||||
coredump, data, coredump,0xFF0000,0x10000,
|
||||
|
@@ -0,0 +1,7 @@
|
||||
# Name, Type, SubType, Offset, Size, Flags
|
||||
nvs, data, nvs, 0x9000, 0x5000,
|
||||
otadata, data, ota, 0xe000, 0x2000,
|
||||
app0, app, ota_0, 0x10000, 0x330000,
|
||||
app1, app, ota_1, 0x340000,0x330000,
|
||||
spiffs, data, spiffs, 0x670000,0x180000,
|
||||
coredump, data, coredump,0x7F0000,0x10000,
|
||||
|
@@ -0,0 +1,7 @@
|
||||
# Name, Type, SubType, Offset, Size, Flags
|
||||
nvs, data, nvs, 0x9000, 0x5000,
|
||||
otadata, data, ota, 0xe000, 0x2000,
|
||||
app0, app, ota_0, 0x10000, 0x1E0000,
|
||||
app1, app, ota_1, 0x1F0000,0x1E0000,
|
||||
spiffs, data, spiffs, 0x3D0000,0x20000,
|
||||
coredump, data, coredump,0x3F0000,0x10000,
|
||||
|
+3
-2
@@ -60,7 +60,7 @@ extra_configs =
|
||||
;default_envs = esp32s3-atomS3U
|
||||
;default_envs = esp32doitv1-aithinker-r01-sx1278
|
||||
;default_envs = esp32dev-rtl_433
|
||||
;default_envs = heltec-rtl_433
|
||||
default_envs = heltec-rtl_433
|
||||
;default_envs = heltec-rtl_433-fsk
|
||||
;default_envs = heltec-ble
|
||||
;default_envs = lilygo-rtl_433
|
||||
@@ -103,6 +103,7 @@ extra_configs =
|
||||
;default_envs = lolin_c3_mini
|
||||
;default_envs = thingpulse-espgateway
|
||||
;default_envs = theengs-bridge
|
||||
;default_envs = esp32dev-ble-idf
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; ENVIRONMENTS PARAMETERS ;
|
||||
@@ -220,4 +221,4 @@ lib_deps =
|
||||
${libraries.ethernet}
|
||||
build_flags =
|
||||
${env.build_flags}
|
||||
'-DsimpleReceiving=false'
|
||||
'-DsimpleReceiving=false'
|
||||
@@ -13,9 +13,8 @@ def calculate_md5(filepath):
|
||||
|
||||
def main():
|
||||
print(f"Pre build BLE library replacement script")
|
||||
home_path = os.environ.get('HOME') or os.environ.get('USERPROFILE')
|
||||
source_file = 'lib/esp32-bt-lib/esp32/libbtdm_app.a'
|
||||
destination_file = os.path.join(home_path, '.platformio', 'packages', 'framework-arduinoespressif32', 'tools', 'sdk', 'esp32', 'ld', 'libbtdm_app.a')
|
||||
destination_file = os.path.join(env.GetProjectConfig().get("platformio", "packages_dir"), 'framework-arduinoespressif32', 'tools', 'sdk', 'esp32', 'ld', 'libbtdm_app.a')
|
||||
|
||||
try:
|
||||
shutil.copyfile(source_file, destination_file)
|
||||
|
||||
@@ -0,0 +1,218 @@
|
||||
CONFIG_FREERTOS_HZ=1000
|
||||
CONFIG_COAP_MBEDTLS_PSK=y
|
||||
|
||||
#
|
||||
# Bluetooth
|
||||
#
|
||||
CONFIG_BT_ENABLED=y
|
||||
|
||||
#
|
||||
# Bluetooth controller
|
||||
#
|
||||
CONFIG_BTDM_CTRL_MODE_BLE_ONLY=y
|
||||
# CONFIG_BTDM_CTRL_MODE_BR_EDR_ONLY is not set
|
||||
# CONFIG_BTDM_CTRL_MODE_BTDM is not set
|
||||
CONFIG_BTDM_CTRL_BLE_MAX_CONN=3
|
||||
CONFIG_BTDM_CTRL_BR_EDR_SCO_DATA_PATH_EFF=0
|
||||
CONFIG_BTDM_CTRL_PCM_ROLE_EFF=0
|
||||
CONFIG_BTDM_CTRL_PCM_POLAR_EFF=0
|
||||
CONFIG_BTDM_CTRL_BLE_MAX_CONN_EFF=3
|
||||
CONFIG_BTDM_CTRL_BR_EDR_MAX_ACL_CONN_EFF=0
|
||||
CONFIG_BTDM_CTRL_BR_EDR_MAX_SYNC_CONN_EFF=0
|
||||
CONFIG_BTDM_CTRL_PINNED_TO_CORE_0=y
|
||||
# CONFIG_BTDM_CTRL_PINNED_TO_CORE_1 is not set
|
||||
CONFIG_BTDM_CTRL_PINNED_TO_CORE=0
|
||||
CONFIG_BTDM_CTRL_HCI_MODE_VHCI=y
|
||||
# CONFIG_BTDM_CTRL_HCI_MODE_UART_H4 is not set
|
||||
|
||||
#
|
||||
# MODEM SLEEP Options
|
||||
#
|
||||
CONFIG_BTDM_CTRL_MODEM_SLEEP=y
|
||||
CONFIG_BTDM_CTRL_MODEM_SLEEP_MODE_ORIG=y
|
||||
# CONFIG_BTDM_CTRL_MODEM_SLEEP_MODE_EVED is not set
|
||||
CONFIG_BTDM_CTRL_LPCLK_SEL_MAIN_XTAL=y
|
||||
# end of MODEM SLEEP Options
|
||||
|
||||
CONFIG_BTDM_BLE_DEFAULT_SCA_250PPM=y
|
||||
CONFIG_BTDM_BLE_SLEEP_CLOCK_ACCURACY_INDEX_EFF=1
|
||||
CONFIG_BTDM_BLE_SCAN_DUPL=y
|
||||
CONFIG_BTDM_SCAN_DUPL_TYPE_DEVICE=y
|
||||
# CONFIG_BTDM_SCAN_DUPL_TYPE_DATA is not set
|
||||
# CONFIG_BTDM_SCAN_DUPL_TYPE_DATA_DEVICE is not set
|
||||
CONFIG_BTDM_SCAN_DUPL_TYPE=0
|
||||
CONFIG_BTDM_SCAN_DUPL_CACHE_SIZE=100
|
||||
# CONFIG_BTDM_BLE_MESH_SCAN_DUPL_EN is not set
|
||||
CONFIG_BTDM_CTRL_FULL_SCAN_SUPPORTED=y
|
||||
CONFIG_BTDM_BLE_ADV_REPORT_FLOW_CTRL_SUPP=y
|
||||
CONFIG_BTDM_BLE_ADV_REPORT_FLOW_CTRL_NUM=100
|
||||
CONFIG_BTDM_BLE_ADV_REPORT_DISCARD_THRSHOLD=20
|
||||
CONFIG_BTDM_RESERVE_DRAM=0xdb5c
|
||||
CONFIG_BTDM_CTRL_HLI=y
|
||||
# end of Bluetooth controller
|
||||
|
||||
# CONFIG_BT_BLUEDROID_ENABLED is not set
|
||||
CONFIG_BT_NIMBLE_ENABLED=y
|
||||
# CONFIG_BT_CONTROLLER_ONLY is not set
|
||||
|
||||
#
|
||||
# NimBLE Options
|
||||
#
|
||||
CONFIG_BT_NIMBLE_MEM_ALLOC_MODE_INTERNAL=y
|
||||
# CONFIG_BT_NIMBLE_MEM_ALLOC_MODE_DEFAULT is not set
|
||||
# CONFIG_BT_NIMBLE_LOG_LEVEL_NONE is not set
|
||||
# CONFIG_BT_NIMBLE_LOG_LEVEL_ERROR is not set
|
||||
# CONFIG_BT_NIMBLE_LOG_LEVEL_WARNING is not set
|
||||
CONFIG_BT_NIMBLE_LOG_LEVEL_INFO=y
|
||||
# CONFIG_BT_NIMBLE_LOG_LEVEL_DEBUG is not set
|
||||
CONFIG_BT_NIMBLE_LOG_LEVEL=1
|
||||
CONFIG_BT_NIMBLE_MAX_CONNECTIONS=3
|
||||
CONFIG_BT_NIMBLE_MAX_BONDS=3
|
||||
CONFIG_BT_NIMBLE_MAX_CCCDS=8
|
||||
CONFIG_BT_NIMBLE_L2CAP_COC_MAX_NUM=0
|
||||
CONFIG_BT_NIMBLE_PINNED_TO_CORE_0=y
|
||||
# CONFIG_BT_NIMBLE_PINNED_TO_CORE_1 is not set
|
||||
CONFIG_BT_NIMBLE_PINNED_TO_CORE=0
|
||||
CONFIG_BT_NIMBLE_TASK_STACK_SIZE=4096
|
||||
CONFIG_BT_NIMBLE_ROLE_CENTRAL=y
|
||||
CONFIG_BT_NIMBLE_ROLE_PERIPHERAL=y
|
||||
CONFIG_BT_NIMBLE_ROLE_BROADCASTER=y
|
||||
CONFIG_BT_NIMBLE_ROLE_OBSERVER=y
|
||||
CONFIG_BT_NIMBLE_NVS_PERSIST=y
|
||||
CONFIG_BT_NIMBLE_SM_LEGACY=y
|
||||
CONFIG_BT_NIMBLE_SM_SC=y
|
||||
# CONFIG_BT_NIMBLE_DEBUG is not set
|
||||
# CONFIG_BT_NIMBLE_SM_SC_DEBUG_KEYS is not set
|
||||
CONFIG_BT_NIMBLE_SVC_GAP_DEVICE_NAME="nimble"
|
||||
CONFIG_BT_NIMBLE_GAP_DEVICE_NAME_MAX_LEN=31
|
||||
CONFIG_BT_NIMBLE_ATT_PREFERRED_MTU=256
|
||||
CONFIG_BT_NIMBLE_SVC_GAP_APPEARANCE=0
|
||||
CONFIG_BT_NIMBLE_ACL_BUF_COUNT=20
|
||||
CONFIG_BT_NIMBLE_ACL_BUF_SIZE=255
|
||||
CONFIG_BT_NIMBLE_HCI_EVT_BUF_SIZE=70
|
||||
CONFIG_BT_NIMBLE_HCI_EVT_HI_BUF_COUNT=30
|
||||
CONFIG_BT_NIMBLE_HCI_EVT_LO_BUF_COUNT=8
|
||||
CONFIG_BT_NIMBLE_MSYS1_BLOCK_COUNT=12
|
||||
CONFIG_BT_NIMBLE_HS_FLOW_CTRL=y
|
||||
CONFIG_BT_NIMBLE_HS_FLOW_CTRL_ITVL=1000
|
||||
CONFIG_BT_NIMBLE_HS_FLOW_CTRL_THRESH=2
|
||||
CONFIG_BT_NIMBLE_HS_FLOW_CTRL_TX_ON_DISCONNECT=y
|
||||
CONFIG_BT_NIMBLE_RPA_TIMEOUT=900
|
||||
# CONFIG_BT_NIMBLE_MESH is not set
|
||||
CONFIG_BT_NIMBLE_CRYPTO_STACK_MBEDTLS=y
|
||||
CONFIG_BT_NIMBLE_HS_STOP_TIMEOUT_MS=2000
|
||||
# CONFIG_BT_NIMBLE_ENABLE_CONN_REATTEMPT is not set
|
||||
CONFIG_BT_NIMBLE_BLUFI_ENABLE=y
|
||||
CONFIG_BT_NIMBLE_USE_ESP_TIMER=y
|
||||
# end of NimBLE Options
|
||||
# end of Bluetooth
|
||||
|
||||
|
||||
#
|
||||
# TLS Key Exchange Methods
|
||||
#
|
||||
CONFIG_MBEDTLS_PSK_MODES=y
|
||||
CONFIG_MBEDTLS_KEY_EXCHANGE_PSK=y
|
||||
CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_PSK=y
|
||||
CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_PSK=y
|
||||
CONFIG_MBEDTLS_KEY_EXCHANGE_RSA_PSK=y
|
||||
CONFIG_MBEDTLS_KEY_EXCHANGE_RSA=y
|
||||
CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_RSA=y
|
||||
CONFIG_MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE=y
|
||||
CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA=y
|
||||
CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA=y
|
||||
CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA=y
|
||||
CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA=y
|
||||
# end of TLS Key Exchange Methods
|
||||
|
||||
#
|
||||
# Arduino Configuration
|
||||
#
|
||||
CONFIG_ARDUINO_VARIANT="esp32"
|
||||
CONFIG_ENABLE_ARDUINO_DEPENDS=y
|
||||
CONFIG_AUTOSTART_ARDUINO=y
|
||||
# CONFIG_ARDUINO_RUN_CORE0 is not set
|
||||
CONFIG_ARDUINO_RUN_CORE1=y
|
||||
# CONFIG_ARDUINO_RUN_NO_AFFINITY is not set
|
||||
CONFIG_ARDUINO_RUNNING_CORE=1
|
||||
CONFIG_ARDUINO_LOOP_STACK_SIZE=8192
|
||||
# CONFIG_ARDUINO_EVENT_RUN_CORE0 is not set
|
||||
CONFIG_ARDUINO_EVENT_RUN_CORE1=y
|
||||
# CONFIG_ARDUINO_EVENT_RUN_NO_AFFINITY is not set
|
||||
CONFIG_ARDUINO_EVENT_RUNNING_CORE=1
|
||||
# CONFIG_ARDUINO_SERIAL_EVENT_RUN_CORE0 is not set
|
||||
# CONFIG_ARDUINO_SERIAL_EVENT_RUN_CORE1 is not set
|
||||
CONFIG_ARDUINO_SERIAL_EVENT_RUN_NO_AFFINITY=y
|
||||
CONFIG_ARDUINO_SERIAL_EVENT_TASK_RUNNING_CORE=-1
|
||||
CONFIG_ARDUINO_SERIAL_EVENT_TASK_STACK_SIZE=2048
|
||||
CONFIG_ARDUINO_SERIAL_EVENT_TASK_PRIORITY=24
|
||||
CONFIG_ARDUINO_UDP_RUN_CORE0=y
|
||||
# CONFIG_ARDUINO_UDP_RUN_CORE1 is not set
|
||||
# CONFIG_ARDUINO_UDP_RUN_NO_AFFINITY is not set
|
||||
CONFIG_ARDUINO_UDP_RUNNING_CORE=0
|
||||
CONFIG_ARDUINO_UDP_TASK_PRIORITY=3
|
||||
# CONFIG_ARDUINO_ISR_IRAM is not set
|
||||
# CONFIG_DISABLE_HAL_LOCKS is not set
|
||||
|
||||
#
|
||||
# Debug Log Configuration
|
||||
#
|
||||
# CONFIG_ARDUHAL_LOG_DEFAULT_LEVEL_NONE is not set
|
||||
CONFIG_ARDUHAL_LOG_DEFAULT_LEVEL_ERROR=y
|
||||
# CONFIG_ARDUHAL_LOG_DEFAULT_LEVEL_WARN is not set
|
||||
# CONFIG_ARDUHAL_LOG_DEFAULT_LEVEL_INFO is not set
|
||||
# CONFIG_ARDUHAL_LOG_DEFAULT_LEVEL_DEBUG is not set
|
||||
# CONFIG_ARDUHAL_LOG_DEFAULT_LEVEL_VERBOSE is not set
|
||||
CONFIG_ARDUHAL_LOG_DEFAULT_LEVEL=1
|
||||
# CONFIG_ARDUHAL_LOG_COLORS is not set
|
||||
# CONFIG_ARDUHAL_ESP_LOG is not set
|
||||
# end of Debug Log Configuration
|
||||
|
||||
# CONFIG_ARDUHAL_PARTITION_SCHEME_DEFAULT is not set
|
||||
# CONFIG_ARDUHAL_PARTITION_SCHEME_MINIMAL is not set
|
||||
# CONFIG_ARDUHAL_PARTITION_SCHEME_NO_OTA is not set
|
||||
# CONFIG_ARDUHAL_PARTITION_SCHEME_HUGE_APP is not set
|
||||
CONFIG_ARDUHAL_PARTITION_SCHEME_MIN_SPIFFS=y
|
||||
CONFIG_ARDUHAL_PARTITION_SCHEME="min_spiffs"
|
||||
# CONFIG_AUTOCONNECT_WIFI is not set
|
||||
CONFIG_ARDUINO_SELECTIVE_COMPILATION=y
|
||||
CONFIG_ARDUINO_SELECTIVE_ArduinoOTA=y
|
||||
CONFIG_ARDUINO_SELECTIVE_AsyncUDP=y
|
||||
# CONFIG_ARDUINO_SELECTIVE_AzureIoT is not set
|
||||
# CONFIG_ARDUINO_SELECTIVE_BLE is not set
|
||||
# CONFIG_ARDUINO_SELECTIVE_BluetoothSerial is not set
|
||||
CONFIG_ARDUINO_SELECTIVE_DNSServer=y
|
||||
CONFIG_ARDUINO_SELECTIVE_EEPROM=y
|
||||
CONFIG_ARDUINO_SELECTIVE_ESP32=y
|
||||
CONFIG_ARDUINO_SELECTIVE_ESPmDNS=y
|
||||
CONFIG_ARDUINO_SELECTIVE_FFat=y
|
||||
CONFIG_ARDUINO_SELECTIVE_FS=y
|
||||
CONFIG_ARDUINO_SELECTIVE_HTTPClient=y
|
||||
CONFIG_ARDUINO_SELECTIVE_LITTLEFS=y
|
||||
CONFIG_ARDUINO_SELECTIVE_NetBIOS=y
|
||||
CONFIG_ARDUINO_SELECTIVE_Preferences=y
|
||||
CONFIG_ARDUINO_SELECTIVE_SD=y
|
||||
CONFIG_ARDUINO_SELECTIVE_SD_MMC=y
|
||||
# CONFIG_ARDUINO_SELECTIVE_SimpleBLE is not set
|
||||
CONFIG_ARDUINO_SELECTIVE_SPI=y
|
||||
CONFIG_ARDUINO_SELECTIVE_SPIFFS=y
|
||||
CONFIG_ARDUINO_SELECTIVE_Ticker=y
|
||||
CONFIG_ARDUINO_SELECTIVE_Update=y
|
||||
CONFIG_ARDUINO_SELECTIVE_WebServer=y
|
||||
CONFIG_ARDUINO_SELECTIVE_WiFi=y
|
||||
CONFIG_ARDUINO_SELECTIVE_WiFiClientSecure=y
|
||||
CONFIG_ARDUINO_SELECTIVE_WiFiProv=y
|
||||
CONFIG_ARDUINO_SELECTIVE_Wire=y
|
||||
# end of Arduino Configuration
|
||||
|
||||
# CONFIG_ESP32_WIFI_IRAM_OPT is not set
|
||||
# CONFIG_ESP32_WIFI_RX_IRAM_OPT is not set
|
||||
|
||||
#
|
||||
# SPI configuration
|
||||
#
|
||||
# CONFIG_SPI_MASTER_IN_IRAM is not set
|
||||
# CONFIG_SPI_MASTER_ISR_IN_IRAM is not set
|
||||
# CONFIG_SPI_SLAVE_IN_IRAM is not set
|
||||
# CONFIG_SPI_SLAVE_ISR_IN_IRAM is not set
|
||||
# end of SPI configuration
|
||||
Reference in new issue
Block a user