Yo tampoco conozco el C ni ninguna de sus variantes, pero creo que te estas complicando la vida o no has entendiro bien eso del VEH1/VEHA, que por lo que acabo de leer es sólo para aviones de la IA.
Tenía por ahí algunos scripts en C++ creados partiendo de unos ejemplos encontrados para Arduino y no era tan complicado enviar y recibir mensajes UDP, tenía un par de ellos para funciones sencillas como subir y bajar el tren y que se encendieran los leds (comunicación bidireccional). Sólo era cuestión de enviar la cadena correctamente con sus dataref correspondientes.
Lo que tienes que mirar es la estructura DREF.
Al parecer haciendolo por DREF está el problema de que solo se puede modificar las coordenadas locales (He conseguido modifcarlo de por este modo) y la lat,lon habría que usar el SDK pero quiero poder hacer mi propia app por UDP. Existe otra función VHE1 y VHEA pero por más que lo intento no consigo que lo cambie.
Os dejo el código a ver si veis donde puede estar el fallo (también lo he publicado en xplane.org)
static void Main(string[] args)
{
TextReader tr = new StreamReader(@"C:\Proyectos\X-Plane10 Load\X-Plane10 Load\DataList.text");
UdpClient server = new UdpClient("127.0.0.1", 49000);
//X-Plane VEH1 Packet Structure
// 57 bytes
byte[] XPData = new byte[57];
byte[] pitchArray;
while (true)
{
// Header
pitchArray = Encoding.ASCII.GetBytes("VEH10");
int count = 0;
foreach (var Byte in pitchArray)
{
XPData[count] = Byte;
count++;
}
// Index
pitchArray = BitConverter.GetBytes(0);
foreach (var Byte in pitchArray)
{
XPData[count] = Byte;
count++;
}
// Latitude
pitchArray = BitConverter.GetBytes(32.07);
foreach (var Byte in pitchArray)
{
XPData[count] = Byte;
count++;
}
// Longitude
pitchArray = BitConverter.GetBytes(73.76);
foreach (var Byte in pitchArray)
{
XPData[count] = Byte;
count++;
}
// Altitude
pitchArray = BitConverter.GetBytes(2292.0);
foreach (var Byte in pitchArray)
{
XPData[count] = Byte;
count++;
}
// Pitch
Console.WriteLine(Convert.ToSingle(tr.ReadLine()));
pitchArray = BitConverter.GetBytes(0);
foreach (var Byte in pitchArray)
{
XPData[count] = Byte;
count++;
}
// Roll
Console.WriteLine(Convert.ToSingle(tr.ReadLine()));
pitchArray = BitConverter.GetBytes(0);
foreach (var Byte in pitchArray)
{
XPData[count] = Byte;
count++;
}
// True Heading
pitchArray = BitConverter.GetBytes(0);
foreach (var Byte in pitchArray)
{
XPData[count] = Byte;
count++;
}
// Gear 0/1
pitchArray = BitConverter.GetBytes(0);
foreach (var Byte in pitchArray)
{
XPData[count] = Byte;
count++;
}
// Flap 0/1
pitchArray = BitConverter.GetBytes(0);
foreach (var Byte in pitchArray)
{
XPData[count] = Byte;
count++;
}
// Vect 0/1
pitchArray = BitConverter.GetBytes(0);
foreach (var Byte in pitchArray)
{
XPData[count] = Byte;
count++;
}
server.Send(XPData, XPData.Length);
System.Threading.Thread.Sleep(2000);
//Console.ReadKey(true);
}
//Console.ReadKey(true); // Wait for keypress to close program
//server.Close();
} // End Main
LOG.txt
WE ARE SENDING 0.00 kilo-bytes per second (1,200 kilo-bytes per second is a low-end LAN)
WE ARE RECEIVING 0.03 kilo-bytes per second (1,200 kilo-bytes per second is a low-end LAN)
time= 8617.9, RECV label=VEH1 fr IP 127.0.0.1-50720. Length after packaging removal=52
time= 8618.0, RECV label=BECN fr IP 169.254.249.184-49001. Length after packaging removal=20