Explorar el Código

Initial alloc and free code

TollyH hace 2 años
padre
commit
c066d22c04

+ 39 - 0
mfc_editor_app.c

@@ -1,7 +1,46 @@
 #include "mfc_editor_app_i.h"
 
+MfcEditorApp* mfc_editor_app_alloc() {
+    MfcEditorApp* instance = malloc(sizeof(MfcEditorApp));
+
+    instance->view_dispatcher = view_dispatcher_alloc();
+    instance->scene_manager = scene_manager_alloc(&mfc_editor_scene_handlers, instance);
+    view_dispatcher_enable_queue(instance->view_dispatcher);
+    view_dispatcher_set_event_callback_context(instance->view_dispatcher, instance);
+
+    instance->gui = furi_record_open(RECORD_GUI);
+    view_dispatcher_attach_to_gui(
+        instance->view_dispatcher, instance->gui, ViewDispatcherTypeFullscreen);
+
+    instance->nfc_device = nfc_device_alloc();
+
+    return instance;
+}
+
+void mfc_editor_app_free(MfcEditorApp* instance) {
+    furi_assert(instance);
+
+    view_dispatcher_free(instance->view_dispatcher);
+    scene_manager_free(instance->scene_manager);
+
+    furi_record_close(RECORD_GUI);
+    instance->gui = NULL;
+
+    nfc_device_free(instance->nfc_device);
+
+    free(instance);
+}
+
 int32_t mfc_editor_app(void* p) {
     UNUSED(p);
 
+    MfcEditorApp* instance = mfc_editor_app_alloc();
+
+    scene_manager_next_scene(instance->scene_manager, MfcEditorSceneStart);
+
+    view_dispatcher_run(instance->view_dispatcher);
+
+    mfc_editor_app_free(instance);
+
     return 0;
 }

+ 3 - 0
mfc_editor_app.h

@@ -0,0 +1,3 @@
+#pragma once
+
+typedef struct MfcEditorApp MfcEditorApp;

+ 18 - 0
mfc_editor_app_i.h

@@ -1,3 +1,21 @@
 #pragma once
 
 #include <furi.h>
+
+#include <gui/gui.h>
+#include <gui/scene_manager.h>
+#include <gui/view_dispatcher.h>
+
+#include <nfc/nfc.h>
+#include <nfc/nfc_device.h>
+
+#include "mfc_editor_app.h"
+#include "scenes/mfc_editor_scene.h"
+
+struct MfcEditorApp {
+    ViewDispatcher* view_dispatcher;
+    SceneManager* scene_manager;
+    Gui* gui;
+
+    NfcDevice* nfc_device;
+};

+ 30 - 0
scenes/mfc_editor_scene.c

@@ -0,0 +1,30 @@
+#include "mfc_editor_scene.h"
+
+// Generate scene on_enter handlers array
+#define ADD_SCENE(prefix, name, id) prefix##_scene_##name##_on_enter,
+void (*const mfc_editor_on_enter_handlers[])(void*) = {
+#include "mfc_editor_scene_config.h"
+};
+#undef ADD_SCENE
+
+// Generate scene on_event handlers array
+#define ADD_SCENE(prefix, name, id) prefix##_scene_##name##_on_event,
+bool (*const mfc_editor_on_event_handlers[])(void* context, SceneManagerEvent event) = {
+#include "mfc_editor_scene_config.h"
+};
+#undef ADD_SCENE
+
+// Generate scene on_exit handlers array
+#define ADD_SCENE(prefix, name, id) prefix##_scene_##name##_on_exit,
+void (*const mfc_editor_on_exit_handlers[])(void* context) = {
+#include "mfc_editor_scene_config.h"
+};
+#undef ADD_SCENE
+
+// Initialize scene handlers configuration structure
+const SceneManagerHandlers mfc_editor_scene_handlers = {
+    .on_enter_handlers = mfc_editor_on_enter_handlers,
+    .on_event_handlers = mfc_editor_on_event_handlers,
+    .on_exit_handlers = mfc_editor_on_exit_handlers,
+    .scene_num = MfcEditorSceneNum,
+};

+ 29 - 0
scenes/mfc_editor_scene.h

@@ -0,0 +1,29 @@
+#pragma once
+
+#include <gui/scene_manager.h>
+
+// Generate scene id and total number
+#define ADD_SCENE(prefix, name, id) MfcEditorScene##id,
+typedef enum {
+#include "mfc_editor_scene_config.h"
+    MfcEditorSceneNum,
+} MfcEditorScene;
+#undef ADD_SCENE
+
+extern const SceneManagerHandlers mfc_editor_scene_handlers;
+
+// Generate scene on_enter handlers declaration
+#define ADD_SCENE(prefix, name, id) void prefix##_scene_##name##_on_enter(void*);
+#include "mfc_editor_scene_config.h"
+#undef ADD_SCENE
+
+// Generate scene on_event handlers declaration
+#define ADD_SCENE(prefix, name, id) \
+    bool prefix##_scene_##name##_on_event(void* context, SceneManagerEvent event);
+#include "mfc_editor_scene_config.h"
+#undef ADD_SCENE
+
+// Generate scene on_exit handlers declaration
+#define ADD_SCENE(prefix, name, id) void prefix##_scene_##name##_on_exit(void* context);
+#include "mfc_editor_scene_config.h"
+#undef ADD_SCENE

+ 1 - 0
scenes/mfc_editor_scene_config.h

@@ -0,0 +1 @@
+ADD_SCENE(mfc_editor, start, Start)

+ 23 - 0
scenes/mfc_editor_scene_start.c

@@ -0,0 +1,23 @@
+#include "../mfc_editor_app_i.h"
+
+void mfc_editor_scene_start_on_enter(void* context) {
+    MfcEditorApp* instance = context;
+    UNUSED(instance);
+    UNUSED(context);
+}
+
+bool mfc_editor_scene_start_on_event(void* context, SceneManagerEvent event) {
+    MfcEditorApp* instance = context;
+    UNUSED(instance);
+    UNUSED(context);
+    UNUSED(event);
+    bool consumed = false;
+
+    return consumed;
+}
+
+void mfc_editor_scene_start_on_exit(void* context) {
+    MfcEditorApp* instance = context;
+    UNUSED(instance);
+    UNUSED(context);
+}