Skip to content

Commit

Permalink
post merge fixes p2 [ci skip]
Browse files Browse the repository at this point in the history
  • Loading branch information
xMasterX committed Mar 25, 2024
1 parent 7c0939a commit fda8370
Show file tree
Hide file tree
Showing 11 changed files with 226 additions and 123 deletions.
2 changes: 1 addition & 1 deletion applications/main/bad_usb/bad_usb_app_i.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
#include "views/bad_usb_view.h"
#include <furi_hal_usb.h>

#define BAD_USB_APP_BASE_FOLDER ANY_PATH("badusb")
#define BAD_USB_APP_BASE_FOLDER EXT_PATH("badusb")
#define BAD_USB_APP_PATH_LAYOUT_FOLDER BAD_USB_APP_BASE_FOLDER "/assets/layouts"
#define BAD_USB_APP_SCRIPT_EXTENSION ".txt"
#define BAD_USB_APP_LAYOUT_EXTENSION ".kl"
Expand Down
87 changes: 78 additions & 9 deletions applications/main/infrared/infrared_app.c
Original file line number Diff line number Diff line change
@@ -1,14 +1,25 @@
#include "infrared_app_i.h"

#include <furi_hal_power.h>

#include <string.h>
#include <toolbox/path.h>
#include <toolbox/saved_struct.h>
#include <dolphin/dolphin.h>

#define TAG "InfraredApp"

#define INFRARED_TX_MIN_INTERVAL_MS (50U)
#define INFRARED_TASK_STACK_SIZE (2048UL)

#define INFRARED_SETTINGS_PATH EXT_PATH("infrared/.infrared.settings")
#define INFRARED_SETTINGS_VERSION (0)
#define INFRARED_SETTINGS_MAGIC (0x1F)

typedef struct {
uint8_t tx_pin;
} InfraredSettings;

