stm32: network WLAN(AP_IF).isconnected() always returns True
The documentation for network.WLAN.isconnected() states:
In AP mode returns
Truewhen a station is connected. ReturnsFalseotherwise.
ref: http://docs.micropython.org/en/v1.13/library/network.WLAN.html#network.WLAN.isconnected
However, when I run the following code on a PYBD_SF6W:
import utime as time
import network
from urandom import randint
import machine
# Access Point
def make_ap():
print("Access Point...")
ap = network.WLAN(network.AP_IF)
ap.config(essid='MyPyboard:{:04d}'.format(randint(1, 10000)))
ap.active(True)
while not ap.active():
time.sleep(0.1)
print(" AP_IF: {!r}".format(ap.ifconfig()))
return ap
# ----- Mainline
print('machine.reset_cause()', machine.reset_cause())
ap = make_ap() # network.WLAN in AP_IF mode
while True:
time.sleep(1)
print('isconnected()', ap.isconnected())
I get the output:
MicroPython v1.13-274-g49dd9ba1a on 2021-01-19; PYBD-SF6W with STM32F767IIK
Type "help()" for more information.
>>>
paste mode; Ctrl-C to cancel, Ctrl-D to finish
=== # pasted above code
machine.reset_cause() 1
Access Point...
AP_IF: ('192.168.4.1', '255.255.255.0', '192.168.4.1', '0.0.0.0')
isconnected() True
isconnected() True
isconnected() True
DHCPS: client connected: MAC=66:bc:1c:1a:af:f1 IP=192.168.4.16
isconnected() True
isconnected() True
isconnected() True
What I would expect is that before the DHCP connection is made, before any stations are connected to the AP, isconnected() should return False.
extmod/network_cyw43: Fix isconnected() result on AP interface.
Summary
This function is documented to return True if any stations are connected to the AP. Without this fix it returns True whenever the driver has brought the AP interface up.
This work was funded through GitHub Sponsors.
Testing
This is one of two fixes which are required for RPI_PICO_W board to pass the wlan test added in https://github.com/micropython/micropython/pull/16225.