Rename our allwpilib (which is now 2020) to not have 2019 in the name
Change-Id: I3c07f85ed32ab8b97db765a9b43f2a6ce7da964a
diff --git a/hal/src/main/native/sim/MockHooks.cpp b/hal/src/main/native/sim/MockHooks.cpp
new file mode 100644
index 0000000..59086ae
--- /dev/null
+++ b/hal/src/main/native/sim/MockHooks.cpp
@@ -0,0 +1,98 @@
+/*----------------------------------------------------------------------------*/
+/* Copyright (c) 2017-2019 FIRST. All Rights Reserved. */
+/* Open Source Software - may be modified and shared by FRC teams. The code */
+/* must be accompanied by the FIRST BSD license file in the root directory of */
+/* the project. */
+/*----------------------------------------------------------------------------*/
+
+#include <atomic>
+#include <chrono>
+#include <cstdio>
+#include <thread>
+
+#include <wpi/timestamp.h>
+
+#include "MockHooksInternal.h"
+#include "NotifierInternal.h"
+
+static std::atomic<bool> programStarted{false};
+
+static std::atomic<uint64_t> programStartTime{0};
+static std::atomic<uint64_t> programPauseTime{0};
+
+namespace hal {
+namespace init {
+void InitializeMockHooks() {}
+} // namespace init
+} // namespace hal
+
+namespace hal {
+void RestartTiming() {
+ programStartTime = wpi::Now();
+ if (programPauseTime != 0) programPauseTime = programStartTime.load();
+}
+
+void PauseTiming() {
+ if (programPauseTime == 0) programPauseTime = wpi::Now();
+}
+
+void ResumeTiming() {
+ if (programPauseTime != 0) {
+ programStartTime += wpi::Now() - programPauseTime;
+ programPauseTime = 0;
+ }
+}
+
+bool IsTimingPaused() { return programPauseTime != 0; }
+
+void StepTiming(uint64_t delta) {
+ if (programPauseTime != 0) programPauseTime += delta;
+}
+
+int64_t GetFPGATime() {
+ uint64_t curTime = programPauseTime;
+ if (curTime == 0) curTime = wpi::Now();
+ return curTime - programStartTime;
+}
+
+double GetFPGATimestamp() { return GetFPGATime() * 1.0e-6; }
+
+void SetProgramStarted() { programStarted = true; }
+bool GetProgramStarted() { return programStarted; }
+} // namespace hal
+
+using namespace hal;
+
+extern "C" {
+void HALSIM_WaitForProgramStart(void) {
+ int count = 0;
+ while (!programStarted) {
+ count++;
+ std::printf("Waiting for program start signal: %d\n", count);
+ std::this_thread::sleep_for(std::chrono::milliseconds(500));
+ }
+}
+
+void HALSIM_SetProgramStarted(void) { SetProgramStarted(); }
+
+HAL_Bool HALSIM_GetProgramStarted(void) { return GetProgramStarted(); }
+
+void HALSIM_RestartTiming(void) { RestartTiming(); }
+
+void HALSIM_PauseTiming(void) {
+ PauseTiming();
+ PauseNotifiers();
+}
+
+void HALSIM_ResumeTiming(void) {
+ ResumeTiming();
+ ResumeNotifiers();
+}
+
+HAL_Bool HALSIM_IsTimingPaused(void) { return IsTimingPaused(); }
+
+void HALSIM_StepTiming(uint64_t delta) {
+ StepTiming(delta);
+ WakeupNotifiers();
+}
+} // extern "C"