[Bouffalolab] Add BL702 Ethernet support (#27620)
* Add BL706 ethernet support
* update sdk commit
* fix compile error
* update matter file
* fix restyle
* fix comiple error
* Add BL706 ethernet support
* update sdk commit
* fix compile error
* update matter file
* fix restyle
* fix comiple error
* fix restyle
---------
Co-authored-by: Justin Wood <woody@apple.com>
diff --git a/examples/lighting-app/bouffalolab/bl602/BUILD.gn b/examples/lighting-app/bouffalolab/bl602/BUILD.gn
index 125e9ea..592cc5a 100644
--- a/examples/lighting-app/bouffalolab/bl602/BUILD.gn
+++ b/examples/lighting-app/bouffalolab/bl602/BUILD.gn
@@ -47,6 +47,7 @@
ota_auto_reboot_delay_seconds = 5
enable_heap_monitoring = false
+ enable_reset_counter = false
setupPinCode = 20202021
setupDiscriminator = 3840
@@ -102,18 +103,20 @@
"SYS_AOS_LOOP_ENABLE",
]
+ if (false == enable_reset_counter) {
+ defines += [ "BOOT_PIN_RESET=8" ]
+ }
+
bl_plat_name = "bl602"
sources = [
- "${examples_plat_dir}/route_hook/bl_route_hook.c",
- "${examples_plat_dir}/route_hook/bl_route_table.c",
+ "${examples_plat_common_dir}/route_hook/bl_route_hook.c",
+ "${examples_plat_common_dir}/route_hook/bl_route_table.c",
]
if ("BL602-IoT-Matter-V1" == board) {
defines += [ "BL602_IoT_Matter_V1" ]
} else if ("BL602-NIGHT-LIGHT" == board) {
defines += [ "BL602_NIGHT_LIGHT" ]
- } else if ("BL602-IOT-DVK-3S" == board) {
- defines += [ "BL602_IOT_DVK_3S" ]
}
sources += [
@@ -121,6 +124,7 @@
"${example_common_dir}/AppTask.cpp",
"${example_common_dir}/ZclCallbacks.cpp",
"${examples_plat_common_dir}/plat/LEDWidget.cpp",
+ "${examples_plat_common_dir}/plat/OTAConfig.cpp",
"${examples_plat_common_dir}/plat/aos_task.c",
"${examples_plat_common_dir}/plat/demo_pwm.c",
"${examples_plat_common_dir}/plat/main.cpp",
@@ -140,6 +144,7 @@
include_dirs = [
"${chip_root}/src/platform/bouffalolab/BL602",
"${example_common_dir}",
+ "${examples_plat_common_dir}/route_hook",
"${examples_plat_common_dir}/plat",
"${examples_plat_dir}",
]
@@ -208,11 +213,6 @@
defines += [ "HEAP_MONITORING=1" ]
}
- if (chip_enable_ota_requestor) {
- defines += [ "OTA_ENABLED" ]
- sources += [ "${examples_plat_common_dir}/plat/OTAConfig.cpp" ]
- }
-
cflags_c = [ "-Wno-sign-compare" ]
ldscript = "${examples_plat_dir}/ldscripts/flash_rom.ld"
diff --git a/examples/lighting-app/bouffalolab/bl602/CHIPProjectConfig.h b/examples/lighting-app/bouffalolab/bl602/CHIPProjectConfig.h
index 18b7923..3e779ae 100644
--- a/examples/lighting-app/bouffalolab/bl602/CHIPProjectConfig.h
+++ b/examples/lighting-app/bouffalolab/bl602/CHIPProjectConfig.h
@@ -1,7 +1,6 @@
/*
*
* Copyright (c) 2021 Project CHIP Authors
- * Copyright (c) 2019 Google LLC.
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -108,13 +107,6 @@
#define CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_REVISION 1
/**
- * CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE
- *
- * Enable support for Chip-over-BLE (CHIPoBLE).
- */
-#define CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE 1
-
-/**
* CHIP_DEVICE_CONFIG_TEST_SERIAL_NUMBER
*
* Enables the use of a hard-coded default serial number if none
diff --git a/examples/lighting-app/bouffalolab/bl602/args.gni b/examples/lighting-app/bouffalolab/bl602/args.gni
index 1a7e2dd..4c69abd 100644
--- a/examples/lighting-app/bouffalolab/bl602/args.gni
+++ b/examples/lighting-app/bouffalolab/bl602/args.gni
@@ -23,7 +23,6 @@
pw_assert_BACKEND = "$dir_pw_assert_log"
pw_rpc_CONFIG = "$dir_pw_rpc:disable_global_mutex"
-chip_enable_ota_requestor = true
chip_detail_logging = false
pw_build_LINK_DEPS = [
diff --git a/examples/lighting-app/bouffalolab/bl602/board.h b/examples/lighting-app/bouffalolab/bl602/board.h
index 236c974..4e98b26 100644
--- a/examples/lighting-app/bouffalolab/bl602/board.h
+++ b/examples/lighting-app/bouffalolab/bl602/board.h
@@ -48,11 +48,6 @@
#define LED_G_PIN_PORT 1
#define LED_G_PIN 11
-// comment out for last hardware
-//#define LED_R_PIN_PORT 0
-//#define LED_R_PIN 20
-//#define LED_G_PIN 21
-
#define MAX_PWM_CHANNEL 3
#else
@@ -64,7 +59,5 @@
#endif
-#define LED_BTN_RESET 8
-
#define CHIP_UART_PIN_RX 7
#define CHIP_UART_PIN_TX 16
diff --git a/examples/lighting-app/bouffalolab/bl702/BUILD.gn b/examples/lighting-app/bouffalolab/bl702/BUILD.gn
index 028a36f..b382aa7 100644
--- a/examples/lighting-app/bouffalolab/bl702/BUILD.gn
+++ b/examples/lighting-app/bouffalolab/bl702/BUILD.gn
@@ -49,6 +49,8 @@
config_cache_size = 8192
enable_heap_monitoring = false
+ enable_reset_counter = false
+ enable_cdc_module = false
setupPinCode = 20202021
setupDiscriminator = 3840
@@ -74,10 +76,13 @@
"CHIP_DEVICE_CONFIG_USE_TEST_SETUP_DISCRIMINATOR=${setupDiscriminator}",
"OTA_PERIODIC_TIMEOUT=${ota_periodic_query_timeout_seconds}",
"OTA_AUTO_REBOOT_DELAY=${ota_auto_reboot_delay_seconds}",
- "OPENTHREAD_CONFIG_PLATFORM_XTAL_ACCURACY=40",
"PRINT_DEBUG=0",
]
+ if (chip_enable_openthread) {
+ defines += [ "OPENTHREAD_CONFIG_PLATFORM_XTAL_ACCURACY=40" ]
+ }
+
if ("BL706C-22" == module_type) {
defines += [ "CFG_PSRAM_DUAL_BANK=1" ]
}
@@ -117,20 +122,20 @@
"START_ENTRY=bl702_main",
]
- if (enable_psram) {
- defines += [ "CFG_USE_PSRAM=1" ]
+ if (false == enable_reset_counter) {
+ defines += [ "BOOT_PIN_RESET=31" ]
}
- if ("BL706C-22" == module_type) {
- defines += [ "BOARD_BTN_BOOT_PIN" ]
+ if (enable_psram) {
+ defines += [ "CFG_USE_PSRAM=1" ]
}
if ("XT-ZB6-DevKit" == board) {
defines += [ "XT_ZB6_DevKit" ]
} else if ("BL706-NIGHT-LIGHT" == board) {
defines += [ "BL706_NIGHT_LIGHT" ]
- } else if ("BL702-IoT-DVK" == board || "BL706-IoT-DVK" == board) {
- defines += [ "BL706_IOT_DVK" ]
+ } else if ("BL706-ETH" == board) {
+ defines += [ "BL706_ETHERNET" ]
}
if (defined(enable_cdc_module) && enable_cdc_module) {
@@ -141,6 +146,7 @@
"${example_common_dir}/AppTask.cpp",
"${example_common_dir}/ZclCallbacks.cpp",
"${examples_plat_common_dir}/plat/LEDWidget.cpp",
+ "${examples_plat_common_dir}/plat/OTAConfig.cpp",
"${examples_plat_common_dir}/plat/demo_pwm.c",
"${examples_plat_common_dir}/plat/main.cpp",
"${examples_plat_common_dir}/plat/platform.cpp",
@@ -153,27 +159,38 @@
"${chip_root}/examples/providers:device_info_provider",
"${chip_root}/src/lib",
"${chip_root}/src/setup_payload",
- "${chip_root}/third_party/openthread/platforms:libopenthread-platform",
- "${chip_root}/third_party/openthread/platforms:libopenthread-platform-utils",
]
- if (chip_openthread_ftd) {
- defines += [ "CHIP_DEVICE_CONFIG_THREAD_FTD=1" ]
+ if (chip_enable_openthread) {
deps += [
- "${chip_root}/third_party/openthread/repo:libopenthread-cli-ftd",
- "${chip_root}/third_party/openthread/repo:libopenthread-ftd",
+ "${chip_root}/third_party/openthread/platforms:libopenthread-platform",
+ "${chip_root}/third_party/openthread/platforms:libopenthread-platform-utils",
]
+
+ if (chip_openthread_ftd) {
+ defines += [ "CHIP_DEVICE_CONFIG_THREAD_FTD=1" ]
+ deps += [
+ "${chip_root}/third_party/openthread/repo:libopenthread-cli-ftd",
+ "${chip_root}/third_party/openthread/repo:libopenthread-ftd",
+ ]
+ } else {
+ defines += [ "CHIP_DEVICE_CONFIG_THREAD_FTD=0" ]
+ deps += [
+ "${chip_root}/third_party/openthread/repo:libopenthread-cli-mtd",
+ "${chip_root}/third_party/openthread/repo:libopenthread-mtd",
+ ]
+ }
} else {
- defines += [ "CHIP_DEVICE_CONFIG_THREAD_FTD=0" ]
- deps += [
- "${chip_root}/third_party/openthread/repo:libopenthread-cli-mtd",
- "${chip_root}/third_party/openthread/repo:libopenthread-mtd",
+ sources += [
+ "${examples_plat_common_dir}/route_hook/bl_route_hook.c",
+ "${examples_plat_common_dir}/route_hook/bl_route_table.c",
]
}
include_dirs = [
"${chip_root}/src/platform/bouffalolab/BL702",
"${example_common_dir}",
+ "${examples_plat_common_dir}/route_hook",
"${examples_plat_common_dir}/plat",
]
@@ -212,11 +229,16 @@
"${chip_root}/examples/common/pigweed:descriptor_service.nanopb_rpc",
"${chip_root}/examples/common/pigweed:device_service.nanopb_rpc",
"${chip_root}/examples/common/pigweed:lighting_service.nanopb_rpc",
- "${chip_root}/examples/common/pigweed:ot_cli_service.nanopb_rpc",
- "${chip_root}/examples/common/pigweed:thread_service.nanopb_rpc",
"${examples_plat_common_dir}/rpc/pw_sys_io:pw_sys_io",
]
+ if (chip_enable_openthread) {
+ deps += [
+ "${chip_root}/examples/common/pigweed:ot_cli_service.nanopb_rpc",
+ "${chip_root}/examples/common/pigweed:thread_service.nanopb_rpc",
+ ]
+ }
+
deps += pw_build_LINK_DEPS
include_dirs += [
@@ -239,11 +261,6 @@
defines += [ "HEAP_MONITORING=1" ]
}
- if (chip_enable_ota_requestor) {
- defines += [ "OTA_ENABLED" ]
- sources += [ "${examples_plat_common_dir}/plat/OTAConfig.cpp" ]
- }
-
if (enable_psram) {
ldscript = "${examples_plat_dir}/ldscripts/psram_flash.ld"
} else {
diff --git a/examples/lighting-app/bouffalolab/bl702/CHIPProjectConfig.h b/examples/lighting-app/bouffalolab/bl702/CHIPProjectConfig.h
index 1a357d1..19ff4f3 100644
--- a/examples/lighting-app/bouffalolab/bl702/CHIPProjectConfig.h
+++ b/examples/lighting-app/bouffalolab/bl702/CHIPProjectConfig.h
@@ -1,7 +1,6 @@
/*
*
* Copyright (c) 2020 Project CHIP Authors
- * Copyright (c) 2019 Google LLC.
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -102,13 +101,6 @@
#endif
/**
- * CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE
- *
- * Enable support for Chip-over-BLE (CHIPoBLE).
- */
-#define CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE 1
-
-/**
* CHIP_DEVICE_CONFIG_TEST_SERIAL_NUMBER
*
* Enables the use of a hard-coded default serial number if none
diff --git a/examples/lighting-app/bouffalolab/bl702/args.gni b/examples/lighting-app/bouffalolab/bl702/args.gni
index 8087dc1..e35ae89 100644
--- a/examples/lighting-app/bouffalolab/bl702/args.gni
+++ b/examples/lighting-app/bouffalolab/bl702/args.gni
@@ -23,12 +23,6 @@
pw_assert_BACKEND = "$dir_pw_assert_log"
pw_rpc_CONFIG = "$dir_pw_rpc:disable_global_mutex"
-chip_enable_ble = true
-chip_enable_openthread = true
-chip_enable_wifi = false
-lwip_platform = "bl702"
-
-chip_enable_ota_requestor = true
chip_detail_logging = false
pw_build_LINK_DEPS = [
diff --git a/examples/lighting-app/bouffalolab/bl702/board.h b/examples/lighting-app/bouffalolab/bl702/board.h
index 6b5ee14..b8c145c 100644
--- a/examples/lighting-app/bouffalolab/bl702/board.h
+++ b/examples/lighting-app/bouffalolab/bl702/board.h
@@ -52,15 +52,6 @@
#elif defined(XT_ZB6_DevKit)
-// #define LED_B_PIN_PORT 3
-// #define LED_B_PIN 18
-
-// #define LED_R_PIN_PORT 4
-// #define LED_R_PIN 19
-
-// #define LED_G_PIN_PORT 0
-// #define LED_G_PIN 20
-
#define LED_PIN_PORT 3
#define LED_PIN 18
@@ -75,15 +66,5 @@
#endif
-#if defined(BOARD_BTN_BOOT_PIN)
-#define LED_BTN_RESET 31
-#endif
-
-#define SPI_WIFI_MISO_PIN 4
-#define SPI_WIFI_MOSI_PIN 5
-#define SPI_WIFI_CLK_PIN 3
-#define SPI_WIFI_CS_PIN 6
-#define SPI_WIFI_IRQ_PIN 10
-
#define CHIP_UART_PIN_RX 15
#define CHIP_UART_PIN_TX 14
diff --git a/examples/lighting-app/bouffalolab/bl702l/BUILD.gn b/examples/lighting-app/bouffalolab/bl702l/BUILD.gn
index db0209f..621416e 100644
--- a/examples/lighting-app/bouffalolab/bl702l/BUILD.gn
+++ b/examples/lighting-app/bouffalolab/bl702l/BUILD.gn
@@ -49,6 +49,7 @@
config_cache_size = 8192
enable_heap_monitoring = false
+ enable_reset_counter = false
setupPinCode = 20202021
setupDiscriminator = 3840
@@ -97,6 +98,7 @@
zap_pregenerated_dir = "${chip_root}/zzz_generated/lighting-app/zap-generated"
is_server = true
}
+
bouffalolab_executable("lighting_app") {
output_name = "chip-bl702l-lighting-example.out"
bl_plat_name = "bl702l"
@@ -108,9 +110,11 @@
"START_ENTRY=bl702_main",
]
- defines += [ "CFG_USE_PSRAM=1" ]
+ if (false == enable_reset_counter) {
+ defines += [ "BOOT_PIN_RESET=16" ]
+ }
- defines += [ "BOARD_BTN_BOOT_PIN" ]
+ defines += [ "CFG_USE_PSRAM=1" ]
if ("BL704L" == board) {
defines += [ "XT_ZB6_DevKit" ]
@@ -124,6 +128,7 @@
"${example_common_dir}/AppTask.cpp",
"${example_common_dir}/ZclCallbacks.cpp",
"${examples_plat_common_dir}/plat/LEDWidget.cpp",
+ "${examples_plat_common_dir}/plat/OTAConfig.cpp",
"${examples_plat_common_dir}/plat/demo_pwm.c",
"${examples_plat_common_dir}/plat/main.cpp",
"${examples_plat_common_dir}/plat/platform.cpp",
@@ -222,11 +227,6 @@
defines += [ "HEAP_MONITORING=1" ]
}
- if (chip_enable_ota_requestor) {
- defines += [ "OTA_ENABLED" ]
- sources += [ "${examples_plat_common_dir}/plat/OTAConfig.cpp" ]
- }
-
if (enable_psram) {
ldscript = "${examples_plat_dir}/ldscripts/psram_flash_rom.ld"
} else {
diff --git a/examples/lighting-app/bouffalolab/bl702l/CHIPProjectConfig.h b/examples/lighting-app/bouffalolab/bl702l/CHIPProjectConfig.h
index 1a357d1..19ff4f3 100644
--- a/examples/lighting-app/bouffalolab/bl702l/CHIPProjectConfig.h
+++ b/examples/lighting-app/bouffalolab/bl702l/CHIPProjectConfig.h
@@ -1,7 +1,6 @@
/*
*
* Copyright (c) 2020 Project CHIP Authors
- * Copyright (c) 2019 Google LLC.
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -102,13 +101,6 @@
#endif
/**
- * CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE
- *
- * Enable support for Chip-over-BLE (CHIPoBLE).
- */
-#define CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE 1
-
-/**
* CHIP_DEVICE_CONFIG_TEST_SERIAL_NUMBER
*
* Enables the use of a hard-coded default serial number if none
diff --git a/examples/lighting-app/bouffalolab/bl702l/args.gni b/examples/lighting-app/bouffalolab/bl702l/args.gni
index a897d37..f2eb36a 100644
--- a/examples/lighting-app/bouffalolab/bl702l/args.gni
+++ b/examples/lighting-app/bouffalolab/bl702l/args.gni
@@ -23,12 +23,6 @@
pw_assert_BACKEND = "$dir_pw_assert_log"
pw_rpc_CONFIG = "$dir_pw_rpc:disable_global_mutex"
-chip_enable_ble = true
-chip_enable_openthread = true
-chip_enable_wifi = false
-lwip_platform = "bl702l"
-
-chip_enable_ota_requestor = true
chip_detail_logging = false
pw_build_LINK_DEPS = [
diff --git a/examples/lighting-app/bouffalolab/bl702l/board.h b/examples/lighting-app/bouffalolab/bl702l/board.h
index 5bfcc54..62ee364 100644
--- a/examples/lighting-app/bouffalolab/bl702l/board.h
+++ b/examples/lighting-app/bouffalolab/bl702l/board.h
@@ -75,10 +75,6 @@
#endif
-#if defined(BOARD_BTN_BOOT_PIN)
-#define LED_BTN_RESET 16
-#endif
-
#define SPI_WIFI_MISO_PIN 4
#define SPI_WIFI_MOSI_PIN 5
#define SPI_WIFI_CLK_PIN 3
diff --git a/examples/lighting-app/bouffalolab/common/AppTask.cpp b/examples/lighting-app/bouffalolab/common/AppTask.cpp
index 28d8e83..3171341 100644
--- a/examples/lighting-app/bouffalolab/common/AppTask.cpp
+++ b/examples/lighting-app/bouffalolab/common/AppTask.cpp
@@ -1,7 +1,6 @@
/*
*
* Copyright (c) 2020 Project CHIP Authors
- * Copyright (c) 2019 Google LLC.
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -17,22 +16,14 @@
* limitations under the License.
*/
-#include <LEDWidget.h>
-#include <plat.h>
-
#include <app-common/zap-generated/attributes/Accessors.h>
-#include <app-common/zap-generated/ids/Clusters.h>
#include <app/clusters/identify-server/identify-server.h>
-#include <app/util/attribute-storage.h>
#include <app/server/Dnssd.h>
#include <app/server/OnboardingCodesUtil.h>
#include <app/server/Server.h>
#include <credentials/DeviceAttestationCredsProvider.h>
#include <credentials/examples/DeviceAttestationCredsExample.h>
-#include <lib/support/CHIPMem.h>
-#include <lib/support/CodeUtils.h>
-#include <lib/support/ErrorStr.h>
#include <system/SystemClock.h>
#if HEAP_MONITORING
@@ -51,6 +42,9 @@
#include <lib/shell/Engine.h>
#endif
+#include <LEDWidget.h>
+#include <plat.h>
+
extern "C" {
#include "board.h"
#include <bl_gpio.h>
@@ -140,21 +134,32 @@
app_event_t appEvent;
bool onoff = false;
+#ifndef BL706_ETHERNET
sLightLED.Init();
+#endif
-#ifdef LED_BTN_RESET
+#ifdef BOOT_PIN_RESET
ButtonInit();
#else
/** Without RESET PIN defined, factory reset will be executed if power cycle count(resetCnt) >= APP_REBOOT_RESET_COUNT */
uint32_t resetCnt = 0;
size_t saved_value_len = 0;
ef_get_env_blob(APP_REBOOT_RESET_COUNT_KEY, &resetCnt, sizeof(resetCnt), &saved_value_len);
- resetCnt++;
- ef_set_env_blob(APP_REBOOT_RESET_COUNT_KEY, &resetCnt, sizeof(resetCnt));
- /** To share with RESET PIN logic, mButtonPressedTime is used to recorded resetCnt increased.
- * +1 makes sure mButtonPressedTime is not zero */
- GetAppTask().mButtonPressedTime = chip::System::SystemClock().GetMonotonicMilliseconds64().count() + 1;
+ if (resetCnt > APP_REBOOT_RESET_COUNT)
+ {
+ resetCnt = 0;
+ /** To share with RESET PIN logic, mButtonPressedTime is used to recorded resetCnt increased.
+ * +1 makes sure mButtonPressedTime is not zero;
+ * a power cycle during factory reset confirm time APP_BUTTON_PRESS_LONG will cancel factoryreset */
+ GetAppTask().mButtonPressedTime = System::SystemClock().GetMonotonicMilliseconds64().count() + 1;
+ }
+ else
+ {
+ resetCnt++;
+ GetAppTask().mButtonPressedTime = 0;
+ }
+ ef_set_env_blob(APP_REBOOT_RESET_COUNT_KEY, &resetCnt, sizeof(resetCnt));
#endif
GetAppTask().sTimer = xTimerCreate("lightTmr", pdMS_TO_TICKS(1000), false, NULL, AppTask::TimerCallback);
@@ -172,12 +177,12 @@
appError(ret);
}
- GetAppTask().PostEvent(AppTask::APP_EVENT_TIMER);
+ GetAppTask().PostEvent(APP_EVENT_TIMER);
+ GetAppTask().PostEvent(APP_EVENT_LIGHTING_MASK);
+
vTaskSuspend(NULL);
- GetAppTask().mIsConnected = false;
-
- ChipLogProgress(NotSpecified, "App Task started, with heap %d left\r\n", xPortGetFreeHeapSize());
+ ChipLogProgress(NotSpecified, "App Task started, with SRAM heap %d left\r\n", xPortGetFreeHeapSize());
while (true)
{
@@ -188,22 +193,23 @@
{
PlatformMgr().LockChipStack();
- if (APP_EVENT_SYS_PROVISIONED & appEvent)
+ if (APP_EVENT_LIGHTING_MASK & appEvent)
{
- LightingUpdate(APP_EVENT_LIGHTING_MASK);
+ LightingUpdate(appEvent);
}
if (APP_EVENT_BTN_SHORT & appEvent)
{
- Clusters::OnOff::Attributes::OnOff::Get(GetAppTask().GetEndpointId(), &onoff);
- onoff = !onoff;
- Clusters::OnOff::Attributes::OnOff::Set(GetAppTask().GetEndpointId(), onoff);
- LightingUpdate((app_event_t)(APP_EVENT_LIGHTING_MASK & appEvent));
- }
-
- if (APP_EVENT_LIGHTING_MASK & appEvent)
- {
- LightingUpdate((app_event_t)(APP_EVENT_LIGHTING_MASK & appEvent));
+ if (Server::GetInstance().GetFabricTable().FabricCount())
+ {
+ Clusters::OnOff::Attributes::OnOff::Get(GetAppTask().GetEndpointId(), &onoff);
+ onoff = !onoff;
+ Clusters::OnOff::Attributes::OnOff::Set(GetAppTask().GetEndpointId(), onoff);
+ }
+ else
+ {
+ sLightLED.Toggle();
+ }
}
if (APP_EVENT_IDENTIFY_MASK & appEvent)
@@ -211,11 +217,6 @@
IdentifyHandleOp(appEvent);
}
- if (APP_EVENT_SYS_BLE_ADV & appEvent)
- {
- LightingUpdate(APP_EVENT_SYS_BLE_ADV);
- }
-
if (APP_EVENT_FACTORY_RESET & appEvent)
{
DeviceLayer::ConfigurationMgr().InitiateFactoryReset();
@@ -237,57 +238,60 @@
if (APP_EVENT_LIGHTING_MASK & status)
{
- do
+
+ if (Server::GetInstance().GetFabricTable().FabricCount())
{
- if (EMBER_ZCL_STATUS_SUCCESS != Clusters::OnOff::Attributes::OnOff::Get(endpoint, &onoff))
+ do
{
- break;
- }
-
- if (EMBER_ZCL_STATUS_SUCCESS != Clusters::LevelControl::Attributes::CurrentLevel::Get(endpoint, v))
- {
- break;
- }
-
- if (EMBER_ZCL_STATUS_SUCCESS != Clusters::ColorControl::Attributes::CurrentHue::Get(endpoint, &hue))
- {
- break;
- }
-
- if (EMBER_ZCL_STATUS_SUCCESS != Clusters::ColorControl::Attributes::CurrentSaturation::Get(endpoint, &sat))
- {
- break;
- }
-
- if (!onoff)
- {
- sLightLED.SetLevel(0);
- }
- else
- {
- if (v.IsNull())
+ if (EMBER_ZCL_STATUS_SUCCESS != Clusters::OnOff::Attributes::OnOff::Get(endpoint, &onoff))
{
- // Just pick something.
- v.SetNonNull(254);
+ break;
}
-#if defined(BL706_NIGHT_LIGHT) || defined(BL602_NIGHT_LIGHT)
- sLightLED.SetColor(v.Value(), hue, sat);
-#else
- sLightLED.SetLevel(v.Value());
-#endif
- }
- } while (0);
- }
- else if (APP_EVENT_SYS_BLE_ADV & status)
- {
+ if (EMBER_ZCL_STATUS_SUCCESS != Clusters::LevelControl::Attributes::CurrentLevel::Get(endpoint, v))
+ {
+ break;
+ }
+
+ if (EMBER_ZCL_STATUS_SUCCESS != Clusters::ColorControl::Attributes::CurrentHue::Get(endpoint, &hue))
+ {
+ break;
+ }
+
+ if (EMBER_ZCL_STATUS_SUCCESS != Clusters::ColorControl::Attributes::CurrentSaturation::Get(endpoint, &sat))
+ {
+ break;
+ }
+
+ if (!onoff)
+ {
+ sLightLED.SetLevel(0);
+ }
+ else
+ {
+ if (v.IsNull())
+ {
+ // Just pick something.
+ v.SetNonNull(254);
+ }
#if defined(BL706_NIGHT_LIGHT) || defined(BL602_NIGHT_LIGHT)
- /** show yellow to indicate BLE advertisement */
- sLightLED.SetColor(254, 35, 254);
+ sLightLED.SetColor(v.Value(), hue, sat);
#else
- /** show 30% brightness to indicate BLE advertisement */
- sLightLED.SetLevel(25);
+ sLightLED.SetLevel(v.Value());
#endif
+ }
+ } while (0);
+ }
+ else
+ {
+#if defined(BL706_NIGHT_LIGHT) || defined(BL602_NIGHT_LIGHT)
+ /** show yellow to indicate not-provision state for extended color light */
+ sLightLED.SetColor(254, 35, 254);
+#else
+ /** show 30% brightness to indicate not-provision state */
+ sLightLED.SetLevel(25);
+#endif
+ }
}
}
@@ -323,124 +327,40 @@
void AppTask::TimerEventHandler(app_event_t event)
{
- if (event & APP_EVENT_BTN_FACTORY_RESET_PRESS)
+ if (GetAppTask().mButtonPressedTime)
{
- GetAppTask().mTimerIntvl = APP_BUTTON_PRESS_JITTER;
- StartTimer();
- }
- else if (event & APP_EVENT_BTN_FACTORY_RESET_IND)
- {
- if (GetAppTask().mButtonPressedTime)
+#ifdef BOOT_PIN_RESET
+ if (System::SystemClock().GetMonotonicMilliseconds64().count() - GetAppTask().mButtonPressedTime >= APP_BUTTON_PRESS_SHORT)
{
- GetAppTask().mIsFactoryResetIndicat = true;
-#if defined(BL706_NIGHT_LIGHT) || defined(BL602_NIGHT_LIGHT)
+#if defined(BL602_NIGHT_LIGHT) || defined(BL706_NIGHT_LIGHT)
+ /** change color to indicate to wait factory reset confirm */
sLightLED.SetColor(254, 0, 210);
-#ifndef LED_BTN_RESET
- uint32_t resetCnt = 0;
- GetAppTask().mButtonPressedTime = 0;
- ef_set_env_blob(APP_REBOOT_RESET_COUNT_KEY, &resetCnt, sizeof(resetCnt));
-
- vTaskDelay(APP_BUTTON_PRESS_LONG);
- GetAppTask().PostEvent(APP_EVENT_FACTORY_RESET);
-#endif
#else
+ /** toggle led to indicate to wait factory reset confirm */
sLightLED.Toggle();
- GetAppTask().mTimerIntvl = 100;
- StartTimer();
#endif
}
- }
-
- if (event & APP_EVENT_BTN_FACTORY_RESET_CANCEL)
- {
- GetAppTask().mTimerIntvl = 1000;
- StartTimer();
- if (GetAppTask().mIsFactoryResetIndicat)
- {
- if (GetAppTask().mIsConnected)
- {
- LightingUpdate(APP_EVENT_LIGHTING_MASK);
- }
- else
- {
- LightingUpdate(APP_EVENT_SYS_BLE_ADV);
- }
- }
- GetAppTask().mIsFactoryResetIndicat = false;
- GetAppTask().mButtonPressedTime = 0;
- }
-
- if (APP_EVENT_TIMER & event)
- {
- if (GetAppTask().mButtonPressedTime)
- {
- if (GetAppTask().mIsFactoryResetIndicat)
- {
- if (chip::System::SystemClock().GetMonotonicMilliseconds64().count() - GetAppTask().mButtonPressedTime >=
- APP_BUTTON_PRESS_LONG)
- {
- /** factory reset indicat done. */
- sLightLED.SetOnoff(false);
- GetAppTask().mTimerIntvl = 1000;
- }
- else
- {
-#if !(defined(BL706_NIGHT_LIGHT) || defined(BL602_NIGHT_LIGHT))
- sLightLED.Toggle();
-#endif
- }
- }
- else
- {
-
-#if defined(BL706_NIGHT_LIGHT) && !defined(LED_BTN_RESET)
-
- if (GetAppTask().mButtonPressedTime)
- {
- uint32_t resetCnt = 0;
-
- if (chip::System::SystemClock().GetMonotonicMilliseconds64().count() - GetAppTask().mButtonPressedTime >
- APP_BUTTON_PRESS_LONG * 2)
- {
- GetAppTask().mButtonPressedTime = 0;
- }
- else if (chip::System::SystemClock().GetMonotonicMilliseconds64().count() - GetAppTask().mButtonPressedTime >
- APP_BUTTON_PRESS_LONG)
- {
-
- size_t saved_value_len = 0;
-
- ef_get_env_blob(APP_REBOOT_RESET_COUNT_KEY, &resetCnt, sizeof(resetCnt), &saved_value_len);
- if (resetCnt >= APP_REBOOT_RESET_COUNT)
- {
- GetAppTask().PostEvent(APP_EVENT_BTN_FACTORY_RESET_IND);
- }
-
- /** a power cycle during factory reset indication state will quit factory reset operation */
- resetCnt = 0;
- ef_set_env_blob(APP_REBOOT_RESET_COUNT_KEY, &resetCnt, sizeof(resetCnt));
- }
- }
#else
- if (ButtonPressed())
- {
- if (!GetAppTask().mIsFactoryResetIndicat &&
- chip::System::SystemClock().GetMonotonicMilliseconds64().count() - GetAppTask().mButtonPressedTime >=
- APP_BUTTON_PRESS_SHORT)
- {
- GetAppTask().PostEvent(APP_EVENT_BTN_FACTORY_RESET_IND);
- }
- }
- else
- {
- GetAppTask().PostEvent(APP_EVENT_BTN_FACTORY_RESET_CANCEL);
- }
-#endif
- }
+ if (System::SystemClock().GetMonotonicMilliseconds64().count() - GetAppTask().mButtonPressedTime > APP_BUTTON_PRESS_LONG)
+ {
+ /** factory reset confirm timeout */
+ GetAppTask().mButtonPressedTime = 0;
+ GetAppTask().PostEvent(APP_EVENT_FACTORY_RESET);
}
-
- StartTimer();
+ else
+ {
+#if defined(BL602_NIGHT_LIGHT) || defined(BL706_NIGHT_LIGHT)
+ /** change color to indicate to wait factory reset confirm */
+ sLightLED.SetColor(254, 0, 210);
+#else
+ /** toggle led to indicate to wait factory reset confirm */
+ sLightLED.Toggle();
+#endif
+ }
+#endif
}
+
+ StartTimer();
}
void AppTask::IdentifyStartHandler(Identify *)
@@ -472,7 +392,7 @@
if (APP_EVENT_IDENTIFY_STOP & event)
{
identifyState = 0;
- LightingUpdate(APP_EVENT_LIGHTING_MASK);
+ GetAppTask().PostEvent(APP_EVENT_LIGHTING_MASK);
ChipLogProgress(NotSpecified, "identify stop");
}
}
@@ -482,13 +402,12 @@
GetAppTask().PostEvent(APP_EVENT_FACTORY_RESET);
}
-#ifdef LED_BTN_RESET
-hosal_gpio_dev_t gpio_key = { .port = LED_BTN_RESET, .config = INPUT_HIGH_IMPEDANCE, .priv = NULL };
+#ifdef BOOT_PIN_RESET
+hosal_gpio_dev_t gpio_key = { .port = BOOT_PIN_RESET, .config = INPUT_HIGH_IMPEDANCE, .priv = NULL };
void AppTask::ButtonInit(void)
{
- GetAppTask().mButtonPressedTime = 0;
- GetAppTask().mIsFactoryResetIndicat = false;
+ GetAppTask().mButtonPressedTime = 0;
hosal_gpio_init(&gpio_key);
hosal_gpio_irq_set(&gpio_key, HOSAL_IRQ_TRIG_POS_PULSE, GetAppTask().ButtonEventHandler, NULL);
@@ -511,9 +430,9 @@
#else
bl_set_gpio_intmod(gpio_key.port, 1, HOSAL_IRQ_TRIG_NEG_LEVEL);
#endif
-
- GetAppTask().mButtonPressedTime = chip::System::SystemClock().GetMonotonicMilliseconds64().count();
- GetAppTask().PostEvent(APP_EVENT_BTN_FACTORY_RESET_PRESS);
+ GetAppTask().mButtonPressedTime = System::SystemClock().GetMonotonicMilliseconds64().count();
+ GetAppTask().mTimerIntvl = APP_BUTTON_PRESS_JITTER;
+ GetAppTask().PostEvent(APP_EVENT_TIMER);
}
else
{
@@ -524,18 +443,20 @@
#endif
if (GetAppTask().mButtonPressedTime)
{
- presstime = chip::System::SystemClock().GetMonotonicMilliseconds64().count() - GetAppTask().mButtonPressedTime;
+ presstime = System::SystemClock().GetMonotonicMilliseconds64().count() - GetAppTask().mButtonPressedTime;
if (presstime >= APP_BUTTON_PRESS_LONG)
{
GetAppTask().PostEvent(APP_EVENT_FACTORY_RESET);
}
else if (presstime <= APP_BUTTON_PRESS_SHORT && presstime >= APP_BUTTON_PRESS_JITTER)
{
+ GetAppTask().mTimerIntvl = 1000;
GetAppTask().PostEvent(APP_EVENT_BTN_SHORT);
}
else
{
- GetAppTask().PostEvent(APP_EVENT_BTN_FACTORY_RESET_CANCEL);
+ GetAppTask().mTimerIntvl = 1000;
+ GetAppTask().PostEvent(APP_EVENT_LIGHTING_MASK);
}
}
diff --git a/examples/lighting-app/bouffalolab/common/AppTask.h b/examples/lighting-app/bouffalolab/common/AppTask.h
index dc16c63..3c32ee7 100644
--- a/examples/lighting-app/bouffalolab/common/AppTask.h
+++ b/examples/lighting-app/bouffalolab/common/AppTask.h
@@ -29,8 +29,8 @@
using namespace ::chip::DeviceLayer;
#define APP_BUTTON_PRESS_JITTER 50
-#define APP_BUTTON_PRESS_SHORT 1000
-#define APP_BUTTON_PRESS_LONG 4000
+#define APP_BUTTON_PRESS_SHORT 1500
+#define APP_BUTTON_PRESS_LONG 5000
#define APP_LIGHT_ENDPOINT_ID 1
#define APP_REBOOT_RESET_COUNT 3
@@ -55,23 +55,9 @@
{
APP_EVENT_NONE = 0x00000000,
- APP_EVENT_BTN_FACTORY_RESET_CANCEL = 0x00000002,
- APP_EVENT_BTN_FACTORY_RESET_IND = 0x00000004,
- APP_EVENT_BTN_FACTORY_RESET_PRESS = 0x00000008,
-
- APP_EVENT_BTN_ALL_MASK =
- APP_EVENT_BTN_FACTORY_RESET_CANCEL | APP_EVENT_BTN_FACTORY_RESET_IND | APP_EVENT_BTN_FACTORY_RESET_PRESS,
- APP_EVENT_TIMER = 0x00000010,
- APP_EVENT_BTN_SHORT = 0x00000020,
-
- APP_EVENT_SYS_BLE_ADV = 0x00000100,
- APP_EVENT_SYS_BLE_CONN = 0x00000200,
- APP_EVENT_SYS_PROVISIONED = 0x00000400,
- APP_EVENT_SYS_LIGHT_TOGGLE = 0x00000800,
- APP_EVENT_FACTORY_RESET = 0x00001000,
-
- APP_EVENT_SYS_ALL_MASK =
- APP_EVENT_SYS_BLE_ADV | APP_EVENT_SYS_BLE_CONN | APP_EVENT_SYS_PROVISIONED | APP_EVENT_FACTORY_RESET,
+ APP_EVENT_TIMER = 0x00000010,
+ APP_EVENT_BTN_SHORT = 0x00000020,
+ APP_EVENT_FACTORY_RESET = 0x00000040,
APP_EVENT_LIGHTING_ONOFF = 0x00010000,
APP_EVENT_LIGHTING_LEVEL = 0x00020000,
@@ -83,8 +69,7 @@
APP_EVENT_IDENTIFY_STOP = 0x04000000,
APP_EVENT_IDENTIFY_MASK = APP_EVENT_IDENTIFY_START | APP_EVENT_IDENTIFY_IDENTIFY | APP_EVENT_IDENTIFY_STOP,
- APP_EVENT_ALL_MASK = APP_EVENT_LIGHTING_MASK | APP_EVENT_BTN_ALL_MASK | APP_EVENT_SYS_ALL_MASK | APP_EVENT_TIMER |
- APP_EVENT_BTN_SHORT | APP_EVENT_IDENTIFY_MASK,
+ APP_EVENT_ALL_MASK = APP_EVENT_LIGHTING_MASK | APP_EVENT_TIMER | APP_EVENT_BTN_SHORT | APP_EVENT_IDENTIFY_MASK,
};
void SetEndpointId(EndpointId endpointId)
@@ -100,7 +85,6 @@
static void IdentifyStartHandler(Identify *);
static void IdentifyStopHandler(Identify *);
static void IdentifyHandleOp(app_event_t event);
- bool mIsConnected;
private:
friend void StartAppTask(void);
@@ -119,7 +103,7 @@
static void TimerEventHandler(app_event_t event);
static void TimerCallback(TimerHandle_t xTimer);
-#ifdef LED_BTN_RESET
+#ifdef BOOT_PIN_RESET
static void ButtonInit(void);
static bool ButtonPressed(void);
static void ButtonEventHandler(void * arg);
@@ -137,7 +121,6 @@
TimerHandle_t sTimer;
uint32_t mTimerIntvl;
uint64_t mButtonPressedTime;
- bool mIsFactoryResetIndicat;
static StackType_t appStack[APP_TASK_STACK_SIZE / sizeof(StackType_t)];
static StaticTask_t appTaskStruct;
diff --git a/examples/lighting-app/bouffalolab/data_model/lighting-app-thread.matter b/examples/lighting-app/bouffalolab/data_model/lighting-app-thread.matter
index 383979f..761728c 100644
--- a/examples/lighting-app/bouffalolab/data_model/lighting-app-thread.matter
+++ b/examples/lighting-app/bouffalolab/data_model/lighting-app-thread.matter
@@ -2140,17 +2140,17 @@
}
server cluster OnOff {
- persist attribute onOff default = 0x00;
+ persist attribute onOff default = 0x01;
ram attribute globalSceneControl default = 0x01;
ram attribute onTime default = 0x0000;
ram attribute offWaitTime default = 0x0000;
- persist attribute startUpOnOff default = 0xFF;
+ persist attribute startUpOnOff;
ram attribute featureMap default = 1;
ram attribute clusterRevision default = 5;
}
server cluster LevelControl {
- persist attribute currentLevel default = 0x01;
+ persist attribute currentLevel default = 0x254;
ram attribute remainingTime default = 0x0000;
ram attribute minLevel default = 0x01;
ram attribute maxLevel default = 0xFE;
@@ -2159,11 +2159,11 @@
ram attribute maxFrequency default = 0x0000;
ram attribute options default = 0x00;
ram attribute onOffTransitionTime default = 0x0000;
- ram attribute onLevel default = 0xFF;
+ ram attribute onLevel;
ram attribute onTransitionTime;
ram attribute offTransitionTime;
ram attribute defaultMoveRate default = 50;
- persist attribute startUpCurrentLevel default = 255;
+ persist attribute startUpCurrentLevel;
ram attribute featureMap default = 3;
ram attribute clusterRevision default = 5;
}
diff --git a/examples/lighting-app/bouffalolab/data_model/lighting-app-thread.zap b/examples/lighting-app/bouffalolab/data_model/lighting-app-thread.zap
index 5b31d85..852948f 100644
--- a/examples/lighting-app/bouffalolab/data_model/lighting-app-thread.zap
+++ b/examples/lighting-app/bouffalolab/data_model/lighting-app-thread.zap
@@ -6087,7 +6087,7 @@
"storageOption": "NVM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "0x00",
+ "defaultValue": "0x01",
"reportable": 1,
"minInterval": 0,
"maxInterval": 65344,
@@ -6151,7 +6151,7 @@
"storageOption": "NVM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "0xFF",
+ "defaultValue": null,
"reportable": 1,
"minInterval": 0,
"maxInterval": 65344,
@@ -6301,7 +6301,7 @@
"storageOption": "NVM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "0x01",
+ "defaultValue": "0x254",
"reportable": 1,
"minInterval": 0,
"maxInterval": 65344,
@@ -6445,7 +6445,7 @@
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "0xFF",
+ "defaultValue": null,
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
@@ -6509,7 +6509,7 @@
"storageOption": "NVM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "255",
+ "defaultValue": null,
"reportable": 1,
"minInterval": 0,
"maxInterval": 65344,
@@ -8341,5 +8341,6 @@
"endpointVersion": 1,
"deviceIdentifier": 269
}
- ]
-}
\ No newline at end of file
+ ],
+ "log": []
+}
diff --git a/examples/lighting-app/bouffalolab/data_model/lighting-app-wifi.matter b/examples/lighting-app/bouffalolab/data_model/lighting-app-wifi.matter
index 06da353..cec65b4 100644
--- a/examples/lighting-app/bouffalolab/data_model/lighting-app-wifi.matter
+++ b/examples/lighting-app/bouffalolab/data_model/lighting-app-wifi.matter
@@ -2002,17 +2002,17 @@
}
server cluster OnOff {
- persist attribute onOff default = 0x00;
+ persist attribute onOff default = 0x1;
ram attribute globalSceneControl default = 0x01;
ram attribute onTime default = 0x0000;
ram attribute offWaitTime default = 0x0000;
- persist attribute startUpOnOff default = 0xFF;
+ persist attribute startUpOnOff;
ram attribute featureMap default = 1;
ram attribute clusterRevision default = 5;
}
server cluster LevelControl {
- persist attribute currentLevel default = 0x01;
+ persist attribute currentLevel default = 0x254;
ram attribute remainingTime default = 0x0000;
ram attribute minLevel default = 0x01;
ram attribute maxLevel default = 0xFE;
@@ -2021,11 +2021,11 @@
ram attribute maxFrequency default = 0x0000;
ram attribute options default = 0x00;
ram attribute onOffTransitionTime default = 0x0000;
- ram attribute onLevel default = 0xFF;
+ ram attribute onLevel;
ram attribute onTransitionTime;
ram attribute offTransitionTime;
ram attribute defaultMoveRate default = 50;
- persist attribute startUpCurrentLevel default = 255;
+ persist attribute startUpCurrentLevel;
ram attribute featureMap default = 3;
ram attribute clusterRevision default = 5;
}
diff --git a/examples/lighting-app/bouffalolab/data_model/lighting-app-wifi.zap b/examples/lighting-app/bouffalolab/data_model/lighting-app-wifi.zap
index 8d717c4..90bd7a2 100644
--- a/examples/lighting-app/bouffalolab/data_model/lighting-app-wifi.zap
+++ b/examples/lighting-app/bouffalolab/data_model/lighting-app-wifi.zap
@@ -6087,7 +6087,7 @@
"storageOption": "NVM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "0x00",
+ "defaultValue": "0x1",
"reportable": 1,
"minInterval": 0,
"maxInterval": 65344,
@@ -6151,7 +6151,7 @@
"storageOption": "NVM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "0xFF",
+ "defaultValue": null,
"reportable": 1,
"minInterval": 0,
"maxInterval": 65344,
@@ -6301,7 +6301,7 @@
"storageOption": "NVM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "0x01",
+ "defaultValue": "0x254",
"reportable": 1,
"minInterval": 0,
"maxInterval": 65344,
@@ -6445,7 +6445,7 @@
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "0xFF",
+ "defaultValue": null,
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
@@ -6509,7 +6509,7 @@
"storageOption": "NVM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "255",
+ "defaultValue": null,
"reportable": 1,
"minInterval": 0,
"maxInterval": 65344,
@@ -8341,5 +8341,6 @@
"endpointVersion": 1,
"deviceIdentifier": 269
}
- ]
-}
\ No newline at end of file
+ ],
+ "log": []
+}
diff --git a/examples/platform/bouffalolab/bl702/ldscripts/psram_flash.ld b/examples/platform/bouffalolab/bl702/ldscripts/psram_flash.ld
index c31a453..c18b569 100644
--- a/examples/platform/bouffalolab/bl702/ldscripts/psram_flash.ld
+++ b/examples/platform/bouffalolab/bl702/ldscripts/psram_flash.ld
@@ -214,79 +214,44 @@
PROVIDE ( __psram_bss_init_start = . );
/** put the bss data in psram between __psram_bss_init_start and __psram_bss_init_end will bet reset to 0 after psram init*/
- . = ALIGN(8);
- KEEP(*lighting-common.*.cpp.o(.bss.*ttributeData*))
- . = ALIGN(8);
- KEEP(*lighting-common.*.cpp.o(.bss.*bindingTable*))
- . = ALIGN(8);
- KEEP(*lighting-common.*.cpp.o(.bss.appResponseData*))
- . = ALIGN(8);
- KEEP(*lighting-common.*.cpp.o(.bss.*NetworkCommissioning*))
-
- . = ALIGN(8);
- KEEP(*dnssd.Advertiser_ImplMinimalMdns.cpp.o(.bss.*gAdvertiser*))
- . = ALIGN(8);
- KEEP(*dnssd.MinimalMdnsServer.cpp.o(.bss.*GlobalMinimalMdnsServer*_instance))
- . = ALIGN(8);
- KEEP(*dnssd.Resolver_ImplMinimalMdns.cpp.o(.bss.*gResolver*))
-
- /*. = ALIGN(8);*/
- /*KEEP(*libCHIPAppServer.Server.cpp.o(.bss.*sServer*))*/
-
- . = ALIGN(8);
- KEEP(*bridge-common.*.cpp.o(.bss.*))
- /* . = ALIGN(8); */
- /* # KEEP(*bridge-common.*.cpp.o(.bss.*bindingTable*)) */
- /* # . = ALIGN(8); */
- /* # KEEP(*bridge-common.*.cpp.o(.bss.appResponseData*)) */
- /* # . = ALIGN(8); */
- /* # KEEP(*bridge-common.*.cpp.o(.bss.*NetworkCommissioning*)) */
-
- . = ALIGN(8);
- KEEP(*libopenthread-cli-*.cli.cpp.o(.bss.*sInterpreterRaw*))
-
- . = ALIGN(8);
- KEEP(*libopenthread-cli-*.cli_dataset.cpp.o(.bss.*sDataset*))
-
- . = ALIGN(8);
- KEEP(*libopenthread-ftd.instance.cpp.o(.bss.*gInstanceRaw*))
-
- . = ALIGN(8);
- KEEP(*commands.Dns.cpp.o(.bss.*))
-
- . = ALIGN(8);
- KEEP(*commands.BLE.cpp.o(.bss.*))
-
- . = ALIGN(8);
- KEEP(*commands.Device.cpp.o(.bss.*))
-
- . = ALIGN(8);
- KEEP(*commands.Base64.cpp.o(.bss.*))
-
- . = ALIGN(8);
- KEEP(*commands.Base64.cpp.o(.bss.*))
-
- . = ALIGN(8);
-/* KEEP(*shell_common.cmd_*.cpp.o(.bss.*))*/
-
- . = ALIGN(8);
- KEEP(*shell_core.Engine.cpp.o(.bss.*theEngineRoot*))
-
- . = ALIGN(8);
- /* KEEP(*shell_common.globals.cpp.o(.bss.*)) */
-
- . = ALIGN(8);
- KEEP(*lwip.memp.c.o(.bss.lwip_PBUF_POOL))
- . = ALIGN(8);
- KEEP(*sdk_lwip.dns.c.o(.bss.dns_table))
-
- . = ALIGN(8);
- KEEP(*virt_net_spi.c.o(.bss.tx_buffer))
-
- PROVIDE ( __psram_bss_init_end = . );
. = ALIGN(16);
+ KEEP(*libCHIP.a:*(.sbss.*))
+ KEEP(*libCHIP.a:*(.bss.*))
+ . = ALIGN(16);
+ KEEP(*libCHIPAppServer.a:*(.sbss.*))
+ KEEP(*libCHIPAppServer.a:*(.bss.*))
+
+ . = ALIGN(16);
+ KEEP(*libMatterDeviceInfoProviderExample.a:*(.sbss.*))
+ KEEP(*libMatterDeviceInfoProviderExample.a:*(.bss.*))
+
+ . = ALIGN(16);
+ KEEP(*src/app/clusters/*/bouffalolab*.cpp.o(.sbss.*))
+ KEEP(*src/app/clusters/*/bouffalolab*.cpp.o(.bss.*))
+
+ . = ALIGN(16);
+ KEEP(*examples/platform/bouffalolab/common/plat/chip*.c.o(.sbss.*))
+ KEEP(*examples/platform/bouffalolab/common/plat/chip*.c.o(.sbss.*))
+ KEEP(*examples/platform/bouffalolab/common/plat/chip*.cpp.o(.bss.*))
+ KEEP(*examples/platform/bouffalolab/common/plat/chip*.cpp.o(.bss.*))
+
+ . = ALIGN(16);
+ KEEP(*examples/*/bouffalolab/common/chip*.c.o(.sbss.*))
+ KEEP(*examples/*/bouffalolab/common/chip*.c.o(.sbss.*))
+ KEEP(*examples/*/bouffalolab/common/chip*.cpp.o(.bss.*))
+ KEEP(*examples/*/bouffalolab/common/chip*.cpp.o(.bss.*))
+
+ . = ALIGN(16);
+ KEEP(*sdk_lwip.*.c.o(.sbss.*))
+ KEEP(*sdk_lwip.*.c.o(.bss.*))
+
+ . = ALIGN(16);
+ KEEP(*stack_main.o(.bss.*))
+
+ . = ALIGN(16);
*(.wifi_ram*)
+ PROVIDE ( __psram_bss_init_end = . );
} >psram
. = ALIGN(8);
diff --git a/examples/platform/bouffalolab/bl702l/ldscripts/psram_flash_rom.ld b/examples/platform/bouffalolab/bl702l/ldscripts/psram_flash_rom.ld
index 6dce5b3..60d1ea8 100644
--- a/examples/platform/bouffalolab/bl702l/ldscripts/psram_flash_rom.ld
+++ b/examples/platform/bouffalolab/bl702l/ldscripts/psram_flash_rom.ld
@@ -10,7 +10,7 @@
flash (rxai!w) : ORIGIN = 0x23000000, LENGTH = (2M)
tcm_ocram (wxa) : ORIGIN = 0x4201C000 + __CACHE_SIZE, LENGTH = (16K - __CACHE_SIZE + 80K - __EM_SIZE)
hbnram (wxa) : ORIGIN = 0x40010000, LENGTH = (4K)
- psram (wxa) : ORIGIN = 0x26000000, LENGTH = (2M)
+ psram (wxa) : ORIGIN = 0x24000000, LENGTH = (2M)
}
SECTIONS
@@ -169,91 +169,53 @@
PROVIDE ( __psram_bss_init_start = . );
/** put the bss data in psram between __psram_bss_init_start and __psram_bss_init_end will bet reset to 0 after psram init*/
- . = ALIGN(8);
- KEEP(*lighting-common.*.cpp.o(.bss.*ttributeData*))
- . = ALIGN(8);
- KEEP(*lighting-common.*.cpp.o(.bss.*bindingTable*))
- . = ALIGN(8);
- KEEP(*lighting-common.*.cpp.o(.bss.appResponseData*))
- . = ALIGN(8);
- KEEP(*lighting-common.*.cpp.o(.bss.*NetworkCommissioning*))
-
- . = ALIGN(8);
- KEEP(*dnssd.Advertiser_ImplMinimalMdns.cpp.o(.bss.*gAdvertiser*))
- . = ALIGN(8);
- KEEP(*dnssd.MinimalMdnsServer.cpp.o(.bss.*GlobalMinimalMdnsServer*_instance))
- . = ALIGN(8);
- KEEP(*dnssd.Resolver_ImplMinimalMdns.cpp.o(.bss.*gResolver*))
-
- /*. = ALIGN(8);*/
- /*KEEP(*libCHIPAppServer.Server.cpp.o(.bss.*sServer*))*/
-
- . = ALIGN(8);
- KEEP(*bridge-common.*.cpp.o(.bss.*))
- /* . = ALIGN(8); */
- /* # KEEP(*bridge-common.*.cpp.o(.bss.*bindingTable*)) */
- /* # . = ALIGN(8); */
- /* # KEEP(*bridge-common.*.cpp.o(.bss.appResponseData*)) */
- /* # . = ALIGN(8); */
- /* # KEEP(*bridge-common.*.cpp.o(.bss.*NetworkCommissioning*)) */
-
- . = ALIGN(8);
- KEEP(*libopenthread-cli-*.cli.cpp.o(.bss.*sInterpreterRaw*))
-
- . = ALIGN(8);
- KEEP(*libopenthread-cli-*.cli_dataset.cpp.o(.bss.*sDataset*))
-
- . = ALIGN(8);
- KEEP(*libopenthread-ftd.instance.cpp.o(.bss.*gInstanceRaw*))
-
- . = ALIGN(8);
- KEEP(*commands.Dns.cpp.o(.bss.*))
-
- . = ALIGN(8);
- KEEP(*commands.BLE.cpp.o(.bss.*))
-
- . = ALIGN(8);
- KEEP(*commands.Device.cpp.o(.bss.*))
-
- . = ALIGN(8);
- KEEP(*commands.Base64.cpp.o(.bss.*))
-
- . = ALIGN(8);
- KEEP(*commands.Base64.cpp.o(.bss.*))
-
- . = ALIGN(8);
- KEEP(*shell_core.Engine.cpp.o(.bss.*theEngineRoot*))
-
- . = ALIGN(8);
- KEEP(*sdk_openthread_port.ot_radio.c.o(.bss.otRadio_buffPool))
-
- . = ALIGN(8);
- KEEP(*BL702L.PlatformManagerImpl.cpp.o(.bss._ZN4chip11DeviceLayer19PlatformManagerImpl9sInstanceE))
-
- . = ALIGN(8);
- KEEP(*BL702L.ThreadStackManagerImpl.cpp.o(.bss._ZN4chip11DeviceLayer22ThreadStackManagerImpl9sInstanceE))
-
- . = ALIGN(8);
- KEEP(*libCHIPAppServer.Server.cpp.o(.bss._ZN4chip6Server7sServerE))
-
- . = ALIGN(8);
- KEEP(*libaccess.ExampleAccessControlDelegate.cpp.o(.bss.*))
-
- . = ALIGN(8);
- KEEP(*libTransportLayer.SessionManager.cpp.o(.bss.*))
-
- . = ALIGN(8);
- KEEP(*lwip.memp.c.o(.bss.*))
- . = ALIGN(8);
- KEEP(*sdk_lwip.dns.c.o(.bss.dns_table))
-
- . = ALIGN(8);
- KEEP(*virt_net_spi.c.o(.bss.tx_buffer))
-
- PROVIDE ( __psram_bss_init_end = . );
. = ALIGN(16);
+ KEEP(*libCHIP.a:*(.sbss.*))
+ KEEP(*libCHIP.a:*(.bss.*))
+ . = ALIGN(16);
+ KEEP(*libCHIPAppServer.a:*(.sbss.*))
+ KEEP(*libCHIPAppServer.a:*(.bss.*))
+
+ . = ALIGN(16);
+ KEEP(*libMatterDeviceInfoProviderExample.a:*(.sbss.*))
+ KEEP(*libMatterDeviceInfoProviderExample.a:*(.bss.*))
+
+ . = ALIGN(16);
+ KEEP(*libopenthread-ftd.a:*(.sbss.*))
+ KEEP(*libopenthread-ftd.a:*(.bss.*))
+ KEEP(*libopenthread-mtd.a:*(.sbss.*))
+ KEEP(*libopenthread-mtd.a:*(.bss.*))
+
+ . = ALIGN(16);
+ KEEP(*src/app/clusters/*/bouffalolab*.cpp.o(.sbss.*))
+ KEEP(*src/app/clusters/*/bouffalolab*.cpp.o(.bss.*))
+
+ . = ALIGN(16);
+ KEEP(*examples/platform/bouffalolab/common/plat/chip*.c.o(.sbss.*))
+ KEEP(*examples/platform/bouffalolab/common/plat/chip*.c.o(.sbss.*))
+ KEEP(*examples/platform/bouffalolab/common/plat/chip*.cpp.o(.bss.*))
+ KEEP(*examples/platform/bouffalolab/common/plat/chip*.cpp.o(.bss.*))
+
+ . = ALIGN(16);
+ KEEP(*examples/*/bouffalolab/common/chip*.c.o(.sbss.*))
+ KEEP(*examples/*/bouffalolab/common/chip*.c.o(.sbss.*))
+ KEEP(*examples/*/bouffalolab/common/chip*.cpp.o(.bss.*))
+ KEEP(*examples/*/bouffalolab/common/chip*.cpp.o(.bss.*))
+
+ . = ALIGN(16);
+ KEEP(*sdk_lwip.*.c.o(.sbss.*))
+ KEEP(*sdk_lwip.*.c.o(.bss.*))
+ KEEP(*lwip.*.c.o(.bss.*))
+
+
+
+ . = ALIGN(16);
+ KEEP(*stack_main.o(.bss.*))
+
+ . = ALIGN(16);
*(.wifi_ram*)
+ PROVIDE ( __psram_bss_init_end = . );
} > psram
. = ALIGN(8);
diff --git a/examples/platform/bouffalolab/common/plat/MemMonitoring.cpp b/examples/platform/bouffalolab/common/plat/MemMonitoring.cpp
index 3e66d05..6e58131 100644
--- a/examples/platform/bouffalolab/common/plat/MemMonitoring.cpp
+++ b/examples/platform/bouffalolab/common/plat/MemMonitoring.cpp
@@ -18,8 +18,6 @@
#include <FreeRTOS.h>
#include <MemMonitoring.h>
-#include <lib/support/CodeUtils.h>
-#include <lib/support/ErrorStr.h>
#include <plat.h>
#include <platform/CHIPDeviceLayer.h>
diff --git a/examples/platform/bouffalolab/common/plat/demo_pwm.c b/examples/platform/bouffalolab/common/plat/demo_pwm.c
index 58e6376..c279ddc 100644
--- a/examples/platform/bouffalolab/common/plat/demo_pwm.c
+++ b/examples/platform/bouffalolab/common/plat/demo_pwm.c
@@ -4,12 +4,13 @@
* Contact information:
* web site: https://www.bouffalolab.com/
*/
-
-#include "demo_pwm.h"
-#include "board.h"
-#include <hosal_pwm.h>
#include <stdio.h>
+#include <hosal_pwm.h>
+
+#include "board.h"
+#include "demo_pwm.h"
+
#define PWM_FREQ 1000
#define PWM_DUTY_CYCLE 10000
diff --git a/examples/platform/bouffalolab/common/plat/main.cpp b/examples/platform/bouffalolab/common/plat/main.cpp
index abf7ef6..bf04405 100644
--- a/examples/platform/bouffalolab/common/plat/main.cpp
+++ b/examples/platform/bouffalolab/common/plat/main.cpp
@@ -27,8 +27,6 @@
#include <AppTask.h>
#include <easyflash.h>
-#include <lib/support/CHIPMem.h>
-#include <lib/support/CHIPPlatformMemory.h>
#include <plat.h>
extern "C" {
@@ -45,7 +43,9 @@
#include <wifi_mgmr_ext.h>
#endif
#include <bl_irq.h>
+#if defined(BL702L_ENABLE)
#include <bl_rtc.h>
+#endif
#include <bl_sec.h>
#include <bl_sys.h>
#ifdef CFG_USE_PSRAM
@@ -64,6 +64,7 @@
#endif
#include "board.h"
+#include <uart.h>
}
using namespace ::chip;
@@ -138,15 +139,13 @@
/* If the buffers to be provided to the Idle task are declared inside this
function then they must be declared static - otherwise they will be allocated on
the stack and so not exists after this function exits. */
- static StaticTask_t xIdleTaskTCB;
- static StackType_t uxIdleTaskStack[configMINIMAL_STACK_SIZE];
/* Pass out a pointer to the StaticTask_t structure in which the Idle task's
state will be stored. */
- *ppxIdleTaskTCBBuffer = &xIdleTaskTCB;
+ *ppxIdleTaskTCBBuffer = (StaticTask_t *) pvPortMalloc(sizeof(StaticTask_t));
/* Pass out the array that will be used as the Idle task's stack. */
- *ppxIdleTaskStackBuffer = uxIdleTaskStack;
+ *ppxIdleTaskStackBuffer = (StackType_t *) pvPortMalloc(sizeof(StackType_t) * configMINIMAL_STACK_SIZE);
/* Pass out the size of the array pointed to by *ppxIdleTaskStackBuffer.
Note that, as the array is necessarily of type StackType_t,
@@ -163,15 +162,13 @@
/* If the buffers to be provided to the Timer task are declared inside this
function then they must be declared static - otherwise they will be allocated on
the stack and so not exists after this function exits. */
- static StaticTask_t xTimerTaskTCB;
- static StackType_t uxTimerTaskStack[configTIMER_TASK_STACK_DEPTH];
/* Pass out a pointer to the StaticTask_t structure in which the Timer
task's state will be stored. */
- *ppxTimerTaskTCBBuffer = &xTimerTaskTCB;
+ *ppxTimerTaskTCBBuffer = (StaticTask_t *) pvPortMalloc(sizeof(StaticTask_t));
/* Pass out the array that will be used as the Timer task's stack. */
- *ppxTimerTaskStackBuffer = uxTimerTaskStack;
+ *ppxTimerTaskStackBuffer = (StackType_t *) pvPortMalloc(sizeof(StackType_t) * configTIMER_TASK_STACK_DEPTH);
/* Pass out the size of the array pointed to by *ppxTimerTaskStackBuffer.
Note that, as the array is necessarily of type StackType_t,
@@ -196,7 +193,15 @@
void * ra = (void *) __builtin_return_address(0);
taskDISABLE_INTERRUPTS();
- ChipLogProgress(NotSpecified, "vAssertCalled, ra= %p", ra);
+ if (xPortIsInsideInterrupt())
+ {
+ printf("vAssertCalled, ra = %p in ISR\r\n", (void *) ra);
+ }
+ else
+ {
+ printf("vAssertCalled, ra = %p in task %s\r\n", (void *) ra, pcTaskGetName(NULL));
+ }
+
while (true)
;
}
@@ -208,7 +213,15 @@
void * ra = (void *) __builtin_return_address(0);
taskDISABLE_INTERRUPTS();
- ChipLogProgress(NotSpecified, "vAssertCalled, ra= %p", ra);
+ if (xPortIsInsideInterrupt())
+ {
+ printf("vAssertCalled, ra = %p in ISR\r\n", (void *) ra);
+ }
+ else
+ {
+ printf("vAssertCalled, ra = %p in task %s\r\n", (void *) ra, pcTaskGetName(NULL));
+ }
+
while (true)
;
}
@@ -330,20 +343,6 @@
}
#endif
-#ifdef BL702L_ENABLE
-void exception_entry_app(uint32_t mcause, uint32_t mepc, uint32_t mtval, uintptr_t * regs, uintptr_t * tasksp)
-{
- static const char dbg_str[] = "Exception Entry--->>>\r\n mcause %08lx, mepc %08lx, mtval %08lx\r\n";
-
- printf(dbg_str, mcause, mepc, mtval);
-
- while (1)
- {
- /*dead loop now*/
- }
-}
-#endif
-
extern "C" void setup_heap()
{
bl_sys_init();
@@ -362,16 +361,6 @@
vPortDefineHeapRegions(xHeapRegions);
- bl_sys_early_init();
-
-#ifdef BL702L_ENABLE
- rom_freertos_init(256, 400);
- rom_hal_init();
- rom_lmac154_hook_init();
-
- exception_entry_ptr = exception_entry_app;
-#endif
-
#ifdef CFG_USE_PSRAM
bl_psram_init();
do_psram_test();
@@ -386,6 +375,14 @@
extern "C" void app_init(void)
{
+ bl_sys_early_init();
+
+#ifdef BL702L_ENABLE
+ rom_freertos_init(256, 400);
+ rom_hal_init();
+ rom_lmac154_hook_init();
+#endif
+
hosal_uart_init(&uart_stdio);
ChipLogProgress(NotSpecified, "==================================================");
@@ -403,7 +400,9 @@
blog_init();
bl_irq_init();
+#if defined(BL702L_ENABLE)
bl_rtc_init();
+#endif
bl_sec_init();
#if defined(BL702_ENABLE)
bl_timer_init();
@@ -414,6 +413,9 @@
/* board config is set after system is init*/
hal_board_cfg(0);
+#if defined(BL702L_ENABLE) || defined(BL706_WIFI)
+ hosal_dma_init();
+#endif
#ifdef BL602_ENABLE
wifi_td_diagnosis_init();
#endif
@@ -423,12 +425,9 @@
{
app_init();
- easyflash_init();
- ef_load_env_cache();
-
- ChipLogProgress(NotSpecified, "Init CHIP Memory");
- chip::Platform::MemoryInit(NULL, 0);
-
+#if CONFIG_ENABLE_CHIP_SHELL || PW_RPC_ENABLED
+ uartInit();
+#endif
#ifdef SYS_AOS_LOOP_ENABLE
ChipLogProgress(NotSpecified, "Starting AOS loop Task");
aos_loop_start();
@@ -439,6 +438,12 @@
#endif
#endif
+ easyflash_init();
+ ef_load_env_cache();
+
+ ChipLogProgress(NotSpecified, "Init CHIP Memory");
+ chip::Platform::MemoryInit(NULL, 0);
+
ChipLogProgress(NotSpecified, "Starting App Task");
StartAppTask();
diff --git a/examples/platform/bouffalolab/common/plat/platform.cpp b/examples/platform/bouffalolab/common/plat/platform.cpp
index dc2f2a0..d2e6a43 100644
--- a/examples/platform/bouffalolab/common/plat/platform.cpp
+++ b/examples/platform/bouffalolab/common/plat/platform.cpp
@@ -15,26 +15,40 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
+#include <DeviceInfoProviderImpl.h>
+#include <OTAConfig.h>
#include <app/server/Dnssd.h>
#include <app/server/OnboardingCodesUtil.h>
#include <app/server/Server.h>
#include <credentials/DeviceAttestationCredsProvider.h>
#include <credentials/examples/DeviceAttestationCredsExample.h>
-#include <lib/support/CodeUtils.h>
-#include <lib/support/ErrorStr.h>
+#include <platform/bouffalolab/common/PlatformManagerImpl.h>
#include <system/SystemClock.h>
+#if HEAP_MONITORING
+#include <MemMonitoring.h>
+#endif
+
+#if CONFIG_ENABLE_CHIP_SHELL
+#include <ChipShellCollection.h>
+#include <lib/shell/Engine.h>
+#endif
+
+#if PW_RPC_ENABLED
+#include <PigweedLogger.h>
+#include <Rpc.h>
+#endif
+#if CONFIG_ENABLE_CHIP_SHELL || PW_RPC_ENABLED
+#include <uart.h>
+#endif
+
+#if CONFIG_BOUFFALOLAB_FACTORY_DATA_ENABLE || defined(CONFIG_BOUFFALOLAB_FACTORY_DATA_TEST)
+#include <platform/bouffalolab/common/FactoryDataProvider.h>
+#endif
+
#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
#include <NetworkCommissioningDriver.h>
#include <app/clusters/network-commissioning/network-commissioning.h>
-#include <route_hook/bl_route_hook.h>
-#endif
-#include <platform/bouffalolab/common/PlatformManagerImpl.h>
-
-#if HEAP_MONITORING
-#include <MemMonitoring.h>
-#include <lib/support/CHIPMem.h>
#endif
#if CHIP_ENABLE_OPENTHREAD
@@ -44,27 +58,18 @@
#include <utils_list.h>
#endif
-#ifdef OTA_ENABLED
-#include "OTAConfig.h"
-#endif // OTA_ENABLED
-
-#if CONFIG_ENABLE_CHIP_SHELL
-#include <ChipShellCollection.h>
-#include <lib/shell/Engine.h>
+#if !CHIP_DEVICE_CONFIG_ENABLE_THREAD
+#include <lwip/netif.h>
+#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
+#if defined(BL602_ENABLE)
+#include <wifi_mgmr_ext.h>
+#else
+#include <platform/bouffalolab/BL702/WiFiInterface.h>
#endif
-
-#if PW_RPC_ENABLED
-#include "PigweedLogger.h"
-#include "Rpc.h"
+#else
+#include <platform/bouffalolab/BL702/EthernetInterface.h>
#endif
-
-#include <DeviceInfoProviderImpl.h>
-#if CONFIG_BOUFFALOLAB_FACTORY_DATA_ENABLE || defined(CONFIG_BOUFFALOLAB_FACTORY_DATA_TEST)
-#include <platform/bouffalolab/common/FactoryDataProvider.h>
-#endif
-
-#if CONFIG_ENABLE_CHIP_SHELL || PW_RPC_ENABLED
-#include "uart.h"
+#include <bl_route_hook.h>
#endif
#include <AppTask.h>
@@ -95,55 +100,18 @@
switch (event->Type)
{
case DeviceEventType::kCHIPoBLEAdvertisingChange:
-
-#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
- GetAppTask().mIsConnected = ConnectivityMgr().IsWiFiStationConnected();
-#endif
-#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
- GetAppTask().mIsConnected = ConnectivityMgr().IsThreadAttached();
-#endif
-
- if (ConnectivityMgr().NumBLEConnections())
- {
- GetAppTask().PostEvent(AppTask::APP_EVENT_SYS_BLE_CONN);
- }
- else
- {
- GetAppTask().PostEvent(AppTask::APP_EVENT_SYS_BLE_ADV);
- }
ChipLogProgress(NotSpecified, "BLE adv changed, connection number: %d", ConnectivityMgr().NumBLEConnections());
break;
#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
case DeviceEventType::kThreadStateChange:
- ChipLogProgress(NotSpecified, "Thread state changed, IsThreadAttached: %d", ConnectivityMgr().IsThreadAttached());
- if (!GetAppTask().mIsConnected && ConnectivityMgr().IsThreadAttached())
+ if (ConnectivityMgr().IsThreadAttached())
{
- GetAppTask().PostEvent(AppTask::APP_EVENT_SYS_PROVISIONED);
- GetAppTask().mIsConnected = true;
-#ifdef OTA_ENABLED
chip::DeviceLayer::SystemLayer().StartTimer(chip::System::Clock::Seconds32(OTAConfig::kInitOTARequestorDelaySec),
OTAConfig::InitOTARequestorHandler, nullptr);
-#endif
}
break;
-#endif
-
-#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
- case DeviceEventType::kWiFiConnectivityChange:
-
- ChipLogProgress(NotSpecified, "Wi-Fi state changed to %s.",
- ConnectivityMgr().IsWiFiStationConnected() ? "connected" : "disconnected");
-
- chip::app::DnssdServer::Instance().StartServer();
- NetworkCommissioning::BLWiFiDriver::GetInstance().SaveConfiguration();
- if (!GetAppTask().mIsConnected && ConnectivityMgr().IsWiFiStationConnected())
- {
- GetAppTask().PostEvent(AppTask::APP_EVENT_SYS_PROVISIONED);
- GetAppTask().mIsConnected = true;
- }
- break;
-
+#else
case DeviceEventType::kInterfaceIpAddressChanged:
if ((event->InterfaceIpAddressChanged.Type == InterfaceIpChangeType::kIpV4_Assigned) ||
(event->InterfaceIpAddressChanged.Type == InterfaceIpChangeType::kIpV6_Assigned))
@@ -152,21 +120,45 @@
// will not trigger a 'internet connectivity change' as there is no internet
// connectivity. MDNS still wants to refresh its listening interfaces to include the
// newly selected address.
- chip::app::DnssdServer::Instance().StartServer();
- }
- if (event->InterfaceIpAddressChanged.Type == InterfaceIpChangeType::kIpV6_Assigned)
- {
- ChipLogProgress(NotSpecified, "Initializing route hook...");
+ chip::app::DnssdServer::Instance().StartServer();
+
bl_route_hook_init();
-#ifdef OTA_ENABLED
chip::DeviceLayer::SystemLayer().StartTimer(chip::System::Clock::Seconds32(OTAConfig::kInitOTARequestorDelaySec),
OTAConfig::InitOTARequestorHandler, nullptr);
-#endif
}
+
break;
#endif
+ case DeviceEventType::kInternetConnectivityChange:
+ if (event->InternetConnectivityChange.IPv4 == kConnectivity_Established)
+ {
+ ChipLogProgress(NotSpecified, "IPv4 connectivity ready...");
+ }
+ else if (event->InternetConnectivityChange.IPv4 == kConnectivity_Lost)
+ {
+ ChipLogProgress(NotSpecified, "Lost IPv4 connectivity...");
+ }
+ if (event->InternetConnectivityChange.IPv6 == kConnectivity_Established)
+ {
+ ChipLogProgress(NotSpecified, "IPv6 connectivity ready...");
+ }
+ else if (event->InternetConnectivityChange.IPv6 == kConnectivity_Lost)
+ {
+ ChipLogProgress(NotSpecified, "Lost IPv6 connectivity...");
+ }
+ break;
+ case DeviceEventType::kCHIPoBLEConnectionEstablished:
+ ChipLogProgress(NotSpecified, "BLE connection established");
+ break;
+ case DeviceEventType::kCHIPoBLEConnectionClosed:
+ ChipLogProgress(NotSpecified, "BLE disconnected");
+ break;
+ case DeviceEventType::kCommissioningComplete:
+ ChipLogProgress(NotSpecified, "Commissioning complete");
+ GetAppTask().PostEvent(AppTask::APP_EVENT_LIGHTING_MASK);
+ break;
default:
break;
}
@@ -253,7 +245,12 @@
ConfigurationMgr().LogDeviceConfig();
+#if CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE
PrintOnboardingCodes(chip::RendezvousInformationFlag(chip::RendezvousInformationFlag::kBLE));
+#else
+ PrintOnboardingCodes(chip::RendezvousInformationFlag(chip::RendezvousInformationFlag::kOnNetwork));
+#endif
+
PlatformMgr().AddEventHandler(ChipEventHandler, 0);
#if PW_RPC_ENABLED
diff --git a/examples/platform/bouffalolab/common/plat/uart.c b/examples/platform/bouffalolab/common/plat/uart.c
index 8f2742f..35e0516 100644
--- a/examples/platform/bouffalolab/common/plat/uart.c
+++ b/examples/platform/bouffalolab/common/plat/uart.c
@@ -19,12 +19,21 @@
#include <FreeRTOS.h>
#include <semphr.h>
-#include <bl_uart.h>
-#include <hosal_uart.h>
-
#include <board.h>
+#ifdef CFG_USB_CDC_ENABLE
+#include <aos/kernel.h>
+#include <aos/yloop.h>
+#include <device/vfs_uart.h>
+#include <event_device.h>
+#include <hal_board.h>
+#include <libfdt.h>
+#include <vfs.h>
+#else
+#include <bl_uart.h>
+#include <hosal_uart.h>
extern hosal_uart_dev_t uart_stdio;
+#endif
#if CONFIG_ENABLE_CHIP_SHELL || PW_RPC_ENABLED
@@ -42,6 +51,7 @@
static chipUart_t chipUart_var;
+#ifndef CFG_USB_CDC_ENABLE
static int uartTxCallback(void * p_arg)
{
hosal_uart_ioctl(&uart_stdio, HOSAL_UART_TX_TRIGGER_OFF, NULL);
@@ -81,6 +91,39 @@
return 0;
}
+#else
+void aosUartRxCallback(int fd, void * param)
+{
+ uint32_t len = 0, readlen = 0;
+ BaseType_t xHigherPriorityTaskWoken = 1;
+
+ if (chipUart_var.head >= chipUart_var.tail)
+ {
+ if (chipUart_var.head < MAX_BUFFER_SIZE)
+ {
+ readlen = len = aos_read(fd, chipUart_var.rxbuf + chipUart_var.head, MAX_BUFFER_SIZE - chipUart_var.head);
+ chipUart_var.head = (chipUart_var.head + len) % MAX_BUFFER_SIZE;
+ }
+
+ if (0 == chipUart_var.head)
+ {
+ len = aos_read(fd, chipUart_var.rxbuf, chipUart_var.tail - 1);
+ chipUart_var.head += len;
+ readlen += len;
+ }
+ }
+ else
+ {
+ readlen = aos_read(fd, chipUart_var.rxbuf + chipUart_var.head, chipUart_var.tail - chipUart_var.head - 1);
+ chipUart_var.head += readlen;
+ }
+
+ if (chipUart_var.head != chipUart_var.tail)
+ {
+ xSemaphoreGiveFromISR(chipUart_var.sema, &xHigherPriorityTaskWoken);
+ }
+}
+#endif
void uartInit(void)
{
@@ -88,11 +131,13 @@
chipUart_var.sema = xSemaphoreCreateBinaryStatic(&chipUart_var.mutx);
+#ifndef CFG_USB_CDC_ENABLE
hosal_uart_finalize(&uart_stdio);
hosal_uart_init(&uart_stdio);
hosal_uart_callback_set(&uart_stdio, HOSAL_UART_RX_CALLBACK, uartRxCallback, NULL);
hosal_uart_callback_set(&uart_stdio, HOSAL_UART_TX_CALLBACK, uartTxCallback, NULL);
hosal_uart_ioctl(&uart_stdio, HOSAL_UART_MODE_SET, (void *) HOSAL_UART_MODE_INT);
+#endif
}
int16_t uartRead(char * Buf, uint16_t NbBytesToRead)
@@ -120,7 +165,23 @@
}
#endif
+#ifndef CFG_USB_CDC_ENABLE
int16_t uartWrite(const char * Buf, uint16_t BufLength)
{
return hosal_uart_send(&uart_stdio, Buf, BufLength);
}
+#else
+int16_t uartWrite(const char * Buf, uint16_t BufLength)
+{
+ uint16_t sent = 0;
+ do
+ {
+ extern int vfs_fd;
+ if (vfs_fd >= 0)
+ {
+ sent += (uint8_t) aos_write(vfs_fd, Buf + sent, BufLength - sent);
+ }
+ } while (sent < BufLength);
+ return sent;
+}
+#endif
diff --git a/examples/platform/bouffalolab/common/plat/uart.h b/examples/platform/bouffalolab/common/plat/uart.h
index a963a34..ff2a398 100644
--- a/examples/platform/bouffalolab/common/plat/uart.h
+++ b/examples/platform/bouffalolab/common/plat/uart.h
@@ -28,6 +28,10 @@
int16_t uartWrite(const char * Buf, uint16_t BufLength);
int16_t uartRead(char * Buf, uint16_t NbBytesToRead);
+#ifdef CFG_USB_CDC_ENABLE
+void aosUartRxCallback(int fd, void * param);
+#endif
+
#ifdef __cplusplus
} // extern "C"
#endif
diff --git a/examples/platform/bouffalolab/bl602/route_hook/bl_route_hook.c b/examples/platform/bouffalolab/common/route_hook/bl_route_hook.c
similarity index 88%
rename from examples/platform/bouffalolab/bl602/route_hook/bl_route_hook.c
rename to examples/platform/bouffalolab/common/route_hook/bl_route_hook.c
index bcdbcc4..93cc731 100644
--- a/examples/platform/bouffalolab/bl602/route_hook/bl_route_hook.c
+++ b/examples/platform/bouffalolab/common/route_hook/bl_route_hook.c
@@ -1,8 +1,6 @@
#include <stdbool.h>
#include <string.h>
-#include "bl_route_hook.h"
-#include "bl_route_table.h"
#include "utils_log.h"
#include "lwip/icmp6.h"
@@ -12,7 +10,9 @@
#include "lwip/prot/ip6.h"
#include "lwip/prot/nd6.h"
#include "lwip/raw.h"
-#include <wifi_mgmr_ext.h>
+
+#include "bl_route_hook.h"
+#include "bl_route_table.h"
typedef struct bl_route_hook_t
{
@@ -36,6 +36,8 @@
static bl_route_hook_t * s_hooks;
+extern struct netif * deviceInterface_getNetif(void);
+
static bool is_self_address(struct netif * netif, const ip6_addr_t * addr)
{
for (size_t i = 0; i < LWIP_ARRAYSIZE(netif->ip6_addr); i++)
@@ -79,7 +81,7 @@
const uint8_t * rio_data = &icmp_payload[sizeof(rio_header_t)];
uint8_t rio_data_len = opt_len - sizeof(rio_header_t);
- log_info("Received RIO\n");
+ log_info("Received RIO\r\n");
if (rio_data_len >= prefix_len_bytes)
{
ip6_addr_t prefix;
@@ -93,14 +95,14 @@
route.prefix = prefix;
route.preference = preference;
route.lifetime_seconds = lwip_ntohl(rio_header.route_lifetime);
- log_info("prefix %s lifetime %u\n", ip6addr_ntoa(&prefix), route.lifetime_seconds);
+ log_info("prefix %s lifetime %u\r\n", ip6addr_ntoa(&prefix), route.lifetime_seconds);
if (bl_route_table_add_route_entry(&route) == NULL)
{
- log_error("Failed to add route table entry\n");
+ log_error("Failed to add route table entry\r\n");
}
else
{
- log_info("Added entry to route table\n");
+ log_info("Added entry to route table\r\n");
}
}
}
@@ -127,12 +129,12 @@
if (p->tot_len != p->len)
{
- log_error("Ignore segmented ICMP packet\n");
+ log_error("Ignore segmented ICMP packet\r\n");
return 0;
}
if (p->tot_len <= sizeof(struct ip6_hdr) + sizeof(struct icmp6_hdr))
{
- log_error("Ignore invalid ICMP packet\n");
+ log_error("Ignore invalid ICMP packet\r\n");
return 0;
}
if (!ip6_addr_islinklocal(&dest) && !ip6_addr_isallnodes_linklocal(&dest) && !ip6_addr_isallrouters_linklocal(&dest))
@@ -151,16 +153,16 @@
return 0;
}
-int8_t bl_route_hook_init()
+int8_t bl_route_hook_init(void)
{
- struct netif * lwip_netif = wifi_mgmr_sta_netif_get();
ip_addr_t router_group = IPADDR6_INIT_HOST(0xFF020000, 0, 0, 0x02);
bl_route_hook_t * hook = NULL;
uint8_t ret = 0;
+ struct netif * lwip_netif = deviceInterface_getNetif();
if (lwip_netif == NULL)
{
- log_error("Invalid network interface\n");
+ log_error("Invalid network interface\r\n");
return -1;
}
@@ -168,7 +170,6 @@
{
if (iter->netif == lwip_netif)
{
- log_error("Hook already installed on netif, skip...\n");
return 0;
}
}
@@ -176,13 +177,13 @@
hook = (bl_route_hook_t *) malloc(sizeof(bl_route_hook_t));
if (hook == NULL)
{
- log_error("Cannot allocate hook\n");
+ log_error("Cannot allocate hook\r\n");
return -1;
}
if (mld6_joingroup_netif(lwip_netif, ip_2_ip6(&router_group)) != ERR_OK)
{
- log_error("Failed to join multicast group\n");
+ log_error("Failed to join multicast group\r\n");
ret = -1;
goto exit;
}
diff --git a/examples/platform/bouffalolab/bl602/route_hook/bl_route_hook.h b/examples/platform/bouffalolab/common/route_hook/bl_route_hook.h
similarity index 100%
rename from examples/platform/bouffalolab/bl602/route_hook/bl_route_hook.h
rename to examples/platform/bouffalolab/common/route_hook/bl_route_hook.h
diff --git a/examples/platform/bouffalolab/bl602/route_hook/bl_route_table.c b/examples/platform/bouffalolab/common/route_hook/bl_route_table.c
similarity index 99%
rename from examples/platform/bouffalolab/bl602/route_hook/bl_route_table.c
rename to examples/platform/bouffalolab/common/route_hook/bl_route_table.c
index 4d2c901..3e5ae10 100644
--- a/examples/platform/bouffalolab/bl602/route_hook/bl_route_table.c
+++ b/examples/platform/bouffalolab/common/route_hook/bl_route_table.c
@@ -1,7 +1,7 @@
-#include "bl_route_table.h"
#include <stdbool.h>
#include <string.h>
+#include "bl_route_table.h"
#include "lwip/ip6_addr.h"
#include "lwip/netif.h"
#include "lwip/timeouts.h"
diff --git a/examples/platform/bouffalolab/bl602/route_hook/bl_route_table.h b/examples/platform/bouffalolab/common/route_hook/bl_route_table.h
similarity index 100%
rename from examples/platform/bouffalolab/bl602/route_hook/bl_route_table.h
rename to examples/platform/bouffalolab/common/route_hook/bl_route_table.h
diff --git a/scripts/build/build/targets.py b/scripts/build/build/targets.py
index 0d88140..fe730b3 100755
--- a/scripts/build/build/targets.py
+++ b/scripts/build/build/targets.py
@@ -588,12 +588,16 @@
# Boards
target.AppendFixedTargets([
- TargetPart('BL602-IoT-Matter-V1', board=BouffalolabBoard.BL602_IoT_Matter_V1, module_type="BL602"),
- TargetPart('BL602-IOT-DVK-3S', board=BouffalolabBoard.BL602_IOT_DVK_3S, module_type="BL602"),
- TargetPart('BL602-NIGHT-LIGHT', board=BouffalolabBoard.BL602_NIGHT_LIGHT, module_type="BL602"),
- TargetPart('XT-ZB6-DevKit', board=BouffalolabBoard.XT_ZB6_DevKit, module_type="BL706C-22"),
- TargetPart('BL706-IoT-DVK', board=BouffalolabBoard.BL706_IoT_DVK, module_type="BL706C-22"),
- TargetPart('BL706-NIGHT-LIGHT', board=BouffalolabBoard.BL706_NIGHT_LIGHT, module_type="BL706C-22"),
+ TargetPart('BL602-IoT-Matter-V1',
+ board=BouffalolabBoard.BL602_IoT_Matter_V1, module_type="BL602"),
+ TargetPart('BL602-NIGHT-LIGHT',
+ board=BouffalolabBoard.BL602_NIGHT_LIGHT, module_type="BL602"),
+ TargetPart('XT-ZB6-DevKit', board=BouffalolabBoard.XT_ZB6_DevKit,
+ module_type="BL706C-22"),
+ TargetPart('BL706-NIGHT-LIGHT',
+ board=BouffalolabBoard.BL706_NIGHT_LIGHT, module_type="BL706C-22"),
+ TargetPart('BL706-ETH',
+ board=BouffalolabBoard.BL706_ETH, module_type="BL706C-22"),
TargetPart('BL704L-DVK', board=BouffalolabBoard.BL704L_DVK, module_type="BL704L"),
])
@@ -606,6 +610,7 @@
target.AppendModifier('115200', baudrate=115200)
target.AppendModifier('rpc', enable_rpcs=True)
target.AppendModifier('cdc', enable_cdc=True)
+ target.AppendModifier('resetCnt', enable_resetCnt=True)
target.AppendModifier('rotating_device_id', enable_rotating_device_id=True)
return target
diff --git a/scripts/build/builders/bouffalolab.py b/scripts/build/builders/bouffalolab.py
index 8281ba9..20ef4c7 100644
--- a/scripts/build/builders/bouffalolab.py
+++ b/scripts/build/builders/bouffalolab.py
@@ -43,26 +43,23 @@
class BouffalolabBoard(Enum):
BL602_IoT_Matter_V1 = auto()
- BL602_IOT_DVK_3S = auto()
BL602_NIGHT_LIGHT = auto()
XT_ZB6_DevKit = auto()
- BL706_IoT_DVK = auto()
BL706_NIGHT_LIGHT = auto()
+ BL706_ETH = auto()
BL704L_DVK = auto()
def GnArgName(self):
if self == BouffalolabBoard.BL602_IoT_Matter_V1:
return 'BL602-IoT-Matter-V1'
- elif self == BouffalolabBoard.BL602_IOT_DVK_3S:
- return 'BL602-IOT-DVK-3S'
elif self == BouffalolabBoard.BL602_NIGHT_LIGHT:
return 'BL602-NIGHT-LIGHT'
elif self == BouffalolabBoard.XT_ZB6_DevKit:
return 'XT-ZB6-DevKit'
- elif self == BouffalolabBoard.BL706_IoT_DVK:
- return 'BL706-IoT-DVK'
elif self == BouffalolabBoard.BL706_NIGHT_LIGHT:
return 'BL706-NIGHT-LIGHT'
+ elif self == BouffalolabBoard.BL706_ETH:
+ return 'BL706-ETH'
elif self == BouffalolabBoard.BL704L_DVK:
return 'BL704L-DVK'
else:
@@ -75,12 +72,13 @@
root,
runner,
app: BouffalolabApp = BouffalolabApp.LIGHT,
- board: BouffalolabBoard = BouffalolabBoard.BL706_IoT_DVK,
+ board: BouffalolabBoard = BouffalolabBoard.XT_ZB6_DevKit,
enable_rpcs: bool = False,
module_type: str = "BL706C-22",
baudrate=2000000,
enable_shell: bool = False,
enable_cdc: bool = False,
+ enable_resetCnt: bool = False,
enable_rotating_device_id: bool = False
):
@@ -113,12 +111,28 @@
self.argsOpt.append('board=\"{}\"'.format(self.board.GnArgName()))
self.argsOpt.append('baudrate=\"{}\"'.format(baudrate))
+ if bouffalo_chip == "bl602":
+ self.argsOpt.append('chip_enable_openthread=false')
+ self.argsOpt.append('chip_enable_wifi=true')
if bouffalo_chip == "bl702":
self.argsOpt.append('module_type=\"{}\"'.format(module_type))
+ if board == BouffalolabBoard.BL706_ETH:
+ self.argsOpt.append('chip_config_network_layer_ble=false')
+ self.argsOpt.append('chip_enable_openthread=false')
+ self.argsOpt.append('chip_enable_wifi=false')
+ else:
+ self.argsOpt.append('chip_enable_openthread=true')
+ self.argsOpt.append('chip_enable_wifi=false')
+ elif bouffalo_chip == "bl702l":
+ self.argsOpt.append('chip_enable_openthread=true')
+ self.argsOpt.append('chip_enable_wifi=false')
if enable_cdc:
if bouffalo_chip != "bl702":
raise Exception('Chip %s does NOT support USB CDC' % bouffalo_chip)
+ if board == BouffalolabBoard.BL706_ETH:
+ raise Exception('Board %s does NOT support USB CDC' % self.board.GnArgName())
+
self.argsOpt.append('enable_cdc_module=true')
if enable_rpcs:
@@ -126,6 +140,9 @@
elif enable_shell:
self.argsOpt.append('chip_build_libshell=true')
+ if enable_resetCnt:
+ self.argsOpt.append('enable_reset_counter=true')
+
if enable_rotating_device_id:
self.argsOpt.append('chip_enable_additional_data_advertising=true')
self.argsOpt.append('chip_enable_rotating_device_id=true')
diff --git a/scripts/build/testdata/all_targets_linux_x64.txt b/scripts/build/testdata/all_targets_linux_x64.txt
index 40d65af..1276594 100644
--- a/scripts/build/testdata/all_targets_linux_x64.txt
+++ b/scripts/build/testdata/all_targets_linux_x64.txt
@@ -1,7 +1,7 @@
ameba-amebad-{all-clusters,all-clusters-minimal,light,light-switch,pigweed}
asr-{asr582x,asr595x,asr550x}-{all-clusters,all-clusters-minimal,lighting,light-switch,lock,bridge,temperature-measurement,thermostat,ota-requestor}[-ota][-shell][-no_logging][-factory][-rotating_id][-rio]
android-{arm,arm64,x86,x64,androidstudio-arm,androidstudio-arm64,androidstudio-x86,androidstudio-x64}-{chip-tool,chip-test,tv-server,tv-casting-app,java-matter-controller}[-no-debug]
-bouffalolab-{bl602-iot-matter-v1,bl602-iot-dvk-3s,bl602-night-light,xt-zb6-devkit,bl706-iot-dvk,bl706-night-light,bl704l-dvk}-light[-shell][-115200][-rpc][-cdc][-rotating_device_id]
+bouffalolab-{bl602-iot-matter-v1,bl602-night-light,xt-zb6-devkit,bl706-night-light,bl706-eth,bl704l-dvk}-light[-shell][-115200][-rpc][-cdc][-resetcnt][-rotating_device_id]
cc32xx-lock
ti-cc13x2x7_26x2x7-{lighting,lock,pump,pump-controller}[-mtd]
ti-cc13x4_26x4-{all-clusters,lighting,lock,pump,pump-controller}[-mtd][-ftd]
diff --git a/src/lwip/BUILD.gn b/src/lwip/BUILD.gn
index 60eb4d2..24462da 100644
--- a/src/lwip/BUILD.gn
+++ b/src/lwip/BUILD.gn
@@ -64,6 +64,7 @@
import("//build_overrides/bouffalolab_iot_sdk.gni")
} else if (lwip_platform == "bl702") {
import("//build_overrides/bouffalolab_iot_sdk.gni")
+ import("${chip_root}/src/platform/device.gni")
} else if (lwip_platform == "bl702l") {
import("//build_overrides/bouffalolab_iot_sdk.gni")
} else if (lwip_platform == "mw320") {
@@ -111,28 +112,6 @@
public_configs = [ "${chip_root}/src:includes" ]
public_configs += [ "${psoc6_sdk_build_root}:psoc6_sdk_config" ]
}
-} else if (lwip_platform == "bl702_lwip") {
- import("${bouffalolab_iot_sdk_build_root}/bl702/bl_iot_sdk.gni")
-
- group("lwip") {
- public_deps = [ ":lwip_buildconfig" ]
- public_deps += [ "${bouffalolab_iot_sdk_build_root}/bl702:bl_iot_sdk" ]
- }
-
- group("all") {
- deps = [ ":lwip" ]
- }
-} else if (lwip_platform == "bl702l_lwip") {
- import("${bouffalolab_iot_sdk_build_root}/bl702l/bl_iot_sdk.gni")
-
- group("lwip") {
- public_deps = [ ":lwip_buildconfig" ]
- public_deps += [ "${bouffalolab_iot_sdk_build_root}/bl702l:bl_iot_sdk" ]
- }
-
- group("all") {
- deps = [ ":lwip" ]
- }
} else if (lwip_platform == "qpg") {
config("lwip_config") {
include_dirs = [ "freertos" ]
@@ -164,6 +143,18 @@
group("all") {
deps = [ ":lwip" ]
}
+} else if (lwip_platform == "bl702" && defined(chip_enable_openthread) &&
+ chip_enable_openthread == false) {
+ # bl702 platform will use ethernet or SPI Wi-Fi for connectivity, if openthread is not enabled
+ import("${bouffalolab_iot_sdk_build_root}/bl702/bl_iot_sdk.gni")
+ group("lwip") {
+ public_deps = [ ":lwip_buildconfig" ]
+ public_deps += [ "${bouffalolab_iot_sdk_build_root}/bl702:bl_iot_sdk" ]
+ }
+
+ group("all") {
+ deps = [ ":lwip" ]
+ }
} else if (lwip_platform == "asr") {
group("lwip") {
public_deps = [ ":lwip_buildconfig" ]
@@ -220,8 +211,6 @@
public_deps += [ "${k32w0_sdk_build_root}:k32w0_sdk" ]
} else if (lwip_platform == "cyw30739") {
public_deps += [ "${cyw30739_sdk_build_root}:cyw30739_sdk" ]
- } else if (lwip_platform == "bl602") {
- public_deps += [ "${bouffalolab_iot_sdk_build_root}/bl702l:bl_iot_sdk" ]
} else if (lwip_platform == "bl702") {
public_deps += [ "${bouffalolab_iot_sdk_build_root}/bl702:bl_iot_sdk" ]
} else if (lwip_platform == "bl702l") {
diff --git a/src/platform/BUILD.gn b/src/platform/BUILD.gn
index e0bfc11..04c4d52 100644
--- a/src/platform/BUILD.gn
+++ b/src/platform/BUILD.gn
@@ -120,7 +120,9 @@
if (chip_device_platform == "linux" || chip_device_platform == "darwin" ||
chip_device_platform == "tizen" || chip_device_platform == "android" ||
- chip_device_platform == "k32w0" || chip_device_platform == "webos") {
+ chip_device_platform == "k32w0" || chip_device_platform == "webos" ||
+ chip_device_platform == "bl602" || chip_device_platform == "bl702" ||
+ chip_device_platform == "bl702l") {
defines += [ "CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE=${chip_enable_ble}" ]
}
diff --git a/src/platform/bouffalolab/BL602/ConfigurationManagerImpl.cpp b/src/platform/bouffalolab/BL602/ConfigurationManagerImpl.cpp
index b112fe7..5469fb9 100644
--- a/src/platform/bouffalolab/BL602/ConfigurationManagerImpl.cpp
+++ b/src/platform/bouffalolab/BL602/ConfigurationManagerImpl.cpp
@@ -15,18 +15,8 @@
* limitations under the License.
*/
-#include <platform/internal/CHIPDeviceLayerInternal.h>
-
#include <platform/ConfigurationManager.h>
-#include <platform/internal/GenericConfigurationManagerImpl.ipp>
-
-#include <lib/core/CHIPVendorIdentifiers.hpp>
-#include <platform/DiagnosticDataProvider.h>
-
-#include <lib/support/CodeUtils.h>
-#include <lib/support/logging/CHIPLogging.h>
-
extern "C" {
#include <bl_efuse.h>
}
diff --git a/src/platform/bouffalolab/BL602/ConnectivityManagerImpl.cpp b/src/platform/bouffalolab/BL602/ConnectivityManagerImpl.cpp
index 9f209d1..25ae917 100644
--- a/src/platform/bouffalolab/BL602/ConnectivityManagerImpl.cpp
+++ b/src/platform/bouffalolab/BL602/ConnectivityManagerImpl.cpp
@@ -18,130 +18,86 @@
#include <platform/internal/CHIPDeviceLayerInternal.h>
#include <NetworkCommissioningDriver.h>
-#include <lib/support/CodeUtils.h>
-#include <lib/support/logging/CHIPLogging.h>
-#include <platform/ConnectivityManager.h>
-#include <platform/internal/BLEManager.h>
-#include <hal_wifi.h>
-#include <wifi_mgmr_ext.h>
-
-#include <platform/internal/GenericConnectivityManagerImpl_UDP.ipp>
-
-#if INET_CONFIG_ENABLE_TCP_ENDPOINT
-#include <platform/internal/GenericConnectivityManagerImpl_TCP.ipp>
-#endif
-
-#include <platform/internal/GenericConnectivityManagerImpl_WiFi.ipp>
-
-#if CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE
-#include <platform/internal/GenericConnectivityManagerImpl_BLE.ipp>
-#endif
-
-#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
-#include <platform/internal/GenericConnectivityManagerImpl_Thread.ipp>
-#endif
-
-#include <wifi_mgmr_ext.h>
-
-#include <FreeRTOS.h>
-#include <task.h>
-
-#include <lwip/netifapi.h>
-#include <wifi_mgmr_ext.h>
-
-#include <FreeRTOS.h>
-#include <stdio.h>
-#include <string.h>
-#include <task.h>
-
-#define zero(S) memset(&S, 0, sizeof(S))
+#include <platform/DiagnosticDataProvider.h>
+#include <platform/bouffalolab/common/DiagnosticDataProviderImpl.h>
using namespace ::chip;
-using namespace ::chip::Dnssd;
-using namespace ::chip::Inet;
-using namespace ::chip::System;
-using namespace ::chip::TLV;
-using namespace ::chip::DeviceLayer::Internal;
namespace chip {
namespace DeviceLayer {
-ConnectivityManager::WiFiStationState ConnectivityManagerImpl::mWiFiStationState =
- ConnectivityManager::kWiFiStationState_NotConnected;
-
-void ConnectivityManagerImpl::WifiStationStateChange(void)
+void ConnectivityManagerImpl::OnWiFiStationDisconnected()
{
- ChipDeviceEvent event;
+ NetworkCommissioning::BLWiFiDriver::GetInstance().SetLastDisconnectReason(NULL);
+ uint16_t reason = NetworkCommissioning::BLWiFiDriver::GetInstance().GetLastDisconnectReason();
+ uint8_t associationFailureCause =
+ chip::to_underlying(chip::app::Clusters::WiFiNetworkDiagnostics::AssociationFailureCauseEnum::kUnknown);
+ WiFiDiagnosticsDelegate * delegate = GetDiagnosticDataProvider().GetWiFiDiagnosticsDelegate();
- if (ConnectivityManagerImpl::mWiFiStationState == ConnectivityManager::kWiFiStationState_Connected)
+ ChipLogError(DeviceLayer, "WiFi station disconnect, reason %d.", reason);
+
+ switch (reason)
{
- event.Type = DeviceEventType::kWiFiConnectivityChange;
- event.WiFiConnectivityChange.Result = kConnectivity_Established;
- PlatformMgr().PostEventOrDie(&event);
+ case WLAN_FW_TX_ASSOC_FRAME_ALLOCATE_FAIILURE:
+ case WLAN_FW_ASSOCIATE_FAIILURE:
+ case WLAN_FW_4WAY_HANDSHAKE_ERROR_PSK_TIMEOUT_FAILURE:
+ associationFailureCause =
+ chip::to_underlying(chip::app::Clusters::WiFiNetworkDiagnostics::AssociationFailureCauseEnum::kAssociationFailed);
+ if (delegate)
+ {
+ delegate->OnAssociationFailureDetected(associationFailureCause, reason);
+ }
+ break;
+ case WLAN_FW_TX_AUTH_FRAME_ALLOCATE_FAIILURE:
+ case WLAN_FW_AUTHENTICATION_FAIILURE:
+ case WLAN_FW_AUTH_ALGO_FAIILURE:
+ case WLAN_FW_DEAUTH_BY_AP_WHEN_NOT_CONNECTION:
+ case WLAN_FW_DEAUTH_BY_AP_WHEN_CONNECTION:
+ case WLAN_FW_4WAY_HANDSHAKE_TX_DEAUTH_FRAME_TRANSMIT_FAILURE:
+ case WLAN_FW_4WAY_HANDSHAKE_TX_DEAUTH_FRAME_ALLOCATE_FAIILURE:
+ case WLAN_FW_AUTH_OR_ASSOC_RESPONSE_TIMEOUT_FAILURE:
+ case WLAN_FW_DISCONNECT_BY_USER_WITH_DEAUTH:
+ case WLAN_FW_DISCONNECT_BY_USER_NO_DEAUTH:
+ associationFailureCause =
+ chip::to_underlying(chip::app::Clusters::WiFiNetworkDiagnostics::AssociationFailureCauseEnum::kAuthenticationFailed);
+ if (delegate)
+ {
+ delegate->OnAssociationFailureDetected(associationFailureCause, reason);
+ }
+ break;
+ case WLAN_FW_SCAN_NO_BSSID_AND_CHANNEL:
+ associationFailureCause =
+ chip::to_underlying(chip::app::Clusters::WiFiNetworkDiagnostics::AssociationFailureCauseEnum::kSsidNotFound);
+ if (delegate)
+ {
+ delegate->OnAssociationFailureDetected(associationFailureCause, reason);
+ }
+ break;
+ case WLAN_FW_BEACON_LOSS:
+ case WLAN_FW_JOIN_NETWORK_SECURITY_NOMATCH:
+ case WLAN_FW_JOIN_NETWORK_WEPLEN_ERROR:
+ case WLAN_FW_DISCONNECT_BY_FW_PS_TX_NULLFRAME_FAILURE:
+ case WLAN_FW_CREATE_CHANNEL_CTX_FAILURE_WHEN_JOIN_NETWORK:
+ case WLAN_FW_ADD_STA_FAILURE:
+ case WLAN_FW_JOIN_NETWORK_FAILURE:
+ break;
+
+ default:
+ if (delegate)
+ {
+ delegate->OnAssociationFailureDetected(associationFailureCause, reason);
+ }
+ break;
}
-}
-void ConnectivityManagerImpl::DriveStationState()
-{
- return;
-}
-
-void ConnectivityManagerImpl::DriveStationState(::chip::System::Layer * aLayer, void * aAppState)
-{
- sInstance.DriveStationState();
-}
-
-CHIP_ERROR ConnectivityManagerImpl::_SetWiFiStationMode(WiFiStationMode val)
-{
- CHIP_ERROR err = CHIP_NO_ERROR;
-
- DeviceLayer::SystemLayer().ScheduleWork(DriveStationState, NULL);
-
- return err;
-}
-
-bool ConnectivityManagerImpl::_IsWiFiStationEnabled(void)
-{
- return GetWiFiStationMode() == kWiFiStationMode_Enabled;
-}
-
-void ConnectivityManagerImpl::OnStationConnected()
-{
- NetworkCommissioning::BLWiFiDriver::GetInstance().OnConnectWiFiNetwork();
- // TODO Invoke WARM to perform actions that occur when the WiFi station interface comes up.
-
-#if 0
- // Alert other components of the new state.
- ChipDeviceEvent event;
- event.Type = DeviceEventType::kWiFiConnectivityChange;
- event.WiFiConnectivityChange.Result = kConnectivity_Established;
- PlatformMgr().PostEventOrDie(&event);
-
- UpdateInternetConnectivityState();
-#endif
-}
-
-void ConnectivityManagerImpl::ChangeWiFiStationState(WiFiStationState newState)
-{
- if (mWiFiStationState != newState)
+ if (delegate)
{
- ChipLogProgress(DeviceLayer, "WiFi station state change: %s -> %s", WiFiStationStateToStr(mWiFiStationState),
- WiFiStationStateToStr(newState));
- mWiFiStationState = newState;
- SystemLayer().ScheduleLambda([]() { NetworkCommissioning::BLWiFiDriver::GetInstance().OnNetworkStatusChange(); });
+ delegate->OnDisconnectionDetected(reason);
+ delegate->OnConnectionStatusChanged(
+ chip::to_underlying(chip::app::Clusters::WiFiNetworkDiagnostics::ConnectionStatusEnum::kNotConnected));
}
}
-void ConnectivityManagerImpl::OnIPv6AddressAvailable()
-{
- ChipLogProgress(DeviceLayer, "IPv6 addr available.");
-
- ChipDeviceEvent event;
- event.Type = DeviceEventType::kInterfaceIpAddressChanged;
- event.InterfaceIpAddressChanged.Type = InterfaceIpChangeType::kIpV6_Assigned;
- PlatformMgr().PostEventOrDie(&event);
-}
-
} // namespace DeviceLayer
} // namespace chip
diff --git a/src/platform/bouffalolab/BL602/DiagnosticDataProviderImpl.cpp b/src/platform/bouffalolab/BL602/DiagnosticDataProviderImpl.cpp
index b49fa9c..8cd34b5 100644
--- a/src/platform/bouffalolab/BL602/DiagnosticDataProviderImpl.cpp
+++ b/src/platform/bouffalolab/BL602/DiagnosticDataProviderImpl.cpp
@@ -20,10 +20,7 @@
#include <platform/bouffalolab/common/DiagnosticDataProviderImpl.h>
#include <platform/internal/CHIPDeviceLayerInternal.h>
-#include <lwip/tcpip.h>
-
extern "C" {
-#include <bl_efuse.h>
#include <bl_sys.h>
#include <bl60x_fw_api.h>
@@ -64,74 +61,6 @@
return CHIP_NO_ERROR;
}
-static int bl_netif_get_all_ip6(struct netif * netif, ip6_addr_t if_ip6[])
-{
- if (netif == NULL || if_ip6 == NULL)
- {
- return 0;
- }
-
- int addr_count = 0;
- for (int i = 0; (i < LWIP_IPV6_NUM_ADDRESSES) && (i < kMaxIPv6AddrCount); i++)
- {
- if (!ip_addr_cmp(&netif->ip6_addr[i], IP6_ADDR_ANY))
- {
- memcpy(&if_ip6[addr_count++], &netif->ip6_addr[i], sizeof(ip6_addr_t));
- }
- }
-
- return addr_count;
-}
-
-CHIP_ERROR DiagnosticDataProviderImpl::GetNetworkInterfaces(NetworkInterface ** netifpp)
-{
- NetworkInterface * ifp = new NetworkInterface();
- struct netif * netif;
-
- netif = wifi_mgmr_sta_netif_get();
- if (netif)
- {
- Platform::CopyString(ifp->Name, netif->name);
- ifp->name = CharSpan::fromCharString(ifp->Name);
- ifp->isOperational = true;
- ifp->type = EMBER_ZCL_INTERFACE_TYPE_ENUM_WI_FI;
- ifp->offPremiseServicesReachableIPv4.SetNull();
- ifp->offPremiseServicesReachableIPv6.SetNull();
- bl_efuse_read_mac(ifp->MacAddress);
- ifp->hardwareAddress = ByteSpan(ifp->MacAddress, 6);
-
- uint32_t ip, gw, mask;
- wifi_mgmr_sta_ip_get(&ip, &gw, &mask);
- memcpy(ifp->Ipv4AddressesBuffer[0], &ip, kMaxIPv4AddrSize);
- ifp->Ipv4AddressSpans[0] = ByteSpan(ifp->Ipv4AddressesBuffer[0], kMaxIPv4AddrSize);
- ifp->IPv4Addresses = chip::app::DataModel::List<chip::ByteSpan>(ifp->Ipv4AddressSpans, 1);
-
- uint8_t ipv6_addr_count = 0;
- ip6_addr_t ip6_addr[kMaxIPv6AddrCount];
- ipv6_addr_count = bl_netif_get_all_ip6(netif, ip6_addr);
- for (uint8_t idx = 0; idx < ipv6_addr_count; ++idx)
- {
- memcpy(ifp->Ipv6AddressesBuffer[idx], ip6_addr[idx].addr, kMaxIPv6AddrSize);
- ifp->Ipv6AddressSpans[idx] = ByteSpan(ifp->Ipv6AddressesBuffer[idx], kMaxIPv6AddrSize);
- }
- ifp->IPv6Addresses = chip::app::DataModel::List<chip::ByteSpan>(ifp->Ipv6AddressSpans, ipv6_addr_count);
- }
-
- *netifpp = ifp;
-
- return CHIP_NO_ERROR;
-}
-
-void DiagnosticDataProviderImpl::ReleaseNetworkInterfaces(NetworkInterface * netifp)
-{
- while (netifp)
- {
- NetworkInterface * del = netifp;
- netifp = netifp->Next;
- delete del;
- }
-}
-
CHIP_ERROR DiagnosticDataProviderImpl::GetWiFiBssId(MutableByteSpan & BssId)
{
return CopySpanToMutableSpan(ByteSpan(wifiMgmr.wifi_mgmr_stat_info.bssid), BssId);
diff --git a/src/platform/bouffalolab/BL602/NetworkCommissioningDriver.cpp b/src/platform/bouffalolab/BL602/NetworkCommissioningDriver.cpp
index 28f5a5f..9cf57c3 100644
--- a/src/platform/bouffalolab/BL602/NetworkCommissioningDriver.cpp
+++ b/src/platform/bouffalolab/BL602/NetworkCommissioningDriver.cpp
@@ -15,38 +15,25 @@
* limitations under the License.
*/
-#include <aos/yloop.h>
-#include <bl60x_wifi_driver/wifi_mgmr.h>
-#include <bl60x_wifi_driver/wifi_mgmr_api.h>
-#include <hal_wifi.h>
-#include <lib/support/CodeUtils.h>
-#include <lib/support/SafeInt.h>
-#include <lwip/tcpip.h>
+#include <limits>
+#include <stdint.h>
+#include <string>
+
#include <platform/CHIPDeviceLayer.h>
#include <platform/bouffalolab/BL602/NetworkCommissioningDriver.h>
#include <wifi_mgmr_ext.h>
#include <wifi_mgmr_portable.h>
-#include <limits>
-#include <stdint.h>
-#include <string>
-#include <utils_log.h>
-
#define WIFI_STA_DISCONNECT_DELAY (pdMS_TO_TICKS(200))
using namespace ::chip;
+using namespace ::chip::DeviceLayer::Internal;
namespace chip {
namespace DeviceLayer {
namespace NetworkCommissioning {
namespace {
-constexpr char kWiFiSSIDKeyName[] = "wifi-ssid";
-constexpr char kWiFiCredentialsKeyName[] = "wifi-pass";
-
-constexpr char blWiFiSSIDKeyName[] = "bl-wifi-ssid";
-constexpr char blWiFiCredentialsKeyName[] = "bl-wifi-pass";
-
static char WiFiSSIDStr[DeviceLayer::Internal::kMaxWiFiSSIDLength];
static uint8_t scan_type = 0;
} // namespace
@@ -57,10 +44,11 @@
size_t ssidLen = 0;
size_t credentialsLen = 0;
- err = PersistedStorage::KeyValueStoreMgr().Get(kWiFiCredentialsKeyName, mSavedNetwork.credentials,
+ err = PersistedStorage::KeyValueStoreMgr().Get(BLConfig::kBLConfigKey_wifissid, mSavedNetwork.credentials,
sizeof(mSavedNetwork.credentials), &credentialsLen);
SuccessOrExit(err);
- err = PersistedStorage::KeyValueStoreMgr().Get(kWiFiSSIDKeyName, mSavedNetwork.ssid, sizeof(mSavedNetwork.ssid), &ssidLen);
+ err = PersistedStorage::KeyValueStoreMgr().Get(BLConfig::kBLConfigKey_wifipassword, mSavedNetwork.ssid,
+ sizeof(mSavedNetwork.ssid), &ssidLen);
SuccessOrExit(err);
mSavedNetwork.credentialsLen = credentialsLen;
@@ -88,28 +76,15 @@
CHIP_ERROR BLWiFiDriver::CommitConfiguration()
{
- ReturnErrorOnFailure(PersistedStorage::KeyValueStoreMgr().Put(kWiFiSSIDKeyName, mStagingNetwork.ssid, mStagingNetwork.ssidLen));
- ReturnErrorOnFailure(PersistedStorage::KeyValueStoreMgr().Put(kWiFiCredentialsKeyName, mStagingNetwork.credentials,
+ ChipLogProgress(NetworkProvisioning, "BLWiFiDriver::CommitConfiguration");
+ ReturnErrorOnFailure(
+ PersistedStorage::KeyValueStoreMgr().Put(BLConfig::kBLConfigKey_wifissid, mStagingNetwork.ssid, mStagingNetwork.ssidLen));
+ ReturnErrorOnFailure(PersistedStorage::KeyValueStoreMgr().Put(BLConfig::kBLConfigKey_wifipassword, mStagingNetwork.credentials,
mStagingNetwork.credentialsLen));
mSavedNetwork = mStagingNetwork;
return CHIP_NO_ERROR;
}
-CHIP_ERROR BLWiFiDriver::SaveConfiguration()
-{
- if (NULL == mStagingNetwork.ssid || 0 == mStagingNetwork.ssidLen || NULL == mStagingNetwork.credentials ||
- 0 == mStagingNetwork.credentialsLen)
- {
- return CHIP_ERROR_KEY_NOT_FOUND;
- }
-
- ReturnErrorOnFailure(
- PersistedStorage::KeyValueStoreMgr().Put(blWiFiSSIDKeyName, mStagingNetwork.ssid, mStagingNetwork.ssidLen));
- ReturnErrorOnFailure(PersistedStorage::KeyValueStoreMgr().Put(blWiFiCredentialsKeyName, mStagingNetwork.credentials,
- mStagingNetwork.credentialsLen));
- return CHIP_NO_ERROR;
-}
-
CHIP_ERROR BLWiFiDriver::RevertConfiguration()
{
mStagingNetwork = mSavedNetwork;
@@ -164,12 +139,12 @@
CHIP_ERROR BLWiFiDriver::ConnectWiFiNetwork(const char * ssid, uint8_t ssidLen, const char * key, uint8_t keyLen)
{
- // ReturnErrorOnFailure(ConnectivityMgr().SetWiFiStationMode(ConnectivityManager::kWiFiStationMode_Disabled));
-
char wifi_ssid[64] = { 0 };
char passwd[64] = { 0 };
int state = 0;
+ ConnectivityMgrImpl().ChangeWiFiStationState(ConnectivityManager::kWiFiStationState_Connecting);
+
wifi_mgmr_sta_disconnect();
vTaskDelay(WIFI_STA_DISCONNECT_DELAY);
@@ -187,33 +162,21 @@
wifi_interface = wifi_mgmr_sta_enable();
wifi_mgmr_sta_connect(&wifi_interface, wifi_ssid, passwd, NULL, NULL, 0, 0);
- ReturnErrorOnFailure(ConnectivityMgr().SetWiFiStationMode(ConnectivityManager::kWiFiStationMode_Disabled));
-
- return ConnectivityMgr().SetWiFiStationMode(ConnectivityManager::kWiFiStationMode_Enabled);
-}
-
-CHIP_ERROR BLWiFiDriver::ReConnectWiFiNetwork(void)
-{
- char ssid[64] = { 0 };
- char psk[64] = { 0 };
- size_t ssidLen = 0;
- size_t pskLen = 0;
-
- ReturnErrorOnFailure(
- PersistedStorage::KeyValueStoreMgr().Get((const char *) blWiFiSSIDKeyName, (void *) ssid, 64, &ssidLen, 0));
- ReturnErrorOnFailure(
- PersistedStorage::KeyValueStoreMgr().Get((const char *) blWiFiCredentialsKeyName, (void *) psk, 64, &pskLen, 0));
-
- ConnectWiFiNetwork(ssid, ssidLen, psk, pskLen);
-
return CHIP_NO_ERROR;
}
-void BLWiFiDriver::OnConnectWiFiNetwork()
+void BLWiFiDriver::OnConnectWiFiNetwork(bool isConnected)
{
if (mpConnectCallback)
{
- mpConnectCallback->OnResult(Status::kSuccess, CharSpan(), 0);
+ if (isConnected)
+ {
+ mpConnectCallback->OnResult(Status::kSuccess, CharSpan(), 0);
+ }
+ else
+ {
+ mpConnectCallback->OnResult(Status::kUnknownError, CharSpan(), 0);
+ }
mpConnectCallback = nullptr;
}
}
@@ -360,7 +323,7 @@
return;
}
- if (ConnectivityManagerImpl::mWiFiStationState == ConnectivityManager::kWiFiStationState_Connected)
+ if (ConnectivityManagerImpl().GetWiFiStationState() == ConnectivityManager::kWiFiStationState_Connected)
{
staConnected = true;
}
@@ -372,14 +335,12 @@
return;
}
mpStatusChangeCallback->OnNetworkingStatusChange(
- Status::kSuccess, MakeOptional(ByteSpan(configuredNetwork.networkID, configuredNetwork.networkIDLen)),
+ Status::kUnknownError, MakeOptional(ByteSpan(configuredNetwork.networkID, configuredNetwork.networkIDLen)),
MakeOptional(GetLastDisconnectReason()));
}
CHIP_ERROR BLWiFiDriver::SetLastDisconnectReason(const ChipDeviceEvent * event)
{
- // VerifyOrReturnError(event->Type == DeviceEventType::kRtkWiFiStationDisconnectedEvent, CHIP_ERROR_INVALID_ARGUMENT);
-
uint16_t status_code, reason_code;
wifi_mgmr_conn_result_get(&status_code, &reason_code);
diff --git a/src/platform/bouffalolab/BL602/NetworkCommissioningDriver.h b/src/platform/bouffalolab/BL602/NetworkCommissioningDriver.h
index fc08f77..edf2d3f 100644
--- a/src/platform/bouffalolab/BL602/NetworkCommissioningDriver.h
+++ b/src/platform/bouffalolab/BL602/NetworkCommissioningDriver.h
@@ -98,7 +98,6 @@
uint8_t GetConnectNetworkTimeoutSeconds() override { return kWiFiConnectNetworkTimeoutSeconds; }
CHIP_ERROR CommitConfiguration() override;
- CHIP_ERROR SaveConfiguration();
CHIP_ERROR RevertConfiguration() override;
Status RemoveNetwork(ByteSpan networkId, MutableCharSpan & outDebugText, uint8_t & outNetworkIndex) override;
@@ -111,8 +110,7 @@
void ScanNetworks(ByteSpan ssid, ScanCallback * callback) override;
CHIP_ERROR ConnectWiFiNetwork(const char * ssid, uint8_t ssidLen, const char * key, uint8_t keyLen);
- CHIP_ERROR ReConnectWiFiNetwork(void);
- void OnConnectWiFiNetwork();
+ void OnConnectWiFiNetwork(bool isConnected);
void OnScanWiFiNetworkDone();
void OnNetworkStatusChange();
diff --git a/src/platform/bouffalolab/BL602/PlatformManagerImpl.cpp b/src/platform/bouffalolab/BL602/PlatformManagerImpl.cpp
index 5676184..f160128 100644
--- a/src/platform/bouffalolab/BL602/PlatformManagerImpl.cpp
+++ b/src/platform/bouffalolab/BL602/PlatformManagerImpl.cpp
@@ -20,24 +20,14 @@
#include <platform/PlatformManager.h>
#include <platform/bouffalolab/BL602/NetworkCommissioningDriver.h>
-#include <platform/bouffalolab/common/DiagnosticDataProviderImpl.h>
-#include <platform/internal/GenericPlatformManagerImpl_FreeRTOS.ipp>
#include <lwip/tcpip.h>
-#include <utils_log.h>
-#include <aos/kernel.h>
-#include <bl60x_fw_api.h>
#include <bl_sec.h>
-#include <event_device.h>
+
#include <hal_wifi.h>
-#include <lwip/tcpip.h>
#include <wifi_mgmr_ext.h>
-extern "C" {
-#include <bl_sec.h>
-}
-
namespace chip {
namespace DeviceLayer {
@@ -47,117 +37,12 @@
static int app_entropy_source(void * data, unsigned char * output, size_t len, size_t * olen)
{
-
bl_rand_stream(reinterpret_cast<uint8_t *>(output), static_cast<int>(len));
*olen = len;
return 0;
}
-static void WifiStaDisconect(void)
-{
- NetworkCommissioning::BLWiFiDriver::GetInstance().SetLastDisconnectReason(NULL);
-
- uint16_t reason = NetworkCommissioning::BLWiFiDriver::GetInstance().GetLastDisconnectReason();
- uint8_t associationFailureCause =
- chip::to_underlying(chip::app::Clusters::WiFiNetworkDiagnostics::AssociationFailureCauseEnum::kUnknown);
- WiFiDiagnosticsDelegate * delegate = GetDiagnosticDataProvider().GetWiFiDiagnosticsDelegate();
-
- if (ConnectivityManagerImpl::mWiFiStationState == ConnectivityManager::kWiFiStationState_Disconnecting)
- {
- return;
- }
-
- ChipLogError(DeviceLayer, "WiFi station disconnect, reason %d.", reason);
-
- switch (reason)
- {
- case WLAN_FW_TX_ASSOC_FRAME_ALLOCATE_FAIILURE:
- case WLAN_FW_ASSOCIATE_FAIILURE:
- case WLAN_FW_4WAY_HANDSHAKE_ERROR_PSK_TIMEOUT_FAILURE:
- associationFailureCause =
- chip::to_underlying(chip::app::Clusters::WiFiNetworkDiagnostics::AssociationFailureCauseEnum::kAssociationFailed);
- if (delegate)
- {
- delegate->OnAssociationFailureDetected(associationFailureCause, reason);
- }
- break;
- case WLAN_FW_TX_AUTH_FRAME_ALLOCATE_FAIILURE:
- case WLAN_FW_AUTHENTICATION_FAIILURE:
- case WLAN_FW_AUTH_ALGO_FAIILURE:
- case WLAN_FW_DEAUTH_BY_AP_WHEN_NOT_CONNECTION:
- case WLAN_FW_DEAUTH_BY_AP_WHEN_CONNECTION:
- case WLAN_FW_4WAY_HANDSHAKE_TX_DEAUTH_FRAME_TRANSMIT_FAILURE:
- case WLAN_FW_4WAY_HANDSHAKE_TX_DEAUTH_FRAME_ALLOCATE_FAIILURE:
- case WLAN_FW_AUTH_OR_ASSOC_RESPONSE_TIMEOUT_FAILURE:
- case WLAN_FW_DISCONNECT_BY_USER_WITH_DEAUTH:
- case WLAN_FW_DISCONNECT_BY_USER_NO_DEAUTH:
- associationFailureCause =
- chip::to_underlying(chip::app::Clusters::WiFiNetworkDiagnostics::AssociationFailureCauseEnum::kAuthenticationFailed);
- if (delegate)
- {
- delegate->OnAssociationFailureDetected(associationFailureCause, reason);
- }
- break;
- case WLAN_FW_SCAN_NO_BSSID_AND_CHANNEL:
- associationFailureCause =
- chip::to_underlying(chip::app::Clusters::WiFiNetworkDiagnostics::AssociationFailureCauseEnum::kSsidNotFound);
- if (delegate)
- {
- delegate->OnAssociationFailureDetected(associationFailureCause, reason);
- }
- break;
- case WLAN_FW_BEACON_LOSS:
- case WLAN_FW_JOIN_NETWORK_SECURITY_NOMATCH:
- case WLAN_FW_JOIN_NETWORK_WEPLEN_ERROR:
- case WLAN_FW_DISCONNECT_BY_FW_PS_TX_NULLFRAME_FAILURE:
- case WLAN_FW_CREATE_CHANNEL_CTX_FAILURE_WHEN_JOIN_NETWORK:
- case WLAN_FW_ADD_STA_FAILURE:
- case WLAN_FW_JOIN_NETWORK_FAILURE:
- break;
-
- default:
- if (delegate)
- {
- delegate->OnAssociationFailureDetected(associationFailureCause, reason);
- }
- break;
- }
-
- if (delegate)
- {
- delegate->OnDisconnectionDetected(reason);
- delegate->OnConnectionStatusChanged(
- chip::to_underlying(chip::app::Clusters::WiFiNetworkDiagnostics::ConnectionStatusEnum::kNotConnected));
- }
-
- ConnectivityMgrImpl().ChangeWiFiStationState(ConnectivityManagerImpl::kWiFiStationState_Disconnecting);
-}
-
-static void WifiStaConnected(void)
-{
- char ap_ssid[64];
- WiFiDiagnosticsDelegate * delegate = GetDiagnosticDataProvider().GetWiFiDiagnosticsDelegate();
-
- if (ConnectivityManagerImpl::mWiFiStationState == ConnectivityManager::kWiFiStationState_Connected)
- {
- return;
- }
-
- memset(ap_ssid, 0, sizeof(ap_ssid));
- // wifi_mgmr_sta_ssid_get(ap_ssid);
- // wifi_mgmr_ap_item_t * ap_info = mgmr_get_ap_info_handle();
- // wifi_mgmr_get_scan_result_filter(ap_info, ap_ssid);
-
- ConnectivityMgrImpl().ChangeWiFiStationState(ConnectivityManagerImpl::kWiFiStationState_Connected);
- ConnectivityMgrImpl().WifiStationStateChange();
- ConnectivityMgrImpl().OnStationConnected();
- if (delegate)
- {
- delegate->OnConnectionStatusChanged(
- chip::to_underlying(chip::app::Clusters::WiFiNetworkDiagnostics::ConnectionStatusEnum::kConnected));
- }
-}
typedef void (*aos_event_cb)(input_event_t * event, void * private_data);
void OnWiFiPlatformEvent(input_event_t * event, void * private_data)
@@ -187,9 +72,11 @@
break;
case CODE_WIFI_ON_DISCONNECT: {
ChipLogProgress(DeviceLayer, "WiFi station disconnect, reason %s.", wifi_mgmr_status_code_str(event->value));
-
chip::DeviceLayer::PlatformMgr().LockChipStack();
- WifiStaDisconect();
+ if (ConnectivityManager::kWiFiStationState_Connecting == ConnectivityMgrImpl().GetWiFiStationState())
+ {
+ ConnectivityMgrImpl().ChangeWiFiStationState(ConnectivityManager::kWiFiStationState_Connecting_Failed);
+ }
chip::DeviceLayer::PlatformMgr().UnlockChipStack();
}
break;
@@ -198,19 +85,17 @@
}
break;
case CODE_WIFI_ON_GOT_IP: {
-
ChipLogProgress(DeviceLayer, "WiFi station gets IPv4 address.");
-
chip::DeviceLayer::PlatformMgr().LockChipStack();
- WifiStaConnected();
+ ConnectivityMgrImpl().ChangeWiFiStationState(ConnectivityManagerImpl::kWiFiStationState_Connected);
+ ConnectivityMgrImpl().OnConnectivityChanged(wifi_mgmr_sta_netif_get());
chip::DeviceLayer::PlatformMgr().UnlockChipStack();
}
break;
case CODE_WIFI_ON_GOT_IP6: {
ChipLogProgress(DeviceLayer, "WiFi station gets IPv6 address.");
-
chip::DeviceLayer::PlatformMgr().LockChipStack();
- ConnectivityMgrImpl().OnIPv6AddressAvailable();
+ ConnectivityMgrImpl().OnConnectivityChanged(wifi_mgmr_sta_netif_get());
chip::DeviceLayer::PlatformMgr().UnlockChipStack();
}
break;
@@ -223,26 +108,14 @@
CHIP_ERROR PlatformManagerImpl::_InitChipStack(void)
{
- CHIP_ERROR err = CHIP_NO_ERROR;
- static uint8_t stack_wifi_init = 0;
+ CHIP_ERROR err = CHIP_NO_ERROR;
TaskHandle_t backup_eventLoopTask;
- // Initialize the configuration system.
- err = Internal::BLConfig::Init();
- SuccessOrExit(err);
-
// Initialize LwIP.
tcpip_init(NULL, NULL);
aos_register_event_filter(EV_WIFI, OnWiFiPlatformEvent, NULL);
- if (1 == stack_wifi_init)
- {
- ChipLogError(DeviceLayer, "Wi-Fi already initialized!");
- return CHIP_NO_ERROR;
- }
-
hal_wifi_start_firmware_task();
- stack_wifi_init = 1;
aos_post_event(EV_WIFI, CODE_WIFI_ON_INIT_DONE, 0);
err = chip::Crypto::add_entropy_source(app_entropy_source, NULL, 16);
diff --git a/src/platform/bouffalolab/BL602/args.gni b/src/platform/bouffalolab/BL602/args.gni
index dd482f9..2f8964a 100644
--- a/src/platform/bouffalolab/BL602/args.gni
+++ b/src/platform/bouffalolab/BL602/args.gni
@@ -22,6 +22,8 @@
chip_device_platform = "bl602"
+chip_enable_ota_requestor = true
+
lwip_platform = "bl602"
chip_inet_config_enable_ipv4 = true
diff --git a/src/platform/bouffalolab/BL602/wifi_mgmr_portable.c b/src/platform/bouffalolab/BL602/wifi_mgmr_portable.c
index 04ee57f..47cac9e 100644
--- a/src/platform/bouffalolab/BL602/wifi_mgmr_portable.c
+++ b/src/platform/bouffalolab/BL602/wifi_mgmr_portable.c
@@ -144,3 +144,8 @@
return false;
}
+
+struct netif * deviceInterface_getNetif(void)
+{
+ return wifi_mgmr_sta_netif_get();
+}
diff --git a/src/platform/bouffalolab/BL602/wifi_mgmr_portable.h b/src/platform/bouffalolab/BL602/wifi_mgmr_portable.h
index cf25c7e..aa855d2 100644
--- a/src/platform/bouffalolab/BL602/wifi_mgmr_portable.h
+++ b/src/platform/bouffalolab/BL602/wifi_mgmr_portable.h
@@ -16,6 +16,7 @@
bool wifi_mgmr_security_type_is_wpa(void);
bool wifi_mgmr_security_type_is_wpa2(void);
bool wifi_mgmr_security_type_is_wpa3(void);
+struct netif * deviceInterface_getNetif(void);
#ifdef __cplusplus
}
diff --git a/src/platform/bouffalolab/BL702/BUILD.gn b/src/platform/bouffalolab/BL702/BUILD.gn
index dd02791..e32738e 100644
--- a/src/platform/bouffalolab/BL702/BUILD.gn
+++ b/src/platform/bouffalolab/BL702/BUILD.gn
@@ -18,6 +18,8 @@
import("${chip_root}/src/platform/device.gni")
assert(chip_device_platform == "bl702")
+assert(false == (chip_enable_wifi && chip_enable_openthread),
+ "Not support Wi-Fi and Thread together")
if (chip_enable_openthread) {
import("//build_overrides/openthread.gni")
@@ -82,6 +84,14 @@
]
deps += [ "${chip_root}/src/lib/dnssd:platform_header" ]
}
+ } else {
+ sources += [
+ "ConfigurationManagerImpl.cpp",
+ "ConnectivityManagerImpl.cpp",
+ "EthernetInterface.c",
+ ]
+
+ deps = [ "${chip_root}/src/lib/dnssd:platform_header" ]
}
public_deps = [ "${chip_root}/src/platform:platform_base" ]
diff --git a/src/platform/bouffalolab/BL702/ConfigurationManagerImpl.cpp b/src/platform/bouffalolab/BL702/ConfigurationManagerImpl.cpp
new file mode 100644
index 0000000..5a92ee1
--- /dev/null
+++ b/src/platform/bouffalolab/BL702/ConfigurationManagerImpl.cpp
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2022 Project CHIP Authors
+ * All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <platform/ConfigurationManager.h>
+#include <platform/internal/GenericConfigurationManagerImpl.ipp>
+
+#if !CHIP_DEVICE_CONFIG_ENABLE_THREAD & !CHIP_DEVICE_CONFIG_ENABLE_WIFI
+extern "C" {
+#include <eth_bd.h>
+}
+#endif
+
+namespace chip {
+namespace DeviceLayer {
+
+#if !CHIP_DEVICE_CONFIG_ENABLE_THREAD & !CHIP_DEVICE_CONFIG_ENABLE_WIFI
+CHIP_ERROR ConfigurationManagerImpl::GetPrimaryMACAddress(MutableByteSpan buf)
+{
+ if (buf.size() != ConfigurationManager::kPrimaryMACAddressLength)
+ return CHIP_ERROR_INVALID_ARGUMENT;
+
+ eth_get_mac(buf.data());
+
+ return CHIP_NO_ERROR;
+}
+#endif
+
+} // namespace DeviceLayer
+} // namespace chip
diff --git a/src/platform/bouffalolab/BL702/ConnectivityManagerImpl.cpp b/src/platform/bouffalolab/BL702/ConnectivityManagerImpl.cpp
new file mode 100644
index 0000000..09e0550
--- /dev/null
+++ b/src/platform/bouffalolab/BL702/ConnectivityManagerImpl.cpp
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2022 Project CHIP Authors
+ * All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <platform/internal/CHIPDeviceLayerInternal.h>
+
+#include <platform/ConnectivityManager.h>
+
+#include <platform/bouffalolab/common/DiagnosticDataProviderImpl.h>
+
+#if !CHIP_DEVICE_CONFIG_ENABLE_THREAD && !CHIP_DEVICE_CONFIG_ENABLE_WIFI
+#include <eth_bd.h>
+#include <platform/bouffalolab/BL702/EthernetInterface.h>
+#endif
+
+using namespace ::chip;
+
+namespace chip {
+namespace DeviceLayer {
+
+#if !CHIP_DEVICE_CONFIG_ENABLE_THREAD && !CHIP_DEVICE_CONFIG_ENABLE_WIFI
+extern "C" void ethernetInterface_eventGotIP(struct netif * interface)
+{
+ ChipLogProgress(DeviceLayer, "ethernetInterface_eventGotIP");
+ ConnectivityMgrImpl().OnConnectivityChanged(interface);
+}
+#endif
+
+} // namespace DeviceLayer
+} // namespace chip
diff --git a/src/platform/bouffalolab/BL702/DiagnosticDataProviderImpl.cpp b/src/platform/bouffalolab/BL702/DiagnosticDataProviderImpl.cpp
index 62fe129..cb067d3 100644
--- a/src/platform/bouffalolab/BL702/DiagnosticDataProviderImpl.cpp
+++ b/src/platform/bouffalolab/BL702/DiagnosticDataProviderImpl.cpp
@@ -15,13 +15,13 @@
* limitations under the License.
*/
-#include <platform/DiagnosticDataProvider.h>
#include <platform/bouffalolab/common/DiagnosticDataProviderImpl.h>
#include <platform/internal/CHIPDeviceLayerInternal.h>
extern "C" {
#include <bl_sys.h>
}
+
namespace chip {
namespace DeviceLayer {
@@ -52,34 +52,5 @@
return CHIP_NO_ERROR;
}
-CHIP_ERROR DiagnosticDataProviderImpl::GetNetworkInterfaces(NetworkInterface ** netifpp)
-{
- NetworkInterface * ifp = new NetworkInterface();
-
- const char * threadNetworkName = otThreadGetNetworkName(ThreadStackMgrImpl().OTInstance());
- ifp->name = Span<const char>(threadNetworkName, strlen(threadNetworkName));
- ifp->isOperational = true;
- ifp->offPremiseServicesReachableIPv4.SetNull();
- ifp->offPremiseServicesReachableIPv6.SetNull();
- ifp->type = EMBER_ZCL_INTERFACE_TYPE_ENUM_THREAD;
- uint8_t macBuffer[ConfigurationManager::kPrimaryMACAddressLength];
- ConfigurationMgr().GetPrimary802154MACAddress(macBuffer);
- ifp->hardwareAddress = ByteSpan(macBuffer, ConfigurationManager::kPrimaryMACAddressLength);
-
- *netifpp = ifp;
-
- return CHIP_NO_ERROR;
-}
-
-void DiagnosticDataProviderImpl::ReleaseNetworkInterfaces(NetworkInterface * netifp)
-{
- while (netifp)
- {
- NetworkInterface * del = netifp;
- netifp = netifp->Next;
- delete del;
- }
-}
-
} // namespace DeviceLayer
} // namespace chip
diff --git a/src/platform/bouffalolab/BL702/EthernetInterface.c b/src/platform/bouffalolab/BL702/EthernetInterface.c
new file mode 100644
index 0000000..469ffb7
--- /dev/null
+++ b/src/platform/bouffalolab/BL702/EthernetInterface.c
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2022 Project CHIP Authors
+ * All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <eth_bd.h>
+#include <lwip/dhcp6.h>
+#include <lwip/netifapi.h>
+
+#include "EthernetInterface.h"
+static struct dhcp6 dhcp6_val;
+
+extern int8_t bl_route_hook_init(void);
+
+static void netif_status_callback(struct netif * netif)
+{
+ if (netif->flags & NETIF_FLAG_UP)
+ {
+ for (uint32_t i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++)
+ {
+ if (!ip6_addr_isany(netif_ip6_addr(netif, i)) && ip6_addr_ispreferred(netif_ip6_addr_state(netif, i)))
+ {
+
+ const ip6_addr_t * ip6addr = netif_ip6_addr(netif, i);
+ if (ip6_addr_isany(ip6addr) || ip6_addr_islinklocal(ip6addr))
+ {
+ continue;
+ }
+
+ ethernetInterface_eventGotIP(netif);
+ break;
+ }
+ }
+ }
+}
+
+static int ethernet_callback(eth_link_state val)
+{
+ switch (val)
+ {
+ case ETH_INIT_STEP_LINKUP:
+ break;
+ case ETH_INIT_STEP_READY:
+ netifapi_netif_set_default(ð_mac);
+ netifapi_netif_set_up(ð_mac);
+
+ // netifapi_netif_set_up((struct netif *)&obj->netif);
+ netif_create_ip6_linklocal_address(ð_mac, 1);
+ eth_mac.ip6_autoconfig_enabled = 1;
+ dhcp6_set_struct(ð_mac, &dhcp6_val);
+ dhcp6_enable_stateless(ð_mac);
+
+ /* start dhcp */
+ netifapi_dhcp_start(ð_mac);
+ break;
+ case ETH_INIT_STEP_LINKDOWN:
+ break;
+ }
+
+ return 0;
+}
+
+void ethernetInterface_init(void)
+{
+ netif_add(ð_mac, NULL, NULL, NULL, NULL, eth_init, ethernet_input);
+
+ ethernet_init(ethernet_callback);
+
+ /* Set callback to be called when interface is brought up/down or address is changed while up */
+ netif_set_status_callback(ð_mac, netif_status_callback);
+
+ bl_route_hook_init();
+}
+
+struct netif * deviceInterface_getNetif(void)
+{
+ return ð_mac;
+}
diff --git a/src/platform/bouffalolab/BL702/EthernetInterface.h b/src/platform/bouffalolab/BL702/EthernetInterface.h
new file mode 100644
index 0000000..7809a54
--- /dev/null
+++ b/src/platform/bouffalolab/BL702/EthernetInterface.h
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2022 Project CHIP Authors
+ * All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void ethernetInterface_init(void);
+void ethernetInterface_eventGotIP(struct netif * interface);
+struct netif * deviceInterface_getNetif(void);
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/src/platform/bouffalolab/BL702/PlatformManagerImpl.cpp b/src/platform/bouffalolab/BL702/PlatformManagerImpl.cpp
index 51fe963..9b5fea5 100644
--- a/src/platform/bouffalolab/BL702/PlatformManagerImpl.cpp
+++ b/src/platform/bouffalolab/BL702/PlatformManagerImpl.cpp
@@ -25,8 +25,13 @@
#include <lwip/tcpip.h>
+#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
#include <openthread_port.h>
#include <utils_list.h>
+#else
+#include <platform/bouffalolab/BL702/EthernetInterface.h>
+#endif
+
extern "C" {
#include <bl_sec.h>
}
@@ -51,26 +56,26 @@
{
CHIP_ERROR err;
TaskHandle_t backup_eventLoopTask;
+
+ // Initialize LwIP.
+ tcpip_init(NULL, NULL);
+
+#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
otRadio_opt_t opt;
-
- // Initialize the configuration system.
- err = Internal::BLConfig::Init();
- SuccessOrExit(err);
-
opt.byte = 0;
opt.bf.isCoexEnable = true;
ot_alarmInit();
ot_radioInit(opt);
+#else
+ ethernetInterface_init();
+#endif
ReturnErrorOnFailure(System::Clock::InitClock_RealTime());
SetConfigurationMgr(&ConfigurationManagerImpl::GetDefaultInstance());
SetDiagnosticDataProvider(&DiagnosticDataProviderImpl::GetDefaultInstance());
- // Initialize LwIP.
- tcpip_init(NULL, NULL);
-
err = chip::Crypto::add_entropy_source(app_entropy_source, NULL, 16);
SuccessOrExit(err);
diff --git a/src/platform/bouffalolab/BL702/args.gni b/src/platform/bouffalolab/BL702/args.gni
index 47a03c6..4a34946 100644
--- a/src/platform/bouffalolab/BL702/args.gni
+++ b/src/platform/bouffalolab/BL702/args.gni
@@ -20,6 +20,10 @@
chip_device_platform = "bl702"
+chip_enable_ota_requestor = true
+
+lwip_platform = "bl702"
+
riscv_platform_config = "${bouffalolab_iot_sdk_build_root}/common/rsicv.gni"
mbedtls_target = "${bouffalolab_iot_sdk_build_root}/bl702:bl_iot_sdk"
diff --git a/src/platform/bouffalolab/BL702/lwip_default_hooks.h b/src/platform/bouffalolab/BL702/lwip_default_hooks.h
new file mode 100644
index 0000000..3c1d1d1
--- /dev/null
+++ b/src/platform/bouffalolab/BL702/lwip_default_hooks.h
@@ -0,0 +1,17 @@
+#ifndef _LWIP_DEFAULT_HOOKS_H_
+#define _LWIP_DEFAULT_HOOKS_H_
+#include "lwip/arch.h"
+#include "lwip/err.h"
+#include "lwip/ip_addr.h"
+
+#ifdef CONFIG_LWIP_HOOK_IP6_ROUTE_DEFAULT
+extern struct netif * lwip_hook_ip6_route(const ip6_addr_t * src, const ip6_addr_t * dest);
+#define LWIP_HOOK_IP6_ROUTE lwip_hook_ip6_route
+#endif
+
+#ifdef CONFIG_LWIP_HOOK_ND6_GET_GW_DEFAULT
+extern const ip6_addr_t * lwip_hook_nd6_get_gw(struct netif * netif, const ip6_addr_t * dest);
+#define LWIP_HOOK_ND6_GET_GW lwip_hook_nd6_get_gw
+#endif
+
+#endif /* _LWIP_DEFAULT_HOOKS_H_ */
diff --git a/src/platform/bouffalolab/BL702L/DiagnosticDataProviderImpl.cpp b/src/platform/bouffalolab/BL702L/DiagnosticDataProviderImpl.cpp
index c23abe0..fcd805e 100644
--- a/src/platform/bouffalolab/BL702L/DiagnosticDataProviderImpl.cpp
+++ b/src/platform/bouffalolab/BL702L/DiagnosticDataProviderImpl.cpp
@@ -24,6 +24,10 @@
#include "FreeRTOS.h"
#include <lwip/tcpip.h>
+extern "C" {
+#include <bl_sys.h>
+}
+
using namespace ::chip::app::Clusters::GeneralDiagnostics;
namespace chip {
@@ -31,63 +35,29 @@
CHIP_ERROR DiagnosticDataProviderImpl::GetBootReason(BootReasonType & bootReason)
{
- // BL_RST_REASON_E bootCause = bl_sys_rstinfo_get();
+ BL_RST_REASON_E bootCause = bl_sys_rstinfo_get();
- // if (BL_RST_POR == bootCause)
- // {
- // bootReason = BootReasonType::kPowerOnReboot;
- // }
- // else if (BL_RST_BOR == bootCause)
- // {
- // bootReason = BootReasonType::kBrownOutReset;
- // }
- // else if (BL_RST_WDT == bootCause)
- // {
- // bootReason = BootReasonType::kHardwareWatchdogReset;
- // }
- // else if (BL_RST_SOFTWARE == bootCause)
- // {
- // bootReason = BootReasonType::kSoftwareReset;
- // }
- // else
- // {
- // bootReason = BootReasonType::kUnspecified;
- // }
- return CHIP_NO_ERROR;
-}
-
-CHIP_ERROR DiagnosticDataProviderImpl::GetNetworkInterfaces(NetworkInterface ** netifpp)
-{
- NetworkInterface * ifp = new NetworkInterface();
-
-#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
-
- const char * threadNetworkName = otThreadGetNetworkName(ThreadStackMgrImpl().OTInstance());
- ifp->name = Span<const char>(threadNetworkName, strlen(threadNetworkName));
- ifp->isOperational = true;
- ifp->offPremiseServicesReachableIPv4.SetNull();
- ifp->offPremiseServicesReachableIPv6.SetNull();
- ifp->type = InterfaceTypeEnum::EMBER_ZCL_INTERFACE_TYPE_ENUM_THREAD;
- uint8_t macBuffer[ConfigurationManager::kPrimaryMACAddressLength];
- ConfigurationMgr().GetPrimary802154MACAddress(macBuffer);
- ifp->hardwareAddress = ByteSpan(macBuffer, ConfigurationManager::kPrimaryMACAddressLength);
-
-#else
- /* TODO */
-#endif
-
- *netifpp = ifp;
- return CHIP_NO_ERROR;
-}
-
-void DiagnosticDataProviderImpl::ReleaseNetworkInterfaces(NetworkInterface * netifp)
-{
- while (netifp)
+ if (BL_RST_POR == bootCause)
{
- NetworkInterface * del = netifp;
- netifp = netifp->Next;
- delete del;
+ bootReason = BootReasonType::kPowerOnReboot;
}
+ else if (BL_RST_BOR == bootCause)
+ {
+ bootReason = BootReasonType::kBrownOutReset;
+ }
+ else if (BL_RST_WDT == bootCause)
+ {
+ bootReason = BootReasonType::kHardwareWatchdogReset;
+ }
+ else if (BL_RST_SOFTWARE == bootCause)
+ {
+ bootReason = BootReasonType::kSoftwareReset;
+ }
+ else
+ {
+ bootReason = BootReasonType::kUnspecified;
+ }
+ return CHIP_NO_ERROR;
}
} // namespace DeviceLayer
diff --git a/src/platform/bouffalolab/BL702L/PlatformManagerImpl.cpp b/src/platform/bouffalolab/BL702L/PlatformManagerImpl.cpp
index fa88202..798e0c1 100644
--- a/src/platform/bouffalolab/BL702L/PlatformManagerImpl.cpp
+++ b/src/platform/bouffalolab/BL702L/PlatformManagerImpl.cpp
@@ -55,10 +55,6 @@
CHIP_ERROR err;
TaskHandle_t backup_eventLoopTask;
- // Initialize the configuration system.
- err = Internal::BLConfig::Init();
- SuccessOrExit(err);
-
otRadio_opt_t opt;
opt.byte = 0;
diff --git a/src/platform/bouffalolab/BL702L/ThreadStackManagerImpl.cpp b/src/platform/bouffalolab/BL702L/ThreadStackManagerImpl.cpp
index 7b9b879..1b1ebf1 100644
--- a/src/platform/bouffalolab/BL702L/ThreadStackManagerImpl.cpp
+++ b/src/platform/bouffalolab/BL702L/ThreadStackManagerImpl.cpp
@@ -25,8 +25,6 @@
#include <openthread/platform/entropy.h>
-#include <lib/support/CHIPPlatformMemory.h>
-
#include <mbedtls/platform.h>
#include <openthread_port.h>
diff --git a/src/platform/bouffalolab/BL702L/args.gni b/src/platform/bouffalolab/BL702L/args.gni
index 07903ca..58c45b8 100644
--- a/src/platform/bouffalolab/BL702L/args.gni
+++ b/src/platform/bouffalolab/BL702L/args.gni
@@ -20,6 +20,10 @@
chip_device_platform = "bl702l"
+chip_enable_ota_requestor = true
+
+lwip_platform = "bl702l"
+
riscv_platform_config = "${bouffalolab_iot_sdk_build_root}/common/rsicv.gni"
mbedtls_target = "${bouffalolab_iot_sdk_build_root}/bl702l:bl_iot_sdk"
diff --git a/src/platform/bouffalolab/common/BLConfig.cpp b/src/platform/bouffalolab/common/BLConfig.cpp
index b8144dd..de1cc24 100644
--- a/src/platform/bouffalolab/common/BLConfig.cpp
+++ b/src/platform/bouffalolab/common/BLConfig.cpp
@@ -15,27 +15,15 @@
* limitations under the License.
*/
+#include <easyflash.h>
#include <platform/internal/CHIPDeviceLayerInternal.h>
#include <platform/bouffalolab/common/BLConfig.h>
-#include <lib/core/CHIPEncoding.h>
-#include <lib/support/CHIPMem.h>
-#include <lib/support/CHIPMemString.h>
-#include <lib/support/CodeUtils.h>
-#include <lib/support/logging/CHIPLogging.h>
-
-#include <easyflash.h>
-
namespace chip {
namespace DeviceLayer {
namespace Internal {
-CHIP_ERROR BLConfig::Init()
-{
- return CHIP_NO_ERROR;
-}
-
CHIP_ERROR BLConfig::ReadConfigValue(const char * key, uint8_t * val, size_t size, size_t & readsize)
{
env_node_obj node;
diff --git a/src/platform/bouffalolab/common/BLConfig.h b/src/platform/bouffalolab/common/BLConfig.h
index 916e849..1bd8011 100644
--- a/src/platform/bouffalolab/common/BLConfig.h
+++ b/src/platform/bouffalolab/common/BLConfig.h
@@ -17,10 +17,6 @@
#pragma once
-#include <platform/internal/CHIPDeviceLayerInternal.h>
-
-#include <string.h>
-
namespace chip {
namespace DeviceLayer {
namespace Internal {
@@ -80,8 +76,6 @@
static constexpr const char * kCounterKey_TotalOperationalHours = ("total-hours");
static constexpr const char * kCounterKey_UpTime = ("up-time");
- static CHIP_ERROR Init(void);
-
// Config value accessors.
static CHIP_ERROR ReadConfigValue(const char * key, uint8_t * val, size_t size, size_t & readsize);
static CHIP_ERROR ReadConfigValue(const char * key, bool & val);
diff --git a/src/platform/bouffalolab/common/BLEManagerImpl.cpp b/src/platform/bouffalolab/common/BLEManagerImpl.cpp
index 47cfbd8..73a6f8f 100644
--- a/src/platform/bouffalolab/common/BLEManagerImpl.cpp
+++ b/src/platform/bouffalolab/common/BLEManagerImpl.cpp
@@ -20,12 +20,8 @@
#if CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE
-#include "BLEManagerImpl.h"
-
#include <ble/CHIPBleServiceData.h>
#include <lib/support/CHIPMemString.h>
-#include <lib/support/CodeUtils.h>
-#include <lib/support/logging/CHIPLogging.h>
#include <platform/DeviceInstanceInfoProvider.h>
#include <platform/internal/BLEManager.h>
#if CHIP_ENABLE_ADDITIONAL_DATA_ADVERTISING
@@ -43,6 +39,8 @@
#include <bluetooth/addr.h>
#include <hci_driver.h>
+#include "BLEManagerImpl.h"
+
using namespace ::chip;
using namespace ::chip::Ble;
using namespace ::chip::System;
diff --git a/src/platform/bouffalolab/common/BLEManagerImpl.h b/src/platform/bouffalolab/common/BLEManagerImpl.h
index 394da27..1589d88 100644
--- a/src/platform/bouffalolab/common/BLEManagerImpl.h
+++ b/src/platform/bouffalolab/common/BLEManagerImpl.h
@@ -23,8 +23,6 @@
#include <bluetooth/conn.h>
#include <bluetooth/gatt.h>
-#include <lib/support/logging/CHIPLogging.h>
-
namespace chip {
namespace DeviceLayer {
namespace Internal {
diff --git a/src/platform/bouffalolab/common/CHIPDevicePlatformConfig.h b/src/platform/bouffalolab/common/CHIPDevicePlatformConfig.h
index 698c941..ded512c 100644
--- a/src/platform/bouffalolab/common/CHIPDevicePlatformConfig.h
+++ b/src/platform/bouffalolab/common/CHIPDevicePlatformConfig.h
@@ -42,4 +42,4 @@
#define CHIP_DEVICE_CONFIG_ENABLE_THREAD_TELEMETRY_FULL 0
#define CHIP_DEVICE_CONFIG_CHIP_TASK_STACK_SIZE (8 * 1024)
-#define CHIP_DEVICE_CONFIG_MAX_EVENT_QUEUE_SIZE 25
+#define CHIP_DEVICE_CONFIG_MAX_EVENT_QUEUE_SIZE 50
diff --git a/src/platform/bouffalolab/common/CHIPPlatformConfig.h b/src/platform/bouffalolab/common/CHIPPlatformConfig.h
index fce5146..3cb267b 100644
--- a/src/platform/bouffalolab/common/CHIPPlatformConfig.h
+++ b/src/platform/bouffalolab/common/CHIPPlatformConfig.h
@@ -90,12 +90,3 @@
#ifndef CHIP_CONFIG_DEBUG_CERT_VALIDATION
#define CHIP_CONFIG_DEBUG_CERT_VALIDATION 0
#endif // CHIP_CONFIG_DEBUG_CERT_VALIDATION
-
-// ==================== FreeRTOS Configuration Overrides ====================
-#ifndef CHIP_CONFIG_FREERTOS_USE_STATIC_TASK
-#define CHIP_CONFIG_FREERTOS_USE_STATIC_TASK 1
-#endif
-
-#ifndef CHIP_CONFIG_FREERTOS_USE_STATIC_QUEUE
-#define CHIP_CONFIG_FREERTOS_USE_STATIC_QUEUE 1
-#endif
diff --git a/src/platform/bouffalolab/common/ConfigurationManagerImpl.cpp b/src/platform/bouffalolab/common/ConfigurationManagerImpl.cpp
index 4618e7f..d4c06dc 100644
--- a/src/platform/bouffalolab/common/ConfigurationManagerImpl.cpp
+++ b/src/platform/bouffalolab/common/ConfigurationManagerImpl.cpp
@@ -21,12 +21,6 @@
#include <platform/internal/GenericConfigurationManagerImpl.ipp>
-#include <lib/core/CHIPVendorIdentifiers.hpp>
-#include <platform/DiagnosticDataProvider.h>
-
-#include <lib/support/CodeUtils.h>
-#include <lib/support/logging/CHIPLogging.h>
-
extern "C" {
#include <bl_sys.h>
}
diff --git a/src/platform/bouffalolab/common/ConfigurationManagerImpl.h b/src/platform/bouffalolab/common/ConfigurationManagerImpl.h
index 0427551..b9d207f 100644
--- a/src/platform/bouffalolab/common/ConfigurationManagerImpl.h
+++ b/src/platform/bouffalolab/common/ConfigurationManagerImpl.h
@@ -64,6 +64,10 @@
CHIP_ERROR GetPrimaryWiFiMACAddress(uint8_t * buf) override;
#endif
+#if !CHIP_DEVICE_CONFIG_ENABLE_WIFI && !CHIP_DEVICE_CONFIG_ENABLE_THREAD
+ CHIP_ERROR GetPrimaryMACAddress(MutableByteSpan buf) override;
+#endif
+
static void DoFactoryReset(intptr_t arg);
};
diff --git a/src/platform/bouffalolab/common/ConnectivityManagerImpl.cpp b/src/platform/bouffalolab/common/ConnectivityManagerImpl.cpp
index f1a47e5..4115f56 100644
--- a/src/platform/bouffalolab/common/ConnectivityManagerImpl.cpp
+++ b/src/platform/bouffalolab/common/ConnectivityManagerImpl.cpp
@@ -20,6 +20,9 @@
#include <lib/support/CodeUtils.h>
#include <lib/support/logging/CHIPLogging.h>
#include <platform/ConnectivityManager.h>
+#include <platform/DiagnosticDataProvider.h>
+#include <platform/bouffalolab/common/BLConfig.h>
+#include <platform/bouffalolab/common/DiagnosticDataProviderImpl.h>
#include <platform/internal/BLEManager.h>
#include <platform/internal/GenericConnectivityManagerImpl_UDP.ipp>
@@ -33,9 +36,13 @@
#ifdef BL602
#include <platform/bouffalolab/BL602/NetworkCommissioningDriver.h>
#endif
+#ifdef BL702
+#include <platform/bouffalolab/BL702/NetworkCommissioningDriver.h>
+#endif
#endif
#if CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE
+#include <platform/internal/BLEManager.h>
#include <platform/internal/GenericConnectivityManagerImpl_BLE.ipp>
#endif
@@ -62,10 +69,8 @@
#endif
#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
- CHIP_ERROR err = SetWiFiStationMode(kWiFiStationMode_Enabled);
- NetworkCommissioning::BLWiFiDriver::GetInstance().ReConnectWiFiNetwork();
-
- ReturnErrorOnFailure(err);
+ mWiFiStationState = ConnectivityManager::kWiFiStationState_NotConnected;
+ ReturnErrorOnFailure(SetWiFiStationMode(kWiFiStationMode_Enabled));
#endif
return CHIP_NO_ERROR;
@@ -79,5 +84,258 @@
#endif
}
+#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
+bool ConnectivityManagerImpl::_IsWiFiStationEnabled(void)
+{
+ return GetWiFiStationMode() == kWiFiStationMode_Enabled;
+}
+
+bool ConnectivityManagerImpl::_IsWiFiStationProvisioned(void)
+{
+ CHIP_ERROR err = CHIP_NO_ERROR;
+ char ssid[64] = { 0 };
+ char psk[64] = { 0 };
+ size_t ssidLen = 0;
+ size_t pskLen = 0;
+
+ err = PersistedStorage::KeyValueStoreMgr().Get(BLConfig::kBLConfigKey_wifissid, (void *) ssid, 64, &ssidLen, 0);
+ SuccessOrExit(err);
+
+ err = PersistedStorage::KeyValueStoreMgr().Get(BLConfig::kBLConfigKey_wifipassword, (void *) psk, 64, &pskLen, 0);
+ SuccessOrExit(err);
+
+ return (ssidLen != 0);
+exit:
+ return false;
+}
+
+CHIP_ERROR ConnectivityManagerImpl::_SetWiFiStationMode(WiFiStationMode val)
+{
+ CHIP_ERROR err = CHIP_NO_ERROR;
+
+ VerifyOrExit(val != kWiFiStationMode_NotSupported, err = CHIP_ERROR_INVALID_ARGUMENT);
+
+ if (val != kWiFiStationMode_ApplicationControlled)
+ {
+ DeviceLayer::SystemLayer().ScheduleWork(DriveStationState, NULL);
+ }
+
+ if (mWiFiStationMode != val)
+ {
+ ChipLogProgress(DeviceLayer, "WiFi station mode change: %s -> %s", WiFiStationModeToStr(mWiFiStationMode),
+ WiFiStationModeToStr(val));
+ }
+
+ mWiFiStationMode = val;
+
+exit:
+ return err;
+}
+
+void ConnectivityManagerImpl::ChangeWiFiStationState(WiFiStationState newState)
+{
+ if (mWiFiStationState != newState)
+ {
+ ChipLogProgress(DeviceLayer, "WiFi station state change: %s -> %s", WiFiStationStateToStr(mWiFiStationState),
+ WiFiStationStateToStr(newState));
+ mWiFiStationState = newState;
+ ConnectivityMgrImpl().DriveStationState();
+ SystemLayer().ScheduleLambda([]() { NetworkCommissioning::BLWiFiDriver::GetInstance().OnNetworkStatusChange(); });
+ }
+}
+
+void ConnectivityManagerImpl::_ClearWiFiStationProvision(void)
+{
+ CHIP_ERROR err = CHIP_NO_ERROR;
+
+ err = PersistedStorage::KeyValueStoreMgr().Delete(BLConfig::kBLConfigKey_wifissid);
+ SuccessOrExit(err);
+
+ err = PersistedStorage::KeyValueStoreMgr().Delete(BLConfig::kBLConfigKey_wifipassword);
+ SuccessOrExit(err);
+
+exit:
+ return;
+}
+
+void ConnectivityManagerImpl::_OnWiFiStationProvisionChange(void)
+{
+ DeviceLayer::SystemLayer().ScheduleWork(DriveStationState, NULL);
+}
+
+CHIP_ERROR ConnectivityManagerImpl::ConnectProvisionedWiFiNetwork(void)
+{
+ char ssid[64] = { 0 };
+ char psk[64] = { 0 };
+ size_t ssidLen = 0;
+ size_t pskLen = 0;
+
+ ReturnErrorOnFailure(PersistedStorage::KeyValueStoreMgr().Get(BLConfig::kBLConfigKey_wifissid, (void *) ssid, 64, &ssidLen, 0));
+ ReturnErrorOnFailure(
+ PersistedStorage::KeyValueStoreMgr().Get(BLConfig::kBLConfigKey_wifipassword, (void *) psk, 64, &pskLen, 0));
+
+ NetworkCommissioning::BLWiFiDriver::GetInstance().ConnectWiFiNetwork(ssid, ssidLen, psk, pskLen);
+
+ return CHIP_NO_ERROR;
+}
+
+void ConnectivityManagerImpl::OnWiFiStationConnected()
+{
+ ChipDeviceEvent event;
+ event.Type = DeviceEventType::kWiFiConnectivityChange;
+ event.WiFiConnectivityChange.Result = kConnectivity_Established;
+ PlatformMgr().PostEventOrDie(&event);
+
+ WiFiDiagnosticsDelegate * delegate = GetDiagnosticDataProvider().GetWiFiDiagnosticsDelegate();
+ if (delegate)
+ {
+ delegate->OnConnectionStatusChanged(
+ chip::to_underlying(chip::app::Clusters::WiFiNetworkDiagnostics::ConnectionStatusEnum::kConnected));
+ }
+}
+
+void ConnectivityManagerImpl::DriveStationState()
+{
+ ChipLogProgress(DeviceLayer, "DriveStationState: mWiFiStationState=%s", WiFiStationStateToStr(mWiFiStationState));
+ switch (mWiFiStationState)
+ {
+ case ConnectivityManager::kWiFiStationState_NotConnected: {
+ if (GetWiFiStationMode() == ConnectivityManager::kWiFiStationMode_Enabled && IsWiFiStationProvisioned())
+ {
+ ConnectProvisionedWiFiNetwork();
+ }
+ }
+ break;
+ case ConnectivityManager::kWiFiStationState_Connecting: {
+ ChipLogProgress(DeviceLayer, "Wi-Fi station is connecting to AP");
+ }
+ break;
+ case ConnectivityManager::kWiFiStationState_Connecting_Succeeded: {
+ ChipLogProgress(DeviceLayer, "Wi-Fi station successfully connects to AP");
+ mConnectivityFlag.ClearAll();
+ mConnectivityFlag.Set(ConnectivityFlags::kAwaitingConnectivity);
+ }
+ break;
+ case ConnectivityManager::kWiFiStationState_Connecting_Failed: {
+ ChipLogProgress(DeviceLayer, "Wi-Fi station connecting failed");
+ mConnectivityFlag.ClearAll();
+ OnWiFiStationDisconnected();
+ if (ConnectivityManager::kWiFiStationState_Connecting == mWiFiStationState)
+ {
+ SystemLayer().ScheduleLambda([]() { NetworkCommissioning::BLWiFiDriver::GetInstance().OnConnectWiFiNetwork(false); });
+ }
+ }
+ break;
+ case ConnectivityManager::kWiFiStationState_Connected: {
+ ChipLogProgress(DeviceLayer, "Wi-Fi stattion connected.");
+ OnWiFiStationConnected();
+ SystemLayer().ScheduleLambda([]() { NetworkCommissioning::BLWiFiDriver::GetInstance().OnConnectWiFiNetwork(true); });
+ }
+ break;
+ case ConnectivityManager::kWiFiStationState_Disconnecting: {
+ ChipLogProgress(DeviceLayer, "Wi-Fi station is disconnecting to AP");
+ mConnectivityFlag.ClearAll();
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+void ConnectivityManagerImpl::DriveStationState(::chip::System::Layer * aLayer, void * aAppState)
+{
+ ConnectivityMgrImpl().DriveStationState();
+}
+#endif
+
+#if !CHIP_DEVICE_CONFIG_ENABLE_THREAD
+void ConnectivityManagerImpl::OnConnectivityChanged(struct netif * interface)
+{
+ bool haveIPv4Conn = false;
+ bool haveIPv6Conn = false;
+ const bool hadIPv4Conn = mConnectivityFlag.Has(ConnectivityFlags::kHaveIPv4InternetConnectivity);
+ const bool hadIPv6Conn = mConnectivityFlag.Has(ConnectivityFlags::kHaveIPv6InternetConnectivity);
+ IPAddress addr;
+
+ if (interface != NULL && netif_is_up(interface) && netif_is_link_up(interface))
+ {
+ mConnectivityFlag.Clear(ConnectivityFlags::kAwaitingConnectivity);
+
+ if (!ip4_addr_isany(netif_ip4_addr(interface)) && !ip4_addr_isany(netif_ip4_gw(interface)))
+ {
+ haveIPv4Conn = true;
+ char addrStr[INET_ADDRSTRLEN];
+ ip4addr_ntoa_r(netif_ip4_addr(interface), addrStr, sizeof(addrStr));
+ IPAddress::FromString(addrStr, addr);
+ if (0 != memcmp(netif_ip4_addr(interface), &m_ip4addr, sizeof(ip4_addr_t)))
+ {
+ ChipLogProgress(DeviceLayer, "IPv4 Address Assigned, %s", ip4addr_ntoa(netif_ip4_addr(interface)));
+ memcpy(&m_ip4addr, netif_ip4_addr(interface), sizeof(ip4_addr_t));
+ ConnectivityMgrImpl().OnIPv4AddressAvailable();
+ }
+ }
+
+ // Search among the IPv6 addresses assigned to the interface for a Global Unicast
+ // address (2000::/3) that is in the valid state. If such an address is found...
+ for (uint32_t i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++)
+ {
+ if (!ip6_addr_islinklocal(netif_ip6_addr(interface, i)) && ip6_addr_isvalid(netif_ip6_addr_state(interface, i)))
+ {
+ haveIPv6Conn = true;
+ if (0 != memcmp(netif_ip6_addr(interface, i), m_ip6addr + i, sizeof(ip6_addr_t)))
+ {
+ ChipLogProgress(DeviceLayer, "IPv6 Address Assigned, %s", ip6addr_ntoa(netif_ip6_addr(interface, i)));
+ memcpy(m_ip6addr + i, netif_ip6_addr(interface, i), sizeof(ip6_addr_t));
+ ConnectivityMgrImpl().OnIPv6AddressAvailable();
+ }
+ }
+ }
+ }
+
+ // If the internet connectivity state has changed...
+ if (haveIPv4Conn != hadIPv4Conn || haveIPv6Conn != hadIPv6Conn)
+ {
+ // Update the current state.
+ mConnectivityFlag.Set(ConnectivityFlags::kHaveIPv4InternetConnectivity, haveIPv4Conn);
+ mConnectivityFlag.Set(ConnectivityFlags::kHaveIPv6InternetConnectivity, haveIPv6Conn);
+
+ // Alert other components of the state change.
+ ChipDeviceEvent event;
+ event.Type = DeviceEventType::kInternetConnectivityChange;
+ event.InternetConnectivityChange.IPv4 = GetConnectivityChange(hadIPv4Conn, haveIPv4Conn);
+ event.InternetConnectivityChange.IPv6 = GetConnectivityChange(hadIPv6Conn, haveIPv6Conn);
+ event.InternetConnectivityChange.ipAddress = addr;
+ PlatformMgr().PostEventOrDie(&event);
+
+ if (haveIPv4Conn != hadIPv4Conn)
+ {
+ ChipLogProgress(DeviceLayer, "%s Internet connectivity %s", "IPv4", (haveIPv4Conn) ? "ESTABLISHED" : "LOST");
+ }
+
+ if (haveIPv6Conn != hadIPv6Conn)
+ {
+ ChipLogProgress(DeviceLayer, "%s Internet connectivity %s", "IPv6", (haveIPv6Conn) ? "ESTABLISHED" : "LOST");
+ }
+ }
+}
+
+void ConnectivityManagerImpl::OnIPv4AddressAvailable()
+{
+ ChipDeviceEvent event;
+ event.Type = DeviceEventType::kInterfaceIpAddressChanged;
+ event.InterfaceIpAddressChanged.Type = InterfaceIpChangeType::kIpV4_Assigned;
+ PlatformMgr().PostEventOrDie(&event);
+}
+
+void ConnectivityManagerImpl::OnIPv6AddressAvailable()
+{
+ ChipDeviceEvent event;
+ event.Type = DeviceEventType::kInterfaceIpAddressChanged;
+ event.InterfaceIpAddressChanged.Type = InterfaceIpChangeType::kIpV6_Assigned;
+ PlatformMgr().PostEventOrDie(&event);
+}
+
+#endif
+
} // namespace DeviceLayer
} // namespace chip
diff --git a/src/platform/bouffalolab/common/ConnectivityManagerImpl.h b/src/platform/bouffalolab/common/ConnectivityManagerImpl.h
index 8c06c58..0011a8b 100644
--- a/src/platform/bouffalolab/common/ConnectivityManagerImpl.h
+++ b/src/platform/bouffalolab/common/ConnectivityManagerImpl.h
@@ -67,26 +67,52 @@
// Allow the ConnectivityManager interface class to delegate method calls to
// the implementation methods provided by this class.
friend class ConnectivityManager;
+ friend void netif_status_callback(struct netif * netif);
-#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
public:
- static WiFiStationState mWiFiStationState;
-
+#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
bool _IsWiFiStationConnected(void);
- void WifiStationStateChange(void);
- void OnStationConnected(void);
+ WiFiStationState GetWiFiStationState(void);
void ChangeWiFiStationState(WiFiStationState newState);
+ void OnWiFiStationStateChanged(void);
+ void OnWiFiStationConnected(void);
+ void OnWiFiStationDisconnected(void);
+#endif
+
+#if !CHIP_DEVICE_CONFIG_ENABLE_THREAD
+ void OnConnectivityChanged(struct netif * interface);
+ void OnIPv4AddressAvailable();
void OnIPv6AddressAvailable();
#endif
private:
// ===== Members that implement the ConnectivityManager abstract interface.
#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
+ WiFiStationMode mWiFiStationMode;
+ WiFiStationState mWiFiStationState;
+
+ BitFlags<GenericConnectivityManagerImpl_WiFi::ConnectivityFlags> mConnectivityFlag;
+
bool _IsWiFiStationEnabled(void);
- // bool _IsWiFiStationProvisioned(void);
+ ConnectivityManager::WiFiStationMode _GetWiFiStationMode();
CHIP_ERROR _SetWiFiStationMode(WiFiStationMode val);
- void GetWifiState(void);
- WiFiStationState GetWiFiStationState(void);
+ bool _IsWiFiStationProvisioned(void);
+ void _ClearWiFiStationProvision();
+ void _OnWiFiStationProvisionChange();
+ CHIP_ERROR ConnectProvisionedWiFiNetwork();
+#elif !CHIP_DEVICE_CONFIG_ENABLE_THREAD
+ enum class ConnectivityFlags : uint16_t
+ {
+ kHaveIPv4InternetConnectivity = 0x0001,
+ kHaveIPv6InternetConnectivity = 0x0002,
+ kAwaitingConnectivity = 0x0010,
+ };
+ BitFlags<ConnectivityFlags> mConnectivityFlag;
+#endif
+
+#if !CHIP_DEVICE_CONFIG_ENABLE_THREAD
+ ip4_addr_t m_ip4addr;
+ ip6_addr_t m_ip6addr[LWIP_IPV6_NUM_ADDRESSES];
#endif
void DriveStationState(void);
@@ -95,7 +121,6 @@
void _OnPlatformEvent(const ChipDeviceEvent * event);
// ===== Members for internal use by the following friends.
-
friend ConnectivityManager & ConnectivityMgr(void);
friend ConnectivityManagerImpl & ConnectivityMgrImpl(void);
@@ -112,6 +137,11 @@
{
return mWiFiStationState == kWiFiStationState_Connected;
}
+
+inline ConnectivityManager::WiFiStationMode ConnectivityManagerImpl::_GetWiFiStationMode(void)
+{
+ return kWiFiStationMode_Enabled;
+}
#endif
/**
diff --git a/src/platform/bouffalolab/common/DiagnosticDataProviderImpl.cpp b/src/platform/bouffalolab/common/DiagnosticDataProviderImpl.cpp
index 6e11e6f..8ad878a 100644
--- a/src/platform/bouffalolab/common/DiagnosticDataProviderImpl.cpp
+++ b/src/platform/bouffalolab/common/DiagnosticDataProviderImpl.cpp
@@ -31,6 +31,7 @@
#ifdef CFG_USE_PSRAM
extern "C" size_t get_heap3_size(void);
#endif
+extern "C" struct netif * deviceInterface_getNetif(void);
DiagnosticDataProviderImpl & DiagnosticDataProviderImpl::GetDefaultInstance()
{
@@ -208,6 +209,69 @@
return CHIP_NO_ERROR;
}
+CHIP_ERROR DiagnosticDataProviderImpl::GetNetworkInterfaces(NetworkInterface ** netifpp)
+{
+ NetworkInterface * ifp = new NetworkInterface();
+
+#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
+ const char * threadNetworkName = otThreadGetNetworkName(ThreadStackMgrImpl().OTInstance());
+ ifp->name = Span<const char>(threadNetworkName, strlen(threadNetworkName));
+ ifp->isOperational = true;
+ ifp->offPremiseServicesReachableIPv4.SetNull();
+ ifp->offPremiseServicesReachableIPv6.SetNull();
+ ifp->type = EMBER_ZCL_INTERFACE_TYPE_ENUM_THREAD;
+ uint8_t macBuffer[ConfigurationManager::kPrimaryMACAddressLength];
+ ConfigurationMgr().GetPrimary802154MACAddress(macBuffer);
+ ifp->hardwareAddress = ByteSpan(macBuffer, ConfigurationManager::kPrimaryMACAddressLength);
+#else
+
+ struct netif * netif = deviceInterface_getNetif();
+
+ Platform::CopyString(ifp->Name, netif->name);
+ ifp->name = CharSpan::fromCharString(ifp->Name);
+ ifp->isOperational = true;
+#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
+ ifp->type = EMBER_ZCL_INTERFACE_TYPE_ENUM_WI_FI;
+#else
+ ifp->type = EMBER_ZCL_INTERFACE_TYPE_ENUM_ETHERNET;
+#endif
+ ifp->offPremiseServicesReachableIPv4.SetNull();
+ ifp->offPremiseServicesReachableIPv6.SetNull();
+
+ memcpy(ifp->MacAddress, netif->hwaddr, sizeof(netif->hwaddr));
+ ifp->hardwareAddress = ByteSpan(ifp->MacAddress, sizeof(netif->hwaddr));
+
+ memcpy(ifp->Ipv4AddressesBuffer[0], netif_ip_addr4(netif), kMaxIPv4AddrSize);
+ ifp->Ipv4AddressSpans[0] = ByteSpan(ifp->Ipv4AddressesBuffer[0], kMaxIPv4AddrSize);
+ ifp->IPv4Addresses = chip::app::DataModel::List<chip::ByteSpan>(ifp->Ipv4AddressSpans, 1);
+
+ int addr_count = 0;
+ for (size_t i = 0; (i < LWIP_IPV6_NUM_ADDRESSES) && (i < kMaxIPv6AddrCount); i++)
+ {
+ if (!ip6_addr_isany(&(netif->ip6_addr[i].u_addr.ip6)))
+ {
+ memcpy(ifp->Ipv6AddressesBuffer[addr_count], &(netif->ip6_addr[i].u_addr.ip6), sizeof(ip6_addr_t));
+ ifp->Ipv6AddressSpans[addr_count] = ByteSpan(ifp->Ipv6AddressesBuffer[addr_count], kMaxIPv6AddrSize);
+ }
+ }
+ ifp->IPv6Addresses = chip::app::DataModel::List<chip::ByteSpan>(ifp->Ipv6AddressSpans, addr_count);
+#endif
+
+ *netifpp = ifp;
+
+ return CHIP_NO_ERROR;
+}
+
+void DiagnosticDataProviderImpl::ReleaseNetworkInterfaces(NetworkInterface * netifp)
+{
+ while (netifp)
+ {
+ NetworkInterface * del = netifp;
+ netifp = netifp->Next;
+ delete del;
+ }
+}
+
DiagnosticDataProvider & GetDiagnosticDataProviderImpl()
{
return DiagnosticDataProviderImpl::GetDefaultInstance();
diff --git a/src/platform/bouffalolab/common/SystemPlatformConfig.h b/src/platform/bouffalolab/common/SystemPlatformConfig.h
index 2fb7579..4912f40 100644
--- a/src/platform/bouffalolab/common/SystemPlatformConfig.h
+++ b/src/platform/bouffalolab/common/SystemPlatformConfig.h
@@ -26,5 +26,6 @@
} // namespace chip
// ==================== Platform Adaptations ====================
+#define CHIP_SYSTEM_CONFIG_PLATFORM_PROVIDES_EVENT_FUNCTIONS 1
#define CHIP_SYSTEM_CONFIG_PLATFORM_PROVIDES_TIME 1
#define CHIP_SYSTEM_CONFIG_EVENT_OBJECT_TYPE const struct ::chip::DeviceLayer::ChipDeviceEvent *
diff --git a/src/platform/device.gni b/src/platform/device.gni
index d740663..ecf0117 100644
--- a/src/platform/device.gni
+++ b/src/platform/device.gni
@@ -111,11 +111,12 @@
}
}
-if ((chip_device_platform == "bl702" || chip_device_platform == "bl702l") &&
- chip_enable_openthread) {
- chip_mdns = "platform"
-} else if (chip_device_platform == "bl702" && chip_enable_wifi) {
- chip_mdns = "minimal"
+if (chip_device_platform == "bl702" || chip_device_platform == "bl702l") {
+ if (chip_enable_openthread) {
+ chip_mdns = "platform"
+ } else {
+ chip_mdns = "minimal"
+ }
}
_chip_device_layer = "none"
diff --git a/third_party/bouffalolab/bl702/bl_iot_sdk.gni b/third_party/bouffalolab/bl702/bl_iot_sdk.gni
index 8b69f1b..5c35e8c 100644
--- a/third_party/bouffalolab/bl702/bl_iot_sdk.gni
+++ b/third_party/bouffalolab/bl702/bl_iot_sdk.gni
@@ -20,8 +20,6 @@
declare_args() {
bl_iot_sdk_root = "${chip_root}/third_party/bouffalolab/repo"
-
- enable_cdc_module = false
}
assert(bl_iot_sdk_root != "", "bl_iot_sdk_root must be specified")
@@ -34,14 +32,6 @@
template("bl_iot_sdk") {
sdk_target_name = target_name
- if (defined(invoker.enable_zigbee)) {
- enable_zigbee = invoker.enable_zigbee
- }
-
- if (defined(invoker.enable_cdc_module)) {
- enable_cdc_module = invoker.enable_cdc_module
- }
-
config("${sdk_target_name}_config") {
defines = [
"__FILENAME__=strrchr(__FILE__,'/')?strrchr(__FILE__,'/')+1:__FILE__",
@@ -241,7 +231,10 @@
}
source_set("${sdk_target_name}_hosal") {
- defines = [ "CFG_USE_XTAL32K=1" ]
+ defines = [
+ "CFG_USE_XTAL32K=1",
+ "DISABLE_PRINT=1",
+ ]
sources = [
"${bl_iot_sdk_root}/components/platform/hosal/bl702_hal/bl_adc.c",
@@ -728,62 +721,27 @@
]
}
- config("${sdk_target_name}_config_lwip_port") {
- _include_dirs = [
- "${bl_iot_sdk_root}/components/network/lwip/lwip-port",
- "${bl_iot_sdk_root}/components/network/lwip/lwip-port/config",
- "${bl_iot_sdk_root}/components/stage/virt_net/include",
- "${bl_iot_sdk_root}/components/stage/throughput/bl702/inc",
- ]
-
- defines = [
- "TCPIP_THREAD_PRIO=24",
- "CFG_ETHERNET_ENABLE=1",
- ]
-
- cflags = []
- foreach(include_dir, _include_dirs) {
- cflags += [ "-isystem" + rebase_path(include_dir, root_build_dir) ]
- }
-
- cflags += [
- "-Wno-conversion",
- "-Wno-unused-function",
+ config("${sdk_target_name}_config_ethernet") {
+ include_dirs = [
+ "${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_ethernet/Inc",
]
}
- source_set("${sdk_target_name}_lwip_port") {
- defines = [
- "SPI_WIFI_RXBUFF_IN_PSRAM=1",
- "VIRT_NET_SPI_RX_TASK_PRIORITY=25",
- ]
+ source_set("${sdk_target_name}_ethernet") {
+ defines = [ "DISABLE_PRINT=1" ]
+ sources = [ "${bl_iot_sdk_root}/components/platform/soc/bl702/bl702_ethernet/Src/eth_bd.c" ]
- # include_dirs = [
- # "${bl_iot_sdk_root}/components/network/lwip/lwip-port/arch",
- # "${bl_iot_sdk_root}/components/network/lwip/lwip-port/FreeRTOS",
- # "${bl_iot_sdk_root}/components/stage/throughput"
- # ]
-
- # sources = [
- # "${bl_iot_sdk_root}/components/network/lwip/lwip-port/FreeRTOS/ethernetif.c",
- # "${bl_iot_sdk_root}/components/network/lwip/lwip-port/FreeRTOS/sys_arch.c"
- # ]
-
- # sources += [
- # "${bl_iot_sdk_root}/components/stage/throughput/bl702/src/tp_spi_master.c",
- # ]
- # sources += [
- # "${bl_iot_sdk_root}/components/stage/virt_net/src/virt_net.c",
- # "${bl_iot_sdk_root}/components/stage/virt_net/src/virt_net_spi.c",
- # ]
-
- public_configs = [
- ":${sdk_target_name}_config",
- ":${sdk_target_name}_config_lwip_port",
+ configs += [
+ ":${sdk_target_name}_config_BSP_Driver",
+ ":${sdk_target_name}_config_hosal",
+ ":${sdk_target_name}_config_utils",
+ ":${sdk_target_name}_config_freertos",
":${sdk_target_name}_config_lwip",
]
-
- cflags = [ "-Wno-sign-compare" ]
+ public_configs = [
+ ":${sdk_target_name}_config",
+ ":${sdk_target_name}_config_ethernet",
+ ]
}
config("${sdk_target_name}_config_lwip") {
@@ -797,12 +755,15 @@
]
defines = [
+ "CFG_ETHERNET_ENABLE=1",
"LWIP_IPV6=1",
"LWIP_IPV4=1",
"LWIP_IPV6_DHCP6=1",
"LWIP_IPV6_SCOPES=0",
"PBUF_POOL_SIZE=20",
- "PBUF_POOL_BUFSIZE=(1280+150)",
+ "PBUF_POOL_BUFSIZE=1600",
+ "CONFIG_LWIP_HOOK_IP6_ROUTE_DEFAULT",
+ "CONFIG_LWIP_HOOK_ND6_GET_GW_DEFAULT",
]
}
@@ -881,6 +842,12 @@
":${sdk_target_name}_config",
":${sdk_target_name}_config_lwip",
]
+
+ cflags = [
+ "-Wno-incompatible-pointer-types",
+ "-Wno-unused-variable",
+ "-Wno-sign-compare",
+ ]
}
group(sdk_target_name) {
@@ -888,6 +855,7 @@
":${sdk_target_name}_BSP_Driver",
":${sdk_target_name}_bl702_freertos",
":${sdk_target_name}_ble",
+ ":${sdk_target_name}_ethernet",
":${sdk_target_name}_fs",
":${sdk_target_name}_hosal",
":${sdk_target_name}_libc",
@@ -898,16 +866,16 @@
":${sdk_target_name}_utils",
]
- if (chip_enable_openthread) {
+ if (defined(invoker.chip_enable_wifi) && invoker.chip_enable_wifi) {
+ } else if (defined(invoker.chip_enable_openthread) &&
+ invoker.chip_enable_openthread) {
public_deps += [ ":${sdk_target_name}_openthread_port" ]
- }
-
- if (chip_enable_wifi) {
- public_deps += [ ":${sdk_target_name}_lwip_port" ]
+ } else {
+ public_deps += [ ":${sdk_target_name}_ethernet" ]
public_deps += [ ":${sdk_target_name}_lwip" ]
}
- if (enable_cdc_module) {
+ if (defined(invoker.enable_cdc_module) && invoker.enable_cdc_module) {
public_deps += [ ":${sdk_target_name}_bl702_usb_cdc" ]
}
}
diff --git a/third_party/bouffalolab/bl702l/bl_iot_sdk.gni b/third_party/bouffalolab/bl702l/bl_iot_sdk.gni
index 9362f2d..89d35bc 100644
--- a/third_party/bouffalolab/bl702l/bl_iot_sdk.gni
+++ b/third_party/bouffalolab/bl702l/bl_iot_sdk.gni
@@ -687,7 +687,8 @@
":${sdk_target_name}_utils",
]
public_configs = [ ":${sdk_target_name}_config_BSP_Driver" ]
- if (chip_enable_openthread) {
+ if (defined(invoker.chip_enable_openthread) &&
+ invoker.chip_enable_openthread) {
public_deps += [ ":${sdk_target_name}_openthread_port" ]
}
}
diff --git a/third_party/bouffalolab/repo b/third_party/bouffalolab/repo
index 31489e4..d1aba79 160000
--- a/third_party/bouffalolab/repo
+++ b/third_party/bouffalolab/repo
@@ -1 +1 @@
-Subproject commit 31489e4c11dbe341f7a38792efc6d7a95d1d48ea
+Subproject commit d1aba795ad1b36ab2a0f58f664caf176e26fe97b