diff --git a/cores/beken-72xx/arduino/libraries/WiFi/WiFiGeneric.cpp b/cores/beken-72xx/arduino/libraries/WiFi/WiFiGeneric.cpp index 9004219..588b91a 100644 --- a/cores/beken-72xx/arduino/libraries/WiFi/WiFiGeneric.cpp +++ b/cores/beken-72xx/arduino/libraries/WiFi/WiFiGeneric.cpp @@ -84,3 +84,20 @@ IPAddress WiFiClass::hostByName(const char *hostname) { } return IPAddress(); } + +bool WiFiClass::setSleep(bool enable) { + LT_DM(WIFI, "WiFi sleep mode %u", enable); + if (enable) { + // Replicating OpenBeken PowerSave feature + // https://github.com/openshwprojects/OpenBK7231T_App/blob/567c5756b489f0670988fad1c2742a19f0f217ea/src/cmnds/cmd_main.c#L58 + bk_wlan_power_save_set_level((BK_PS_LEVEL)(PS_RF_SLEEP_BIT | PS_MCU_SLEEP_BIT)); + } else { + bk_wlan_power_save_set_level((BK_PS_LEVEL)0); + } + data.sleep = enable; + return true; +} + +bool WiFiClass::getSleep() { + return data.sleep; +} diff --git a/cores/beken-72xx/arduino/libraries/WiFi/WiFiPrivate.h b/cores/beken-72xx/arduino/libraries/WiFi/WiFiPrivate.h index eb4eeb0..276aeaa 100644 --- a/cores/beken-72xx/arduino/libraries/WiFi/WiFiPrivate.h +++ b/cores/beken-72xx/arduino/libraries/WiFi/WiFiPrivate.h @@ -31,6 +31,7 @@ extern "C" { extern void func_init_extended(); extern void app_pre_start(); extern void bk_wlan_ap_init(network_InitTypeDef_st *inNetworkInitPara); +extern int bk_wlan_power_save_set_level(BK_PS_LEVEL level); // func/hostapd-2.5/wpa_supplicant/main_supplicant.c extern struct wpa_ssid_value *wpas_connect_ssid; @@ -64,6 +65,7 @@ typedef struct { rw_evt_type lastStaEvent; rw_evt_type lastApEvent; bool apEnabled; + bool sleep; } WiFiData; #define DATA ((WiFiData *)data)