Skip to content

Commit

Permalink
[wifi] update
Browse files Browse the repository at this point in the history
  • Loading branch information
strongwong committed Sep 13, 2023
1 parent a29d68b commit a3e221b
Show file tree
Hide file tree
Showing 6 changed files with 91 additions and 10 deletions.
5 changes: 5 additions & 0 deletions libraries/WiFi/src/WiFi.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,11 @@ class WiFiClass : public WiFiGenericClass, public WiFiSTAClass, public WiFiScanC
using WiFiSTAClass::BSSIDstr;

using WiFiScanClass::SSID;
// using WiFiScanClass::encryptionType;
using WiFiScanClass::RSSI;
// using WiFiScanClass::BSSID;
// using WiFiScanClass::BSSIDstr;
using WiFiScanClass::channel;

public:
void enableProv(bool status);
Expand Down
36 changes: 34 additions & 2 deletions libraries/WiFi/src/WiFiGeneric.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -199,8 +199,21 @@ int WiFiGenericClass::_eventCallback(arduino_event_t *event)

LOG_D("Arduino Event: %d - %s", event->event_id, WiFi.eventName(event->event_id));

if(event->event_id == ARDUINO_EVENT_WIFI_SCAN_DONE) {
WiFiScanClass::_scanDone();
// if(event->event_id == ARDUINO_EVENT_WIFI_SCAN_DONE) {
// WiFiScanClass::_scanDone();
// }
switch (event->event_id) {
case ARDUINO_EVENT_WIFI_SCAN_DONE : {
WiFiScanClass::_scanDone();
}
break;
// case ARDUINO_EVENT_WIFI_STA_GOT_IP : {
// WiFiSTAClass::_setStatus();
// }
// break;

default:
break;
}

return 0;
Expand Down Expand Up @@ -349,3 +362,22 @@ int WiFiGenericClass::clearStatusBits(int bits){
}
return xEventGroupClearBits(_arduino_event_group, bits);
}

int WiFiGenericClass::getStatusBits(){
if(!_arduino_event_group){
return 0;
}
return xEventGroupGetBits(_arduino_event_group);
}

int WiFiGenericClass::waitStatusBits(int bits, uint32_t timeout_ms){
if(!_arduino_event_group){
return 0;
}
return xEventGroupWaitBits(
_arduino_event_group, // The event group being tested.
bits, // The bits within the event group to wait for.
pdFALSE, // BIT_0 and BIT_4 should be cleared before returning.
pdTRUE, // Don't wait for both bits, either bit will do.
timeout_ms / portTICK_PERIOD_MS ) & bits; // Wait a maximum of 100ms for either bit to be set.
}
51 changes: 43 additions & 8 deletions libraries/WiFi/src/WiFiScan.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@ void* WiFiScanClass::_scanResult = 0;

