/*
  Codigo para el uso de libreria xplane a traves de wifi con la placa ESP8266.
  Para configurar wifi hay que indicar el identificador y pass en STASSID y STAPSK respectivamente.
*/
#include <ESP8266WiFi.h>

//Necesario para conectar con xplane
#include "Xplane.h"

#ifndef STASSID
#define STASSID "xxxxxxxxxx"
#define STAPSK  "yyyyyyyyyy"
#endif

const char* ssid     = STASSID;
const char* password = STAPSK;

//Necesario para conectar con xplane
XPLANE xplane;

void setup() {
  Serial.begin(115200);
  Serial.print("Connectando wifi");
  /* Explicitamente setear el ESP8266 que sea WiFi-client */
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  //Necesario para conectar con xplane
  xplane.infoXplane(WiFi.localIP());
  /*Necesario para conectar con xplane
    Crear una linea por cada dataref que se quiere recibir, (frecuencia -veces por segundo-, orden, dataref)
    Si se indica frecuencia 0, entondes xplane deja de enviar ese data ref.
    Si alguna suscripcion devuelve siempre valor 0, es posible que no se haya especificado bien el dataref, es sensible a las mayusculas.*/

  xplane.suscribeDataRef(1, 1, "sim/flightmodel/position/theta"); //float y degrees The pitch relative to the plane normal to the Y axis in degrees - OpenGL coordinates
  xplane.suscribeDataRef(1, 2, "sim/flightmodel/position/phi"); //float y degrees The roll of the aircraft in degrees - OpenGL coordinates
  xplane.suscribeDataRef(1, 3, "sim/flightmodel/position/psi"); //float y degrees The true heading of the aircraft in degrees from the Z axis - OpenGL coordinates
}

void loop() {
  //Necesario para conectar con xplane
  xplane.readDataRef();
}
//Funcion que sera llamada automaticamente por cada dato recibido, el orden equivale al orden que se ha indicado anteriormente en la suscripcion.
void DataRefOut(int orden, float valor) {
  String titulo;
  String valorEnCaracteres = String(valor, 6);
}