[FL-667] Power saving: deep sleep in tickless state (#300)
* SYSTEM: tickless mode with deep sleep. * Move FreeRTOS ticks to lptim2. * API: move all sumbodules init routines to one place. * Timebase: working lptim2 at tick source. * API Timebase: lp-timer routines, timer access safe zones prediction and synchronization. * FreeRTOS: adjust configuration for tickless mode. * NFC: support for tickless mode. * API Timebase: improve tick error handling in IRQ. * Apploader: use insomnia mode to run applications. * BLE: prevent sleep while core2 starting. * HAL: nap while in insomnia mode. Co-authored-by: coreglitch <mail@s3f.ru>
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
#include "menu/menu_item.h"
|
||||
#include "applications.h"
|
||||
#include <assets_icons.h>
|
||||
#include <api-hal.h>
|
||||
|
||||
typedef struct {
|
||||
FuriApp* handler;
|
||||
@@ -37,6 +38,7 @@ static void input_callback(InputEvent* input_event, void* _ctx) {
|
||||
if(input_event->state && input_event->input == InputBack) {
|
||||
furiac_kill(ctx->handler);
|
||||
widget_enabled_set(ctx->widget, false);
|
||||
api_hal_timebase_insomnia_exit();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -49,6 +51,7 @@ static void handle_menu(void* _ctx) {
|
||||
|
||||
// TODO how to call this?
|
||||
// furiac_wait_libs(&FLIPPER_STARTUP[i].libs);
|
||||
api_hal_timebase_insomnia_enter();
|
||||
|
||||
ctx->state->current_app = ctx->app;
|
||||
ctx->state->handler = furiac_start(ctx->app->app, ctx->app->name, NULL);
|
||||
|
@@ -42,7 +42,7 @@ GuiEvent* gui_event_alloc() {
|
||||
|
||||
gui_event->timer = osTimerNew(gui_event_timer_callback, osTimerPeriodic, gui_event, NULL);
|
||||
assert(gui_event->timer);
|
||||
osTimerStart(gui_event->timer, 1000 / 10);
|
||||
// osTimerStart(gui_event->timer, 1024 / 4);
|
||||
|
||||
// Input
|
||||
gui_event->input_event_record = furi_open("input_events");
|
||||
|
@@ -1,4 +1,5 @@
|
||||
#include "nfc_worker_i.h"
|
||||
#include <api-hal.h>
|
||||
|
||||
NfcWorker* nfc_worker_alloc(osMessageQueueId_t message_queue) {
|
||||
NfcWorker* nfc_worker = furi_alloc(sizeof(NfcWorker));
|
||||
@@ -54,6 +55,8 @@ void nfc_worker_change_state(NfcWorker* nfc_worker, NfcWorkerState state) {
|
||||
void nfc_worker_task(void* context) {
|
||||
NfcWorker* nfc_worker = context;
|
||||
|
||||
api_hal_timebase_insomnia_enter();
|
||||
|
||||
rfalLowPowerModeStop();
|
||||
if(nfc_worker->state == NfcWorkerStatePoll) {
|
||||
nfc_worker_poll(nfc_worker);
|
||||
@@ -66,6 +69,7 @@ void nfc_worker_task(void* context) {
|
||||
|
||||
nfc_worker_change_state(nfc_worker, NfcWorkerStateReady);
|
||||
|
||||
api_hal_timebase_insomnia_exit();
|
||||
osThreadExit();
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user