/** * Digital Voice Modem - Host Software * GPLv2 Open Source. Use is subject to license terms. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * @package DVM / Host Software * */ // // Based on code from the MMDVMHost project. (https://github.com/g4klx/MMDVMHost) // Licensed under the GPLv2 License (https://opensource.org/licenses/GPL-2.0) // /* * Copyright (C) 2015,2016,2017 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #if !defined(__DMR_DATA__EMBEDDED_DATA_H__) #define __DMR_DATA__EMBEDDED_DATA_H__ #include "Defines.h" #include "dmr/DMRDefines.h" #include "dmr/lc/LC.h" namespace dmr { namespace data { // --------------------------------------------------------------------------- // Constants // --------------------------------------------------------------------------- enum LC_STATE { LCS_NONE, LCS_FIRST, LCS_SECOND, LCS_THIRD }; // --------------------------------------------------------------------------- // Class Declaration // Represents a DMR embedded data. // --------------------------------------------------------------------------- class HOST_SW_API EmbeddedData { public: /// Initializes a new instance of the EmbeddedData class. EmbeddedData(); /// Finalizes a instance of the EmbeddedData class. ~EmbeddedData(); /// Add LC data (which may consist of 4 blocks) to the data store. bool addData(const uint8_t* data, uint8_t lcss); /// Get LC data from the data store. uint8_t getData(uint8_t* data, uint8_t n) const; /// Sets link control data. void setLC(const lc::LC& lc); /// Gets link control data. std::unique_ptr getLC() const; /// Get raw embeded data buffer. bool getRawData(uint8_t* data) const; /// Helper to reset data values to defaults. void reset(); public: /// Flag indicating whether or not the embedded data is valid. __READONLY_PROPERTY_PLAIN(bool, valid, isValid); /// Full-link control opcode. __READONLY_PROPERTY(uint8_t, FLCO, FLCO); private: LC_STATE m_state; bool* m_data; bool* m_raw; /// Unpack and error check an embedded LC. void decodeEmbeddedData(); /// Pack and FEC for an embedded LC. void encodeEmbeddedData(); }; } // namespace data } // namespace dmr #endif // __DMR_DATA__EMBEDDED_DATA_H__