mirror of
https://github.com/DarkFlippers/unleashed-firmware.git
synced 2025-12-12 20:49:49 +04:00
Merge branch 'DarkFlippers:dev' into dev
This commit is contained in:
@@ -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(
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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",
|
|
||||||
],
|
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -13,21 +13,31 @@ If you’re 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.
|
||||||
|
|
||||||
|
|||||||
@@ -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",
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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("."),
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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;
|
||||||
|
|
||||||
@@ -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
|
||||||
@@ -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,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*
|
||||||
|
|||||||
|
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user