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