int16_t WiFiScanClass::scanNetworks(bool async, bool show_hidden, bool passive, uint32_t max_ms_per_chan, uint8_t channel, const char *ssid, const uint8_t *bssid)
{
if (WiFiGenericClass::getStatusBits() & WIFI_SCANNING_BIT) {
return WIFI_SCAN_RUNNING;
}
WiFiScanClass::_scanTimeout = max_ms_per_chan * 20;
WiFiScanClass::_scanAsync = async;

Expand All @@ -46,9 +49,10 @@ int16_t WiFiScanClass::scanNetworks(bool async, bool show_hidden, bool passive,
wifi_mgmr_scan_params_t config;
memset(&config, 0 , sizeof(wifi_mgmr_scan_params_t));

ret = wifi_mgmr_sta_scan(&config);

WiFiGenericClass::clearStatusBits(WIFI_SCAN_DONE_BIT);
WiFiGenericClass::setStatusBits(WIFI_SCANNING_BIT);

ret = wifi_mgmr_sta_scan(&config);

if (ret < 0) {
printf("scan failed !\r\n");
Expand All @@ -61,22 +65,53 @@ int16_t WiFiScanClass::scanNetworks(bool async, bool show_hidden, bool passive,

}

String WiFiScanClass::SSID(uint8_t i)
void * WiFiScanClass::_getScanInfoByIndex(int i)
{

if (!WiFiScanClass::_scanResult || (size_t) i >= WiFiScanClass::_scanCount) {
return 0;
}
return reinterpret_cast<wifi_mgmr_scan_item_t*>(WiFiScanClass::_scanResult) + i;
}

void WiFiScanClass::_scanDone()
{
(WiFiScanClass::_scanCount) = wifi_mgmr_sta_scanlist_nums_get();
if(WiFiScanClass::_scanCount) {
// printf("scan done:%d\r\n", WiFiScanClass::_scanCount);
// WiFiScanClass::_scanResult = new wifi_ap_record_t[WiFiScanClass::_scanCount];
// if(!WiFiScanClass::_scanResult || esp_wifi_scan_get_ap_records(&(WiFiScanClass::_scanCount), (wifi_ap_record_t*)_scanResult) != ESP_OK) {
// WiFiScanClass::_scanCount = 0;
// }
// WiFiScanClass::_scanResult = new wifi_mgmr_scan_item_t[WiFiScanClass::_scanCount];
wifi_mgmr_scan_item_t _scanResult[50]; // max count 50
if(!WiFiScanClass::_scanResult || (wifi_mgmr_sta_scanlist_dump((wifi_mgmr_scan_item_t*)_scanResult, (WiFiScanClass::_scanCount)) < 0)) {
WiFiScanClass::_scanResult = 0;
}
}
WiFiScanClass::_scanStarted=0; //Reset after a scan is completed for normal behavior
WiFiGenericClass::setStatusBits(WIFI_SCAN_DONE_BIT);
WiFiGenericClass::clearStatusBits(WIFI_SCANNING_BIT);
}

String WiFiScanClass::SSID(uint8_t i)
{
wifi_mgmr_scan_item_t * it = reinterpret_cast<wifi_mgmr_scan_item_t*>(_getScanInfoByIndex(i));
if (!it) {
return String();
}
return String(reinterpret_cast<const char*>(it->ssid));
}

int32_t WiFiScanClass::RSSI(uint8_t i)
{
wifi_mgmr_scan_item_t * it = reinterpret_cast<wifi_mgmr_scan_item_t*>(_getScanInfoByIndex(i));
if(!it) {
return 0;
}
return it->rssi;
}

int32_t WiFiScanClass::channel(uint8_t i)
{
wifi_mgmr_scan_item_t * it = reinterpret_cast<wifi_mgmr_scan_item_t*>(_getScanInfoByIndex(i));
if(!it) {
return 0;
}
return it->channel;
}
9 changes: 9 additions & 0 deletions libraries/WiFi/src/WiFiScan.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,20 @@ Copyright (c) 2023 Bouffalo Lab Intelligent Technology (Nanjing) Co., Ltd. All r
#include "WiFiType.h"
#include "WiFiGeneric.h"

// extern "C" {
// #include "wifi_mgmr_ext.h"
// }

class WiFiScanClass
{
public:

int16_t scanNetworks(bool async = false,bool show_hidden = false, bool passive = false, uint32_t max_ms_per_chan = 300, uint8_t channel = 0, const char * ssid=nullptr, const uint8_t * bssid=nullptr);

String SSID(uint8_t networkItem);
int32_t RSSI(uint8_t networkItem);
int32_t channel(uint8_t networkItem);
static void * getScanInfoByIndex(int i) { return _getScanInfoByIndex(i); };

static void _scanDone();

Expand All @@ -31,7 +38,9 @@ class WiFiScanClass
static uint16_t _scanCount;

static void* _scanResult;
// static wifi_mgmr_scan_item_t _scanResult[50]; // max count 50

static void * _getScanInfoByIndex(int i);
};

#endif // BOUFFALOLAB_WIFISCAN_H__
Binary file modified variants/BL618G0/libs/libbl6_os_adapter.a
Binary file not shown.
Binary file modified variants/BL618G0/libs/libwifi6.a
Binary file not shown.

0 comments on commit a3e221b

Please sign in to comment.