diff --git a/ControllerBaseStation/ControllerBaseStation.ino b/ControllerBaseStation/ControllerBaseStation.ino index 037d0bf..60bbe5f 100644 --- a/ControllerBaseStation/ControllerBaseStation.ino +++ b/ControllerBaseStation/ControllerBaseStation.ino @@ -4,21 +4,37 @@ extern "C" { } #include #include +#include #define MAX_CLIENTS 4 -#define SSIDVISIBLE 0 -#define SSIDHIDDEN 1 String WifiSSIDPrefix = "CrystalPoint"; char WifiPassword[10]; char WifiSSID[17]; -uint8_t NumberOfConnectedControllers = 0; - ip_addr ConnectionList[MAX_CLIENTS] = {0}; +//UDP server (receiving) setup +unsigned int udpPort = 2730; +byte packetBuffer[512]; //udp package buffer +WiFiUDP Udp; + +void WiFiEvent(WiFiEvent_t event) { + switch(event) { + case WIFI_EVENT_SOFTAPMODE_STACONNECTED: + Serial.println("NEW CONNECTED"); + break; + case WIFI_EVENT_SOFTAPMODE_STADISCONNECTED: + Serial.println("DISCONNECTED"); + break; + } +} + void setup(void){ Serial.begin(115200); + Serial.println(); + + WiFi.onEvent(WiFiEvent); //LED pinMode(4,OUTPUT); @@ -26,6 +42,8 @@ void setup(void){ //BUTTON pinMode(5,INPUT); + + Udp.begin(udpPort); delay(100); setupWifi(); @@ -33,59 +51,29 @@ void setup(void){ int SSIDVisibleTimeout = 0; char SSIDVisible = 0; -int NumCurrentConnections = 0; - -char ChangeInConnections = 0; -int ChangedConnectionsTimeout = 0; -char DeleteOrAdd = 0; void loop(void){ + int noBytes = Udp.parsePacket(); + if ( noBytes ) { + Serial.print(millis() / 1000); + Serial.print(":Packet of "); + Serial.print(noBytes); + Serial.print(" received from "); + Serial.print(Udp.remoteIP()); + Serial.print(":"); + Serial.print(Udp.remotePort()); + Serial.print(" - "); + // We've received a packet, read the data from it + Udp.read(packetBuffer,noBytes); // read the packet into the buffer - NumCurrentConnections = WiFi.softAPgetStationNum(); - - if(NumberOfConnectedControllers != NumCurrentConnections){ - Serial.println("Connections differ"); - ChangeInConnections = 1; - DeleteOrAdd = NumberOfConnectedControllers < NumCurrentConnections ? 1 : 0; - NumberOfConnectedControllers = NumCurrentConnections; - } - - if(ChangeInConnections == 1) - { - ChangedConnectionsTimeout++; - } - - if(ChangeInConnections == 1 && ChangedConnectionsTimeout % 10 == 0) - { - int ActualConnections = 0; - struct station_info *stat_info; - stat_info = wifi_softap_get_station_info(); - while (stat_info != NULL) { - ActualConnections++; - stat_info = STAILQ_NEXT(stat_info, next); + // display the packet contents in HEX + for (int i=1;i<=noBytes;i++){ + Serial.printf("%c", packetBuffer[i-1]); } - - if(ActualConnections == NumberOfConnectedControllers) - { - Serial.println("Connections match"); - ChangeInConnections = 0; - ChangedConnectionsTimeout = 0; - RepopulateConnectionList(DeleteOrAdd); - } - } - - if(ChangeInConnections == 1 && ChangedConnectionsTimeout > 1000) - { - ChangeInConnections = 0; - ChangedConnectionsTimeout = 0; - } + Serial.println(); + } - if(SSIDVisible == 1) - { - SSIDVisibleTimeout++; - } - - if(SSIDVisible == 1 && SSIDVisibleTimeout > 2000) + if(SSIDVisible == 1 && (SSIDVisibleTimeout + 30000) < millis()) { SSIDVisibleTimeout = 0; ToggleWifiVisibility(0); @@ -94,22 +82,21 @@ void loop(void){ if(digitalRead(5) == 1 && SSIDVisible == 0) { Serial.println("Button Pressed"); + SSIDVisibleTimeout = millis(); ToggleWifiVisibility(1); } - - delay(100); } void ToggleWifiVisibility(char v) { if(v == 1){ SSIDVisible = 1; - WiFi.softAP(WifiSSID, WifiPassword, 6, SSIDVISIBLE); + WiFi.softAP(WifiSSID, WifiPassword, 6, 0); digitalWrite(4, HIGH); Serial.println("Wifi Visible"); }else if(v == 0){ SSIDVisible = 0; - WiFi.softAP(WifiSSID, WifiPassword, 6, SSIDHIDDEN); + WiFi.softAP(WifiSSID, WifiPassword, 6, 1); digitalWrite(4, LOW); Serial.println("Wifi Hidden"); } @@ -136,7 +123,8 @@ void RepopulateConnectionList(char n) //str += IPAddress((stat_info->ip).addr).toString(); stat_info = STAILQ_NEXT(stat_info, next); } - if(missingIP != 255 && ConnectionList[missingIP].addr != 0){ + + if(missingIP != 255 && ConnectionList[missingIP].addr != 0){ //Ip NOT found; This controller is gone. ConnectionList[missingIP].addr = 0; Serial.printf("Controller %d disconnected \n\r", missingIP); @@ -181,7 +169,7 @@ void setupWifi(void){ generateWiFiSSID(); generateWiFiPassword(); - WiFi.softAP(WifiSSID, WifiPassword, 6, SSIDVISIBLE); + WiFi.softAP(WifiSSID, WifiPassword, 6, 1); } void generateWiFiSSID() @@ -213,3 +201,4 @@ void generateWiFiPassword() Serial.print("Wifi password: "); Serial.println(WifiPassword); } +