[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:
@@ -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;
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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) {
|
||||
|
@@ -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
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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));
|
||||
|
@@ -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
|
||||
|
@@ -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;
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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)
|
||||
|
@@ -2,7 +2,7 @@
|
||||
|
||||
#include "view.h"
|
||||
#include "view_dispatcher_i.h"
|
||||
#include <flipper_v2.h>
|
||||
#include <furi.h>
|
||||
|
||||
typedef struct {
|
||||
void* data;
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user