1
mirror of https://github.com/DarkFlippers/unleashed-firmware.git synced 2025-12-12 04:34:43 +04:00

Merge remote-tracking branch 'OFW/dev' into dev

This commit is contained in:
MX
2025-11-06 20:29:16 +03:00
18 changed files with 183 additions and 36 deletions

View File

@@ -131,6 +131,7 @@ App(
apptype=FlipperAppType.PLUGIN, apptype=FlipperAppType.PLUGIN,
entry_point="get_api", entry_point="get_api",
requires=["unit_tests"], requires=["unit_tests"],
fap_libs=["infrared"],
) )
App( App(

View File

@@ -2,6 +2,7 @@
#include <flipper_format.h> #include <flipper_format.h>
#include <infrared.h> #include <infrared.h>
#include <common/infrared_common_i.h> #include <common/infrared_common_i.h>
#include <lib/infrared/signal/infrared_brute_force.h>
#include "../test.h" // IWYU pragma: keep #include "../test.h" // IWYU pragma: keep
#define IR_TEST_FILES_DIR EXT_PATH("unit_tests/infrared/") #define IR_TEST_FILES_DIR EXT_PATH("unit_tests/infrared/")
@@ -13,6 +14,7 @@ typedef struct {
InfraredEncoderHandler* encoder_handler; InfraredEncoderHandler* encoder_handler;
FuriString* file_path; FuriString* file_path;
FlipperFormat* ff; FlipperFormat* ff;
InfraredBruteForce* brutedb;
} InfraredTest; } InfraredTest;
static InfraredTest* test; static InfraredTest* test;
@@ -24,12 +26,14 @@ static void infrared_test_alloc(void) {
test->encoder_handler = infrared_alloc_encoder(); test->encoder_handler = infrared_alloc_encoder();
test->ff = flipper_format_buffered_file_alloc(storage); test->ff = flipper_format_buffered_file_alloc(storage);
test->file_path = furi_string_alloc(); test->file_path = furi_string_alloc();
test->brutedb = infrared_brute_force_alloc();
} }
static void infrared_test_free(void) { static void infrared_test_free(void) {
furi_check(test); furi_check(test);
infrared_free_decoder(test->decoder_handler); infrared_free_decoder(test->decoder_handler);
infrared_free_encoder(test->encoder_handler); infrared_free_encoder(test->encoder_handler);
infrared_brute_force_free(test->brutedb);
flipper_format_free(test->ff); flipper_format_free(test->ff);
furi_string_free(test->file_path); furi_string_free(test->file_path);
furi_record_close(RECORD_STORAGE); furi_record_close(RECORD_STORAGE);
@@ -523,6 +527,74 @@ MU_TEST(infrared_test_encoder_decoder_all) {
infrared_test_run_encoder_decoder(InfraredProtocolPioneer, 1); infrared_test_run_encoder_decoder(InfraredProtocolPioneer, 1);
} }
MU_TEST(infrared_test_ac_database) {
infrared_brute_force_set_db_filename(test->brutedb, EXT_PATH("infrared/assets/ac.ir"));
uint32_t i = 0;
infrared_brute_force_add_record(test->brutedb, i++, "Off");
infrared_brute_force_add_record(test->brutedb, i++, "Dh");
infrared_brute_force_add_record(test->brutedb, i++, "Cool_hi");
infrared_brute_force_add_record(test->brutedb, i++, "Heat_hi");
infrared_brute_force_add_record(test->brutedb, i++, "Cool_lo");
infrared_brute_force_add_record(test->brutedb, i++, "Heat_lo");
mu_assert(
infrared_brute_force_calculate_messages(test->brutedb) == InfraredErrorCodeNone,
"universal ac database is invalid");
infrared_brute_force_reset(test->brutedb);
}
MU_TEST(infrared_test_audio_database) {
infrared_brute_force_set_db_filename(test->brutedb, EXT_PATH("infrared/assets/audio.ir"));
uint32_t i = 0;
infrared_brute_force_add_record(test->brutedb, i++, "Power");
infrared_brute_force_add_record(test->brutedb, i++, "Mute");
infrared_brute_force_add_record(test->brutedb, i++, "Play");
infrared_brute_force_add_record(test->brutedb, i++, "Pause");
infrared_brute_force_add_record(test->brutedb, i++, "Prev");
infrared_brute_force_add_record(test->brutedb, i++, "Next");
infrared_brute_force_add_record(test->brutedb, i++, "Vol_dn");
infrared_brute_force_add_record(test->brutedb, i++, "Vol_up");
mu_assert(
infrared_brute_force_calculate_messages(test->brutedb) == InfraredErrorCodeNone,
"universal audio database is invalid");
infrared_brute_force_reset(test->brutedb);
}
MU_TEST(infrared_test_projector_database) {
infrared_brute_force_set_db_filename(test->brutedb, EXT_PATH("infrared/assets/projector.ir"));
uint32_t i = 0;
infrared_brute_force_add_record(test->brutedb, i++, "Power");
infrared_brute_force_add_record(test->brutedb, i++, "Mute");
infrared_brute_force_add_record(test->brutedb, i++, "Vol_up");
infrared_brute_force_add_record(test->brutedb, i++, "Vol_dn");
mu_assert(
infrared_brute_force_calculate_messages(test->brutedb) == InfraredErrorCodeNone,
"universal projector database is invalid");
infrared_brute_force_reset(test->brutedb);
}
MU_TEST(infrared_test_tv_database) {
infrared_brute_force_set_db_filename(test->brutedb, EXT_PATH("infrared/assets/tv.ir"));
uint32_t i = 0;
infrared_brute_force_add_record(test->brutedb, i++, "Power");
infrared_brute_force_add_record(test->brutedb, i++, "Mute");
infrared_brute_force_add_record(test->brutedb, i++, "Vol_up");
infrared_brute_force_add_record(test->brutedb, i++, "Ch_next");
infrared_brute_force_add_record(test->brutedb, i++, "Vol_dn");
infrared_brute_force_add_record(test->brutedb, i++, "Ch_prev");
mu_assert(
infrared_brute_force_calculate_messages(test->brutedb) == InfraredErrorCodeNone,
"universal tv database is invalid");
infrared_brute_force_reset(test->brutedb);
}
MU_TEST_SUITE(infrared_test) { MU_TEST_SUITE(infrared_test) {
MU_SUITE_CONFIGURE(&infrared_test_alloc, &infrared_test_free); MU_SUITE_CONFIGURE(&infrared_test_alloc, &infrared_test_free);
@@ -543,6 +615,10 @@ MU_TEST_SUITE(infrared_test) {
MU_RUN_TEST(infrared_test_decoder_pioneer); MU_RUN_TEST(infrared_test_decoder_pioneer);
MU_RUN_TEST(infrared_test_decoder_mixed); MU_RUN_TEST(infrared_test_decoder_mixed);
MU_RUN_TEST(infrared_test_encoder_decoder_all); MU_RUN_TEST(infrared_test_encoder_decoder_all);
MU_RUN_TEST(infrared_test_ac_database);
MU_RUN_TEST(infrared_test_audio_database);
MU_RUN_TEST(infrared_test_projector_database);
MU_RUN_TEST(infrared_test_tv_database);
} }
int run_minunit_test_infrared(void) { int run_minunit_test_infrared(void) {

View File

@@ -9,7 +9,7 @@ App(
order=40, order=40,
sources=["*.c", "!infrared_cli.c"], sources=["*.c", "!infrared_cli.c"],
resources="resources", resources="resources",
fap_libs=["assets"], fap_libs=["assets", "infrared"],
fap_icon="icon.png", fap_icon="icon.png",
fap_category="Infrared", fap_category="Infrared",
) )
@@ -20,9 +20,5 @@ App(
apptype=FlipperAppType.PLUGIN, apptype=FlipperAppType.PLUGIN,
entry_point="cli_ir_ep", entry_point="cli_ir_ep",
requires=["cli"], requires=["cli"],
sources=[ sources=["infrared_cli.c"],
"infrared_cli.c",
"infrared_brute_force.c",
"infrared_signal.c",
],
) )

View File

@@ -3,9 +3,7 @@
* @brief Infrared application - start here. * @brief Infrared application - start here.
* *
* @see infrared_app_i.h for the main application data structure and functions. * @see infrared_app_i.h for the main application data structure and functions.
* @see infrared_signal.h for the infrared signal library - loading, storing and transmitting signals. * @see infrared_remote.h for the infrared remote library - loading, storing and manipulating remotes
* @see infrared_remote.hl for the infrared remote library - loading, storing and manipulating remotes.
* @see infrared_brute_force.h for the infrared brute force - loading and transmitting multiple signals.
*/ */
#pragma once #pragma once

View File

@@ -31,7 +31,7 @@
#include "infrared_app.h" #include "infrared_app.h"
#include "infrared_remote.h" #include "infrared_remote.h"
#include "infrared_brute_force.h" #include <lib/infrared/signal/infrared_brute_force.h>
#include "infrared_custom_event.h" #include "infrared_custom_event.h"
#include "scenes/infrared_scene.h" #include "scenes/infrared_scene.h"

View File

@@ -8,8 +8,8 @@
#include <toolbox/pipe.h> #include <toolbox/pipe.h>
#include <m-dict.h> #include <m-dict.h>
#include "infrared_signal.h" #include <lib/infrared/signal/infrared_signal.h>
#include "infrared_brute_force.h" #include <lib/infrared/signal/infrared_brute_force.h>
#define INFRARED_CLI_BUF_SIZE (10U) #define INFRARED_CLI_BUF_SIZE (10U)
#define INFRARED_CLI_FILE_NAME_SIZE (256U) #define INFRARED_CLI_FILE_NAME_SIZE (256U)

View File

@@ -11,7 +11,7 @@
*/ */
#pragma once #pragma once
#include "infrared_signal.h" #include <lib/infrared/signal/infrared_signal.h>
/** /**
* @brief InfraredRemote opaque type declaration. * @brief InfraredRemote opaque type declaration.

View File

@@ -13,21 +13,31 @@ If youre not, please refer to the [Windows](https://www.digitalcitizen.life/c
**On Linux & macOS:** **On Linux & macOS:**
Run the following command in the Terminal: 1. Open a terminal.
2. Install `pipx` by following the instructions on the [official website](https://pipx.pypa.io/stable/installation/).
3. Restart the terminal.
4. Install `ufbt`:
``` ```
python3 -m pip install --upgrade ufbt pipx install ufbt
``` ```
**On Windows:** **On Windows:**
1. Download the latest version of Python on 1. Download the latest version of Python on [the official website](https://www.python.org/downloads/windows/) and install it.
2. Run the following command in the PowerShell 2. Open PowerShell.
3. Install `pipx`:
``` ```
py -m pip install --upgrade ufbt py -m pip install --user pipx
```
4. Add `pipx` to PATH:
```
py -m pipx ensurepath
```
5. Restart PowerShell.
6. Install `ufbt`:
```
pipx install ufbt
``` ```
*** ***
## Step 2. Connect the Devboard to PC ## Step 2. Connect the Devboard to PC
@@ -49,12 +59,12 @@ To update the firmware, you need to switch your Developer Board to Bootloader mo
3.1. Press and hold the **BOOT** button. 3.1. Press and hold the **BOOT** button.
3.2. Press the **RESET** button while holding the **BOOT** button. 3.2. Press and release the **RESET** button while holding the **BOOT** button.
3.3. Release the **BOOT** button. 3.3. Release the **BOOT** button.
\image html https://cdn.flipperzero.one/Flipper_Zero_Wi-Fi_devboard_reboot_to_bootloader.png width=700 \image html https://cdn.flipper.net/Flipper_Zero_devboard_bootloader.jpg width=700
4. Repeat **Step 1** and view the name of your Developer Board that appeared in the list. 4. Repeat the first command above (listing serial devices) and view the name of your Developer Board that appeared in the list.
*** ***
@@ -66,7 +76,7 @@ To update the firmware, you need to switch your Developer Board to Bootloader mo
python3 -m ufbt devboard_flash python3 -m ufbt devboard_flash
``` ```
**On Windows:** Run the following command in the PowerShell: **On Windows:** Run the following command in PowerShell:
``` ```
py -m ufbt devboard_flash py -m ufbt devboard_flash
@@ -74,7 +84,7 @@ py -m ufbt devboard_flash
You should see the following message: `WiFi board flashed successfully`. You should see the following message: `WiFi board flashed successfully`.
### If flashing failed ### If flashing fails
Occasionally, you might get an error message during the flashing process, such as: Occasionally, you might get an error message during the flashing process, such as:
@@ -90,7 +100,7 @@ FileNotFoundError: [Errno 2] No such file or directory: '/dev/cu.usbmodem01'
To fix it, try doing the following: To fix it, try doing the following:
- Disconnect the Developer Board from your computer, then reconnect it. After that, switch your Developer Board to Bootloader mode once again, as described in - Disconnect the Developer Board from your computer, then reconnect it. After that, switch your Developer Board to Bootloader mode once again, as described in Step 2.
- Use a different USB port on your computer. - Use a different USB port on your computer.

View File

@@ -76,6 +76,7 @@ FIRMWARE_APPS = {
"radio_device_cc1101_ext", "radio_device_cc1101_ext",
"unit_tests", "unit_tests",
"js_app", "js_app",
"infrared",
"archive", "archive",
], ],
} }

View File

@@ -4,11 +4,15 @@ env.Append(
CPPPATH=[ CPPPATH=[
"#/lib/infrared/encoder_decoder", "#/lib/infrared/encoder_decoder",
"#/lib/infrared/worker", "#/lib/infrared/worker",
"#/lib/infrared/signal",
], ],
SDK_HEADERS=[ SDK_HEADERS=[
File("encoder_decoder/infrared.h"), File("encoder_decoder/infrared.h"),
File("worker/infrared_worker.h"), File("worker/infrared_worker.h"),
File("worker/infrared_transmit.h"), File("worker/infrared_transmit.h"),
File("signal/infrared_error_code.h"),
File("signal/infrared_signal.h"),
File("signal/infrared_brute_force.h"),
], ],
LINT_SOURCES=[ LINT_SOURCES=[
Dir("."), Dir("."),

View File

@@ -12,6 +12,10 @@
#include <stdbool.h> #include <stdbool.h>
#include "infrared_error_code.h" #include "infrared_error_code.h"
#ifdef __cplusplus
extern "C" {
#endif
/** /**
* @brief InfraredBruteForce opaque type declaration. * @brief InfraredBruteForce opaque type declaration.
*/ */
@@ -51,11 +55,16 @@ void infrared_brute_force_set_db_filename(InfraredBruteForce* brute_force, const
InfraredErrorCode infrared_brute_force_calculate_messages(InfraredBruteForce* brute_force); InfraredErrorCode infrared_brute_force_calculate_messages(InfraredBruteForce* brute_force);
/** /**
* @brief Start transmitting signals from a category stored in an InfraredBruteForce's instance dictionary. * @brief Start transmitting signals from a category stored in the dictionary.
*
* The function locates the category identified by @p index, reports the number of
* records it contains via @p record_count, and prepares the brute-force instance
* to transmit those signals. On failure @p record_count is set to zero.
* *
* @param[in,out] brute_force pointer to the instance to be started. * @param[in,out] brute_force pointer to the instance to be started.
* @param[in] index index of the signal category in the dictionary. * @param[in] index index of the signal category in the dictionary.
* @returns true on success, false otherwise. * @param[out] record_count pointer that receives the number of records in the category.
* @returns true if the category is found and the backing database file is opened, false otherwise.
*/ */
bool infrared_brute_force_start( bool infrared_brute_force_start(
InfraredBruteForce* brute_force, InfraredBruteForce* brute_force,
@@ -107,3 +116,7 @@ void infrared_brute_force_add_record(
* @param[in,out] brute_force pointer to the instance to be reset. * @param[in,out] brute_force pointer to the instance to be reset.
*/ */
void infrared_brute_force_reset(InfraredBruteForce* brute_force); void infrared_brute_force_reset(InfraredBruteForce* brute_force);
#ifdef __cplusplus
}
#endif

View File

@@ -1,5 +1,9 @@
#pragma once #pragma once
#ifdef __cplusplus
extern "C" {
#endif
typedef enum { typedef enum {
InfraredErrorCodeNone = 0, InfraredErrorCodeNone = 0,
InfraredErrorCodeFileOperationFailed = 0x800000, InfraredErrorCodeFileOperationFailed = 0x800000,
@@ -43,3 +47,7 @@ typedef enum {
#define INFRARED_ERROR_PRESENT(error) (INFRARED_ERROR_GET_CODE(error) != InfraredErrorCodeNone) #define INFRARED_ERROR_PRESENT(error) (INFRARED_ERROR_GET_CODE(error) != InfraredErrorCodeNone)
#define INFRARED_ERROR_CHECK(error, test_code) (INFRARED_ERROR_GET_CODE(error) == (test_code)) #define INFRARED_ERROR_CHECK(error, test_code) (INFRARED_ERROR_GET_CODE(error) == (test_code))
#ifdef __cplusplus
}
#endif

View File

@@ -85,7 +85,7 @@ static bool infrared_signal_is_raw_valid(const InfraredRawSignal* raw) {
raw->frequency); raw->frequency);
return false; return false;
} else if((raw->duty_cycle <= 0) || (raw->duty_cycle > 1)) { } else if((raw->duty_cycle <= 0) || (raw->duty_cycle > 1.f)) {
FURI_LOG_E(TAG, "Duty cycle is out of range (0 - 1): %f", (double)raw->duty_cycle); FURI_LOG_E(TAG, "Duty cycle is out of range (0 - 1): %f", (double)raw->duty_cycle);
return false; return false;

View File

@@ -10,7 +10,11 @@
#include "infrared_error_code.h" #include "infrared_error_code.h"
#include <flipper_format/flipper_format.h> #include <flipper_format/flipper_format.h>
#include <infrared/encoder_decoder/infrared.h> #include <infrared.h>
#ifdef __cplusplus
extern "C" {
#endif
/** /**
* @brief InfraredSignal opaque type declaration. * @brief InfraredSignal opaque type declaration.
@@ -159,7 +163,7 @@ InfraredErrorCode infrared_signal_read_name(FlipperFormat* ff, FuriString* name)
* Same behaviour as infrared_signal_read(), but only the body is read. * Same behaviour as infrared_signal_read(), but only the body is read.
* *
* @param[in,out] ff pointer to the FlipperFormat file instance to read from. * @param[in,out] ff pointer to the FlipperFormat file instance to read from.
* @param[out] body pointer to the InfraredSignal instance to hold the signal body. Must be properly allocated. * @param[out] signal pointer to the InfraredSignal instance to hold the signal body. Must be properly allocated.
* @returns InfraredErrorCodeNone if a signal body was successfully read, otherwise error code. * @returns InfraredErrorCodeNone if a signal body was successfully read, otherwise error code.
*/ */
InfraredErrorCode infrared_signal_read_body(InfraredSignal* signal, FlipperFormat* ff); InfraredErrorCode infrared_signal_read_body(InfraredSignal* signal, FlipperFormat* ff);
@@ -218,3 +222,7 @@ InfraredErrorCode
* @param[in] signal pointer to the instance holding the signal to be transmitted. * @param[in] signal pointer to the instance holding the signal to be transmitted.
*/ */
void infrared_signal_transmit(const InfraredSignal* signal); void infrared_signal_transmit(const InfraredSignal* signal);
#ifdef __cplusplus
}
#endif

View File

@@ -1,5 +1,5 @@
entry,status,name,type,params entry,status,name,type,params
Version,+,87.0,, Version,+,87.1,,
Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/bt/bt_service/bt.h,,
Header,+,applications/services/bt/bt_service/bt_keys_storage.h,, Header,+,applications/services/bt/bt_service/bt_keys_storage.h,,
Header,+,applications/services/cli/cli.h,, Header,+,applications/services/cli/cli.h,,
@@ -339,6 +339,7 @@ Function,-,Osal_MemSet,void*,"void*, int, unsigned int"
Function,-,SystemCoreClockUpdate,void, Function,-,SystemCoreClockUpdate,void,
Function,-,SystemInit,void, Function,-,SystemInit,void,
Function,-,_Exit,void,int Function,-,_Exit,void,int
Function,+,__aeabi_f2d,double,float
Function,+,__aeabi_uldivmod,void*,"uint64_t, uint64_t" Function,+,__aeabi_uldivmod,void*,"uint64_t, uint64_t"
Function,-,__assert,void,"const char*, int, const char*" Function,-,__assert,void,"const char*, int, const char*"
Function,+,__assert_func,void,"const char*, int, const char*, const char*" Function,+,__assert_func,void,"const char*, int, const char*, const char*"
1 entry status name type params
2 Version + 87.0 87.1
3 Header + applications/services/bt/bt_service/bt.h
4 Header + applications/services/bt/bt_service/bt_keys_storage.h
5 Header + applications/services/cli/cli.h
339 Function - SystemCoreClockUpdate void
340 Function - SystemInit void
341 Function - _Exit void int
342 Function + __aeabi_f2d double float
343 Function + __aeabi_uldivmod void* uint64_t, uint64_t
344 Function - __assert void const char*, int, const char*
345 Function + __assert_func void const char*, int, const char*, const char*

View File

@@ -1,5 +1,5 @@
entry,status,name,type,params entry,status,name,type,params
Version,+,87.0,, Version,+,87.1,,
Header,+,applications/drivers/subghz/cc1101_ext/cc1101_ext_interconnect.h,, Header,+,applications/drivers/subghz/cc1101_ext/cc1101_ext_interconnect.h,,
Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/bt/bt_service/bt.h,,
Header,+,applications/services/bt/bt_service/bt_keys_storage.h,, Header,+,applications/services/bt/bt_service/bt_keys_storage.h,,
@@ -63,6 +63,9 @@ Header,+,lib/ibutton/ibutton_protocols.h,,
Header,+,lib/ibutton/ibutton_worker.h,, Header,+,lib/ibutton/ibutton_worker.h,,
Header,+,lib/ieee754_parse_wrap/wrappers.h,, Header,+,lib/ieee754_parse_wrap/wrappers.h,,
Header,+,lib/infrared/encoder_decoder/infrared.h,, Header,+,lib/infrared/encoder_decoder/infrared.h,,
Header,+,lib/infrared/signal/infrared_brute_force.h,,
Header,+,lib/infrared/signal/infrared_error_code.h,,
Header,+,lib/infrared/signal/infrared_signal.h,,
Header,+,lib/infrared/worker/infrared_transmit.h,, Header,+,lib/infrared/worker/infrared_transmit.h,,
Header,+,lib/infrared/worker/infrared_worker.h,, Header,+,lib/infrared/worker/infrared_worker.h,,
Header,+,lib/lfrfid/lfrfid_dict_file.h,, Header,+,lib/lfrfid/lfrfid_dict_file.h,,
@@ -430,6 +433,7 @@ Function,-,Osal_MemSet,void*,"void*, int, unsigned int"
Function,-,SystemCoreClockUpdate,void, Function,-,SystemCoreClockUpdate,void,
Function,-,SystemInit,void, Function,-,SystemInit,void,
Function,-,_Exit,void,int Function,-,_Exit,void,int
Function,+,__aeabi_f2d,double,float
Function,+,__aeabi_uldivmod,void*,"uint64_t, uint64_t" Function,+,__aeabi_uldivmod,void*,"uint64_t, uint64_t"
Function,-,__assert,void,"const char*, int, const char*" Function,-,__assert,void,"const char*, int, const char*"
Function,+,__assert_func,void,"const char*, int, const char*, const char*" Function,+,__assert_func,void,"const char*, int, const char*, const char*"
@@ -2115,6 +2119,16 @@ Function,-,infinity,double,
Function,-,infinityf,float, Function,-,infinityf,float,
Function,+,infrared_alloc_decoder,InfraredDecoderHandler*, Function,+,infrared_alloc_decoder,InfraredDecoderHandler*,
Function,+,infrared_alloc_encoder,InfraredEncoderHandler*, Function,+,infrared_alloc_encoder,InfraredEncoderHandler*,
Function,-,infrared_brute_force_add_record,void,"InfraredBruteForce*, uint32_t, const char*"
Function,-,infrared_brute_force_alloc,InfraredBruteForce*,
Function,-,infrared_brute_force_calculate_messages,InfraredErrorCode,InfraredBruteForce*
Function,-,infrared_brute_force_free,void,InfraredBruteForce*
Function,-,infrared_brute_force_is_started,_Bool,const InfraredBruteForce*
Function,-,infrared_brute_force_reset,void,InfraredBruteForce*
Function,-,infrared_brute_force_send,_Bool,"InfraredBruteForce*, uint32_t"
Function,-,infrared_brute_force_set_db_filename,void,"InfraredBruteForce*, const char*"
Function,-,infrared_brute_force_start,_Bool,"InfraredBruteForce*, uint32_t, uint32_t*"
Function,-,infrared_brute_force_stop,void,InfraredBruteForce*
Function,+,infrared_check_decoder_ready,const InfraredMessage*,InfraredDecoderHandler* Function,+,infrared_check_decoder_ready,const InfraredMessage*,InfraredDecoderHandler*
Function,+,infrared_decode,const InfraredMessage*,"InfraredDecoderHandler*, _Bool, uint32_t" Function,+,infrared_decode,const InfraredMessage*,"InfraredDecoderHandler*, _Bool, uint32_t"
Function,+,infrared_encode,InfraredStatus,"InfraredEncoderHandler*, uint32_t*, _Bool*" Function,+,infrared_encode,InfraredStatus,"InfraredEncoderHandler*, uint32_t*, _Bool*"
@@ -2133,6 +2147,22 @@ Function,+,infrared_reset_encoder,void,"InfraredEncoderHandler*, const InfraredM
Function,+,infrared_send,void,"const InfraredMessage*, int" Function,+,infrared_send,void,"const InfraredMessage*, int"
Function,+,infrared_send_raw,void,"const uint32_t[], uint32_t, _Bool" Function,+,infrared_send_raw,void,"const uint32_t[], uint32_t, _Bool"
Function,+,infrared_send_raw_ext,void,"const uint32_t[], uint32_t, _Bool, uint32_t, float" Function,+,infrared_send_raw_ext,void,"const uint32_t[], uint32_t, _Bool, uint32_t, float"
Function,-,infrared_signal_alloc,InfraredSignal*,
Function,-,infrared_signal_free,void,InfraredSignal*
Function,-,infrared_signal_get_message,const InfraredMessage*,const InfraredSignal*
Function,-,infrared_signal_get_raw_signal,const InfraredRawSignal*,const InfraredSignal*
Function,-,infrared_signal_is_raw,_Bool,const InfraredSignal*
Function,-,infrared_signal_is_valid,_Bool,const InfraredSignal*
Function,-,infrared_signal_read,InfraredErrorCode,"InfraredSignal*, FlipperFormat*, FuriString*"
Function,-,infrared_signal_read_body,InfraredErrorCode,"InfraredSignal*, FlipperFormat*"
Function,-,infrared_signal_read_name,InfraredErrorCode,"FlipperFormat*, FuriString*"
Function,-,infrared_signal_save,InfraredErrorCode,"const InfraredSignal*, FlipperFormat*, const char*"
Function,-,infrared_signal_search_by_index_and_read,InfraredErrorCode,"InfraredSignal*, FlipperFormat*, size_t"
Function,-,infrared_signal_search_by_name_and_read,InfraredErrorCode,"InfraredSignal*, FlipperFormat*, const char*"
Function,-,infrared_signal_set_message,void,"InfraredSignal*, const InfraredMessage*"
Function,-,infrared_signal_set_raw_signal,void,"InfraredSignal*, const uint32_t*, size_t, uint32_t, float"
Function,-,infrared_signal_set_signal,void,"InfraredSignal*, const InfraredSignal*"
Function,-,infrared_signal_transmit,void,const InfraredSignal*
Function,+,infrared_worker_alloc,InfraredWorker*, Function,+,infrared_worker_alloc,InfraredWorker*,
Function,+,infrared_worker_free,void,InfraredWorker* Function,+,infrared_worker_free,void,InfraredWorker*
Function,+,infrared_worker_get_decoded_signal,const InfraredMessage*,const InfraredWorkerSignal* Function,+,infrared_worker_get_decoded_signal,const InfraredMessage*,const InfraredWorkerSignal*
1 entry status name type params
2 Version + 87.0 87.1
3 Header + applications/drivers/subghz/cc1101_ext/cc1101_ext_interconnect.h
4 Header + applications/services/bt/bt_service/bt.h
5 Header + applications/services/bt/bt_service/bt_keys_storage.h
63 Header + lib/ibutton/ibutton_worker.h
64 Header + lib/ieee754_parse_wrap/wrappers.h
65 Header + lib/infrared/encoder_decoder/infrared.h
66 Header + lib/infrared/signal/infrared_brute_force.h
67 Header + lib/infrared/signal/infrared_error_code.h
68 Header + lib/infrared/signal/infrared_signal.h
69 Header + lib/infrared/worker/infrared_transmit.h
70 Header + lib/infrared/worker/infrared_worker.h
71 Header + lib/lfrfid/lfrfid_dict_file.h
433 Function - SystemCoreClockUpdate void
434 Function - SystemInit void
435 Function - _Exit void int
436 Function + __aeabi_f2d double float
437 Function + __aeabi_uldivmod void* uint64_t, uint64_t
438 Function - __assert void const char*, int, const char*
439 Function + __assert_func void const char*, int, const char*, const char*
2119 Function - infinityf float
2120 Function + infrared_alloc_decoder InfraredDecoderHandler*
2121 Function + infrared_alloc_encoder InfraredEncoderHandler*
2122 Function - infrared_brute_force_add_record void InfraredBruteForce*, uint32_t, const char*
2123 Function - infrared_brute_force_alloc InfraredBruteForce*
2124 Function - infrared_brute_force_calculate_messages InfraredErrorCode InfraredBruteForce*
2125 Function - infrared_brute_force_free void InfraredBruteForce*
2126 Function - infrared_brute_force_is_started _Bool const InfraredBruteForce*
2127 Function - infrared_brute_force_reset void InfraredBruteForce*
2128 Function - infrared_brute_force_send _Bool InfraredBruteForce*, uint32_t
2129 Function - infrared_brute_force_set_db_filename void InfraredBruteForce*, const char*
2130 Function - infrared_brute_force_start _Bool InfraredBruteForce*, uint32_t, uint32_t*
2131 Function - infrared_brute_force_stop void InfraredBruteForce*
2132 Function + infrared_check_decoder_ready const InfraredMessage* InfraredDecoderHandler*
2133 Function + infrared_decode const InfraredMessage* InfraredDecoderHandler*, _Bool, uint32_t
2134 Function + infrared_encode InfraredStatus InfraredEncoderHandler*, uint32_t*, _Bool*
2147 Function + infrared_send void const InfraredMessage*, int
2148 Function + infrared_send_raw void const uint32_t[], uint32_t, _Bool
2149 Function + infrared_send_raw_ext void const uint32_t[], uint32_t, _Bool, uint32_t, float
2150 Function - infrared_signal_alloc InfraredSignal*
2151 Function - infrared_signal_free void InfraredSignal*
2152 Function - infrared_signal_get_message const InfraredMessage* const InfraredSignal*
2153 Function - infrared_signal_get_raw_signal const InfraredRawSignal* const InfraredSignal*
2154 Function - infrared_signal_is_raw _Bool const InfraredSignal*
2155 Function - infrared_signal_is_valid _Bool const InfraredSignal*
2156 Function - infrared_signal_read InfraredErrorCode InfraredSignal*, FlipperFormat*, FuriString*
2157 Function - infrared_signal_read_body InfraredErrorCode InfraredSignal*, FlipperFormat*
2158 Function - infrared_signal_read_name InfraredErrorCode FlipperFormat*, FuriString*
2159 Function - infrared_signal_save InfraredErrorCode const InfraredSignal*, FlipperFormat*, const char*
2160 Function - infrared_signal_search_by_index_and_read InfraredErrorCode InfraredSignal*, FlipperFormat*, size_t
2161 Function - infrared_signal_search_by_name_and_read InfraredErrorCode InfraredSignal*, FlipperFormat*, const char*
2162 Function - infrared_signal_set_message void InfraredSignal*, const InfraredMessage*
2163 Function - infrared_signal_set_raw_signal void InfraredSignal*, const uint32_t*, size_t, uint32_t, float
2164 Function - infrared_signal_set_signal void InfraredSignal*, const InfraredSignal*
2165 Function - infrared_signal_transmit void const InfraredSignal*
2166 Function + infrared_worker_alloc InfraredWorker*
2167 Function + infrared_worker_free void InfraredWorker*
2168 Function + infrared_worker_get_decoded_signal const InfraredMessage* const InfraredWorkerSignal*

View File

@@ -8,6 +8,7 @@ extern "C" {
void __clear_cache(void*, void*); void __clear_cache(void*, void*);
void* __aeabi_uldivmod(uint64_t, uint64_t); void* __aeabi_uldivmod(uint64_t, uint64_t);
double __aeabi_f2d(float);
#ifdef __cplusplus #ifdef __cplusplus
} }