diff --git a/.github/workflows/workflow.yaml b/.github/workflows/workflow.yaml index 6cf468f43..4db52bb8a 100644 --- a/.github/workflows/workflow.yaml +++ b/.github/workflows/workflow.yaml @@ -448,6 +448,56 @@ jobs: output/${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}/${{ matrix.platform }}_Tuya_UA_${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}.bin if-no-files-found: warn + build_ameba: + name: Build ameba + needs: refs + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + include: + - platform: OpenRTL8721DA + variant: default + - platform: OpenRTL8720E + variant: default + steps: + - name: Source checkout + uses: actions/checkout@v4 + - name: SDK checkout + uses: actions/checkout@v4 + with: + repository: Ameba-AIoT/ameba-rtos + path: sdk/ameba-rtos + #ref: release/v1.1 + ref: 347af9133679eacb10b368010f9ce5e143ff1643 # pin commit until stable release + submodules: recursive + - uses: actions/setup-python@v5 + with: + python-version: '3.10' + architecture: 'x64' + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get -y install make cmake python3-venv + pip install -r sdk/ameba-rtos/tools/requirements.txt + mkdir /opt/rtk-toolchain + cd /opt/rtk-toolchain + wget https://github.com/Ameba-AIoT/ameba-toolchain/releases/download/prebuilts-v1.0.3/prebuilts-linux-1.0.3.tar.gz + tar -xzf prebuilts-linux-1.0.3.tar.gz + cd ~/work/OpenBK7231T_App/OpenBK7231T_App + source sdk/ameba-rtos/ameba.sh + - run: ls -la + - name: Run make + run: make APP_VERSION=${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }} APP_NAME=${{ matrix.platform }} VARIANT="${{ matrix.variant }}" ${{ matrix.platform }} + - name: Save build assets + uses: actions/upload-artifact@v4 + with: + name: ${{ env.APP_NAME }}_${{ needs.refs.outputs.version }}_${{ matrix.platform }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }} + path: | + output/${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}/${{ matrix.platform }}_${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}.bin + output/${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}/${{ matrix.platform }}_${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}_ota.img + if-no-files-found: warn + merge: name: Merge Artifacts runs-on: ubuntu-22.04 diff --git a/.gitignore b/.gitignore index 5a579b596..2abac8eb4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ output/** **/*.o +**/*.oo **/*.obj *.idb *.exe diff --git a/.gitmodules b/.gitmodules index 28296d853..7ed30457c 100644 --- a/.gitmodules +++ b/.gitmodules @@ -69,3 +69,7 @@ path = sdk/ESP8266_RTOS_SDK url = https://github.com/espressif/ESP8266_RTOS_SDK branch = release/v3.4 +[submodule "sdk/ameba-rtos"] + path = sdk/ameba-rtos + url = https://github.com/Ameba-AIoT/ameba-rtos + branch = release/v1.1 diff --git a/.releaserc.yaml b/.releaserc.yaml index 02edd3507..a0fd97294 100644 --- a/.releaserc.yaml +++ b/.releaserc.yaml @@ -101,6 +101,8 @@ generateNotes: - RTL8710C/RTL8720C (AmebaZ2 family) (eg BW15, W701, W701H, WBR2, WBR3, CR3L, CRG1) - RTL8720D (AmebaD family) (eg BW16, BW16E, W701D, W701DH, WBR3D, WBR3T) - RTL872xCSM/RTL8720CS (AmebaCS family) (eg WBRG1, WBR3S, WBR3N) (Firmware compatible with RTL8720D) + - 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) footerPartial: | @@ -117,74 +119,78 @@ generateNotes: ### Assets Refer to the following table for the usage of the various assests included in this release - | Platform | Usage | Filename | - | --- | --- | --- | - | BK7231T | OTA Update | [OpenBK7231T_{{version}}.rbl]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenBK7231T_{{version}}.rbl) | - | BK7231T | CCtr Flash | [OpenBK7231T_UG_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenBK7231T_UG_{{version}}.bin) | - | BK7231T | UART Flash | [OpenBK7231T_UA_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenBK7231T_UA_{{version}}.bin) | - | BK7231T | SPI Flash | [OpenBK7231T_QIO_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenBK7231T_QIO_{{version}}.bin) | - | BK7231N | OTA Update | [OpenBK7231N_{{version}}.rbl]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenBK7231N_{{version}}.rbl) | - | BK7231N | CCtr Flash | [OpenBK7231N_UG_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenBK7231N_UG_{{version}}.bin) | - | BK7231N | UART Flash | [OpenBK7231N_QIO_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenBK7231N_QIO_{{version}}.bin) | - | BK7231M | UART Flash | [OpenBK7231M_QIO_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenBK7231M_QIO_{{version}}.bin) | - | BK7231U | OTA Update | [OpenBK7231U_{{version}}.rbl]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenBK7231U_{{version}}.rbl) | - | BK7231U | UART Flash | [OpenBK7231U_UA_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenBK7231U_UA_{{version}}.bin) | - | BK7231U | SPI Flash | [OpenBK7231U_QIO_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenBK7231U_QIO_{{version}}.bin) | - | BK7238 | OTA Update | [OpenBK7238_{{version}}.rbl]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenBK7238_{{version}}.rbl) | - | BK7238 | UART Flash | [OpenBK7238_QIO_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenBK7238_QIO_{{version}}.bin) | - | BK7252 | OTA Update | [OpenBK7252_{{version}}.rbl]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenBK7252_{{version}}.rbl) | - | BK7252 | UART Flash | [OpenBK7252_UA_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenBK7252_UA_{{version}}.bin) | - | BK7252 | SPI Flash | [OpenBK7252_QIO_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenBK7252_QIO_{{version}}.bin) | - | BK7252N | OTA Update | [OpenBK7252N_{{version}}.rbl]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenBK7252N_{{version}}.rbl) | - | BK7252N | UART Flash | [OpenBK7252N_QIO_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenBK7252N_QIO_{{version}}.bin) | - | XR809 | UART Flash | [OpenXR809_{{version}}.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenXR809_{{version}}.img) | - | XR806 | UART Flash | [OpenXR806_{{version}}.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenXR806_{{version}}.img) | - | XR806 | OTA Update | [OpenXR806_{{version}}_ota.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenXR806_{{version}}_ota.img) | - | XR872 | UART Flash | [OpenXR872_{{version}}.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenXR872_{{version}}.img) | - | XR872 | OTA Update | [OpenXR872_{{version}}_ota.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenXR872_{{version}}_ota.img) | - | BL602 | UART Flash | [OpenBL602_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenBL602_{{version}}.bin) | - | BL602 | OTA Update | [OpenBL602_{{version}}_OTA.bin.xz.ota]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenBL602_{{version}}_OTA.bin.xz.ota) | - | W800 | OTA Update | [OpenW800_{{version}}_ota.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenW800_{{version}}_ota.img) | - | W800 | UART Flash | [OpenW800_{{version}}.fls]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenW800_{{version}}.fls) | - | W600 | OTA Update | [OpenW600_{{version}}_gz.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenW600_{{version}}_gz.img) | - | W600 | UART Flash | [OpenW600_{{version}}.fls]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenW600_{{version}}.fls) | - | LN882H | OTA Update | [OpenLN882H_{{version}}_OTA.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenLN882H_{{version}}_OTA.bin) | - | LN882H | UART Flash | [OpenLN882H_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenLN882H_{{version}}.bin) | - | TR6260 | UART Flash | [OpenTR6260_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenTR6260_{{version}}.bin) | - | RTL8710A | JTAG Flash | [OpenRTL8710A_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenRTL8710A_{{version}}.bin) | - | RTL8710A | OTA Update | [OpenRTL8710A_{{version}}_ota.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenRTL8710A_{{version}}_ota.img) | - | RTL8710B | UART Flash | [OpenRTL8710B_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenRTL8710B_{{version}}.bin) | - | RTL8710B | OTA Update | [OpenRTL8710B_{{version}}_ota.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenRTL8710B_{{version}}_ota.img) | - | RTL87X0C | UART Flash | [OpenRTL87X0C_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenRTL87X0C_{{version}}.bin) | - | RTL87X0C | OTA Update | [OpenRTL87X0C_{{version}}_ota.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenRTL87X0C_{{version}}_ota.img) | - | RTL8720D | UART Flash | [OpenRTL8720D_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenRTL8720D_{{version}}.bin) | - | RTL8720D | OTA Update | [OpenRTL8720D_{{version}}_ota.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenRTL8720D_{{version}}_ota.img) | - | ECR6600 | UART Flash | [OpenECR6600_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenECR6600_{{version}}.bin) | - | ECR6600 | OTA Update | [OpenECR6600_{{version}}_ota.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenECR6600_{{version}}_ota.img) | - | ESP32 4MB | UART Flash | [OpenESP32_{{version}}_4M.factory.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP32_{{version}}_4M.factory.bin) | - | ESP32 4MB | OTA Update | [OpenESP32_{{version}}_4M.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP32_{{version}}_4M.img) | - | ESP32 S2 4MB | UART Flash | [OpenESP32S2_{{version}}_4M.factory.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP32S2_{{version}}_4M.factory.bin) | - | ESP32 S2 4MB | OTA Update | [OpenESP32S2_{{version}}_4M.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP32S2_{{version}}_4M.img) | - | ESP32 S3 4MB | UART Flash | [OpenESP32S3_{{version}}_4M.factory.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP32S3_{{version}}_4M.factory.bin) | - | ESP32 S3 4MB | OTA Update | [OpenESP32S3_{{version}}_4M.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP32S3_{{version}}_4M.img) | - | ESP32 C2 2MB | UART Flash | [OpenESP32C2_{{version}}_2M.factory.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP32C2_{{version}}_2M.factory.bin) | - | ESP32 C2 2MB | OTA Update | [OpenESP32C2_{{version}}_2M.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP32C2_{{version}}_2M.img) | - | ESP32 C2 4MB | UART Flash | [OpenESP32C2_{{version}}_4M.factory.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP32C2_{{version}}_4M.factory.bin) | - | ESP32 C2 4MB | OTA Update | [OpenESP32C2_{{version}}_4M.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP32C2_{{version}}_4M.img) | - | ESP32 C3 2MB | UART Flash | [OpenESP32C3_{{version}}_2M.factory.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP32C3_{{version}}_2M.factory.bin) | - | ESP32 C3 2MB | OTA Update | [OpenESP32C3_{{version}}_2M.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP32C3_{{version}}_2M.img) | - | ESP32 C3 4MB | UART Flash | [OpenESP32C3_{{version}}_4M.factory.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP32C3_{{version}}_4M.factory.bin) | - | ESP32 C3 4MB | OTA Update | [OpenESP32C3_{{version}}_4M.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP32C3_{{version}}_4M.img) | - | ESP32 C5 4MB | UART Flash | [OpenESP32C5_{{version}}_4M.factory.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP32C5_{{version}}_4M.factory.bin) | - | ESP32 C5 4MB | OTA Update | [OpenESP32C5_{{version}}_4M.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP32C5_{{version}}_4M.img) | - | ESP32 C6 4MB | UART Flash | [OpenESP32C6_{{version}}_4M.factory.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP32C6_{{version}}_4M.factory.bin) | - | ESP32 C6 4MB | OTA Update | [OpenESP32C6_{{version}}_4M.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP32C6_{{version}}_4M.img) | - | ESP32 C61 4MB | UART Flash | [OpenESP32C61_{{version}}_4M.factory.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP32C61_{{version}}_4M.factory.bin) | - | ESP32 C61 4MB | OTA Update | [OpenESP32C61_{{version}}_4M.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP32C61_{{version}}_4M.img) | - | 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 | OTA Update | [OpenESP8266_{{version}}.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP8266_{{version}}.img) | - | Win32 | | [obkSimulator_{{version}}.zip]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/obkSimulator_{{version}}.zip) | + | Platform | Usage | Filename | + | --- | --- | --- | + | BK7231T | OTA Update | [OpenBK7231T_{{version}}.rbl]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenBK7231T_{{version}}.rbl) | + | BK7231T | CCtr Flash | [OpenBK7231T_UG_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenBK7231T_UG_{{version}}.bin) | + | BK7231T | UART Flash | [OpenBK7231T_UA_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenBK7231T_UA_{{version}}.bin) | + | BK7231T | SPI Flash | [OpenBK7231T_QIO_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenBK7231T_QIO_{{version}}.bin) | + | BK7231N | OTA Update | [OpenBK7231N_{{version}}.rbl]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenBK7231N_{{version}}.rbl) | + | BK7231N | CCtr Flash | [OpenBK7231N_UG_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenBK7231N_UG_{{version}}.bin) | + | BK7231N | UART Flash | [OpenBK7231N_QIO_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenBK7231N_QIO_{{version}}.bin) | + | BK7231M | UART Flash | [OpenBK7231M_QIO_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenBK7231M_QIO_{{version}}.bin) | + | BK7231U | OTA Update | [OpenBK7231U_{{version}}.rbl]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenBK7231U_{{version}}.rbl) | + | BK7231U | UART Flash | [OpenBK7231U_UA_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenBK7231U_UA_{{version}}.bin) | + | BK7231U | SPI Flash | [OpenBK7231U_QIO_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenBK7231U_QIO_{{version}}.bin) | + | BK7238 | OTA Update | [OpenBK7238_{{version}}.rbl]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenBK7238_{{version}}.rbl) | + | BK7238 | UART Flash | [OpenBK7238_QIO_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenBK7238_QIO_{{version}}.bin) | + | BK7252 | OTA Update | [OpenBK7252_{{version}}.rbl]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenBK7252_{{version}}.rbl) | + | BK7252 | UART Flash | [OpenBK7252_UA_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenBK7252_UA_{{version}}.bin) | + | BK7252 | SPI Flash | [OpenBK7252_QIO_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenBK7252_QIO_{{version}}.bin) | + | BK7252N | OTA Update | [OpenBK7252N_{{version}}.rbl]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenBK7252N_{{version}}.rbl) | + | BK7252N | UART Flash | [OpenBK7252N_QIO_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenBK7252N_QIO_{{version}}.bin) | + | XR809 | UART Flash | [OpenXR809_{{version}}.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenXR809_{{version}}.img) | + | XR806 | UART Flash | [OpenXR806_{{version}}.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenXR806_{{version}}.img) | + | XR806 | OTA Update | [OpenXR806_{{version}}_ota.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenXR806_{{version}}_ota.img) | + | XR872 | UART Flash | [OpenXR872_{{version}}.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenXR872_{{version}}.img) | + | XR872 | OTA Update | [OpenXR872_{{version}}_ota.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenXR872_{{version}}_ota.img) | + | BL602 | UART Flash | [OpenBL602_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenBL602_{{version}}.bin) | + | BL602 | OTA Update | [OpenBL602_{{version}}_OTA.bin.xz.ota]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenBL602_{{version}}_OTA.bin.xz.ota) | + | W800 | OTA Update | [OpenW800_{{version}}_ota.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenW800_{{version}}_ota.img) | + | W800 | UART Flash | [OpenW800_{{version}}.fls]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenW800_{{version}}.fls) | + | W600 | OTA Update | [OpenW600_{{version}}_gz.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenW600_{{version}}_gz.img) | + | W600 | UART Flash | [OpenW600_{{version}}.fls]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenW600_{{version}}.fls) | + | LN882H | OTA Update | [OpenLN882H_{{version}}_OTA.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenLN882H_{{version}}_OTA.bin) | + | LN882H | UART Flash | [OpenLN882H_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenLN882H_{{version}}.bin) | + | TR6260 | UART Flash | [OpenTR6260_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenTR6260_{{version}}.bin) | + | RTL8710A | JTAG Flash | [OpenRTL8710A_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenRTL8710A_{{version}}.bin) | + | RTL8710A | OTA Update | [OpenRTL8710A_{{version}}_ota.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenRTL8710A_{{version}}_ota.img) | + | RTL8710B | UART Flash | [OpenRTL8710B_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenRTL8710B_{{version}}.bin) | + | RTL8710B | OTA Update | [OpenRTL8710B_{{version}}_ota.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenRTL8710B_{{version}}_ota.img) | + | RTL87X0C | UART Flash | [OpenRTL87X0C_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenRTL87X0C_{{version}}.bin) | + | RTL87X0C | OTA Update | [OpenRTL87X0C_{{version}}_ota.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenRTL87X0C_{{version}}_ota.img) | + | RTL8720D | UART Flash | [OpenRTL8720D_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenRTL8720D_{{version}}.bin) | + | RTL8720D | OTA Update | [OpenRTL8720D_{{version}}_ota.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenRTL8720D_{{version}}_ota.img) | + | RTL8721DA | UART Flash | [OpenRTL8721DA_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenRTL8721DA_{{version}}.bin) | + | RTL8721DA | OTA Update | [OpenRTL8721DA_{{version}}_ota.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenRTL8721DA_{{version}}_ota.img) | + | RTL8720E | UART Flash | [OpenRTL8720E_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenRTL8720E_{{version}}.bin) | + | RTL8720E | OTA Update | [OpenRTL8720E_{{version}}_ota.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenRTL8720E_{{version}}_ota.img) | + | ECR6600 | UART Flash | [OpenECR6600_{{version}}.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenECR6600_{{version}}.bin) | + | ECR6600 | OTA Update | [OpenECR6600_{{version}}_ota.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenECR6600_{{version}}_ota.img) | + | ESP32 4MB | UART Flash | [OpenESP32_{{version}}_4M.factory.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP32_{{version}}_4M.factory.bin) | + | ESP32 4MB | OTA Update | [OpenESP32_{{version}}_4M.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP32_{{version}}_4M.img) | + | ESP32-S2 4MB | UART Flash | [OpenESP32S2_{{version}}_4M.factory.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP32S2_{{version}}_4M.factory.bin) | + | ESP32-S2 4MB | OTA Update | [OpenESP32S2_{{version}}_4M.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP32S2_{{version}}_4M.img) | + | ESP32-S3 4MB | UART Flash | [OpenESP32S3_{{version}}_4M.factory.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP32S3_{{version}}_4M.factory.bin) | + | ESP32-S3 4MB | OTA Update | [OpenESP32S3_{{version}}_4M.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP32S3_{{version}}_4M.img) | + | ESP32-C2 2MB | UART Flash | [OpenESP32C2_{{version}}_2M.factory.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP32C2_{{version}}_2M.factory.bin) | + | ESP32-C2 2MB | OTA Update | [OpenESP32C2_{{version}}_2M.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP32C2_{{version}}_2M.img) | + | ESP32 C2 4MB | UART Flash | [OpenESP32C2_{{version}}_4M.factory.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP32C2_{{version}}_4M.factory.bin) | + | ESP32 C2 4MB | OTA Update | [OpenESP32C2_{{version}}_4M.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP32C2_{{version}}_4M.img) | + | ESP32-C3 2MB | UART Flash | [OpenESP32C3_{{version}}_2M.factory.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP32C3_{{version}}_2M.factory.bin) | + | ESP32-C3 2MB | OTA Update | [OpenESP32C3_{{version}}_2M.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP32C3_{{version}}_2M.img) | + | ESP32 C3 4MB | UART Flash | [OpenESP32C3_{{version}}_4M.factory.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP32C3_{{version}}_4M.factory.bin) | + | ESP32 C3 4MB | OTA Update | [OpenESP32C3_{{version}}_4M.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP32C3_{{version}}_4M.img) | + | ESP32 C5 4MB | UART Flash | [OpenESP32C5_{{version}}_4M.factory.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP32C5_{{version}}_4M.factory.bin) | + | ESP32 C5 4MB | OTA Update | [OpenESP32C5_{{version}}_4M.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP32C5_{{version}}_4M.img) | + | ESP32-C6 4MB | UART Flash | [OpenESP32C6_{{version}}_4M.factory.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP32C6_{{version}}_4M.factory.bin) | + | ESP32-C6 4MB | OTA Update | [OpenESP32C6_{{version}}_4M.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP32C6_{{version}}_4M.img) | + | ESP32 C61 4MB | UART Flash | [OpenESP32C61_{{version}}_4M.factory.bin]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP32C61_{{version}}_4M.factory.bin) | + | ESP32 C61 4MB | OTA Update | [OpenESP32C61_{{version}}_4M.img]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/OpenESP32C61_{{version}}_4M.img) | + | 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) | + | Win32 | | [obkSimulator_{{version}}.zip]({{host}}/{{owner}}/{{repository}}/releases/download/{{version}}/obkSimulator_{{version}}.zip) | CCtr Flash = Tuya cloud Cutter flash diff --git a/Makefile b/Makefile index eb1b7388a..a9fd8c60f 100644 --- a/Makefile +++ b/Makefile @@ -338,6 +338,24 @@ prebuild_OpenECR6600: berry else echo "prebuild for OpenECR6600 not found ... "; \ fi +prebuild_OpenRTL8721DA: berry + #git submodule update --init --recursive --depth=1 sdk/ameba-rtos + if [ ! -e sdk/ameba-rtos/amebadplus_gcc_project/menuconfig/.config ]; then cd sdk/ameba-rtos/amebadplus_gcc_project && ./menuconfig.py -f ../../../platforms/RTL8721DA/default.conf; fi + @if [ -e platforms/RTL8721DA/pre_build.sh ]; then \ + echo "prebuild found for OpenRTL8721DA"; \ + sh platforms/RTL8721DA/pre_build.sh; \ + else echo "prebuild for OpenRTL8721DA not found ... "; \ + fi + +prebuild_OpenRTL8720E: berry + #git submodule update --init --recursive --depth=1 sdk/ameba-rtos + if [ ! -e sdk/ameba-rtos/amebalite_gcc_project/menuconfig/.config ]; then cd sdk/ameba-rtos/amebalite_gcc_project && ./menuconfig.py -f ../../../platforms/RTL8720E/default.conf; fi + @if [ -e platforms/RTL8720E/pre_build.sh ]; then \ + echo "prebuild found for OpenRTL8720E"; \ + sh platforms/RTL8720E/pre_build.sh; \ + else echo "prebuild for OpenRTL8720E not found ... "; \ + fi + # Build main binaries OpenBK7231T: prebuild_OpenBK7231T mkdir -p output @@ -551,6 +569,24 @@ OpenRTL8720D: prebuild_OpenRTL8720D dd conv=notrunc bs=1 if=sdk/OpenRTL8720D/project/OpenBeken/GCC-RELEASE/project_hp/asdk/image/km0_km4_image2.bin of=output/$(APP_VERSION)/OpenRTL8720D_$(APP_VERSION).bin seek=$(shell printf "%d" 0x6000) cp sdk/OpenRTL8720D/project/OpenBeken/GCC-RELEASE/project_lp/asdk/image/OTA_All.bin output/$(APP_VERSION)/OpenRTL8720D_$(APP_VERSION)_ota.img +.PHONY: OpenRTL8721DA +OpenRTL8721DA: prebuild_OpenRTL8721DA + cd sdk/ameba-rtos/amebadplus_gcc_project && APP_VERSION=$(APP_VERSION) OBK_VARIANT=$(OBK_VARIANT) ./build.py -a ../../../platforms/RTL8721DA + mkdir -p output/$(APP_VERSION) + cp sdk/ameba-rtos/amebadplus_gcc_project/km4_boot_all.bin /tmp/OpenRTL8721DA_$(APP_VERSION).bin + dd conv=notrunc bs=1K if=sdk/ameba-rtos/amebadplus_gcc_project/km0_km4_app.bin of=/tmp/OpenRTL8721DA_$(APP_VERSION).bin seek=80 + mv /tmp/OpenRTL8721DA_$(APP_VERSION).bin output/$(APP_VERSION)/ + cp sdk/ameba-rtos/amebadplus_gcc_project/ota_all.bin output/$(APP_VERSION)/OpenRTL8721DA_$(APP_VERSION)_ota.img + +.PHONY: OpenRTL8720E +OpenRTL8720E: prebuild_OpenRTL8720E + cd sdk/ameba-rtos/amebalite_gcc_project && APP_VERSION=$(APP_VERSION) OBK_VARIANT=$(OBK_VARIANT) ./build.py -a ../../../platforms/RTL8720E + mkdir -p output/$(APP_VERSION) + cp sdk/ameba-rtos/amebalite_gcc_project/km4_boot_all.bin /tmp/OpenRTL8720E_$(APP_VERSION).bin + dd conv=notrunc bs=1K if=sdk/ameba-rtos/amebalite_gcc_project/kr4_km4_app.bin of=/tmp/OpenRTL8720E_$(APP_VERSION).bin seek=80 + mv /tmp/OpenRTL8720E_$(APP_VERSION).bin output/$(APP_VERSION)/ + cp sdk/ameba-rtos/amebalite_gcc_project/ota_all.bin output/$(APP_VERSION)/OpenRTL8720E_$(APP_VERSION)_ota.img + .PHONY: OpenBK7238 OpenBK7238: prebuild_OpenBK7238 cd sdk/beken_freertos_sdk && OBK_VARIANT=$(OBK_VARIANT) sh build.sh bk7238 $(APP_VERSION) @@ -640,6 +676,10 @@ clean: -test -d ./sdk/OpenRTL87X0C && $(MAKE) -C sdk/OpenRTL87X0C/project/OpenBeken/GCC-RELEASE clean -test -d ./sdk/OpenRTL8710A_B && $(MAKE) -C sdk/OpenRTL8710A_B/project/obk_amebaz/GCC-RELEASE clean -test -d ./sdk/OpenRTL8710A_B && $(MAKE) -C sdk/OpenRTL8710A_B/project/obk_ameba1/GCC-RELEASE clean + -test -d ./sdk/OpenRTL8720D && $(MAKE) -C sdk/OpenRTL8720D/project/OpenBeken/GCC-RELEASE/project_hp clean + -test -d ./sdk/OpenRTL8720D && $(MAKE) -C sdk/OpenRTL8720D/project/OpenBeken/GCC-RELEASE/project_lp clean + -test -d ./sdk/ameba-rtos && cd sdk/ameba-rtos/amebadplus_gcc_project && ./build.py -a ../../../platforms/RTL8721DA -c + -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/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 diff --git a/README.md b/README.md index 4de73002d..f696dd9a9 100644 --- a/README.md +++ b/README.md @@ -20,11 +20,14 @@ Although this repository is named "OpenBK7231T_App", it has evolved into a multi - [LN882H](https://www.elektroda.com/rtvforum/topic4027545.html) by Lightning Semi - [datasheet](https://www.elektroda.com/rtvforum/topic4027545.html), see [flashing how-to](https://www.elektroda.com/rtvforum/topic4028087.html), see [sample device teardown and flashing](https://www.elektroda.com/rtvforum/topic4032240.html), see [new flash tool](https://www.elektroda.com/rtvforum/topic4045532.html), see [dev board](https://www.elektroda.com/rtvforum/topic4050274.html) - Windows, via [simulator](https://www.elektroda.com/rtvforum/topic4046056.html) - ESP32 (original), ESP32-S2, ESP32-S3, ESP32-C2, ESP32-C3, ESP32-C6 (working well - guide to be released soon, [development topic](https://www.elektroda.com/rtvforum/topic4074860.html)) +- ESP8266/ESP8285 (1MB variant without OTA, 2MB or more with OTA) - RTL8711AM (Ameba1 family, with SDRAM only. Can't be flashed via UART, only JTAG or SPI) (eg [WRG1](https://developer.tuya.com/en/docs/iot/wrg1-datasheet?id=K97rig6mscj8e), see [development thread](https://www.elektroda.com/rtvforum/viewtopic.php?p=21452754#21452754)) - RTL8710B (AmebaZ family) (eg [T102_V1.0](https://fccid.io/2ASKS-T102), [W302/T102_V1.0](https://fcc.report/FCC-ID/2AU7O-T102V11), [T112_V1.1](https://fccid.io/2AU7O-T102V11), [WR2](https://developer.tuya.com/en/docs/iot/wifiwr2module?id=K9605tko0juc3), [WR3E](https://developer.tuya.com/en/docs/iot/wr3e-module-datasheet?id=K9elwlqbfosbc), BW14) - RTL8710C/RTL8720C (AmebaZ2 family) (eg BW15, W701, W701H, W701M, W701P, [WBR2, WBR3](https://www.elektroda.com/rtvforum/topic4104395.html), [CR3L](https://developer.tuya.com/en/docs/iot/cr3l-module-datasheet?id=Ka3gl6ria8f1t), [CRG1](https://developer.tuya.com/en/docs/iot/CRG1-Module-Datasheet?id=Kbtesqh678sbe)) (see [guide](https://www.elektroda.com/rtvforum/topic4097185.html)) - RTL8720D (AmebaD family) (eg [BW16](https://fcc.report/FCC-ID/2AHMR-BW16), BW16E, W701D, W701DH, [WBR3D](https://developer.tuya.com/en/docs/iot/wbr3d-module-datasheet?id=K9dukbbnmuw4h), [WBR3T](https://developer.tuya.com/en/docs/iot/wbr3t-module-datasheet?id=K9qs708w94ox8)) - RTL872xCSM/RTL8720CS (AmebaCS family, firmware is compatible with RTL8720D) (eg [WBRG1](https://developer.tuya.com/en/docs/iot/wbrg1-module-datasheet?id=Ka015vo8tfztz) (see [Zigbee gateway guide](https://www.elektroda.com/rtvforum/topic4127578.html)), [WBR3N](https://developer.tuya.com/en/docs/iot/wbr3n-datasheet?id=K9qskxwpcqyaq), [WBR3S](https://developer.tuya.com/en/docs/iot/wbr3s-module-datasheet?id=K9qrt2je8wqxo)) +- RTL87x1DA (AmebaDplus family, not compatible with AmebaD/RTL8720D) (eg [BW20](https://fcc.report/FCC-ID/2ATPO-BW20/), [WR11-U](https://developer.tuya.com/en/docs/iot/wr11-u-module-datasheet?id=Kedlt4ye35tmv), [WR11-2S](https://developer.tuya.com/en/docs/iot/WR11-2S-Moudule-Datasheet?id=Kee3bl7v2agiy)) +- RTL87x0E (AmebaLite family) (eg [PKM8710ECF](https://fccid.io/2BASB-PKM8710ECF)) - 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)) diff --git a/libraries/easyflash/inc/easyflash.h b/libraries/easyflash/inc/easyflash.h index 2aab0b162..e62bd25d4 100644 --- a/libraries/easyflash/inc/easyflash.h +++ b/libraries/easyflash/inc/easyflash.h @@ -41,26 +41,26 @@ extern "C" { #endif /* easyflash.c */ -EfErrCode easyflash_init(void); +DllExport EfErrCode easyflash_init(void); #ifdef EF_USING_ENV /* only supported on ef_env.c */ -size_t ef_get_env_blob(const char *key, void *value_buf, size_t buf_len, size_t *saved_value_len); -bool ef_get_env_obj(const char *key, env_node_obj_t env); -size_t ef_read_env_value(env_node_obj_t env, uint8_t *value_buf, size_t buf_len); -EfErrCode ef_set_env_blob(const char *key, const void *value_buf, size_t buf_len); +DllExport size_t ef_get_env_blob(const char *key, void *value_buf, size_t buf_len, size_t *saved_value_len); +DllExport bool ef_get_env_obj(const char *key, env_node_obj_t env); +DllExport size_t ef_read_env_value(env_node_obj_t env, uint8_t *value_buf, size_t buf_len); +DllExport EfErrCode ef_set_env_blob(const char *key, const void *value_buf, size_t buf_len); /* ef_env.c, ef_env_legacy_wl.c and ef_env_legacy.c */ -EfErrCode ef_load_env(void); -void ef_print_env(void); -char *ef_get_env(const char *key); -EfErrCode ef_set_env(const char *key, const char *value); -EfErrCode ef_del_env(const char *key); -EfErrCode ef_save_env(void); -EfErrCode ef_env_set_default(void); -size_t ef_get_env_write_bytes(void); -EfErrCode ef_set_and_save_env(const char *key, const char *value); -EfErrCode ef_del_and_save_env(const char *key); +DllExport EfErrCode ef_load_env(void); +DllExport void ef_print_env(void); +DllExport char *ef_get_env(const char *key); +DllExport EfErrCode ef_set_env(const char *key, const char *value); +DllExport EfErrCode ef_del_env(const char *key); +DllExport EfErrCode ef_save_env(void); +DllExport EfErrCode ef_env_set_default(void); +DllExport size_t ef_get_env_write_bytes(void); +DllExport EfErrCode ef_set_and_save_env(const char *key, const char *value); +DllExport EfErrCode ef_del_and_save_env(const char *key); #endif #ifdef EF_USING_IAP @@ -88,17 +88,17 @@ size_t ef_log_get_used_size(void); #endif /* ef_utils.c */ -uint32_t ef_calc_crc32(uint32_t crc, const void *buf, size_t size); +DllExport uint32_t ef_calc_crc32(uint32_t crc, const void *buf, size_t size); /* ef_port.c */ -EfErrCode ef_port_read(uint32_t addr, uint32_t *buf, size_t size); -EfErrCode ef_port_erase(uint32_t addr, size_t size); -EfErrCode ef_port_write(uint32_t addr, const uint32_t *buf, size_t size); -void ef_port_env_lock(void); -void ef_port_env_unlock(void); -void ef_log_debug(const char *file, const long line, const char *format, ...); -void ef_log_info(const char *format, ...); -void ef_print(const char *format, ...); +DllExport EfErrCode ef_port_read(uint32_t addr, uint32_t *buf, size_t size); +DllExport EfErrCode ef_port_erase(uint32_t addr, size_t size); +DllExport EfErrCode ef_port_write(uint32_t addr, const uint32_t *buf, size_t size); +DllExport void ef_port_env_lock(void); +DllExport void ef_port_env_unlock(void); +DllExport void ef_log_debug(const char *file, const long line, const char *format, ...); +DllExport void ef_log_info(const char *format, ...); +DllExport void ef_print(const char *format, ...); #ifdef __cplusplus } diff --git a/libraries/easyflash/inc/ef_cfg.h b/libraries/easyflash/inc/ef_cfg.h index 95a39bd57..c077028d8 100644 --- a/libraries/easyflash/inc/ef_cfg.h +++ b/libraries/easyflash/inc/ef_cfg.h @@ -132,10 +132,20 @@ #define EF_START_ADDR 0xEF000 #define ENV_AREA_SIZE 0x8000 +#elif WINDOWS + +#define EF_START_ADDR 0 +extern uint32_t ENV_AREA_SIZE; +#define DllExport __declspec(dllexport) + #endif /* print debug information of flash */ #ifdef PKG_EASYFLASH_DEBUG #define PRINT_DEBUG #endif +#ifndef DllExport +#define DllExport +#endif + #endif /* EF_CFG_H_ */ diff --git a/libraries/easyflash/ports/WinEF/.gitignore b/libraries/easyflash/ports/WinEF/.gitignore new file mode 100644 index 000000000..091ee166d --- /dev/null +++ b/libraries/easyflash/ports/WinEF/.gitignore @@ -0,0 +1,4 @@ +.vs +x64 +WinEF +Release diff --git a/libraries/easyflash/ports/WinEF/WinEF.vcxproj b/libraries/easyflash/ports/WinEF/WinEF.vcxproj new file mode 100644 index 000000000..ec6f31c13 --- /dev/null +++ b/libraries/easyflash/ports/WinEF/WinEF.vcxproj @@ -0,0 +1,100 @@ + + + + + Release + Win32 + + + Release + x64 + + + + 17.0 + Win32Proj + {e827212d-b194-42be-9282-43fbdc5a4d38} + WinEF + 10.0 + + + + DynamicLibrary + false + v143 + true + Unicode + + + DynamicLibrary + false + v143 + true + Unicode + + + + + + + + + + + + + + + ./;../../inc;$(IncludePath) + + + ./;../../inc;$(IncludePath) + + + + Level3 + true + WIN32;NDEBUG;WINEF_EXPORTS;_WINDOWS;_USRDLL;WINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + true + NotUsing + stdc11 + + + Windows + true + false + + + + + Level3 + true + NDEBUG;WINEF_EXPORTS;_WINDOWS;_USRDLL;WINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + true + NotUsing + stdc11 + + + Windows + true + false + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/libraries/easyflash/ports/WinEF/WinEF.vcxproj.filters b/libraries/easyflash/ports/WinEF/WinEF.vcxproj.filters new file mode 100644 index 000000000..f2286e417 --- /dev/null +++ b/libraries/easyflash/ports/WinEF/WinEF.vcxproj.filters @@ -0,0 +1,51 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Header Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/libraries/easyflash/ports/WinEF/dllmain.cpp b/libraries/easyflash/ports/WinEF/dllmain.cpp new file mode 100644 index 000000000..dacb4c3e1 --- /dev/null +++ b/libraries/easyflash/ports/WinEF/dllmain.cpp @@ -0,0 +1,17 @@ +#include "framework.h" + +BOOL APIENTRY DllMain( HMODULE hModule, + DWORD ul_reason_for_call, + LPVOID lpReserved + ) +{ + switch (ul_reason_for_call) + { + case DLL_PROCESS_ATTACH: + case DLL_THREAD_ATTACH: + case DLL_THREAD_DETACH: + case DLL_PROCESS_DETACH: + break; + } + return TRUE; +} diff --git a/libraries/easyflash/ports/WinEF/framework.h b/libraries/easyflash/ports/WinEF/framework.h new file mode 100644 index 000000000..54b83e94f --- /dev/null +++ b/libraries/easyflash/ports/WinEF/framework.h @@ -0,0 +1,5 @@ +#pragma once + +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers +// Windows Header Files +#include diff --git a/libraries/easyflash/ports/ef_port.c b/libraries/easyflash/ports/ef_port.c index 6e289d26a..66411d3df 100644 --- a/libraries/easyflash/ports/ef_port.c +++ b/libraries/easyflash/ports/ef_port.c @@ -30,9 +30,11 @@ #include #include #include +#if !WINDOWS #include "FreeRTOS.h" #include "semphr.h" #include "queue.h" +#endif #if PLATFORM_REALTEK @@ -53,6 +55,43 @@ flash_t flash; #include #define QueueHandle_t xQueueHandle +#elif WINDOWS + +#include "framework.h" + +#define QueueHandle_t HANDLE +extern QueueHandle_t ef_mutex; + +BYTE* env_area = NULL; +uint32_t ENV_AREA_SIZE = 0; + +DllExport BYTE* get_env_area(void) +{ + return env_area; +} + +DllExport void set_env_size(uint32_t size) +{ + ENV_AREA_SIZE = size; + if(env_area) free(env_area); + env_area = malloc(size * sizeof(BYTE)); +} + +HANDLE xSemaphoreCreateMutex() +{ + return CreateMutex(NULL, FALSE, NULL); +} + +void xSemaphoreTake(HANDLE handle, int time) +{ + WaitForSingleObject(ef_mutex, time); +} + +void xSemaphoreGive(HANDLE handle) +{ + ReleaseMutex(ef_mutex); +} + #endif /* default ENV set for user */ @@ -113,6 +152,9 @@ EfErrCode ef_port_read(uint32_t addr, uint32_t* buf, size_t size) if(res == 0) res = EF_READ_ERR; else res = EF_NO_ERR; return res; +#elif WINDOWS + memcpy(buf, env_area + addr, size); + return EF_NO_ERR; #endif } @@ -147,6 +189,8 @@ EfErrCode ef_port_erase(uint32_t addr, size_t size) if(res != 0) res = EF_ERASE_ERR; else res = EF_NO_ERR; return res; +#elif WINDOWS + memset(env_area + addr, 0xFF, size); #endif return result; } @@ -180,6 +224,9 @@ EfErrCode ef_port_write(uint32_t addr, const uint32_t* buf, size_t size) if(res == 0) res = EF_WRITE_ERR; else res = EF_NO_ERR; return res; +#elif WINDOWS + memcpy(env_area + addr, buf, size); + return EF_NO_ERR; #endif } diff --git a/libraries/easyflash/src/ef_env.c b/libraries/easyflash/src/ef_env.c index 5a445ce81..978b43b26 100644 --- a/libraries/easyflash/src/ef_env.c +++ b/libraries/easyflash/src/ef_env.c @@ -114,6 +114,7 @@ #define SECTOR_SIZE EF_ERASE_MIN_SIZE #define SECTOR_NUM (ENV_AREA_SIZE / (EF_ERASE_MIN_SIZE)) +#if !WINDOWS #if (SECTOR_NUM < 2) #error "The sector number must lager then or equal to 2" #endif @@ -121,6 +122,7 @@ #if (EF_GC_EMPTY_SEC_THRESHOLD == 0 || EF_GC_EMPTY_SEC_THRESHOLD >= SECTOR_NUM) #error "There is at least one empty sector for GC." #endif +#endif #define SECTOR_HDR_DATA_SIZE (EF_WG_ALIGN(sizeof(struct sector_hdr_data))) #define SECTOR_DIRTY_OFFSET ((unsigned long)(&((struct sector_hdr_data *)0)->status_table.dirty)) diff --git a/platforms/RTL8710A/main.c b/platforms/RTL8710A/main.c index 083e93acd..189b7fb77 100644 --- a/platforms/RTL8710A/main.c +++ b/platforms/RTL8710A/main.c @@ -11,13 +11,31 @@ extern void Main_Init(); extern void Main_OnEverySecond(); extern struct netif xnetif[NET_IF_NUM]; +extern int wifi_get_mac_address(char* mac); -rtw_mode_t wifi_mode = RTW_MODE_NONE; +rtw_mode_t wifi_mode = RTW_MODE_STA; TaskHandle_t g_sys_task_handle1; uint8_t wmac[6] = { 0 }; static void obk_task(void* pvParameters) { + char buf[21]; + wifi_get_mac_address(&buf); + sscanf(buf, "%02x:%02x:%02x:%02x:%02x:%02x", &(wmac[0]), &(wmac[1]), &(wmac[2]), &(wmac[3]), &(wmac[4]), &(wmac[5])); + if((wmac[0] == 0 && wmac[1] == 0 && wmac[2] == 0 && wmac[3] == 0 && wmac[4] == 0 && wmac[5] == 0) || + (wmac[0] == 0xFF && wmac[1] == 0xFF && wmac[2] == 0xFF && wmac[3] == 0xFF && wmac[4] == 0xFF && wmac[5] == 0xFF) || + (wmac[0] == 0 && wmac[1] == 0xE0 && wmac[2] == 0x4C && wmac[3] == 0x87 && wmac[4] == 0 && wmac[5] == 0)) + { + // this is not mac, but at least it should be unique + device_mutex_lock(RT_DEV_LOCK_EFUSE); + for(int i = 0xF4; i < 0xFA; i++) + { + HALEFUSEOneByteReadROM(HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_EFUSE_CTRL), i, &wmac[i - 0xF4], 7); + } + device_mutex_unlock(RT_DEV_LOCK_EFUSE); + } + WiFI_GetMacAddress(&wmac); + vTaskDelay(50 / portTICK_PERIOD_MS); Main_Init(); for(;;) @@ -33,14 +51,6 @@ int main(void) wlan_network(); //sys_jtag_off(); - // this is not mac, but at least it should be unique - device_mutex_lock(RT_DEV_LOCK_EFUSE); - for(int i = 0xF4; i < 0xFA; i++) - { - HALEFUSEOneByteReadROM(HAL_READ32(SYSTEM_CTRL_BASE, REG_SYS_EFUSE_CTRL), i, &wmac[i - 0xF4], 7); - } - device_mutex_unlock(RT_DEV_LOCK_EFUSE); - xTaskCreate( obk_task, "OpenBeken", diff --git a/platforms/RTL8720D/OpenBeken.mk b/platforms/RTL8720D/OpenBeken.mk index bcc94d5df..e972b2e72 100644 --- a/platforms/RTL8720D/OpenBeken.mk +++ b/platforms/RTL8720D/OpenBeken.mk @@ -17,6 +17,7 @@ CSRC += hal/realtek/hal_wifi_realtek.c OBK_SRCS = include $(EFDIR)/../platforms/obk_main.mk CSRC += $(OBKM_SRC) +CPPSRC += $(OBKM_SRC_CXX) MODULE_IFLAGS += $(OBK_CFLAGS) CSRC += libraries/easyflash/ports/ef_port.c diff --git a/platforms/RTL8720D/main.c b/platforms/RTL8720D/main.c index 9f2141190..946f8a154 100644 --- a/platforms/RTL8720D/main.c +++ b/platforms/RTL8720D/main.c @@ -2,7 +2,7 @@ #include "main.h" #include "wifi_constants.h" #include "rom_map.h" -#include "flash_api.h" +#include "rtl8721d_flash.h" #include "device_lock.h" extern void wlan_network(void); @@ -119,7 +119,7 @@ static void app_dslp_wake(void) extern void Main_Init(); extern void Main_OnEverySecond(); extern uint32_t ota_get_cur_index(void); -extern flash_t flash; +extern void WiFI_GetMacAddress(char* mac); TaskHandle_t g_sys_task_handle1; uint8_t wmac[6] = { 0 }; @@ -132,6 +132,7 @@ __attribute__((weak)) void _fini(void) {} static void obk_task(void* pvParameters) { + WiFI_GetMacAddress(&wmac); vTaskDelay(50 / portTICK_PERIOD_MS); Main_Init(); for(;;) @@ -182,18 +183,9 @@ int main(void) free(efuse); current_fw_idx = ota_get_cur_index(); - uint8_t flash_size; - do - { - // HACK: determine flash size by reading 0x96969999 (boot signature). - uint32_t fboot; - device_mutex_lock(RT_DEV_LOCK_FLASH); - flash_read_word(&flash, flash_size_8720 << 20, &fboot); - device_mutex_unlock(RT_DEV_LOCK_FLASH); - if(fboot == 0x96969999) flash_size = flash_size_8720; - } while((flash_size_8720 /= 2) >= 2); - - flash_size_8720 = flash_size; + uint8_t flash_ID[4]; + FLASH_RxCmd(flash_init_para.FLASH_cmd_rd_id, 3, flash_ID); + flash_size_8720 = (1 << (flash_ID[2] - 0x11)) / 8; app_start_autoicg(); //app_shared_btmem(ENABLE); diff --git a/platforms/RTL8720E/CMakeLists.txt b/platforms/RTL8720E/CMakeLists.txt new file mode 100644 index 000000000..7752e71a9 --- /dev/null +++ b/platforms/RTL8720E/CMakeLists.txt @@ -0,0 +1,63 @@ +ameba_internal_library(OpenBeken) + +set(public_definitions) +set(SDK_CJSON true) +set(SDK_LFS true) +set(OBK_SRCS "../../src/") +set(BERRY_SRCPATH "../../libraries/berry/src") +set(BERRY_MODULEPATH "${OBK_SRCS}berry/modules") + +include(../obk_main.cmake) +include(../../libraries/berry.cmake) + +ameba_list_append(public_definitions LWIP_NETIF_HOSTNAME=1 TCP_MSL=1000) +ameba_global_define(${public_definitions}) + +add_compile_definitions( + PLATFORM_REALTEK=1 + PLATFORM_REALTEK_NEW=1 + PLATFORM_RTL8720E=1 +) + +if(DEFINED ENV{APP_VERSION}) + add_compile_definitions(USER_SW_VER="$ENV{APP_VERSION}") +endif() +if(DEFINED ENV{OBK_VARIANT}) + add_compile_definitions(OBK_VARIANT=$ENV{OBK_VARIANT}) +endif() + +target_compile_options( + ${CURRENT_LIB_NAME} PRIVATE + -Wno-undef + -Wno-unused-parameter + -Wno-unused-variable + -Wno-implicit-fallthrough + -Wno-missing-field-initializers + -Wno-error + "$<$:-Wno-strict-prototypes>" +) + +target_include_directories( + ${CURRENT_LIB_NAME} PRIVATE + ../../include + ${CMAKE_CURRENT_SOURCE_DIR} + ${BERRY_SRCPATH} +) + +target_sources( + ${CURRENT_LIB_NAME} PRIVATE + + ${OBK_SRCS}hal/realtek/hal_flashConfig_realtek.c + ${OBK_SRCS}hal/realtek/hal_flashVars_realtek.c + ${OBK_SRCS}hal/realtek/hal_generic_realtek.c + ${OBK_SRCS}hal/realtek/hal_pins_realtek.c + ${OBK_SRCS}hal/realtek/hal_wifi_realtek_new.c + ${OBK_SRCS}hal/realtek/rtl8721da/hal_main_rtl8721da.c + ${OBK_SRCS}hal/realtek/rtl8720e/hal_pins_rtl8720e.c + ${OBK_SRCS}hal/realtek/rtl8721da/hal_uart_rtl8721da.c + + ${OBKM_SRC} + ${OBKM_SRC_CXX} + ${BERRY_SRC_C} + ../../libraries/mqtt_patched.c +) diff --git a/platforms/RTL8720E/default.conf b/platforms/RTL8720E/default.conf new file mode 100644 index 000000000..6f4076e78 --- /dev/null +++ b/platforms/RTL8720E/default.conf @@ -0,0 +1,7 @@ +CONFIG_SUPPORT_ATCMD=n +CONFIG_ATCMD_NETWORK=n +CONFIG_VFS_LITTLEFS_INCLUDED=n +CONFIG_KERNEL=y +CONFIG_LWIP_NETCONN_SEM_PER_THREAD_MENU=y +CONFIG_MBEDTLS_ENABLED_MENU=y +CONFIG_LWIP_IPV6=n diff --git a/platforms/RTL8720E/device_lock.h b/platforms/RTL8720E/device_lock.h new file mode 100644 index 000000000..2861d11c0 --- /dev/null +++ b/platforms/RTL8720E/device_lock.h @@ -0,0 +1,3 @@ +#define RT_DEV_LOCK_FLASH 0 +#define device_mutex_lock(x) +#define device_mutex_unlock(x) diff --git a/platforms/RTL8720E/easyflash.h b/platforms/RTL8720E/easyflash.h new file mode 100644 index 000000000..734de6248 --- /dev/null +++ b/platforms/RTL8720E/easyflash.h @@ -0,0 +1,7 @@ +#include "kv.h" +#define ef_get_env_blob(a,b,c,d) rt_kv_get(a,b,c) +#define ef_set_env_blob rt_kv_set +#define EF_ENV_INIT_FAILED -1 +#define EF_ENV_NAME_ERR -1 +#define easyflash_init() +typedef int EfErrCode; diff --git a/platforms/RTL8721DA/CMakeLists.txt b/platforms/RTL8721DA/CMakeLists.txt new file mode 100644 index 000000000..f05e4ae27 --- /dev/null +++ b/platforms/RTL8721DA/CMakeLists.txt @@ -0,0 +1,63 @@ +ameba_internal_library(OpenBeken) + +set(public_definitions) +set(SDK_CJSON true) +set(SDK_LFS true) +set(OBK_SRCS "../../src/") +set(BERRY_SRCPATH "../../libraries/berry/src") +set(BERRY_MODULEPATH "${OBK_SRCS}berry/modules") + +include(../obk_main.cmake) +include(../../libraries/berry.cmake) + +ameba_list_append(public_definitions LWIP_NETIF_HOSTNAME=1 TCP_MSL=1000) +ameba_global_define(${public_definitions}) + +add_compile_definitions( + PLATFORM_REALTEK=1 + PLATFORM_REALTEK_NEW=1 + PLATFORM_RTL8721DA=1 +) + +if(DEFINED ENV{APP_VERSION}) + add_compile_definitions(USER_SW_VER="$ENV{APP_VERSION}") +endif() +if(DEFINED ENV{OBK_VARIANT}) + add_compile_definitions(OBK_VARIANT=$ENV{OBK_VARIANT}) +endif() + +target_compile_options( + ${CURRENT_LIB_NAME} PRIVATE + -Wno-undef + -Wno-unused-parameter + -Wno-unused-variable + -Wno-implicit-fallthrough + -Wno-missing-field-initializers + -Wno-error + "$<$:-Wno-strict-prototypes>" +) + +target_include_directories( + ${CURRENT_LIB_NAME} PRIVATE + ../../include + ${CMAKE_CURRENT_SOURCE_DIR} + ${BERRY_SRCPATH} +) + +target_sources( + ${CURRENT_LIB_NAME} PRIVATE + + ${OBK_SRCS}hal/realtek/hal_flashConfig_realtek.c + ${OBK_SRCS}hal/realtek/hal_flashVars_realtek.c + ${OBK_SRCS}hal/realtek/hal_generic_realtek.c + ${OBK_SRCS}hal/realtek/hal_pins_realtek.c + ${OBK_SRCS}hal/realtek/hal_wifi_realtek_new.c + ${OBK_SRCS}hal/realtek/rtl8721da/hal_main_rtl8721da.c + ${OBK_SRCS}hal/realtek/rtl8721da/hal_pins_rtl8721da.c + ${OBK_SRCS}hal/realtek/rtl8721da/hal_uart_rtl8721da.c + + ${OBKM_SRC} + ${OBKM_SRC_CXX} + ${BERRY_SRC_C} + ../../libraries/mqtt_patched.c +) diff --git a/platforms/RTL8721DA/default.conf b/platforms/RTL8721DA/default.conf new file mode 100644 index 000000000..6f4076e78 --- /dev/null +++ b/platforms/RTL8721DA/default.conf @@ -0,0 +1,7 @@ +CONFIG_SUPPORT_ATCMD=n +CONFIG_ATCMD_NETWORK=n +CONFIG_VFS_LITTLEFS_INCLUDED=n +CONFIG_KERNEL=y +CONFIG_LWIP_NETCONN_SEM_PER_THREAD_MENU=y +CONFIG_MBEDTLS_ENABLED_MENU=y +CONFIG_LWIP_IPV6=n diff --git a/platforms/RTL8721DA/device_lock.h b/platforms/RTL8721DA/device_lock.h new file mode 100644 index 000000000..2861d11c0 --- /dev/null +++ b/platforms/RTL8721DA/device_lock.h @@ -0,0 +1,3 @@ +#define RT_DEV_LOCK_FLASH 0 +#define device_mutex_lock(x) +#define device_mutex_unlock(x) diff --git a/platforms/RTL8721DA/easyflash.h b/platforms/RTL8721DA/easyflash.h new file mode 100644 index 000000000..734de6248 --- /dev/null +++ b/platforms/RTL8721DA/easyflash.h @@ -0,0 +1,7 @@ +#include "kv.h" +#define ef_get_env_blob(a,b,c,d) rt_kv_get(a,b,c) +#define ef_set_env_blob rt_kv_set +#define EF_ENV_INIT_FAILED -1 +#define EF_ENV_NAME_ERR -1 +#define easyflash_init() +typedef int EfErrCode; diff --git a/platforms/RTL87X0C/OpenBeken.mk b/platforms/RTL87X0C/OpenBeken.mk index 259ddb2db..6a791847f 100644 --- a/platforms/RTL87X0C/OpenBeken.mk +++ b/platforms/RTL87X0C/OpenBeken.mk @@ -19,7 +19,9 @@ SRC_C += $(OBK_DIR)/src/hal/realtek/hal_wifi_realtek.c OBK_SRCS = $(OBK_DIR)/src/ include $(OBK_DIR)/platforms/obk_main.mk SRC_C += $(OBKM_SRC) +SRC_CPP += $(OBKM_SRC_CXX) CFLAGS += $(OBK_CFLAGS) +CPPFLAGS += $(INCLUDES) -fpermissive SRC_C += $(OBK_DIR)/libraries/easyflash/ports/ef_port.c SRC_C += $(OBK_DIR)/libraries/easyflash/src/easyflash.c diff --git a/platforms/obk_main.cmake b/platforms/obk_main.cmake index e7928e10f..b5b61c33e 100644 --- a/platforms/obk_main.cmake +++ b/platforms/obk_main.cmake @@ -4,7 +4,6 @@ set(OBKM_SRC ${OBK_SRCS}base64/base64.c ${OBK_SRCS}bitmessage/bitmessage_read.c ${OBK_SRCS}bitmessage/bitmessage_write.c - ${OBK_SRCS}cJSON/cJSON.c ${OBK_SRCS}cmnds/cmd_berry.c ${OBK_SRCS}cmnds/cmd_channels.c ${OBK_SRCS}cmnds/cmd_eventHandlers.c @@ -52,8 +51,6 @@ set(OBKM_SRC ${OBK_SRCS}httpclient/http_client.c ${OBK_SRCS}httpclient/utils_net.c ${OBK_SRCS}httpclient/utils_timer.c - ${OBK_SRCS}littlefs/lfs_util.c - ${OBK_SRCS}littlefs/lfs.c ${OBK_SRCS}littlefs/our_lfs.c ${OBK_SRCS}ota/ota.c @@ -124,6 +121,7 @@ set(OBKM_SRC ${OBK_SRCS}driver/drv_spidma.c ${OBK_SRCS}driver/drv_ssdp.c ${OBK_SRCS}driver/drv_tasmotaDeviceGroups.c + ${OBK_SRCS}driver/drv_tclAC.c ${OBK_SRCS}driver/drv_test.c ${OBK_SRCS}driver/drv_test_drivers.c ${OBK_SRCS}driver/drv_textScroller.c @@ -146,3 +144,104 @@ set(OBKM_SRC # ${OBK_SRCS}driver/drv_bmp280.c # ${OBK_SRCS}driver/drv_test_charts.c ) + + +if(NOT DEFINED SDK_CJSON) + set(OBKM_SRC ${OBKM_SRC} ${OBK_SRCS}cJSON/cJSON.c) +endif() + +if(NOT DEFINED SDK_LFS) + set(OBKM_SRC ${OBKM_SRC} ${OBK_SRCS}littlefs/lfs.c ${OBK_SRCS}littlefs/lfs_util.c) +endif() + +set(OBKM_SRC_CXX + ${OBK_SRCS}driver/drv_ir.cpp + ${OBK_SRCS}driver/drv_ir_new.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/IRac.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/IRproto.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/IRrecv.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/IRsend.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/IRtext.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/IRtimer.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/IRutils.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/String.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/digitalWriteFast.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Airton.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Airwell.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Aiwa.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Amcor.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Argo.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Arris.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Bosch.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Bose.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Carrier.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_ClimaButler.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Coolix.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Corona.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Daikin.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Delonghi.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Denon.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Dish.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Doshisha.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Ecoclim.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Electra.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_EliteScreens.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Epson.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Fujitsu.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_GICable.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_GlobalCache.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Goodweather.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Gorenje.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Gree.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Haier.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Hitachi.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Inax.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_JVC.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Kelon.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Kelvinator.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_LG.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Lasertag.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Lego.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Lutron.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_MWM.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Magiquest.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Metz.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Midea.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_MilesTag2.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Mirage.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Mitsubishi.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_MitsubishiHeavy.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Multibrackets.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_NEC.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Neoclima.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Nikai.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Panasonic.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Pioneer.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Pronto.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_RC5_RC6.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_RCMM.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Rhoss.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Samsung.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Sanyo.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Sharp.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Sherwood.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Sony.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Symphony.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Tcl.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Technibel.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Teco.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Teknopoint.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Toshiba.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Toto.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Transcold.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Trotec.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Truma.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Vestel.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Voltas.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Whirlpool.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Whynter.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Wowwee.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Xmp.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/ir_Zepeal.cpp + ${OBK_SRCS}libraries/IRremoteESP8266/src/itoa.cpp +) diff --git a/platforms/obk_main.mk b/platforms/obk_main.mk index f4ae9beeb..72d9d6ba3 100644 --- a/platforms/obk_main.mk +++ b/platforms/obk_main.mk @@ -162,6 +162,90 @@ OBKM_SRC += $(OBK_SRCS)i2c/drv_i2c_tc74.c OBKM_SRC_CXX += $(OBK_SRCS)driver/drv_ir.cpp OBKM_SRC_CXX += $(OBK_SRCS)driver/drv_ir_new.cpp -OBKM_SRC_CXX += $(wildcard $(OBK_SRCS)libraries/IRremoteESP8266/src/*.cpp) - - +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/IRac.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/IRproto.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/IRrecv.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/IRsend.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/IRtext.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/IRtimer.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/IRutils.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/String.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/digitalWriteFast.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Airton.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Airwell.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Aiwa.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Amcor.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Argo.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Arris.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Bosch.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Bose.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Carrier.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_ClimaButler.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Coolix.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Corona.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Daikin.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Delonghi.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Denon.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Dish.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Doshisha.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Ecoclim.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Electra.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_EliteScreens.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Epson.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Fujitsu.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_GICable.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_GlobalCache.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Goodweather.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Gorenje.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Gree.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Haier.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Hitachi.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Inax.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_JVC.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Kelon.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Kelvinator.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_LG.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Lasertag.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Lego.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Lutron.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_MWM.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Magiquest.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Metz.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Midea.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_MilesTag2.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Mirage.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Mitsubishi.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_MitsubishiHeavy.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Multibrackets.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_NEC.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Neoclima.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Nikai.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Panasonic.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Pioneer.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Pronto.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_RC5_RC6.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_RCMM.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Rhoss.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Samsung.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Sanyo.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Sharp.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Sherwood.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Sony.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Symphony.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Tcl.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Technibel.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Teco.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Teknopoint.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Toshiba.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Toto.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Transcold.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Trotec.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Truma.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Vestel.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Voltas.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Whirlpool.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Whynter.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Wowwee.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Xmp.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/ir_Zepeal.cpp +OBKM_SRC_CXX += $(OBK_SRCS)libraries/IRremoteESP8266/src/itoa.cpp diff --git a/sdk/OpenRTL8720D b/sdk/OpenRTL8720D index 7a30c20f8..a25781506 160000 --- a/sdk/OpenRTL8720D +++ b/sdk/OpenRTL8720D @@ -1 +1 @@ -Subproject commit 7a30c20f85cdad6eaaaac4a8d856e321cc7149e6 +Subproject commit a25781506cd4dce8f9bd83c2d886dc333497442e diff --git a/sdk/OpenRTL87X0C b/sdk/OpenRTL87X0C index 017865bec..029e4ed1c 160000 --- a/sdk/OpenRTL87X0C +++ b/sdk/OpenRTL87X0C @@ -1 +1 @@ -Subproject commit 017865becde77deab40cc82ec2f8e0ca2ec5d963 +Subproject commit 029e4ed1c895111b28540a83428f66fe4e8a2e6e diff --git a/sdk/ameba-rtos b/sdk/ameba-rtos new file mode 160000 index 000000000..347af9133 --- /dev/null +++ b/sdk/ameba-rtos @@ -0,0 +1 @@ +Subproject commit 347af9133679eacb10b368010f9ce5e143ff1643 diff --git a/src/cmnds/cmd_main.c b/src/cmnds/cmd_main.c index 9915a4165..c78679b74 100644 --- a/src/cmnds/cmd_main.c +++ b/src/cmnds/cmd_main.c @@ -49,7 +49,9 @@ extern void rtw_enable_wlan_low_pwr_mode(WLAN_LOW_PW_MODE mode); #elif PLATFORM_RTL8720D extern void SystemSetCpuClk(unsigned char CpuClk); #endif +#if !PLATFORM_REALTEK_NEW #include "wifi_conf.h" +#endif int g_sleepfactor = 1; #elif PLATFORM_BEKEN_NEW #include "co_math.h" diff --git a/src/driver/drv_bl0937.c b/src/driver/drv_bl0937.c index 4188446b1..42181f191 100644 --- a/src/driver/drv_bl0937.c +++ b/src/driver/drv_bl0937.c @@ -41,8 +41,7 @@ #elif PLATFORM_REALTEK #include "gpio_irq_api.h" -#include "../hal/realtek/hal_generic_realtek.h" -extern rtlPinMapping_t g_pins[]; +#include "../hal/realtek/hal_pinmap_realtek.h" rtlPinMapping_t* rtl_cf; rtlPinMapping_t* rtl_cf1; diff --git a/src/driver/drv_ir_new.cpp b/src/driver/drv_ir_new.cpp index 18c4d6eea..b45e637db 100644 --- a/src/driver/drv_ir_new.cpp +++ b/src/driver/drv_ir_new.cpp @@ -8,28 +8,40 @@ extern "C" { // these cause error: conflicting declaration of 'int bk_wlan_mcu_suppress_and_sleep(unsigned int)' with 'C' linkage #include "../new_common.h" -#include "include.h" -#include "arm_arch.h" #include "../new_pins.h" #include "../new_cfg.h" #include "../logging/logging.h" #include "../obk_config.h" #include "../cmnds/cmd_public.h" +#include "../hal/hal_pins.h" +#include "../hal/hal_generic.h" + +#if PLATFORM_BEKEN +#include "include.h" +#include "arm_arch.h" #include "bk_timer_pub.h" #include "drv_model_pub.h" - -// why can;t I call this? -#include "../mqtt/new_mqtt.h" - #include //#include "pwm.h" #include "pwm_pub.h" - #include "../../beken378/func/include/net_param_pub.h" #include "../../beken378/func/user_driver/BkDriverPwm.h" #include "../../beken378/func/user_driver/BkDriverI2c.h" #include "../../beken378/driver/i2c/i2c1.h" #include "../../beken378/driver/gpio/gpio.h" +#elif PLATFORM_REALTEK +#define MBED_PERIPHERALNAMES_H +#include "timer_api.h" +#include "pwmout_api.h" +#include "../hal/realtek/hal_pinmap_realtek.h" +void pwmout_start(pwmout_t* obj); +void pwmout_stop(pwmout_t* obj); +#endif + +// why can;t I call this? +#include "../mqtt/new_mqtt.h" + + unsigned long ir_counter = 0; @@ -39,6 +51,7 @@ extern "C" { uint8_t gIRPinPolarity = 0; extern int my_strnicmp(const char* a, const char* b, int len); + extern unsigned int g_timeMs; } @@ -59,24 +72,34 @@ typedef unsigned short uint16_t; #define __FlashStringHelper char // dummy functions -void noInterrupts() {} -void interrupts() {} - -unsigned long millis() { +#if PLATFORM_BEKEN +void noInterrupts() { } +void interrupts() { } +void delay(int n) { } +void delayMicroseconds(int n) { } +unsigned long millis() +{ return 0; } -unsigned long micros() { +unsigned long micros() +{ return 0; } - - -void delay(int n) { - return; +#else +void noInterrupts() { taskENTER_CRITICAL(); } +void interrupts() { taskEXIT_CRITICAL(); } +void delay(int n) { delay_ms(n); } +void delayMicroseconds(int n) { HAL_Delay_us(n); } +unsigned long millis() +{ + return g_timeMs; } - -void delayMicroseconds(int n) { - return; +unsigned long micros() +{ + return g_timeMs * 1000; } +#endif + class Print { public: @@ -107,10 +130,21 @@ Print Serial; // #define ISR void IR_ISR // THIS function is defined in src/libraries/IRremoteESP8266/src/IRrecv.cpp -extern "C" void DRV_IR_ISR(UINT8 t); +extern "C" void +#if PLATFORM_BEKEN +DRV_IR_ISR(UINT8 t) +#else +DRV_IR_ISR() +#endif +; extern void IR_ISR(); +#if PLATFORM_BEKEN static UINT32 ir_chan = BKTIMER0; +#elif PLATFORM_REALTEK +static gtimer_t ir_timer; +static UINT32 ir_chan = TIMER2; +#endif static UINT32 ir_div = 1; static UINT32 ir_periodus = 50; @@ -121,6 +155,7 @@ void timerConfigForReceive() { void _timerConfigForReceive() { ir_counter = 0; +#if PLATFORM_BEKEN timer_param_t params = { (unsigned char)ir_chan, (unsigned char)ir_div, // div @@ -156,6 +191,9 @@ void _timerConfigForReceive() { ADDLOG_INFO(LOG_FEATURE_IR, (char *)"ir timer setup %u", res); res = sddev_control((char *)TIMER_DEV_NAME, CMD_TIMER_UNIT_ENABLE, &ir_chan); ADDLOG_INFO(LOG_FEATURE_IR, (char *)"ir timer enabled %u", res); +#elif PLATFORM_REALTEK + gtimer_init(&ir_timer, ir_chan); +#endif } static void timer_enable() { @@ -163,13 +201,21 @@ static void timer_enable() { static void timer_disable() { } static void _timer_enable() { - UINT32 res; + UINT32 res = 0; +#if PLATFORM_BEKEN res = sddev_control((char *)TIMER_DEV_NAME, CMD_TIMER_UNIT_ENABLE, &ir_chan); +#elif PLATFORM_REALTEK + gtimer_start_periodical(&ir_timer, ir_periodus, (void*)&DRV_IR_ISR, (uint32_t)&ir_timer); +#endif ADDLOG_INFO(LOG_FEATURE_IR, (char *)"ir timer enabled %u", res); } static void _timer_disable() { - UINT32 res; + UINT32 res = 0; +#if PLATFORM_BEKEN res = sddev_control((char *)TIMER_DEV_NAME, CMD_TIMER_UNIT_DISABLE, &ir_chan); +#elif PLATFORM_REALTEK + gtimer_stop(&ir_timer); +#endif ADDLOG_INFO(LOG_FEATURE_IR, (char *)"ir timer disabled %u", res); } @@ -197,8 +243,6 @@ SpoofIrReceiver IrReceiver; #include "../libraries/IRremoteESP8266/src/IRproto.h" #include "../libraries/IRremoteESP8266/src/digitalWriteFast.h" -extern "C" int PIN_GetPWMIndexForPinIndex(int pin); - // override aspects of sending for our own interrupt driven sends // basically, IRsend calls mark(us) and space(us) to send. // we simply note the numbers into a rolling buffer, assume the first is a mark() @@ -262,19 +306,10 @@ public: ADDLOG_INFO(LOG_FEATURE_IR, (char *)"enableIROut %d freq %d duty",(int)freq, (int)duty); if(duty<1) duty=1; - if(duty>100) - duty=100; - // just setup variables for use in ISR - //pwmfrequency = ((uint32_t)aFrequencyKHz) * 1000; - pwmperiod = (26000000 / freq); - pwmduty = pwmperiod / (100/duty); - - -#if PLATFORM_BK7231N - bk_pwm_update_param((bk_pwm_t)this->pwmIndex, this->pwmperiod, pwmduty, 0, 0); -#else - bk_pwm_update_param((bk_pwm_t)this->pwmIndex, this->pwmperiod, pwmduty); -#endif + pwmduty = duty; + + HAL_PIN_PWM_Start(this->sendPin, freq); + HAL_PIN_PWM_Update(this->sendPin, duty); } void resetsendqueue() { @@ -302,14 +337,21 @@ public: } return val; } +#if PLATFORM_REALTEK + void ledOff() + { + pwmout_start(g_pins[sendPin].pwm); + } + void ledOn() + { + pwmout_stop(g_pins[sendPin].pwm); + } +#endif int currentsendtime; int currentbitval; uint8_t sendPin; - uint8_t pwmIndex; - uint32_t pwmfrequency; - uint32_t pwmperiod; uint32_t pwmduty; uint32_t our_ms; @@ -323,9 +365,15 @@ IRrecv *ourReceiver = NULL; // this is our ISR. // it is called every 50us, so we need to work on making it as efficient as possible. -extern "C" void DRV_IR_ISR(UINT8 t) { +extern "C" void +#if PLATFORM_BEKEN +DRV_IR_ISR(UINT8 t) +#else +DRV_IR_ISR() +#endif +{ int sending = 0; - if (pIRsend && (pIRsend->pwmIndex >= 0)) { + if (pIRsend) { pIRsend->our_us += 50; if (pIRsend->our_us > 1000) { pIRsend->our_ms++; @@ -373,17 +421,13 @@ extern "C" void DRV_IR_ISR(UINT8 t) { uint32_t duty = pIRsend->pwmduty; if (!pinval) { if (gIRPinPolarity) { - duty = pIRsend->pwmperiod; + duty = 100; } else { duty = 0; } } -#if PLATFORM_BK7231N - bk_pwm_update_param((bk_pwm_t)pIRsend->pwmIndex, pIRsend->pwmperiod, duty, 0, 0); -#else - bk_pwm_update_param((bk_pwm_t)pIRsend->pwmIndex, pIRsend->pwmperiod, duty); -#endif + HAL_PIN_PWM_Update(pIRsend->sendPin, duty); } // is someone really wants rx and TX at the same time, then allow it. @@ -729,28 +773,16 @@ extern "C" void DRV_IR_Init() { } if (txpin > 0) { - int pwmIndex = PIN_GetPWMIndexForPinIndex(txpin); // is this pin capable of PWM? - if (pwmIndex != -1) { + if (HAL_PIN_CanThisPinBePWM(txpin)) { uint32_t pwmfrequency = 38000; - uint32_t period = (26000000 / pwmfrequency); - uint32_t duty = period / 2; -#if PLATFORM_BK7231N - // OSStatus bk_pwm_initialize(bk_pwm_t pwm, uint32_t frequency, uint32_t duty_cycle); - bk_pwm_initialize((bk_pwm_t)pwmIndex, period, duty, 0, 0); -#else - bk_pwm_initialize((bk_pwm_t)pwmIndex, period, duty); -#endif - bk_pwm_start((bk_pwm_t)pwmIndex); + HAL_PIN_PWM_Start(txpin, pwmfrequency); myIRsend *pIRsendTemp = new myIRsend((uint_fast8_t)txpin); pIRsendTemp->resetsendqueue(); - pIRsendTemp->enableIROut(pwmfrequency,50); - pIRsendTemp->pwmIndex = pwmIndex; - pIRsendTemp->pwmduty = duty; - pIRsendTemp->pwmperiod = period; + pIRsendTemp->enableIROut(pwmfrequency, 50); + pIRsendTemp->pwmduty = 50; pIRsend = pIRsendTemp; - //bk_pwm_stop((bk_pwm_t)pIRsend->pwmIndex); //cmddetail:{"name":"IRSend","args":"[PROT-ADDR-CMD-REP]", //cmddetail:"descr":"Sends IR commands in the form PROT-ADDR-CMD-REP, e.g. NEC-1-1A-0", @@ -779,6 +811,7 @@ extern "C" void DRV_IR_Init() { if ((pin > 0) || (txpin > 0)) { // both tx and rx need the interrupt _timerConfigForReceive(); + delay_ms(10); _timer_enable(); } } diff --git a/src/driver/drv_soft_i2c.c b/src/driver/drv_soft_i2c.c index 146190666..4c52eb751 100644 --- a/src/driver/drv_soft_i2c.c +++ b/src/driver/drv_soft_i2c.c @@ -10,7 +10,7 @@ #include "../httpserver/new_http.h" #include "../hal/hal_pins.h" -#if !defined(PLATFORM_ESPIDF) && !defined(PLATFORM_XR806) && !defined(PLATFORM_XR872) && !defined(PLATFORM_ESP8266) +#if !PLATFORM_ESPIDF && !PLATFORM_XR806 && !PLATFORM_XR872 && !PLATFORM_ESP8266 && !PLATFORM_REALTEK_NEW void usleep(int r) //delay function do 10*r nops, because rtos_delay_milliseconds is too much { #ifdef WIN32 diff --git a/src/driver/drv_uart_tcp.c b/src/driver/drv_uart_tcp.c index 3551bd9d6..0d2a51d7f 100644 --- a/src/driver/drv_uart_tcp.c +++ b/src/driver/drv_uart_tcp.c @@ -2,9 +2,11 @@ #include "../new_pins.h" #include "../new_cfg.h" #include "../quicktick.h" +#include "../cmnds/cmd_public.h" #include "../logging/logging.h" #include "errno.h" #include +#include "drv_uart.h" #if ENABLE_DRIVER_UART_TCP diff --git a/src/hal/bk7231/hal_pins_bk7231.c b/src/hal/bk7231/hal_pins_bk7231.c index 2761118d9..568ce4718 100644 --- a/src/hal/bk7231/hal_pins_bk7231.c +++ b/src/hal/bk7231/hal_pins_bk7231.c @@ -13,7 +13,7 @@ #include "../../beken378/driver/gpio/gpio.h" // must fit all pwm indexes -static uint32_t g_periods[6]; +static uint32_t g_periods[6] = { 0 }; int PIN_GetPWMIndexForPinIndex(int pin) { @@ -94,6 +94,7 @@ void HAL_PIN_PWM_Stop(int index) { return; } + g_periods[pwmIndex] = 0; bk_pwm_stop(pwmIndex); } @@ -108,6 +109,12 @@ void HAL_PIN_PWM_Start(int index, int freq) { } uint32_t period = (26000000 / freq); + if(g_periods[pwmIndex] != 0 && g_periods[pwmIndex] != period) + { + g_periods[pwmIndex] = period; + return; + } + g_periods[pwmIndex] = period; #if defined(PLATFORM_BK7231N) && !defined(PLATFORM_BEKEN_NEW) // OSStatus bk_pwm_initialize(bk_pwm_t pwm, uint32_t frequency, uint32_t duty_cycle); diff --git a/src/hal/espidf/hal_main_espidf.c b/src/hal/espidf/hal_main_espidf.c index e02842839..246e7e3e1 100644 --- a/src/hal/espidf/hal_main_espidf.c +++ b/src/hal/espidf/hal_main_espidf.c @@ -44,7 +44,7 @@ void app_main(void) #if !CONFIG_IDF_TARGET_ESP32 && !PLATFORM_ESP8266 temperature_sensor_config_t temp_sensor_config = TEMPERATURE_SENSOR_CONFIG_DEFAULT(-10, 80); temperature_sensor_install(&temp_sensor_config, &temp_handle); - xTaskCreate(temp_func, "IntTemp", TEMP_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL); + xTaskCreate(temp_func, "IntTemp", TEMP_STACK_SIZE, NULL, 16, NULL); #endif #if PLATFORM_ESP8266 diff --git a/src/hal/realtek/hal_generic_realtek.c b/src/hal/realtek/hal_generic_realtek.c index 2c5b2e42d..c1b084e16 100644 --- a/src/hal/realtek/hal_generic_realtek.c +++ b/src/hal/realtek/hal_generic_realtek.c @@ -15,7 +15,11 @@ extern int g_sleepfactor; void HAL_RebootModule() { +#if !PLATFORM_REALTEK_NEW ota_platform_reset(); +#else + sys_reset(); +#endif } void HAL_Delay_us(int delay) diff --git a/src/hal/realtek/hal_generic_realtek.h b/src/hal/realtek/hal_pinmap_realtek.h similarity index 86% rename from src/hal/realtek/hal_generic_realtek.h rename to src/hal/realtek/hal_pinmap_realtek.h index 9a62e7665..53cc92dc4 100644 --- a/src/hal/realtek/hal_generic_realtek.h +++ b/src/hal/realtek/hal_pinmap_realtek.h @@ -16,4 +16,7 @@ typedef struct rtlPinMapping_s pwmout_t* pwm; } rtlPinMapping_t; +extern rtlPinMapping_t g_pins[]; +extern int g_numPins; + #endif // PLATFORM_REALTEK diff --git a/src/hal/realtek/hal_pins_realtek.c b/src/hal/realtek/hal_pins_realtek.c index 22cbb4d1d..562072ac0 100644 --- a/src/hal/realtek/hal_pins_realtek.c +++ b/src/hal/realtek/hal_pins_realtek.c @@ -4,14 +4,43 @@ #include "../../logging/logging.h" #include "../../new_cfg.h" #include "../../new_pins.h" -#include "hal_generic_realtek.h" +#include "../hal_pins.h" +#include "hal_pinmap_realtek.h" +#if !PLATFORM_REALTEK_NEW +#include "gpio_ex_api.h" +#endif +#if !PLATFORM_RTL8710A && !PLATFORM_RTL8710B +#include "pwmout_ex_api.h" +#endif -extern rtlPinMapping_t g_pins[]; -extern int g_numPins; +#if PLATFORM_REALTEK_NEW -int PIN_GetPWMIndexForPinIndex(int pin) +#include "pwmout_ex_api.h" +static int g_active_pwm = 0b0; + +uint8_t HAL_RTK_GetFreeChannel() { - return -1; + uint8_t freech; + for(freech = 0; freech <= 9; freech++) if((g_active_pwm >> freech & 1) == 0) break; + if(freech == 9) return -1; + g_active_pwm |= 1 << freech; + return freech; +} + +void HAL_RTK_FreeChannel(uint8_t channel) +{ + g_active_pwm &= ~(1 << channel); +} + +#endif + +int PIN_GetPWMIndexForPinIndex(int index) +{ + rtlPinMapping_t* pin = g_pins + index; + if(index >= g_numPins) + return -1; + if(pin->pwm != NULL) return pin->pwm->pwm_idx; + else return HAL_PIN_CanThisPinBePWM(index); } const char* HAL_PIN_GetPinNameAlias(int index) @@ -103,6 +132,9 @@ void HAL_PIN_PWM_Stop(int index) rtlPinMapping_t* pin = g_pins + index; if(pin->pwm == NULL) return; //pwmout_stop(pin->pwm); +#if PLATFORM_REALTEK_NEW + HAL_RTK_FreeChannel(pin->pwm->pwm_idx); +#endif pwmout_free(pin->pwm); os_free(pin->pwm); pin->pwm = NULL; @@ -113,7 +145,11 @@ void HAL_PIN_PWM_Start(int index, int freq) if(index >= g_numPins || !HAL_PIN_CanThisPinBePWM(index)) return; rtlPinMapping_t* pin = g_pins + index; - if(pin->pwm != NULL) return; + if(pin->pwm != NULL) + { + pwmout_period_us(pin->pwm, 1000000 / freq); + return; + } if(pin->gpio != NULL) { gpio_deinit(pin->gpio); @@ -122,8 +158,18 @@ void HAL_PIN_PWM_Start(int index, int freq) } pin->pwm = os_malloc(sizeof(pwmout_t)); memset(pin->pwm, 0, sizeof(pwmout_t)); +#if PLATFORM_REALTEK_NEW + int ch = HAL_RTK_GetFreeChannel(); + if(ch == -1) + { + os_free(pin->pwm); + pin->pwm = NULL; + return; + } + pin->pwm->pwm_idx = ch; +#endif pwmout_init(pin->pwm, pin->pin); - pwmout_period_us(pin->pwm, freq); + pwmout_period_us(pin->pwm, 1000000 / freq); #ifndef PLATFORM_RTL8710A pwmout_start(pin->pwm); #endif diff --git a/src/hal/realtek/hal_wifi_realtek.c b/src/hal/realtek/hal_wifi_realtek.c index a417913bd..e824be323 100644 --- a/src/hal/realtek/hal_wifi_realtek.c +++ b/src/hal/realtek/hal_wifi_realtek.c @@ -35,6 +35,7 @@ typedef struct } wifi_data_t; bool g_STA_static_IP = 0; +bool mac_init = false; static void (*g_wifiStatusCallback)(int code) = NULL; static int g_bOpenAccessPointMode = 0; @@ -65,31 +66,63 @@ const char* HAL_GetMyMaskString() return g_MS; } +#if PLATFORM_RTL8710A +extern int wifi_set_mac_address(char* mac); +#endif + int WiFI_SetMacAddress(char* mac) { printf("WiFI_SetMacAddress\r\n"); -#ifdef PLATFORM_RTL8720D +#if PLATFORM_RTL8720D InitEasyFlashIfNeeded(); wifi_change_mac_address_from_ram(0, (uint8_t*)mac); + memcpy(wmac, mac, sizeof(wmac)); return ef_set_env_blob("rtlmac", mac, sizeof(wmac)); -#endif +#elif PLATFORM_RTL8710A + InitEasyFlashIfNeeded(); + char macstr[21]; + memset(macstr, 0, sizeof(macstr)); + sprintf(macstr, "%02x%02x%02x%02x%02x%02x", \ + mac[0], mac[1], mac[2], \ + mac[3], mac[4], mac[5]); + wifi_set_mac_address(macstr); + wifi_off(); + vTaskDelay(20); + wifi_on(RTW_MODE_STA); + return ef_set_env_blob("rtlmac", mac, sizeof(wmac)); +#else return 0; // error +#endif } void WiFI_GetMacAddress(char* mac) { -#ifdef PLATFORM_RTL8720D +#if PLATFORM_RTL8720D || PLATFORM_RTL8710A //if((wmac[0] == 255 && wmac[1] == 255 && wmac[2] == 255 && wmac[3] == 255 && wmac[4] == 255 && wmac[5] == 255) // || (wmac[0] == 0 && wmac[1] == 0 && wmac[2] == 0 && wmac[3] == 0 && wmac[4] == 0 && wmac[5] == 0)) + if(!mac_init) { InitEasyFlashIfNeeded(); uint8_t fmac[6] = { 0 }; int readLen = ef_get_env_blob("rtlmac", &fmac, sizeof(fmac), NULL); if(readLen) { +#if PLATFORM_RTL8710A + char macstr[21]; + memset(macstr, 0, sizeof(macstr)); + sprintf(macstr, "%02x%02x%02x%02x%02x%02x", \ + fmac[0], fmac[1], fmac[2], \ + fmac[3], fmac[4], fmac[5]); + wifi_set_mac_address(macstr); + wifi_off(); + vTaskDelay(20); + wifi_on(RTW_MODE_STA); +#else wifi_change_mac_address_from_ram(0, fmac); +#endif memcpy(wmac, fmac, sizeof(fmac)); } + mac_init = true; } #endif memcpy(mac, (char*)wmac, sizeof(wmac)); @@ -109,6 +142,7 @@ void HAL_PrintNetworkInfo() 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()); diff --git a/src/hal/realtek/hal_wifi_realtek_new.c b/src/hal/realtek/hal_wifi_realtek_new.c new file mode 100644 index 000000000..369906fc4 --- /dev/null +++ b/src/hal/realtek/hal_wifi_realtek_new.c @@ -0,0 +1,306 @@ +#ifdef PLATFORM_REALTEK_NEW + +#include "../hal_wifi.h" +#include "../../new_cfg.h" +#include "../../new_common.h" +#include "../../logging/logging.h" +#include "../../new_pins.h" +#include +#include +#include +#include +#include +#include "wifi_api.h" +#include "wifi_fast_connect.h" + +extern struct netif xnetif[NET_IF_NUM]; +extern void InitEasyFlashIfNeeded(); +extern int wifi_do_fast_connect(void); + +typedef struct +{ + char ssid[32]; + char pwd[64]; + unsigned char bssid[6]; +} wifi_data_t; + +extern uint8_t wmac[6]; +extern bool g_powersave; +extern int (*p_wifi_do_fast_connect)(void); +extern int (*p_store_fast_connect_info)(unsigned int data1, unsigned int data2); + +bool g_STA_static_IP = 0; + +static void (*g_wifiStatusCallback)(int code) = NULL; +static int g_bOpenAccessPointMode = 0; +static wifi_data_t wdata = { 0 }; +static int g_bStaticIP = 0; +obkFastConnectData_t fcdata = { 0 }; +struct static_ip_config user_static_ip = { 0 }; + +const char* HAL_GetMyIPString() +{ + return ipaddr_ntoa(&xnetif[g_bOpenAccessPointMode].ip_addr); +} + +const char* HAL_GetMyGatewayString() +{ + return ipaddr_ntoa(&xnetif[g_bOpenAccessPointMode].gw); +} + +const char* HAL_GetMyDNSString() +{ + return ipaddr_ntoa(dns_getserver(0)); +} + +const char* HAL_GetMyMaskString() +{ + return ipaddr_ntoa(&xnetif[g_bOpenAccessPointMode].netmask); +} + +int WiFI_SetMacAddress(char* mac) +{ + return 0; +} + +void WiFI_GetMacAddress(char* mac) +{ + memcpy(mac, (char*)wmac, sizeof(wmac)); +} + +const char* HAL_GetMACStr(char* macstr) +{ + unsigned char mac[6]; + 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 : [%02X:%02X:%02X:%02X:%02X:%02X] %-7s |\r\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5], ""); + ADDLOG_DEBUG(LOG_FEATURE_GENERAL, "+--------------------------------------------+\r\n"); +} + +int HAL_GetWifiStrength() +{ + union rtw_phy_stats phy_stats; + wifi_get_phy_stats(STA_WLAN_INDEX, NULL, &phy_stats); + return -((uint8_t)(0xFF - phy_stats.sta.rssi + 1)); +} + +void HAL_WiFi_SetupStatusCallback(void (*cb)(int code)) +{ + g_wifiStatusCallback = cb; +} + +void obk_wifi_hdl_new(u8* buf, s32 buf_len, s32 flags, void* userdata) +{ + UNUSED(buf_len); + UNUSED(userdata); + u8 join_status = (u8)flags; + struct rtw_event_info_joinstatus_joinfail* fail_info = (struct rtw_event_info_joinstatus_joinfail*)buf; + struct rtw_event_info_joinstatus_disconn* disconn_info = (struct rtw_event_info_joinstatus_disconn*)buf; + + if(join_status == RTW_JOINSTATUS_SUCCESS) + { +#if LWIP_NETIF_HOSTNAME + netif_set_hostname(&xnetif[0], CFG_GetDeviceName()); +#endif + return; + } + + if(join_status == RTW_JOINSTATUS_FAIL) + { + switch(fail_info->fail_reason) + { + case -RTK_ERR_WIFI_CONN_INVALID_KEY: + case -RTK_ERR_WIFI_CONN_AUTH_PASSWORD_WRONG: + case -RTK_ERR_WIFI_CONN_4WAY_PASSWORD_WRONG: + case -RTK_ERR_WIFI_CONN_AUTH_FAIL: + if(g_wifiStatusCallback != NULL) + { + g_wifiStatusCallback(WIFI_STA_AUTH_FAILED); + } + break; + case -RTK_ERR_WIFI_CONN_SCAN_FAIL: + case -RTK_ERR_WIFI_CONN_ASSOC_FAIL: + case -RTK_ERR_WIFI_CONN_4WAY_HANDSHAKE_FAIL: + default: + if(g_wifiStatusCallback != NULL) + { + g_wifiStatusCallback(WIFI_STA_DISCONNECTED); + } + break; + } + return; + } + + if(join_status == RTW_JOINSTATUS_DISCONNECT) + { + if(g_wifiStatusCallback != NULL) + { + g_wifiStatusCallback(WIFI_STA_DISCONNECTED); + } + } +} + +void ConnectToWiFiTask(void* args) +{ + struct rtw_network_info connect_param = { 0 }; + + memcpy(connect_param.ssid.val, wdata.ssid, strlen(wdata.ssid)); + connect_param.ssid.len = strlen(wdata.ssid); + connect_param.password = (unsigned char*)wdata.pwd; + connect_param.password_len = strlen(wdata.pwd); + + if(g_wifiStatusCallback != NULL) + { + g_wifiStatusCallback(WIFI_STA_CONNECTING); + } + wifi_connect(&connect_param, 1); + if(!g_bStaticIP) LwIP_DHCP(0, DHCP_START); + if(g_wifiStatusCallback != NULL) + { + g_wifiStatusCallback(WIFI_STA_CONNECTED); + } + vTaskDelete(NULL); +} + +void ConfigureSTA(obkStaticIP_t* ip) +{ + struct ip_addr ipaddr; + struct ip_addr netmask; + struct ip_addr gw; + struct ip_addr dnsserver; + + wifi_set_autoreconnect(0); + wifi_reg_event_handler(RTW_EVENT_JOIN_STATUS, obk_wifi_hdl_new, NULL); + + if(ip->localIPAddr[0] == 0) + { + g_bStaticIP = 0; + } + else + { + g_bStaticIP = 1; + + IP4_ADDR(ip_2_ip4(&ipaddr), ip->localIPAddr[0], ip->localIPAddr[1], ip->localIPAddr[2], ip->localIPAddr[3]); + IP4_ADDR(ip_2_ip4(&netmask), ip->netMask[0], ip->netMask[1], ip->netMask[2], ip->netMask[3]); + IP4_ADDR(ip_2_ip4(&gw), ip->gatewayIPAddr[0], ip->gatewayIPAddr[1], ip->gatewayIPAddr[2], ip->gatewayIPAddr[3]); + IP4_ADDR(ip_2_ip4(&dnsserver), ip->dnsServerIpAddr[0], ip->dnsServerIpAddr[1], ip->dnsServerIpAddr[2], ip->dnsServerIpAddr[3]); + netif_set_addr(&xnetif[STA_WLAN_INDEX], ip_2_ip4(&ipaddr), ip_2_ip4(&netmask), ip_2_ip4(&gw)); + dns_setserver(0, &dnsserver); + } +} + +void HAL_ConnectToWiFi(const char* oob_ssid, const char* connect_key, obkStaticIP_t* ip) +{ + g_bOpenAccessPointMode = 0; + strcpy((char*)&wdata.ssid, oob_ssid); + strncpy((char*)&wdata.pwd, connect_key, 64); + + ConfigureSTA(ip); + + xTaskCreate( + (TaskFunction_t)ConnectToWiFiTask, + "WC", + 4096 / sizeof(StackType_t), + NULL, + 9, + NULL); +} + +void HAL_DisconnectFromWifi() +{ + wifi_disconnect(); +} + +int HAL_SetupWiFiOpenAccessPoint(const char* ssid) +{ + g_bOpenAccessPointMode = 1; + rtw_mode_t mode = RTW_MODE_STA_AP; + struct ip_addr ipaddr; + struct ip_addr netmask; + struct ip_addr gw; + struct netif* pnetif = &xnetif[SOFTAP_WLAN_INDEX]; + dhcps_deinit(); + wifi_stop_ap(); + struct rtw_softap_info connect_param = { 0 }; + memcpy(connect_param.ssid.val, ssid, strlen(ssid)); + connect_param.ssid.len = strlen(ssid); + connect_param.security_type = RTW_SECURITY_OPEN; + connect_param.channel = 1; + + if(wifi_start_ap(&connect_param) < 0) + { + ADDLOG_ERROR(LOG_FEATURE_GENERAL, "Failed to start AP"); + return 0; + } + IP4_ADDR(ip_2_ip4(&ipaddr), 192, 168, 4, 1); + IP4_ADDR(ip_2_ip4(&netmask), 255, 255, 255, 0); + IP4_ADDR(ip_2_ip4(&gw), 192, 168, 4, 1); + netifapi_netif_set_addr(pnetif, ip_2_ip4(&ipaddr), ip_2_ip4(&netmask), ip_2_ip4(&gw)); + + dhcps_init(pnetif); + return 0; +} + +void FastConnectToWiFiTask(void* args) +{ + struct wlan_fast_reconnect* data = (struct wlan_fast_reconnect*)malloc(sizeof(struct wlan_fast_reconnect)); + struct wlan_fast_reconnect* empty_data = (struct wlan_fast_reconnect*)malloc(sizeof(struct wlan_fast_reconnect)); + memset(data, 0xff, sizeof(struct wlan_fast_reconnect)); + memset(empty_data, 0xff, sizeof(struct wlan_fast_reconnect)); + int ret = rt_kv_get("wlan_data", (uint8_t*)data, sizeof(struct wlan_fast_reconnect)); + if(ret < 0 || memcmp(empty_data, data, sizeof(struct wlan_fast_reconnect)) == 0) + { + ConnectToWiFiTask(args); + goto exit; + } + if(g_wifiStatusCallback != NULL) + { + g_wifiStatusCallback(WIFI_STA_CONNECTING); + } + wifi_do_fast_connect(); + if(g_wifiStatusCallback != NULL) + { + g_wifiStatusCallback(WIFI_STA_CONNECTED); + } +exit: + free(data); + free(empty_data); + vTaskDelete(NULL); +} + +void HAL_FastConnectToWiFi(const char* oob_ssid, const char* connect_key, obkStaticIP_t* ip) +{ + g_bOpenAccessPointMode = 0; + strcpy((char*)&wdata.ssid, oob_ssid); + strncpy((char*)&wdata.pwd, connect_key, 64); + + ConfigureSTA(ip); + + xTaskCreate( + (TaskFunction_t)FastConnectToWiFiTask, + "WFC", + 4096 / sizeof(StackType_t), + NULL, + 9, + NULL); +} + +void HAL_DisableEnhancedFastConnect() +{ + rt_kv_delete("wlan_data"); +} + +#endif // PLATFORM_REALTEK_NEW diff --git a/src/hal/realtek/rtl8710a/hal_pins_rtl8710a.c b/src/hal/realtek/rtl8710a/hal_pins_rtl8710a.c index 26a38e4cd..ce4289ab3 100644 --- a/src/hal/realtek/rtl8710a/hal_pins_rtl8710a.c +++ b/src/hal/realtek/rtl8710a/hal_pins_rtl8710a.c @@ -1,6 +1,6 @@ #ifdef PLATFORM_RTL8710A -#include "../hal_generic_realtek.h" +#include "../hal_pinmap_realtek.h" // commented out pins are those not wired out on RTL8711AM rtlPinMapping_t g_pins[] = { diff --git a/src/hal/realtek/rtl8710b/hal_pins_rtl8710b.c b/src/hal/realtek/rtl8710b/hal_pins_rtl8710b.c index 05fbb336a..cc9abfab4 100644 --- a/src/hal/realtek/rtl8710b/hal_pins_rtl8710b.c +++ b/src/hal/realtek/rtl8710b/hal_pins_rtl8710b.c @@ -1,6 +1,6 @@ #ifdef PLATFORM_RTL8710B -#include "../hal_generic_realtek.h" +#include "../hal_pinmap_realtek.h" rtlPinMapping_t g_pins[] = { { "PA0", PA_0, NULL, NULL }, diff --git a/src/hal/realtek/rtl8720d/hal_pins_rtl8720d.c b/src/hal/realtek/rtl8720d/hal_pins_rtl8720d.c index 053ce89f1..0ecf2d9cc 100644 --- a/src/hal/realtek/rtl8720d/hal_pins_rtl8720d.c +++ b/src/hal/realtek/rtl8720d/hal_pins_rtl8720d.c @@ -1,72 +1,72 @@ #ifdef PLATFORM_RTL8720D -#include "../hal_generic_realtek.h" +#include "../hal_pinmap_realtek.h" rtlPinMapping_t g_pins[] = { - { "PA0", PA_0, NULL, NULL }, - { "PA1", PA_1, NULL, NULL }, - { "PA2", PA_2, NULL, NULL }, - { "PA3", PA_3, NULL, NULL }, - { "PA4", PA_4, NULL, NULL }, - { "PA5", PA_5, NULL, NULL }, - { "PA6", PA_6, NULL, NULL }, - { "PA7 (LOG_TX)", PA_7, NULL, NULL }, - { "PA8 (LOG_RX)", PA_8, NULL, NULL }, - { "PA9", PA_9, NULL, NULL }, - { "PA10", PA_10, NULL, NULL }, - { "PA11", PA_11, NULL, NULL }, - { "PA12 (TX1)", PA_12, NULL, NULL }, - { "PA13 (RX1)", PA_13, NULL, NULL }, - { "PA14", PA_14, NULL, NULL }, - { "PA15", PA_15, NULL, NULL }, - { "PA16 (RTS0)", PA_16, NULL, NULL }, - { "PA17 (CTS0)", PA_17, NULL, NULL }, - { "PA18 (TX0)", PA_18, NULL, NULL }, - { "PA19 (RX0)", PA_19, NULL, NULL }, - { "PA20", PA_20, NULL, NULL }, - { "PA21", PA_21, NULL, NULL }, - { "PA22", PA_22, NULL, NULL }, - { "PA23 (RTS1)", PA_23, NULL, NULL }, - { "PA24 (RTS1)", PA_24, NULL, NULL }, - { "PA25", PA_25, NULL, NULL }, - { "PA26", PA_26, NULL, NULL }, - { "PA27", PA_27, NULL, NULL }, - { "PA28", PA_28, NULL, NULL }, - { "PA29", PA_29, NULL, NULL }, - { "PA30", PA_30, NULL, NULL }, - { "PA31", PA_31, NULL, NULL }, - { "PB0", PB_0, NULL, NULL }, - { "PB1", PB_1, NULL, NULL }, - { "PB2", PB_2, NULL, NULL }, - { "PB3", PB_3, NULL, NULL }, - { "PB4", PB_4, NULL, NULL }, - { "PB5", PB_5, NULL, NULL }, - { "PB6", PB_6, NULL, NULL }, - { "PB7", PB_7, NULL, NULL }, - { "PB8", PB_8, NULL, NULL }, - { "PB9", PB_9, NULL, NULL }, - { "PB10", PB_10, NULL, NULL }, - { "PB11", PB_11, NULL, NULL }, - { "PB12", PB_12, NULL, NULL }, - { "PB13", PB_13, NULL, NULL }, - { "PB14", PB_14, NULL, NULL }, - { "PB15", PB_15, NULL, NULL }, - { "PB16", PB_16, NULL, NULL }, - { "PB17", PB_17, NULL, NULL }, - { "PB18", PB_18, NULL, NULL }, - { "PB19", PB_19, NULL, NULL }, - { "PB20", PB_20, NULL, NULL }, - { "PB21", PB_21, NULL, NULL }, - { "PB22", PB_22, NULL, NULL }, - { "PB23", PB_23, NULL, NULL }, - { "PB24", PB_24, NULL, NULL }, - { "PB25", PB_25, NULL, NULL }, - { "PB26", PB_26, NULL, NULL }, - { "PB27", PB_27, NULL, NULL }, - { "PB28", PB_28, NULL, NULL }, - { "PB29", PB_29, NULL, NULL }, - { "PB30", PB_30, NULL, NULL }, - { "PB31", PB_31, NULL, NULL }, + { "PA0", PA_0, NULL, NULL, NULL }, + { "PA1", PA_1, NULL, NULL, NULL }, + { "PA2", PA_2, NULL, NULL, NULL }, + { "PA3", PA_3, NULL, NULL, NULL }, + { "PA4", PA_4, NULL, NULL, NULL }, + { "PA5", PA_5, NULL, NULL, NULL }, + { "PA6", PA_6, NULL, NULL, NULL }, + { "PA7 (LOG_TX)", PA_7, NULL, NULL, NULL }, + { "PA8 (LOG_RX)", PA_8, NULL, NULL, NULL }, + { "PA9", PA_9, NULL, NULL, NULL }, + { "PA10", PA_10, NULL, NULL, NULL }, + { "PA11", PA_11, NULL, NULL, NULL }, + { "PA12 (TX1)", PA_12, NULL, NULL, NULL }, + { "PA13 (RX1)", PA_13, NULL, NULL, NULL }, + { "PA14", PA_14, NULL, NULL, NULL }, + { "PA15", PA_15, NULL, NULL, NULL }, + { "PA16 (RTS0)", PA_16, NULL, NULL, NULL }, + { "PA17 (CTS0)", PA_17, NULL, NULL, NULL }, + { "PA18 (TX0)", PA_18, NULL, NULL, NULL }, + { "PA19 (RX0)", PA_19, NULL, NULL, NULL }, + { "PA20", PA_20, NULL, NULL, NULL }, + { "PA21", PA_21, NULL, NULL, NULL }, + { "PA22", PA_22, NULL, NULL, NULL }, + { "PA23 (RTS1)", PA_23, NULL, NULL, NULL }, + { "PA24 (RTS1)", PA_24, NULL, NULL, NULL }, + { "PA25", PA_25, NULL, NULL, NULL }, + { "PA26", PA_26, NULL, NULL, NULL }, + { "PA27", PA_27, NULL, NULL, NULL }, + { "PA28", PA_28, NULL, NULL, NULL }, + { "PA29", PA_29, NULL, NULL, NULL }, + { "PA30", PA_30, NULL, NULL, NULL }, + { "PA31", PA_31, NULL, NULL, NULL }, + { "PB0", PB_0, NULL, NULL, NULL }, + { "PB1", PB_1, NULL, NULL, NULL }, + { "PB2", PB_2, NULL, NULL, NULL }, + { "PB3", PB_3, NULL, NULL, NULL }, + { "PB4", PB_4, NULL, NULL, NULL }, + { "PB5", PB_5, NULL, NULL, NULL }, + { "PB6", PB_6, NULL, NULL, NULL }, + { "PB7", PB_7, NULL, NULL, NULL }, + { "PB8", PB_8, NULL, NULL, NULL }, + { "PB9", PB_9, NULL, NULL, NULL }, + { "PB10", PB_10, NULL, NULL, NULL }, + { "PB11", PB_11, NULL, NULL, NULL }, + { "PB12", PB_12, NULL, NULL, NULL }, + { "PB13", PB_13, NULL, NULL, NULL }, + { "PB14", PB_14, NULL, NULL, NULL }, + { "PB15", PB_15, NULL, NULL, NULL }, + { "PB16", PB_16, NULL, NULL, NULL }, + { "PB17", PB_17, NULL, NULL, NULL }, + { "PB18", PB_18, NULL, NULL, NULL }, + { "PB19", PB_19, NULL, NULL, NULL }, + { "PB20", PB_20, NULL, NULL, NULL }, + { "PB21", PB_21, NULL, NULL, NULL }, + { "PB22", PB_22, NULL, NULL, NULL }, + { "PB23", PB_23, NULL, NULL, NULL }, + { "PB24", PB_24, NULL, NULL, NULL }, + { "PB25", PB_25, NULL, NULL, NULL }, + { "PB26", PB_26, NULL, NULL, NULL }, + { "PB27", PB_27, NULL, NULL, NULL }, + { "PB28", PB_28, NULL, NULL, NULL }, + { "PB29", PB_29, NULL, NULL, NULL }, + { "PB30", PB_30, NULL, NULL, NULL }, + { "PB31", PB_31, NULL, NULL, NULL }, }; int g_numPins = sizeof(g_pins) / sizeof(g_pins[0]); diff --git a/src/hal/realtek/rtl8720e/hal_pins_rtl8720e.c b/src/hal/realtek/rtl8720e/hal_pins_rtl8720e.c new file mode 100644 index 000000000..d3432d0da --- /dev/null +++ b/src/hal/realtek/rtl8720e/hal_pins_rtl8720e.c @@ -0,0 +1,69 @@ +#ifdef PLATFORM_RTL8720E + +#include "../hal_pinmap_realtek.h" + +rtlPinMapping_t g_pins[] = { + { "PA0", PA_0, NULL, NULL }, + { "PA1", PA_1, NULL, NULL }, + { "PA2", PA_2, NULL, NULL }, + { "PA3", PA_3, NULL, NULL }, + { "PA4", PA_4, NULL, NULL }, + { "PA5", PA_5, NULL, NULL }, + { "PA6", PA_6, NULL, NULL }, + { "PA7", PA_7, NULL, NULL }, + { "PA8", PA_8, NULL, NULL }, + { "PA9", PA_9, NULL, NULL }, + { "PA10", PA_10, NULL, NULL }, + { "PA11", PA_11, NULL, NULL }, + { "PA12", PA_12, NULL, NULL }, + { "PA13", PA_13, NULL, NULL }, + { "PA14", PA_14, NULL, NULL }, + { "PA15", PA_15, NULL, NULL }, + { "PA16", PA_16, NULL, NULL }, + { "PA17", PA_17, NULL, NULL }, + { "PA18", PA_18, NULL, NULL }, + { "PA19 (LOG_RX)", PA_19, NULL, NULL }, + { "PA20 (LOG_TX)", PA_20, NULL, NULL }, + { "PA21", PA_21, NULL, NULL }, + { "PA22", PA_22, NULL, NULL }, + { "PA23", PA_23, NULL, NULL }, + { "PA24", PA_24, NULL, NULL }, + { "PA25", PA_25, NULL, NULL }, + { "PA26", PA_26, NULL, NULL }, + { "PA27", PA_27, NULL, NULL }, + { "PA28", PA_28, NULL, NULL }, + { "PA29", PA_29, NULL, NULL }, + { "PA30", PA_30, NULL, NULL }, + { "PA31", PA_31, NULL, NULL }, + { "PB0", PB_0, NULL, NULL }, + { "PB1", PB_1, NULL, NULL }, + { "PB2", PB_2, NULL, NULL }, + { "PB3", PB_3, NULL, NULL }, + { "PB4", PB_4, NULL, NULL }, + { "PB5", PB_5, NULL, NULL }, + { "PB6", PB_6, NULL, NULL }, + { "PB7", PB_7, NULL, NULL }, + { "PB8", PB_8, NULL, NULL }, + { "PB9", PB_9, NULL, NULL }, + { "PB10", PB_10, NULL, NULL }, + { "PB11", PB_11, NULL, NULL }, + { "PB12", PB_12, NULL, NULL }, + { "PB13", PB_13, NULL, NULL }, + { "PB14", PB_14, NULL, NULL }, + { "PB15", PB_15, NULL, NULL }, + { "PB16", PB_16, NULL, NULL }, + { "PB17", PB_17, NULL, NULL }, + { "PB18", PB_18, NULL, NULL }, + { "PB19", PB_19, NULL, NULL }, +}; + +int g_numPins = sizeof(g_pins) / sizeof(g_pins[0]); + +int HAL_PIN_CanThisPinBePWM(int index) +{ + if(index >= g_numPins) + return 0; + return 1; +} + +#endif // PLATFORM_RTL8720E diff --git a/src/hal/realtek/rtl8721da/hal_main_rtl8721da.c b/src/hal/realtek/rtl8721da/hal_main_rtl8721da.c new file mode 100644 index 000000000..9c7832eed --- /dev/null +++ b/src/hal/realtek/rtl8721da/hal_main_rtl8721da.c @@ -0,0 +1,79 @@ +#if PLATFORM_RTL8721DA || PLATFORM_RTL8720E + +#include "../../../new_common.h" +#include "wifi_api_types.h" +#include "wifi_api_ext.h" +#include "flash_api.h" +#include "ameba_ota.h" +#include "ameba_soc.h" +#include "os_wrapper.h" + +TaskHandle_t g_sys_task_handle1; +uint32_t current_fw_idx = 0; +uint8_t wmac[6] = { 0 }; +uint8_t flash_size_8720; +unsigned char ap_ip[4] = { 192, 168, 4, 1 }, ap_netmask[4] = { 255, 255, 255, 0 }, ap_gw[4] = { 192, 168, 4, 1 }; +extern void wifi_fast_connect_enable(unsigned char enable); +extern int (*p_wifi_do_fast_connect)(void); +__attribute__((weak)) flash_t flash; + +#if PLATFORM_RTL8720E + +extern float g_wifi_temperature; +void temp_func(void* pvParameters) +{ + RCC_PeriphClockCmd(APBPeriph_ATIM, APBPeriph_ATIM_CLOCK, ENABLE); + TM_Cmd(ENABLE); + TM_InitTypeDef TM_InitStruct; + TM_StructInit(&TM_InitStruct); + TM_Init(&TM_InitStruct); + for(;;) + { + g_wifi_temperature = TM_GetCdegree(TM_GetTempResult()); + vTaskDelay(10000 / portTICK_PERIOD_MS); + } +} + +#endif + +void sys_task1(void* pvParameters) +{ + if(p_wifi_do_fast_connect) p_wifi_do_fast_connect = NULL; + wifi_get_mac_address(0, (struct rtw_mac*)&wmac, 1); + vTaskDelay(50 / portTICK_PERIOD_MS); + Main_Init(); + for(;;) + { + vTaskDelay(1000 / portTICK_PERIOD_MS); + Main_OnEverySecond(); + } +} + +void app_pre_example(void) +{ + u8 flash_ID[4]; + FLASH_RxCmd(flash_init_para.FLASH_cmd_rd_id, 3, flash_ID); + flash_size_8720 = (1 << (flash_ID[2] - 0x11)) / 8; + current_fw_idx = ota_get_cur_index(1); + xTaskCreate( + sys_task1, + "OpenBeken", + 8 * 256, + NULL, + 3, + &g_sys_task_handle1); + +#if PLATFORM_RTL8720E + + xTaskCreate( + temp_func, + "TempFunc", + 1024, + NULL, + 13, + NULL); + +#endif +} + +#endif // PLATFORM_RTL8721DA diff --git a/src/hal/realtek/rtl8721da/hal_pins_rtl8721da.c b/src/hal/realtek/rtl8721da/hal_pins_rtl8721da.c new file mode 100644 index 000000000..7e74dd00e --- /dev/null +++ b/src/hal/realtek/rtl8721da/hal_pins_rtl8721da.c @@ -0,0 +1,81 @@ +#ifdef PLATFORM_RTL8721DA + +#include "../hal_pinmap_realtek.h" + +rtlPinMapping_t g_pins[] = { + { "PA0", PA_0, NULL, NULL }, + { "PA1", PA_1, NULL, NULL }, + { "PA2", PA_2, NULL, NULL }, + { "PA3", PA_3, NULL, NULL }, + { "PA4", PA_4, NULL, NULL }, + { "PA5", PA_5, NULL, NULL }, + { "PA6", PA_6, NULL, NULL }, + { "PA7", PA_7, NULL, NULL }, + { "PA8", PA_8, NULL, NULL }, + { "PA9", PA_9, NULL, NULL }, + { "PA10", PA_10, NULL, NULL }, + { "PA11", PA_11, NULL, NULL }, + { "PA12", PA_12, NULL, NULL }, + { "PA13", PA_13, NULL, NULL }, + { "PA14", PA_14, NULL, NULL }, + { "PA15", PA_15, NULL, NULL }, + { "PA16", PA_16, NULL, NULL }, + { "PA17", PA_17, NULL, NULL }, + { "PA18", PA_18, NULL, NULL }, + { "PA19", PA_19, NULL, NULL }, + { "PA20", PA_20, NULL, NULL }, + { "PA21", PA_21, NULL, NULL }, + { "PA22", PA_22, NULL, NULL }, + { "PA23", PA_23, NULL, NULL }, + { "PA24", PA_24, NULL, NULL }, + { "PA25", PA_25, NULL, NULL }, + { "PA26", PA_26, NULL, NULL }, + { "PA27", PA_27, NULL, NULL }, + { "PA28", PA_28, NULL, NULL }, + { "PA29", PA_29, NULL, NULL }, + { "PA30", PA_30, NULL, NULL }, + { "PA31", PA_31, NULL, NULL }, + { "PB0", PB_0, NULL, NULL }, + { "PB1", PB_1, NULL, NULL }, + { "PB2", PB_2, NULL, NULL }, + { "PB3", PB_3, NULL, NULL }, + { "PB4 (LOG_RX)", PB_4, NULL, NULL }, + { "PB5 (LOG_TX)", PB_5, NULL, NULL }, + { "PB6", PB_6, NULL, NULL }, + { "PB7", PB_7, NULL, NULL }, + { "PB8", PB_8, NULL, NULL }, + { "PB9", PB_9, NULL, NULL }, + { "PB10", PB_10, NULL, NULL }, + { "PB11", PB_11, NULL, NULL }, + { "PB12", PB_12, NULL, NULL }, + { "PB13", PB_13, NULL, NULL }, + { "PB14", PB_14, NULL, NULL }, + { "PB15", PB_15, NULL, NULL }, + { "PB16", PB_16, NULL, NULL }, + { "PB17", PB_17, NULL, NULL }, + { "PB18", PB_18, NULL, NULL }, + { "PB19", PB_19, NULL, NULL }, + { "PB20", PB_20, NULL, NULL }, + { "PB21", PB_21, NULL, NULL }, + { "PB22", PB_22, NULL, NULL }, + { "PB23", PB_23, NULL, NULL }, + { "PB24", PB_24, NULL, NULL }, + { "PB25", PB_25, NULL, NULL }, + { "PB26", PB_26, NULL, NULL }, + { "PB27", PB_27, NULL, NULL }, + { "PB28", PB_28, NULL, NULL }, + { "PB29", PB_29, NULL, NULL }, + { "PB30", PB_30, NULL, NULL }, + { "PB31", PB_31, NULL, NULL }, +}; + +int g_numPins = sizeof(g_pins) / sizeof(g_pins[0]); + +int HAL_PIN_CanThisPinBePWM(int index) +{ + if(index >= g_numPins) + return 0; + return 1; +} + +#endif // PLATFORM_RTL8721DA diff --git a/src/hal/realtek/rtl8721da/hal_uart_rtl8721da.c b/src/hal/realtek/rtl8721da/hal_uart_rtl8721da.c new file mode 100644 index 000000000..e4967565f --- /dev/null +++ b/src/hal/realtek/rtl8721da/hal_uart_rtl8721da.c @@ -0,0 +1,74 @@ +#if PLATFORM_RTL8721DA || PLATFORM_RTL8720E + +#include "../../../new_pins.h" +#include "../../../new_cfg.h" +#include "../../hal_uart.h" +#include "serial_api.h" +#include "os_wrapper.h" +#if PLATFORM_RTL8721DA +// default example pins +#define UART0_TX PA_26 +#define UART0_RX PA_27 +#define UART0_RTS PA_28 +#define UART0_CTS PA_29 +// UART0 on WR11-U and WR11-2S +#define UART1_TX PB_20 +#define UART1_RX PB_21 +#elif PLATFORM_RTL8720E +// default example pins +#define UART0_TX PA_28 +#define UART0_RX PA_29 +#define UART0_RTS PA_30 +#define UART0_CTS PA_31 +#define UART1_TX UART0_TX +#define UART1_RX UART0_RX +#endif + +serial_t sobj; +static bool isInitialized; + +static void uart_cb(uint32_t id, SerialIrq event) +{ + if(event != RxIrq) + return; + + serial_t* obj = (void*)id; + while(serial_readable(obj)) + { + 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) +{ + if(isInitialized) + { + serial_free(&sobj); + } + PinName tx = UART0_TX, rx = UART0_RX, rts = UART0_RTS, cts = UART0_CTS; + 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 && !CFG_HasFlag(OBK_FLAG_USE_SECONDARY_UART)) + { + serial_set_flow_control(&sobj, FlowControlRTSCTS, rts, cts); + } + isInitialized = true; + return 1; +} + +#endif diff --git a/src/hal/realtek/rtl87x0c/hal_pins_rtl87x0c.c b/src/hal/realtek/rtl87x0c/hal_pins_rtl87x0c.c index 61cacc806..80149b36c 100644 --- a/src/hal/realtek/rtl87x0c/hal_pins_rtl87x0c.c +++ b/src/hal/realtek/rtl87x0c/hal_pins_rtl87x0c.c @@ -1,6 +1,6 @@ #ifdef PLATFORM_RTL87X0C -#include "../hal_generic_realtek.h" +#include "../hal_pinmap_realtek.h" rtlPinMapping_t g_pins[] = { { "PA0 (RX1)", PA_0, NULL, NULL }, @@ -33,7 +33,7 @@ int g_numPins = sizeof(g_pins) / sizeof(g_pins[0]); int HAL_PIN_CanThisPinBePWM(int index) { - if(index > 6 && index < 11) return 0; + if(index > 6 && index < 11) return -1; return 1; } diff --git a/src/httpserver/http_fns.c b/src/httpserver/http_fns.c index 079d06a16..c34bdefb9 100644 --- a/src/httpserver/http_fns.c +++ b/src/httpserver/http_fns.c @@ -43,7 +43,7 @@ #include "temp_detect_pub.h" #elif defined(PLATFORM_LN882H) #elif defined(PLATFORM_TR6260) -#elif defined(PLATFORM_REALTEK) +#elif defined(PLATFORM_REALTEK) && !PLATFORM_REALTEK_NEW #include "wifi_structures.h" #include "wifi_constants.h" #include "wifi_conf.h" @@ -53,6 +53,11 @@ extern hal_reset_reason_t reset_reason; #endif SemaphoreHandle_t scan_hdl; +#elif PLATFORM_REALTEK_NEW +#include "lwip_netconf.h" +#include "ameba_soc.h" +#include "ameba_ota.h" +extern uint32_t current_fw_idx; #elif defined(PLATFORM_ESPIDF) || PLATFORM_ESP8266 #include "esp_wifi.h" #include "esp_system.h" @@ -948,7 +953,7 @@ typedef enum { } hprintf255(request, "
Reboot reason: %i - %s
", reset_reason, s); hprintf255(request, "
Current fw: FW%i
", current_fw_idx); -#elif PLATFORM_RTL8710B || PLATFORM_RTL8720D +#elif PLATFORM_RTL8710B || PLATFORM_RTL8720D || PLATFORM_REALTEK_NEW hprintf255(request, "
Current fw: FW%i
", current_fw_idx + 1); #elif PLATFORM_ECR6600 RST_TYPE reset_type = hal_get_reset_type(); @@ -1433,7 +1438,7 @@ int http_fn_cfg_wifi(http_request_t* request) { { hprintf255(request, "[%i/%u] SSID: %s, Channel: %i, Signal %i
", i + 1, number, ap_info[i].ssid, ap_info[i].primary, ap_info[i].rssi); } -#elif defined(PLATFORM_REALTEK) +#elif defined(PLATFORM_REALTEK) && !PLATFORM_REALTEK_NEW #ifndef PLATFORM_RTL87X0C extern void rltk_wlan_enable_scan_with_ssid_by_extended_security(bool); #endif @@ -3201,15 +3206,8 @@ int http_fn_cfg_dgr(http_request_t* request) { #endif void OTA_RequestDownloadFromHTTP(const char* s) { -#if WINDOWS - -#elif PLATFORM_BL602 - -#elif PLATFORM_LN882H - -#elif PLATFORM_ESPIDF || PLATFORM_ESP8266 -#elif PLATFORM_TR6260 -#elif PLATFORM_REALTEK +#if PLATFORM_BEKEN + otarequest(s); #elif PLATFORM_ECR6600 extern int http_client_download_file(const char* url); extern int ota_done(bool reset); @@ -3248,8 +3246,33 @@ void OTA_RequestDownloadFromHTTP(const char* s) { } ota_reboot(); -#else - otarequest(s); +#elif PLATFORM_REALTEK_NEW + ota_context* ctx = NULL; + ctx = (ota_context*)malloc(sizeof(ota_context)); + if(ctx == NULL) goto exit; + memset(ctx, 0, sizeof(ota_context)); + char url[256] = { 0 }; + char resource[256] = { 0 }; + uint16_t port; + parser_url(s, &url, &port, &resource, 256); + int ret = ota_update_init(ctx, &url, port, &resource, OTA_HTTP); + if(ret != 0) + { + addLogAdv(LOG_ERROR, LOG_FEATURE_HTTP, "ota_update_init failed"); + goto exit; + } + ret = ota_update_start(ctx); + if(!ret) + { + addLogAdv(LOG_INFO, LOG_FEATURE_HTTP, "OTA finished"); + sys_clear_ota_signature(); + delay_ms(50); + sys_reset(); + } +exit: + ota_update_deinit(ctx); + addLogAdv(LOG_ERROR, LOG_FEATURE_HTTP, "OTA failed"); + if(ctx) free(ctx); #endif } int http_fn_ota_exec(http_request_t* request) { diff --git a/src/httpserver/rest_interface.c b/src/httpserver/rest_interface.c index 73662a7ef..faef89f23 100644 --- a/src/httpserver/rest_interface.c +++ b/src/httpserver/rest_interface.c @@ -103,6 +103,15 @@ extern uint8_t flash_size_8720; #undef DEFAULT_FLASH_LEN #define DEFAULT_FLASH_LEN (flash_size_8720 << 20) +#elif PLATFORM_REALTEK_NEW + +#include "ameba_ota.h" +extern uint32_t current_fw_idx; +extern uint32_t IMG_ADDR[OTA_IMGID_MAX][2]; +extern uint8_t flash_size_8720; +#undef DEFAULT_FLASH_LEN +#define DEFAULT_FLASH_LEN (flash_size_8720 << 20) + #endif #elif PLATFORM_ECR6600 @@ -319,7 +328,7 @@ static int http_rest_post(http_request_t* request) { return http_rest_post_flash(request, -1, -1); #elif PLATFORM_ESPIDF || PLATFORM_ESP8266 return http_rest_post_flash(request, -1, -1); -#elif PLATFORM_REALTEK +#elif PLATFORM_REALTEK && !PLATFORM_RTL8720E return http_rest_post_flash(request, 0, -1); #elif PLATFORM_ECR6600 || PLATFORM_TR6260 return http_rest_post_flash(request, -1, -1); @@ -327,7 +336,7 @@ static int http_rest_post(http_request_t* request) { return http_rest_post_flash(request, 0, -1); #else // TODO - ADDLOG_DEBUG(LOG_FEATURE_API, "No OTA"); + ADDLOG_ERROR(LOG_FEATURE_API, "No OTA"); #endif } if (!strncmp(request->url, "api/flash/", 10)) { @@ -3255,6 +3264,128 @@ update_ota_exit: ADDLOG_ERROR(LOG_FEATURE_OTA, "OTA failed."); return http_rest_error(request, ret, "error"); } +#elif PLATFORM_REALTEK_NEW + + // Bad implementation. While it somewhat works, it is not recommended to use. HTTP OTA is preferable. + 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; + } + + flash_get_layout_info(IMG_BOOT, &IMG_ADDR[OTA_IMGID_BOOT][OTA_INDEX_1], NULL); + flash_get_layout_info(IMG_BOOT_OTA2, &IMG_ADDR[OTA_IMGID_BOOT][OTA_INDEX_2], NULL); + flash_get_layout_info(IMG_APP_OTA1, &IMG_ADDR[OTA_IMGID_APP][OTA_INDEX_1], NULL); + flash_get_layout_info(IMG_APP_OTA2, &IMG_ADDR[OTA_IMGID_APP][OTA_INDEX_2], NULL); + + ota_context ctx; + memset(&ctx, 0, sizeof(ota_context)); + ctx.otactrl = malloc(sizeof(update_ota_ctrl_info)); + memset(ctx.otactrl, 0, sizeof(update_ota_ctrl_info)); + + ctx.otaTargetHdr = malloc(sizeof(update_ota_target_hdr)); + memset(ctx.otaTargetHdr, 0, sizeof(update_ota_target_hdr)); + writebuf = request->received; + if(!writelen) writelen = recv(request->fd, writebuf, request->receivedLenmax, 0); + // for some reason we receive data along with HTTP header. Skip it. + int skip = 0; + for(; skip < writelen - 5; skip++) + { + if(*(uint32_t*)&writebuf[skip] == 0xFFFFFFFF && writebuf[skip + 4] == 0x01) break; + } + writebuf += skip; + writelen -= skip; + towrite -= skip; + update_file_hdr* pOtaFileHdr = (update_file_hdr*)(writebuf); + ctx.otaTargetHdr->FileHdr.FwVer = pOtaFileHdr->FwVer; + ctx.otaTargetHdr->FileHdr.HdrNum = pOtaFileHdr->HdrNum; + + uint32_t RevHdrLen = pOtaFileHdr->HdrNum * SUB_HEADER_LEN + HEADER_LEN; + if(writelen < RevHdrLen) + { + ADDLOG_ERROR(LOG_FEATURE_OTA, "failed to recv file header"); + ret = -1; + goto update_ota_exit; + } + + if(!get_ota_tartget_header(&ctx, writebuf, RevHdrLen)) + { + ADDLOG_ERROR(LOG_FEATURE_OTA, "Get OTA header failed"); + ret = -1; + goto update_ota_exit; + } + if(!ota_checkimage_layout(ctx.otaTargetHdr)) + { + ADDLOG_ERROR(LOG_FEATURE_OTA, "ota_checkimage_layout failed"); + ret = -1; + goto update_ota_exit; + } + ctx.otactrl->IsGetOTAHdr = 1; + writebuf += RevHdrLen; + // magic values to make it somewhat work. + writelen -= RevHdrLen + 5 - 384; + towrite -= RevHdrLen + 5 - 384; + ctx.otactrl->NextImgLen = towrite; + do + { + int size = download_packet_process(&ctx, writebuf, writelen); + download_percentage(&ctx, size, ctx.otactrl->ImageLen); + rtos_delay_milliseconds(10); + ADDLOG_DEBUG(LOG_FEATURE_OTA, "Writelen %i at %i", writelen, total); + total += writelen; + towrite -= writelen; + + if(towrite > 0) + { + writebuf = request->received; + writelen = recv(request->fd, writebuf, 2048 < towrite ? 2048 : towrite, 0); + if(writelen < 0) + { + ADDLOG_ERROR(LOG_FEATURE_OTA, "recv returned %d - end of data - remaining %d", writelen, towrite); + ret = -1; + goto update_ota_exit; + } + } + } while((towrite > 0) && (writelen >= 0)); + + //erase manifest + flash_erase_sector(&flash, ctx.otactrl->FlashAddr); + + if(!verify_ota_checksum(ctx.otaTargetHdr, ctx.otactrl->targetIdx, ctx.otactrl->index)) + { + ADDLOG_ERROR(LOG_FEATURE_OTA, "The checksum is wrong!"); + ret = -1; + goto update_ota_exit; + } + + if(!ota_update_manifest(ctx.otaTargetHdr, ctx.otactrl->targetIdx, ctx.otactrl->index)) + { + ADDLOG_ERROR(LOG_FEATURE_OTA, "Change signature failed!"); + ret = -1; + goto update_ota_exit; + } + +update_ota_exit: + ota_update_deinit(&ctx); + if(ret != -1) + { + ADDLOG_INFO(LOG_FEATURE_OTA, "OTA is successful"); + sys_clear_ota_signature(); + //sys_recover_ota_signature(); + } + else + { + ADDLOG_ERROR(LOG_FEATURE_OTA, "OTA failed."); + return http_rest_error(request, ret, "error"); + } + #else init_ota(startaddr); diff --git a/src/libraries/IRremoteESP8266/src/IRremoteESP8266.h b/src/libraries/IRremoteESP8266/src/IRremoteESP8266.h index 64f50dda3..0524b5a61 100644 --- a/src/libraries/IRremoteESP8266/src/IRremoteESP8266.h +++ b/src/libraries/IRremoteESP8266/src/IRremoteESP8266.h @@ -1510,6 +1510,9 @@ extern "C" { #define DPRINTLN(x) #endif #endif // DEBUG +#if PLATFORM_REALTEK +#define strcasecmp strcmp +#endif #ifdef UNIT_TEST #ifndef F diff --git a/src/libraries/IRremoteESP8266/src/IRtimer.cpp b/src/libraries/IRremoteESP8266/src/IRtimer.cpp index c1dbac0cf..45ce14083 100644 --- a/src/libraries/IRremoteESP8266/src/IRtimer.cpp +++ b/src/libraries/IRremoteESP8266/src/IRtimer.cpp @@ -6,19 +6,10 @@ #endif -#if PLATFORM_BEKEN +#if PLATFORM_BEKEN || PLATFORM_REALTEK //TODO -static uint32_t micros(void) -{ - //TODO - return 0; -} - -static uint32_t millis(void) -{ - //TODO - return 0; -} +extern unsigned long micros(void); +extern unsigned long millis(void); #endif diff --git a/src/libraries/IRremoteESP8266/src/digitalWriteFast.cpp b/src/libraries/IRremoteESP8266/src/digitalWriteFast.cpp index cc0f889cc..233d7cd04 100644 --- a/src/libraries/IRremoteESP8266/src/digitalWriteFast.cpp +++ b/src/libraries/IRremoteESP8266/src/digitalWriteFast.cpp @@ -1,34 +1,47 @@ - - - - #include "../../../obk_config.h" #if ENABLE_DRIVER_IRREMOTEESP extern "C" { +#if PLATFORM_BEKEN #include +#else +#include "../../../hal/hal_pins.h" +#endif } #include "digitalWriteFast.h" void digitalToggleFast(unsigned char P) { +#if PLATFORM_BEKEN bk_gpio_output((GPIO_INDEX)P, !bk_gpio_input((GPIO_INDEX)P)); +#else + HAL_PIN_SetOutputValue(P, !HAL_PIN_ReadDigitalInput(P)); +#endif } unsigned char digitalReadFast(unsigned char P) { +#if PLATFORM_BEKEN return bk_gpio_input((GPIO_INDEX)P); +#else + return HAL_PIN_ReadDigitalInput(P); +#endif } void digitalWriteFast(unsigned char P, unsigned char V) { //RAW_SetPinValue(P, V); //HAL_PIN_SetOutputValue(index, iVal); +#if PLATFORM_BEKEN bk_gpio_output((GPIO_INDEX)P, V); +#else + HAL_PIN_SetOutputValue(P, V); +#endif } void pinModeFast(unsigned char P, unsigned char V) { +#if PLATFORM_BEKEN if (V == INPUT_PULLUP) { bk_gpio_config_input_pup((GPIO_INDEX)P); } @@ -41,6 +54,15 @@ void pinModeFast(unsigned char P, unsigned char V) { else if (V == OUTPUT) { bk_gpio_config_output((GPIO_INDEX)P); } +#else + switch(V) + { + case INPUT_PULLUP: HAL_PIN_Setup_Input_Pulldown(P); break; + case INPUT_PULLDOWN: HAL_PIN_Setup_Input_Pullup(P); break; + case INPUT: HAL_PIN_Setup_Input(P); break; + case OUTPUT: HAL_PIN_Setup_Output(P); break; + } +#endif } #endif diff --git a/src/libraries/IRremoteESP8266/src/digitalWriteFast.h b/src/libraries/IRremoteESP8266/src/digitalWriteFast.h index f56e85544..adc3c2cf4 100644 --- a/src/libraries/IRremoteESP8266/src/digitalWriteFast.h +++ b/src/libraries/IRremoteESP8266/src/digitalWriteFast.h @@ -18,8 +18,6 @@ #ifndef __digitalWriteFast_h_ #define __digitalWriteFast_h_ 1 - -#if PLATFORM_BEKEN //TODO: check these? typedef enum { LOW = 0, @@ -34,9 +32,7 @@ typedef enum { OUTPUT = 0x1, INPUT_PULLUP = 0x2, INPUT_PULLDOWN = 0x3, -} PinMode; -#endif - +} PinModeOBK; void digitalToggleFast(unsigned char P); unsigned char digitalReadFast(unsigned char P); @@ -44,5 +40,3 @@ void digitalWriteFast(unsigned char P, unsigned char V); void pinModeFast(unsigned char P, unsigned char V); #endif //__digitalWriteFast_h_ - - diff --git a/src/littlefs/our_lfs.c b/src/littlefs/our_lfs.c index c5ff101cc..5e8c256fe 100644 --- a/src/littlefs/our_lfs.c +++ b/src/littlefs/our_lfs.c @@ -119,6 +119,11 @@ struct lfs_config cfg = { .erase = lfs_erase, .sync = lfs_sync, +#if PLATFORM_REALTEK_NEW + .lock = lfs_diskio_lock, + .unlock = lfs_diskio_unlock, +#endif + // block device configuration .read_size = 1, .prog_size = 1, @@ -144,7 +149,7 @@ static commandResult_t CMD_LFS_Size(const void *context, const char *cmd, const return CMD_RES_OK; } -#if PLATFORM_ESPIDF || PLATFORM_RTL8720D || PLATFORM_BL602 || PLATFORM_ESP8266 +#if PLATFORM_ESPIDF || PLATFORM_RTL8720D || PLATFORM_BL602 || PLATFORM_ESP8266 || PLATFORM_REALTEK_NEW ADDLOG_ERROR(LOG_FEATURE_CMD, PLATFORM_MCU_NAME" doesn't support changing LFS size"); return CMD_RES_ERROR; #endif @@ -289,6 +294,20 @@ static commandResult_t CMD_LFS_Format(const void *context, const char *cmd, cons LFS_Start = newstart = 0; // lfs_info.offset; LFS_Size = newsize = lfs_info.size; +#elif PLATFORM_REALTEK_NEW + + switch(flash_size_8720) + { + case 4: + LFS_Start = newstart = 0x1F0000; + LFS_Size = newsize = 0x24000; + break; + default: + LFS_Start = newstart = 0x400000; + LFS_Size = newsize = (flash_size_8720 << 20) - LFS_Start; + break; + } + #endif cfg.block_count = (newsize/LFS_BLOCK_SIZE); @@ -555,6 +574,22 @@ void init_lfs(int create){ ADDLOGF_INFO("8720D Detected Flash Size: %i MB, adjusting LFS, start: 0x%X, size: 0x%X", flash_size_8720, newstart, newsize); CFG_SetLFS_Size(newsize); +#elif PLATFORM_REALTEK_NEW + + switch(flash_size_8720) + { + case 4: + LFS_Start = newstart = 0x1F0000; + LFS_Size = newsize = 0x24000; + break; + default: + LFS_Start = newstart = 0x400000; + LFS_Size = newsize = (flash_size_8720 << 20) - LFS_Start; + break; + } + ADDLOGF_INFO("8721DA/8720E Detected Flash Size: %i MB, adjusting LFS, start: 0x%X, size: 0x%X", flash_size_8720, newstart, newsize); + CFG_SetLFS_Size(newsize); + #endif LFS_Start = newstart; diff --git a/src/littlefs/our_lfs.h b/src/littlefs/our_lfs.h index 8b2b7c112..5c9a809ec 100644 --- a/src/littlefs/our_lfs.h +++ b/src/littlefs/our_lfs.h @@ -107,6 +107,13 @@ #define LFS_BLOCKS_END 0x80000000 #define LFS_BLOCKS_MAX_LEN 0x80000000 +#elif PLATFORM_REALTEK_NEW + +#define LFS_BLOCKS_START 0x1F0000 +#define LFS_BLOCKS_START_MIN 0x1F0000 +#define LFS_BLOCKS_END 0x80000000 +#define LFS_BLOCKS_MAX_LEN 0x80000000 + #elif PLATFORM_ECR6600 #define LFS_BLOCKS_START 0x1D5000 @@ -155,7 +162,11 @@ #if ENABLE_LITTLEFS +#if PLATFORM_REALTEK_NEW +#include "littlefs_adapter.h" +#else #include "lfs.h" +#endif // 512k MAX - i.e. no more that 0x80000 // 0x8000 = 32k diff --git a/src/new_common.c b/src/new_common.c index 0017d2c12..ac0db2152 100644 --- a/src/new_common.c +++ b/src/new_common.c @@ -112,7 +112,7 @@ const char* strcasestr(const char* str1, const char* str2) // where is buffer with [64] bytes? // 2022-11-02 update: It was also causing crash on OpenBL602. Original strdup was crashing while my strdup works. // Let's just rename test_strdup to strdup and let it be our main correct strdup -#if !defined(PLATFORM_W600) && !defined(PLATFORM_W800) && !defined(WINDOWS) && !defined(PLATFORM_ECR6600) +#if !defined(PLATFORM_W600) && !defined(PLATFORM_W800) && !defined(WINDOWS) && !defined(PLATFORM_ECR6600) && !PLATFORM_REALTEK_NEW // W600 and W800 already seem to have a strdup? char *strdup(const char *s) { diff --git a/src/new_common.h b/src/new_common.h index a128649f1..44c88b32a 100644 --- a/src/new_common.h +++ b/src/new_common.h @@ -172,6 +172,16 @@ typedef long BaseType_t; #define DEVICENAME_PREFIX_SHORT "esp8266" #define PLATFORM_MCU_NAME "ESP8266" #define MANUFACTURER "Espressif" +#elif PLATFORM_RTL8721DA +#define DEVICENAME_PREFIX_FULL "OpenRTL8721DA" +#define DEVICENAME_PREFIX_SHORT "rtl8721da" +#define PLATFORM_MCU_NAME "RTL8721DA" +#define MANUFACTURER "Realtek" +#elif PLATFORM_RTL8720E +#define DEVICENAME_PREFIX_FULL "OpenRTL8720E" +#define DEVICENAME_PREFIX_SHORT "rtl8720e" +#define PLATFORM_MCU_NAME "RTL8720E" +#define MANUFACTURER "Realtek" #else #error "You must define a platform.." This platform is not supported, error! @@ -225,6 +235,10 @@ This platform is not supported, error! #define USER_SW_VER "ECR6600_Test" #elif PLATFORM_ESP8266 #define USER_SW_VER "ESP8266_Test" +#elif PLATFORM_RTL8721DA +#define USER_SW_VER "RTL8721DA_Test" +#elif PLATFORM_RTL8720E +#define USER_SW_VER "RTL8720E_Test" #else #warning "USER_SW_VER undefined" #define USER_SW_VER "unknown" @@ -630,6 +644,10 @@ OSStatus rtos_suspend_thread(beken_thread_t* thread); #elif PLATFORM_REALTEK +#if __cplusplus && !PLATFORM_REALTEK_NEW +typedef uint32_t in_addr_t; +#endif + #include "FreeRTOS.h" #include "task.h" #include "semphr.h" @@ -641,10 +659,32 @@ OSStatus rtos_suspend_thread(beken_thread_t* thread); #include "lwip/sys.h" #include "lwip/netdb.h" #include "lwip/dns.h" -#include "cmsis_os.h" +#include "PinNames.h" +#if PLATFORM_REALTEK_NEW +#include "wifi_api_event.h" +#include "wifi_api_types.h" +#include "wifi_api_ext.h" +#include "kv.h" +#if PLATFORM_RTL8721DA +#include "autoconf_8721da.h" +#elif PLATFORM_RTL8720E +#include "autoconf_8720e.h" +#endif +#define wifi_is_up wifi_is_running +#define RTW_STA_INTERFACE STA_WLAN_INDEX +#define RTW_AP_INTERFACE SOFTAP_WLAN_INDEX +#define RTW_MODE_STA_AP RTW_MODE_AP +#define wifi_enable_powersave() wifi_set_lps_enable(1) +#define wifi_disable_powersave() wifi_set_lps_enable(0) +#define RTW_SUCCESS 0 +typedef enum rtw_security rtw_security_t; +typedef enum rtw_drv_op_mode rtw_mode_t; +#endif typedef unsigned int UINT32; +typedef uint8_t UINT8; extern int g_sleepfactor; +extern u32 pwmout_pin2chan(PinName pin); #undef ASSERT #define ASSERT @@ -883,7 +923,7 @@ int LWIP_GetMaxSockets(); int LWIP_GetActiveSockets(); #ifndef LINUX -#if !PLATFORM_ESPIDF && !PLATFORM_ESP8266 +#if !PLATFORM_ESPIDF && !PLATFORM_ESP8266 && !PLATFORM_REALTEK_NEW //delay function do 10*r nops, because rtos_delay_milliseconds is too much void usleep(int r); #endif diff --git a/src/new_pins.h b/src/new_pins.h index 19bd51b2d..2ae54007b 100644 --- a/src/new_pins.h +++ b/src/new_pins.h @@ -1060,8 +1060,10 @@ typedef enum channelType_e { #define PLATFORM_GPIO_MAX 17 #elif PLATFORM_RTL8710A #define PLATFORM_GPIO_MAX 20 -#elif PLATFORM_RTL8720D +#elif PLATFORM_RTL8720D || PLATFORM_RTL8721DA #define PLATFORM_GPIO_MAX 64 +#elif PLATFORM_RTL8720E +#define PLATFORM_GPIO_MAX 52 #elif PLATFORM_ECR6600 #define PLATFORM_GPIO_MAX 27 #elif PLATFORM_BK7252 || PLATFORM_BK7252N @@ -1133,7 +1135,7 @@ typedef struct pinsState_s byte channelTypes[CHANNEL_MAX]; } pinsState_t; -#elif PLATFORM_RTL8720D +#elif PLATFORM_RTL8720D || PLATFORM_RTL8721DA || PLATFORM_RTL8720E #define MAX_PIN_ROLES 64 @@ -1387,7 +1389,7 @@ typedef struct mainConfig_s { byte unusedSectorAB[51]; #elif PLATFORM_ESPIDF byte unusedSectorAB[43]; -#elif PLATFORM_RTL8720D +#elif PLATFORM_RTL8720D || PLATFORM_RTL8721DA || PLATFORM_RTL8720E byte unusedSectorAB; #else byte unusedSectorAB[99]; diff --git a/src/obk_config.h b/src/obk_config.h index f83206c3b..b55c669a7 100644 --- a/src/obk_config.h +++ b/src/obk_config.h @@ -439,11 +439,20 @@ #define ENABLE_ADVANCED_CHANNELTYPES_DISCOVERY 1 #define ENABLE_DRIVER_SSDP 1 #define ENABLE_OBK_SCRIPTING 1 +#define ENABLE_DRIVER_TCL 1 #ifndef PLATFORM_RTL8710B #define ENABLE_OBK_BERRY 1 #endif -#define ENABLE_DRIVER_TCL 1 + +#if PLATFORM_RTL87X0C || PLATFORM_REALTEK_NEW || PLATFORM_RTL8720D +#undef ENABLE_DRIVER_DDP +#define ENABLE_DRIVER_IRREMOTEESP 1 +#endif + +#if PLATFORM_RTL8720E +#undef NO_CHIP_TEMPERATURE +#endif #elif PLATFORM_ECR6600 diff --git a/src/user_main.c b/src/user_main.c index ad8bea649..0f87ee346 100644 --- a/src/user_main.c +++ b/src/user_main.c @@ -162,7 +162,7 @@ void extended_app_waiting_for_launch2(void) { #endif -#if defined(PLATFORM_LN882H) || defined(PLATFORM_ESPIDF) || defined(PLATFORM_ESP8266) +#if PLATFORM_LN882H || PLATFORM_ESPIDF || PLATFORM_ESP8266 || PLATFORM_REALTEK_NEW int LWIP_GetMaxSockets() { return 0;