BLE Spam refactor again to use scene manager

This commit is contained in:
Willy-JL
2023-10-19 03:08:23 +01:00
parent 13662663a5
commit b090d28282
7 changed files with 115 additions and 25 deletions

View File

@@ -0,0 +1,2 @@
ADD_SCENE(main, Main)
#include "../protocols/_scenes.h"

View File

@@ -0,0 +1,30 @@
#include "_setup.h"
// Generate scene on_enter handlers array
#define ADD_SCENE(name, id) scene_##name##_on_enter,
void (*const scene_on_enter_handlers[])(void*) = {
#include "_scenes.h"
};
#undef ADD_SCENE
// Generate scene on_event handlers array
#define ADD_SCENE(name, id) scene_##name##_on_event,
bool (*const scene_on_event_handlers[])(void*, SceneManagerEvent) = {
#include "_scenes.h"
};
#undef ADD_SCENE
// Generate scene on_exit handlers array
#define ADD_SCENE(name, id) scene_##name##_on_exit,
void (*const scene_on_exit_handlers[])(void*) = {
#include "_scenes.h"
};
#undef ADD_SCENE
// Initialize scene handlers configuration structure
const SceneManagerHandlers scene_handlers = {
.on_enter_handlers = scene_on_enter_handlers,
.on_event_handlers = scene_on_event_handlers,
.on_exit_handlers = scene_on_exit_handlers,
.scene_num = SceneCount,
};

View File

@@ -0,0 +1,28 @@
#pragma once
#include <gui/scene_manager.h>
// Generate scene id and total number
#define ADD_SCENE(name, id) Scene##id,
typedef enum {
#include "_scenes.h"
SceneCount,
} Scene;
#undef ADD_SCENE
extern const SceneManagerHandlers scene_handlers;
// Generate scene on_enter handlers declaration
#define ADD_SCENE(name, id) void scene_##name##_on_enter(void*);
#include "_scenes.h"
#undef ADD_SCENE
// Generate scene on_event handlers declaration
#define ADD_SCENE(name, id) bool scene_##name##_on_event(void*, SceneManagerEvent);
#include "_scenes.h"
#undef ADD_SCENE
// Generate scene on_exit handlers declaration
#define ADD_SCENE(name, id) void scene_##name##_on_exit(void*);
#include "_scenes.h"
#undef ADD_SCENE

View File

@@ -0,0 +1,16 @@
#include "../ble_spam.h"
void scene_main_on_enter(void* _ctx) {
Ctx* ctx = _ctx;
view_dispatcher_switch_to_view(ctx->view_dispatcher, ViewMain);
}
bool scene_main_on_event(void* _ctx, SceneManagerEvent event) {
UNUSED(_ctx);
UNUSED(event);
return false;
}
void scene_main_on_exit(void* _ctx) {
UNUSED(_ctx);
}