static const NotificationSequence*
infrared_notification_sequences[InfraredNotificationMessageCount] = {
&sequence_success,
Expand Down Expand Up @@ -174,19 +185,19 @@ static InfraredApp* infrared_alloc(void) {
view_dispatcher_add_view(
view_dispatcher, InfraredViewDialogEx, dialog_ex_get_view(infrared->dialog_ex));

infrared->variable_item_list = variable_item_list_alloc();
view_dispatcher_add_view(
infrared->view_dispatcher,
InfraredViewVariableItemList,
variable_item_list_get_view(infrared->variable_item_list));

infrared->button_menu = button_menu_alloc();
view_dispatcher_add_view(
view_dispatcher, InfraredViewButtonMenu, button_menu_get_view(infrared->button_menu));

infrared->popup = popup_alloc();
view_dispatcher_add_view(view_dispatcher, InfraredViewPopup, popup_get_view(infrared->popup));

infrared->var_item_list = variable_item_list_alloc();
view_dispatcher_add_view(
view_dispatcher,
InfraredViewVariableList,
variable_item_list_get_view(infrared->var_item_list));

infrared->view_stack = view_stack_alloc();
view_dispatcher_add_view(
view_dispatcher, InfraredViewStack, view_stack_get_view(infrared->view_stack));
Expand Down Expand Up @@ -237,15 +248,15 @@ static void infrared_free(InfraredApp* infrared) {
view_dispatcher_remove_view(view_dispatcher, InfraredViewDialogEx);
dialog_ex_free(infrared->dialog_ex);

view_dispatcher_remove_view(infrared->view_dispatcher, InfraredViewVariableItemList);
variable_item_list_free(infrared->variable_item_list);

view_dispatcher_remove_view(view_dispatcher, InfraredViewButtonMenu);
button_menu_free(infrared->button_menu);

view_dispatcher_remove_view(view_dispatcher, InfraredViewPopup);
popup_free(infrared->popup);

view_dispatcher_remove_view(view_dispatcher, InfraredViewVariableList);
variable_item_list_free(infrared->var_item_list);

view_dispatcher_remove_view(view_dispatcher, InfraredViewStack);
view_stack_free(infrared->view_stack);

Expand Down Expand Up @@ -440,6 +451,60 @@ void infrared_show_error_message(const InfraredApp* infrared, const char* fmt, .
va_end(args);
}

void infrared_set_tx_pin(InfraredApp* infrared, FuriHalInfraredTxPin tx_pin) {
if(tx_pin < FuriHalInfraredTxPinMax) {
furi_hal_infrared_set_tx_output(tx_pin);
} else {
FuriHalInfraredTxPin tx_pin_detected = furi_hal_infrared_detect_tx_output();
furi_hal_infrared_set_tx_output(tx_pin_detected);
if(tx_pin_detected != FuriHalInfraredTxPinInternal) {
infrared_enable_otg(infrared, true);
}
}

infrared->app_state.tx_pin = tx_pin;
}

void infrared_enable_otg(InfraredApp* infrared, bool enable) {
if(enable) {
furi_hal_power_enable_otg();
} else {
furi_hal_power_disable_otg();
}
infrared->app_state.is_otg_enabled = enable;
}

static void infrared_load_settings(InfraredApp* infrared) {
InfraredSettings settings = {0};

if(!saved_struct_load(
INFRARED_SETTINGS_PATH,
&settings,
sizeof(InfraredSettings),
INFRARED_SETTINGS_MAGIC,
INFRARED_SETTINGS_VERSION)) {
FURI_LOG_D(TAG, "Failed to load settings, using defaults");
infrared_save_settings(infrared);
}

infrared_set_tx_pin(infrared, settings.tx_pin);
}

void infrared_save_settings(InfraredApp* infrared) {
InfraredSettings settings = {
.tx_pin = infrared->app_state.tx_pin,
};

if(!saved_struct_save(
INFRARED_SETTINGS_PATH,
&settings,
sizeof(InfraredSettings),
INFRARED_SETTINGS_MAGIC,
INFRARED_SETTINGS_VERSION)) {
FURI_LOG_E(TAG, "Failed to save settings");
}
}

void infrared_signal_received_callback(void* context, InfraredWorkerSignal* received_signal) {
furi_assert(context);
InfraredApp* infrared = context;
Expand Down Expand Up @@ -480,6 +545,7 @@ void infrared_popup_closed_callback(void* context) {
int32_t infrared_app(void* p) {
InfraredApp* infrared = infrared_alloc();

infrared_load_settings(infrared);
infrared_make_app_folder(infrared);

bool is_remote_loaded = false;
Expand Down Expand Up @@ -522,6 +588,9 @@ int32_t infrared_app(void* p) {

view_dispatcher_run(infrared->view_dispatcher);

infrared_set_tx_pin(infrared, FuriHalInfraredTxPinInternal);
infrared_enable_otg(infrared, false);
infrared_free(infrared);

return 0;
}
35 changes: 32 additions & 3 deletions applications/main/infrared/infrared_app_i.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
*/
#pragma once

#include <furi_hal_infrared.h>

#include <gui/gui.h>
#include <gui/view.h>
#include <assets_icons.h>
Expand All @@ -25,7 +27,6 @@
#include <dialogs/dialogs.h>

#include <notification/notification_messages.h>

#include <infrared/worker/infrared_worker.h>

#include "infrared_app.h"
Expand Down Expand Up @@ -83,11 +84,13 @@ typedef struct {
bool is_learning_new_remote; /**< Learning new remote or adding to an existing one. */
bool is_debug_enabled; /**< Whether to enable or disable debugging features. */
bool is_transmitting; /**< Whether a signal is currently being transmitted. */
bool is_otg_enabled; /**< Whether OTG power (external 5V) is enabled. */
InfraredEditTarget edit_target : 8; /**< Selected editing target (a remote or a button). */
InfraredEditMode edit_mode : 8; /**< Selected editing operation (rename or delete). */
int32_t current_button_index; /**< Selected button index (move destination). */
int32_t prev_button_index; /**< Previous button index (move source). */
uint32_t last_transmit_time; /**< Lat time a signal was transmitted. */
FuriHalInfraredTxPin tx_pin;
} InfraredAppState;

/**
Expand All @@ -111,7 +114,7 @@ struct InfraredApp {
DialogEx* dialog_ex; /**< Standard view for displaying dialogs. */
ButtonMenu* button_menu; /**< Custom view for interacting with IR remotes. */
Popup* popup; /**< Standard view for displaying messages. */
VariableItemList* variable_item_list;
VariableItemList* var_item_list; /**< Standard view for displaying menus of choice items. */

ViewStack* view_stack; /**< Standard view for displaying stacked interfaces. */
InfraredDebugView* debug_view; /**< Custom view for displaying debug information. */
Expand Down Expand Up @@ -140,10 +143,10 @@ typedef enum {
InfraredViewDialogEx,
InfraredViewButtonMenu,
InfraredViewPopup,
InfraredViewVariableList,
InfraredViewStack,
InfraredViewDebugView,
InfraredViewMove,
InfraredViewVariableItemList,
InfraredViewLoading,
} InfraredView;

Expand Down Expand Up @@ -276,6 +279,32 @@ void infrared_play_notification_message(
void infrared_show_error_message(const InfraredApp* infrared, const char* fmt, ...)
_ATTRIBUTE((__format__(__printf__, 2, 3)));

/**
* @brief Set which pin will be used to transmit infrared signals.
*
* Setting tx_pin to InfraredTxPinInternal will enable transmission via
* the built-in infrared LEDs.
*
* @param[in] infrared pointer to the application instance.
* @param[in] tx_pin pin to be used for signal transmission.
*/
void infrared_set_tx_pin(InfraredApp* infrared, FuriHalInfraredTxPin tx_pin);

/**
* @brief Enable or disable 5V at the GPIO pin 1.
*
* @param[in] infrared pointer to the application instance.
* @param[in] enable boolean value corresponding to OTG state (true = enable, false = disable)
*/
void infrared_enable_otg(InfraredApp* infrared, bool enable);

/**
* @brief Save current settings to a file.
*
* @param[in] infrared pointer to the application instance.
*/
void infrared_save_settings(InfraredApp* infrared);

/**
* @brief Common received signal callback.
*
Expand Down
3 changes: 3 additions & 0 deletions applications/main/infrared/infrared_custom_event.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ enum InfraredCustomEventType {
InfraredCustomEventTypeRpcButtonPressIndex,
InfraredCustomEventTypeRpcButtonRelease,
InfraredCustomEventTypeRpcSessionClose,

InfraredCustomEventTypeGpioTxPinChanged,
InfraredCustomEventTypeGpioOtgChanged,
};

#pragma pack(push, 1)
Expand Down
2 changes: 1 addition & 1 deletion applications/main/infrared/scenes/infrared_scene_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ ADD_SCENE(infrared, universal_ac, UniversalAC)
ADD_SCENE(infrared, universal_fan, UniversalFan)
ADD_SCENE(infrared, universal_audio, UniversalAudio)
ADD_SCENE(infrared, universal_projector, UniversalProjector)
ADD_SCENE(infrared, gpio_settings, GpioSettings)
ADD_SCENE(infrared, debug, Debug)
ADD_SCENE(infrared, error_databases, ErrorDatabases)
ADD_SCENE(infrared, debug_settings, DebugSettings)
ADD_SCENE(infrared, rpc, Rpc)
85 changes: 0 additions & 85 deletions applications/main/infrared/scenes/infrared_scene_debug_settings.c

This file was deleted.

Loading

0 comments on commit fda8370

Please sign in to comment.