diff --git a/meson.build b/meson.build index 492acfda..3a770e9d 100644 --- a/meson.build +++ b/meson.build @@ -22,8 +22,7 @@ def += {'FONT_UBUNTU_REGULAR': ''} ## Firmware configuration parameters ## -# Send an M17 EOT frame at the end of transmission -#def += {'M17_ENABLE_EOT' : ''} +#def += {} ## diff --git a/openrtx/include/protocols/M17/M17FrameEncoder.hpp b/openrtx/include/protocols/M17/M17FrameEncoder.hpp index 5a655e81..c1cc7c68 100644 --- a/openrtx/include/protocols/M17/M17FrameEncoder.hpp +++ b/openrtx/include/protocols/M17/M17FrameEncoder.hpp @@ -84,6 +84,14 @@ public: */ uint16_t encodeStreamFrame(const payload_t& payload, frame_t& output, const bool isLast = false); + + /** + * Encode an End Of Transmission marker frame. + * + * @param output: destination buffer for the encoded data. + */ + void encodeEotFrame(frame_t& output); + private: M17ConvolutionalEncoder encoder; ///< Convolutional encoder. diff --git a/openrtx/include/protocols/M17/M17Modulator.hpp b/openrtx/include/protocols/M17/M17Modulator.hpp index 95d698c5..05b3a22a 100644 --- a/openrtx/include/protocols/M17/M17Modulator.hpp +++ b/openrtx/include/protocols/M17/M17Modulator.hpp @@ -80,8 +80,6 @@ public: /** * Terminate baseband transmission. - * If the macro M17_ENABLE_EOT is defined an EOT frame is sent before - * terminating the transmission. */ void stop(); diff --git a/openrtx/src/protocols/M17/M17FrameEncoder.cpp b/openrtx/src/protocols/M17/M17FrameEncoder.cpp index 74914a3e..b0ce2246 100644 --- a/openrtx/src/protocols/M17/M17FrameEncoder.cpp +++ b/openrtx/src/protocols/M17/M17FrameEncoder.cpp @@ -116,3 +116,12 @@ uint16_t M17FrameEncoder::encodeStreamFrame(const payload_t& payload, return streamFrame.getFrameNumber(); } + +void M17::M17FrameEncoder::encodeEotFrame(M17::frame_t& output) +{ + for(size_t i = 0; i < output.size(); i += 2) + { + output[i] = 0x55; + output[i + 1] = 0x5D; + } +} diff --git a/openrtx/src/protocols/M17/M17Modulator.cpp b/openrtx/src/protocols/M17/M17Modulator.cpp index 2515a9db..bc0e2ab7 100644 --- a/openrtx/src/protocols/M17/M17Modulator.cpp +++ b/openrtx/src/protocols/M17/M17Modulator.cpp @@ -130,27 +130,6 @@ void M17Modulator::stop() if(txRunning == false) return; - #ifdef M17_ENABLE_EOT - frame_t eotFrame; - // Fill EOT frame with 0x55, 0x5D as per M17 spec. - for(size_t i = 0; i < eotFrame.size(); i += 2) - { - eotFrame[i] = 0x55; - eotFrame[i + 1] = 0x5D; - } - - // Convert to symbols - auto it = symbols.begin(); - for(size_t i = 0; i < eotFrame.size(); i++) - { - auto sym = byteToSymbols(eotFrame[i]); - it = std::copy(sym.begin(), sym.end(), it); - } - - symbolsToBaseband(); - sendBaseband(); - #endif - outputStream_stop(outStream); outputStream_sync(outStream, false); txRunning = false; diff --git a/openrtx/src/rtx/OpMode_M17.cpp b/openrtx/src/rtx/OpMode_M17.cpp index ed18815d..0ecb4d8d 100644 --- a/openrtx/src/rtx/OpMode_M17.cpp +++ b/openrtx/src/rtx/OpMode_M17.cpp @@ -242,5 +242,9 @@ void OpMode_M17::txState(rtxStatus_t *const status) modulator.send(m17Frame); if(lastFrame) + { + encoder.encodeEotFrame(m17Frame); + modulator.send(m17Frame); modulator.stop(); + } }