diff --git a/SConstruct b/SConstruct index e3765a15c1..72a4acfceb 100644 --- a/SConstruct +++ b/SConstruct @@ -302,19 +302,19 @@ SConscript(['selfdrive/controls/lib/longitudinal_mpc_model/SConscript']) SConscript(['selfdrive/boardd/SConscript']) SConscript(['selfdrive/proclogd/SConscript']) +SConscript(['selfdrive/clocksd/SConscript']) SConscript(['selfdrive/loggerd/SConscript']) SConscript(['selfdrive/locationd/SConscript']) SConscript(['selfdrive/locationd/models/SConscript']) - if arch == "aarch64": SConscript(['selfdrive/logcatd/SConscript']) SConscript(['selfdrive/sensord/SConscript']) - SConscript(['selfdrive/clocksd/SConscript']) -else: - SConscript(['tools/lib/index_log/SConscript']) if arch != "larch64": SConscript(['selfdrive/ui/SConscript']) + +if arch == "x86_64": + SConscript(['tools/lib/index_log/SConscript']) diff --git a/selfdrive/clocksd/SConscript b/selfdrive/clocksd/SConscript index 601e64bf16..d1cf13e9e8 100644 --- a/selfdrive/clocksd/SConscript +++ b/selfdrive/clocksd/SConscript @@ -1,2 +1,2 @@ Import('env', 'common', 'cereal', 'messaging') -env.Program('clocksd.cc', LIBS=['diag', 'time_genoff', common, cereal, messaging, 'capnp', 'zmq', 'kj']) \ No newline at end of file +env.Program('clocksd.cc', LIBS=[common, cereal, messaging, 'capnp', 'zmq', 'kj']) diff --git a/selfdrive/clocksd/clocksd.cc b/selfdrive/clocksd/clocksd.cc index 2e17058e0e..3658115ab4 100644 --- a/selfdrive/clocksd/clocksd.cc +++ b/selfdrive/clocksd/clocksd.cc @@ -1,12 +1,22 @@ +#include +#include + #include #include +#include #include -#include #include -#include + +#include #include "messaging.hpp" #include "common/timing.h" +// Apple doesn't have timerfd +#ifndef __APPLE__ +#include +#endif + +#ifdef QCOM namespace { int64_t arm_cntpct() { int64_t v; @@ -14,13 +24,14 @@ namespace { return v; } } +#endif int main() { setpriority(PRIO_PROCESS, 0, -13); - int err = 0; PubMaster pm({"clocks"}); +#ifndef __APPLE__ int timerfd = timerfd_create(CLOCK_BOOTTIME, 0); assert(timerfd >= 0); @@ -30,19 +41,26 @@ int main() { spec.it_value.tv_sec = 1; spec.it_value.tv_nsec = 0; - err = timerfd_settime(timerfd, 0, &spec, 0); + int err = timerfd_settime(timerfd, 0, &spec, 0); assert(err == 0); uint64_t expirations = 0; while ((err = read(timerfd, &expirations, sizeof(expirations)))) { if (err < 0) break; +#else + // Just run at 1Hz on apple + while (true){ + std::this_thread::sleep_for(std::chrono::seconds(1)); +#endif uint64_t boottime = nanos_since_boot(); uint64_t monotonic = nanos_monotonic(); uint64_t monotonic_raw = nanos_monotonic_raw(); uint64_t wall_time = nanos_since_epoch(); +#ifdef QCOM uint64_t modem_uptime_v = arm_cntpct() / 19200ULL; // 19.2 mhz clock +#endif capnp::MallocMessageBuilder msg; cereal::Event::Builder event = msg.initRoot(); @@ -53,11 +71,15 @@ int main() { clocks.setMonotonicNanos(monotonic); clocks.setMonotonicRawNanos(monotonic_raw); clocks.setWallTimeNanos(wall_time); +#ifdef QCOM clocks.setModemUptimeMillis(modem_uptime_v); +#endif pm.send("clocks", msg); } +#ifndef __APPLE__ close(timerfd); +#endif return 0; -} \ No newline at end of file +} diff --git a/selfdrive/manager.py b/selfdrive/manager.py index e9ef36a2fc..75168781b3 100755 --- a/selfdrive/manager.py +++ b/selfdrive/manager.py @@ -239,6 +239,7 @@ car_started_processes = [ 'proclogd', 'ubloxd', 'locationd', + 'clocksd', ] driver_view_processes = [ @@ -255,7 +256,6 @@ if WEBCAM: if ANDROID: car_started_processes += [ 'sensord', - 'clocksd', 'gpsd', 'dmonitoringmodeld', ]