[FL-140] Core api dynamic records (#296)

* 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
* init records work
* try to implement record delete
* tests and flapp
* flapp subsystem
* new core functions to get app stat, simplify core code
* fix thread termination
* add strdup to core
* fix tests
* Refactoring: remove all unusued parts, update API usage, aggreagate API sources and headers, new record storage
* Refactoring: update furi record api usage, cleanup code
* Fix broken merge for freertos apps
* Core, Target: fix compilation warnings
* Drop firmware target local
* HAL Timebase, Power, Clock: semaphore guarded access to clock and power modes, better sleep mode.
* SD-Filesystem: wait for all deps to arrive before adding widget. Core, BLE: disable debug dump to serial.
* delete old app example-ipc
* delete old app fatfs list
* fix strobe app, add input header
* delete old display driver
* comment old app qr-code
* fix sd-card test, add forced widget update
* remove unused new core test
* increase heap to 128k
* comment and assert old core tests
* fix syntax

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
This commit is contained in:
DrZlo13
2021-01-21 02:09:26 +10:00
committed by GitHub
parent 6c4983c6b6
commit 8f9b2513ff
169 changed files with 1009 additions and 4535 deletions

View File

@@ -1,8 +1,7 @@
#include "canvas_i.h"
#include "icon_i.h"
#include <flipper.h>
#include <flipper_v2.h>
#include <furi.h>
struct Canvas {
u8g2_t fb;

View File

@@ -5,6 +5,10 @@
#include <gui/icon.h>
#include <assets_icons_i.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef enum {
ColorWhite = 0x00,
ColorBlack = 0x01,
@@ -91,3 +95,7 @@ void canvas_draw_line(Canvas* canvas, uint8_t x1, uint8_t y1, uint8_t x2, uint8_
* Draw glyph
*/
void canvas_draw_glyph(Canvas* canvas, uint8_t x, uint8_t y, uint16_t ch);
#ifdef __cplusplus
}
#endif

View File

@@ -3,6 +3,10 @@
#include <stdint.h>
#include "canvas.h"
#ifdef __cplusplus
extern "C" {
#endif
/*
* Draw scrollbar on canvas.
* width 3px, height equal to canvas height
@@ -17,3 +21,7 @@ void elements_scrollbar(Canvas* canvas, uint8_t pos, uint8_t total);
* @param width, height - frame width and height
*/
void elements_frame(Canvas* canvas, uint8_t x, uint8_t y, uint8_t width, uint8_t height);
#ifdef __cplusplus
}
#endif

View File

@@ -1,8 +1,7 @@
#include "gui.h"
#include "gui_i.h"
#include <flipper.h>
#include <flipper_v2.h>
#include <furi.h>
#include <m-array.h>
#include <stdio.h>
@@ -207,13 +206,9 @@ Gui* gui_alloc() {
void gui_task(void* p) {
Gui* gui = gui_alloc();
// Create FURI record
if(!furi_create("gui", gui)) {
printf("[gui_task] cannot create the gui record\n");
furiac_exit(NULL);
}
furiac_ready();
// Create FURI record
furi_record_create("gui", gui);
// Forever dispatch
while(1) {

View File

@@ -3,6 +3,10 @@
#include "widget.h"
#include "canvas.h"
#ifdef __cplusplus
extern "C" {
#endif
#define GUI_DISPLAY_WIDTH 128
#define GUI_DISPLAY_HEIGHT 64
@@ -40,3 +44,7 @@ void gui_add_widget(Gui* gui, Widget* widget, GuiLayer layer);
* @remarks thread safe
*/
void gui_remove_widget(Gui* gui, Widget* widget);
#ifdef __cplusplus
}
#endif

View File

@@ -1,6 +1,6 @@
#include "gui_event.h"
#include <flipper_v2.h>
#include <furi.h>
#define GUI_EVENT_MQUEUE_SIZE 8
@@ -45,7 +45,7 @@ GuiEvent* gui_event_alloc() {
// osTimerStart(gui_event->timer, 1024 / 4);
// Input
gui_event->input_event_record = furi_open("input_events");
gui_event->input_event_record = furi_record_open("input_events");
furi_check(gui_event->input_event_record != NULL);
subscribe_pubsub(gui_event->input_event_record, gui_event_input_events_callback, gui_event);

View File

@@ -3,6 +3,10 @@
#include <stdint.h>
#include <input/input.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef enum {
GuiMessageTypeRedraw = 0x00,
GuiMessageTypeInput = 0x01,
@@ -23,3 +27,7 @@ void gui_event_free(GuiEvent* gui_event);
void gui_event_messsage_send(GuiEvent* gui_event, GuiMessage* message);
GuiMessage gui_event_message_next(GuiEvent* gui_event);
#ifdef __cplusplus
}
#endif

View File

@@ -1,8 +1,6 @@
#include "icon_i.h"
#include <cmsis_os2.h>
#include <flipper.h>
#include <flipper_v2.h>
#include <furi.h>
Icon* icon_alloc(const IconData* data) {
Icon* icon = furi_alloc(sizeof(Icon));

View File

@@ -3,6 +3,10 @@
#include <stdint.h>
#include <stdbool.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct IconData IconData;
typedef struct Icon Icon;
@@ -41,3 +45,7 @@ void icon_start_animation(Icon* icon);
* Stop icon animation
*/
void icon_stop_animation(Icon* icon);
#ifdef __cplusplus
}
#endif

View File

@@ -1,5 +1,5 @@
#include "u8g2/u8g2.h"
#include "flipper.h"
#include <furi.h>
#include <main.h>
extern SPI_HandleTypeDef SPI_D;
@@ -34,7 +34,7 @@ uint8_t u8g2_gpio_and_delay_stm32(u8x8_t* u8x8, uint8_t msg, uint8_t arg_int, vo
// Function to define the logic level of the RESET line
case U8X8_MSG_GPIO_RESET:
#ifdef DEBUG
fuprintf(log, "[u8g2] rst %d\n", arg_int);
printf("[u8g2] rst %d\n", arg_int);
#endif
// TODO change it to FuriRecord pin
@@ -44,7 +44,7 @@ uint8_t u8g2_gpio_and_delay_stm32(u8x8_t* u8x8, uint8_t msg, uint8_t arg_int, vo
default:
#ifdef DEBUG
fufuprintf(log, "[u8g2] unknown io %d\n", msg);
printf("[u8g2] unknown io %d\n", msg);
#endif
return 0; //A message was received which is not implemented, return 0 to indicate an error
@@ -57,7 +57,7 @@ uint8_t u8x8_hw_spi_stm32(u8x8_t* u8x8, uint8_t msg, uint8_t arg_int, void* arg_
switch(msg) {
case U8X8_MSG_BYTE_SEND:
#ifdef DEBUG
fuprintf(log, "[u8g2] send %d bytes %02X\n", arg_int, ((uint8_t*)arg_ptr)[0]);
printf("[u8g2] send %d bytes %02X\n", arg_int, ((uint8_t*)arg_ptr)[0]);
#endif
// TODO change it to FuriRecord SPI
@@ -66,7 +66,7 @@ uint8_t u8x8_hw_spi_stm32(u8x8_t* u8x8, uint8_t msg, uint8_t arg_int, void* arg_
case U8X8_MSG_BYTE_SET_DC:
#ifdef DEBUG
fuprintf(log, "[u8g2] dc %d\n", arg_int);
printf("[u8g2] dc %d\n", arg_int);
#endif
// TODO change it to FuriRecord pin
@@ -76,7 +76,7 @@ uint8_t u8x8_hw_spi_stm32(u8x8_t* u8x8, uint8_t msg, uint8_t arg_int, void* arg_
case U8X8_MSG_BYTE_INIT:
#ifdef DEBUG
fuprintf(log, "[u8g2] init\n");
printf("[u8g2] init\n");
#endif
// TODO change it to FuriRecord pin
@@ -85,7 +85,7 @@ uint8_t u8x8_hw_spi_stm32(u8x8_t* u8x8, uint8_t msg, uint8_t arg_int, void* arg_
case U8X8_MSG_BYTE_START_TRANSFER:
#ifdef DEBUG
fuprintf(log, "[u8g2] start\n");
printf("[u8g2] start\n");
#endif
// TODO: SPI manager
@@ -98,7 +98,7 @@ uint8_t u8x8_hw_spi_stm32(u8x8_t* u8x8, uint8_t msg, uint8_t arg_int, void* arg_
case U8X8_MSG_BYTE_END_TRANSFER:
#ifdef DEBUG
fuprintf(log, "[u8g2] end\n");
printf("[u8g2] end\n");
#endif
asm("nop");
@@ -112,7 +112,7 @@ uint8_t u8x8_hw_spi_stm32(u8x8_t* u8x8, uint8_t msg, uint8_t arg_int, void* arg_
default:
#ifdef DEBUG
fuprintf(log, "[u8g2] unknown xfer %d\n", msg);
printf("[u8g2] unknown xfer %d\n", msg);
#endif
return 0;

View File

@@ -3,6 +3,10 @@
#include <input/input.h>
#include "canvas.h"
#ifdef __cplusplus
extern "C" {
#endif
/* Hides drawing widget */
#define VIEW_NONE 0xFFFFFFFF
/* Ignore navigation event */
@@ -127,3 +131,7 @@ void view_commit_model(View* view);
({ void __fn__ function_body __fn__; })(p); \
view_commit_model(view); \
}
#ifdef __cplusplus
}
#endif

View File

@@ -3,6 +3,10 @@
#include "view.h"
#include "gui.h"
#ifdef __cplusplus
extern "C" {
#endif
/* ViewDispatcher widget placement */
typedef enum {
ViewDispatcherTypeNone, /* Special layer for internal use only */
@@ -43,3 +47,7 @@ void view_dispatcher_attach_to_gui(
ViewDispatcher* view_dispatcher,
Gui* gui,
ViewDispatcherType type);
#ifdef __cplusplus
}
#endif

View File

@@ -2,7 +2,7 @@
#include "view_dispatcher.h"
#include "view_i.h"
#include <flipper_v2.h>
#include <furi.h>
#include <m-dict.h>
DICT_DEF2(ViewDict, uint32_t, M_DEFAULT_OPLIST, View*, M_PTR_OPLIST)

View File

@@ -2,7 +2,7 @@
#include "view.h"
#include "view_dispatcher_i.h"
#include <flipper_v2.h>
#include <furi.h>
typedef struct {
void* data;

View File

@@ -1,8 +1,6 @@
#include "widget_i.h"
#include <cmsis_os.h>
#include <flipper.h>
#include <flipper_v2.h>
#include <furi.h>
#include "gui.h"
#include "gui_i.h"
@@ -73,8 +71,6 @@ void widget_update(Widget* widget) {
void widget_gui_set(Widget* widget, Gui* gui) {
furi_assert(widget);
furi_assert(gui);
widget->gui = gui;
}

View File

@@ -3,6 +3,10 @@
#include <input/input.h>
#include "canvas.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef struct Widget Widget;
/*
@@ -65,3 +69,7 @@ void widget_input_callback_set(Widget* widget, WidgetInputCallback callback, voi
* Rendering will happen later after GUI system process signal.
*/
void widget_update(Widget* widget);
#ifdef __cplusplus
}
#endif