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
main.cpp@0:a5d13af495af, 2011-12-21 (annotated)
- Committer:
- bapowell
- Date:
- Wed Dec 21 22:29:59 2011 +0000
- Revision:
- 0:a5d13af495af
Who changed what in which revision?
User | Revision | Line number | New 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", ðernet)) { |
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 | } |