1 // 2 // Copyright 2020 Ettus Research, a National Instruments Brand 3 // 4 // SPDX-License-Identifier: GPL-3.0-or-later 5 // 6 7 #pragma once 8 9 #include <uhd/config.hpp> 10 #include <stdint.h> 11 #include <memory> 12 #include <vector> 13 #include <string> 14 15 namespace uhd { namespace usrp { namespace cal { 16 17 /*! Generic parent class for calibration data 18 * 19 * Derive any class that stores cal data which needs to be stored/retrieved from 20 * this parent class. 21 */ 22 class UHD_API container 23 { 24 public: 25 virtual ~container() = default; 26 27 //! Return the name of this calibration table 28 virtual std::string get_name() const = 0; 29 30 //! Return the device serial of this calibration table 31 virtual std::string get_serial() const = 0; 32 33 //! Timestamp of acquisition time 34 virtual uint64_t get_timestamp() const = 0; 35 36 //! Return a serialized version of this container 37 virtual std::vector<uint8_t> serialize() = 0; 38 39 //! Populate this class from the serialized data 40 virtual void deserialize(const std::vector<uint8_t>& data) = 0; 41 42 //! Generic factory for cal data from serialized data 43 // 44 // \tparam container_type The class type of cal data which should be 45 // generated from \p data 46 // \param data The serialized data to be turned into the cal class 47 template <typename container_type> make(const std::vector<uint8_t> & data)48 static std::shared_ptr<container_type> make(const std::vector<uint8_t>& data) 49 { 50 auto cal_data = container_type::make(); 51 cal_data->deserialize(data); 52 return cal_data; 53 } 54 }; 55 56 }}} // namespace uhd::usrp::cal 57