diff --git a/.github/workflows/workflow.yaml b/.github/workflows/workflow.yaml index 51d4b145e..23a0f2fd4 100644 --- a/.github/workflows/workflow.yaml +++ b/.github/workflows/workflow.yaml @@ -14,7 +14,7 @@ env: jobs: refs: name: Prepare CI Environment - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 outputs: sha_short: ${{ steps.refs.outputs.sha_short }} short_ref: ${{ steps.refs.outputs.short_ref }} @@ -102,11 +102,11 @@ jobs: build: name: Build needs: refs - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 strategy: fail-fast: false matrix: - platform: [OpenBK7231T, OpenBK7231N, OpenXR809, OpenBL602, OpenW800, OpenW600, OpenLN882H, OpenTR6260, OpenRTL87X0C, OpenRTL8710B, OpenRTL8710A, OpenBK7238] + platform: [OpenBK7231N, OpenBK7238, OpenXR809, OpenBL602, OpenW800, OpenW600, OpenLN882H, OpenTR6260, OpenRTL8710A, OpenRTL8710B, OpenRTL87X0C, OpenRTL8720D] steps: - name: Source checkout uses: actions/checkout@v4 @@ -146,10 +146,47 @@ jobs: output/${{ needs.refs.outputs.version }}/${{ matrix.platform }}_${{ needs.refs.outputs.version }}_OTA.bin.xz.ota if-no-files-found: warn + build2004: + name: Build + needs: refs + runs-on: ubuntu-20.04 + strategy: + fail-fast: false + matrix: + platform: [OpenBK7231T] + steps: + - name: Source checkout + uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: '3.8' + architecture: 'x64' + - name: Install dependencies + run: | + sudo dpkg --add-architecture i386 + sudo apt-get update + sudo apt-get -y install libc6-i386 make cmake gcc-arm-none-eabi + pip3 install pycryptodomex + pip3 install configobj + pip3 install toml + pip3 install fdt + - run: ls -la + - name: Run make + run: make APP_VERSION=${{ needs.refs.outputs.version }} APP_NAME=${{ matrix.platform }} ${{ matrix.platform }} + - name: Save build assets + uses: actions/upload-artifact@v4 + with: + name: ${{ env.APP_NAME }}_${{ needs.refs.outputs.version }}_${{ matrix.platform }} + path: | + output/${{ needs.refs.outputs.version }}/${{ matrix.platform }}_UA_${{ needs.refs.outputs.version }}.bin + output/${{ needs.refs.outputs.version }}/${{ matrix.platform }}_UG_${{ needs.refs.outputs.version }}.bin + output/${{ needs.refs.outputs.version }}/${{ matrix.platform }}_QIO_${{ needs.refs.outputs.version }}.bin + output/${{ needs.refs.outputs.version }}/${{ matrix.platform }}_${{ needs.refs.outputs.version }}.rbl + if-no-files-found: warn build_idf: name: Build IDF needs: refs - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 strategy: fail-fast: false matrix: @@ -195,8 +232,8 @@ jobs: merge: name: Merge Artifacts - runs-on: ubuntu-20.04 - needs: [refs, build, build2, build_idf] + runs-on: ubuntu-22.04 + needs: [refs, build, build2004, build2, build_idf] #if: always() && needs.refs.outputs.new_release == 'true' && (github.ref == 'refs/heads/main' || github.ref_name == 'alpha') steps: - name: Merge Artifacts @@ -207,7 +244,7 @@ jobs: release: name: Semantic Release Images and Artifacts - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 needs: [merge, refs] if: always() && needs.refs.outputs.new_release == 'true' && (github.ref == 'refs/heads/main' || github.ref_name == 'alpha') steps: diff --git a/.gitmodules b/.gitmodules index 68ae24c0c..88331f114 100644 --- a/.gitmodules +++ b/.gitmodules @@ -45,3 +45,7 @@ path = sdk/beken_freertos_sdk url = https://github.com/NonPIayerCharacter/beken_freertos_sdk.git branch = master +[submodule "sdk/OpenRTL8720D"] + path = sdk/OpenRTL8720D + url = https://github.com/NonPIayerCharacter/OpenRTL8720D.git + branch = master diff --git a/Makefile b/Makefile index 528457f4f..b51ba0bfd 100644 --- a/Makefile +++ b/Makefile @@ -178,6 +178,14 @@ prebuild_OpenRTL8710A: else echo "prebuild for OpenRTL8710A not found ... "; \ fi +prebuild_OpenRTL8720D: + git submodule update --init --recursive sdk/OpenRTL8720D + @if [ -e platforms/RTL8720D/pre_build.sh ]; then \ + echo "prebuild found for OpenRTL8720D"; \ + sh platforms/RTL8720D/pre_build.sh; \ + else echo "prebuild for OpenRTL8720D not found ... "; \ + fi + prebuild_OpenBK7238: git submodule update --init --recursive sdk/beken_freertos_sdk @if [ -e platforms/BK723x/pre_build_7238.sh ]; then \ @@ -353,6 +361,17 @@ OpenRTL8710A: prebuild_OpenRTL8710A mkdir -p output/$(APP_VERSION) cp sdk/OpenRTL8710A_B/project/obk_ameba1/GCC-RELEASE/application/Debug/bin/ram_all.bin output/$(APP_VERSION)/OpenRTL8710A_$(APP_VERSION).bin cp sdk/OpenRTL8710A_B/project/obk_ameba1/GCC-RELEASE/application/Debug/bin/ota.bin output/$(APP_VERSION)/OpenRTL8710A_$(APP_VERSION)_ota.img + +.PHONY: OpenRTL8720D +OpenRTL8720D: prebuild_OpenRTL8720D + $(MAKE) -C sdk/OpenRTL8720D/project/OpenBeken/GCC-RELEASE/project_hp APP_VERSION=$(APP_VERSION) + $(MAKE) -C sdk/OpenRTL8720D/project/OpenBeken/GCC-RELEASE/project_lp APP_VERSION=$(APP_VERSION) + mkdir -p output/$(APP_VERSION) + touch output/$(APP_VERSION)/OpenRTL8720D_$(APP_VERSION).bin + dd conv=notrunc bs=1 if=sdk/OpenRTL8720D/project/OpenBeken/GCC-RELEASE/project_lp/asdk/image/km0_boot_all.bin of=output/$(APP_VERSION)/OpenRTL8720D_$(APP_VERSION).bin seek=0 + dd conv=notrunc bs=1 if=sdk/OpenRTL8720D/project/OpenBeken/GCC-RELEASE/project_hp/asdk/image/km4_boot_all.bin of=output/$(APP_VERSION)/OpenRTL8720D_$(APP_VERSION).bin seek=$(shell printf "%d" 0x4000) + 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: OpenBK7238 OpenBK7238: prebuild_OpenBK7238 diff --git a/libraries/easyflash/inc/ef_cfg.h b/libraries/easyflash/inc/ef_cfg.h index e08f973f5..7684dc260 100644 --- a/libraries/easyflash/inc/ef_cfg.h +++ b/libraries/easyflash/inc/ef_cfg.h @@ -106,6 +106,11 @@ #define EF_START_ADDR 0x2E3000 #define ENV_AREA_SIZE 0x1C000 +#elif PLATFORM_RTL8720D + +#define EF_START_ADDR 0x1B0000 +#define ENV_AREA_SIZE 0x50000 + #endif /* print debug information of flash */ #ifdef PKG_EASYFLASH_DEBUG diff --git a/platforms/RTL8710A/OpenBeken.mk b/platforms/RTL8710A/OpenBeken.mk index 6a1fdac6f..020d755f8 100644 --- a/platforms/RTL8710A/OpenBeken.mk +++ b/platforms/RTL8710A/OpenBeken.mk @@ -29,12 +29,12 @@ SRC_C += $(OBK_DIR)/src/devicegroups/deviceGroups_util.c SRC_C += $(OBK_DIR)/src/devicegroups/deviceGroups_write.c SRC_C += $(OBK_DIR)/src/driver/drv_main.c #SRC_C += $(OBK_DIR)/src/hal/realtek/rtl8710a/hal_adc_rtl8710a.c -SRC_C += $(OBK_DIR)/src/hal/realtek/rtl8710a/hal_generic_rtl8710a.c #SRC_C += $(OBK_DIR)/src/hal/realtek/rtl8710a/hal_main_rtl8710a.c SRC_C += $(OBK_DIR)/src/hal/realtek/rtl8710a/hal_uart_rtl8710a.c SRC_C += $(OBK_DIR)/src/hal/realtek/rtl8710a/hal_pins_rtl8710a.c SRC_C += $(OBK_DIR)/src/hal/realtek/hal_flashConfig_realtek.c SRC_C += $(OBK_DIR)/src/hal/realtek/hal_flashVars_realtek.c +SRC_C += $(OBK_DIR)/src/hal/realtek/hal_generic_realtek.c SRC_C += $(OBK_DIR)/src/hal/realtek/hal_pins_realtek.c SRC_C += $(OBK_DIR)/src/hal/realtek/hal_wifi_realtek.c SRC_C += $(OBK_DIR)/src/hal/generic/hal_adc_generic.c diff --git a/platforms/RTL8710A/main.c b/platforms/RTL8710A/main.c index 5a807b6af..083e93acd 100644 --- a/platforms/RTL8710A/main.c +++ b/platforms/RTL8710A/main.c @@ -18,6 +18,7 @@ uint8_t wmac[6] = { 0 }; static void obk_task(void* pvParameters) { + vTaskDelay(50 / portTICK_PERIOD_MS); Main_Init(); for(;;) { @@ -45,7 +46,7 @@ int main(void) "OpenBeken", 8 * 256, NULL, - tskIDLE_PRIORITY + 1, + 6, NULL); /* Enable Schedule, Start Kernel */ diff --git a/platforms/RTL8710B/OpenBeken.mk b/platforms/RTL8710B/OpenBeken.mk index 7a8e327da..9ecba711c 100644 --- a/platforms/RTL8710B/OpenBeken.mk +++ b/platforms/RTL8710B/OpenBeken.mk @@ -29,12 +29,12 @@ SRC_C += $(OBK_DIR)/src/devicegroups/deviceGroups_util.c SRC_C += $(OBK_DIR)/src/devicegroups/deviceGroups_write.c SRC_C += $(OBK_DIR)/src/driver/drv_main.c #SRC_C += $(OBK_DIR)/src/hal/realtek/rtl8710b/hal_adc_rtl8710b.c -SRC_C += $(OBK_DIR)/src/hal/realtek/rtl8710b/hal_generic_rtl8710b.c #SRC_C += $(OBK_DIR)/src/hal/realtek/rtl8710b/hal_main_rtl8710b.c SRC_C += $(OBK_DIR)/src/hal/realtek/rtl8710b/hal_uart_rtl8710b.c SRC_C += $(OBK_DIR)/src/hal/realtek/rtl8710b/hal_pins_rtl8710b.c SRC_C += $(OBK_DIR)/src/hal/realtek/hal_flashConfig_realtek.c SRC_C += $(OBK_DIR)/src/hal/realtek/hal_flashVars_realtek.c +SRC_C += $(OBK_DIR)/src/hal/realtek/hal_generic_realtek.c SRC_C += $(OBK_DIR)/src/hal/realtek/hal_pins_realtek.c SRC_C += $(OBK_DIR)/src/hal/realtek/hal_wifi_realtek.c SRC_C += $(OBK_DIR)/src/hal/generic/hal_adc_generic.c diff --git a/platforms/RTL8710B/main.c b/platforms/RTL8710B/main.c index c0a420350..561832edf 100644 --- a/platforms/RTL8710B/main.c +++ b/platforms/RTL8710B/main.c @@ -20,6 +20,7 @@ void LOGUART_SetBaud_FromFlash(void) {} static void obk_task(void* pvParameters) { + vTaskDelay(50 / portTICK_PERIOD_MS); Main_Init(); for(;;) { @@ -46,7 +47,7 @@ int main(void) "OpenBeken", 8 * 256, NULL, - tskIDLE_PRIORITY + 1, + 6, NULL); /* Enable Schedule, Start Kernel */ diff --git a/platforms/RTL8720D/OpenBeken.mk b/platforms/RTL8720D/OpenBeken.mk new file mode 100644 index 000000000..754122dc6 --- /dev/null +++ b/platforms/RTL8720D/OpenBeken.mk @@ -0,0 +1,153 @@ +MODULE_IFLAGS += -DPLATFORM_RTL8720D -DPLATFORM_REALTEK -DUSER_SW_VER='"$(APP_VERSION)"' -Wno-strict-prototypes -Wno-unused-parameter + +MODULE_IFLAGS += -I$(EFDIR)/easyflash/inc + +CSRC += $(PLDIR)/main.c + +CSRC += base64/base64.c +CSRC += bitmessage/bitmessage_read.c +CSRC += bitmessage/bitmessage_write.c +CSRC += cJSON/cJSON.c +CSRC += cmnds/cmd_channels.c +CSRC += cmnds/cmd_eventHandlers.c +CSRC += cmnds/cmd_if.c +CSRC += cmnds/cmd_main.c +CSRC += cmnds/cmd_newLEDDriver_colors.c +CSRC += cmnds/cmd_newLEDDriver.c +CSRC += cmnds/cmd_repeatingEvents.c +CSRC += cmnds/cmd_script.c +CSRC += cmnds/cmd_simulatorOnly.c +CSRC += cmnds/cmd_tasmota.c +CSRC += cmnds/cmd_tcp.c +CSRC += cmnds/cmd_test.c +CSRC += cmnds/cmd_tokenizer.c +CSRC += devicegroups/deviceGroups_read.c +CSRC += devicegroups/deviceGroups_util.c +CSRC += devicegroups/deviceGroups_write.c +CSRC += driver/drv_main.c +#CSRC += hal/realtek/rtl8720d/hal_adc_rtl8710b.c +#CSRC += hal/realtek/rtl8720d/hal_main_rtl8710b.c +CSRC += hal/realtek/rtl8720d/hal_uart_rtl8720d.c +CSRC += hal/realtek/rtl8720d/hal_pins_rtl8720d.c +CSRC += hal/realtek/hal_flashConfig_realtek.c +CSRC += hal/realtek/hal_flashVars_realtek.c +CSRC += hal/realtek/hal_generic_realtek.c +CSRC += hal/realtek/hal_pins_realtek.c +CSRC += hal/realtek/hal_wifi_realtek.c +CSRC += hal/generic/hal_adc_generic.c +CSRC += hal/generic/hal_flashConfig_generic.c +CSRC += hal/generic/hal_flashVars_generic.c +CSRC += hal/generic/hal_generic.c +CSRC += hal/generic/hal_main_generic.c +CSRC += hal/generic/hal_pins_generic.c +CSRC += hal/generic/hal_wifi_generic.c +CSRC += hal/generic/hal_uart_generic.c +CSRC += httpserver/hass.c +CSRC += httpserver/http_basic_auth.c +CSRC += httpserver/http_fns.c +CSRC += httpserver/http_tcp_server.c +CSRC += httpserver/new_tcp_server.c +CSRC += httpserver/json_interface.c +CSRC += httpserver/new_http.c +CSRC += httpserver/rest_interface.c +CSRC += mqtt/new_mqtt_deduper.c +CSRC += jsmn/jsmn.c +CSRC += logging/logging.c +CSRC += mqtt/new_mqtt.c +CSRC += new_cfg.c +CSRC += new_common.c +CSRC += new_ping.c +CSRC += new_pins.c +CSRC += rgb2hsv.c +CSRC += tiny_crc8.c +CSRC += user_main.c +#CSRC += cmnds/cmd_send.c +CSRC += driver/drv_adcButton.c +CSRC += driver/drv_adcSmoother.c +CSRC += driver/drv_aht2x.c +CSRC += driver/drv_battery.c +CSRC += driver/drv_bl_shared.c +CSRC += driver/drv_bl0937.c +CSRC += driver/drv_bl0942.c +#CSRC += driver/drv_bmp280.c +CSRC += driver/drv_bmpi2c.c +CSRC += driver/drv_bp1658cj.c +CSRC += driver/drv_bp5758d.c +CSRC += driver/drv_bridge_driver.c +CSRC += driver/drv_chargingLimit.c +CSRC += driver/drv_charts.c +CSRC += driver/drv_cht8305.c +CSRC += driver/drv_cse7766.c +CSRC += driver/drv_ddp.c +CSRC += driver/drv_debouncer.c +CSRC += driver/drv_dht_internal.c +CSRC += driver/drv_dht.c +CSRC += driver/drv_doorSensorWithDeepSleep.c +CSRC += driver/drv_gn6932.c +CSRC += driver/drv_hd2015.c +CSRC += driver/drv_ht16k33.c +CSRC += driver/drv_httpButtons.c +CSRC += driver/drv_hue.c +CSRC += driver/drv_kp18058.c +CSRC += driver/drv_kp18068.c +CSRC += driver/drv_max72xx_clock.c +CSRC += driver/drv_max72xx_internal.c +CSRC += driver/drv_max72xx_single.c +CSRC += driver/drv_mcp9808.c +CSRC += driver/drv_ntp_events.c +CSRC += driver/drv_ntp.c +CSRC += driver/drv_pt6523.c +CSRC += driver/drv_pwm_groups.c +CSRC += driver/drv_pwmToggler.c +CSRC += driver/drv_pwrCal.c +CSRC += driver/drv_rn8209.c +CSRC += driver/drv_sgp.c +CSRC += driver/drv_shiftRegister.c +CSRC += driver/drv_sht3x.c +#CSRC += driver/drv_sm15155e.c +#CSRC += driver/drv_sm16703P.c +CSRC += driver/drv_sm2135.c +CSRC += driver/drv_sm2235.c +CSRC += driver/drv_soft_i2c.c +#CSRC += driver/drv_soft_spi.c +#CSRC += driver/drv_spi_flash.c +#CSRC += driver/drv_spi.c +#CSRC += driver/drv_spidma.c +CSRC += driver/drv_ssdp.c +CSRC += driver/drv_tasmotaDeviceGroups.c +CSRC += driver/drv_test_drivers.c +CSRC += driver/drv_textScroller.c +CSRC += driver/drv_tm_gn_display_shared.c +CSRC += driver/drv_tm1637.c +CSRC += driver/drv_tm1638.c +CSRC += driver/drv_tuyaMCU.c +CSRC += driver/drv_tuyaMCUSensor.c +CSRC += driver/drv_uart.c +CSRC += driver/drv_ucs1912.c +CSRC += driver/drv_wemo.c +CSRC += driver/drv_ds1820_simple.c +CSRC += driver/drv_uart_tcp.c +#CSRC += httpclient/http_client.c +#CSRC += httpclient/utils_net.c +#CSRC += httpclient/utils_timer.c +CSRC += i2c/drv_i2c_lcd_pcf8574t.c +CSRC += i2c/drv_i2c_main.c +CSRC += i2c/drv_i2c_mcp23017.c +CSRC += i2c/drv_i2c_tc74.c +CSRC += littlefs/lfs_util.c +CSRC += littlefs/lfs.c +CSRC += littlefs/our_lfs.c +#CSRC += memory/memtest.c +#CSRC += ota/ota.c +#CSRC += sim/sim_uart.c + + +CSRC += libraries/easyflash/ports/ef_port.c +CSRC += libraries/easyflash/easyflash.c +#CSRC += libraries/easyflash/ef_cmd.c +CSRC += libraries/easyflash/ef_env.c +CSRC += libraries/easyflash/ef_env_legacy.c +CSRC += libraries/easyflash/ef_env_legacy_wl.c +CSRC += libraries/easyflash/ef_iap.c +CSRC += libraries/easyflash/ef_log.c +CSRC += libraries/easyflash/ef_utils.c \ No newline at end of file diff --git a/platforms/RTL8720D/main.c b/platforms/RTL8720D/main.c new file mode 100644 index 000000000..ec60e1517 --- /dev/null +++ b/platforms/RTL8720D/main.c @@ -0,0 +1,202 @@ +#include "ameba_soc.h" +#include "main.h" +#include "wifi_constants.h" +#include "rom_map.h" +#include "device_lock.h" + +extern void wlan_network(void); +void app_captouch_init(void); +void app_keyscan_init(u8 reset_status); + +static void* app_mbedtls_calloc_func(size_t nelements, size_t elementSize) +{ + size_t size; + void* ptr = NULL; + + size = nelements * elementSize; + ptr = pvPortMalloc(size); + + if(ptr) + _memset(ptr, 0, size); + + return ptr; +} + +void app_mbedtls_rom_init(void) +{ + mbedtls_platform_set_calloc_free(app_mbedtls_calloc_func, vPortFree); + //rom_ssl_ram_map.use_hw_crypto_func = 1; + rtl_cryptoEngine_init(); +} + +VOID app_start_autoicg(VOID) +{ + u32 temp = 0; + + temp = HAL_READ32(SYSTEM_CTRL_BASE_HP, REG_HS_PLATFORM_PARA); + temp |= BIT_HSYS_PLFM_AUTO_ICG_EN; + HAL_WRITE32(SYSTEM_CTRL_BASE_HP, REG_HS_PLATFORM_PARA, temp); +} + +VOID app_pmu_init(VOID) +{ + if(BKUP_Read(BKUP_REG0) & BIT_SW_SIM_RSVD) + { + return; + } + + pmu_set_sleep_type(SLEEP_PG); + + /* if wake from deepsleep, that means we have released wakelock last time */ + //if (SOCPS_DsleepWakeStatusGet() == TRUE) { + // pmu_set_sysactive_time(2); + // pmu_release_wakelock(PMU_OS); + // pmu_tickless_debug(ENABLE); + //} +} + +/* enable or disable BT shared memory */ +/* if enable, KM4 can access it as SRAM */ +/* if disable, just BT can access it */ +/* 0x100E_0000 0x100E_FFFF 64K */ +VOID app_shared_btmem(u32 NewStatus) +{ + u32 temp = HAL_READ32(SYSTEM_CTRL_BASE_HP, REG_HS_PLATFORM_PARA); + + if(NewStatus == ENABLE) + { + temp |= BIT_HSYS_SHARE_BT_MEM; + } + else + { + temp &= ~BIT_HSYS_SHARE_BT_MEM; + } + + HAL_WRITE32(SYSTEM_CTRL_BASE_HP, REG_HS_PLATFORM_PARA, temp); +} + +static void app_dslp_wake(void) +{ + u32 aon_wake_event = SOCPS_AONWakeReason(); + + DBG_8195A("hs app_dslp_wake %x \n", aon_wake_event); + + if(BIT_GPIO_WAKE_STS & aon_wake_event) + { + DBG_8195A("DSLP AonWakepin wakeup, wakepin %x\n", SOCPS_WakePinCheck()); + } + + if(BIT_AON_WAKE_TIM0_STS & aon_wake_event) + { + SOCPS_AONTimerCmd(DISABLE); + DBG_8195A("DSLP Aontimer wakeup \n"); + } + + if(BIT_RTC_WAKE_STS & aon_wake_event) + { + DBG_8195A("DSLP RTC wakeup \n"); + } + + if(BIT_DLPS_TSF_WAKE_STS & aon_wake_event) + { + DBG_8195A("DSLP TSF wakeup \n"); + } + + if(BIT_KEYSCAN_WAKE_STS & aon_wake_event) + { + DBG_8195A("DSLP KS wakeup\n"); + } + + if(BIT_CAPTOUCH_WAKE_STS & aon_wake_event) + { + DBG_8195A("DSLP Touch wakeup\n"); + } + + SOCPS_AONWakeClear(BIT_ALL_WAKE_STS); +} + +extern void Main_Init(); +extern void Main_OnEverySecond(); +extern uint32_t ota_get_cur_index(void); + +TaskHandle_t g_sys_task_handle1; +uint8_t wmac[6] = { 0 }; +rtw_mode_t wifi_mode = RTW_MODE_NONE; +uint32_t current_fw_idx; + +static void obk_task(void* pvParameters) +{ + vTaskDelay(50 / portTICK_PERIOD_MS); + Main_Init(); + for(;;) + { + vTaskDelay(1000 / portTICK_PERIOD_MS); + Main_OnEverySecond(); + } + vTaskDelete(NULL); +} + +//default main +int main(void) +{ + if(rtk_wifi_config.wifi_ultra_low_power && + rtk_wifi_config.wifi_app_ctrl_tdma == FALSE) + { + SystemSetCpuClk(CLK_KM4_100M); + } + InterruptRegister(IPC_INTHandler, IPC_IRQ, (u32)IPCM0_DEV, 5); + InterruptEn(IPC_IRQ, 5); + +#ifdef CONFIG_MBED_TLS_ENABLED + app_mbedtls_rom_init(); +#endif + + /* init console */ + shell_recv_all_data_onetime = 1; + shell_init_rom(0, 0); + shell_init_ram(); + ipc_table_init(); + + /* Register Log Uart Callback function */ + InterruptRegister((IRQ_FUN)shell_uart_irq_rom, UART_LOG_IRQ, (u32)NULL, 5); + InterruptEn(UART_LOG_IRQ, 5); + + if(TRUE == SOCPS_DsleepWakeStatusGet()) + { + app_dslp_wake(); + } + + wlan_network(); + + uint8_t* efuse = (uint8_t*)malloc(1024); + device_mutex_lock(RT_DEV_LOCK_EFUSE); + EFUSE_LMAP_READ(efuse); + device_mutex_unlock(RT_DEV_LOCK_EFUSE); + memcpy(wmac, efuse + 0x11A, 6); + free(efuse); + current_fw_idx = ota_get_cur_index(); + + app_start_autoicg(); + //app_shared_btmem(ENABLE); + + app_pmu_init(); + + if((BKUP_Read(0) & BIT_KEY_ENABLE)) + app_keyscan_init(FALSE); /* 5uA */ + if((BKUP_Read(0) & BIT_CAPTOUCH_ENABLE)) + app_captouch_init(); /* 1uA */ + //if ((BKUP_Read(0) & BIT_GPIO_ENABLE)) + // app_hp_jack_init(); + + xTaskCreate( + obk_task, + "OpenBeken", + 8 * 256, + NULL, + tskIDLE_PRIORITY + 6, + NULL); + + //DBG_8195A("M4U:%d \n", RTIM_GetCount(TIMM05)); + /* Enable Schedule, Start Kernel */ + vTaskStartScheduler(); +} diff --git a/platforms/RTL87X0C/OpenBeken.mk b/platforms/RTL87X0C/OpenBeken.mk index cd303ea6e..d41ee21fa 100644 --- a/platforms/RTL87X0C/OpenBeken.mk +++ b/platforms/RTL87X0C/OpenBeken.mk @@ -28,12 +28,12 @@ SRC_C += $(OBK_DIR)/src/devicegroups/deviceGroups_util.c SRC_C += $(OBK_DIR)/src/devicegroups/deviceGroups_write.c SRC_C += $(OBK_DIR)/src/driver/drv_main.c #SRC_C += $(OBK_DIR)/src/hal/realtek/rtl87x0c/hal_adc_rtl87x0c.c -SRC_C += $(OBK_DIR)/src/hal/realtek/rtl87x0c/hal_generic_rtl87x0c.c #SRC_C += $(OBK_DIR)/src/hal/realtek/rtl87x0c/hal_main_rtl87x0c.c SRC_C += $(OBK_DIR)/src/hal/realtek/rtl87x0c/hal_pins_rtl87x0c.c SRC_C += $(OBK_DIR)/src/hal/realtek/rtl87x0c/hal_uart_rtl87x0c.c SRC_C += $(OBK_DIR)/src/hal/realtek/hal_flashConfig_realtek.c SRC_C += $(OBK_DIR)/src/hal/realtek/hal_flashVars_realtek.c +SRC_C += $(OBK_DIR)/src/hal/realtek/hal_generic_realtek.c SRC_C += $(OBK_DIR)/src/hal/realtek/hal_pins_realtek.c SRC_C += $(OBK_DIR)/src/hal/realtek/hal_wifi_realtek.c SRC_C += $(OBK_DIR)/src/hal/generic/hal_adc_generic.c @@ -128,6 +128,7 @@ SRC_C += $(OBK_DIR)/src/driver/drv_uart.c SRC_C += $(OBK_DIR)/src/driver/drv_ucs1912.c SRC_C += $(OBK_DIR)/src/driver/drv_wemo.c SRC_C += $(OBK_DIR)/src/driver/drv_ds1820_simple.c +SRC_C += $(OBK_DIR)/src/driver/drv_uart_tcp.c #SRC_C += $(OBK_DIR)/src/httpclient/http_client.c #SRC_C += $(OBK_DIR)/src/httpclient/utils_net.c #SRC_C += $(OBK_DIR)/src/httpclient/utils_timer.c diff --git a/platforms/RTL87X0C/main.c b/platforms/RTL87X0C/main.c index 0a5f85336..9eb6fdb51 100644 --- a/platforms/RTL87X0C/main.c +++ b/platforms/RTL87X0C/main.c @@ -21,6 +21,7 @@ void print_wlan_help(void* arg) {} void hci_tp_close(void) {} void sys_task1(void* pvParameters) { + vTaskDelay(50 / portTICK_PERIOD_MS); Main_Init(); for(;;) { diff --git a/sdk/OpenRTL8720D b/sdk/OpenRTL8720D new file mode 160000 index 000000000..7a30c20f8 --- /dev/null +++ b/sdk/OpenRTL8720D @@ -0,0 +1 @@ +Subproject commit 7a30c20f85cdad6eaaaac4a8d856e321cc7149e6 diff --git a/src/cmnds/cmd_main.c b/src/cmnds/cmd_main.c index 06fec7fe2..3b878dba6 100644 --- a/src/cmnds/cmd_main.c +++ b/src/cmnds/cmd_main.c @@ -529,7 +529,7 @@ static commandResult_t CMD_SafeMode(const void* context, const char* cmd, const void CMD_UARTConsole_Init() { #if PLATFORM_BEKEN - UART_InitUART(115200, 0); + UART_InitUART(115200, 0, false); cmd_uartInitIndex = get_g_uart_init_counter; UART_InitReceiveRingBuffer(512); #endif diff --git a/src/driver/drv_bl0942.c b/src/driver/drv_bl0942.c index 5f6b151a1..efc0a23b2 100644 --- a/src/driver/drv_bl0942.c +++ b/src/driver/drv_bl0942.c @@ -333,7 +333,7 @@ void BL0942_UART_Init(void) { bl0942_baudRate = Tokenizer_GetArgIntegerDefault(1, 4800); - UART_InitUART(bl0942_baudRate, 0); + UART_InitUART(bl0942_baudRate, 0, false); UART_InitReceiveRingBuffer(BL0942_UART_RECEIVE_BUFFER_SIZE); UART_WriteReg(BL0942_REG_USR_WRPROT, BL0942_USR_WRPROT_DISABLE); @@ -346,7 +346,7 @@ void BL0942_UART_InitEx(int auartindex) { bl0942_baudRate = Tokenizer_GetArgIntegerDefault(1, 4800); - UART_InitUARTEx(auartindex, bl0942_baudRate, 0); + UART_InitUARTEx(auartindex, bl0942_baudRate, 0, false); UART_InitReceiveRingBufferEx(auartindex, BL0942_UART_RECEIVE_BUFFER_SIZE); UART_WriteReg(auartindex, BL0942_REG_USR_WRPROT, BL0942_USR_WRPROT_DISABLE); @@ -374,7 +374,7 @@ void BL0942_UART_Init(void) { void BL0942_UART_RunEverySecondEx(int adeviceindex, int auartindex) { BL0942_UART_TryToGetNextPacket(adeviceindex, auartindex); - UART_InitUARTEx(auartindex, bl0942_baudRate, 0); + UART_InitUARTEx(auartindex, bl0942_baudRate, 0, false); UART_SendByteEx(auartindex, BL0942_UART_CMD_READ(BL0942_UART_ADDR)); UART_SendByteEx(auartindex, BL0942_UART_REG_PACKET); } @@ -398,12 +398,12 @@ void BL0942_UART_RunEverySecond(void) { #if ENABLE_BL_TWIN int fuartindex = UART_GetSelectedPortIndex(); BL0942_UART_TryToGetNextPacket(BL0942_DEVICE_INDEX_0, fuartindex); - UART_InitUARTEx(fuartindex, bl0942_baudRate, 0); + UART_InitUARTEx(fuartindex, bl0942_baudRate, 0, false); UART_SendByteEx(fuartindex, BL0942_UART_CMD_READ(BL0942_UART_ADDR)); UART_SendByteEx(fuartindex, BL0942_UART_REG_PACKET); #else BL0942_UART_TryToGetNextPacket(); - UART_InitUART(bl0942_baudRate, 0); + UART_InitUART(bl0942_baudRate, 0, false); UART_SendByte(BL0942_UART_CMD_READ(BL0942_UART_ADDR)); UART_SendByte(BL0942_UART_REG_PACKET); #endif diff --git a/src/driver/drv_cse7766.c b/src/driver/drv_cse7766.c index acbf4e30d..ea58edca6 100644 --- a/src/driver/drv_cse7766.c +++ b/src/driver/drv_cse7766.c @@ -212,7 +212,7 @@ void CSE7766_Init(void) { PwrCal_Init(PWR_CAL_MULTIPLY, DEFAULT_VOLTAGE_CAL, DEFAULT_CURRENT_CAL, DEFAULT_POWER_CAL); - UART_InitUART(CSE7766_BAUD_RATE, 0); + UART_InitUART(CSE7766_BAUD_RATE, 0, false); UART_InitReceiveRingBuffer(512); } diff --git a/src/driver/drv_hgs02.c b/src/driver/drv_hgs02.c index 80e2ff825..c1abc899c 100644 --- a/src/driver/drv_hgs02.c +++ b/src/driver/drv_hgs02.c @@ -80,12 +80,12 @@ static int HGS02_TryToGetNextPacket(void) { void HGS02_Init(void) { hgs02_baudRate = Tokenizer_GetArgIntegerDefault(1, 115200); - UART_InitUART(hgs02_baudRate, 0); + UART_InitUART(hgs02_baudRate, 0, false); UART_InitReceiveRingBuffer(HGS02_RECEIVE_BUFFER_SIZE); } void HGS02_RunEverySecond(void) { HGS02_TryToGetNextPacket(); - UART_InitUART(hgs02_baudRate, 0); + UART_InitUART(hgs02_baudRate, 0, false); } diff --git a/src/driver/drv_rn8209.c b/src/driver/drv_rn8209.c index 293a5dcd4..ce7fb8b48 100644 --- a/src/driver/drv_rn8209.c +++ b/src/driver/drv_rn8209.c @@ -96,7 +96,7 @@ static bool RN8029_ReadReg(byte reg, unsigned int *res) { #define DEFAULT_POWER_CAL 71572720 // startDriver RN8209 void RN8209_Init(void) { - UART_InitUART(4800, 1); + UART_InitUART(4800, 1, false); UART_InitReceiveRingBuffer(256); BL_Shared_Init(); diff --git a/src/driver/drv_tuyaMCU.c b/src/driver/drv_tuyaMCU.c index 9c620da47..b74c8457f 100644 --- a/src/driver/drv_tuyaMCU.c +++ b/src/driver/drv_tuyaMCU.c @@ -440,7 +440,7 @@ void TuyaMCU_SendCommandWithData(byte cmdType, byte* data, int payload_len) { byte check_sum = (0xFF + cmdType + (payload_len >> 8) + (payload_len & 0xFF)); - UART_InitUART(g_baudRate, 0); + UART_InitUART(g_baudRate, 0, false); if (CFG_HasFlag(OBK_FLAG_TUYAMCU_USE_QUEUE)) { tuyaMCUPacket_t *p = TUYAMCU_AddToQueue(payload_len + 4); p->data[0] = cmdType; @@ -2291,7 +2291,7 @@ commandResult_t TuyaMCU_SetBaudRate(const void* context, const char* cmd, const } g_baudRate = Tokenizer_GetArgInteger(0); - UART_InitUART(g_baudRate, 0); + UART_InitUART(g_baudRate, 0, false); return CMD_RES_OK; } @@ -2378,7 +2378,7 @@ void TuyaMCU_Init() g_tuyaMCUpayloadBuffer = (byte*)malloc(TUYAMCU_BUFFER_SIZE); } - UART_InitUART(g_baudRate, 0); + UART_InitUART(g_baudRate, 0, false); UART_InitReceiveRingBuffer(1024); // uartSendHex 55AA0008000007 //cmddetail:{"name":"tuyaMcu_testSendTime","args":"", diff --git a/src/driver/drv_uart.c b/src/driver/drv_uart.c index 5ad39767f..2bd0b61db 100644 --- a/src/driver/drv_uart.c +++ b/src/driver/drv_uart.c @@ -247,21 +247,21 @@ void UART_ResetForSimulator() { } } -int UART_InitUARTEx(int auartindex, int baud, int parity) +int UART_InitUARTEx(int auartindex, int baud, int parity, bool hwflowc) { uartbuf_t* fuartbuf = UART_GetBufFromPort(auartindex); fuartbuf->g_uart_init_counter++; #ifdef UART_2_UARTS_CONCURRENT - HAL_UART_InitEx(auartindex, baud, parity); + HAL_UART_InitEx(auartindex, baud, parity, hwflowc); #else - HAL_UART_Init(baud, parity); + HAL_UART_Init(baud, parity, hwflowc); #endif return fuartbuf->g_uart_init_counter; } -int UART_InitUART(int baud, int parity) { +int UART_InitUART(int baud, int parity, bool hwflowc) { int fuartindex = UART_GetSelectedPortIndex(); - return UART_InitUARTEx(fuartindex, baud, parity); + return UART_InitUARTEx(fuartindex, baud, parity, hwflowc); } void UART_LogBufState(int auartindex) { @@ -319,7 +319,7 @@ commandResult_t CMD_UART_Init(const void *context, const char *cmd, const char * UART_InitReceiveRingBufferEx(fuartindex, UART_DEFAULT_BUFIZE); - UART_InitUARTEx(fuartindex, baud, 0); + UART_InitUARTEx(fuartindex, baud, 0, false); uartbuf_t* fuartbuf = UART_GetBufFromPort(fuartindex); fuartbuf->g_uart_manualInitCounter = fuartbuf->g_uart_init_counter; diff --git a/src/driver/drv_uart.h b/src/driver/drv_uart.h index e527cf903..91e78f1f0 100644 --- a/src/driver/drv_uart.h +++ b/src/driver/drv_uart.h @@ -12,7 +12,7 @@ byte UART_GetByte(int idx); void UART_ConsumeBytes(int idx); void UART_AppendByteToReceiveRingBuffer(int rc); void UART_SendByte(byte b); -int UART_InitUART(int baud, int parity); +int UART_InitUART(int baud, int parity, bool hwflowc); void UART_AddCommands(); void UART_RunEverySecond(); @@ -40,6 +40,6 @@ int UART_GetDataSizeEx(int auartindex); byte UART_GetByteEx(int auartindex, int idx); void UART_ConsumeBytesEx(int auartindex, int idx); void UART_SendByteEx(int auartindex, byte b); -int UART_InitUARTEx(int auartindex, int baud, int parity); +int UART_InitUARTEx(int auartindex, int baud, int parity, bool hwflowc); void UART_LogBufState(int auartindex); diff --git a/src/driver/drv_uart_tcp.c b/src/driver/drv_uart_tcp.c index 34904d54c..3551bd9d6 100644 --- a/src/driver/drv_uart_tcp.c +++ b/src/driver/drv_uart_tcp.c @@ -11,13 +11,21 @@ #define DEFAULT_BUF_SIZE 512 #define DEFAULT_UART_TCP_PORT 8888 #define INVALID_SOCK -1 -#define UTCP_DEBUG 1 - +#ifndef UTCP_DEBUG +#define UTCP_DEBUG 0 +#endif +#if UTCP_DEBUG +#define STACK_SIZE 8192 +#else +#define STACK_SIZE 3584 +#endif +extern int Main_HasWiFiConnected(); static uint16_t buf_size = DEFAULT_BUF_SIZE; -static int g_tx_channel = -1; +static int g_conn_channel = -1; static int g_baudRate = 115200; static int listen_sock = INVALID_SOCK; static int client_sock = INVALID_SOCK; +static xTaskHandle g_start_thread = NULL; static xTaskHandle g_trx_thread = NULL; static xTaskHandle g_rx_thread = NULL; static xTaskHandle g_tx_thread = NULL; @@ -25,6 +33,7 @@ static bool rx_closed, tx_closed; static byte* g_utcpBuf = 0; void Start_UART_TCP(void* arg); +void UART_TCP_Deinit(); static void UTCP_TX_Thd(void* param) { @@ -36,9 +45,11 @@ static void UTCP_TX_Thd(void* param) int delay = 0; memset(g_utcpBuf, 0, buf_size); int len = UART_GetDataSize(); + + if(client_fd == INVALID_SOCK) goto exit; while(len < buf_size && delay < 10) { - rtos_delay_milliseconds(5); + rtos_delay_milliseconds(1); len = UART_GetDataSize(); delay++; } @@ -74,13 +85,13 @@ static void UTCP_TX_Thd(void* param) if(ret <= 0) goto exit; - rtos_delay_milliseconds(20); + rtos_delay_milliseconds(5); } exit: ADDLOG_DEBUG(LOG_FEATURE_DRV, "UTCP_TX_Thd closed"); tx_closed = true; - rtos_delete_thread(NULL); + rtos_suspend_thread(NULL); } static void UTCP_RX_Thd(void* param) @@ -92,6 +103,7 @@ static void UTCP_RX_Thd(void* param) { int ret = 0; + if(client_fd == INVALID_SOCK) goto exit; ret = recv(client_fd, buffer, sizeof(buffer), 0); if(ret > 0) { @@ -105,12 +117,10 @@ static void UTCP_RX_Thd(void* param) } ADDLOG_EXTRADEBUG(LOG_FEATURE_DRV, "%d bytes TCP RX->UART TX: %s", ret, data); #endif - if(g_tx_channel >= 0) CHANNEL_Set(g_tx_channel, 1, CHANNEL_SET_FLAG_SKIP_MQTT | CHANNEL_SET_FLAG_SILENT); for(int i = 0; i < ret; i++) { UART_SendByte(buffer[i]); } - if(g_tx_channel >= 0) CHANNEL_Set(g_tx_channel, 0, CHANNEL_SET_FLAG_SKIP_MQTT | CHANNEL_SET_FLAG_SILENT); } else if(tx_closed) { @@ -126,13 +136,13 @@ static void UTCP_RX_Thd(void* param) goto exit; } - rtos_delay_milliseconds(10); + rtos_delay_milliseconds(5); } exit: ADDLOG_DEBUG(LOG_FEATURE_DRV, "UTCP_RX_Thd closed"); rx_closed = true; - rtos_delete_thread(NULL); + rtos_suspend_thread(NULL); } void UART_TCP_TRX_Thread() @@ -187,13 +197,18 @@ void UART_TCP_TRX_Thread() client_sock = accept(listen_sock, (struct sockaddr*)&source_addr, &addr_len); if(client_sock != INVALID_SOCK) { + if(g_conn_channel >= 0) CHANNEL_Set(g_conn_channel, 1, CHANNEL_SET_FLAG_SKIP_MQTT | CHANNEL_SET_FLAG_SILENT); rx_closed = true; tx_closed = true; - err = rtos_create_thread(&g_tx_thread, tskIDLE_PRIORITY + 1, + if(g_tx_thread != NULL) + { + rtos_delete_thread(&g_tx_thread); + } + err = rtos_create_thread(&g_tx_thread, BEKEN_APPLICATION_PRIORITY - 1, "UTCP_TX_Thd", (beken_thread_function_t)UTCP_TX_Thd, - 0x800, + STACK_SIZE, (beken_thread_arg_t)&client_sock); if(err != kNoErr) { @@ -201,12 +216,16 @@ void UART_TCP_TRX_Thread() } else tx_closed = false; - rtos_delay_milliseconds(10); + //rtos_delay_milliseconds(10); - err = rtos_create_thread(&g_rx_thread, tskIDLE_PRIORITY + 1, + if(g_rx_thread != NULL) + { + rtos_delete_thread(&g_rx_thread); + } + err = rtos_create_thread(&g_rx_thread, BEKEN_APPLICATION_PRIORITY - 1, "UTCP_RX_Thd", (beken_thread_function_t)UTCP_RX_Thd, - 0x800, + STACK_SIZE, (beken_thread_arg_t)&client_sock); if(err != kNoErr) { @@ -220,36 +239,44 @@ void UART_TCP_TRX_Thread() { close(client_sock); ADDLOG_DEBUG(LOG_FEATURE_DRV, "UART TCP connection closed", err); + if(g_conn_channel >= 0) CHANNEL_Set(g_conn_channel, 0, CHANNEL_SET_FLAG_SKIP_MQTT | CHANNEL_SET_FLAG_SILENT); break; } - else rtos_delay_milliseconds(50); + else + { + if(!Main_HasWiFiConnected()) goto error; + rtos_delay_milliseconds(10); + } } } + rtos_delay_milliseconds(10); } error: ADDLOG_ERROR(LOG_FEATURE_DRV, "UART TCP Error"); - if(listen_sock != INVALID_SOCK) close(listen_sock); - if(client_sock != INVALID_SOCK) close(client_sock); - - xTaskCreate( - (TaskFunction_t)Start_UART_TCP, + if(g_start_thread != NULL) + { + rtos_delete_thread(&g_start_thread); + } + err = rtos_create_thread(&g_start_thread, BEKEN_APPLICATION_PRIORITY, "UART TCP Restart", - 2048 / sizeof(StackType_t), - NULL, - BEKEN_APPLICATION_PRIORITY, - NULL); + (beken_thread_function_t)Start_UART_TCP, + 0x800, + (beken_thread_arg_t)0); + if(err != kNoErr) + { + ADDLOG_ERROR(LOG_FEATURE_DRV, "create \"UART TCP Restart\" thread failed with %i!\r\n", err); + } } void Start_UART_TCP(void* arg) { - if(g_trx_thread != NULL) - { - rtos_delete_thread(&g_trx_thread); - } + UART_TCP_Deinit(); - OSStatus err = rtos_create_thread(&g_trx_thread, tskIDLE_PRIORITY + 1, + g_utcpBuf = (byte*)os_malloc(buf_size); + + OSStatus err = rtos_create_thread(&g_trx_thread, BEKEN_APPLICATION_PRIORITY, "UART_TCP_TRX", (beken_thread_function_t)UART_TCP_TRX_Thread, 0x800, @@ -258,23 +285,27 @@ void Start_UART_TCP(void* arg) { ADDLOG_ERROR(LOG_FEATURE_DRV, "create \"UART_TCP_TRX\" thread failed with %i!\r\n", err); } - vTaskDelete(NULL); + rtos_suspend_thread(NULL); } -// startDriver UartTCP [baudrate] [buffer size] [tx action channel] -// tx action channel is for led. +// startDriver UartTCP [baudrate] [buffer size] [connection channel] [hw flow control] +// connection is for led, -1 if not used. void UART_TCP_Init() { g_baudRate = Tokenizer_GetArgIntegerDefault(1, g_baudRate); uint32_t reqbufsize = Tokenizer_GetArgIntegerDefault(2, DEFAULT_BUF_SIZE); buf_size = reqbufsize > 16384 ? 16384 : reqbufsize; - g_tx_channel = Tokenizer_GetArgIntegerDefault(3, -1); + g_conn_channel = Tokenizer_GetArgIntegerDefault(3, -1); + int flowcontrol = Tokenizer_GetArgIntegerDefault(4, 0); - UART_InitUART(g_baudRate, 0); + UART_InitUART(g_baudRate, 0, flowcontrol > 0 ? true : false); UART_InitReceiveRingBuffer(buf_size * 2); - g_utcpBuf = (byte*)malloc(buf_size); - OSStatus err = rtos_create_thread(NULL, BEKEN_APPLICATION_PRIORITY, + if(g_start_thread != NULL) + { + rtos_delete_thread(&g_start_thread); + } + OSStatus err = rtos_create_thread(&g_start_thread, BEKEN_APPLICATION_PRIORITY, "UART_TCP", (beken_thread_function_t)Start_UART_TCP, 0x800, @@ -292,18 +323,22 @@ void UART_TCP_Deinit() rtos_delete_thread(&g_trx_thread); g_trx_thread = NULL; } - if(!rx_closed) + if(g_rx_thread != NULL) { + rx_closed = true; rtos_delete_thread(&g_rx_thread); g_rx_thread = NULL; } - if(!tx_closed) + if(g_tx_thread != NULL) { + tx_closed = true; rtos_delete_thread(&g_tx_thread); g_tx_thread = NULL; } - rtos_delay_milliseconds(200); if(g_utcpBuf) free(g_utcpBuf); + + if(listen_sock != INVALID_SOCK) close(listen_sock); + if(client_sock != INVALID_SOCK) close(client_sock); } #endif \ No newline at end of file diff --git a/src/hal/bk7231/hal_uart_bk7231.c b/src/hal/bk7231/hal_uart_bk7231.c index 4c29f90b9..d3cdc8bbc 100644 --- a/src/hal/bk7231/hal_uart_bk7231.c +++ b/src/hal/bk7231/hal_uart_bk7231.c @@ -28,7 +28,7 @@ void HAL_UART_SendByteEx(int auartindex, byte b) bk_send_byte(bk_port_from_portindex(auartindex), b); } -int HAL_UART_InitEx(int auartindex, int baud, int parity) +int HAL_UART_InitEx(int auartindex, int baud, int parity, bool hwflowc) { bk_uart_config_t config; @@ -36,7 +36,7 @@ int HAL_UART_InitEx(int auartindex, int baud, int parity) config.data_width = 0x03; config.parity = parity; //0:no parity,1:odd,2:even config.stop_bits = 0; //0:1bit,1:2bit - config.flow_control = 0; //FLOW_CTRL_DISABLED + config.flow_control = hwflowc == false ? 0 : 3; //FLOW_CTRL_DISABLED or FLOW_CTRL_RTS_CTS config.flags = 0; int g_chosenUART=bk_port_from_portindex(auartindex); diff --git a/src/hal/bl602/hal_uart_bl602.c b/src/hal/bl602/hal_uart_bl602.c index 1202c7d79..2845c623b 100644 --- a/src/hal/bl602/hal_uart_bl602.c +++ b/src/hal/bl602/hal_uart_bl602.c @@ -127,7 +127,7 @@ void HAL_UART_SendByte(byte b) //bl_uart_data_send(g_id, b); } -int HAL_UART_Init(int baud, int parity) +int HAL_UART_Init(int baud, int parity, bool hwflowc) { if(fd_console < 0) { diff --git a/src/hal/espidf/hal_uart_espidf.c b/src/hal/espidf/hal_uart_espidf.c index ab4e453e1..4d3cba75e 100644 --- a/src/hal/espidf/hal_uart_espidf.c +++ b/src/hal/espidf/hal_uart_espidf.c @@ -62,7 +62,7 @@ void HAL_UART_SendByte(byte b) uart_write_bytes(uartnum, &b, 1); } -int HAL_UART_Init(int baud, int parity) +int HAL_UART_Init(int baud, int parity, bool hwflowc) { if(CFG_HasFlag(OBK_FLAG_USE_SECONDARY_UART)) { diff --git a/src/hal/generic/hal_uart_generic.c b/src/hal/generic/hal_uart_generic.c index b049c2325..25b57dd96 100644 --- a/src/hal/generic/hal_uart_generic.c +++ b/src/hal/generic/hal_uart_generic.c @@ -5,7 +5,7 @@ void __attribute__((weak)) HAL_UART_SendByte(byte b) } -int __attribute__((weak)) HAL_UART_Init(int baud, int parity) +int __attribute__((weak)) HAL_UART_Init(int baud, int parity, bool hwflowc) { return 0; } \ No newline at end of file diff --git a/src/hal/hal_uart.h b/src/hal/hal_uart.h index 09dbce66d..8cf97e3fc 100644 --- a/src/hal/hal_uart.h +++ b/src/hal/hal_uart.h @@ -8,9 +8,9 @@ #ifdef UART_2_UARTS_CONCURRENT void HAL_UART_SendByteEx(int auartindex, byte b); -int HAL_UART_InitEx(int auartindex, int baud, int parity); +int HAL_UART_InitEx(int auartindex, int baud, int parity, bool hwflowc); #else void HAL_UART_SendByte(byte b); -int HAL_UART_Init(int baud, int parity); +int HAL_UART_Init(int baud, int parity, bool hwflowc); #endif \ No newline at end of file diff --git a/src/hal/realtek/rtl8710b/hal_generic_rtl8710b.c b/src/hal/realtek/hal_generic_realtek.c similarity index 50% rename from src/hal/realtek/rtl8710b/hal_generic_rtl8710b.c rename to src/hal/realtek/hal_generic_realtek.c index b1784af4d..29cd4e951 100644 --- a/src/hal/realtek/rtl8710b/hal_generic_rtl8710b.c +++ b/src/hal/realtek/hal_generic_realtek.c @@ -1,19 +1,29 @@ -#ifdef PLATFORM_RTL8710B +#ifdef PLATFORM_REALTEK -#include "../../hal_generic.h" +#include "../hal_generic.h" #include "sys_api.h" +#ifdef PLATFORM_RTL8710B extern int g_sleepfactor; +#define haldelay delay * g_sleepfactor +#else +#define haldelay delay +#endif void HAL_RebootModule() { - //sys_cpu_reset(); ota_platform_reset(); } void HAL_Delay_us(int delay) { - DelayUs(delay * g_sleepfactor); +#if PLATFORM_RTL87X0C + hal_delay_us(delay); +#elif PLATFORM_RTL8710A + HalDelayUs(delay); +#else + DelayUs(haldelay); +#endif } void HAL_Configure_WDT() @@ -27,4 +37,4 @@ void HAL_Run_WDT() watchdog_refresh(); } -#endif // PLATFORM_RTL8710B +#endif // PLATFORM_REALTEK diff --git a/src/hal/realtek/hal_pins_realtek.c b/src/hal/realtek/hal_pins_realtek.c index ed9cb838d..83c4e3357 100644 --- a/src/hal/realtek/hal_pins_realtek.c +++ b/src/hal/realtek/hal_pins_realtek.c @@ -137,7 +137,7 @@ void HAL_PIN_PWM_Update(int index, float value) rtlPinMapping_t* pin = g_pins + index; #ifdef PLATFORM_RTL87X0C if(pin->pwm == NULL || !pin->pwm->is_init) return; -#elif PLATFORM_RTL8710B +#else if(pin->pwm == NULL) return; #endif pwmout_write(pin->pwm, value / 100); diff --git a/src/hal/realtek/hal_wifi_realtek.c b/src/hal/realtek/hal_wifi_realtek.c index 2bedff824..e045732f5 100644 --- a/src/hal/realtek/hal_wifi_realtek.c +++ b/src/hal/realtek/hal_wifi_realtek.c @@ -2,7 +2,7 @@ #include "../hal_wifi.h" #include "../../new_cfg.h" -#include "../../new_cfg.h" +#include "../../new_common.h" #include "../../logging/logging.h" #include #include @@ -11,8 +11,13 @@ #include #include "tcpip.h" #include +#include extern struct netif xnetif[NET_IF_NUM]; +extern void InitEasyFlashIfNeeded(); +extern int wifi_change_mac_address_from_ram(int idx, uint8_t* mac); +extern int wifi_scan_networks_with_ssid_by_extended_security(int (results_handler)(char* buf, int buflen, char* ssid, void* user_data), + void* user_data, int scan_buflen, char* ssid, int ssid_len); typedef struct { @@ -28,15 +33,18 @@ static wifi_data_t wdata = { 0 }; extern uint8_t wmac[6]; extern bool g_powersave; static int g_bStaticIP = 0; +static char g_IP[16] = "unknown"; +static char g_GW[16] = "unknown"; +static char g_MS[16] = "unknown"; const char* HAL_GetMyIPString() { - return ipaddr_ntoa((const ip4_addr_t*)&xnetif[g_bOpenAccessPointMode].ip_addr.addr); + return g_IP; } const char* HAL_GetMyGatewayString() { - return ipaddr_ntoa((const ip4_addr_t*)&xnetif[g_bOpenAccessPointMode].gw.addr); + return g_GW; } const char* HAL_GetMyDNSString() @@ -46,17 +54,36 @@ const char* HAL_GetMyDNSString() const char* HAL_GetMyMaskString() { - return ipaddr_ntoa((const ip4_addr_t*)&xnetif[g_bOpenAccessPointMode].netmask.addr); + return g_MS; } int WiFI_SetMacAddress(char* mac) { printf("WiFI_SetMacAddress\r\n"); +#ifdef PLATFORM_RTL8720D + InitEasyFlashIfNeeded(); + wifi_change_mac_address_from_ram(0, (uint8_t*)mac); + return ef_set_env_blob("rtlmac", mac, sizeof(wmac)); +#endif return 0; // error } void WiFI_GetMacAddress(char* mac) { +#ifdef PLATFORM_RTL8720D + //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)) + { + InitEasyFlashIfNeeded(); + uint8_t fmac[6] = { 0 }; + int readLen = ef_get_env_blob("rtlmac", &fmac, sizeof(fmac), NULL); + if(readLen) + { + wifi_change_mac_address_from_ram(0, fmac); + memcpy(wmac, fmac, sizeof(fmac)); + } + } +#endif memcpy(mac, (char*)wmac, sizeof(wmac)); } @@ -94,14 +121,15 @@ void HAL_WiFi_SetupStatusCallback(void (*cb)(int code)) g_wifiStatusCallback = cb; } -static int _find_ap_from_scan_buf(char* buf, int buflen, char* target_ssid, void* user_data) +int obk_find_ap_from_scan_buf(char* buf, int buflen, char* target_ssid, void* user_data) { rtw_wifi_setting_t* pwifi = (rtw_wifi_setting_t*)user_data; int plen = 0; while(plen < buflen) { - u8 len, ssid_len, security_mode; + u8 len, ssid_len; + int security_mode; char* ssid; // len offset = 0 @@ -111,33 +139,15 @@ static int _find_ap_from_scan_buf(char* buf, int buflen, char* target_ssid, void { break; } - // ssid offset = 14 - ssid_len = len - 14; - ssid = buf + plen + 14; + ssid_len = len - BUFLEN_LEN - MAC_LEN - RSSI_LEN - SECURITY_LEN_EXTENDED - WPS_ID_LEN - CHANNEL_LEN; + ssid = buf + plen + BUFLEN_LEN + MAC_LEN + RSSI_LEN + SECURITY_LEN_EXTENDED + WPS_ID_LEN + CHANNEL_LEN; if((ssid_len == strlen(target_ssid)) && (!memcmp(ssid, target_ssid, ssid_len))) { strncpy((char*)pwifi->ssid, target_ssid, 33); - // channel offset = 13 - pwifi->channel = *(buf + plen + 13); - // security_mode offset = 11 - security_mode = (u8) * (buf + plen + 11); - if(security_mode == IW_ENCODE_ALG_NONE) - { - pwifi->security_type = RTW_SECURITY_OPEN; - } - else if(security_mode == IW_ENCODE_ALG_WEP) - { - pwifi->security_type = RTW_SECURITY_WEP_PSK; - } - else if(security_mode == IW_ENCODE_ALG_CCMP) - { - pwifi->security_type = RTW_SECURITY_WPA2_AES_PSK; - } - else if(security_mode == IW_ENCODE_ALG_OWE) - { - pwifi->security_type = RTW_SECURITY_WPA3_OWE; - } + pwifi->channel = *(buf + plen + BUFLEN_LEN + MAC_LEN + RSSI_LEN + SECURITY_LEN_EXTENDED + WPS_ID_LEN); + security_mode = *(int*)(buf + plen + BUFLEN_LEN + MAC_LEN + RSSI_LEN); + pwifi->security_type = security_mode; break; } plen += len; @@ -148,11 +158,11 @@ static int _find_ap_from_scan_buf(char* buf, int buflen, char* target_ssid, void static int _get_ap_security_mode(char* ssid, rtw_security_t* security_mode, u8* channel) { rtw_wifi_setting_t wifi; - u32 scan_buflen = 1000; + u32 scan_buflen = 1024; memset(&wifi, 0, sizeof(wifi)); - if(wifi_scan_networks_with_ssid(_find_ap_from_scan_buf, (void*)&wifi, scan_buflen, ssid, strlen(ssid)) != RTW_SUCCESS) + if(wifi_scan_networks_with_ssid_by_extended_security(obk_find_ap_from_scan_buf, (void*)&wifi, scan_buflen, ssid, strlen(ssid)) != RTW_SUCCESS) { printf("Wifi scan failed!\n"); return 0; @@ -173,14 +183,12 @@ void wifi_dis_hdl(u8* buf, u32 buf_len, u32 flags, void* userdata) if(g_wifiStatusCallback != NULL) { g_wifiStatusCallback(WIFI_STA_DISCONNECTED); - } -} - -void wifi_con_hdl(u8* buf, u32 buf_len, u32 flags, void* userdata) -{ - if(g_wifiStatusCallback != NULL) - { - g_wifiStatusCallback(WIFI_STA_CONNECTING); + memset(&g_IP, 0, 16); + memset(&g_GW, 0, 16); + memset(&g_MS, 0, 16); + strcpy(&g_IP, "unknown"); + strcpy(&g_GW, "unknown"); + strcpy(&g_MS, "unknown"); } } @@ -189,6 +197,12 @@ void wifi_conned_hdl(u8* buf, u32 buf_len, u32 flags, void* userdata) if(g_wifiStatusCallback != NULL) { g_wifiStatusCallback(WIFI_STA_CONNECTED); + memset(&g_IP, 0, 16); + memset(&g_GW, 0, 16); + memset(&g_MS, 0, 16); + strcpy(&g_IP, ipaddr_ntoa((const ip4_addr_t*)&xnetif[g_bOpenAccessPointMode].ip_addr.addr)); + strcpy(&g_GW, ipaddr_ntoa((const ip4_addr_t*)&xnetif[g_bOpenAccessPointMode].gw.addr)); + strcpy(&g_MS, ipaddr_ntoa((const ip4_addr_t*)&xnetif[g_bOpenAccessPointMode].netmask.addr)); } } @@ -215,7 +229,7 @@ void ConnectToWiFiTask(void* args) delay_ms(50); if(security_retry_count >= 5) { - printf("Can't get AP security mode and channel.\r\n"); + ADDLOG_ERROR(LOG_FEATURE_GENERAL, "Can't get AP security mode and channel."); goto exit; } } @@ -227,7 +241,7 @@ void ConnectToWiFiTask(void* args) strlen(wdata.pwd), NULL, NULL); if(ret != RTW_SUCCESS) { - printf("ERROR: Can't connect to AP\r\n"); + ADDLOG_ERROR(LOG_FEATURE_GENERAL, "Can't connect to AP"); goto exit; } if(g_bStaticIP == 0) { @@ -285,7 +299,7 @@ void HAL_ConnectToWiFi(const char* oob_ssid, const char* connect_key, obkStaticI "WC", 2048 / sizeof(StackType_t), NULL, - 5, + 9, NULL); } @@ -298,26 +312,31 @@ void HAL_DisconnectFromWifi() 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[0]; + struct netif* pnetif = &xnetif[mode == RTW_MODE_STA_AP ? 1 : 0]; dhcps_deinit(); wifi_off(); vTaskDelay(20); - if(wifi_on(RTW_MODE_AP) < 0) + if(wifi_on(mode) < 0) { - printf("wifi_on failed!\r\n"); + ADDLOG_ERROR(LOG_FEATURE_GENERAL, "Failed to enable wifi"); return 0; } if(wifi_start_ap((char*)ssid, RTW_SECURITY_OPEN, NULL, strlen(ssid), 0, 1) < 0) { - printf("wifi_start_ap failed!\r\n"); + 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); + strcpy(&g_IP, "192.168.4.1"); + strcpy(&g_GW, "192.168.4.1"); + strcpy(&g_MS, "255.255.255.0"); netif_set_addr(pnetif, ip_2_ip4(&ipaddr), ip_2_ip4(&netmask), ip_2_ip4(&gw)); dhcps_init(pnetif); return 0; diff --git a/src/hal/realtek/rtl8710a/hal_generic_rtl8710a.c b/src/hal/realtek/rtl8710a/hal_generic_rtl8710a.c deleted file mode 100644 index c5925569c..000000000 --- a/src/hal/realtek/rtl8710a/hal_generic_rtl8710a.c +++ /dev/null @@ -1,30 +0,0 @@ -#ifdef PLATFORM_RTL8710A - -#include "../../hal_generic.h" -#include "sys_api.h" - -extern int g_sleepfactor; - -void HAL_RebootModule() -{ - //sys_cpu_reset(); - ota_platform_reset(); -} - -void HAL_Delay_us(int delay) -{ - HalDelayUs(delay); -} - -void HAL_Configure_WDT() -{ - watchdog_init(10 * 1000); - watchdog_start(); -} - -void HAL_Run_WDT() -{ - watchdog_refresh(); -} - -#endif // PLATFORM_RTL8710A diff --git a/src/hal/realtek/rtl8710a/hal_uart_rtl8710a.c b/src/hal/realtek/rtl8710a/hal_uart_rtl8710a.c index aa3c0c6f7..41e601544 100644 --- a/src/hal/realtek/rtl8710a/hal_uart_rtl8710a.c +++ b/src/hal/realtek/rtl8710a/hal_uart_rtl8710a.c @@ -6,6 +6,8 @@ #include "serial_api.h" #define UART0_TX PA_7 #define UART0_RX PA_6 +#define UART0_RTS PA_3 +#define UART0_CTS PA_5 serial_t sobj; static bool isInitialized; @@ -26,7 +28,7 @@ void HAL_UART_SendByte(byte b) serial_putc(&sobj, b); } -int HAL_UART_Init(int baud, int parity) +int HAL_UART_Init(int baud, int parity, bool hwflowc) { if(isInitialized) { @@ -43,6 +45,10 @@ int HAL_UART_Init(int baud, int parity) serial_format(&sobj, 8, parity, 1); serial_irq_handler(&sobj, uart_cb, (uint32_t)&sobj); serial_irq_set(&sobj, RxIrq, 1); + if(hwflowc) + { + serial_set_flow_control(&sobj, FlowControlRTSCTS, UART0_RTS, UART0_CTS); + } isInitialized = true; return 1; } diff --git a/src/hal/realtek/rtl8710b/hal_uart_rtl8710b.c b/src/hal/realtek/rtl8710b/hal_uart_rtl8710b.c index 9299c841d..439aed817 100644 --- a/src/hal/realtek/rtl8710b/hal_uart_rtl8710b.c +++ b/src/hal/realtek/rtl8710b/hal_uart_rtl8710b.c @@ -7,6 +7,8 @@ #include "rtl8711b_uart.h" #define UART0_TX PA_23 #define UART0_RX PA_18 +#define UART0_RTS PA_22 +#define UART0_CTS PA_19 #define UART2_TX PA_30 #define UART2_RX PA_29 @@ -29,7 +31,7 @@ void HAL_UART_SendByte(byte b) serial_putc(&sobj, b); } -int HAL_UART_Init(int baud, int parity) +int HAL_UART_Init(int baud, int parity, bool hwflowc) { if(isInitialized) { @@ -46,6 +48,10 @@ int HAL_UART_Init(int baud, int parity) serial_format(&sobj, 8, parity, 1); serial_irq_handler(&sobj, uart_cb, (uint32_t)&sobj); serial_irq_set(&sobj, RxIrq, 1); + if(hwflowc) + { + serial_set_flow_control(&sobj, FlowControlRTSCTS, UART0_RTS, UART0_CTS); + } isInitialized = true; return 1; } diff --git a/src/hal/realtek/rtl8720d/hal_pins_rtl8720d.c b/src/hal/realtek/rtl8720d/hal_pins_rtl8720d.c new file mode 100644 index 000000000..053ce89f1 --- /dev/null +++ b/src/hal/realtek/rtl8720d/hal_pins_rtl8720d.c @@ -0,0 +1,83 @@ +#ifdef PLATFORM_RTL8720D + +#include "../hal_generic_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 }, +}; + +int g_numPins = sizeof(g_pins) / sizeof(g_pins[0]); + +int HAL_PIN_CanThisPinBePWM(int index) +{ + if(index >= g_numPins) + return 0; + rtlPinMapping_t* pin = g_pins + index; + if(pwmout_pin2chan(pin->pin) != NC) return 1; + return 0; +} + +#endif // PLATFORM_RTL8720D diff --git a/src/hal/realtek/rtl8720d/hal_uart_rtl8720d.c b/src/hal/realtek/rtl8720d/hal_uart_rtl8720d.c new file mode 100644 index 000000000..df171b182 --- /dev/null +++ b/src/hal/realtek/rtl8720d/hal_uart_rtl8720d.c @@ -0,0 +1,66 @@ +#ifdef PLATFORM_RTL8720D + +#include "../../../new_pins.h" +#include "../../../new_cfg.h" +#include "../../hal_uart.h" +#include "serial_api.h" +#include "rtl8721d_uart.h" +#define UART0_TX PA_18 +#define UART0_RX PA_19 +#define UART0_RTS PA_16 +#define UART0_CTS PA_17 +#define UART1_TX PA_12 +#define UART1_RX PA_13 +#define UART1_RTS PA_23 +#define UART1_CTS PA_24 +// log port +#define UART2_TX PA_7 +#define UART2_RX PA_8 + +serial_t sobj; +static bool isInitialized; + +static void uart_cb(uint32_t id, SerialIrq event) +{ + if(event != RxIrq) + return; + + serial_t* obj = (void*)id; + uint8_t c = (uint8_t)serial_getc(obj); + UART_AppendByteToReceiveRingBuffer(c); +} + +void HAL_UART_SendByte(byte b) +{ + while(!serial_writable(&sobj)); + serial_putc(&sobj, b); +} + +int HAL_UART_Init(int baud, int parity, bool hwflowc) +{ + 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; + rts = UART1_RTS; + cts = UART1_CTS; + } + 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) + { + serial_set_flow_control(&sobj, FlowControlRTSCTS, rts, cts); + } + isInitialized = true; + return 1; +} + +#endif \ No newline at end of file diff --git a/src/hal/realtek/rtl87x0c/hal_generic_rtl87x0c.c b/src/hal/realtek/rtl87x0c/hal_generic_rtl87x0c.c deleted file mode 100644 index 0a69fd6f4..000000000 --- a/src/hal/realtek/rtl87x0c/hal_generic_rtl87x0c.c +++ /dev/null @@ -1,29 +0,0 @@ -#ifdef PLATFORM_RTL87X0C - -#include "../../hal_generic.h" -#include "sys_api.h" -#include "hal_timer.h" -#include "hal_wdt.h" - -void HAL_RebootModule() -{ - sys_cpu_reset(); -} - -void HAL_Delay_us(int delay) -{ - hal_delay_us(delay); -} - -void HAL_Configure_WDT() -{ - hal_misc_wdt_init(10 * 1000 * 1000); - hal_misc_wdt_enable(); -} - -void HAL_Run_WDT() -{ - hal_misc_wdt_refresh(); -} - -#endif // PLATFORM_RTL87X0C diff --git a/src/hal/realtek/rtl87x0c/hal_uart_rtl87x0c.c b/src/hal/realtek/rtl87x0c/hal_uart_rtl87x0c.c index 7fe98d2d3..1fdd6332d 100644 --- a/src/hal/realtek/rtl87x0c/hal_uart_rtl87x0c.c +++ b/src/hal/realtek/rtl87x0c/hal_uart_rtl87x0c.c @@ -34,7 +34,7 @@ void HAL_UART_SendByte(byte b) hal_uart_putc(&sobj.uart_adp, b); } -int HAL_UART_Init(int baud, int parity) +int HAL_UART_Init(int baud, int parity, bool hwflowc) { if(isInitialized) { diff --git a/src/hal/w800/hal_uart_w800.c b/src/hal/w800/hal_uart_w800.c index 5eddaf6ec..cacfbdc83 100644 --- a/src/hal/w800/hal_uart_w800.c +++ b/src/hal/w800/hal_uart_w800.c @@ -39,7 +39,7 @@ void HAL_UART_SendByte(byte b) tls_uart_write(TLS_UART_1, (char*)&b, 1); } -int HAL_UART_Init(int baud, int parity) +int HAL_UART_Init(int baud, int parity, bool hwflowc) { struct tls_uart_options uart_opts; uart_opts.baudrate = baud; diff --git a/src/hal/win32/hal_uart_win32.c b/src/hal/win32/hal_uart_win32.c index e9cd0a806..40f660052 100644 --- a/src/hal/win32/hal_uart_win32.c +++ b/src/hal/win32/hal_uart_win32.c @@ -13,7 +13,7 @@ void HAL_UART_SendByte(byte b) //addLogAdv(LOG_INFO, LOG_FEATURE_TUYAMCU,"%02X", b); } -int HAL_UART_Init(int baud, int parity) +int HAL_UART_Init(int baud, int parity, bool hwflowc) { return 1; } diff --git a/src/httpserver/http_fns.c b/src/httpserver/http_fns.c index 3f682c06d..2416f79cd 100644 --- a/src/httpserver/http_fns.c +++ b/src/httpserver/http_fns.c @@ -20,8 +20,6 @@ #include "../driver/drv_ntp.h" #include "../driver/drv_local.h" -static char SUBMIT_AND_END_FORM[] = "
"; - #ifdef WINDOWS // nothing #elif PLATFORM_BL602 @@ -41,12 +39,16 @@ static char SUBMIT_AND_END_FORM[] = "
"; + const char* g_typesOffLowMidHigh[] = { "Off","Low","Mid","High" }; const char* g_typesOffLowMidHighHighest[] = { "Off", "Low","Mid","High","Highest" }; @@ -909,7 +913,7 @@ typedef enum { } hprintf255(request, "
Reboot reason: %i - %s
", reset_reason, s); hprintf255(request, "
Current fw: FW%i
", current_fw_idx); -#elif PLATFORM_RTL8710B +#elif PLATFORM_RTL8710B || PLATFORM_RTL8720D hprintf255(request, "
Current fw: FW%i
", current_fw_idx + 1); #endif #if ENABLE_MQTT @@ -1289,11 +1293,6 @@ int http_fn_cfg_wifi(http_request_t* request) { #ifdef WINDOWS poststr(request, "Not available on Windows
"); -#elif PLATFORM_XR809 - poststr(request, "TODO XR809
"); - -#elif PLATFORM_W600 || PLATFORM_W800 - poststr(request, "TODO W800
"); #elif PLATFORM_BL602 wifi_mgmr_ap_item_t *ap_info; uint32_t i, ap_num; @@ -1332,9 +1331,6 @@ int http_fn_cfg_wifi(http_request_t* request) { hprintf255(request, "[%i/%i] SSID: %s, Channel: %i, Signal %i
", i + 1, (int)num, ar[i].ssid, ar[i].channel, ar[i].rssi); } tuya_os_adapt_wifi_release_ap(ar); -#elif PLATFORM_LN882H -// TODO:LN882H action - poststr(request, "TODO LN882H
"); #elif PLATFORM_ESPIDF // doesn't work in ap mode, only sta/apsta uint16_t ap_count = 0, number = 30; @@ -1352,12 +1348,35 @@ int http_fn_cfg_wifi(http_request_t* request) { #elif PLATFORM_TR6260 poststr(request, "TODO TR6260
"); #elif defined(PLATFORM_REALTEK) - poststr(request, "TODO Realtek
"); -#elif PLATFORM_BEKEN_NEW - poststr(request, "TODO BEKEN_NEW
"); +#ifndef PLATFORM_RTL87X0C + extern void rltk_wlan_enable_scan_with_ssid_by_extended_security(bool); +#endif + + rtw_result_t scan_result_handler(rtw_scan_handler_result_t* result) + { + http_request_t* request = (http_request_t*)result->user_data; + + if(result->scan_complete == RTW_TRUE) + { + xSemaphoreGive(scan_hdl); + return RTW_SUCCESS; + } + rtw_scan_result_t* record = &result->ap_details; + record->SSID.val[record->SSID.len] = 0; + hprintf255(request, "SSID: %s, Channel: %i, Signal %i
", record->SSID.val, record->channel, record->signal_strength); + } + + scan_hdl = xSemaphoreCreateBinary(); + rltk_wlan_enable_scan_with_ssid_by_extended_security(1); + xSemaphoreTake(scan_hdl, 1); + if(wifi_scan_networks(scan_result_handler, request) != RTW_SUCCESS) + { + poststr(request, "Wifi scan failed!
"); + } + xSemaphoreTake(scan_hdl, pdMS_TO_TICKS(10 * 1000)); + vSemaphoreDelete(scan_hdl); #else -#error "Unknown platform" - poststr(request, "Unknown platform
"); + hprintf255(request, "TODO %s
", PLATFORM_MCU_NAME); #endif } poststr(request, "
\ @@ -2145,8 +2164,10 @@ void doHomeAssistantDiscovery(const char* topic, http_request_t* request) { } if (1) { //use -1 for channel as these don't correspond to channels +#ifndef NO_CHIP_TEMPERATURE dev_info = hass_init_sensor_device_info(HASS_TEMP, -1, -1, -1, 1); MQTT_QueuePublish(topic, dev_info->channel, hass_build_discovery_json(dev_info), OBK_PUBLISH_FLAG_RETAIN); +#endif dev_info = hass_init_sensor_device_info(HASS_RSSI, -1, -1, -1, 1); MQTT_QueuePublish(topic, dev_info->channel, hass_build_discovery_json(dev_info), OBK_PUBLISH_FLAG_RETAIN); hass_free_device_info(dev_info); @@ -3033,8 +3054,7 @@ void OTA_RequestDownloadFromHTTP(const char* s) { #elif PLATFORM_ESPIDF #elif PLATFORM_TR6260 -#elif PLATFORM_RTL87X0C -#elif PLATFORM_RTL8710B || PLATFORM_RTL8710A +#elif PLATFORM_REALTEK #elif PLATFORM_W600 || PLATFORM_W800 t_http_fwup(s); #elif PLATFORM_XR809 diff --git a/src/httpserver/new_http.c b/src/httpserver/new_http.c index 6db15e7eb..bbdac56c0 100644 --- a/src/httpserver/new_http.c +++ b/src/httpserver/new_http.c @@ -588,7 +588,7 @@ void setupAllWB2SPinsAsButtons() { // call with str == NULL to force send. - can be binary. // supply length int postany(http_request_t* request, const char* str, int len) { -#if PLATFORM_BL602 || PLATFORM_BEKEN_NEW +#if PLATFORM_BL602 || PLATFORM_BEKEN_NEW || PLATFORM_RTL8720D send(request->fd, str, len, 0); return 0; #else diff --git a/src/httpserver/new_tcp_server.c b/src/httpserver/new_tcp_server.c index 548f604d4..8ec9f99bf 100644 --- a/src/httpserver/new_tcp_server.c +++ b/src/httpserver/new_tcp_server.c @@ -237,6 +237,11 @@ static void tcp_server_thread(beken_thread_arg_t arg) { sock[new_idx].fd = accept(listen_sock, (struct sockaddr*)&source_addr, &addr_len); + struct timeval tv; + tv.tv_sec = 30; + tv.tv_usec = 0; + setsockopt(sock[new_idx].fd, SOL_SOCKET, SO_RCVTIMEO, (const char*)&tv, sizeof(tv)); + if(sock[new_idx].fd < 0) { switch(errno) diff --git a/src/httpserver/rest_interface.c b/src/httpserver/rest_interface.c index 73800c4e7..94d3769c2 100644 --- a/src/httpserver/rest_interface.c +++ b/src/httpserver/rest_interface.c @@ -58,14 +58,18 @@ uint32_t flash_read(uint32_t flash, uint32_t addr, void* buf, uint32_t size); #elif PLATFORM_ESPIDF -#elif PLATFORM_RTL87X0C +#elif PLATFORM_REALTEK #include "flash_api.h" #include "device_lock.h" -#include "ota_8710c.h" #include "sys_api.h" extern flash_t flash; + +#if PLATFORM_RTL87X0C + +#include "ota_8710c.h" + extern uint32_t sys_update_ota_get_curr_fw_idx(void); extern uint32_t sys_update_ota_prepare_addr(void); extern void sys_disable_fast_boot(void); @@ -74,26 +78,31 @@ static flash_t flash_ota; #elif PLATFORM_RTL8710B -#include "flash_api.h" -#include "device_lock.h" -#include "sys_api.h" #include "rtl8710b_ota.h" -extern flash_t flash; extern uint32_t current_fw_idx; #elif PLATFORM_RTL8710A -#include "flash_api.h" -#include "device_lock.h" -#include "sys_api.h" - -extern flash_t flash; extern uint32_t current_fw_idx; #undef DEFAULT_FLASH_LEN #define DEFAULT_FLASH_LEN 0x400000 +#elif PLATFORM_RTL8720D + +#include "rtl8721d_boot.h" +#include "rtl8721d_ota.h" +#include "diag.h" +#include "wdt_api.h" + +extern uint32_t current_fw_idx; + +#undef DEFAULT_FLASH_LEN +#define DEFAULT_FLASH_LEN 0x400000 + +#endif + #else extern UINT32 flash_read(char* user_buf, UINT32 count, UINT32 address); @@ -2593,6 +2602,269 @@ update_ota_exit: ADDLOG_ERROR(LOG_FEATURE_OTA, "OTA failed"); return http_rest_error(request, ret, "error"); } + +#elif PLATFORM_RTL8720D + + int ret = -1; + uint32_t ota_target_index = OTA_INDEX_2; + update_file_hdr* pOtaFileHdr; + update_file_img_hdr* pOtaFileImgHdr; + update_ota_target_hdr OtaTargetHdr; + uint32_t ImageCnt, TempLen; + update_dw_info DownloadInfo[MAX_IMG_NUM]; + + int size = 0; + int read_bytes; + int read_bytes_buf; + uint8_t* buf; + uint32_t OtaFg = 0; + uint32_t IncFg = 0; + int RemainBytes = 0; + uint32_t SigCnt = 0; + uint32_t TempCnt = 0; + uint8_t* signature; + uint32_t sector_cnt = 0; + + if(request->contentLength > 0) + { + towrite = request->contentLength; + } + else + { + ret = -1; + ADDLOG_ERROR(LOG_FEATURE_OTA, "Content-length is 0"); + goto update_ota_exit; + } + + memset((uint8_t*)&OtaTargetHdr, 0, sizeof(update_ota_target_hdr)); + + DBG_INFO_MSG_OFF(MODULE_FLASH); + + ADDLOG_INFO(LOG_FEATURE_OTA, "Current firmware index is %d", current_fw_idx + 1); + if(current_fw_idx == OTA_INDEX_1) + { + ota_target_index = OTA_INDEX_2; + } + else + { + ota_target_index = OTA_INDEX_1; + } + + // get ota header + writebuf = request->received; + writelen = recv(request->fd, writebuf, 16, 0); + if(writelen != 16) + { + ADDLOG_ERROR(LOG_FEATURE_OTA, "failed to recv file header"); + ret = -1; + goto update_ota_exit; + } + + pOtaFileHdr = (update_file_hdr*)writebuf; + pOtaFileImgHdr = (update_file_img_hdr*)(writebuf + 8); + + OtaTargetHdr.FileHdr.FwVer = pOtaFileHdr->FwVer; + OtaTargetHdr.FileHdr.HdrNum = pOtaFileHdr->HdrNum; + + writelen = recv(request->fd, writebuf + 16, (pOtaFileHdr->HdrNum * pOtaFileImgHdr->ImgHdrLen) - 8, 0); + writelen = (pOtaFileHdr->HdrNum * pOtaFileImgHdr->ImgHdrLen) + 8; + + // verify ota header + if(!get_ota_tartget_header((uint8_t*)writebuf, writelen, &OtaTargetHdr, ota_target_index)) + { + ADDLOG_ERROR(LOG_FEATURE_OTA, "Get OTA header failed"); + goto update_ota_exit; + } + + ADDLOG_INFO(LOG_FEATURE_OTA, "Erasing..."); + for(int i = 0; i < OtaTargetHdr.ValidImgCnt; i++) + { + ADDLOG_INFO(LOG_FEATURE_OTA, "Target addr:0x%08x, img len: %i", OtaTargetHdr.FileImgHdr[i].FlashAddr, OtaTargetHdr.FileImgHdr[i].ImgLen); + if(OtaTargetHdr.FileImgHdr[i].ImgLen >= 0x1A8000) + { + ADDLOG_ERROR(LOG_FEATURE_OTA, "Img%i too big, skipping", i); + OtaTargetHdr.FileImgHdr[i].ImgLen = 0; + continue; + } + //watchdog_stop(); + //erase_ota_target_flash(OtaTargetHdr.FileImgHdr[i].FlashAddr, OtaTargetHdr.FileImgHdr[i].ImgLen); + //watchdog_start(); + } + + memset((uint8_t*)DownloadInfo, 0, MAX_IMG_NUM * sizeof(update_dw_info)); + + ImageCnt = OtaTargetHdr.ValidImgCnt; + for(uint32_t i = 0; i < ImageCnt; i++) + { + if(OtaTargetHdr.FileImgHdr[i].ImgLen == 0) + { + DownloadInfo[i].ImageLen = 0; + continue; + } + /* get OTA image and Write New Image to flash, skip the signature, + not write signature first for power down protection*/ + DownloadInfo[i].ImgId = OTA_IMAG; + DownloadInfo[i].FlashAddr = OtaTargetHdr.FileImgHdr[i].FlashAddr - SPI_FLASH_BASE + 8; + DownloadInfo[i].ImageLen = OtaTargetHdr.FileImgHdr[i].ImgLen - 8; /*skip the signature*/ + DownloadInfo[i].ImgOffset = OtaTargetHdr.FileImgHdr[i].Offset; + } + + /*initialize the reveiving counter*/ + TempLen = (OtaTargetHdr.FileHdr.HdrNum * OtaTargetHdr.FileImgHdr[0].ImgHdrLen) + sizeof(update_file_hdr); + + for(uint32_t i = 0; i < ImageCnt; i++) + { + if(DownloadInfo[i].ImageLen == 0) continue; + /*the next image length*/ + RemainBytes = DownloadInfo[i].ImageLen; + ADDLOG_DEBUG(LOG_FEATURE_OTA, "Remain: %i", RemainBytes); + signature = &(OtaTargetHdr.Sign[i][0]); + device_mutex_lock(RT_DEV_LOCK_FLASH); + FLASH_EraseXIP(EraseSector, DownloadInfo[i].FlashAddr - SPI_FLASH_BASE); + device_mutex_unlock(RT_DEV_LOCK_FLASH); + + /*download the new firmware from server*/ + while(RemainBytes > 0) + { + buf = (uint8_t*)request->received; + if(IncFg == 1) + { + IncFg = 0; + read_bytes = read_bytes_buf; + } + else + { + memset(buf, 0, request->receivedLenmax); + read_bytes = recv(request->fd, buf, request->receivedLenmax, 0); + if(read_bytes == 0) + { + break; // Read end + } + if(read_bytes < 0) + { + //OtaImgSize = -1; + //printf("\n\r[%s] Read socket failed", __FUNCTION__); + //ret = -1; + //goto update_ota_exit; + break; + } + read_bytes_buf = read_bytes; + TempLen += read_bytes; + } + + if(TempLen > DownloadInfo[i].ImgOffset) + { + if(!OtaFg) + { + /*reach the desired image, the first packet process*/ + OtaFg = 1; + TempCnt = TempLen - DownloadInfo[i].ImgOffset; + if(TempCnt < 8) + { + SigCnt = TempCnt; + } + else + { + SigCnt = 8; + } + + memcpy(signature, buf + read_bytes - TempCnt, SigCnt); + + if((SigCnt < 8) || (TempCnt - 8 == 0)) + { + continue; + } + + buf = buf + (read_bytes - TempCnt + 8); + read_bytes = TempCnt - 8; + } + else + { + /*normal packet process*/ + if(SigCnt < 8) + { + if(read_bytes < (int)(8 - SigCnt)) + { + memcpy(signature + SigCnt, buf, read_bytes); + SigCnt += read_bytes; + continue; + } + else + { + memcpy(signature + SigCnt, buf, (8 - SigCnt)); + buf = buf + (8 - SigCnt); + read_bytes -= (8 - SigCnt); + SigCnt = 8; + if(!read_bytes) + { + continue; + } + } + } + } + + RemainBytes -= read_bytes; + if(RemainBytes < 0) + { + read_bytes = read_bytes - (-RemainBytes); + } + + device_mutex_lock(RT_DEV_LOCK_FLASH); + if(DownloadInfo[i].FlashAddr + size >= DownloadInfo[i].FlashAddr + sector_cnt * 4096) + { + sector_cnt++; + FLASH_EraseXIP(EraseSector, DownloadInfo[i].FlashAddr - SPI_FLASH_BASE + sector_cnt * 4096); + } + if(ota_writestream_user(DownloadInfo[i].FlashAddr + size, read_bytes, buf) < 0) + { + ADDLOG_ERROR(LOG_FEATURE_OTA, "Writing failed"); + device_mutex_unlock(RT_DEV_LOCK_FLASH); + ret = -1; + goto update_ota_exit; + } + device_mutex_unlock(RT_DEV_LOCK_FLASH); + ADDLOG_DEBUG(LOG_FEATURE_OTA, "Written %i bytes at 0x%08x", read_bytes, DownloadInfo[i].FlashAddr + size); + rtos_delay_milliseconds(5); + size += read_bytes; + } + } + + if((uint32_t)size != (OtaTargetHdr.FileImgHdr[i].ImgLen - 8)) + { + ADDLOG_ERROR(LOG_FEATURE_OTA, "Received size != ota size"); + ret = -1; + goto update_ota_exit; + } + + /*update flag status*/ + size = 0; + OtaFg = 0; + IncFg = 1; + } + + if(verify_ota_checksum(&OtaTargetHdr)) + { + if(!change_ota_signature(&OtaTargetHdr, ota_target_index)) + { + ADDLOG_ERROR(LOG_FEATURE_OTA, "Change signature failed"); + ret = -1; + goto update_ota_exit; + } + ret = 0; + } + +update_ota_exit: + if(ret != -1) + { + ADDLOG_INFO(LOG_FEATURE_OTA, "OTA is successful"); + total = RemainBytes; + } + else + { + ADDLOG_ERROR(LOG_FEATURE_OTA, "OTA failed"); + return http_rest_error(request, ret, "error"); + } + #else init_ota(startaddr); diff --git a/src/littlefs/lfs_util.h b/src/littlefs/lfs_util.h index 162c36d3f..30bf6cd43 100644 --- a/src/littlefs/lfs_util.h +++ b/src/littlefs/lfs_util.h @@ -9,7 +9,7 @@ #if PLATFORM_BEKEN #include "mem_pub.h" -#elif PLATFORM_BL602 || PLATFORM_LN882H || PLATFORM_ESPIDF || PLATFORM_RTL8710B +#elif PLATFORM_BL602 || PLATFORM_LN882H || PLATFORM_ESPIDF || PLATFORM_RTL8710B || PLATFORM_RTL8720D #define os_free free #define os_malloc malloc #endif diff --git a/src/littlefs/our_lfs.h b/src/littlefs/our_lfs.h index c6f2bd1c1..bde392264 100644 --- a/src/littlefs/our_lfs.h +++ b/src/littlefs/our_lfs.h @@ -86,13 +86,18 @@ #define LFS_BLOCKS_START_MIN 0x19D000 #define LFS_BLOCKS_END 0x1E0000 - #elif PLATFORM_RTL8710A #define LFS_BLOCKS_START 0x300000 #define LFS_BLOCKS_START_MIN 0x300000 #define LFS_BLOCKS_END 0x380000 +#elif PLATFORM_RTL8720D + +#define LFS_BLOCKS_START 0x3C6000 +#define LFS_BLOCKS_START_MIN 0x3C6000 +#define LFS_BLOCKS_END 0x400000 + #else // TODO // start 0x1000 after OTA addr diff --git a/src/new_common.h b/src/new_common.h index 4fb273dc1..c28bbcbca 100644 --- a/src/new_common.h +++ b/src/new_common.h @@ -130,6 +130,11 @@ typedef long BaseType_t; #define DEVICENAME_PREFIX_SHORT "rtl8710a" #define PLATFORM_MCU_NAME "RTL8710A" #define MANUFACTURER "Realtek" +#elif PLATFORM_RTL8720D +#define DEVICENAME_PREFIX_FULL "OpenRTL8720D" +#define DEVICENAME_PREFIX_SHORT "rtl8720d" +#define PLATFORM_MCU_NAME "RTL8720D" +#define MANUFACTURER "Realtek" #else #error "You must define a platform.." This platform is not supported, error! @@ -165,6 +170,8 @@ This platform is not supported, error! #define USER_SW_VER "RTL8710B_Test" #elif defined(PLATFORM_RTL8710A) #define USER_SW_VER "RTL8710A_Test" +#elif defined(PLATFORM_RTL8720D) +#define USER_SW_VER "RTL8720D_Test" #elif defined(PLATFORM_BK7238) #define USER_SW_VER "BK7238_Test" #else @@ -560,6 +567,22 @@ extern int g_sleepfactor; #define os_memset memset #define os_strcpy strcpy +#if PLATFORM_RTL8720D +#undef vsnprintf +#undef sprintf +#undef atoi +#undef printf +#endif + +// for wifi +#define BUFLEN_LEN 1 +#define MAC_LEN 6 +#define RSSI_LEN 4 +#define SECURITY_LEN 1 +#define SECURITY_LEN_EXTENDED 4 +#define WPS_ID_LEN 1 +#define CHANNEL_LEN 1 + #define bk_printf printf #if PLATFORM_RTL8710B || PLATFORM_RTL8710A diff --git a/src/new_pins.h b/src/new_pins.h index e82bb70e9..549daac3a 100644 --- a/src/new_pins.h +++ b/src/new_pins.h @@ -1038,6 +1038,8 @@ typedef enum channelType_e { #define PLATFORM_GPIO_MAX 17 #elif PLATFORM_RTL8710A #define PLATFORM_GPIO_MAX 20 +#elif PLATFORM_RTL8720D +#define PLATFORM_GPIO_MAX 64 #else #define PLATFORM_GPIO_MAX 29 #endif @@ -1100,6 +1102,23 @@ typedef struct pinsState_s byte channelTypes[CHANNEL_MAX]; } pinsState_t; +#elif PLATFORM_RTL8720D + +typedef struct pinsState_s +{ + // All above values are indexed by physical pin index + // (so we assume we have maximum of 32 pins) + byte roles[64]; + byte channels[64]; + // extra channels array - this is needed for + // buttons, so button can toggle one relay on single click + // and other relay on double click + byte channels2[64]; + // This single field above, is indexed by CHANNEL INDEX + // (not by pin index) + byte channelTypes[CHANNEL_MAX]; +} pinsState_t; + #else typedef struct pinsState_s { @@ -1328,6 +1347,8 @@ typedef struct mainConfig_s { byte unusedSectorAB[51]; #elif PLATFORM_ESPIDF byte unusedSectorAB[43]; +#elif PLATFORM_RTL8720D + byte unusedSectorAB; #else byte unusedSectorAB[99]; #endif diff --git a/src/obk_config.h b/src/obk_config.h index ccb63f969..ef31ea524 100644 --- a/src/obk_config.h +++ b/src/obk_config.h @@ -328,33 +328,35 @@ #define OBK_OTA_EXTENSION ".img" #define ENABLE_OBK_SCRIPTING 1 -#elif PLATFORM_RTL8710B || PLATFORM_RTL8710A +#elif PLATFORM_RTL8710B || PLATFORM_RTL8710A || PLATFORM_RTL8720D -#define ENABLE_HA_DISCOVERY 1 -#define ENABLE_MQTT 1 -#define NO_CHIP_TEMPERATURE 1 -#define ENABLE_LITTLEFS 1 -#define NEW_TCP_SERVER 1 -#define ENABLE_DRIVER_TUYAMCU 1 -#define ENABLE_TASMOTADEVICEGROUPS 1 -#define ENABLE_NTP 1 -#define ENABLE_CALENDAR_EVENTS 1 -#define ENABLE_EXPAND_CONSTANT 1 -#define ENABLE_TASMOTA_JSON 1 -#define ENABLE_I2C 1 -#define ENABLE_DRIVER_AHT2X 1 -#define ENABLE_DRIVER_BMPI2C 1 -#define ENABLE_DRIVER_DS1820 1 -#define ENABLE_DRIVER_LED 1 -#define ENABLE_DRIVER_WEMO 1 -#define ENABLE_DRIVER_CHT83XX 1 -#define ENABLE_DRIVER_DHT 1 -#define ENABLE_DRIVER_BL0942 1 -#define ENABLE_DRIVER_BL0937 1 -#define ENABLE_DRIVER_CSE7766 1 -#define ENABLE_DRIVER_UART_TCP 1 -#define OBK_OTA_EXTENSION ".img" -#define ENABLE_OBK_SCRIPTING 1 +#define ENABLE_HA_DISCOVERY 1 +#define ENABLE_MQTT 1 +#define NO_CHIP_TEMPERATURE 1 +#define ENABLE_LITTLEFS 1 +#define NEW_TCP_SERVER 1 +#define ENABLE_DRIVER_TUYAMCU 1 +#define ENABLE_TASMOTADEVICEGROUPS 1 +#define ENABLE_NTP 1 +#define ENABLE_CALENDAR_EVENTS 1 +#define ENABLE_EXPAND_CONSTANT 1 +#define ENABLE_TASMOTA_JSON 1 +#define ENABLE_I2C 1 +#define ENABLE_DRIVER_AHT2X 1 +#define ENABLE_DRIVER_BMPI2C 1 +#define ENABLE_DRIVER_DS1820 1 +#define ENABLE_DRIVER_LED 1 +#define ENABLE_DRIVER_WEMO 1 +#define ENABLE_DRIVER_CHT83XX 1 +#define ENABLE_DRIVER_DHT 1 +#define ENABLE_DRIVER_BL0942 1 +#define ENABLE_DRIVER_BL0937 1 +#define ENABLE_DRIVER_CSE7766 1 +#define ENABLE_DRIVER_UART_TCP 1 +#define OBK_OTA_EXTENSION ".img" +#define ENABLE_OBK_SCRIPTING 1 +#define ENABLE_ADVANCED_CHANNELTYPES_DISCOVERY 1 +#define ENABLE_DRIVER_SSDP 1 #else diff --git a/src/user_main.c b/src/user_main.c index 65679752f..4ab4d0d3b 100644 --- a/src/user_main.c +++ b/src/user_main.c @@ -248,14 +248,14 @@ OSStatus rtos_create_thread(beken_thread_t* thread, } OSStatus rtos_delete_thread(beken_thread_t* thread) { - if(thread == NULL) vTaskDelete(thread); + if(thread == NULL) vTaskDelete(NULL); else vTaskDelete(*thread); return kNoErr; } OSStatus rtos_suspend_thread(beken_thread_t* thread) { - if(thread == NULL) vTaskSuspend(thread); + if(thread == NULL) vTaskSuspend(NULL); else vTaskSuspend(*thread); return kNoErr; }