]> sigrok.org Git - libsigrok.git/blobdiff - bindings/cxx/classes.cpp
output/csv: use intermediate time_t var, silence compiler warning
[libsigrok.git] / bindings / cxx / classes.cpp
index 5bc5dc2fed78f594d0605f4a58bdd644ccfb0239..d5477847653f85acb6f637b48de4a3ce677a9659 100644 (file)
@@ -32,6 +32,8 @@
 namespace sigrok
 {
 
+using namespace std;
+
 /** Helper function to translate C errors to C++ exceptions. */
 static void check(int result)
 {
@@ -285,12 +287,12 @@ shared_ptr<UserDevice> Context::create_user_device(
                default_delete<UserDevice>{}};
 }
 
-shared_ptr<Packet> Context::create_header_packet(Glib::TimeVal start_time)
+shared_ptr<Packet> Context::create_header_packet(Glib::DateTime start_time)
 {
        auto header = g_new(struct sr_datafeed_header, 1);
        header->feed_version = 1;
-       header->starttime.tv_sec = start_time.tv_sec;
-       header->starttime.tv_usec = start_time.tv_usec;
+       header->starttime.tv_sec = start_time.to_unix();
+       header->starttime.tv_usec = start_time.get_microsecond();
        auto packet = g_new(struct sr_datafeed_packet, 1);
        packet->type = SR_DF_HEADER;
        packet->payload = header;
@@ -377,6 +379,14 @@ shared_ptr<Packet> Context::create_analog_packet(
        return shared_ptr<Packet>{new Packet{nullptr, packet}, default_delete<Packet>{}};
 }
 
+shared_ptr<Packet> Context::create_end_packet()
+{
+       auto packet = g_new(struct sr_datafeed_packet, 1);
+       packet->type = SR_DF_END;
+       return shared_ptr<Packet>{new Packet{nullptr, packet},
+               default_delete<Packet>{}};
+}
+
 shared_ptr<Session> Context::load_session(string filename)
 {
        return shared_ptr<Session>{
@@ -936,6 +946,7 @@ Session::Session(shared_ptr<Context> context, string filename) :
                _owned_devices.emplace(sdi, move(device));
        }
        _context->_session = this;
+       g_slist_free(dev_list);
 }
 
 Session::~Session()
@@ -970,6 +981,7 @@ vector<shared_ptr<Device>> Session::devices()
                auto *const sdi = static_cast<struct sr_dev_inst *>(dev->data);
                result.push_back(get_device(sdi));
        }
+       g_slist_free(dev_list);
        return result;
 }
 
@@ -1142,11 +1154,10 @@ int Header::feed_version() const
        return _structure->feed_version;
 }
 
-Glib::TimeVal Header::start_time() const
+Glib::DateTime Header::start_time() const
 {
-       return Glib::TimeVal(
-               _structure->starttime.tv_sec,
-               _structure->starttime.tv_usec);
+       Glib::DateTime time = Glib::DateTime::create_now_utc(_structure->starttime.tv_sec);
+       return time.add_seconds(_structure->starttime.tv_usec / 1.0e6);
 }
 
 Meta::Meta(const struct sr_datafeed_meta *structure) :
@@ -1554,6 +1565,8 @@ Glib::VariantBase Option::parse_string(string value)
                dt = SR_T_FLOAT;
        } else if (g_variant_is_of_type(tmpl, G_VARIANT_TYPE_INT32)) {
                dt = SR_T_INT32;
+       } else if (g_variant_is_of_type(tmpl, G_VARIANT_TYPE_UINT32)) {
+               dt = SR_T_UINT32;
        } else {
                throw Error(SR_ERR_BUG);
        }
@@ -1651,6 +1664,11 @@ Output::~Output()
        check(sr_output_free(_structure));
 }
 
+shared_ptr<OutputFormat> Output::format()
+{
+       return _format;
+}
+
 string Output::receive(shared_ptr<Packet> packet)
 {
        GString *out;