The xplane_io (X-Plane I/O) program is used to establish network communications, via UDP, with the X-Plane flight simulator running on a computer. The code consists of class libraries that abstract the lower-level UDP packet encoding and decoding details, according to the UDP protocol specifications in X-Plane version 9. Any X-Plane DATA packets can be sent and received, and any X-Plane DataRefs can be set by sending DREF packets to X-Plane.

Dependencies:   EthernetNetIf mbed ConfigFile

Committer:
bapowell
Date:
Wed Dec 21 22:29:59 2011 +0000
Revision:
0:a5d13af495af

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bapowell 0:a5d13af495af 1 #include "mbed.h"
bapowell 0:a5d13af495af 2 #include "EthernetNetIf.h"
bapowell 0:a5d13af495af 3 #include "Ranger.h"
bapowell 0:a5d13af495af 4 #include "XPlaneIO.h"
bapowell 0:a5d13af495af 5
bapowell 0:a5d13af495af 6 Serial pc(USBTX, USBRX);
bapowell 0:a5d13af495af 7
bapowell 0:a5d13af495af 8 int main() {
bapowell 0:a5d13af495af 9
bapowell 0:a5d13af495af 10 pc.baud(57600);
bapowell 0:a5d13af495af 11
bapowell 0:a5d13af495af 12 Ethernet ethernet;
bapowell 0:a5d13af495af 13
bapowell 0:a5d13af495af 14 XPlaneIO xpio;
bapowell 0:a5d13af495af 15 if (! xpio.setup("XPlaneIO.cfg", &ethernet)) {
bapowell 0:a5d13af495af 16 printf("Config/setup failed \n");
bapowell 0:a5d13af495af 17 return -1;
bapowell 0:a5d13af495af 18 }
bapowell 0:a5d13af495af 19
bapowell 0:a5d13af495af 20 // Check if user wants to perform interactive XPlaneIO diagnostics.
bapowell 0:a5d13af495af 21 xpio.diagnostics(pc);
bapowell 0:a5d13af495af 22
bapowell 0:a5d13af495af 23 AnalogOut throttleActual(p18);
bapowell 0:a5d13af495af 24 xpio.addDATAToReceive(26); // "throttle actual" in msg 26, data[0]
bapowell 0:a5d13af495af 25
bapowell 0:a5d13af495af 26 AnalogIn hatSwitch(p16);
bapowell 0:a5d13af495af 27 XPlaneUdpDREF pilotHeadHeading("sim/graphics/view/pilots_head_psi", xpio.reverseByteOrder());
bapowell 0:a5d13af495af 28 Ranger<float> hatSwitchInputRanger(4, 0.59, 0.68, 0.78, 0.92);
bapowell 0:a5d13af495af 29 float hatSwitchDegreesByRange[5] = {0, -90, 180, 90, 0};
bapowell 0:a5d13af495af 30
bapowell 0:a5d13af495af 31 Timer timerThrottle;
bapowell 0:a5d13af495af 32 timerThrottle.start();
bapowell 0:a5d13af495af 33
bapowell 0:a5d13af495af 34 Timer timerHatSwitch;
bapowell 0:a5d13af495af 35 timerHatSwitch.start();
bapowell 0:a5d13af495af 36
bapowell 0:a5d13af495af 37 Timer timerDebugPrint;
bapowell 0:a5d13af495af 38 if (xpio.debug()) {
bapowell 0:a5d13af495af 39 timerDebugPrint.start();
bapowell 0:a5d13af495af 40 }
bapowell 0:a5d13af495af 41
bapowell 0:a5d13af495af 42 xpio.startSendingUdp();
bapowell 0:a5d13af495af 43
bapowell 0:a5d13af495af 44 while (1) {
bapowell 0:a5d13af495af 45 Net::poll();
bapowell 0:a5d13af495af 46
bapowell 0:a5d13af495af 47 if (timerThrottle.read_ms() > 500) {
bapowell 0:a5d13af495af 48 timerThrottle.reset();
bapowell 0:a5d13af495af 49
bapowell 0:a5d13af495af 50 throttleActual.write(xpio.getReceiveDATAValue(26, 0)); // throttle actual
bapowell 0:a5d13af495af 51 }
bapowell 0:a5d13af495af 52
bapowell 0:a5d13af495af 53 if (timerHatSwitch.read_ms() > 250) {
bapowell 0:a5d13af495af 54 timerHatSwitch.reset();
bapowell 0:a5d13af495af 55
bapowell 0:a5d13af495af 56 int newRange = hatSwitchInputRanger.range(hatSwitch.read());
bapowell 0:a5d13af495af 57 if (hatSwitchInputRanger.rangeChanged()) {
bapowell 0:a5d13af495af 58 pilotHeadHeading.drefFloat(hatSwitchDegreesByRange[newRange]);
bapowell 0:a5d13af495af 59 xpio.sendDREF(pilotHeadHeading);
bapowell 0:a5d13af495af 60 }
bapowell 0:a5d13af495af 61 }
bapowell 0:a5d13af495af 62
bapowell 0:a5d13af495af 63 if (xpio.debug()) {
bapowell 0:a5d13af495af 64 if (timerDebugPrint.read() > 2) {
bapowell 0:a5d13af495af 65 timerDebugPrint.reset();
bapowell 0:a5d13af495af 66
bapowell 0:a5d13af495af 67 printf("Receive ");
bapowell 0:a5d13af495af 68 printXPlaneUdpDATAMap(stdout, xpio.recvDATAMap());
bapowell 0:a5d13af495af 69 printf("Send ");
bapowell 0:a5d13af495af 70 printXPlaneUdpDATAMap(stdout, xpio.sendDATAMap());
bapowell 0:a5d13af495af 71 }
bapowell 0:a5d13af495af 72 }
bapowell 0:a5d13af495af 73 }
bapowell 0:a5d13af495af 74 }