Skip to content

Commit

Permalink
Merge pull request #527 from ESurge/420
Browse files Browse the repository at this point in the history
Big update + New Features
  • Loading branch information
RogueMaster authored Feb 9, 2023
2 parents 8ac992f + 90fe45d commit a42fd88
Show file tree
Hide file tree
Showing 74 changed files with 2,681 additions and 470 deletions.
5 changes: 3 additions & 2 deletions applications/main/subghz/subghz_cli.c
Original file line number Diff line number Diff line change
Expand Up @@ -602,7 +602,8 @@ static void subghz_cli_command_encrypt_raw(Cli* cli, FuriString* args) {
furi_string_free(source);
}

static void subghz_cli_command_chat(Cli* cli, FuriString* args) {
static void subghz_cli_command_chat(Cli* cli, FuriString* args, void* context) {
UNUSED(context);
uint32_t frequency = 433920000;

if(furi_string_size(args)) {
Expand Down Expand Up @@ -791,7 +792,7 @@ static void subghz_cli_command(Cli* cli, FuriString* args, void* context) {
}

if(furi_string_cmp_str(cmd, "chat") == 0) {
subghz_cli_command_chat(cli, args);
subghz_cli_command_chat(cli, args, context);
break;
}

Expand Down
3 changes: 2 additions & 1 deletion applications/plugins/namechanger/namechanger.c
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,8 @@ void namechanger_text_store_set(NameChanger* namechanger, const char* text, ...)
va_end(args);
}

int32_t namechanger_app() {
int32_t namechanger_app(void* p) {
UNUSED(p);
NameChanger* namechanger = namechanger_alloc();

view_dispatcher_attach_to_gui(
Expand Down
17 changes: 11 additions & 6 deletions applications/services/bt/bt_service/bt.c
Original file line number Diff line number Diff line change
Expand Up @@ -296,12 +296,17 @@ static void bt_on_key_storage_change_callback(uint8_t* addr, uint16_t size, void
}

static void bt_statusbar_update(Bt* bt) {
if(bt->status == BtStatusAdvertising) {
view_port_set_width(bt->statusbar_view_port, icon_get_width(&I_Bluetooth_Idle_5x8));
view_port_enabled_set(bt->statusbar_view_port, true);
} else if(bt->status == BtStatusConnected) {
view_port_set_width(bt->statusbar_view_port, icon_get_width(&I_Bluetooth_Connected_16x8));
view_port_enabled_set(bt->statusbar_view_port, true);
if(bt->bt_settings.iconshow == true) {
if(bt->status == BtStatusAdvertising) {
view_port_set_width(bt->statusbar_view_port, icon_get_width(&I_Bluetooth_Idle_5x8));
view_port_enabled_set(bt->statusbar_view_port, true);
} else if(bt->status == BtStatusConnected) {
view_port_set_width(
bt->statusbar_view_port, icon_get_width(&I_Bluetooth_Connected_16x8));
view_port_enabled_set(bt->statusbar_view_port, true);
} else {
view_port_enabled_set(bt->statusbar_view_port, false);
}
} else {
view_port_enabled_set(bt->statusbar_view_port, false);
}
Expand Down
1 change: 1 addition & 0 deletions applications/services/bt/bt_settings.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ extern "C" {

typedef struct {
bool enabled;
bool iconshow;
} BtSettings;

bool bt_settings_load(BtSettings* bt_settings);
Expand Down
61 changes: 61 additions & 0 deletions applications/services/desktop/desktop.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,22 @@ static void desktop_loader_callback(const void* message, void* context) {
view_dispatcher_send_custom_event(desktop->view_dispatcher, DesktopGlobalAfterAppFinished);
}
}

static void storage_Desktop_status_callback(const void* message, void* context) {
furi_assert(context);
Desktop* desktop = context;
const StorageEvent* storage_event = message;

if((storage_event->type == StorageEventTypeCardUnmount) ||
(storage_event->type == StorageEventTypeCardMountError)) {
view_port_enabled_set(desktop->sdcard_icon_viewport, false);
}

if(storage_event->type == StorageEventTypeCardMount) {
view_port_enabled_set(desktop->sdcard_icon_viewport, desktop->settings.sdcard);
}
}

static void desktop_lock_icon_draw_callback(Canvas* canvas, void* context) {
UNUSED(context);
furi_assert(canvas);
Expand All @@ -44,6 +60,22 @@ static void desktop_dummy_mode_icon_draw_callback(Canvas* canvas, void* context)
canvas_draw_icon(canvas, 0, 0, &I_GameMode_11x8);
}

static void desktop_topbar_icon_draw_callback(Canvas* canvas, void* context) {
UNUSED(context);
furi_assert(canvas);

canvas_set_bitmap_mode(canvas, 1);
canvas_draw_icon(canvas, 0, 0, &I_Background_128x11);
canvas_set_bitmap_mode(canvas, 0);
}

static void desktop_sdcard_icon_draw_callback(Canvas* canvas, void* context) {
UNUSED(context);
furi_assert(canvas);

canvas_draw_icon(canvas, 0, 0, &I_SDcardMounted_11x8);
}

static bool desktop_custom_event_callback(void* context, uint32_t event) {
furi_assert(context);
Desktop* desktop = (Desktop*)context;
Expand Down Expand Up @@ -245,6 +277,22 @@ Desktop* desktop_alloc() {
view_port_enabled_set(desktop->dummy_mode_icon_viewport, false);
gui_add_view_port(desktop->gui, desktop->dummy_mode_icon_viewport, GuiLayerStatusBarLeft);

// Top bar icon
desktop->topbar_icon_viewport = view_port_alloc();
view_port_set_width(desktop->topbar_icon_viewport, icon_get_width(&I_Background_128x11));
view_port_draw_callback_set(
desktop->topbar_icon_viewport, desktop_topbar_icon_draw_callback, desktop);
view_port_enabled_set(desktop->topbar_icon_viewport, false);
gui_add_view_port(desktop->gui, desktop->topbar_icon_viewport, GuiLayerStatusBarTop);

// SD card icon hack
desktop->sdcard_icon_viewport = view_port_alloc();
view_port_set_width(desktop->sdcard_icon_viewport, icon_get_width(&I_SDcardMounted_11x8));
view_port_draw_callback_set(
desktop->sdcard_icon_viewport, desktop_sdcard_icon_draw_callback, desktop);
view_port_enabled_set(desktop->sdcard_icon_viewport, false);
gui_add_view_port(desktop->gui, desktop->sdcard_icon_viewport, GuiLayerStatusBarLeft);

// Special case: autostart application is already running
desktop->loader = furi_record_open(RECORD_LOADER);
if(loader_is_locked(desktop->loader) &&
Expand All @@ -262,6 +310,11 @@ Desktop* desktop_alloc() {
desktop->auto_lock_timer =
furi_timer_alloc(desktop_auto_lock_timer_callback, FuriTimerTypeOnce, desktop);

Storage* storage = furi_record_open(RECORD_STORAGE);
desktop->sub = furi_pubsub_subscribe(
storage_get_pubsub(storage), storage_Desktop_status_callback, desktop);
furi_record_close(RECORD_STORAGE);

return desktop;
}

Expand All @@ -276,6 +329,10 @@ void desktop_free(Desktop* desktop) {
desktop->input_events_subscription = NULL;
}

Storage* storage = furi_record_open(RECORD_STORAGE);
furi_pubsub_unsubscribe(storage_get_pubsub(storage), desktop->sub);
furi_record_close(RECORD_STORAGE);

desktop->loader = NULL;
desktop->input_events_pubsub = NULL;
furi_record_close(RECORD_LOADER);
Expand Down Expand Up @@ -338,6 +395,10 @@ int32_t desktop_srv(void* p) {
DESKTOP_SETTINGS_SAVE(&desktop->settings);
}

view_port_enabled_set(desktop->topbar_icon_viewport, desktop->settings.top_bar);

view_port_enabled_set(desktop->sdcard_icon_viewport, desktop->settings.sdcard);

view_port_enabled_set(desktop->dummy_mode_icon_viewport, desktop->settings.dummy_mode);
desktop_main_set_dummy_mode_state(desktop->main_view, desktop->settings.dummy_mode);
animation_manager_set_dummy_mode_state(
Expand Down
3 changes: 3 additions & 0 deletions applications/services/desktop/desktop_i.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,8 @@ struct Desktop {

ViewPort* lock_icon_viewport;
ViewPort* dummy_mode_icon_viewport;
ViewPort* topbar_icon_viewport;
ViewPort* sdcard_icon_viewport;

AnimationManager* animation_manager;

Expand All @@ -68,6 +70,7 @@ struct Desktop {
FuriPubSubSubscription* app_start_stop_subscription;
FuriPubSub* input_events_pubsub;
FuriPubSubSubscription* input_events_subscription;
FuriPubSubSubscription* sub;
FuriTimer* auto_lock_timer;
};

Expand Down
3 changes: 3 additions & 0 deletions applications/services/desktop/desktop_settings.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
#define DISPLAY_BATTERY_RETRO_3 3
#define DISPLAY_BATTERY_RETRO_5 4
#define DISPLAY_BATTERY_BAR_PERCENT 5
#define DISPLAY_BATTERY_NONE 6

#define FAP_LOADER_APP_NAME "Applications"

Expand All @@ -64,4 +65,6 @@ typedef struct {
uint8_t displayBatteryPercentage;
bool is_dumbmode;
uint8_t dummy_mode;
bool top_bar;
bool sdcard;
} DesktopSettings;
90 changes: 68 additions & 22 deletions applications/services/desktop/scenes/desktop_scene_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
#include <furi_hal.h>
#include "applications/services/applications.h"
#include <assets_icons.h>
#include <storage/storage.h>
#include <loader/loader.h>

#include "../desktop_i.h"
Expand All @@ -13,7 +14,17 @@

#define TAG "DesktopSrv"

#define CLOCK_APP EXT_PATH("/apps/Main/Clock.fap")
#define CLOCK_APP EXT_PATH("apps/Main/Clock.fap")
#define PASSPORT_APP EXT_PATH("apps/Main/Passport.fap")
#define SNAKE_APP EXT_PATH("apps/Games/Snake.fap")
#define IMPROVED_2048_APP EXT_PATH("apps/Games/2048_improved.fap")
#define ZOMBIEZ_APP EXT_PATH("apps/Games/Zombiez.fap")
#define TETRIS_APP EXT_PATH("apps/Games/Tetris.fap")
#define DOOM_APP EXT_PATH("apps/Games/DOOM.fap")
#define DICE_APP EXT_PATH("apps/Games/Dice.fap")
#define ARKANOID_APP EXT_PATH("apps/Games/Arkanoid.fap")
#define HEAP_DEFENCE_APP EXT_PATH("apps/Games/Heap_Defence.fap")
#define SUBGHZ_REMOTE_APP EXT_PATH("apps/Main/SubGHz_Remote.fap")

static void desktop_scene_main_new_idle_animation_callback(void* context) {
furi_assert(context);
Expand Down Expand Up @@ -69,9 +80,21 @@ static void desktop_scene_main_open_app_or_profile(Desktop* desktop, const char*
if(status == LoaderStatusOk) break;
FURI_LOG_E(TAG, "loader_start failed: %d", status);

status = loader_start(desktop->loader, "Passport", NULL);
if(status != LoaderStatusOk) {
FURI_LOG_E(TAG, "loader_start failed: %d", status);
Storage* storage = furi_record_open(RECORD_STORAGE);
if(storage_file_exists(storage, PASSPORT_APP)) {
furi_record_close(RECORD_STORAGE);
LoaderStatus status = loader_start(desktop->loader, FAP_LOADER_APP_NAME, PASSPORT_APP);

if(status != LoaderStatusOk) {
FURI_LOG_E(TAG, "loader_start failed: %d", status);
}
} else {
furi_record_close(RECORD_STORAGE);
LoaderStatus status = loader_start(desktop->loader, "Passport", NULL);

if(status != LoaderStatusOk) {
FURI_LOG_E(TAG, "loader_start failed: %d", status);
}
}
} while(false);
}
Expand Down Expand Up @@ -193,57 +216,80 @@ bool desktop_scene_main_on_event(void* context, SceneManagerEvent event) {
break;
case DesktopAnimationEventInteractAnimation:
if(!animation_manager_interact_process(desktop->animation_manager)) {
LoaderStatus status = loader_start(desktop->loader, "Passport", NULL);
if(status != LoaderStatusOk) {
FURI_LOG_E(TAG, "loader_start failed: %d", status);
Storage* storage = furi_record_open(RECORD_STORAGE);
if(storage_file_exists(storage, PASSPORT_APP)) {
furi_record_close(RECORD_STORAGE);
LoaderStatus status =
loader_start(desktop->loader, FAP_LOADER_APP_NAME, PASSPORT_APP);

if(status != LoaderStatusOk) {
FURI_LOG_E(TAG, "loader_start failed: %d", status);
}
} else {
furi_record_close(RECORD_STORAGE);
LoaderStatus status = loader_start(desktop->loader, "Passport", NULL);

if(status != LoaderStatusOk) {
FURI_LOG_E(TAG, "loader_start failed: %d", status);
}
}
}
consumed = true;
break;
case DesktopMainEventOpenPassport: {
LoaderStatus status = loader_start(desktop->loader, "Passport", NULL);
if(status != LoaderStatusOk) {
FURI_LOG_E(TAG, "loader_start failed: %d", status);
Storage* storage = furi_record_open(RECORD_STORAGE);
if(storage_file_exists(storage, PASSPORT_APP)) {
furi_record_close(RECORD_STORAGE);
LoaderStatus status =
loader_start(desktop->loader, FAP_LOADER_APP_NAME, PASSPORT_APP);

if(status != LoaderStatusOk) {
FURI_LOG_E(TAG, "loader_start failed: %d", status);
}
} else {
furi_record_close(RECORD_STORAGE);
LoaderStatus status = loader_start(desktop->loader, "Passport", NULL);

if(status != LoaderStatusOk) {
FURI_LOG_E(TAG, "loader_start failed: %d", status);
}
}
break;
}
case DesktopMainEventOpenSnake: {
desktop_scene_main_open_app_or_profile(desktop, EXT_PATH("/apps/Games/Snake.fap"));
desktop_scene_main_open_app_or_profile(desktop, SNAKE_APP);
break;
}
case DesktopMainEventOpen2048: {
desktop_scene_main_open_app_or_profile(
desktop, EXT_PATH("/apps/Games/2048_improved.fap"));
desktop_scene_main_open_app_or_profile(desktop, IMPROVED_2048_APP);
break;
}
case DesktopMainEventOpenZombiez: {
desktop_scene_main_open_app_or_profile(desktop, EXT_PATH("/apps/Games/Zombiez.fap"));
desktop_scene_main_open_app_or_profile(desktop, ZOMBIEZ_APP);
break;
}
case DesktopMainEventOpenTetris: {
desktop_scene_main_open_app_or_profile(desktop, EXT_PATH("/apps/Games/Tetris.fap"));
desktop_scene_main_open_app_or_profile(desktop, TETRIS_APP);
break;
}
case DesktopMainEventOpenDOOM: {
desktop_scene_main_open_app_or_profile(desktop, EXT_PATH("/apps/Games/DOOM.fap"));
desktop_scene_main_open_app_or_profile(desktop, DOOM_APP);
break;
}
case DesktopMainEventOpenDice: {
desktop_scene_main_open_app_or_profile(desktop, EXT_PATH("/apps/Games/Dice.fap"));
desktop_scene_main_open_app_or_profile(desktop, DICE_APP);
break;
}
case DesktopMainEventOpenArkanoid: {
desktop_scene_main_open_app_or_profile(desktop, EXT_PATH("/apps/Games/Arkanoid.fap"));
desktop_scene_main_open_app_or_profile(desktop, ARKANOID_APP);
break;
}
case DesktopMainEventOpenHeap: {
desktop_scene_main_open_app_or_profile(
desktop, EXT_PATH("/apps/Games/Heap_Defence.fap"));
desktop_scene_main_open_app_or_profile(desktop, HEAP_DEFENCE_APP);
break;
}
case DesktopMainEventOpenSubRemote: {
desktop_scene_main_open_app_or_profile(
desktop, EXT_PATH("/apps/Main/SubGHz_Remote.fap"));
desktop_scene_main_open_app_or_profile(desktop, SUBGHZ_REMOTE_APP);
break;
}
case DesktopMainEventOpenClock: {
Expand Down
4 changes: 2 additions & 2 deletions applications/services/desktop/views/desktop_view_lock_menu.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@

#define LOCK_MENU_ITEMS_NB 5

static void desktop_view_lock_menu_dumbmode_changed(bool isThisGameMode) {
/*static void desktop_view_lock_menu_dumbmode_changed(bool isThisGameMode) {
DesktopSettingsApp* app = malloc(sizeof(DesktopSettingsApp));
DESKTOP_SETTINGS_LOAD(&app->settings);
app->settings.is_dumbmode = isThisGameMode;
DESKTOP_SETTINGS_SAVE(&app->settings);
}
}*/

typedef enum {
DesktopLockMenuIndexLock,
Expand Down
Loading

0 comments on commit a42fd88

Please sign in to comment.