xremote_app.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. /*!
  2. * @file flipper-xremote/xremote_app.h
  3. @license This project is released under the GNU GPLv3 License
  4. * @copyright (c) 2023 Sandro Kalatozishvili (s.kalatoz@gmail.com)
  5. *
  6. * @brief Shared functionality and data types between the apps.
  7. */
  8. #pragma once
  9. #include <furi.h>
  10. #include <gui/gui.h>
  11. #include <gui/view.h>
  12. #include <gui/view_dispatcher.h>
  13. #include <gui/modules/submenu.h>
  14. #include <gui/modules/dialog_ex.h>
  15. #include <gui/modules/text_input.h>
  16. #include <gui/modules/variable_item_list.h>
  17. #include <notification/notification.h>
  18. #include <notification/notification_messages.h>
  19. #include <flipper_format/flipper_format.h>
  20. #include <storage/storage.h>
  21. #include <dialogs/dialogs.h>
  22. #include <infrared_worker.h>
  23. #include "views/xremote_common_view.h"
  24. #include "xc_icons.h"
  25. #define XREMOTE_APP_EXTENSION ".ir"
  26. #define XREMOTE_APP_FOLDER ANY_PATH("infrared")
  27. #define XREMOTE_APP_TEXT_MAX 128
  28. #define xremote_app_assert_void(cond) if (!cond) return
  29. #define xremote_app_assert(cond, var) if (!cond) return var
  30. typedef enum {
  31. XRemoteAppExitPress,
  32. XRemoteAppExitHold
  33. } XRemoteAppExit;
  34. typedef struct {
  35. ViewOrientation orientation;
  36. XRemoteAppExit exit_behavior;
  37. uint32_t repeat_count;
  38. } XRemoteAppSettings;
  39. XRemoteAppSettings* xremote_app_settings_alloc();
  40. void xremote_app_settings_free(XRemoteAppSettings* settings);
  41. bool xremote_app_settings_store(XRemoteAppSettings* settings);
  42. bool xremote_app_settings_load(XRemoteAppSettings* settings);
  43. typedef struct {
  44. XRemoteAppSettings* app_settings;
  45. NotificationApp* notifications;
  46. ViewDispatcher* view_dispatcher;
  47. FuriString* file_path;
  48. void* app_argument;
  49. Gui* gui;
  50. } XRemoteAppContext;
  51. XRemoteAppContext* xremote_app_context_alloc(void* arg);
  52. void xremote_app_context_free(XRemoteAppContext* ctx);
  53. const char* xremote_app_context_get_exit_str(XRemoteAppContext* ctx);
  54. void xremote_app_context_notify_led(XRemoteAppContext* app_ctx);
  55. void xremote_app_notification_blink(NotificationApp* notifications);
  56. bool xremote_app_send_signal(XRemoteAppContext* app_ctx, InfraredSignal* signal);
  57. typedef struct {
  58. XRemoteClearCallback on_clear;
  59. XRemoteAppContext* app_ctx;
  60. XRemoteViewID submenu_id;
  61. XRemoteViewID view_id;
  62. XRemoteView* view_ctx;
  63. Submenu* submenu;
  64. void *context;
  65. } XRemoteApp;
  66. void xremote_app_submenu_add(XRemoteApp* app, const char *name, uint32_t index, SubmenuItemCallback callback);
  67. void xremote_app_submenu_alloc(XRemoteApp* app, uint32_t index, ViewNavigationCallback prev_cb);
  68. void xremote_app_submenu_free(XRemoteApp *app);
  69. void xremote_app_view_alloc(XRemoteApp *app, uint32_t view_id, XRemoteViewAllocator allocator);
  70. void xremote_app_view_free(XRemoteApp* app);
  71. void xremote_app_view_set_previous_callback(XRemoteApp* app, ViewNavigationCallback callback);
  72. void xremote_app_set_view_context(XRemoteApp* app, void *context, XRemoteClearCallback on_clear);
  73. void xremote_app_set_user_context(XRemoteApp* app, void *context, XRemoteClearCallback on_clear);
  74. void xremote_app_user_context_free(XRemoteApp* app);
  75. bool xremote_app_has_view(XRemoteApp *app, uint32_t view_id);
  76. void xremote_app_switch_to_view(XRemoteApp *app, uint32_t view_id);
  77. void xremote_app_switch_to_submenu(XRemoteApp *app);
  78. XRemoteApp* xremote_app_alloc(XRemoteAppContext *ctx);
  79. void xremote_app_free(XRemoteApp* app);