Skip to content

Commit

Permalink
ESP32: Read WiFi Network Diagnostics at runtime
Browse files Browse the repository at this point in the history
  • Loading branch information
sweetymhaiske committed Oct 7, 2021
1 parent d48d754 commit 92e4359
Show file tree
Hide file tree
Showing 2 changed files with 100 additions and 0 deletions.
89 changes: 89 additions & 0 deletions src/platform/ESP32/ConnectivityManagerImpl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,26 @@
#include <lib/support/CodeUtils.h>
#include <lib/support/logging/CHIPLogging.h>
#include <platform/internal/BLEManager.h>
#include <esp_wifi.h>

using namespace ::chip;
using namespace ::chip::Inet;
using namespace ::chip::System;
using namespace ::chip::TLV;

namespace {

enum class WiFiStatsCountType
{
kWiFiUnicastPacketRxCount,
kWiFiUnicastPacketTxCount,
kWiFiMulticastPacketRxCount,
kWiFiMulticastPacketTxCount,
kWiFiOverrunCount
};

}

namespace chip {
namespace DeviceLayer {

Expand Down Expand Up @@ -69,5 +83,80 @@ void ConnectivityManagerImpl::_OnPlatformEvent(const ChipDeviceEvent * event)
#endif
}

#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
CHIP_ERROR GetWiFiStatsCount(WiFiStatsCountType type, uint64_t & count)
{
return CHIP_NO_ERROR;
}

CHIP_ERROR ConnectivityManagerImpl::_GetWiFiChannelNumber(uint16_t & channelNumber)
{
/* AP information to which STA is connected */
wifi_ap_record_t ap_info;
esp_wifi_sta_get_ap_info(&ap_info);

channelNumber = ap_info.primary;
return CHIP_NO_ERROR;
}

CHIP_ERROR ConnectivityManagerImpl::_GetWiFiRssi(int8_t & rssi)
{
/* AP information to which STA is connected */
wifi_ap_record_t ap_info;
esp_wifi_sta_get_ap_info(&ap_info);

rssi = ap_info.rssi;

return CHIP_NO_ERROR;
}

CHIP_ERROR ConnectivityManagerImpl::_GetWiFiBeaconLostCount(uint32_t & beaconLostCount)
{
return CHIP_NO_ERROR;
}

CHIP_ERROR ConnectivityManagerImpl::_GetWiFiCurrentMaxRate(uint64_t & currentMaxRate)
{
return CHIP_NO_ERROR;
}

CHIP_ERROR ConnectivityManagerImpl::_GetWiFiPacketMulticastRxCount(uint32_t & packetMulticastRxCount)
{
uint64_t count;
return GetWiFiStatsCount(WiFiStatsCountType::kWiFiMulticastPacketRxCount, count);
}

CHIP_ERROR ConnectivityManagerImpl::_GetWiFiPacketMulticastTxCount(uint32_t & packetMulticastTxCount)
{
uint64_t count;
return GetWiFiStatsCount(WiFiStatsCountType::kWiFiMulticastPacketTxCount, count);
}

CHIP_ERROR ConnectivityManagerImpl::_GetWiFiPacketUnicastRxCount(uint32_t & packetUnicastRxCount)
{
uint64_t count;
return GetWiFiStatsCount(WiFiStatsCountType::kWiFiUnicastPacketRxCount, count);
}

CHIP_ERROR ConnectivityManagerImpl::_GetWiFiPacketUnicastTxCount(uint32_t & packetUnicastTxCount)
{
uint64_t count;
return GetWiFiStatsCount(WiFiStatsCountType::kWiFiUnicastPacketTxCount, count);
}

CHIP_ERROR ConnectivityManagerImpl::_GetWiFiOverrunCount(uint64_t & overrunCount)
{
return GetWiFiStatsCount(WiFiStatsCountType::kWiFiOverrunCount, overrunCount);
}

CHIP_ERROR ConnectivityManagerImpl::_ResetWiFiNetworkDiagnosticsCounts()
{
// On Linux simulation, the packet statistic informations are shared by all running programs,
// the current running program does not have permission to reset those counts.
return CHIP_NO_ERROR;
}

#endif // CHIP_DEVICE_CONFIG_ENABLE_WIFI

} // namespace DeviceLayer
} // namespace chip
11 changes: 11 additions & 0 deletions src/platform/ESP32/ConnectivityManagerImpl.h
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,17 @@ class ConnectivityManagerImpl final : public ConnectivityManager,
void _OnWiFiScanDone();
void _OnWiFiStationProvisionChange();

CHIP_ERROR _GetWiFiChannelNumber(uint16_t & channelNumber);
CHIP_ERROR _GetWiFiRssi(int8_t & rssi);
CHIP_ERROR _GetWiFiBeaconLostCount(uint32_t & beaconLostCount);
CHIP_ERROR _GetWiFiPacketMulticastRxCount(uint32_t & packetMulticastRxCount);
CHIP_ERROR _GetWiFiPacketMulticastTxCount(uint32_t & packetMulticastTxCount);
CHIP_ERROR _GetWiFiPacketUnicastRxCount(uint32_t & packetUnicastRxCount);
CHIP_ERROR _GetWiFiPacketUnicastTxCount(uint32_t & packetUnicastTxCount);
CHIP_ERROR _GetWiFiCurrentMaxRate(uint64_t & currentMaxRate);
CHIP_ERROR _GetWiFiOverrunCount(uint64_t & overrunCount);
CHIP_ERROR _ResetWiFiNetworkDiagnosticsCounts();

// ===== Members for internal use by the following friends.

friend ConnectivityManager & ConnectivityMgr(void);
Expand Down

0 comments on commit 92e4359

Please sign in to comment.