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
XPlaneUdp/XPlaneUdpDREF.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 "XPlaneUdpDREF.h" |
bapowell | 0:a5d13af495af | 2 | |
bapowell | 0:a5d13af495af | 3 | |
bapowell | 0:a5d13af495af | 4 | XPlaneUdpDREF::XPlaneUdpDREF(char * drefName, bool reverseByteOrder) { |
bapowell | 0:a5d13af495af | 5 | |
bapowell | 0:a5d13af495af | 6 | _drefName = drefName; |
bapowell | 0:a5d13af495af | 7 | _reverseByteOrder = reverseByteOrder; |
bapowell | 0:a5d13af495af | 8 | |
bapowell | 0:a5d13af495af | 9 | _dataChanged = false; |
bapowell | 0:a5d13af495af | 10 | _drefFloat = DREF_VALUE_NA; |
bapowell | 0:a5d13af495af | 11 | _drefInt = DREF_VALUE_NA; |
bapowell | 0:a5d13af495af | 12 | } |
bapowell | 0:a5d13af495af | 13 | |
bapowell | 0:a5d13af495af | 14 | |
bapowell | 0:a5d13af495af | 15 | char * XPlaneUdpDREF::drefName() const { |
bapowell | 0:a5d13af495af | 16 | return _drefName; |
bapowell | 0:a5d13af495af | 17 | } |
bapowell | 0:a5d13af495af | 18 | |
bapowell | 0:a5d13af495af | 19 | float XPlaneUdpDREF::drefFloat() const { |
bapowell | 0:a5d13af495af | 20 | return _drefFloat; |
bapowell | 0:a5d13af495af | 21 | } |
bapowell | 0:a5d13af495af | 22 | |
bapowell | 0:a5d13af495af | 23 | int XPlaneUdpDREF::drefInt() const { |
bapowell | 0:a5d13af495af | 24 | return _drefInt; |
bapowell | 0:a5d13af495af | 25 | } |
bapowell | 0:a5d13af495af | 26 | |
bapowell | 0:a5d13af495af | 27 | void XPlaneUdpDREF::drefFloat(float floatVal) { |
bapowell | 0:a5d13af495af | 28 | _drefFloat = floatVal; |
bapowell | 0:a5d13af495af | 29 | _drefInt = DREF_VALUE_NA; |
bapowell | 0:a5d13af495af | 30 | setDataChanged(); |
bapowell | 0:a5d13af495af | 31 | } |
bapowell | 0:a5d13af495af | 32 | |
bapowell | 0:a5d13af495af | 33 | void XPlaneUdpDREF::drefInt(int intVal) { |
bapowell | 0:a5d13af495af | 34 | _drefInt = intVal; |
bapowell | 0:a5d13af495af | 35 | _drefFloat = DREF_VALUE_NA; |
bapowell | 0:a5d13af495af | 36 | setDataChanged(); |
bapowell | 0:a5d13af495af | 37 | } |
bapowell | 0:a5d13af495af | 38 | |
bapowell | 0:a5d13af495af | 39 | /** |
bapowell | 0:a5d13af495af | 40 | * Starting at the given pointer location, populate bytes from the dataRef value and name. |
bapowell | 0:a5d13af495af | 41 | * Byte order will be reversed, according to the reverseBytes property. |
bapowell | 0:a5d13af495af | 42 | */ |
bapowell | 0:a5d13af495af | 43 | |
bapowell | 0:a5d13af495af | 44 | void XPlaneUdpDREF::populateDREFMessage(char * bytes) { |
bapowell | 0:a5d13af495af | 45 | |
bapowell | 0:a5d13af495af | 46 | if (_drefInt != DREF_VALUE_NA) { |
bapowell | 0:a5d13af495af | 47 | memcpy(bytes, &_drefInt, 4); |
bapowell | 0:a5d13af495af | 48 | } |
bapowell | 0:a5d13af495af | 49 | else { |
bapowell | 0:a5d13af495af | 50 | memcpy(bytes, &_drefFloat, 4); |
bapowell | 0:a5d13af495af | 51 | } |
bapowell | 0:a5d13af495af | 52 | |
bapowell | 0:a5d13af495af | 53 | if (_reverseByteOrder) { |
bapowell | 0:a5d13af495af | 54 | reverse4Bytes((char*) bytes); |
bapowell | 0:a5d13af495af | 55 | } |
bapowell | 0:a5d13af495af | 56 | |
bapowell | 0:a5d13af495af | 57 | strcpy(bytes + 4, _drefName); |
bapowell | 0:a5d13af495af | 58 | } |
bapowell | 0:a5d13af495af | 59 | |
bapowell | 0:a5d13af495af | 60 | bool XPlaneUdpDREF::isDataChanged() const { |
bapowell | 0:a5d13af495af | 61 | return _dataChanged; |
bapowell | 0:a5d13af495af | 62 | } |
bapowell | 0:a5d13af495af | 63 | |
bapowell | 0:a5d13af495af | 64 | void XPlaneUdpDREF::setDataChanged() { |
bapowell | 0:a5d13af495af | 65 | _dataChanged = true; |
bapowell | 0:a5d13af495af | 66 | } |
bapowell | 0:a5d13af495af | 67 | |
bapowell | 0:a5d13af495af | 68 | void XPlaneUdpDREF::resetDataChanged() { |
bapowell | 0:a5d13af495af | 69 | _dataChanged = false; |
bapowell | 0:a5d13af495af | 70 | } |
bapowell | 0:a5d13af495af | 71 | |
bapowell | 0:a5d13af495af | 72 | void XPlaneUdpDREF::toString(FILE * outputStream) { |
bapowell | 0:a5d13af495af | 73 | fprintf(outputStream, "DataRef: name=%s, intVal=%d, floatVal=%f, revBytes=%d", |
bapowell | 0:a5d13af495af | 74 | _drefName, _drefInt, _drefFloat, _reverseByteOrder); |
bapowell | 0:a5d13af495af | 75 | } |