OpenBK7231T_App icon indicating copy to clipboard operation
OpenBK7231T_App copied to clipboard

Try finding best BSSID for a SSID

Open MaxineMuster opened this issue 6 months ago • 3 comments

A try to address https://github.com/openshwprojects/OpenBK7231T_App/issues/1684

NOT tested. If it works as expected, it should log the best AP for a SSID (on UART). If it works as expected, I coud try to set BSSID for the "wifi_sta_connect()"-call.

So if there is anybody able to test this PR? @divadiow ?

MaxineMuster avatar Jun 24 '25 13:06 MaxineMuster

Mutex instead of waiting cycle? OS_MutexCreate at function beginning OS_MutexLock before scan OS_MutexUnlock in scan callback OS_MutexLock before connect (with 500ms timeout?) OS_MutexDelete before return

NonPIayerCharacter avatar Jun 26 '25 11:06 NonPIayerCharacter

All the waiting is useless.

The scan is actually only done inside "wifi_sta_connect(&connect, &scan_cfg);" so I can't set BSSID before.

I'm actually trying to use a global pointer for connect.bssid and, if a BSSID is found, setting this pointer.

char connect_bssid=NULL;


void wifi_init_sta(const char* oob_ssid, const char* connect_key, obkStaticIP_t *ip)
{
    sta_ps_mode_t ps_mode = PM_WIFI_DEFAULT_PS_MODE;
	wifi_sta_connect_t connect = {
		.ssid    = oob_ssid,
		.pwd     = connect_key,
		.bssid   = connect_bssid,
		.psk_value = NULL,
	};

	 ......

//inside  scan callback:


	if (! strcmp(searchssid,ap_info->ssid)){
		LOG(LOG_LVL_INFO, "TEST AP: for SSID=%s found BSSID %02X:%02X:%02X:%02X:%02X:%02X with RSSI=%i  ... ", searchssid, mac[0], mac[1], mac[2], mac[3], mac[4], mac[5], ap_info->rssi);
		if (ap_info->rssi > actrssi) {
			for (int i=0; i<6; i++) t_bssid[i]=mac[i];
			LOG(LOG_LVL_INFO, "better than prior best RSSI=%i\r\n",actrssi);
			actrssi=ap_info->rssi;
			connect_bssid=t_bssid;	// found a value, so set .bssid value of connect
		} 
		else {
			LOG(LOG_LVL_INFO, "best RSSI=%i is still\r\n",actrssi);
		}

So I hope to be able to set SSID before AP is selected inside wifi library ...

I hope to be able to do some test later today

MaxineMuster avatar Jun 26 '25 13:06 MaxineMuster

I'm running out of ideas, the scan-callback is not always called/finished before the library tries joining

INSIDE wifi_init_sta, no static IP - using DHCP
[WLIB_I]LN882H WiFi Lib Ver: 1.3.0 [build time:Aug  7 2023 17:32:24][0x010300ff]
[WLIB_I]STA_Startup.
STA startup!
[WLIB_I]Disconnected.
Info:MAIN:Time 5, idle 0/s, free 91856, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 0/0 
[WLIB_E]HwEr:UKI:0
Info:MAIN:Registered for wifi changes
Info:MAIN:Connecting to SSID [XXXXXX]
psk value :
...
Info:MAIN:Main_OnWiFiStatusChange - WIFI_STA_CONNECTING - 1
[WLIB_I]Disconnected.
[WLIB_I]Status: Scan Successful. Initiating Join: 
[WLIB_I]SSID      = XXXXXX
[WLIB_I]BSSID     = XX:XX:XX:XX:XX:91
[WLIB_I]Channel   = 6
[WLIB_I]RSSI      = -63
[WLIB_I]StationID = 00:50:XX:XXf:XX:XX
[WLIB_I]Status: Initiating Authentication.
TEST AP: for SSID=XXXXXX found BSSID XX:XX:XX:XX:XX:9D with RSSI=-63  ... better than prior best RSSI=-5000
        CH= 8,RSSI= -63,BSSID:[XX:XX:XX:XX:XX:9D],SSID:"XXXXXX"
[WLIB_I]Status: Authentication Successful. Initiating Association.
TEST AP: for SSID=XXXXXX found BSSID XX:XX:XX:XX:XX:91 with RSSI=-64  ... best RSSI=-63 is still BSSID XX:XX:XX:XX:XX:9D - firstrun=1
        CH= 6,RSSI= -64,BSSID:[XX:XX:XX:XX:XX:91],SSID:"XXXXXX"
        CH= 8,RSSI= -64,BSSID:[XX:XX:XX:XX:XX:9D],SSID:""
[WLIB_I]Peer's HT-Capabilities:
[WLIB_I]ht_capable             = 1
[WLIB_I]ldpc_cod_cap           = 0
[WLIB_I]smps_mode              = 3
[WLIB_I]greenfield             = 0
[WLIB_I]short_gi_20            = 1

So this shows:

  • The "better" AP is found, but not used.
  • Joining might start before we can set BSSID.

Will continue next days...

MaxineMuster avatar Jun 26 '25 18:06 MaxineMuster