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 "Scaler.h"
bapowell 0:a5d13af495af 2 #include "XPlaneAnalogIn.h"
bapowell 0:a5d13af495af 3
bapowell 0:a5d13af495af 4 XPlaneAnalogIn::XPlaneAnalogIn(PinName pin, Scaler<float> scale1, Scaler<float> scale2, int msgIdx, int msgFloatIdx) :
bapowell 0:a5d13af495af 5 _pin(pin), _scale1(scale1), _scale2(scale2), _xplaneDATAMsgIdx(msgIdx), _xplaneDATAMsgFloatIdx(msgFloatIdx),
bapowell 0:a5d13af495af 6 _ain(pin)
bapowell 0:a5d13af495af 7 {
bapowell 0:a5d13af495af 8 _lastUnscaledRead = -1.0;
bapowell 0:a5d13af495af 9 _lastScaledRead = -999.0;
bapowell 0:a5d13af495af 10 _lastScaleRange = -1;
bapowell 0:a5d13af495af 11 }
bapowell 0:a5d13af495af 12
bapowell 0:a5d13af495af 13 float XPlaneAnalogIn::read_unscaled() {
bapowell 0:a5d13af495af 14 _lastUnscaledRead = _ain.read();
bapowell 0:a5d13af495af 15 return _lastUnscaledRead;
bapowell 0:a5d13af495af 16 }
bapowell 0:a5d13af495af 17
bapowell 0:a5d13af495af 18 float XPlaneAnalogIn::read_scaled(int & range, bool & scaledOutputNoChange) {
bapowell 0:a5d13af495af 19 float scaledOutput;
bapowell 0:a5d13af495af 20 float rawInput = read_unscaled();
bapowell 0:a5d13af495af 21
bapowell 0:a5d13af495af 22 if (rawInput > _scale1.inputTo() && rawInput < _scale2.inputFrom()) {
bapowell 0:a5d13af495af 23 range = 0;
bapowell 0:a5d13af495af 24 scaledOutput = (_scale1.outputTo() + _scale2.outputFrom()) / 2.0f;
bapowell 0:a5d13af495af 25 }
bapowell 0:a5d13af495af 26 else if (rawInput <= _scale1.inputTo()) {
bapowell 0:a5d13af495af 27 if (rawInput < _scale1.inputFrom()) {
bapowell 0:a5d13af495af 28 range = 3;
bapowell 0:a5d13af495af 29 scaledOutput = _scale1.outputFrom();
bapowell 0:a5d13af495af 30 }
bapowell 0:a5d13af495af 31 else {
bapowell 0:a5d13af495af 32 range = 1;
bapowell 0:a5d13af495af 33 scaledOutput = _scale1.scale(rawInput);
bapowell 0:a5d13af495af 34 }
bapowell 0:a5d13af495af 35 }
bapowell 0:a5d13af495af 36 else { // rawInput >= _scale2.inputFrom
bapowell 0:a5d13af495af 37 if (rawInput > _scale2.inputTo()) {
bapowell 0:a5d13af495af 38 range = 4;
bapowell 0:a5d13af495af 39 scaledOutput = _scale2.outputTo();
bapowell 0:a5d13af495af 40 }
bapowell 0:a5d13af495af 41 else {
bapowell 0:a5d13af495af 42 range = 2;
bapowell 0:a5d13af495af 43 scaledOutput = _scale2.scale(rawInput);
bapowell 0:a5d13af495af 44 }
bapowell 0:a5d13af495af 45 }
bapowell 0:a5d13af495af 46
bapowell 0:a5d13af495af 47 scaledOutputNoChange = ((scaledOutput == _lastScaledRead) ||
bapowell 0:a5d13af495af 48 (range == _lastScaleRange && (range == 0 || range == 3 || range == 4)));
bapowell 0:a5d13af495af 49
bapowell 0:a5d13af495af 50 _lastScaledRead = scaledOutput;
bapowell 0:a5d13af495af 51 _lastScaleRange = range;
bapowell 0:a5d13af495af 52
bapowell 0:a5d13af495af 53 return scaledOutput;
bapowell 0:a5d13af495af 54 }
bapowell 0:a5d13af495af 55
bapowell 0:a5d13af495af 56 /*
bapowell 0:a5d13af495af 57 void XPlaneAnalogIn::scale1(Scaler<float> scale1) {
bapowell 0:a5d13af495af 58 _scale1 = scale1;
bapowell 0:a5d13af495af 59 }
bapowell 0:a5d13af495af 60
bapowell 0:a5d13af495af 61 void XPlaneAnalogIn::scale2(Scaler<float> scale2) {
bapowell 0:a5d13af495af 62 _scale2 = scale2;
bapowell 0:a5d13af495af 63 }
bapowell 0:a5d13af495af 64
bapowell 0:a5d13af495af 65 void XPlaneAnalogIn::xplaneDATAMsgIdx(int xplaneDATAMsgIdx) {
bapowell 0:a5d13af495af 66 _xplaneDATAMsgIdx = xplaneDATAMsgIdx;
bapowell 0:a5d13af495af 67 }
bapowell 0:a5d13af495af 68
bapowell 0:a5d13af495af 69 void XPlaneAnalogIn::xplaneDATAMsgFloatIdx(int xplaneDATAMsgFloatIdx) {
bapowell 0:a5d13af495af 70 _xplaneDATAMsgFloatIdx = xplaneDATAMsgFloatIdx;
bapowell 0:a5d13af495af 71 }
bapowell 0:a5d13af495af 72 */
bapowell 0:a5d13af495af 73
bapowell 0:a5d13af495af 74 int XPlaneAnalogIn::xplaneDATAMsgIdx() {
bapowell 0:a5d13af495af 75 return _xplaneDATAMsgIdx;
bapowell 0:a5d13af495af 76 }
bapowell 0:a5d13af495af 77
bapowell 0:a5d13af495af 78 int XPlaneAnalogIn::xplaneDATAMsgFloatIdx() {
bapowell 0:a5d13af495af 79 return _xplaneDATAMsgFloatIdx;
bapowell 0:a5d13af495af 80 }
bapowell 0:a5d13af495af 81
bapowell 0:a5d13af495af 82 void XPlaneAnalogIn::toString(FILE * outputStream) {
bapowell 0:a5d13af495af 83 fprintf(outputStream, "lastRawRead=%f lastScaledRead=%f lastScaleRange=%d",
bapowell 0:a5d13af495af 84 _lastUnscaledRead, _lastScaledRead, _lastScaleRange);
bapowell 0:a5d13af495af 85 }