mirror of
https://github.com/esphome/esphome.git
synced 2026-06-02 03:02:19 +08:00
[wifi] Use direct SDK APIs for LibreTiny SSID retrieval (#14349)
This commit is contained in:
@@ -13,6 +13,19 @@
|
|||||||
#include <FreeRTOS.h>
|
#include <FreeRTOS.h>
|
||||||
#include <queue.h>
|
#include <queue.h>
|
||||||
|
|
||||||
|
#ifdef USE_BK72XX
|
||||||
|
extern "C" {
|
||||||
|
#include <wlan_ui_pub.h>
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_RTL87XX
|
||||||
|
extern "C" {
|
||||||
|
#include <wifi_conf.h>
|
||||||
|
#include <wifi_structures.h>
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "esphome/core/application.h"
|
#include "esphome/core/application.h"
|
||||||
#include "esphome/core/hal.h"
|
#include "esphome/core/hal.h"
|
||||||
#include "esphome/core/helpers.h"
|
#include "esphome/core/helpers.h"
|
||||||
@@ -760,10 +773,22 @@ bssid_t WiFiComponent::wifi_bssid() {
|
|||||||
}
|
}
|
||||||
std::string WiFiComponent::wifi_ssid() { return WiFi.SSID().c_str(); }
|
std::string WiFiComponent::wifi_ssid() { return WiFi.SSID().c_str(); }
|
||||||
const char *WiFiComponent::wifi_ssid_to(std::span<char, SSID_BUFFER_SIZE> buffer) {
|
const char *WiFiComponent::wifi_ssid_to(std::span<char, SSID_BUFFER_SIZE> buffer) {
|
||||||
// TODO: Find direct LibreTiny API to avoid Arduino String allocation
|
#ifdef USE_BK72XX
|
||||||
|
LinkStatusTypeDef link_status{};
|
||||||
|
bk_wlan_get_link_status(&link_status);
|
||||||
|
size_t len = strnlen(reinterpret_cast<const char *>(link_status.ssid), SSID_BUFFER_SIZE - 1);
|
||||||
|
memcpy(buffer.data(), link_status.ssid, len);
|
||||||
|
#elif defined(USE_RTL87XX)
|
||||||
|
rtw_wifi_setting_t setting{};
|
||||||
|
wifi_get_setting("wlan0", &setting);
|
||||||
|
size_t len = strnlen(reinterpret_cast<const char *>(setting.ssid), SSID_BUFFER_SIZE - 1);
|
||||||
|
memcpy(buffer.data(), setting.ssid, len);
|
||||||
|
#else
|
||||||
|
// LN882X: wifi_get_sta_conn_info() provides direct pointer access
|
||||||
String ssid = WiFi.SSID();
|
String ssid = WiFi.SSID();
|
||||||
size_t len = std::min(static_cast<size_t>(ssid.length()), SSID_BUFFER_SIZE - 1);
|
size_t len = std::min(static_cast<size_t>(ssid.length()), SSID_BUFFER_SIZE - 1);
|
||||||
memcpy(buffer.data(), ssid.c_str(), len);
|
memcpy(buffer.data(), ssid.c_str(), len);
|
||||||
|
#endif
|
||||||
buffer[len] = '\0';
|
buffer[len] = '\0';
|
||||||
return buffer.data();
|
return buffer.data();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user