diff --git a/DSView/pv/data/snapshot.cpp b/DSView/pv/data/snapshot.cpp index 02669025..ede94348 100644 --- a/DSView/pv/data/snapshot.cpp +++ b/DSView/pv/data/snapshot.cpp @@ -71,6 +71,12 @@ uint64_t Snapshot::get_sample_count() return _sample_count; } +uint64_t Snapshot::get_total_sample_count() +{ + std::lock_guard lock(_mutex); + return _total_sample_count; +} + uint64_t Snapshot::get_ring_sample_count() { std::lock_guard lock(_mutex); diff --git a/DSView/pv/data/snapshot.h b/DSView/pv/data/snapshot.h index 1f24e470..87b480da 100644 --- a/DSView/pv/data/snapshot.h +++ b/DSView/pv/data/snapshot.h @@ -40,6 +40,7 @@ public: virtual void init() = 0; uint64_t get_sample_count(); + uint64_t get_total_sample_count(); uint64_t get_ring_sample_count(); uint64_t get_ring_start(); uint64_t get_ring_end(); diff --git a/DSView/pv/sigsession.cpp b/DSView/pv/sigsession.cpp index 1031fa1a..b16159de 100644 --- a/DSView/pv/sigsession.cpp +++ b/DSView/pv/sigsession.cpp @@ -1474,6 +1474,14 @@ namespace pv // Post a message to start all decode tasks. if (mode == LOGIC){ + auto logic_data = _capture_data->get_logic(); + if (is_loop_mode() && logic_data->get_loop_offset() > 0){ + uint64_t milliseconds = logic_data->get_ring_sample_count() / 1000000; + QDateTime sessionTime = QDateTime::currentDateTime(); + sessionTime = sessionTime.addMSecs(-milliseconds); + set_session_time(sessionTime); + } + _callback->trigger_message(DSV_MSG_REV_END_PACKET); } else{ diff --git a/DSView/pv/storesession.cpp b/DSView/pv/storesession.cpp index 9f49bb10..4edfb234 100644 --- a/DSView/pv/storesession.cpp +++ b/DSView/pv/storesession.cpp @@ -48,6 +48,7 @@ #include #include #include +#include #ifdef _WIN32 #include @@ -919,7 +920,10 @@ void StoreSession::export_exec(data::Snapshot *snapshot) return; } } - + + QString sessionTime = _session->get_session_time().toString("yyyy-MM-dd HH:mm:ss"); + strcpy(output.time_string, sessionTime.toStdString().c_str()); + QFile file(_file_name); file.open(QIODevice::WriteOnly | QIODevice::Text); QTextStream out(&file); diff --git a/libsigrok4DSL/libsigrok.h b/libsigrok4DSL/libsigrok.h index 7b3550ef..bd8f424a 100644 --- a/libsigrok4DSL/libsigrok.h +++ b/libsigrok4DSL/libsigrok.h @@ -533,6 +533,8 @@ struct sr_output { void *priv; uint64_t start_sample_index; + + char time_string[30]; }; /** Generic option struct used by various subsystems. */ diff --git a/libsigrok4DSL/output/csv.c b/libsigrok4DSL/output/csv.c index 82e06f88..b5a05376 100644 --- a/libsigrok4DSL/output/csv.c +++ b/libsigrok4DSL/output/csv.c @@ -154,8 +154,8 @@ static GString *gen_header(const struct sr_output *o) /* Some metadata */ t = time(NULL); - g_string_append_printf(header, "; CSV, generated by %s on %s", - PACKAGE_STRING, ctime(&t)); + g_string_append_printf(header, "; CSV, generated by %s on %s\n", + PACKAGE_STRING, o->time_string); //ctime(&t) /* Columns / channels */ if (ctx->type == SR_CHANNEL_LOGIC)