aboutsummaryrefslogtreecommitdiff
path: root/test_fw/src/bringup.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test_fw/src/bringup.cpp')
-rw-r--r--test_fw/src/bringup.cpp99
1 files changed, 99 insertions, 0 deletions
diff --git a/test_fw/src/bringup.cpp b/test_fw/src/bringup.cpp
new file mode 100644
index 0000000..44a07c0
--- /dev/null
+++ b/test_fw/src/bringup.cpp
@@ -0,0 +1,99 @@
+#include "bringup.h"
+#include "board.h"
+
+#include <Wire.h>
+
+using namespace ocularium;
+
+void bringup::startup_checks(const etl::span<bringup::init_check> &checks)
+{
+ auto success = true;
+
+ do
+ {
+ success = true;
+
+ for (auto &[name, f, succeeded] : checks)
+ {
+ if (succeeded)
+ continue;
+
+ Serial.print("checking " + name + "... ");
+
+ succeeded = f();
+ success = success && succeeded;
+
+ if (succeeded) Serial.println("ok");
+ else Serial.println("bad");
+ }
+
+ if (!success) delay(10);
+ } while (!success);
+}
+
+void bringup::init_buses()
+{
+ Wire1.setSCL(SCL_PIN);
+ Wire1.setSDA(SDA_PIN);
+ Wire1.setClock(100000);
+ Wire1.begin();
+
+ SD_SPI.setCS(SD_CS);
+ SD_SPI.setMOSI(SD_MOSI);
+ SD_SPI.setMISO(SD_MISO);
+ SD_SPI.setSCK(SD_SCK);
+ SD_SPI.begin();
+
+ LSM_SPI.setCS(LSM_CS);
+ LSM_SPI.setMOSI(LSM_MOSI);
+ LSM_SPI.setMISO(LSM_MISO);
+ LSM_SPI.setSCK(LSM_SCK);
+ LSM_SPI.begin();
+}
+
+void bringup::init_pins()
+{
+ pinMode(CARD_DETECT, INPUT);
+ pinMode(LED_FAULT, OUTPUT);
+ pinMode(LED_CAPTURING, OUTPUT);
+ pinMode(LED_OTHER, OUTPUT);
+ pinMode(LED_STORAGE, OUTPUT);
+ pinMode(LSM_INT1, INPUT);
+ pinMode(LSM_INT2, INPUT);
+}
+
+void bringup::boot_animation()
+{
+ constexpr pin_size_t chase[] = {
+ LED_STORAGE,
+ LED_OTHER,
+ LED_FAULT,
+ LED_CAPTURING,
+ };
+
+ for (auto i = 0; i < 5; i++)
+ {
+ for (const auto pin: chase)
+ {
+ digitalWrite(pin, HIGH);
+ delay(75);
+ digitalWrite(pin, LOW);
+ }
+ }
+
+ delay(100);
+
+ for (auto i = 0; i < 2; i++)
+ {
+ for (const auto pin : chase)
+ {
+ digitalWrite(pin, HIGH);
+ }
+ delay(100);
+ for (const auto pin : chase)
+ {
+ digitalWrite(pin, LOW);
+ }
+ delay(100);
+ }
+}