Improved client handling. Added udp server.

This commit is contained in:
jancoow
2016-05-20 10:55:49 +02:00
parent d92f26636a
commit 80b74614da
+47 -58
View File
@@ -4,21 +4,37 @@ extern "C" {
}
#include <Wire.h>
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#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);
}