aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/TimestampDecoder.cpp11
-rw-r--r--src/TimestampDecoder.h4
-rw-r--r--src/output/Dexter.cpp2
-rw-r--r--src/output/SDR.cpp6
4 files changed, 22 insertions, 1 deletions
diff --git a/src/TimestampDecoder.cpp b/src/TimestampDecoder.cpp
index 54a5817..c701186 100644
--- a/src/TimestampDecoder.cpp
+++ b/src/TimestampDecoder.cpp
@@ -50,6 +50,17 @@ double frame_timestamp::offset_to_system_time() const
return get_real_secs() - (double)t.tv_sec - (t.tv_nsec / 1000000000.0);
}
+std::string frame_timestamp::to_string() const
+{
+ time_t s = timestamp_sec;
+ std::stringstream ss;
+ char timestr[100];
+ if (std::strftime(timestr, sizeof(timestr), "%Y-%m-%dZ%H:%M:%S", std::gmtime(&s))) {
+ ss << timestr << " + " << ((double)timestamp_pps / 16384000.0);
+ }
+ return ss.str();
+}
+
frame_timestamp& frame_timestamp::operator+=(const double& diff)
{
double offset_pps, offset_secs;
diff --git a/src/TimestampDecoder.h b/src/TimestampDecoder.h
index 3616bab..4e94d4c 100644
--- a/src/TimestampDecoder.h
+++ b/src/TimestampDecoder.h
@@ -39,7 +39,7 @@ struct frame_timestamp
int32_t fct;
uint8_t fp; // Frame Phase
- uint32_t timestamp_sec;
+ uint32_t timestamp_sec; // seconds in unix epoch
uint32_t timestamp_pps; // In units of 1/16384000 s
bool timestamp_valid = false;
bool timestamp_refresh;
@@ -76,6 +76,8 @@ struct frame_timestamp
timestamp_pps = lrint(subsecond * 16384000.0);
}
+ std::string to_string() const;
+
void print(const char* t) const {
etiLog.log(debug,
"%s <frame_timestamp(%s, %d, %.9f, %d)>\n",
diff --git a/src/output/Dexter.cpp b/src/output/Dexter.cpp
index e4f672b..b389b31 100644
--- a/src/output/Dexter.cpp
+++ b/src/output/Dexter.cpp
@@ -370,6 +370,7 @@ void Dexter::transmit_frame(const struct FrameData& frame)
etiLog.level(error) << "Failed to get dexter_dsp_tx.pps_clks: " << get_iio_error(r);
}
+ /*
etiLog.level(debug) << "Dexter: TS CLK " <<
((int64_t)frame.ts.timestamp_sec - (int64_t)m_utc_seconds_at_startup) * DSP_CLOCK << " + " <<
m_clock_count_at_startup << " + " <<
@@ -377,6 +378,7 @@ void Dexter::transmit_frame(const struct FrameData& frame)
frame_ts_clocks << " DELTA " <<
frame_ts_clocks << " - " << pps_clks << " = " <<
(double)((int64_t)frame_ts_clocks - pps_clks) / DSP_CLOCK;
+ */
// Ensure we hand the frame over to HW at least 0.1s before timestamp
if (((int64_t)frame_ts_clocks - pps_clks) < (int64_t)DSP_CLOCK / 10) {
diff --git a/src/output/SDR.cpp b/src/output/SDR.cpp
index f1ed2b0..bd02cab 100644
--- a/src/output/SDR.cpp
+++ b/src/output/SDR.cpp
@@ -370,6 +370,12 @@ void SDR::handle_frame(struct FrameData& frame)
return;
}
+ if (frame.ts.fct == 0) {
+ etiLog.level(debug) <<
+ "OutputSDR: TX FCT=" << frame.ts.fct <<
+ " TS " << frame.ts.to_string();
+ }
+
m_device->transmit_frame(frame);
}