summaryrefslogtreecommitdiff
path: root/src/main.cpp
diff options
context:
space:
mode:
authorJF <jf@codingfield.com>2021-05-21 09:38:38 (GMT)
committerGitea <gitea@fake.local>2021-05-21 09:38:38 (GMT)
commitde69905c0647997091d9e385538c96de30be93e6 (patch)
tree4775001d808da520c93a7552da1bea80e7714a30 /src/main.cpp
parenta80e782f267cd2424d22da23d809c0c6a8ff8761 (diff)
parent7c9513be8a3bf36fda5706cb0fb1bd6232d42ffd (diff)
Merge branch 'develop' of JF/PineTime into master
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp119
1 files changed, 66 insertions, 53 deletions
diff --git a/src/main.cpp b/src/main.cpp
index 9470bdb..61194b9 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -43,10 +43,10 @@
#include "systemtask/SystemTask.h"
#if NRF_LOG_ENABLED
-#include "logging/NrfLogger.h"
+ #include "logging/NrfLogger.h"
Pinetime::Logging::NrfLogger logger;
#else
-#include "logging/DummyLogger.h"
+ #include "logging/DummyLogger.h"
Pinetime::Logging::DummyLogger logger;
#endif
@@ -64,15 +64,13 @@ static constexpr uint8_t touchPanelTwiAddress = 0x15;
static constexpr uint8_t motionSensorTwiAddress = 0x18;
static constexpr uint8_t heartRateSensorTwiAddress = 0x44;
-Pinetime::Drivers::SpiMaster spi{Pinetime::Drivers::SpiMaster::SpiModule::SPI0, {
- Pinetime::Drivers::SpiMaster::BitOrder::Msb_Lsb,
- Pinetime::Drivers::SpiMaster::Modes::Mode3,
- Pinetime::Drivers::SpiMaster::Frequencies::Freq8Mhz,
- pinSpiSck,
- pinSpiMosi,
- pinSpiMiso
- }
-};
+Pinetime::Drivers::SpiMaster spi {Pinetime::Drivers::SpiMaster::SpiModule::SPI0,
+ {Pinetime::Drivers::SpiMaster::BitOrder::Msb_Lsb,
+ Pinetime::Drivers::SpiMaster::Modes::Mode3,
+ Pinetime::Drivers::SpiMaster::Frequencies::Freq8Mhz,
+ pinSpiSck,
+ pinSpiMosi,
+ pinSpiMiso}};
Pinetime::Drivers::Spi lcdSpi {spi, pinLcdCsn};
Pinetime::Drivers::St7789 lcd {lcdSpi, pinLcdDataCommand};
@@ -83,55 +81,67 @@ Pinetime::Drivers::SpiNorFlash spiNorFlash {flashSpi};
// The TWI device should work @ up to 400Khz but there is a HW bug which prevent it from
// respecting correct timings. According to erratas heet, this magic value makes it run
// at ~390Khz with correct timings.
-static constexpr uint32_t MaxTwiFrequencyWithoutHardwareBug{0x06200000};
-Pinetime::Drivers::TwiMaster twiMaster{Pinetime::Drivers::TwiMaster::Modules::TWIM1,
- Pinetime::Drivers::TwiMaster::Parameters {
- MaxTwiFrequencyWithoutHardwareBug, pinTwiSda, pinTwiScl}};
+static constexpr uint32_t MaxTwiFrequencyWithoutHardwareBug {0x06200000};
+Pinetime::Drivers::TwiMaster twiMaster {Pinetime::Drivers::TwiMaster::Modules::TWIM1,
+ Pinetime::Drivers::TwiMaster::Parameters {MaxTwiFrequencyWithoutHardwareBug, pinTwiSda, pinTwiScl}};
Pinetime::Drivers::Cst816S touchPanel {twiMaster, touchPanelTwiAddress};
#ifdef PINETIME_IS_RECOVERY
static constexpr bool isFactory = true;
-#include "displayapp/DummyLittleVgl.h"
-#include "displayapp/DisplayAppRecovery.h"
+ #include "displayapp/DummyLittleVgl.h"
+ #include "displayapp/DisplayAppRecovery.h"
Pinetime::Components::LittleVgl lvgl {lcd, touchPanel};
#else
static constexpr bool isFactory = false;
-#include "displayapp/LittleVgl.h"
-#include "displayapp/DisplayApp.h"
+ #include "displayapp/LittleVgl.h"
+ #include "displayapp/DisplayApp.h"
Pinetime::Components::LittleVgl lvgl {lcd, touchPanel};
#endif
-Pinetime::Drivers::Bma421 motionSensor{twiMaster, motionSensorTwiAddress};
+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;
+static constexpr uint8_t pinPowerPresentIrq = 19;
std::unique_ptr<Pinetime::System::SystemTask> systemTask;
-Pinetime::Controllers::Settings settingsController{spiNorFlash};
+Pinetime::Controllers::Settings settingsController {spiNorFlash};
-Pinetime::Controllers::MotorController motorController{settingsController};
+Pinetime::Controllers::MotorController motorController {settingsController};
void nrfx_gpiote_evt_handler(nrfx_gpiote_pin_t pin, nrf_gpiote_polarity_t action) {
- if(pin == pinTouchIrq) {
+ if (pin == pinTouchIrq) {
systemTask->OnTouchEvent();
- return ;
+ 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 vApplicationIdleHook(void) {
+ if (!isFactory)
+ lv_tick_inc(1);
+}
+}
+
+void DebounceTimerChargeCallback(TimerHandle_t xTimer) {
+ xTimerStop(xTimer, 0);
+ systemTask->PushMessage(Pinetime::System::SystemTask::Messages::OnChargingEvent);
}
void DebounceTimerCallback(TimerHandle_t xTimer) {
@@ -140,25 +150,24 @@ void DebounceTimerCallback(TimerHandle_t xTimer) {
}
void SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0_IRQHandler(void) {
- if(((NRF_SPIM0->INTENSET & (1<<6)) != 0) && NRF_SPIM0->EVENTS_END == 1) {
+ if (((NRF_SPIM0->INTENSET & (1 << 6)) != 0) && NRF_SPIM0->EVENTS_END == 1) {
NRF_SPIM0->EVENTS_END = 0;
spi.OnEndEvent();
}
- if(((NRF_SPIM0->INTENSET & (1<<19)) != 0) && NRF_SPIM0->EVENTS_STARTED == 1) {
+ if (((NRF_SPIM0->INTENSET & (1 << 19)) != 0) && NRF_SPIM0->EVENTS_STARTED == 1) {
NRF_SPIM0->EVENTS_STARTED = 0;
spi.OnStartedEvent();
}
- if(((NRF_SPIM0->INTENSET & (1<<1)) != 0) && NRF_SPIM0->EVENTS_STOPPED == 1) {
+ if (((NRF_SPIM0->INTENSET & (1 << 1)) != 0) && NRF_SPIM0->EVENTS_STOPPED == 1) {
NRF_SPIM0->EVENTS_STOPPED = 0;
}
}
-static void (*radio_isr_addr)(void) ;
-static void (*rng_isr_addr)(void) ;
-static void (*rtc0_isr_addr)(void) ;
-
+static void (*radio_isr_addr)(void);
+static void (*rng_isr_addr)(void);
+static void (*rtc0_isr_addr)(void);
/* Some interrupt handlers required for NimBLE radio driver */
extern "C" {
@@ -192,8 +201,7 @@ void npl_freertos_hw_set_isr(int irqn, void (*addr)(void)) {
}
}
-uint32_t
-npl_freertos_hw_enter_critical(void) {
+uint32_t npl_freertos_hw_enter_critical(void) {
uint32_t ctx = __get_PRIMASK();
__disable_irq();
return (ctx & 0x01);
@@ -205,16 +213,14 @@ void npl_freertos_hw_exit_critical(uint32_t ctx) {
}
}
-
static struct ble_npl_eventq g_eventq_dflt;
-struct ble_npl_eventq *
-nimble_port_get_dflt_eventq(void) {
+struct ble_npl_eventq* nimble_port_get_dflt_eventq(void) {
return &g_eventq_dflt;
}
void nimble_port_run(void) {
- struct ble_npl_event *ev;
+ struct ble_npl_event* ev;
while (1) {
ev = ble_npl_eventq_get(&g_eventq_dflt, BLE_NPL_TIME_FOREVER);
@@ -222,7 +228,7 @@ void nimble_port_run(void) {
}
}
-void BleHost(void *) {
+void BleHost(void*) {
nimble_port_run();
}
@@ -244,8 +250,8 @@ void nimble_port_init(void) {
nimble_port_freertos_init(BleHost);
}
-void nimble_port_ll_task_func(void *args) {
- extern void ble_ll_task(void *);
+void nimble_port_ll_task_func(void* args) {
+ extern void ble_ll_task(void*);
ble_ll_task(args);
}
}
@@ -255,10 +261,21 @@ int main(void) {
nrf_drv_clock_init();
- debounceTimer = xTimerCreate ("debounceTimer", 200, pdFALSE, (void *) 0, DebounceTimerCallback);
-
- systemTask = std::make_unique<Pinetime::System::SystemTask>(spi, lcd, spiNorFlash, twiMaster, touchPanel, lvgl, batteryController, bleController,
- motorController, heartRateSensor, motionSensor, settingsController);
+ debounceTimer = xTimerCreate("debounceTimer", 200, pdFALSE, (void*) 0, DebounceTimerCallback);
+ debounceChargeTimer = xTimerCreate("debounceTimerCharge", 200, pdFALSE, (void*) 0, DebounceTimerChargeCallback);
+
+ systemTask = std::make_unique<Pinetime::System::SystemTask>(spi,
+ lcd,
+ spiNorFlash,
+ twiMaster,
+ touchPanel,
+ lvgl,
+ batteryController,
+ bleController,
+ motorController,
+ heartRateSensor,
+ motionSensor,
+ settingsController);
systemTask->Start();
nimble_port_init();
@@ -268,7 +285,3 @@ int main(void) {
APP_ERROR_HANDLER(NRF_ERROR_FORBIDDEN);
}
}
-
-
-
-