Merge remote-tracking branch 'ofw/dev' into mntm-dev

This commit is contained in:
WillyJL
2025-11-29 19:53:59 +01:00
20 changed files with 197 additions and 38 deletions

View File

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

View File

@@ -2,6 +2,7 @@
#include <flipper_format.h>
#include <infrared.h>
#include <common/infrared_common_i.h>
#include <lib/infrared/signal/infrared_brute_force.h>
#include "../test.h" // IWYU pragma: keep
#define IR_TEST_FILES_DIR EXT_PATH("unit_tests/infrared/")
@@ -13,6 +14,7 @@ typedef struct {
InfraredEncoderHandler* encoder_handler;
FuriString* file_path;
FlipperFormat* ff;
InfraredBruteForce* brutedb;
} InfraredTest;
static InfraredTest* test;
@@ -24,12 +26,14 @@ static void infrared_test_alloc(void) {
test->encoder_handler = infrared_alloc_encoder();
test->ff = flipper_format_buffered_file_alloc(storage);
test->file_path = furi_string_alloc();
test->brutedb = infrared_brute_force_alloc();
}
static void infrared_test_free(void) {
furi_check(test);
infrared_free_decoder(test->decoder_handler);
infrared_free_encoder(test->encoder_handler);
infrared_brute_force_free(test->brutedb);
flipper_format_free(test->ff);
furi_string_free(test->file_path);
furi_record_close(RECORD_STORAGE);
@@ -523,6 +527,74 @@ MU_TEST(infrared_test_encoder_decoder_all) {
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_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_mixed);
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) {

View File

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

View File

@@ -3,9 +3,7 @@
* @brief Infrared application - start here.
*
* @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.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.
* @see infrared_remote.h for the infrared remote library - loading, storing and manipulating remotes
*/
#pragma once

View File

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

View File

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

View File

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

View File

@@ -13,21 +13,31 @@ It's important to regularly update your Developer Board to ensure that you have
**On Linux & macOS:**
Run the following command in the Terminal:
```
python3 -m pip install --upgrade ufbt
```
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`:
```
pipx install ufbt
```
**On Windows:**
1. Download the latest version of Python on
2. Run the following command in the PowerShell
1. Download the latest version of Python on [the official website](https://www.python.org/downloads/windows/) and install it.
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
@@ -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.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.
\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
```
**On Windows:** Run the following command in the PowerShell:
**On Windows:** Run the following command in PowerShell:
```
py -m ufbt devboard_flash
@@ -74,7 +84,7 @@ py -m ufbt devboard_flash
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:
@@ -90,7 +100,7 @@ FileNotFoundError: [Errno 2] No such file or directory: '/dev/cu.usbmodem01'
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.

View File

@@ -26,11 +26,15 @@ Check out these guides to get started with the Devboard:
The Developer Board is equipped with an [ESP32-S2-WROVER](https://www.espressif.com/en/products/socs/esp32-s2) module, which includes built-in Wi-Fi capabilities. It also offers GPIO pins for easy connectivity to various targets. Additionally, the Developer Board features a USB Type-C connector for data transfer and power supply. For user interaction, the Developer Board has tactile switches.
\image html https://cdn.flipperzero.one/Flipper_Zero_WiFi_developer_board_hardware_CDN.jpg width=700
\image html https://cdn.flipper.net/Flipper_Zero_devboard_main_parts.jpg width=700
## Pinout
\image html https://cdn.flipper.net/Flipper_Zero_wifi_devboard_pinout_updated.png width=700
## Additional resources
To learn more about the Wi-Fi Developer Board hardware, visit [Schematics in Flipper Docs](https://docs.flipperzero.one/development/hardware/wifi-debugger-module/schematics).
To learn more about the Wi-Fi Developer Board hardware, visit [Schematics in Flipper Docs](https://docs.flipper.net/zero/development/hardware/devboard-schematics).
For additional information about Flipper Zero GPIO pins, visit [GPIO & modules in Flipper Docs](https://docs.flipperzero.one/gpio-and-modules).

View File

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

View File

@@ -4,11 +4,15 @@ env.Append(
CPPPATH=[
"#/lib/infrared/encoder_decoder",
"#/lib/infrared/worker",
"#/lib/infrared/signal",
],
SDK_HEADERS=[
File("encoder_decoder/infrared.h"),
File("worker/infrared_worker.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=[
Dir("."),

View File

@@ -13,6 +13,10 @@
#include <stddef.h>
#include "infrared_error_code.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief InfraredBruteForce opaque type declaration.
*/
@@ -56,11 +60,16 @@ InfraredErrorCode infrared_brute_force_calculate_messages(
bool ignore_unknown_buttons);
/**
* @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] 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(
InfraredBruteForce* brute_force,
@@ -132,3 +141,7 @@ size_t infrared_brute_force_get_button_count(const InfraredBruteForce* brute_for
*/
const char*
infrared_brute_force_get_button_name(const InfraredBruteForce* brute_force, size_t index);
#ifdef __cplusplus
}
#endif

View File

@@ -1,5 +1,9 @@
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
typedef enum {
InfraredErrorCodeNone = 0,
InfraredErrorCodeFileOperationFailed = 0x800000,
@@ -43,3 +47,7 @@ typedef enum {
#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))
#ifdef __cplusplus
}
#endif

View File

@@ -85,7 +85,7 @@ static bool infrared_signal_is_raw_valid(const InfraredRawSignal* raw) {
raw->frequency);
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);
return false;

View File

@@ -10,7 +10,11 @@
#include "infrared_error_code.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.
@@ -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.
*
* @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.
*/
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.
*/
void infrared_signal_transmit(const InfraredSignal* signal);
#ifdef __cplusplus
}
#endif

View File

@@ -157,6 +157,8 @@ bool felica_load(FelicaData* data, FlipperFormat* ff, uint32_t version) {
case FelicaStandard:
uint32_t systems_total = 0;
if(!flipper_format_read_uint32(ff, "System found", &systems_total, 1)) break;
if(systems_total == 0) break;
simple_array_init(data->systems, systems_total);
for(uint8_t sys_idx = 0; sys_idx < systems_total; sys_idx++) {
@@ -181,6 +183,8 @@ bool felica_load(FelicaData* data, FlipperFormat* ff, uint32_t version) {
do {
uint32_t area_count = 0;
if(!flipper_format_read_uint32(ff, "Area found", &area_count, 1)) break;
if(area_count == 0) break;
simple_array_init(system->areas, area_count);
furi_string_reset(str_key_buffer);
@@ -207,6 +211,8 @@ bool felica_load(FelicaData* data, FlipperFormat* ff, uint32_t version) {
do {
uint32_t service_count = 0;
if(!flipper_format_read_uint32(ff, "Service found", &service_count, 1)) break;
if(service_count == 0) break;
simple_array_init(system->services, service_count);
furi_string_reset(str_key_buffer);
@@ -237,6 +243,8 @@ bool felica_load(FelicaData* data, FlipperFormat* ff, uint32_t version) {
uint32_t public_block_count = 0;
if(!flipper_format_read_uint32(ff, "Public blocks read", &public_block_count, 1))
break;
if(public_block_count == 0) break;
simple_array_init(system->public_blocks, public_block_count);
for(uint16_t i = 0; i < public_block_count; i++) {
furi_string_printf(str_key_buffer, "Block %04X", i);

View File

@@ -1,5 +1,5 @@
entry,status,name,type,params
Version,+,86.0,,
Version,+,87.1,,
Header,+,applications/services/bt/bt_service/bt.h,,
Header,+,applications/services/bt/bt_service/bt_keys_storage.h,,
Header,+,applications/services/cli/cli.h,,
@@ -340,6 +340,7 @@ Function,-,Osal_MemSet,void*,"void*, int, unsigned int"
Function,-,SystemCoreClockUpdate,void,
Function,-,SystemInit,void,
Function,-,_Exit,void,int
Function,+,__aeabi_f2d,double,float
Function,+,__aeabi_uldivmod,void*,"uint64_t, uint64_t"
Function,-,__assert,void,"const char*, int, const char*"
Function,+,__assert_func,void,"const char*, int, const char*, const char*"
1 entry status name type params
2 Version + 86.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
340 Function - SystemCoreClockUpdate void
341 Function - SystemInit void
342 Function - _Exit void int
343 Function + __aeabi_f2d double float
344 Function + __aeabi_uldivmod void* uint64_t, uint64_t
345 Function - __assert void const char*, int, const char*
346 Function + __assert_func void const char*, int, const char*, const char*

View File

@@ -1,5 +1,5 @@
entry,status,name,type,params
Version,+,86.0,,
Version,+,87.1,,
Header,+,applications/drivers/subghz/cc1101_ext/cc1101_ext_interconnect.h,,
Header,+,applications/main/archive/helpers/archive_helpers_ext.h,,
Header,+,applications/main/subghz/subghz_fap.h,,
@@ -69,6 +69,9 @@ Header,+,lib/ibutton/ibutton_protocols.h,,
Header,+,lib/ibutton/ibutton_worker.h,,
Header,+,lib/ieee754_parse_wrap/wrappers.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_worker.h,,
Header,+,lib/lfrfid/lfrfid_dict_file.h,,
@@ -441,6 +444,7 @@ Function,-,SK6805_update,void,
Function,-,SystemCoreClockUpdate,void,
Function,-,SystemInit,void,
Function,-,_Exit,void,int
Function,+,__aeabi_f2d,double,float
Function,+,__aeabi_uldivmod,void*,"uint64_t, uint64_t"
Function,-,__assert,void,"const char*, int, const char*"
Function,+,__assert_func,void,"const char*, int, const char*, const char*"
@@ -2147,6 +2151,16 @@ Function,-,infinity,double,
Function,-,infinityf,float,
Function,+,infrared_alloc_decoder,InfraredDecoderHandler*,
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_decode,const InfraredMessage*,"InfraredDecoderHandler*, _Bool, uint32_t"
Function,+,infrared_encode,InfraredStatus,"InfraredEncoderHandler*, uint32_t*, _Bool*"
@@ -2165,6 +2179,22 @@ Function,+,infrared_reset_encoder,void,"InfraredEncoderHandler*, const InfraredM
Function,+,infrared_send,void,"const InfraredMessage*, int"
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_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_free,void,InfraredWorker*
Function,+,infrared_worker_get_decoded_signal,const InfraredMessage*,const InfraredWorkerSignal*
1 entry status name type params
2 Version + 86.0 87.1
3 Header + applications/drivers/subghz/cc1101_ext/cc1101_ext_interconnect.h
4 Header + applications/main/archive/helpers/archive_helpers_ext.h
5 Header + applications/main/subghz/subghz_fap.h
69 Header + lib/ibutton/ibutton_worker.h
70 Header + lib/ieee754_parse_wrap/wrappers.h
71 Header + lib/infrared/encoder_decoder/infrared.h
72 Header + lib/infrared/signal/infrared_brute_force.h
73 Header + lib/infrared/signal/infrared_error_code.h
74 Header + lib/infrared/signal/infrared_signal.h
75 Header + lib/infrared/worker/infrared_transmit.h
76 Header + lib/infrared/worker/infrared_worker.h
77 Header + lib/lfrfid/lfrfid_dict_file.h
444 Function - SystemCoreClockUpdate void
445 Function - SystemInit void
446 Function - _Exit void int
447 Function + __aeabi_f2d double float
448 Function + __aeabi_uldivmod void* uint64_t, uint64_t
449 Function - __assert void const char*, int, const char*
450 Function + __assert_func void const char*, int, const char*, const char*
2151 Function - infinityf float
2152 Function + infrared_alloc_decoder InfraredDecoderHandler*
2153 Function + infrared_alloc_encoder InfraredEncoderHandler*
2154 Function - infrared_brute_force_add_record void InfraredBruteForce*, uint32_t, const char*
2155 Function - infrared_brute_force_alloc InfraredBruteForce*
2156 Function - infrared_brute_force_calculate_messages InfraredErrorCode InfraredBruteForce*
2157 Function - infrared_brute_force_free void InfraredBruteForce*
2158 Function - infrared_brute_force_is_started _Bool const InfraredBruteForce*
2159 Function - infrared_brute_force_reset void InfraredBruteForce*
2160 Function - infrared_brute_force_send _Bool InfraredBruteForce*, uint32_t
2161 Function - infrared_brute_force_set_db_filename void InfraredBruteForce*, const char*
2162 Function - infrared_brute_force_start _Bool InfraredBruteForce*, uint32_t, uint32_t*
2163 Function - infrared_brute_force_stop void InfraredBruteForce*
2164 Function + infrared_check_decoder_ready const InfraredMessage* InfraredDecoderHandler*
2165 Function + infrared_decode const InfraredMessage* InfraredDecoderHandler*, _Bool, uint32_t
2166 Function + infrared_encode InfraredStatus InfraredEncoderHandler*, uint32_t*, _Bool*
2179 Function + infrared_send void const InfraredMessage*, int
2180 Function + infrared_send_raw void const uint32_t[], uint32_t, _Bool
2181 Function + infrared_send_raw_ext void const uint32_t[], uint32_t, _Bool, uint32_t, float
2182 Function - infrared_signal_alloc InfraredSignal*
2183 Function - infrared_signal_free void InfraredSignal*
2184 Function - infrared_signal_get_message const InfraredMessage* const InfraredSignal*
2185 Function - infrared_signal_get_raw_signal const InfraredRawSignal* const InfraredSignal*
2186 Function - infrared_signal_is_raw _Bool const InfraredSignal*
2187 Function - infrared_signal_is_valid _Bool const InfraredSignal*
2188 Function - infrared_signal_read InfraredErrorCode InfraredSignal*, FlipperFormat*, FuriString*
2189 Function - infrared_signal_read_body InfraredErrorCode InfraredSignal*, FlipperFormat*
2190 Function - infrared_signal_read_name InfraredErrorCode FlipperFormat*, FuriString*
2191 Function - infrared_signal_save InfraredErrorCode const InfraredSignal*, FlipperFormat*, const char*
2192 Function - infrared_signal_search_by_index_and_read InfraredErrorCode InfraredSignal*, FlipperFormat*, size_t
2193 Function - infrared_signal_search_by_name_and_read InfraredErrorCode InfraredSignal*, FlipperFormat*, const char*
2194 Function - infrared_signal_set_message void InfraredSignal*, const InfraredMessage*
2195 Function - infrared_signal_set_raw_signal void InfraredSignal*, const uint32_t*, size_t, uint32_t, float
2196 Function - infrared_signal_set_signal void InfraredSignal*, const InfraredSignal*
2197 Function - infrared_signal_transmit void const InfraredSignal*
2198 Function + infrared_worker_alloc InfraredWorker*
2199 Function + infrared_worker_free void InfraredWorker*
2200 Function + infrared_worker_get_decoded_signal const InfraredMessage* const InfraredWorkerSignal*

View File

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