Skip to content

Commit

Permalink
Merge pull request #97 from sandeepmistry/bssid-remote-mac
Browse files Browse the repository at this point in the history
Use m2m_wifi_get_connection_info to get BSSID/remote MAC
  • Loading branch information
sandeepmistry committed Sep 16, 2016
2 parents 3b4e5a9 + 9d620b7 commit 89257a1
Show file tree
Hide file tree
Showing 4 changed files with 66 additions and 18 deletions.
19 changes: 17 additions & 2 deletions examples/AP_SimpleWebServer/AP_SimpleWebServer.ino
Original file line number Diff line number Diff line change
Expand Up @@ -76,12 +76,26 @@ void loop() {
status = WiFi.status();

if (status == WL_AP_CONNECTED) {
byte remoteMac[6];

// a device has connected to the AP
Serial.println("Device connected to AP");
Serial.print("Device connected to AP, MAC address: ");
WiFi.APClientMacAddress(remoteMac);
Serial.print(remoteMac[5], HEX);
Serial.print(":");
Serial.print(remoteMac[4], HEX);
Serial.print(":");
Serial.print(remoteMac[3], HEX);
Serial.print(":");
Serial.print(remoteMac[2], HEX);
Serial.print(":");
Serial.print(remoteMac[1], HEX);
Serial.print(":");
Serial.println(remoteMac[0], HEX);
} else {
// a device has disconnected from the AP, and we are back in listening mode
Serial.println("Device disconnected from AP");
}
}
}

WiFiClient client = server.available(); // listen for incoming clients
Expand Down Expand Up @@ -154,4 +168,5 @@ void printWifiStatus() {
// print where to go in a browser:
Serial.print("To see this page in action, open a browser to http://");
Serial.println(ip);

}
1 change: 1 addition & 0 deletions keywords.txt
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ subnetMask KEYWORD2
gatewayIP KEYWORD2
SSID KEYWORD2
BSSID KEYWORD2
APClientMacAddress KEYWORD2
RSSI KEYWORD2
encryptionType KEYWORD2
getResult KEYWORD2
Expand Down
60 changes: 45 additions & 15 deletions src/WiFi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -140,15 +140,26 @@ static void wifi_cb(uint8_t u8MsgType, void *pvMsg)
if (scan_ssid_len) {
memcpy(WiFi._scan_ssid, (const char *)pstrScanResult->au8SSID, scan_ssid_len);
}
if (WiFi._bssid) {
memcpy(WiFi._bssid, (const char *)pstrScanResult->au8BSSID, 6);
}
WiFi._resolve = pstrScanResult->s8rssi;
WiFi._scan_auth = pstrScanResult->u8AuthType;
WiFi._status = WL_SCAN_COMPLETED;
}
break;

case M2M_WIFI_RESP_CONN_INFO:
{
tstrM2MConnInfo *pstrConnInfo = (tstrM2MConnInfo*)pvMsg;

if (WiFi._remoteMacAddress) {
// reverse copy the remote MAC
for(int i = 0; i < 6; i++) {
WiFi._remoteMacAddress[i] = pstrConnInfo->au8MACAddress[5-i];
}
WiFi._remoteMacAddress = 0;
}
}
break;

default:
break;
}
Expand Down Expand Up @@ -605,19 +616,38 @@ char* WiFiClass::SSID()

uint8_t* WiFiClass::BSSID(uint8_t* bssid)
{
int8_t net = scanNetworks();

_bssid = bssid;
memset(bssid, 0, 6);
for (uint8_t i = 0; i < net; ++i) {
SSID(i);
if (strcmp(_scan_ssid, _ssid) == 0) {
break;
}
if (_mode == WL_AP_MODE) {
return macAddress(bssid);
} else {
return remoteMacAddress(bssid);
}

_bssid = 0;
return bssid;
}

uint8_t* WiFiClass::APClientMacAddress(uint8_t* mac)
{
if (_mode == WL_AP_MODE) {
return remoteMacAddress(mac);
} else {
memset(mac, 0, 6);
return mac;
}
}

uint8_t* WiFiClass::remoteMacAddress(uint8_t* remoteMacAddress)
{
_remoteMacAddress = remoteMacAddress;
memset(remoteMacAddress, 0, 6);

m2m_wifi_get_connection_info();

// Wait for connection or timeout:
unsigned long start = millis();
while (_remoteMacAddress != 0 && millis() - start < 1000) {
m2m_wifi_handle_events(NULL);
}

_remoteMacAddress = 0;
return remoteMacAddress;
}

int32_t WiFiClass::RSSI()
Expand Down
4 changes: 3 additions & 1 deletion src/WiFi101.h
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ class WiFiClass
uint32_t _gateway;
int _dhcp;
uint32_t _resolve;
byte *_bssid;
byte *_remoteMacAddress;
wl_mode_t _mode;
wl_status_t _status;
char _scan_ssid[M2M_MAX_SSID_LEN];
Expand Down Expand Up @@ -141,6 +141,7 @@ class WiFiClass
int32_t RSSI();
uint8_t encryptionType();
uint8_t* BSSID(uint8_t* bssid);
uint8_t* APClientMacAddress(uint8_t* mac);
int8_t scanNetworks();
char* SSID(uint8_t pos);
int32_t RSSI(uint8_t pos);
Expand All @@ -167,6 +168,7 @@ class WiFiClass

uint8_t startConnect(const char *ssid, uint8_t u8SecType, const void *pvAuthInfo);
uint8_t startAP(const char *ssid, uint8_t u8SecType, const void *pvAuthInfo, uint8_t channel);
uint8_t* remoteMacAddress(uint8_t* remoteMacAddress);
};

extern WiFiClass WiFi;
Expand Down

0 comments on commit 89257a1

Please sign in to comment.