Add command REALTIME?
This commit is contained in:
parent
9687b65b6f
commit
4eb6ada765
|
|
@ -12,6 +12,7 @@
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <time.h>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
|
@ -776,6 +777,38 @@ private:
|
||||||
return std::to_string(timestamp);
|
return std::to_string(timestamp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Handle command REALTIME? */
|
||||||
|
std::string qry_realtime(CommandEnvironment env)
|
||||||
|
{
|
||||||
|
struct timespec tp1, tp2, tp3;
|
||||||
|
uint64_t ts1, ts2, ts3, ts4;
|
||||||
|
|
||||||
|
// Read approximately simultaneous real time and timestamp.
|
||||||
|
ts1 = m_device.get_timestamp();
|
||||||
|
clock_gettime(CLOCK_REALTIME, &tp1);
|
||||||
|
ts2 = m_device.get_timestamp();
|
||||||
|
clock_gettime(CLOCK_REALTIME, &tp2);
|
||||||
|
ts3 = m_device.get_timestamp();
|
||||||
|
clock_gettime(CLOCK_REALTIME, &tp3);
|
||||||
|
ts4 = m_device.get_timestamp();
|
||||||
|
|
||||||
|
// Choose shortest interval out of three.
|
||||||
|
const uint64_t timestamp_mask = 0xffffffffffff;
|
||||||
|
uint64_t d1 = (ts2 - ts1) & timestamp_mask;
|
||||||
|
uint64_t d2 = (ts3 - ts2) & timestamp_mask;
|
||||||
|
uint64_t d3 = (ts4 - ts3) & timestamp_mask;
|
||||||
|
if (d3 < d1 && d3 < d2) {
|
||||||
|
ts1 = ts3;
|
||||||
|
tp1 = tp3;
|
||||||
|
} else if (d2 < d1) {
|
||||||
|
ts1 = ts2;
|
||||||
|
tp1 = tp2;
|
||||||
|
}
|
||||||
|
|
||||||
|
return str_format("%lld.%09ld %llu",
|
||||||
|
(long long)tp1.tv_sec, (long)tp1.tv_nsec, ts1);
|
||||||
|
}
|
||||||
|
|
||||||
/** Handle command AIN:CHANNELS:COUNT? */
|
/** Handle command AIN:CHANNELS:COUNT? */
|
||||||
std::string qry_channels_count(CommandEnvironment env)
|
std::string qry_channels_count(CommandEnvironment env)
|
||||||
{
|
{
|
||||||
|
|
@ -1424,6 +1457,7 @@ private:
|
||||||
command_table_no_args = {
|
command_table_no_args = {
|
||||||
{ "*idn?", &CommandHandler::qry_idn },
|
{ "*idn?", &CommandHandler::qry_idn },
|
||||||
{ "timestamp?", &CommandHandler::qry_timestamp },
|
{ "timestamp?", &CommandHandler::qry_timestamp },
|
||||||
|
{ "realtime?", &CommandHandler::qry_realtime },
|
||||||
{ "ain:channels:count?", &CommandHandler::qry_channels_count },
|
{ "ain:channels:count?", &CommandHandler::qry_channels_count },
|
||||||
{ "ain:channels:active?", &CommandHandler::qry_channels_active },
|
{ "ain:channels:active?", &CommandHandler::qry_channels_active },
|
||||||
{ "ain:chN:range?", &CommandHandler::qry_channel_range },
|
{ "ain:chN:range?", &CommandHandler::qry_channel_range },
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue