summaryrefslogtreecommitdiff
path: root/src/main/main.cpp
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-04-21 15:27:57 +1000
committerjacqueline <me@jacqueline.id.au>2023-04-21 15:27:57 +1000
commit7083459cf3c62c32d0c039a4665e702d70a27bba (patch)
tree815757d591d8600469104398e95e80824bd94871 /src/main/main.cpp
parent130009eb142a5ce8bb6cf9cbb59d69a4d96ed5f9 (diff)
downloadtangara-fw-7083459cf3c62c32d0c039a4665e702d70a27bba.tar.gz
wrap driver instance ownership + di in a class
Diffstat (limited to 'src/main/main.cpp')
-rw-r--r--src/main/main.cpp42
1 files changed, 15 insertions, 27 deletions
diff --git a/src/main/main.cpp b/src/main/main.cpp
index 796c70f3..2a345899 100644
--- a/src/main/main.cpp
+++ b/src/main/main.cpp
@@ -11,6 +11,7 @@
#include "driver/sdspi_host.h"
#include "driver/spi_common.h"
#include "driver/spi_master.h"
+#include "driver_cache.hpp"
#include "esp_freertos_hooks.h"
#include "esp_intr_alloc.h"
#include "esp_log.h"
@@ -39,50 +40,37 @@ extern "C" void app_main(void) {
ESP_ERROR_CHECK(drivers::init_i2c());
ESP_ERROR_CHECK(drivers::init_spi());
+ std::unique_ptr<drivers::DriverCache> drivers =
+ std::make_unique<drivers::DriverCache>();
ESP_LOGI(TAG, "Init GPIOs");
- drivers::GpioExpander* expander = new drivers::GpioExpander();
+ drivers::GpioExpander* expander = drivers->AcquireGpios();
ESP_LOGI(TAG, "Enable power rails for development");
- expander->with([&](auto& gpio) {
- gpio.set_pin(drivers::GpioExpander::SD_MUX_EN_ACTIVE_LOW, 0);
- gpio.set_pin(drivers::GpioExpander::SD_MUX_SWITCH,
- drivers::GpioExpander::SD_MUX_ESP);
- gpio.set_pin(drivers::GpioExpander::SD_CARD_POWER_ENABLE, 0);
- gpio.set_pin(drivers::GpioExpander::AMP_EN, 1);
- });
+ expander->with(
+ [&](auto& gpio) { gpio.set_pin(drivers::GpioExpander::AMP_EN, 1); });
ESP_LOGI(TAG, "Init battery measurement");
drivers::Battery* battery = new drivers::Battery();
ESP_LOGI(TAG, "it's reading %d mV!", (int)battery->Millivolts());
ESP_LOGI(TAG, "Init SD card");
- auto storage_res = drivers::SdStorage::create(expander);
- std::shared_ptr<drivers::SdStorage> storage;
- if (storage_res.has_error()) {
+ auto storage = drivers->AcquireStorage();
+ if (!storage) {
ESP_LOGE(TAG, "Failed! Do you have an SD card?");
- } else {
- storage = std::move(storage_res.value());
}
ESP_LOGI(TAG, "Init touch wheel");
- std::unique_ptr<drivers::TouchWheel> touchwheel =
- std::make_unique<drivers::TouchWheel>();
+ std::shared_ptr<drivers::TouchWheel> touchwheel =
+ drivers->AcquireTouchWheel();
std::atomic<bool> lvgl_quit;
TaskHandle_t lvgl_task_handle;
- ui::StartLvgl(expander, &lvgl_quit, &lvgl_task_handle);
-
- std::unique_ptr<audio::AudioPlayback> playback;
- if (storage) {
- ESP_LOGI(TAG, "Init audio pipeline");
- auto playback_res = audio::AudioPlayback::create(expander);
- if (playback_res.has_error()) {
- ESP_LOGE(TAG, "Failed! Playback will not work.");
- } else {
- playback = std::move(playback_res.value());
- }
- }
+ ui::StartLvgl(drivers.get(), &lvgl_quit, &lvgl_task_handle);
+
+ ESP_LOGI(TAG, "Init audio pipeline");
+ std::unique_ptr<audio::AudioPlayback> playback =
+ std::make_unique<audio::AudioPlayback>(drivers.get());
ESP_LOGI(TAG, "Waiting for background tasks before launching console...");
vTaskDelay(pdMS_TO_TICKS(1000));