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
XPlaneIO/XPlaneAnalogIn.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 "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 | } |