//Librairies nécessaires au serveur TCP
#include "WiFi.h"
#include "AsyncUDP.h"
#include "config.h"


//Librairies et paramètres de base nécessaires à l'écran
#include <TFT_eSPI.h>
#include <SPI.h>
#include "esp_adc_cal.h"

#ifndef TFT_DISPOFF
  #define TFT_DISPOFF 0x28
#endif

#ifndef TFT_SLPIN
  #define TFT_SLPIN   0x10
#endif

#define TFT_MOSI  19
#define TFT_SCLK  18
#define TFT_CS     5
#define TFT_DC    16
#define TFT_RST   23
#define TFT_BL     4  // Display backlight control pin

TFT_eSPI tft = TFT_eSPI(135, 240); // Invoke custom library

AsyncUDP udp;

//Initialisation
void setup()
{
  //Initialisation connexion série (pour les logs)
  Serial.begin(115200);
  Serial.println("\n\nHello World");
  
  //Initilisation écran
  tft_init();

  //Connection WiFi à un routeur
  WiFi.mode(WIFI_STA);
  WiFi.begin(ROUTEUR_SSID, ROUTEUR_PASSWORD);
  if (WiFi.waitForConnectResult() != WL_CONNECTED)
  {
    tft_echec_connexion();
    while(1)
    {
      Serial.println("WiFi Failed");
      delay(1000);
    }
  }
  Serial.printf("Connected to %s, IP %s \n", ROUTEUR_SSID, WiFi.localIP().toString().c_str());
  tft_show_ip(WiFi.localIP());

  //Lancement du serveur
  if(udp.listen(SERVER_HOST_PORT)) //Si le serveur UDP peut écouter sur le port "SERVER_HOST_PORT"
  {
    udp_listen(); //Démarrer l'écoute du serveur
  }
}


//Loop, peut être laissé vide
void loop()
{
  delay(1000);
  udp.broadcast("Anyone here?");
}
