
#ifndef _net_h
#define _net_h

#include "RBPXPLRTERM_config.h"

#ifdef ENA_WIFI

#include <WiFi.h>

#include "time.h"

// extern void connectToWifi();

// state values for networkState
#define NST_UNDEF         0     // undefined, at startup
#define NST_NOTCONN       1     // not connected
#define NST_WAITSTASETUP  2     // waiting after STA setup
#define NST_WAITRECONNECT 3     // waitig before reconnect
#define NST_SCANNING      4     // scanning for available WiFi networks
#define NST_SCANNED       5     // network scan is complete
#define NST_CONNECTING    6     // connecting to an available WiFi network
#define NST_CONNECTED     7     // successfully connected to known WiFi network

const String nstNames[8] = { "undefined", "not connected", "waitSTAsetup", "waitReconnect", "scanning", "scanned", "connecting", "connected" };

// loop counts for time limits in state(s)
#define NWLC_MONITOR        1500    // monitor network connectivity every (1500*20=)30000 ms == 30 seconds
#define NWLC_MONCONNECT      250    // monitor network connection   every ( 250*20=) 5000 ms ==  5 seconds
#define NWLC_CHECKCONNECT     50    // check for being connected    every (  50*20=) 1000 ms ==  1 second
#define NWLC_WAITSTASETUP    100    // wait for STA setup           every ( 100*20=) 2000 ms ==  2 seconds
#define NWLC_WAITRECONNECT   250    // wait before reconnect        every ( 250*20=) 5000 ms ==  5 seconds
#define NWLC_MAXLCSCAN      1000    // maximum time for network scan is   (1000*20=)20000 ms == 20 seconds

// retry count threshhold values
#define NW_MAXCONNECTRETRYCOUNT 10    // retry 10 times to connect to a WiFi network

extern void connectToWifi();
extern void restartNetworkState();
extern void enterNetworkState(int8_t newstate);
extern void enterNetworkScanning();                        // network enter scanning state
extern void tryConnectNextNetwork();                       // try to connect to next network (if available)
extern void initNetworkConnect();                          // initiate connection to network <nwi>
extern void checkNetworkConnect();                         // check if connection successful
extern void monitorNetwork();                              // monitor the network, if enough time has passed
extern void initNet();                                     // setup network at restart
extern void netLoop(int para);                             // network loop, this is called every 20 milliseconds
extern String netLocalAddress();                           // return local IP address, if connected
extern String netLocalMACAddress();                        // return local MAC address

#else
#error WIFI not set, why?
#endif

#endif
