aboutsummaryrefslogtreecommitdiffstats
path: root/src/main.cpp
diff options
context:
space:
mode:
authorRiku Isokoski <riksu9000@gmail.com>2021-08-01 11:47:26 +0300
committerRiku Isokoski <riksu9000@gmail.com>2021-08-01 11:47:26 +0300
commit5bdef365f2b8f8e0ba06d04216749205a5bba50d (patch)
treeb0260cd863c37ca1cee57fd813647706e2d07f77 /src/main.cpp
parent9e8dd9a1e63523f4e3ed322978e5b5e079c50375 (diff)
parent514481ef7f9c71ad816b31d979c6ab39ce9380dd (diff)
Merge branch 'develop' into HEAD
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp97
1 files changed, 72 insertions, 25 deletions
diff --git a/src/main.cpp b/src/main.cpp
index 04cef6b5..ffbba5e7 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -28,12 +28,14 @@
#include <drivers/Hrs3300.h>
#include <drivers/Bma421.h>
+#include "BootloaderVersion.h"
#include "components/battery/BatteryController.h"
#include "components/ble/BleController.h"
#include "components/ble/NotificationManager.h"
#include "components/motor/MotorController.h"
#include "components/datetime/DateTimeController.h"
-#include "components/settings/Settings.h"
+#include "components/heartrate/HeartRateController.h"
+#include "components/fs/FS.h"
#include "drivers/Spi.h"
#include "drivers/SpiMaster.h"
#include "drivers/SpiNorFlash.h"
@@ -50,8 +52,6 @@ Pinetime::Logging::NrfLogger logger;
Pinetime::Logging::DummyLogger logger;
#endif
-#include <memory>
-
static constexpr uint8_t pinSpiSck = 2;
static constexpr uint8_t pinSpiMosi = 3;
static constexpr uint8_t pinSpiMiso = 4;
@@ -101,38 +101,91 @@ Pinetime::Drivers::Bma421 motionSensor {twiMaster, motionSensorTwiAddress};
Pinetime::Drivers::Hrs3300 heartRateSensor {twiMaster, heartRateSensorTwiAddress};
TimerHandle_t debounceTimer;
+TimerHandle_t debounceChargeTimer;
Pinetime::Controllers::Battery batteryController;
Pinetime::Controllers::Ble bleController;
void ble_manager_set_ble_connection_callback(void (*connection)());
void ble_manager_set_ble_disconnection_callback(void (*disconnection)());
static constexpr uint8_t pinTouchIrq = 28;
-std::unique_ptr<Pinetime::System::SystemTask> systemTask;
+static constexpr uint8_t pinPowerPresentIrq = 19;
+
+Pinetime::Controllers::HeartRateController heartRateController;
+Pinetime::Applications::HeartRateTask heartRateApp(heartRateSensor, heartRateController);
-Pinetime::Controllers::Settings settingsController {spiNorFlash};
+Pinetime::Controllers::DateTime dateTimeController;
+Pinetime::Drivers::Watchdog watchdog;
+Pinetime::Drivers::WatchdogView watchdogView(watchdog);
+Pinetime::Controllers::NotificationManager notificationManager;
+Pinetime::Controllers::MotionController motionController;
+Pinetime::Controllers::TimerController timerController;
+Pinetime::Controllers::FS fs {spiNorFlash};
+Pinetime::Controllers::Settings settingsController {fs};
Pinetime::Controllers::MotorController motorController {settingsController};
+
+Pinetime::Applications::DisplayApp displayApp(lcd,
+ lvgl,
+ touchPanel,
+ batteryController,
+ bleController,
+ dateTimeController,
+ watchdogView,
+ notificationManager,
+ heartRateController,
+ settingsController,
+ motorController,
+ motionController,
+ timerController);
+
+Pinetime::System::SystemTask systemTask(spi,
+ lcd,
+ spiNorFlash,
+ twiMaster,
+ touchPanel,
+ lvgl,
+ batteryController,
+ bleController,
+ dateTimeController,
+ timerController,
+ watchdog,
+ notificationManager,
+ motorController,
+ heartRateSensor,
+ motionController,
+ motionSensor,
+ settingsController,
+ heartRateController,
+ displayApp,
+ heartRateApp,
+ fs);
+
void nrfx_gpiote_evt_handler(nrfx_gpiote_pin_t pin, nrf_gpiote_polarity_t action) {
if (pin == pinTouchIrq) {
- systemTask->OnTouchEvent();
+ systemTask.OnTouchEvent();
return;
}
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
+
+ if (pin == pinPowerPresentIrq and action == NRF_GPIOTE_POLARITY_TOGGLE) {
+ xTimerStartFromISR(debounceChargeTimer, &xHigherPriorityTaskWoken);
+ portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
+ return;
+ }
+
xTimerStartFromISR(debounceTimer, &xHigherPriorityTaskWoken);
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
}
-extern "C" {
-void vApplicationIdleHook(void) {
- if (!isFactory)
- lv_tick_inc(1);
-}
+void DebounceTimerChargeCallback(TimerHandle_t xTimer) {
+ xTimerStop(xTimer, 0);
+ systemTask.PushMessage(Pinetime::System::Messages::OnChargingEvent);
}
void DebounceTimerCallback(TimerHandle_t xTimer) {
xTimerStop(xTimer, 0);
- systemTask->OnButtonPushed();
+ systemTask.OnButtonPushed();
}
void SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0_IRQHandler(void) {
@@ -248,20 +301,14 @@ int main(void) {
nrf_drv_clock_init();
debounceTimer = xTimerCreate("debounceTimer", 200, pdFALSE, (void*) 0, DebounceTimerCallback);
+ debounceChargeTimer = xTimerCreate("debounceTimerCharge", 200, pdFALSE, (void*) 0, DebounceTimerChargeCallback);
+
+ // retrieve version stored by bootloader
+ Pinetime::BootloaderVersion::SetVersion(NRF_TIMER2->CC[0]);
+
+ lvgl.Init();
- systemTask = std::make_unique<Pinetime::System::SystemTask>(spi,
- lcd,
- spiNorFlash,
- twiMaster,
- touchPanel,
- lvgl,
- batteryController,
- bleController,
- motorController,
- heartRateSensor,
- motionSensor,
- settingsController);
- systemTask->Start();
+ systemTask.Start();
nimble_port_init();
vTaskStartScheduler();