4747#include " systemtask/SystemTask.h"
4848#include " drivers/PinMap.h"
4949#include " touchhandler/TouchHandler.h"
50+ #include " buttonhandler/ButtonHandler.h"
5051
5152#if NRF_LOG_ENABLED
5253 #include " logging/NrfLogger.h"
@@ -96,8 +97,6 @@ TimerHandle_t debounceTimer;
9697TimerHandle_t debounceChargeTimer;
9798Pinetime::Controllers::Battery batteryController;
9899Pinetime::Controllers::Ble bleController;
99- static constexpr uint8_t pinTouchIrq = Pinetime::PinMap::Cst816sIrq;
100- static constexpr uint8_t pinPowerPresentIrq = Pinetime::PinMap::PowerPresent;
101100
102101Pinetime::Controllers::HeartRateController heartRateController;
103102Pinetime::Applications::HeartRateTask heartRateApp (heartRateSensor, heartRateController);
@@ -110,6 +109,7 @@ Pinetime::Controllers::MotionController motionController;
110109Pinetime::Controllers::TimerController timerController;
111110Pinetime::Controllers::AlarmController alarmController {dateTimeController};
112111Pinetime::Controllers::TouchHandler touchHandler (touchPanel, lvgl);
112+ Pinetime::Controllers::ButtonHandler buttonHandler;
113113
114114Pinetime::Controllers::FS fs {spiNorFlash};
115115Pinetime::Controllers::Settings settingsController {fs};
@@ -153,7 +153,8 @@ Pinetime::System::SystemTask systemTask(spi,
153153 displayApp,
154154 heartRateApp,
155155 fs,
156- touchHandler);
156+ touchHandler,
157+ buttonHandler);
157158
158159/* Variable Declarations for variables in noinit SRAM
159160 Increment NoInit_MagicValue upon adding variables to this area
@@ -176,21 +177,20 @@ void nrfx_gpiote_evt_handler(nrfx_gpiote_pin_t pin, nrf_gpiote_polarity_t action
176177 if (pin == Pinetime::PinMap::PowerPresent and action == NRF_GPIOTE_POLARITY_TOGGLE) {
177178 xTimerStartFromISR (debounceChargeTimer, &xHigherPriorityTaskWoken);
178179 portYIELD_FROM_ISR (xHigherPriorityTaskWoken);
179- return ;
180+ } else if (pin == Pinetime::PinMap::Button) {
181+ // This activates on button release as well due to bouncing
182+ xTimerStartFromISR (debounceTimer, &xHigherPriorityTaskWoken);
183+ portYIELD_FROM_ISR (xHigherPriorityTaskWoken);
180184 }
181-
182- xTimerStartFromISR (debounceTimer, &xHigherPriorityTaskWoken);
183- portYIELD_FROM_ISR (xHigherPriorityTaskWoken);
184185}
185186
186187void DebounceTimerChargeCallback (TimerHandle_t xTimer) {
187188 xTimerStop (xTimer, 0 );
188189 systemTask.PushMessage (Pinetime::System::Messages::OnChargingEvent);
189190}
190191
191- void DebounceTimerCallback (TimerHandle_t xTimer) {
192- xTimerStop (xTimer, 0 );
193- systemTask.OnButtonPushed ();
192+ void DebounceTimerCallback (TimerHandle_t /* unused*/ ) {
193+ systemTask.PushMessage (Pinetime::System::Messages::HandleButtonEvent);
194194}
195195
196196void SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0_IRQHandler (void ) {
@@ -319,8 +319,8 @@ int main(void) {
319319 }
320320 nrf_gpio_cfg_default (Pinetime::PinMap::TwiScl);
321321
322- debounceTimer = xTimerCreate (" debounceTimer" , 200 , pdFALSE, ( void *) 0 , DebounceTimerCallback);
323- debounceChargeTimer = xTimerCreate (" debounceTimerCharge" , 200 , pdFALSE, ( void *) 0 , DebounceTimerChargeCallback);
322+ debounceTimer = xTimerCreate (" debounceTimer" , 10 , pdFALSE, nullptr , DebounceTimerCallback);
323+ debounceChargeTimer = xTimerCreate (" debounceTimerCharge" , 200 , pdFALSE, nullptr , DebounceTimerChargeCallback);
324324
325325 // retrieve version stored by bootloader
326326 Pinetime::BootloaderVersion::SetVersion (NRF_TIMER2->CC [0 ]);
0 commit comments