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

Committer:
bapowell
Date:
2011-12-21
Revision:
0:a5d13af495af

File content as of revision 0:a5d13af495af:

#include "XPlaneUdpDREF.h"


XPlaneUdpDREF::XPlaneUdpDREF(char * drefName, bool reverseByteOrder) {
    
    _drefName = drefName;
    _reverseByteOrder = reverseByteOrder;
    
    _dataChanged = false;
    _drefFloat = DREF_VALUE_NA;
    _drefInt = DREF_VALUE_NA;
}


char * XPlaneUdpDREF::drefName() const {
    return _drefName;
}

float XPlaneUdpDREF::drefFloat() const {
    return _drefFloat;
}
    
int XPlaneUdpDREF::drefInt() const {
    return _drefInt;
}

void XPlaneUdpDREF::drefFloat(float floatVal) {
    _drefFloat = floatVal;
    _drefInt = DREF_VALUE_NA;
    setDataChanged();
}
    
void XPlaneUdpDREF::drefInt(int intVal) {
    _drefInt = intVal;
    _drefFloat = DREF_VALUE_NA;
    setDataChanged();
}

    /**
     * Starting at the given pointer location, populate bytes from the dataRef value and name.
     * Byte order will be reversed, according to the reverseBytes property.
     */

void XPlaneUdpDREF::populateDREFMessage(char * bytes) {

    if (_drefInt != DREF_VALUE_NA) {
        memcpy(bytes, &_drefInt, 4);
    }
    else {
        memcpy(bytes, &_drefFloat, 4);
    }
    
    if (_reverseByteOrder) {
        reverse4Bytes((char*) bytes);
    }
    
    strcpy(bytes + 4, _drefName);
}

bool XPlaneUdpDREF::isDataChanged() const {
    return _dataChanged;
}

void XPlaneUdpDREF::setDataChanged() {
    _dataChanged = true;
}

void XPlaneUdpDREF::resetDataChanged() {
    _dataChanged = false;
}

void XPlaneUdpDREF::toString(FILE * outputStream) {
    fprintf(outputStream, "DataRef: name=%s, intVal=%d, floatVal=%f, revBytes=%d",
            _drefName, _drefInt, _drefFloat, _reverseByteOrder);
}