mirror of
https://github.com/openshwprojects/OpenBK7231T_App.git
synced 2026-02-20 00:32:37 +01:00
RDA5981 (#1813)
This commit is contained in:
committed by
GitHub
parent
17cc6353b6
commit
6083ddfca5
30
.github/workflows/workflow.yaml
vendored
30
.github/workflows/workflow.yaml
vendored
@@ -23,10 +23,20 @@ jobs:
|
||||
steps:
|
||||
- name: Source checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: Update SDKs if required
|
||||
run: make update-submodules
|
||||
- name: Set outputs
|
||||
id: refs
|
||||
run: |
|
||||
export BRANCH=${GITHUB_REF#refs/*/}
|
||||
echo "branch: ${BRANCH}"
|
||||
export BRANCHTRANSLATED=$(echo ${BRANCH} | tr '/' '_')
|
||||
echo "short_ref: ${BRANCHTRANSLATED}"
|
||||
export VERSION=${BRANCHTRANSLATED}_$(git rev-parse --short=12 HEAD)
|
||||
echo "short_ref=${BRANCHTRANSLATED}" >> $GITHUB_OUTPUT
|
||||
echo "sha_short=SHA-$(git rev-parse --short=12 HEAD)" >> $GITHUB_OUTPUT
|
||||
echo "version=${VERSION}" >> $GITHUB_OUTPUT
|
||||
- name: Semantic Release
|
||||
id: semantic
|
||||
if: github.ref == 'refs/heads/main' || github.ref_name == 'alpha'
|
||||
uses: cycjimmy/semantic-release-action@v4
|
||||
with:
|
||||
dry_run: true
|
||||
@@ -37,22 +47,16 @@ jobs:
|
||||
conventional-changelog-conventionalcommits@7
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
- name: Set outputs
|
||||
id: refs
|
||||
- name: Set release outputs
|
||||
id: refs_release
|
||||
if: github.ref == 'refs/heads/main' || github.ref_name == 'alpha'
|
||||
run: |
|
||||
export BRANCH=${GITHUB_REF#refs/*/}
|
||||
echo "branch: ${BRANCH}"
|
||||
export BRANCHTRANSLATED=$(echo ${BRANCH} | tr '/' '_')
|
||||
echo "short_ref: ${BRANCHTRANSLATED}"
|
||||
export VERSION=""
|
||||
if ${{ steps.semantic.outputs.new_release_published == 'true' }}; then
|
||||
export VERSION=${{ steps.semantic.outputs.new_release_version }}
|
||||
else
|
||||
export VERSION=${BRANCHTRANSLATED}_$(git rev-parse --short=12 HEAD)
|
||||
fi
|
||||
echo "new_release=${{ steps.semantic.outputs.new_release_published }}" >> $GITHUB_OUTPUT
|
||||
echo "short_ref=${BRANCHTRANSLATED}" >> $GITHUB_OUTPUT
|
||||
echo "sha_short=SHA-$(git rev-parse --short=12 HEAD)" >> $GITHUB_OUTPUT
|
||||
echo "version=${VERSION}" >> $GITHUB_OUTPUT
|
||||
|
||||
build2:
|
||||
@@ -194,6 +198,9 @@ jobs:
|
||||
gcc: 10.3-2021.10
|
||||
- platform: OpenECR6600
|
||||
variant: default
|
||||
- platform: OpenRDA5981
|
||||
variant: default
|
||||
gcc: 6-2017-q2
|
||||
|
||||
# extras for BK7231T
|
||||
- platform: OpenBK7231T
|
||||
@@ -233,6 +240,7 @@ jobs:
|
||||
architecture: 'x64'
|
||||
cache: 'pip'
|
||||
- name: Install dependencies
|
||||
if: ${{ matrix.platform == 'OpenLN882H' }}
|
||||
uses: awalsh128/cache-apt-pkgs-action@latest
|
||||
with:
|
||||
packages: cmake
|
||||
|
||||
4
.gitmodules
vendored
4
.gitmodules
vendored
@@ -77,3 +77,7 @@
|
||||
path = sdk/OpenTXW81X
|
||||
url = https://github.com/NonPIayerCharacter/OpenTXW81X
|
||||
branch = main
|
||||
[submodule "sdk/OpenRDA5981"]
|
||||
path = sdk/OpenRDA5981
|
||||
url = https://github.com/NonPIayerCharacter/OpenRDA5981
|
||||
branch = master
|
||||
|
||||
@@ -104,6 +104,8 @@ generateNotes:
|
||||
- RTL87x1DA (AmebaDplus family) (eg BW20, WR11-U, WR11-2S)
|
||||
- RTL87x0E (AmebaLite family) (eg PKM8710ECF)
|
||||
- ECR6600 (eg AXYU, AXY2S, WG236, DSM-036, CDI-WX56600A-00, BL-M6600XT1, HF-LPT6200)
|
||||
- TXW81X (eg TXW817-810)
|
||||
- RDA5981 (eg RDA5981AM, RDA5981BM, WRD2L, TYWRD3S, HLK-M50)
|
||||
|
||||
footerPartial: |
|
||||
{{#if noteGroups}}
|
||||
@@ -190,6 +192,7 @@ generateNotes:
|
||||
| ESP8266 1MB | UART Flash | [OpenESP8266_1MB_{{version}}.factory.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP8266_1MB_{{version}}.factory.bin) |
|
||||
| ESP8266 2MB | UART Flash | [OpenESP8266_2MB_{{version}}.factory.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP8266_2MB_{{version}}.factory.bin) |
|
||||
| ESP8266 2MB | OTA Update | [OpenESP8266_{{version}}.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP8266_{{version}}.img) |
|
||||
| RDA5981 | UART/OTA | [OpenRDA5981_{{version}}.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenRDA5981_{{version}}.img) |
|
||||
| TXW81X | | [OpenTXW81X_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenTXW81X_{{version}}.bin) |
|
||||
| Win32 | | [obkSimulator_{{version}}.zip]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/obkSimulator_{{version}}.zip) |
|
||||
|
||||
|
||||
19
Makefile
19
Makefile
@@ -362,6 +362,14 @@ prebuild_OpenTXW81X: berry
|
||||
else echo "prebuild for OpenTXW81X not found ... "; \
|
||||
fi
|
||||
|
||||
prebuild_OpenRDA5981: berry
|
||||
git submodule update --init --recursive --depth=1 sdk/OpenRDA5981
|
||||
@if [ -e platforms/RDA5981/pre_build.sh ]; then \
|
||||
echo "prebuild found for OpenRDA5981"; \
|
||||
sh platforms/RDA5981/pre_build.sh; \
|
||||
else echo "prebuild for OpenRDA5981 not found ... "; \
|
||||
fi
|
||||
|
||||
# Build main binaries
|
||||
OpenBK7231T: prebuild_OpenBK7231T
|
||||
mkdir -p output
|
||||
@@ -663,6 +671,16 @@ OpenTXW81X: prebuild_OpenTXW81X
|
||||
mkdir -p output/$(APP_VERSION)
|
||||
cp sdk/OpenTXW81X/project/APP.bin output/$(APP_VERSION)/OpenTXW81X_$(APP_VERSION).bin
|
||||
#cp sdk/OpenTXW81X/project/APP_compress.bin output/$(APP_VERSION)/OpenTXW81X_$(APP_VERSION)_ota.img
|
||||
|
||||
.PHONY: OpenRDA5981
|
||||
OpenRDA5981: prebuild_OpenRDA5981
|
||||
$(MAKE) -C sdk/OpenRDA5981 APP_VERSION=$(APP_VERSION) OBK_VARIANT=$(OBK_VARIANT) -j $(shell nproc)
|
||||
mkdir -p output/$(APP_VERSION)
|
||||
cp sdk/OpenRDA5981/.build/OpenBeken.bin output/$(APP_VERSION)/OpenRDA5981_$(APP_VERSION).img
|
||||
#cp sdk/OpenRDA5981/ota_lzma/bootloader_lzma.bin output/$(APP_VERSION)/OpenRDA5981_$(APP_VERSION).bin
|
||||
#dd conv=notrunc bs=1K if=sdk/OpenRDA5981/.build/OpenBeken.bin of=output/$(APP_VERSION)/OpenRDA5981_$(APP_VERSION).bin seek=12
|
||||
#./sdk/OpenRDA5981/ota_lzma/imgpkt e sdk/OpenRDA5981/.build/OpenBeken.bin sdk/OpenRDA5981/.build/OpenBeken.bin.lzma
|
||||
#python3 sdk/OpenRDA5981/ota_lzma/ota_pack_image_lzma.py sdk/OpenRDA5981/.build/OpenBeken.bin sdk/OpenRDA5981/.build/OpenBeken.bin.lzma output/$(APP_VERSION)/OpenRDA5981_$(APP_VERSION)_ota.img
|
||||
|
||||
# Add custom Makefile if required
|
||||
-include custom.mk
|
||||
@@ -690,6 +708,7 @@ clean:
|
||||
-test -d ./sdk/ameba-rtos && cd sdk/ameba-rtos/amebalite_gcc_project && ./build.py -a ../../../platforms/RTL8720E -c
|
||||
-test -d ./sdk/beken_freertos_sdk && $(MAKE) -C sdk/beken_freertos_sdk clean
|
||||
-test -d ./sdk/OpenTXW81X && $(MAKE) -C sdk/OpenTXW81X/project clean
|
||||
-test -d ./sdk/OpenRDA5981 && $(MAKE) -C sdk/OpenRDA5981 clean
|
||||
-test -d ./sdk/OpenLN882H/build && cmake --build ./sdk/OpenLN882H/build --target clean
|
||||
-test -d ./platforms/ESP-IDF/build-32 && cmake --build ./platforms/ESP-IDF/build-32 --target clean
|
||||
-test -d ./platforms/ESP-IDF/build-c3 && cmake --build ./platforms/ESP-IDF/build-c3 --target clean
|
||||
|
||||
@@ -31,6 +31,7 @@ Although this repository is named "OpenBK7231T_App", it has evolved into a multi
|
||||
- TR6260 (eg [HLK-M20](https://fccid.io/2AD56HLK-M20), XY-WE2S-A V1.1) (see [guide](https://www.elektroda.com/rtvforum/topic4093752.html))
|
||||
- ECR6600 (eg [AXYU](https://developer.tuya.com/en/docs/iot/AXYU?id=Kb0rwbv5b7aiy), [AXY2S](https://developer.tuya.com/en/docs/iot/AXY2S?id=Kb1aztk507fxf), [WG236](https://www.skylabmodule.com/product/wifi6-802-11axbluetooth-ble-5-1-combo-module-wg236), [DSM-036](https://www.dusuniot.com/product-specification/dsm-036-wi-fi6-and-ble-dual-cloud-module]), CDI-WX56600A-00, [BL-M6600XT1](https://jkrorwxhkqmllp5m-static.micyjz.com/BL-M6600XT1_datasheet_V1.0.1.0_230817-aidllBpoKqpljSRnkmnkjlnjp.pdf?dp=GvUApKfKKUAU), [HF-LPT6200](http://www.hi-flying.com/hf-lpt6200) (see [guide](https://www.elektroda.com/rtvforum/topic4111822.html))
|
||||
- TXW81X (eg TXW817-810, see [development thread](https://www.elektroda.com/rtvforum/topic4033757.html))
|
||||
- RDA5981 (eg RDA5981AM, RDA5981BM, WRD2L, TYWRD3S, HLK-M50)
|
||||
|
||||
Please use automatically compiled binaries from the Releases tab. To build OpenBeken yourself for any supported platform, fork our version of the submodule SDK first, and then check out this app repository alongside it. Details further down. Alternatively consider using the easier [override method.](https://www.elektroda.com/rtvforum/topic4082682.html)
|
||||
|
||||
|
||||
@@ -1,30 +1,31 @@
|
||||
|
||||
| Platform | Family | WPA3 | OTA | GPIO | GPIO IRQ | UART | PWM | ADC | Deep sleep | WDT | SPI LED | IR |
|
||||
|---------------------------------------------------------|-----------------|------|---------|------|----------|------|------|-----|------------|-----|---------|----|
|
||||
| BK7231T | Beken | ✅¹² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅¹² | ✅ |
|
||||
| BK7231N | Beken | ✅¹² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
||||
| BK7231S<br>BK7231U | Beken | ✅ | ✅¹ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
||||
| BK7238 | Beken | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
||||
| BK7252 | Beken | ✅ | ⚠️¹'¹⁴ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
||||
| BK7252N | Beken | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
||||
| XR809 | XRadio | ❌ | ❌⁵ | ✅ | ✅ | ✅ | ✅⁸ | ✅ | ✅ | ✅ | ❌ | ❌ |
|
||||
| XR806 | XRadio | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁸ | ✅ | ✅ | ✅ | ❌ | ❌ |
|
||||
| XR872/XF16 | XRadio | ✅ | ✅² | ✅ | ✅ | ✅ | ✅⁸ | ✅ | ✅ | ✅ | ❌ | ❌ |
|
||||
| BL602/LF686 | Bouffalo Lab | ✅ | ✅⁴ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
|
||||
| W800/W801 | Winner Micro | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ |
|
||||
| W600/W601 | Winner Micro | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ |
|
||||
| LN882H | Lightning Semi | ✅ | ✅⁴ | ✅ | ✅ | ❌ | ✅ | ❗️ | ❌ | ✅ | ✅ | ✅ |
|
||||
| ESP8266<br>ESP8285 | Espressif | ⚠️¹³ | ✅²'⁴ | ✅ | ✅ | ✅ | ✅⁷ | ❌ | ❗️ | ❓⁹ | ❌ | ❌ |
|
||||
| ESP32<br>-C2<br>-C3<br>-C5<br>-C6<br>-C61<br>-S2<br>-S3 | Espressif | ⚠️¹³ | ✅⁴ | ✅ | ✅ | ✅ | ✅ | ❓ | ✅¹⁰ | ✅ | ✅ | ❌ |
|
||||
| TR6260 | Transa Semi | ❌ | ❗️³'⁴ | ✅ | ❌ | ❌ | ✅⁸ | ❌ | ❌ | ✅⁹ | ❌ | ❌ |
|
||||
| RTL8711AM (Ameba1) | Realtek | ❗️ | ✅⁴ | ✅ | ✅ | ✅ | ✅⁸ | ❌ | ❌ | ✅ | ✅ | ❌ |
|
||||
| RTL8710B (AmebaZ) | Realtek | ✅ | ✅⁴ | ✅ | ✅ | ✅ | ✅⁸ | ❌ | ❌ | ✅ | ✅ | ❌ |
|
||||
| RTL8710C<br>RTL8720C (AmebaZ2) | Realtek | ✅ | ✅⁴ | ✅ | ✅ | ✅ | ✅⁸ | ➖ | ❌ | ✅ | ✅ | ✅ |
|
||||
| RTL8720D (AmebaD)<br>RTL872xCSM<br>RTL8720CS (AmebaCS) | Realtek | ✅ | ✅⁴ | ✅ | ✅ | ✅ | ✅⁸ | ❌ | ❌ | ✅ | ✅ | ❗️ |
|
||||
| RTL8721DA<br>RTL8711DAF (AmebaDplus) | Realtek | ✅ | ✅⁶ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ❗️ |
|
||||
| RTL8720E<br>RTL8710ECF (AmebaLite) | Realtek | ✅ | ✅⁶ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ❗️ |
|
||||
| ECR6600 | ESWIN | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁸ | ❗️ | ❗️¹¹ | ✅ | ❌ | ❌ |
|
||||
| TXW81X | Taixin | ❌ | ❗️ | ✅ | ❓ | ❌ | ❌ | ❌ | ❌ | ❓ | ❌ | ❌ |
|
||||
| Platform | Family | WPA3 | OTA | GPIO | GPIO IRQ | UART | PWM | ADC | Deep sleep | WDT | SPI LED | IR |
|
||||
|---------------------------------------------------------|----------------|------|---------|------|----------|------|------|-----|------------|-----|---------|----|
|
||||
| BK7231T | Beken | ✅¹² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅¹² | ✅ |
|
||||
| BK7231N | Beken | ✅¹² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
||||
| BK7231S<br>BK7231U | Beken | ✅ | ✅¹ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
||||
| BK7238 | Beken | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
||||
| BK7252 | Beken | ✅ | ⚠️¹'¹⁴ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
||||
| BK7252N | Beken | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
||||
| XR809 | XRadio | ❌ | ❌⁵ | ✅ | ✅ | ✅ | ✅⁸ | ✅ | ✅ | ✅ | ❌ | ❌ |
|
||||
| XR806 | XRadio | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁸ | ✅ | ✅ | ✅ | ❌ | ❌ |
|
||||
| XR872/XF16 | XRadio | ✅ | ✅² | ✅ | ✅ | ✅ | ✅⁸ | ✅ | ✅ | ✅ | ❌ | ❌ |
|
||||
| BL602/LF686 | Bouffalo Lab | ✅ | ✅⁴ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
|
||||
| W800/W801 | Winner Micro | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ |
|
||||
| W600/W601 | Winner Micro | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ |
|
||||
| LN882H | Lightning Semi | ✅ | ✅⁴ | ✅ | ✅ | ❌ | ✅ | ❗️ | ❌ | ✅ | ✅ | ✅ |
|
||||
| ESP8266<br>ESP8285 | Espressif | ⚠️¹³ | ✅²'⁴ | ✅ | ✅ | ✅ | ✅⁷ | ❌ | ❗️ | ❓⁹ | ❌ | ❌ |
|
||||
| ESP32<br>-C2<br>-C3<br>-C5<br>-C6<br>-C61<br>-S2<br>-S3 | Espressif | ⚠️¹³ | ✅⁴ | ✅ | ✅ | ✅ | ✅ | ❓ | ✅¹⁰ | ✅ | ✅ | ❌ |
|
||||
| TR6260 | Transa Semi | ❌ | ❗️³'⁴ | ✅ | ❌ | ❌ | ✅⁸ | ❌ | ❌ | ✅⁹ | ❌ | ❌ |
|
||||
| RTL8711AM (Ameba1) | Realtek | ❗️ | ✅⁴ | ✅ | ✅ | ✅ | ✅⁸ | ❌ | ❌ | ✅ | ✅ | ❌ |
|
||||
| RTL8710B (AmebaZ) | Realtek | ✅ | ✅⁴ | ✅ | ✅ | ✅ | ✅⁸ | ❌ | ❌ | ✅ | ✅ | ❌ |
|
||||
| RTL8710C<br>RTL8720C (AmebaZ2) | Realtek | ✅ | ✅⁴ | ✅ | ✅ | ✅ | ✅⁸ | ➖ | ❌ | ✅ | ✅ | ✅ |
|
||||
| RTL8720D (AmebaD)<br>RTL872xCSM<br>RTL8720CS (AmebaCS) | Realtek | ✅ | ✅⁴ | ✅ | ✅ | ✅ | ✅⁸ | ❌ | ❌ | ✅ | ✅ | ❗️ |
|
||||
| RTL8721DA<br>RTL8711DAF (AmebaDplus) | Realtek | ✅ | ✅⁶ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ❗️ |
|
||||
| RTL8720E<br>RTL8710ECF (AmebaLite) | Realtek | ✅ | ✅⁶ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ❗️ |
|
||||
| ECR6600 | ESWIN | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁸ | ❗️ | ❗️¹¹ | ✅ | ❌ | ❌ |
|
||||
| TXW81X | Taixin | ❌ | ❗️ | ✅ | ❓ | ❌ | ❌ | ❌ | ❌ | ❓ | ❌ | ❌ |
|
||||
| RDA5981 | RDA | ❌ | ❓ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ➖ | ❌ |
|
||||
|
||||
✅ - Works<br>
|
||||
❓ - Not tested<br>
|
||||
|
||||
@@ -137,6 +137,11 @@
|
||||
#define EF_START_ADDR 0xEF000
|
||||
#define ENV_AREA_SIZE 0x6000
|
||||
|
||||
#elif PLATFORM_RDA5981
|
||||
|
||||
#define EF_START_ADDR 0xF7000
|
||||
#define ENV_AREA_SIZE 0x4000
|
||||
|
||||
#elif WINDOWS
|
||||
|
||||
#define EF_START_ADDR 0
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
#if !WINDOWS && !PLATFORM_TXW81X
|
||||
#if !WINDOWS && !PLATFORM_TXW81X && !PLATFORM_RDA5981
|
||||
#include "FreeRTOS.h"
|
||||
#include "semphr.h"
|
||||
#include "queue.h"
|
||||
@@ -72,6 +72,16 @@ typedef k_mutex_handle_t QueueHandle_t;
|
||||
#define xSemaphoreGive(a) csi_kernel_mutex_unlock(a)
|
||||
extern struct spi_nor_flash* obk_flash;
|
||||
|
||||
#elif PLATFORM_RDA5981
|
||||
|
||||
#include "stdbool.h"
|
||||
#include "rda_sys_wrapper.h"
|
||||
|
||||
typedef void* QueueHandle_t;
|
||||
#define xSemaphoreCreateMutex rda_mutex_create
|
||||
#define xSemaphoreTake rda_mutex_wait
|
||||
#define xSemaphoreGive rda_mutex_realease
|
||||
|
||||
#elif WINDOWS
|
||||
|
||||
#include "framework.h"
|
||||
@@ -172,7 +182,7 @@ EfErrCode ef_port_read(uint32_t addr, uint32_t* buf, size_t size)
|
||||
#elif WINDOWS
|
||||
memcpy(buf, env_area + addr, size);
|
||||
return EF_NO_ERR;
|
||||
#elif PLATFORM_TXW81X
|
||||
#elif PLATFORM_TXW81X || PLATFORM_RDA5981
|
||||
HAL_FlashRead(buf, size, addr);
|
||||
return EF_NO_ERR;
|
||||
#endif
|
||||
@@ -211,7 +221,7 @@ EfErrCode ef_port_erase(uint32_t addr, size_t size)
|
||||
return res;
|
||||
#elif WINDOWS
|
||||
memset(env_area + addr, 0xFF, size);
|
||||
#elif PLATFORM_TXW81X
|
||||
#elif PLATFORM_TXW81X || PLATFORM_RDA5981
|
||||
HAL_FlashEraseSector(addr);
|
||||
return EF_NO_ERR;
|
||||
#endif
|
||||
@@ -250,7 +260,7 @@ EfErrCode ef_port_write(uint32_t addr, const uint32_t* buf, size_t size)
|
||||
#elif WINDOWS
|
||||
memcpy(env_area + addr, buf, size);
|
||||
return EF_NO_ERR;
|
||||
#elif PLATFORM_TXW81X
|
||||
#elif PLATFORM_TXW81X || PLATFORM_RDA5981
|
||||
HAL_FlashWrite(buf, size, addr);
|
||||
return EF_NO_ERR;
|
||||
#endif
|
||||
|
||||
46
platforms/RDA5981/OpenBeken.mk
Normal file
46
platforms/RDA5981/OpenBeken.mk
Normal file
@@ -0,0 +1,46 @@
|
||||
OBK_DIR = ../../..
|
||||
|
||||
CC_FLAGS += -DPLATFORM_RDA5981=1 -DMBED_HEAP_STATS_ENABLED -DWRAP_PRINTF
|
||||
CPPC_FLAGS += -DPLATFORM_RDA5981=1 -DMBED_HEAP_STATS_ENABLED -DWRAP_PRINTF
|
||||
|
||||
INCLUDE_PATHS += -I$(OBK_DIR)/libraries/easyflash/inc
|
||||
|
||||
SRC_C += $(OBK_DIR)/src/hal/rda5981/hal_flashConfig_rda5981.c
|
||||
SRC_C += $(OBK_DIR)/src/hal/rda5981/hal_flashVars_rda5981.c
|
||||
SRC_C += $(OBK_DIR)/src/hal/rda5981/hal_generic_rda5981.c
|
||||
SRC_C += $(OBK_DIR)/src/hal/rda5981/hal_pins_rda5981.c
|
||||
SRC_C += $(OBK_DIR)/src/hal/rda5981/hal_ota_rda5981.c
|
||||
SRC_C += $(OBK_DIR)/src/hal/rda5981/hal_uart_rda5981.c
|
||||
SRC_CPP += $(OBK_DIR)/src/hal/rda5981/hal_main_rda5981.cpp
|
||||
SRC_CPP += $(OBK_DIR)/src/hal/rda5981/hal_wifi_rda5981.cpp
|
||||
|
||||
OBK_SRCS = $(OBK_DIR)/src/
|
||||
include $(OBK_DIR)/platforms/obk_main.mk
|
||||
SRC_C += $(OBKM_SRC)
|
||||
#SRC_CPP += $(OBKM_SRC_CXX)
|
||||
CC_FLAGS += $(OBK_CFLAGS)
|
||||
CPPC_FLAGS += $(OBK_CFLAGS)
|
||||
#CPPFLAGS += $(INCLUDES) -fpermissive
|
||||
|
||||
SRC_C += $(OBK_DIR)/libraries/easyflash/ports/ef_port.c
|
||||
SRC_C += $(OBK_DIR)/libraries/easyflash/src/easyflash.c
|
||||
#SRC_C += $(OBK_DIR)/libraries/easyflash/src/ef_cmd.c
|
||||
SRC_C += $(OBK_DIR)/libraries/easyflash/src/ef_env.c
|
||||
SRC_C += $(OBK_DIR)/libraries/easyflash/src/ef_env_legacy.c
|
||||
SRC_C += $(OBK_DIR)/libraries/easyflash/src/ef_env_legacy_wl.c
|
||||
SRC_C += $(OBK_DIR)/libraries/easyflash/src/ef_iap.c
|
||||
SRC_C += $(OBK_DIR)/libraries/easyflash/src/ef_log.c
|
||||
SRC_C += $(OBK_DIR)/libraries/easyflash/src/ef_utils.c
|
||||
|
||||
INCLUDE_PATHS += -I$(OBK_DIR)/include -I$(OBK_DIR)/libraries/berry/src
|
||||
BERRY_MODULEPATH = $(OBK_DIR)/src/berry/modules
|
||||
BERRY_SRCPATH = $(OBK_DIR)/libraries/berry/src
|
||||
|
||||
include $(OBK_DIR)/libraries/berry.mk
|
||||
|
||||
SRC_C += $(BERRY_SRC_C)
|
||||
|
||||
OBJECTS += $(SRC_C:.c=.o)
|
||||
OBJECTS += $(SRC_CPP:.cpp=.o)
|
||||
|
||||
LD_FLAGS += -Wl,--wrap,vsnprintf -Wl,--wrap,snprintf -Wl,--wrap,sprintf -Wl,--wrap,vsprintf
|
||||
1
sdk/OpenRDA5981
Submodule
1
sdk/OpenRDA5981
Submodule
Submodule sdk/OpenRDA5981 added at 5567e5398b
@@ -135,14 +135,6 @@ int EVENT_ParseEventName(const char *s) {
|
||||
}
|
||||
if (!stricmp(s, "noPingTime"))
|
||||
return CMD_EVENT_CHANGE_NOPINGTIME;
|
||||
if (!stricmp(s, "NoMQTTTime"))
|
||||
return CMD_EVENT_CHANGE_NOMQTTTIME;
|
||||
if(!stricmp(s,"voltage"))
|
||||
return CMD_EVENT_CHANGE_VOLTAGE;
|
||||
if(!stricmp(s,"current"))
|
||||
return CMD_EVENT_CHANGE_CURRENT;
|
||||
if(!stricmp(s,"power"))
|
||||
return CMD_EVENT_CHANGE_POWER;
|
||||
if(!stricmp(s,"OnRelease"))
|
||||
return CMD_EVENT_PIN_ONRELEASE;
|
||||
if (!stricmp(s, "OnPress"))
|
||||
@@ -169,55 +161,75 @@ int EVENT_ParseEventName(const char *s) {
|
||||
return CMD_EVENT_CHANNEL_ONCHANGE;
|
||||
if(!stricmp(s,"OnUART"))
|
||||
return CMD_EVENT_ON_UART;
|
||||
#if ENABLE_MQTT
|
||||
if(!stricmp(s,"MQTTState"))
|
||||
return CMD_EVENT_MQTT_STATE;
|
||||
if(!stricmp(s, "NoMQTTTime"))
|
||||
return CMD_EVENT_CHANGE_NOMQTTTIME;
|
||||
if(!stricmp(s, "OnMQTT"))
|
||||
return CMD_EVENT_ON_MQTT;
|
||||
#endif
|
||||
#if ENABLE_NTP
|
||||
if (!stricmp(s, "NTPState"))
|
||||
return CMD_EVENT_NTP_STATE;
|
||||
#endif
|
||||
#if ENABLE_LED_BASIC
|
||||
if (!stricmp(s, "LEDState"))
|
||||
return CMD_EVENT_LED_STATE;
|
||||
if (!stricmp(s, "LEDMode"))
|
||||
return CMD_EVENT_LED_MODE;
|
||||
#endif
|
||||
#if ENABLE_BL_SHARED
|
||||
if(!stricmp(s, "voltage"))
|
||||
return CMD_EVENT_CHANGE_VOLTAGE;
|
||||
if(!stricmp(s, "current"))
|
||||
return CMD_EVENT_CHANGE_CURRENT;
|
||||
if(!stricmp(s, "power"))
|
||||
return CMD_EVENT_CHANGE_POWER;
|
||||
if(!stricmp(s,"energycounter") || !stricmp(s, "energy"))
|
||||
return CMD_EVENT_CHANGE_CONSUMPTION_TOTAL;
|
||||
if(!stricmp(s,"energycounter_last_hour"))
|
||||
return CMD_EVENT_CHANGE_CONSUMPTION_LAST_HOUR;
|
||||
#endif
|
||||
#if ENABLE_DRIVER_IRREMOTEESP || ENABLE_DRIVER_IR || ENABLE_DRIVER_IR2 || WINDOWS
|
||||
if(!stricmp(s,"IR_RC5"))
|
||||
return CMD_EVENT_IR_RC5;
|
||||
return CMD_EVENT_IR_RC5;
|
||||
if(!stricmp(s,"IR_RC6"))
|
||||
return CMD_EVENT_IR_RC6;
|
||||
return CMD_EVENT_IR_RC6;
|
||||
if(!stricmp(s,"IR_Samsung"))
|
||||
return CMD_EVENT_IR_SAMSUNG;
|
||||
return CMD_EVENT_IR_SAMSUNG;
|
||||
if(!stricmp(s,"IR_PANASONIC"))
|
||||
return CMD_EVENT_IR_PANASONIC;
|
||||
return CMD_EVENT_IR_PANASONIC;
|
||||
if(!stricmp(s,"IR_NEC"))
|
||||
return CMD_EVENT_IR_NEC;
|
||||
return CMD_EVENT_IR_NEC;
|
||||
if(!stricmp(s,"IR_SAMSUNG_LG"))
|
||||
return CMD_EVENT_IR_SAMSUNG_LG;
|
||||
return CMD_EVENT_IR_SAMSUNG_LG;
|
||||
if(!stricmp(s,"IR_SHARP"))
|
||||
return CMD_EVENT_IR_SHARP;
|
||||
return CMD_EVENT_IR_SHARP;
|
||||
if(!stricmp(s,"IR_SONY"))
|
||||
return CMD_EVENT_IR_SONY;
|
||||
// WiFi state has single argument: HALWifiStatus_t
|
||||
if (!stricmp(s, "WiFiState"))
|
||||
return CMD_EVENT_WIFI_STATE;
|
||||
return CMD_EVENT_IR_SONY;
|
||||
#endif
|
||||
#if ENABLE_DRIVER_TUYAMCU
|
||||
if (!stricmp(s, "TuyaMCUParsed"))
|
||||
return CMD_EVENT_TUYAMCU_PARSED;
|
||||
if(!stricmp(s, "OnDP"))
|
||||
return CMD_EVENT_ON_DP;
|
||||
if(!stricmp(s, "MissedHeartbeats"))
|
||||
return CMD_EVENT_MISSEDHEARTBEATS;
|
||||
#endif
|
||||
// WiFi state has single argument: HALWifiStatus_t
|
||||
if(!stricmp(s, "WiFiState"))
|
||||
return CMD_EVENT_WIFI_STATE;
|
||||
if (!stricmp(s, "OnADCButton"))
|
||||
return CMD_EVENT_ADC_BUTTON;
|
||||
if (!stricmp(s, "OnCustomDown"))
|
||||
return CMD_EVENT_CUSTOM_DOWN;
|
||||
if (!stricmp(s, "OnCustomUP"))
|
||||
return CMD_EVENT_CUSTOM_UP;
|
||||
if (!stricmp(s, "OnMQTT"))
|
||||
return CMD_EVENT_ON_MQTT;
|
||||
if (!stricmp(s, "OnCMD"))
|
||||
return CMD_EVENT_ON_CMD;
|
||||
if (!stricmp(s, "OnDP"))
|
||||
return CMD_EVENT_ON_DP;
|
||||
if (!stricmp(s, "OnHTTP"))
|
||||
return CMD_EVENT_ON_HTTP;
|
||||
if (!stricmp(s, "MissedHeartbeats"))
|
||||
return CMD_EVENT_MISSEDHEARTBEATS;
|
||||
if (isdigit((unsigned char)*s)) {
|
||||
return atoi(s);
|
||||
}
|
||||
|
||||
@@ -315,6 +315,15 @@ static commandResult_t CMD_PowerSave(const void* context, const char* cmd, const
|
||||
psm_pwr_mgt_ctrl(0);
|
||||
psm_sleep_mode_ena_op(true, 0);
|
||||
}
|
||||
#elif PLATFORM_RDA5981
|
||||
if(bOn)
|
||||
{
|
||||
wland_set_sta_sleep(1);
|
||||
}
|
||||
else
|
||||
{
|
||||
wland_set_sta_sleep(0);
|
||||
}
|
||||
#else
|
||||
ADDLOG_INFO(LOG_FEATURE_CMD, "PowerSave is not implemented on this platform");
|
||||
#endif
|
||||
|
||||
@@ -171,7 +171,7 @@ int state = 0;
|
||||
int pwmIndex = -1;
|
||||
unsigned int period;
|
||||
|
||||
uint8_t group, channel;
|
||||
static uint8_t group, channel;
|
||||
|
||||
// define to 1 to enable debug timer io output
|
||||
#if 0
|
||||
|
||||
17
src/hal/rda5981/hal_flashConfig_rda5981.c
Normal file
17
src/hal/rda5981/hal_flashConfig_rda5981.c
Normal file
@@ -0,0 +1,17 @@
|
||||
#ifdef PLATFORM_RDA5981
|
||||
|
||||
#include "../hal_flashConfig.h"
|
||||
#include "wland_flash.h"
|
||||
|
||||
int HAL_Configuration_ReadConfigMemory(void* target, int dataLen)
|
||||
{
|
||||
return rda5981_read_flash(0x180fc000, target, dataLen) == 0;
|
||||
}
|
||||
|
||||
int HAL_Configuration_SaveConfigMemory(void* src, int dataLen)
|
||||
{
|
||||
int ret = rda5981_erase_flash(0x180fc000, 0x1000);
|
||||
return rda5981_write_flash(0x180fc000, src, dataLen) == 0;
|
||||
}
|
||||
|
||||
#endif // PLATFORM_RDA5981
|
||||
162
src/hal/rda5981/hal_flashVars_rda5981.c
Normal file
162
src/hal/rda5981/hal_flashVars_rda5981.c
Normal file
@@ -0,0 +1,162 @@
|
||||
#ifdef PLATFORM_RDA5981
|
||||
|
||||
#include "../../new_common.h"
|
||||
#include "../hal_flashVars.h"
|
||||
#include "../../logging/logging.h"
|
||||
#include "wland_flash.h"
|
||||
|
||||
FLASH_VARS_STRUCTURE flash_vars;
|
||||
static int g_loaded = 0;
|
||||
|
||||
#define SAVE_CHANGE_IF_REQUIRED_AND_COUNT(target, source, counter) \
|
||||
if((target) != (source)) { \
|
||||
(target) = (source); \
|
||||
counter++; \
|
||||
}
|
||||
|
||||
extern void InitEasyFlashIfNeeded();
|
||||
|
||||
static int ReadFlashVars(void* target, int dataLen)
|
||||
{
|
||||
g_loaded = rda5981_read_user_data(target, dataLen, BIT18) == 0;
|
||||
return dataLen;
|
||||
}
|
||||
|
||||
static int SaveFlashVars(void* src, int dataLen)
|
||||
{
|
||||
rda5981_erase_user_data(BIT18);
|
||||
rda5981_write_user_data(src, dataLen, BIT18);
|
||||
return dataLen;
|
||||
}
|
||||
|
||||
// call at startup
|
||||
void HAL_FlashVars_IncreaseBootCount()
|
||||
{
|
||||
memset(&flash_vars, 0, sizeof(flash_vars));
|
||||
ReadFlashVars(&flash_vars, sizeof(flash_vars));
|
||||
flash_vars.boot_count++;
|
||||
SaveFlashVars(&flash_vars, sizeof(flash_vars));
|
||||
}
|
||||
|
||||
void HAL_FlashVars_SaveChannel(int index, int value)
|
||||
{
|
||||
if(index < 0 || index >= MAX_RETAIN_CHANNELS)
|
||||
return;
|
||||
if(g_loaded == 0)
|
||||
{
|
||||
ReadFlashVars(&flash_vars, sizeof(flash_vars));
|
||||
}
|
||||
flash_vars.savedValues[index] = value;
|
||||
// save after increase
|
||||
SaveFlashVars(&flash_vars, sizeof(flash_vars));
|
||||
}
|
||||
|
||||
void HAL_FlashVars_ReadLED(byte* mode, short* brightness, short* temperature, byte* rgb, byte* bEnableAll)
|
||||
{
|
||||
if(g_loaded == 0)
|
||||
{
|
||||
ReadFlashVars(&flash_vars, sizeof(flash_vars));
|
||||
}
|
||||
*bEnableAll = flash_vars.savedValues[MAX_RETAIN_CHANNELS - 4];
|
||||
*mode = flash_vars.savedValues[MAX_RETAIN_CHANNELS - 3];
|
||||
*temperature = flash_vars.savedValues[MAX_RETAIN_CHANNELS - 2];
|
||||
*brightness = flash_vars.savedValues[MAX_RETAIN_CHANNELS - 1];
|
||||
rgb[0] = flash_vars.rgb[0];
|
||||
rgb[1] = flash_vars.rgb[1];
|
||||
rgb[2] = flash_vars.rgb[2];
|
||||
}
|
||||
|
||||
void HAL_FlashVars_SaveLED(byte mode, short brightness, short temperature, byte r, byte g, byte b, byte bEnableAll)
|
||||
{
|
||||
int iChangesCount = 0;
|
||||
|
||||
if(g_loaded == 0)
|
||||
{
|
||||
ReadFlashVars(&flash_vars, sizeof(flash_vars));
|
||||
}
|
||||
|
||||
SAVE_CHANGE_IF_REQUIRED_AND_COUNT(flash_vars.savedValues[MAX_RETAIN_CHANNELS - 1], brightness, iChangesCount);
|
||||
SAVE_CHANGE_IF_REQUIRED_AND_COUNT(flash_vars.savedValues[MAX_RETAIN_CHANNELS - 2], temperature, iChangesCount);
|
||||
SAVE_CHANGE_IF_REQUIRED_AND_COUNT(flash_vars.savedValues[MAX_RETAIN_CHANNELS - 3], mode, iChangesCount);
|
||||
SAVE_CHANGE_IF_REQUIRED_AND_COUNT(flash_vars.savedValues[MAX_RETAIN_CHANNELS - 4], bEnableAll, iChangesCount);
|
||||
SAVE_CHANGE_IF_REQUIRED_AND_COUNT(flash_vars.rgb[0], r, iChangesCount);
|
||||
SAVE_CHANGE_IF_REQUIRED_AND_COUNT(flash_vars.rgb[1], g, iChangesCount);
|
||||
SAVE_CHANGE_IF_REQUIRED_AND_COUNT(flash_vars.rgb[2], b, iChangesCount);
|
||||
|
||||
if(iChangesCount > 0)
|
||||
{
|
||||
ADDLOG_INFO(LOG_FEATURE_CFG, "####### Flash Save LED #######");
|
||||
SaveFlashVars(&flash_vars, sizeof(flash_vars));
|
||||
}
|
||||
}
|
||||
|
||||
short HAL_FlashVars_ReadUsage()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void HAL_FlashVars_SaveTotalUsage(short usage)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// call once started (>30s?)
|
||||
void HAL_FlashVars_SaveBootComplete()
|
||||
{
|
||||
flash_vars.boot_success_count = flash_vars.boot_count;
|
||||
SaveFlashVars(&flash_vars, sizeof(flash_vars));
|
||||
}
|
||||
|
||||
// call to return the number of boots since a HAL_FlashVars_SaveBootComplete
|
||||
int HAL_FlashVars_GetBootFailures()
|
||||
{
|
||||
int diff = 0;
|
||||
diff = flash_vars.boot_count - flash_vars.boot_success_count;
|
||||
return diff;
|
||||
}
|
||||
|
||||
int HAL_FlashVars_GetBootCount()
|
||||
{
|
||||
return flash_vars.boot_count;
|
||||
}
|
||||
|
||||
int HAL_FlashVars_GetChannelValue(int ch)
|
||||
{
|
||||
if(ch < 0 || ch >= MAX_RETAIN_CHANNELS)
|
||||
return 0;
|
||||
if(g_loaded == 0)
|
||||
{
|
||||
ReadFlashVars(&flash_vars, sizeof(flash_vars));
|
||||
}
|
||||
return flash_vars.savedValues[ch];
|
||||
}
|
||||
|
||||
int HAL_GetEnergyMeterStatus(ENERGY_METERING_DATA* data)
|
||||
{
|
||||
if(data != NULL)
|
||||
{
|
||||
if(g_loaded == 0)
|
||||
{
|
||||
ReadFlashVars(&flash_vars, sizeof(flash_vars));
|
||||
}
|
||||
memcpy(data, &flash_vars.emetering, sizeof(ENERGY_METERING_DATA));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int HAL_SetEnergyMeterStatus(ENERGY_METERING_DATA* data)
|
||||
{
|
||||
if(data != NULL)
|
||||
{
|
||||
memcpy(&flash_vars.emetering, data, sizeof(ENERGY_METERING_DATA));
|
||||
SaveFlashVars(&flash_vars, sizeof(flash_vars));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void HAL_FlashVars_SaveTotalConsumption(float total_consumption)
|
||||
{
|
||||
flash_vars.emetering.TotalConsumption = total_consumption;
|
||||
}
|
||||
|
||||
#endif // PLATFORM_RDA5981
|
||||
47
src/hal/rda5981/hal_generic_rda5981.c
Normal file
47
src/hal/rda5981/hal_generic_rda5981.c
Normal file
@@ -0,0 +1,47 @@
|
||||
#if PLATFORM_RDA5981
|
||||
|
||||
#include "../hal_generic.h"
|
||||
#include "wland_flash.h"
|
||||
#include "rda_wdt_api.h"
|
||||
#include "wait_api.h"
|
||||
|
||||
static wdt_t obj;
|
||||
|
||||
void HAL_RebootModule()
|
||||
{
|
||||
//rda_wdt_softreset();
|
||||
rda_sys_softreset();
|
||||
}
|
||||
|
||||
void HAL_Delay_us(int delay)
|
||||
{
|
||||
wait_us(delay);
|
||||
}
|
||||
|
||||
void HAL_Configure_WDT()
|
||||
{
|
||||
rda_wdt_init(&obj, 10);
|
||||
rda_wdt_start(&obj);
|
||||
}
|
||||
|
||||
void HAL_Run_WDT()
|
||||
{
|
||||
rda_wdt_feed(&obj);
|
||||
}
|
||||
|
||||
int HAL_FlashRead(char* buffer, int readlen, int startaddr)
|
||||
{
|
||||
return rda5981_read_flash(0x18000000 + startaddr, (uint8_t*)buffer, readlen);
|
||||
}
|
||||
|
||||
int HAL_FlashWrite(char* buffer, int writelen, int startaddr)
|
||||
{
|
||||
return rda5981_write_flash(0x18000000 + startaddr, (uint8_t*)buffer, writelen);
|
||||
}
|
||||
|
||||
int HAL_FlashEraseSector(int startaddr)
|
||||
{
|
||||
return rda5981_erase_flash(0x18000000 + startaddr, 0x1000);
|
||||
}
|
||||
|
||||
#endif // PLATFORM_RDA5981
|
||||
28
src/hal/rda5981/hal_main_rda5981.cpp
Normal file
28
src/hal/rda5981/hal_main_rda5981.cpp
Normal file
@@ -0,0 +1,28 @@
|
||||
#if PLATFORM_RDA5981
|
||||
|
||||
#include "rda_sys_wrapper.h"
|
||||
#include "console.h"
|
||||
#include "rda59xx_daemon.h"
|
||||
#include "wland_flash.h"
|
||||
#include "WiFiStackInterface.h"
|
||||
|
||||
extern "C" {
|
||||
extern void Main_Init();
|
||||
extern void Main_OnEverySecond();
|
||||
}
|
||||
|
||||
extern WiFiStackInterface wifi;
|
||||
|
||||
__attribute__((used)) int main()
|
||||
{
|
||||
//rda5981_set_user_data_addr(0x180FB000, 0x180FC000, 3584);
|
||||
wifi.init();
|
||||
Main_Init();
|
||||
while(true)
|
||||
{
|
||||
osDelay(1000);
|
||||
Main_OnEverySecond();
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
92
src/hal/rda5981/hal_ota_rda5981.c
Normal file
92
src/hal/rda5981/hal_ota_rda5981.c
Normal file
@@ -0,0 +1,92 @@
|
||||
#if PLATFORM_RDA5981
|
||||
|
||||
#include "../../obk_config.h"
|
||||
#include "../../new_common.h"
|
||||
#include "../../new_cfg.h"
|
||||
#include "../../logging/logging.h"
|
||||
#include "../../httpserver/new_http.h"
|
||||
#include "../hal_ota.h"
|
||||
|
||||
#include "rda5981_ota.h"
|
||||
|
||||
int http_rest_post_flash(http_request_t* request, int startaddr, int maxaddr)
|
||||
{
|
||||
int total = 0;
|
||||
int towrite = request->bodylen;
|
||||
char* writebuf = request->bodystart;
|
||||
int writelen = request->bodylen;
|
||||
|
||||
ADDLOG_DEBUG(LOG_FEATURE_OTA, "OTA post len %d", request->contentLength);
|
||||
|
||||
int ret = 0;
|
||||
|
||||
if (request->contentLength > 0)
|
||||
{
|
||||
towrite = request->contentLength;
|
||||
}
|
||||
else
|
||||
{
|
||||
ret = -1;
|
||||
ADDLOG_ERROR(LOG_FEATURE_OTA, "Content-length is 0");
|
||||
goto update_ota_exit;
|
||||
}
|
||||
startaddr = 0x1807E000;
|
||||
// if compressed ota
|
||||
//startaddr = 0x1809C000;
|
||||
if(rda5981_write_partition_start(startaddr, towrite) != 0)
|
||||
{
|
||||
ret = -1;
|
||||
ADDLOG_ERROR(LOG_FEATURE_OTA, "rda5981_write_partition_start failed");
|
||||
goto update_ota_exit;
|
||||
}
|
||||
|
||||
do
|
||||
{
|
||||
if(rda5981_write_partition(startaddr, (unsigned char*)writebuf, writelen) != 0)
|
||||
{
|
||||
ret = -1;
|
||||
goto update_ota_exit;
|
||||
}
|
||||
delay_ms(5);
|
||||
ADDLOG_DEBUG(LOG_FEATURE_OTA, "Writelen %i at %i", writelen, total);
|
||||
total += writelen;
|
||||
startaddr += writelen;
|
||||
towrite -= writelen;
|
||||
if (towrite > 0)
|
||||
{
|
||||
writebuf = request->received;
|
||||
writelen = recv(request->fd, writebuf, 2048, 0);
|
||||
if (writelen < 0)
|
||||
{
|
||||
ADDLOG_DEBUG(LOG_FEATURE_OTA, "recv returned %d - end of data - remaining %d", writelen, towrite);
|
||||
ret = -1;
|
||||
}
|
||||
}
|
||||
} while ((towrite > 0) && (writelen >= 0));
|
||||
|
||||
int check = rda5981_write_partition_end();
|
||||
if(check != 0)
|
||||
{
|
||||
ADDLOG_ERROR(LOG_FEATURE_OTA, "rda5981_write_partition_end failed");
|
||||
ret = -1;
|
||||
}
|
||||
update_ota_exit:
|
||||
if (ret != -1)
|
||||
{
|
||||
ADDLOG_INFO(LOG_FEATURE_OTA, "OTA is successful");
|
||||
}
|
||||
else
|
||||
{
|
||||
ADDLOG_ERROR(LOG_FEATURE_OTA, "OTA failed. Reboot to retry");
|
||||
return http_rest_error(request, ret, "error");
|
||||
}
|
||||
|
||||
ADDLOG_DEBUG(LOG_FEATURE_OTA, "%d total bytes written", total);
|
||||
http_setup(request, httpMimeTypeJson);
|
||||
hprintf255(request, "{\"size\":%d}", total);
|
||||
poststr(request, NULL);
|
||||
CFG_IncrementOTACount();
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
23
src/hal/rda5981/hal_pinmap_rda5981.h
Normal file
23
src/hal/rda5981/hal_pinmap_rda5981.h
Normal file
@@ -0,0 +1,23 @@
|
||||
#ifdef PLATFORM_RDA5981
|
||||
|
||||
#include "../../new_common.h"
|
||||
#include "../../logging/logging.h"
|
||||
#include "../../new_cfg.h"
|
||||
#include "../../new_pins.h"
|
||||
#include <gpio_api.h>
|
||||
#include "pwmout_api.h"
|
||||
#include "gpio_irq_api.h"
|
||||
|
||||
typedef struct rdaPinMapping_s
|
||||
{
|
||||
const char* name;
|
||||
PinName pin;
|
||||
gpio_t* gpio;
|
||||
gpio_irq_t* irq;
|
||||
pwmout_t* pwm;
|
||||
} rdaPinMapping_t;
|
||||
|
||||
extern rdaPinMapping_t g_pins[];
|
||||
extern int g_numPins;
|
||||
|
||||
#endif // PLATFORM_RDA5981
|
||||
254
src/hal/rda5981/hal_pins_rda5981.c
Normal file
254
src/hal/rda5981/hal_pins_rda5981.c
Normal file
@@ -0,0 +1,254 @@
|
||||
#ifdef PLATFORM_RDA5981
|
||||
|
||||
#include "../../new_common.h"
|
||||
#include "../../logging/logging.h"
|
||||
#include "../../new_cfg.h"
|
||||
#include "../../new_pins.h"
|
||||
#include "../hal_pins.h"
|
||||
#include "hal_pinmap_rda5981.h"
|
||||
|
||||
rdaPinMapping_t g_pins[] = {
|
||||
{ "IO0 (B0)", GPIO_PIN0, NULL, NULL },
|
||||
{ "IO1 (B1/RX1)", GPIO_PIN1, NULL, NULL },
|
||||
{ "IO2 (B2/TX1)", GPIO_PIN2, NULL, NULL },
|
||||
{ "IO3 (B3)", GPIO_PIN3, NULL, NULL },
|
||||
{ "IO4 (B4)", GPIO_PIN4, NULL, NULL },
|
||||
{ "IO5 (B5)", GPIO_PIN5, NULL, NULL },
|
||||
{ "IO6 (B6)", GPIO_PIN6, NULL, NULL },
|
||||
{ "IO7 (B7)", GPIO_PIN7, NULL, NULL },
|
||||
{ "IO8 (B8)", GPIO_PIN8, NULL, NULL },
|
||||
{ "IO9 (B9)", GPIO_PIN9, NULL, NULL },
|
||||
{ "IO10 (A8)", GPIO_PIN10, NULL, NULL },
|
||||
{ "IO11 (A9)", GPIO_PIN11, NULL, NULL },
|
||||
{ "IO12 (C0)", GPIO_PIN12, NULL, NULL },
|
||||
{ "IO13 (C1)", GPIO_PIN13, NULL, NULL },
|
||||
{ "IO14 (C2)", GPIO_PIN14, NULL, NULL },
|
||||
{ "IO15 (C3)", GPIO_PIN15, NULL, NULL },
|
||||
{ "IO16 (C4)", GPIO_PIN16, NULL, NULL },
|
||||
{ "IO17 (C5)", GPIO_PIN17, NULL, NULL },
|
||||
{ "IO18 (C6)", GPIO_PIN18, NULL, NULL },
|
||||
{ "IO19 (C7)", GPIO_PIN19, NULL, NULL },
|
||||
{ "IO20 (C8)", GPIO_PIN20, NULL, NULL },
|
||||
{ "IO21 (C9)", GPIO_PIN21, NULL, NULL },
|
||||
{ "IO22 (D0)", GPIO_PIN22, NULL, NULL },
|
||||
{ "IO23 (D1)", GPIO_PIN23, NULL, NULL },
|
||||
{ "IO24 (D2/RX1)", GPIO_PIN24, NULL, NULL },
|
||||
{ "IO25 (D3/TX1)", GPIO_PIN25, NULL, NULL },
|
||||
{ "IO26 (A0/RX0)", GPIO_PIN26, NULL, NULL },
|
||||
{ "IO27 (A1/TX0)", GPIO_PIN27, NULL, NULL },
|
||||
//{ "IO14 (A2)", GPIO_PIN14A, NULL, NULL },
|
||||
//{ "IO15 (A3)", GPIO_PIN15A, NULL, NULL },
|
||||
//{ "IO16 (A4)", GPIO_PIN16A, NULL, NULL },
|
||||
//{ "IO17 (A5)", GPIO_PIN17A, NULL, NULL },
|
||||
//{ "IO18 (A6)", GPIO_PIN18A, NULL, NULL },
|
||||
//{ "IO19 (A7)", GPIO_PIN19A, NULL, NULL },
|
||||
{ "VBAT", ADC_PIN2, NULL, NULL },
|
||||
};
|
||||
|
||||
int g_numPins = sizeof(g_pins) / sizeof(g_pins[0]) - 1;
|
||||
|
||||
int HAL_PIN_CanThisPinBePWM(int index)
|
||||
{
|
||||
if(index >= g_numPins)
|
||||
return 0;
|
||||
rdaPinMapping_t* pin = g_pins + index;
|
||||
switch(pin->pin)
|
||||
{
|
||||
case PA_0:
|
||||
case PA_1:
|
||||
case PB_0:
|
||||
case PB_1:
|
||||
case PB_2:
|
||||
case PB_3:
|
||||
case PB_8:
|
||||
case PD_0:
|
||||
case PD_1:
|
||||
case PD_2:
|
||||
case PD_3:
|
||||
return 1;
|
||||
default: return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int PIN_GetPWMIndexForPinIndex(int index)
|
||||
{
|
||||
rdaPinMapping_t* pin = g_pins + index;
|
||||
if(index >= g_numPins)
|
||||
return -1;
|
||||
if(pin->pwm != NULL) return pin->pwm->channel;
|
||||
else return HAL_PIN_CanThisPinBePWM(index);
|
||||
}
|
||||
|
||||
const char* HAL_PIN_GetPinNameAlias(int index)
|
||||
{
|
||||
if(index >= g_numPins + 1)
|
||||
return "error";
|
||||
return g_pins[index].name;
|
||||
}
|
||||
|
||||
void RDA_GPIO_Init(rdaPinMapping_t* pin)
|
||||
{
|
||||
if(pin->gpio != NULL || pin->irq != NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
pin->gpio = os_malloc(sizeof(gpio_t));
|
||||
memset(pin->gpio, 0, sizeof(gpio_t));
|
||||
gpio_init(pin->gpio, pin->pin);
|
||||
}
|
||||
|
||||
void HAL_PIN_SetOutputValue(int index, int iVal)
|
||||
{
|
||||
rdaPinMapping_t* pin = g_pins + index;
|
||||
if(index >= g_numPins || pin->gpio == NULL)
|
||||
return;
|
||||
gpio_write(pin->gpio, iVal ? 1 : 0);
|
||||
}
|
||||
|
||||
int HAL_PIN_ReadDigitalInput(int index)
|
||||
{
|
||||
rdaPinMapping_t* pin = g_pins + index;
|
||||
if(index >= g_numPins || pin->gpio == NULL)
|
||||
return 0;
|
||||
return gpio_read(pin->gpio);
|
||||
}
|
||||
|
||||
void HAL_PIN_Setup_Input_Pullup(int index)
|
||||
{
|
||||
if(index >= g_numPins)
|
||||
return;
|
||||
rdaPinMapping_t* pin = g_pins + index;
|
||||
RDA_GPIO_Init(pin);
|
||||
if(pin->gpio == NULL)
|
||||
return;
|
||||
gpio_dir(pin->gpio, PIN_INPUT);
|
||||
gpio_mode(pin->gpio, PullUp);
|
||||
}
|
||||
|
||||
void HAL_PIN_Setup_Input_Pulldown(int index)
|
||||
{
|
||||
if(index >= g_numPins)
|
||||
return;
|
||||
rdaPinMapping_t* pin = g_pins + index;
|
||||
RDA_GPIO_Init(pin);
|
||||
if(pin->gpio == NULL)
|
||||
return;
|
||||
gpio_dir(pin->gpio, PIN_INPUT);
|
||||
gpio_mode(pin->gpio, PullDown);
|
||||
}
|
||||
|
||||
void HAL_PIN_Setup_Input(int index)
|
||||
{
|
||||
if(index >= g_numPins)
|
||||
return;
|
||||
rdaPinMapping_t* pin = g_pins + index;
|
||||
RDA_GPIO_Init(pin);
|
||||
if(pin->gpio == NULL)
|
||||
return;
|
||||
gpio_dir(pin->gpio, PIN_INPUT);
|
||||
gpio_mode(pin->gpio, PullNone);
|
||||
}
|
||||
|
||||
void HAL_PIN_Setup_Output(int index)
|
||||
{
|
||||
if(index >= g_numPins)
|
||||
return;
|
||||
rdaPinMapping_t* pin = g_pins + index;
|
||||
RDA_GPIO_Init(pin);
|
||||
if(pin->gpio == NULL)
|
||||
return;
|
||||
gpio_dir(pin->gpio, PIN_OUTPUT);
|
||||
gpio_mode(pin->gpio, PullUp);
|
||||
}
|
||||
|
||||
void HAL_PIN_PWM_Stop(int index)
|
||||
{
|
||||
if(index >= g_numPins || !HAL_PIN_CanThisPinBePWM(index))
|
||||
return;
|
||||
rdaPinMapping_t* pin = g_pins + index;
|
||||
if(pin->pwm == NULL) return;
|
||||
//pwmout_stop(pin->pwm);
|
||||
pwmout_free(pin->pwm);
|
||||
os_free(pin->pwm);
|
||||
pin->pwm = NULL;
|
||||
}
|
||||
|
||||
void HAL_PIN_PWM_Start(int index, int freq)
|
||||
{
|
||||
if(index >= g_numPins || !HAL_PIN_CanThisPinBePWM(index))
|
||||
return;
|
||||
rdaPinMapping_t* pin = g_pins + index;
|
||||
if(pin->pwm != NULL)
|
||||
{
|
||||
pwmout_period_us(pin->pwm, 1000000 / freq);
|
||||
return;
|
||||
}
|
||||
if(pin->gpio != NULL)
|
||||
{
|
||||
//gpio_deinit(pin->gpio);
|
||||
os_free(pin->gpio);
|
||||
pin->gpio = NULL;
|
||||
}
|
||||
pin->pwm = os_malloc(sizeof(pwmout_t));
|
||||
memset(pin->pwm, 0, sizeof(pwmout_t));
|
||||
pwmout_init(pin->pwm, pin->pin);
|
||||
pwmout_period_us(pin->pwm, 1000000 / freq);
|
||||
}
|
||||
|
||||
void HAL_PIN_PWM_Update(int index, float value)
|
||||
{
|
||||
if(index >= g_numPins || !HAL_PIN_CanThisPinBePWM(index))
|
||||
return;
|
||||
rdaPinMapping_t* pin = g_pins + index;
|
||||
if(pin->pwm == NULL) return;
|
||||
pwmout_write(pin->pwm, value / 100);
|
||||
}
|
||||
|
||||
unsigned int HAL_GetGPIOPin(int index)
|
||||
{
|
||||
return index;
|
||||
}
|
||||
|
||||
OBKInterruptHandler g_handlers[PLATFORM_GPIO_MAX];
|
||||
OBKInterruptType g_modes[PLATFORM_GPIO_MAX];
|
||||
|
||||
#include "gpio_irq_api.h"
|
||||
|
||||
void RDA_Interrupt(uint32_t obkPinNum, gpio_irq_event event)
|
||||
{
|
||||
if (g_handlers[obkPinNum]) {
|
||||
g_handlers[obkPinNum](obkPinNum);
|
||||
}
|
||||
}
|
||||
|
||||
void HAL_AttachInterrupt(int pinIndex, OBKInterruptType mode, OBKInterruptHandler function) {
|
||||
g_handlers[pinIndex] = function;
|
||||
|
||||
rdaPinMapping_t *rda_irq = g_pins + pinIndex;
|
||||
rda_irq->irq = os_malloc(sizeof(gpio_irq_t));
|
||||
memset(rda_irq->irq, 0, sizeof(gpio_irq_t));
|
||||
|
||||
int rda_mode;
|
||||
if (mode == INTERRUPT_RISING) {
|
||||
rda_mode = IRQ_RISE;
|
||||
}
|
||||
else {
|
||||
rda_mode = IRQ_FALL;
|
||||
}
|
||||
gpio_irq_init(rda_irq->irq, rda_irq->pin, RDA_Interrupt, pinIndex);
|
||||
gpio_irq_set(rda_irq->irq, rda_mode, 1);
|
||||
gpio_irq_enable(rda_irq->irq);
|
||||
|
||||
}
|
||||
void HAL_DetachInterrupt(int pinIndex) {
|
||||
if (g_handlers[pinIndex] == 0) {
|
||||
return; // already removed;
|
||||
}
|
||||
rdaPinMapping_t *rda_irq = g_pins + pinIndex;
|
||||
gpio_irq_free(rda_irq->irq);
|
||||
os_free(rda_irq->irq);
|
||||
rda_irq->irq = NULL;
|
||||
g_handlers[pinIndex] = 0;
|
||||
}
|
||||
|
||||
#endif // PLATFORM_RDA5981
|
||||
62
src/hal/rda5981/hal_uart_rda5981.c
Normal file
62
src/hal/rda5981/hal_uart_rda5981.c
Normal file
@@ -0,0 +1,62 @@
|
||||
#ifdef PLATFORM_RDA5981
|
||||
|
||||
#include "../../new_pins.h"
|
||||
#include "../../new_cfg.h"
|
||||
#include "../hal_uart.h"
|
||||
#include "serial_api.h"
|
||||
#define UART0_RX PA_0
|
||||
#define UART0_TX PA_1
|
||||
#define UART1_RX PB_1
|
||||
#define UART1_TX PB_2
|
||||
#define UART1_1_RX PD_2
|
||||
#define UART1_1_TX PD_3
|
||||
#define UART1_1_RTS PD_1
|
||||
#define UART1_1_CTS PD_0
|
||||
|
||||
serial_t sobj;
|
||||
static bool isInitialized;
|
||||
|
||||
static void uart_cb(uint32_t id, SerialIrq event)
|
||||
{
|
||||
if(event != RxIrq)
|
||||
return;
|
||||
|
||||
serial_t* obj = (void*)id;
|
||||
uint8_t c = (uint8_t)serial_getc(obj);
|
||||
UART_AppendByteToReceiveRingBuffer(c);
|
||||
}
|
||||
|
||||
void HAL_UART_SendByte(byte b)
|
||||
{
|
||||
while(!serial_writable(&sobj));
|
||||
serial_putc(&sobj, b);
|
||||
}
|
||||
|
||||
int HAL_UART_Init(int baud, int parity, bool hwflowc, int txOverride, int rxOverride)
|
||||
{
|
||||
if(isInitialized)
|
||||
{
|
||||
serial_free(&sobj);
|
||||
}
|
||||
PinName tx = UART0_TX, rx = UART0_RX;
|
||||
if(CFG_HasFlag(OBK_FLAG_USE_SECONDARY_UART))
|
||||
{
|
||||
tx = UART1_TX;
|
||||
rx = UART1_RX;
|
||||
}
|
||||
serial_init(&sobj, tx, rx);
|
||||
serial_baud(&sobj, baud);
|
||||
serial_format(&sobj, 8, parity, 1);
|
||||
serial_irq_handler(&sobj, uart_cb, (uint32_t)&sobj);
|
||||
serial_irq_set(&sobj, RxIrq, 1);
|
||||
if(hwflowc)
|
||||
{
|
||||
tx = UART1_1_TX;
|
||||
rx = UART1_1_RX;
|
||||
serial_set_flow_control(&sobj, FlowControlRTSCTS, UART1_1_RTS, UART1_1_CTS);
|
||||
}
|
||||
isInitialized = true;
|
||||
return 1;
|
||||
}
|
||||
|
||||
#endif
|
||||
136
src/hal/rda5981/hal_wifi_rda5981.cpp
Normal file
136
src/hal/rda5981/hal_wifi_rda5981.cpp
Normal file
@@ -0,0 +1,136 @@
|
||||
#if PLATFORM_RDA5981
|
||||
|
||||
#include "rda59xx_daemon.h"
|
||||
#include "WiFiStackInterface.h"
|
||||
#undef WEAK
|
||||
WiFiStackInterface wifi;
|
||||
|
||||
extern "C" {
|
||||
#include "../hal_wifi.h"
|
||||
#include "../../new_common.h"
|
||||
#include "../../logging/logging.h"
|
||||
#include "../../new_cfg.h"
|
||||
#undef connect
|
||||
bool g_bOpenAccessPointMode = 0;
|
||||
static void (*g_wifiStatusCallback)(int code);
|
||||
extern struct netif lwip_sta_netif;
|
||||
|
||||
const char* HAL_GetMyIPString()
|
||||
{
|
||||
return g_bOpenAccessPointMode ? wifi.get_ip_address_ap() : wifi.get_ip_address();
|
||||
}
|
||||
|
||||
const char* HAL_GetMyGatewayString()
|
||||
{
|
||||
return g_bOpenAccessPointMode ? wifi.get_gateway_ap() : wifi.get_gateway();
|
||||
}
|
||||
|
||||
const char* HAL_GetMyDNSString()
|
||||
{
|
||||
return "error";
|
||||
}
|
||||
|
||||
const char* HAL_GetMyMaskString()
|
||||
{
|
||||
return g_bOpenAccessPointMode ? wifi.get_netmask_ap() : wifi.get_netmask();
|
||||
}
|
||||
|
||||
void WiFI_GetMacAddress(char* mac)
|
||||
{
|
||||
r_u8 addr[6];
|
||||
rda59xx_get_macaddr((r_u8*)&addr, 0);
|
||||
memcpy(mac, addr, sizeof(mac));
|
||||
}
|
||||
|
||||
uint8_t HAL_GetWiFiChannel(uint8_t *chan)
|
||||
{
|
||||
*chan = wifi.get_channel();
|
||||
return *chan;
|
||||
};
|
||||
|
||||
const char* HAL_GetMACStr(char* macstr)
|
||||
{
|
||||
unsigned char mac[32];
|
||||
WiFI_GetMacAddress((char*)mac);
|
||||
sprintf(macstr, MACSTR, MAC2STR(mac));
|
||||
return macstr;
|
||||
}
|
||||
|
||||
void HAL_PrintNetworkInfo()
|
||||
{
|
||||
uint8_t mac[6];
|
||||
WiFI_GetMacAddress((char*)mac);
|
||||
ADDLOG_DEBUG(LOG_FEATURE_GENERAL, "+--------------- net device info ------------+\r\n");
|
||||
ADDLOG_DEBUG(LOG_FEATURE_GENERAL, "|netif type : %-16s |\r\n", g_bOpenAccessPointMode == 0 ? "STA" : "AP");
|
||||
ADDLOG_DEBUG(LOG_FEATURE_GENERAL, "|netif rssi = %-16i |\r\n", HAL_GetWifiStrength());
|
||||
ADDLOG_DEBUG(LOG_FEATURE_GENERAL, "|netif ip = %-16s |\r\n", HAL_GetMyIPString());
|
||||
ADDLOG_DEBUG(LOG_FEATURE_GENERAL, "|netif mask = %-16s |\r\n", HAL_GetMyMaskString());
|
||||
ADDLOG_DEBUG(LOG_FEATURE_GENERAL, "|netif gateway = %-16s |\r\n", HAL_GetMyGatewayString());
|
||||
ADDLOG_DEBUG(LOG_FEATURE_GENERAL, "|netif mac : ["MACSTR"] %-6s |\r\n", MAC2STR(mac), "");
|
||||
ADDLOG_DEBUG(LOG_FEATURE_GENERAL, "+--------------------------------------------+\r\n");
|
||||
}
|
||||
|
||||
int HAL_GetWifiStrength()
|
||||
{
|
||||
wifi.update_rssi();
|
||||
return wifi.get_rssi();
|
||||
}
|
||||
|
||||
void obk_wifi_cb(WIFI_EVENT evt, void* info)
|
||||
{
|
||||
switch(evt)
|
||||
{
|
||||
case EVENT_STA_DISCONNECTTED:
|
||||
case EVENT_STA_NOFOUND_AP:
|
||||
if(g_wifiStatusCallback != NULL)
|
||||
{
|
||||
g_wifiStatusCallback(WIFI_STA_DISCONNECTED);
|
||||
}
|
||||
break;
|
||||
case EVENT_STA_CONNECT_FAIL:
|
||||
if(g_wifiStatusCallback != NULL)
|
||||
{
|
||||
g_wifiStatusCallback(WIFI_STA_AUTH_FAILED);
|
||||
}
|
||||
break;
|
||||
case EVENT_STA_GOT_IP:
|
||||
if(g_wifiStatusCallback != NULL)
|
||||
{
|
||||
g_wifiStatusCallback(WIFI_STA_CONNECTED);
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
void HAL_WiFi_SetupStatusCallback(void (*cb)(int code))
|
||||
{
|
||||
g_wifiStatusCallback = cb;
|
||||
rda59xx_wifi_set_event_cb(obk_wifi_cb);
|
||||
}
|
||||
|
||||
void HAL_ConnectToWiFi(const char* oob_ssid, const char* connect_key, obkStaticIP_t* ip)
|
||||
{
|
||||
if(g_wifiStatusCallback != NULL)
|
||||
{
|
||||
g_wifiStatusCallback(WIFI_STA_CONNECTING);
|
||||
}
|
||||
wifi.set_dhcp(1);
|
||||
netif_set_hostname(&lwip_sta_netif, CFG_GetDeviceName());
|
||||
wifi.connect(oob_ssid, connect_key, NULL, NSAPI_SECURITY_NONE, 0);
|
||||
}
|
||||
|
||||
void HAL_DisconnectFromWifi()
|
||||
{
|
||||
wifi.disconnect();
|
||||
}
|
||||
|
||||
int HAL_SetupWiFiOpenAccessPoint(const char* ssid)
|
||||
{
|
||||
g_bOpenAccessPointMode = 1;
|
||||
wifi.set_network_ap("192.168.4.1", "255.255.255.0", "192.168.4.1", "192.168.4.2", "192.168.4.254");
|
||||
wifi.start_ap(ssid, "", 1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
#endif
|
||||
@@ -124,7 +124,14 @@ exit:
|
||||
|
||||
lwip_close(fd);
|
||||
arg->isCompleted = true;
|
||||
#if PLATFORM_RDA5981
|
||||
arg->thread = NULL;
|
||||
arg->isCompleted = false;
|
||||
arg->fd = INVALID_SOCK;
|
||||
rtos_delete_thread(NULL);
|
||||
#else
|
||||
rtos_suspend_thread(NULL);
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline char* get_clientaddr(struct sockaddr_storage* source_addr)
|
||||
|
||||
@@ -204,6 +204,8 @@ static int http_rest_post(http_request_t* request) {
|
||||
r = http_rest_post_flash(request, 0, -1);
|
||||
#elif PLATFORM_TXW81X
|
||||
r = http_rest_post_flash(request, 0, -1);
|
||||
#elif PLATFORM_RDA5981
|
||||
r = http_rest_post_flash(request, 0, -1);
|
||||
#else
|
||||
// TODO
|
||||
ADDLOG_ERROR(LOG_FEATURE_API, "No OTA");
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
|
||||
#if PLATFORM_BEKEN
|
||||
#include "mem_pub.h"
|
||||
#elif PLATFORM_BL602 || PLATFORM_ESPIDF || PLATFORM_XRADIO || PLATFORM_ESP8266 || PLATFORM_TXW81X
|
||||
#elif PLATFORM_BL602 || PLATFORM_ESPIDF || PLATFORM_XRADIO || PLATFORM_ESP8266 || PLATFORM_TXW81X || PLATFORM_RDA5981
|
||||
#define os_free free
|
||||
#define os_malloc malloc
|
||||
#elif PLATFORM_REALTEK || PLATFORM_W800 || PLATFORM_W600 || PLATFORM_LN882H
|
||||
|
||||
@@ -1131,7 +1131,7 @@ static int lfs_erase(const struct lfs_config* c, lfs_block_t block)
|
||||
return res;
|
||||
}
|
||||
|
||||
#elif PLATFORM_TXW81X
|
||||
#elif PLATFORM_TXW81X || PLATFORM_RDA5981
|
||||
|
||||
static int lfs_read(const struct lfs_config* c, lfs_block_t block,
|
||||
lfs_off_t off, void* buffer, lfs_size_t size)
|
||||
|
||||
@@ -157,6 +157,12 @@
|
||||
#define LFS_BLOCKS_START_MIN 0xF5000
|
||||
#define LFS_BLOCKS_END 0x100000
|
||||
|
||||
#elif PLATFORM_RDA5981
|
||||
|
||||
#define LFS_BLOCKS_START 0xFD000
|
||||
#define LFS_BLOCKS_START_MIN 0xFD000
|
||||
#define LFS_BLOCKS_END 0x100000
|
||||
|
||||
#else
|
||||
// TODO
|
||||
// start 0x1000 after OTA addr
|
||||
|
||||
@@ -1782,7 +1782,7 @@ static BENCHMARK_TEST_INFO* info = NULL;
|
||||
#if WINDOWS
|
||||
|
||||
#elif PLATFORM_BL602 || PLATFORM_W600 || PLATFORM_W800 || PLATFORM_ESPIDF || PLATFORM_TR6260 \
|
||||
|| PLATFORM_REALTEK || PLATFORM_ECR6600 || PLATFORM_ESP8266 || PLATFORM_TXW81X
|
||||
|| PLATFORM_REALTEK || PLATFORM_ECR6600 || PLATFORM_ESP8266 || PLATFORM_TXW81X || PLATFORM_RDA5981
|
||||
static void mqtt_timer_thread(void* param)
|
||||
{
|
||||
while (1)
|
||||
@@ -1827,6 +1827,8 @@ commandResult_t MQTT_StartMQTTTestThread(const void* context, const char* cmd, c
|
||||
xTaskCreate(mqtt_timer_thread, "mqtt", 1024, (void*)info, 15, NULL);
|
||||
#elif PLATFORM_TXW81X
|
||||
os_task_create("mqtt", mqtt_timer_thread, (void*)info, 15, 0, NULL, 1024);
|
||||
#elif PLATFORM_RDA5981
|
||||
rda_thread_new("mqtt", mqtt_timer_thread, NULL, 1024, osPriorityNormal);
|
||||
#elif PLATFORM_XRADIO || PLATFORM_LN882H
|
||||
OS_TimerSetInvalid(&timer);
|
||||
if (OS_TimerCreate(&timer, OS_TIMER_PERIODIC, MQTT_Test_Tick, (void*)info, MQTT_TMR_DURATION) != OS_OK)
|
||||
|
||||
@@ -187,6 +187,11 @@ typedef long BaseType_t;
|
||||
#define DEVICENAME_PREFIX_SHORT "txw81x"
|
||||
#define PLATFORM_MCU_NAME "TXW81X"
|
||||
#define MANUFACTURER "Taixin"
|
||||
#elif PLATFORM_RDA5981
|
||||
#define DEVICENAME_PREFIX_FULL "OpenRDA5981"
|
||||
#define DEVICENAME_PREFIX_SHORT "rda5981"
|
||||
#define PLATFORM_MCU_NAME "RDA5981"
|
||||
#define MANUFACTURER "RDA Microelectronics"
|
||||
#else
|
||||
#error "You must define a platform.."
|
||||
This platform is not supported, error!
|
||||
@@ -246,6 +251,8 @@ This platform is not supported, error!
|
||||
#define USER_SW_VER "RTL8720E_Test"
|
||||
#elif PLATFORM_TXW81X
|
||||
#define USER_SW_VER "TXW81X_Test"
|
||||
#elif PLATFORM_RDA5981
|
||||
#define USER_SW_VER "RDA5981_Test"
|
||||
#else
|
||||
#warning "USER_SW_VER undefined"
|
||||
#define USER_SW_VER "unknown"
|
||||
@@ -859,6 +866,56 @@ OSStatus rtos_suspend_thread(beken_thread_t* thread);
|
||||
#define GLOBAL_INT_DISABLE() ;
|
||||
#define GLOBAL_INT_RESTORE() ;
|
||||
|
||||
#elif PLATFORM_RDA5981
|
||||
|
||||
#include "stdbool.h"
|
||||
#include "rda_sys_wrapper.h"
|
||||
#include "cmsis_os.h"
|
||||
#include "lwip/err.h"
|
||||
#include "lwip/sockets.h"
|
||||
#include "lwip/sys.h"
|
||||
#include "lwip/netdb.h"
|
||||
#include "lwip/dns.h"
|
||||
|
||||
#define bk_printf printf
|
||||
|
||||
#define rtos_delay_milliseconds osDelay
|
||||
#define delay_ms osDelay
|
||||
#define os_malloc malloc
|
||||
#define os_free free
|
||||
|
||||
#define lwip_close_force(x) lwip_close(x)
|
||||
#define kNoErr 0 //! No error occurred.
|
||||
typedef void* beken_thread_arg_t;
|
||||
typedef void* beken_thread_t;
|
||||
typedef void (*beken_thread_function_t)(beken_thread_arg_t arg);
|
||||
typedef int OSStatus;
|
||||
typedef void* SemaphoreHandle_t;
|
||||
#define xSemaphoreCreateMutex rda_mutex_create
|
||||
#define xSemaphoreTake(a, b) (rda_mutex_wait(a, b) == 0)
|
||||
#define xSemaphoreGive rda_mutex_realease
|
||||
#define pdTRUE true
|
||||
|
||||
#define portTICK_RATE_MS osKernelSysTickMicroSec(1000 * 1000)
|
||||
typedef int BaseType_t;
|
||||
typedef uint64_t portTickType;
|
||||
#define xTaskGetTickCount osKernelSysTick
|
||||
|
||||
#define BEKEN_DEFAULT_WORKER_PRIORITY (6)
|
||||
#define BEKEN_APPLICATION_PRIORITY (7)
|
||||
|
||||
OSStatus rtos_delete_thread(beken_thread_t thread);
|
||||
OSStatus rtos_create_thread(beken_thread_t thread,
|
||||
uint8_t priority, const char* name,
|
||||
beken_thread_function_t function,
|
||||
uint32_t stack_size, beken_thread_arg_t arg);
|
||||
OSStatus rtos_suspend_thread(beken_thread_t thread);
|
||||
|
||||
#define GLOBAL_INT_DECLARATION() ;
|
||||
#define GLOBAL_INT_DISABLE() ;
|
||||
#define GLOBAL_INT_RESTORE() ;
|
||||
|
||||
|
||||
#else
|
||||
|
||||
#include "gw_intf.h"
|
||||
|
||||
@@ -1119,6 +1119,8 @@ typedef enum channelType_e {
|
||||
#define PLATFORM_GPIO_MAX 27
|
||||
#elif PLATFORM_BK7252 || PLATFORM_BK7252N
|
||||
#define PLATFORM_GPIO_MAX 40
|
||||
#elif PLATFORM_RDA5981
|
||||
#define PLATFORM_GPIO_MAX 29
|
||||
#else
|
||||
#define PLATFORM_GPIO_MAX 29
|
||||
#endif
|
||||
@@ -1142,7 +1144,7 @@ typedef enum channelType_e {
|
||||
#define SPECIAL_CHANNEL_BASECOLOR_COOL 136
|
||||
#define SPECIAL_CHANNEL_BASECOLOR_WARM 137
|
||||
#define SPECIAL_CHANNEL_BASECOLOR_LAST 137
|
||||
#define SPECIAL_CHANNEL_OBK_FREQUENCY 138
|
||||
#define SPECIAL_CHANNEL_OBK_FREQUENCY 138
|
||||
|
||||
// note: real limit here is MAX_RETAIN_CHANNELS
|
||||
#define SPECIAL_CHANNEL_FLASHVARS_FIRST 200
|
||||
|
||||
@@ -318,7 +318,7 @@
|
||||
#undef ENABLE_DRIVER_ADCSMOOTHER
|
||||
#endif
|
||||
|
||||
#if (OBK_VARIANT == OBK_VARIANT_TUYAMCU || OBK_VARIANT == OBK_VARIANT_IRREMOTEESP || OBK_VARIANT == OBK_VARIANT_SENSORS)
|
||||
#if (OBK_VARIANT == OBK_VARIANT_TUYAMCU || OBK_VARIANT == OBK_VARIANT_IRREMOTEESP || OBK_VARIANT == OBK_VARIANT_SENSORS || PLATFORM_BK7252 || PLATFORM_BK7252N)
|
||||
#undef ENABLE_DRIVER_BL0937
|
||||
#undef ENABLE_DRIVER_BL0942
|
||||
#undef ENABLE_DRIVER_BL0942SPI
|
||||
@@ -326,7 +326,7 @@
|
||||
#undef ENABLE_DRIVER_BRIDGE
|
||||
#endif
|
||||
|
||||
#if (OBK_VARIANT == OBK_VARIANT_POWERMETERING || OBK_VARIANT == OBK_VARIANT_IRREMOTEESP || OBK_VARIANT == OBK_VARIANT_SENSORS)
|
||||
#if (OBK_VARIANT == OBK_VARIANT_POWERMETERING || OBK_VARIANT == OBK_VARIANT_IRREMOTEESP || OBK_VARIANT == OBK_VARIANT_SENSORS || PLATFORM_BK7252 || PLATFORM_BK7252N)
|
||||
#undef ENABLE_DRIVER_TUYAMCU
|
||||
#endif
|
||||
|
||||
@@ -546,6 +546,19 @@
|
||||
#undef ENABLE_HTTP_MAC
|
||||
#undef ENABLE_LED_BASIC
|
||||
|
||||
#elif PLATFORM_RDA5981
|
||||
|
||||
#define ENABLE_EXPAND_CONSTANT 1
|
||||
#define ENABLE_HA_DISCOVERY 1
|
||||
#define ENABLE_MQTT 1
|
||||
#define ENABLE_OBK_SCRIPTING 1
|
||||
#define ENABLE_ADVANCED_CHANNELTYPES_DISCOVERY 1
|
||||
#define NEW_TCP_SERVER 1
|
||||
#define NO_CHIP_TEMPERATURE 1
|
||||
#define ENABLE_DRIVER_AHT2X 1
|
||||
#define ENABLE_I2C 1
|
||||
#undef ENABLE_HTTP_MAC
|
||||
|
||||
#else
|
||||
|
||||
// #error "Platform not defined"
|
||||
|
||||
@@ -140,10 +140,35 @@ void OTA_SetTotalBytes(int value)
|
||||
|
||||
|
||||
#if PLATFORM_XR806 || PLATFORM_XR872
|
||||
|
||||
size_t xPortGetFreeHeapSize()
|
||||
{
|
||||
return sram_free_heap_size();
|
||||
}
|
||||
|
||||
#elif PLATFORM_RDA5981
|
||||
|
||||
#include "hal/api/mbed_stats.h"
|
||||
extern uint32_t mbed_heap_size;
|
||||
size_t xPortGetFreeHeapSize()
|
||||
{
|
||||
mbed_stats_heap_t heap_stats;
|
||||
mbed_stats_heap_get(&heap_stats);
|
||||
//ADDLOGF_DEBUG("mbed_heap_size: %i\n heap_stats.current_size: %i\nheap_stats.max_size: %i\nheap_stats.total_size: %i\nheap_stats.alloc_cnt: %i\nheap_stats.alloc_fail_cnt: %i\n",
|
||||
// mbed_heap_size, heap_stats.current_size, heap_stats.max_size, heap_stats.total_size, heap_stats.alloc_cnt, heap_stats.alloc_fail_cnt);
|
||||
return mbed_heap_size - heap_stats.current_size;
|
||||
}
|
||||
int _kill(int pid, int sig)
|
||||
{
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
pid_t _getpid()
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#if PLATFORM_BL602
|
||||
@@ -297,6 +322,53 @@ OSStatus rtos_suspend_thread(beken_thread_t* thread)
|
||||
return kNoErr;
|
||||
}
|
||||
|
||||
#elif PLATFORM_RDA5981
|
||||
|
||||
#include "rt_TypeDef.h"
|
||||
|
||||
OSStatus rtos_create_thread(beken_thread_t thread,
|
||||
uint8_t priority, const char* name,
|
||||
beken_thread_function_t function,
|
||||
uint32_t stack_size, beken_thread_arg_t arg)
|
||||
{
|
||||
osThreadDef_t def;
|
||||
osThreadId id;
|
||||
|
||||
def.pthread = (os_pthread)function;
|
||||
def.tpriority = osPriorityNormal;
|
||||
def.stacksize = stack_size;
|
||||
def.stack_pointer = malloc(stack_size);
|
||||
if(def.stack_pointer == NULL)
|
||||
{
|
||||
printf("Error allocating the stack memory");
|
||||
return 1;
|
||||
}
|
||||
thread = osThreadCreate(&def, arg);
|
||||
if(thread == NULL)
|
||||
{
|
||||
free(def.stack_pointer);
|
||||
printf("Thread create %s - err\n", name);
|
||||
return 1;
|
||||
}
|
||||
//printf("Thread stack at 0x%lx %lu\n", (uint32_t)def.stack_pointer, stack_size);
|
||||
return 0;
|
||||
}
|
||||
|
||||
OSStatus rtos_delete_thread(beken_thread_t thread)
|
||||
{
|
||||
if(thread == NULL)
|
||||
{
|
||||
thread = osThreadGetId();
|
||||
}
|
||||
P_TCB tcb = rt_tid2ptcb(thread);
|
||||
uint32_t* stk = tcb->stack;
|
||||
if(stk == NULL) printf("rtos_delete_thread stk is null\n");
|
||||
//printf("Freeing stack at 0x%lx %u\n", (uint32_t)stk, tcb->priv_stack);
|
||||
free(stk);
|
||||
osThreadTerminate(thread);
|
||||
return kNoErr;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
void MAIN_ScheduleUnsafeInit(int delSeconds) {
|
||||
@@ -1084,7 +1156,7 @@ void QuickTick(void* param)
|
||||
#if WINDOWS
|
||||
|
||||
#elif PLATFORM_BL602 || PLATFORM_W600 || PLATFORM_W800 || PLATFORM_TR6260 || defined(PLATFORM_REALTEK) || PLATFORM_ECR6600 \
|
||||
|| PLATFORM_ESP8266 || PLATFORM_ESPIDF || PLATFORM_XRADIO || PLATFORM_LN882H || PLATFORM_TXW81X
|
||||
|| PLATFORM_ESP8266 || PLATFORM_ESPIDF || PLATFORM_XRADIO || PLATFORM_LN882H || PLATFORM_TXW81X || PLATFORM_RDA5981
|
||||
void quick_timer_thread(void* param)
|
||||
{
|
||||
while (1) {
|
||||
@@ -1104,6 +1176,8 @@ void QuickTick_StartThread(void)
|
||||
xTaskCreate(quick_timer_thread, "quick", QT_STACK_SIZE, NULL, 15, NULL);
|
||||
#elif PLATFORM_TXW81X
|
||||
os_task_create("quick", quick_timer_thread, NULL, 15, 0, NULL, QT_STACK_SIZE);
|
||||
#elif PLATFORM_RDA5981
|
||||
rda_thread_new("quick", quick_timer_thread, NULL, QT_STACK_SIZE, osPriorityNormal);
|
||||
#else
|
||||
OSStatus result;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user