Skip to content

Commit 9d620b7

Browse files
committed
Add new WiFi.APClientMacAddress API, BSSID returns local MAC in AP mode
1 parent 6450ecd commit 9d620b7

File tree

4 files changed

+32
-10
lines changed

4 files changed

+32
-10
lines changed

examples/AP_SimpleWebServer/AP_SimpleWebServer.ino

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ void loop() {
8080

8181
// a device has connected to the AP
8282
Serial.print("Device connected to AP, MAC address: ");
83-
WiFi.BSSID(remoteMac);
83+
WiFi.APClientMacAddress(remoteMac);
8484
Serial.print(remoteMac[5], HEX);
8585
Serial.print(":");
8686
Serial.print(remoteMac[4], HEX);

keywords.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ subnetMask KEYWORD2
3434
gatewayIP KEYWORD2
3535
SSID KEYWORD2
3636
BSSID KEYWORD2
37+
APClientMacAddress KEYWORD2
3738
RSSI KEYWORD2
3839
encryptionType KEYWORD2
3940
getResult KEYWORD2

src/WiFi.cpp

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -150,12 +150,12 @@ static void wifi_cb(uint8_t u8MsgType, void *pvMsg)
150150
{
151151
tstrM2MConnInfo *pstrConnInfo = (tstrM2MConnInfo*)pvMsg;
152152

153-
if (WiFi._bssid) {
153+
if (WiFi._remoteMacAddress) {
154154
// reverse copy the remote MAC
155155
for(int i = 0; i < 6; i++) {
156-
WiFi._bssid[i] = pstrConnInfo->au8MACAddress[5-i];
156+
WiFi._remoteMacAddress[i] = pstrConnInfo->au8MACAddress[5-i];
157157
}
158-
WiFi._bssid = 0;
158+
WiFi._remoteMacAddress = 0;
159159
}
160160
}
161161
break;
@@ -602,19 +602,38 @@ char* WiFiClass::SSID()
602602

603603
uint8_t* WiFiClass::BSSID(uint8_t* bssid)
604604
{
605-
_bssid = bssid;
606-
memset(bssid, 0, 6);
605+
if (_mode == WL_AP_MODE) {
606+
return macAddress(bssid);
607+
} else {
608+
return remoteMacAddress(bssid);
609+
}
610+
}
611+
612+
uint8_t* WiFiClass::APClientMacAddress(uint8_t* mac)
613+
{
614+
if (_mode == WL_AP_MODE) {
615+
return remoteMacAddress(mac);
616+
} else {
617+
memset(mac, 0, 6);
618+
return mac;
619+
}
620+
}
621+
622+
uint8_t* WiFiClass::remoteMacAddress(uint8_t* remoteMacAddress)
623+
{
624+
_remoteMacAddress = remoteMacAddress;
625+
memset(remoteMacAddress, 0, 6);
607626

608627
m2m_wifi_get_connection_info();
609628

610629
// Wait for connection or timeout:
611630
unsigned long start = millis();
612-
while (_bssid != 0 && millis() - start < 1000) {
631+
while (_remoteMacAddress != 0 && millis() - start < 1000) {
613632
m2m_wifi_handle_events(NULL);
614633
}
615634

616-
_bssid = 0;
617-
return bssid;
635+
_remoteMacAddress = 0;
636+
return remoteMacAddress;
618637
}
619638

620639
int32_t WiFiClass::RSSI()

src/WiFi101.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ class WiFiClass
8080
uint32_t _gateway;
8181
int _dhcp;
8282
uint32_t _resolve;
83-
byte *_bssid;
83+
byte *_remoteMacAddress;
8484
wl_mode_t _mode;
8585
wl_status_t _status;
8686
char _scan_ssid[M2M_MAX_SSID_LEN];
@@ -142,6 +142,7 @@ class WiFiClass
142142
int32_t RSSI();
143143
uint8_t encryptionType();
144144
uint8_t* BSSID(uint8_t* bssid);
145+
uint8_t* APClientMacAddress(uint8_t* mac);
145146
int8_t scanNetworks();
146147
char* SSID(uint8_t pos);
147148
int32_t RSSI(uint8_t pos);
@@ -168,6 +169,7 @@ class WiFiClass
168169

169170
uint8_t startConnect(const char *ssid, uint8_t u8SecType, const void *pvAuthInfo);
170171
uint8_t startAP(const char *ssid, uint8_t u8SecType, const void *pvAuthInfo, uint8_t channel);
172+
uint8_t* remoteMacAddress(uint8_t* remoteMacAddress);
171173
};
172174

173175
extern WiFiClass WiFi;

0 commit comments

Comments
 (0)