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

Merge branch 'ofw_dev' into nfcrefactoring

This commit is contained in:
MX
2023-11-01 21:07:33 +03:00
462 changed files with 2679 additions and 2077 deletions

View File

@@ -67,22 +67,22 @@ if GetOption("fullenv") or any(
# Target for self-update package # Target for self-update package
dist_basic_arguments = [ dist_basic_arguments = [
"--bundlever", "--bundlever",
'"${UPDATE_VERSION_STRING}"', "${UPDATE_VERSION_STRING}",
] ]
dist_radio_arguments = [ dist_radio_arguments = [
"--radio", "--radio",
'"${ROOT_DIR.abspath}/${COPRO_STACK_BIN_DIR}/${COPRO_STACK_BIN}"', "${ROOT_DIR.abspath}/${COPRO_STACK_BIN_DIR}/${COPRO_STACK_BIN}",
"--radiotype", "--radiotype",
"${COPRO_STACK_TYPE}", "${COPRO_STACK_TYPE}",
"${COPRO_DISCLAIMER}", "${COPRO_DISCLAIMER}",
"--obdata", "--obdata",
'"${ROOT_DIR.abspath}/${COPRO_OB_DATA}"', "${ROOT_DIR.abspath}/${COPRO_OB_DATA}",
"--stackversion", "--stackversion",
"${COPRO_CUBE_VERSION}", "${COPRO_CUBE_VERSION}",
] ]
dist_resource_arguments = [ dist_resource_arguments = [
"-r", "-r",
'"${ROOT_DIR.abspath}/assets/resources"', firmware_env.subst("${RESOURCES_ROOT}"),
] ]
dist_splash_arguments = ( dist_splash_arguments = (
[ [
@@ -95,7 +95,7 @@ if GetOption("fullenv") or any(
selfupdate_dist = distenv.DistCommand( selfupdate_dist = distenv.DistCommand(
"updater_package", "updater_package",
(distenv["DIST_DEPENDS"], firmware_env["FW_RESOURCES"]), (distenv["DIST_DEPENDS"], firmware_env["FW_RESOURCES_MANIFEST"]),
DIST_EXTRA=[ DIST_EXTRA=[
*dist_basic_arguments, *dist_basic_arguments,
*dist_radio_arguments, *dist_radio_arguments,
@@ -128,7 +128,8 @@ if GetOption("fullenv") or any(
# Installation over USB & CLI # Installation over USB & CLI
usb_update_package = distenv.AddUsbFlashTarget( usb_update_package = distenv.AddUsbFlashTarget(
"#build/usbinstall.flag", (firmware_env["FW_RESOURCES"], selfupdate_dist) "#build/usbinstall.flag",
(firmware_env["FW_RESOURCES_MANIFEST"], selfupdate_dist),
) )
distenv.Alias("flash_usb_full", usb_update_package) distenv.Alias("flash_usb_full", usb_update_package)
@@ -166,16 +167,23 @@ Depends(
list(app_artifact.validator for app_artifact in external_app_list), list(app_artifact.validator for app_artifact in external_app_list),
) )
Alias("fap_dist", fap_dist) Alias("fap_dist", fap_dist)
# distenv.Default(fap_dist)
distenv.Depends(firmware_env["FW_RESOURCES"], external_apps_artifacts.resources_dist)
# Copy all faps to device # Copy all faps to device
fap_deploy = distenv.PhonyTarget( fap_deploy = distenv.PhonyTarget(
"fap_deploy", "fap_deploy",
"${PYTHON3} ${FBT_SCRIPT_DIR}/storage.py -p ${FLIP_PORT} send ${SOURCE} /ext/apps", [
source=Dir("#/assets/resources/apps"), [
"${PYTHON3}",
"${FBT_SCRIPT_DIR}/storage.py",
"-p",
"${FLIP_PORT}",
"send",
"${SOURCE}",
"/ext/apps",
]
],
source=firmware_env.Dir(("${RESOURCES_ROOT}/apps")),
) )
@@ -314,9 +322,7 @@ distenv.PhonyTarget(
) )
# Start Flipper CLI via PySerial's miniterm # Start Flipper CLI via PySerial's miniterm
distenv.PhonyTarget( distenv.PhonyTarget("cli", "${PYTHON3} ${FBT_SCRIPT_DIR}/serial_cli.py -p ${FLIP_PORT}")
"cli", "${PYTHON3} ${FBT_SCRIPT_DIR}/serial_cli.py -p ${FLIP_PORT}"
)
# Update WiFi devboard firmware # Update WiFi devboard firmware
distenv.PhonyTarget("devboard_flash", "${PYTHON3} ${FBT_SCRIPT_DIR}/wifi_board.py") distenv.PhonyTarget("devboard_flash", "${PYTHON3} ${FBT_SCRIPT_DIR}/wifi_board.py")

View File

@@ -71,7 +71,7 @@ static void direct_draw_run(DirectDraw* instance) {
size_t counter = 0; size_t counter = 0;
float fps = 0; float fps = 0;
vTaskPrioritySet(furi_thread_get_current_id(), FuriThreadPriorityIdle); furi_thread_set_current_priority(FuriThreadPriorityIdle);
do { do {
size_t elapsed = DWT->CYCCNT - start; size_t elapsed = DWT->CYCCNT - start;

View File

@@ -5,6 +5,7 @@ App(
cdefines=["APP_UNIT_TESTS"], cdefines=["APP_UNIT_TESTS"],
requires=["system_settings"], requires=["system_settings"],
provides=["delay_test"], provides=["delay_test"],
resources="resources",
order=100, order=100,
) )

View File

@@ -28,7 +28,7 @@ void bt_test_alloc() {
} }
void bt_test_free() { void bt_test_free() {
furi_assert(bt_test); furi_check(bt_test);
free(bt_test->nvm_ram_buff_ref); free(bt_test->nvm_ram_buff_ref);
free(bt_test->nvm_ram_buff_dut); free(bt_test->nvm_ram_buff_dut);
bt_keys_storage_free(bt_test->bt_keys_storage); bt_keys_storage_free(bt_test->bt_keys_storage);
@@ -89,7 +89,7 @@ static void bt_test_keys_remove_test_file() {
} }
MU_TEST(bt_test_keys_storage_serial_profile) { MU_TEST(bt_test_keys_storage_serial_profile) {
furi_assert(bt_test); furi_check(bt_test);
bt_test_keys_remove_test_file(); bt_test_keys_remove_test_file();
bt_test_keys_storage_profile(); bt_test_keys_storage_profile();

View File

@@ -27,7 +27,7 @@ static void infrared_test_alloc() {
} }
static void infrared_test_free() { static void infrared_test_free() {
furi_assert(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);
flipper_format_free(test->ff); flipper_format_free(test->ff);

View File

@@ -22,7 +22,7 @@ MU_TEST(manifest_iteration_test) {
ResourceManifestReader* manifest_reader = resource_manifest_reader_alloc(storage); ResourceManifestReader* manifest_reader = resource_manifest_reader_alloc(storage);
do { do {
// Open manifest file // Open manifest file
if(!resource_manifest_reader_open(manifest_reader, EXT_PATH("unit_tests/Manifest"))) { if(!resource_manifest_reader_open(manifest_reader, EXT_PATH("unit_tests/Manifest_test"))) {
result = false; result = false;
break; break;
} }

View File

@@ -34,7 +34,7 @@ static void nfc_test_alloc() {
} }
static void nfc_test_free() { static void nfc_test_free() {
furi_assert(nfc_test); furi_check(nfc_test);
furi_record_close(RECORD_STORAGE); furi_record_close(RECORD_STORAGE);
free(nfc_test); free(nfc_test);

View File

@@ -122,7 +122,7 @@ Nfc* nfc_alloc() {
} }
void nfc_free(Nfc* instance) { void nfc_free(Nfc* instance) {
furi_assert(instance); furi_check(instance);
free(instance); free(instance);
} }
@@ -165,9 +165,9 @@ NfcError nfc_iso14443a_listener_set_col_res_data(
uint8_t uid_len, uint8_t uid_len,
uint8_t* atqa, uint8_t* atqa,
uint8_t sak) { uint8_t sak) {
furi_assert(instance); furi_check(instance);
furi_assert(uid); furi_check(uid);
furi_assert(atqa); furi_check(atqa);
nfc_prepare_col_res_data(instance, uid, uid_len, atqa, sak); nfc_prepare_col_res_data(instance, uid, uid_len, atqa, sak);
@@ -176,7 +176,7 @@ NfcError nfc_iso14443a_listener_set_col_res_data(
static int32_t nfc_worker_poller(void* context) { static int32_t nfc_worker_poller(void* context) {
Nfc* instance = context; Nfc* instance = context;
furi_assert(instance->callback); furi_check(instance->callback);
instance->state = NfcStateReady; instance->state = NfcStateReady;
NfcCommand command = NfcCommandContinue; NfcCommand command = NfcCommandContinue;
@@ -196,7 +196,7 @@ static int32_t nfc_worker_poller(void* context) {
} }
static void nfc_worker_listener_pass_col_res(Nfc* instance, uint8_t* rx_data, uint16_t rx_bits) { static void nfc_worker_listener_pass_col_res(Nfc* instance, uint8_t* rx_data, uint16_t rx_bits) {
furi_assert(instance->col_res_status != Iso14443_3aColResStatusDone); furi_check(instance->col_res_status != Iso14443_3aColResStatusDone);
BitBuffer* tx_buffer = bit_buffer_alloc(NFC_MAX_BUFFER_SIZE); BitBuffer* tx_buffer = bit_buffer_alloc(NFC_MAX_BUFFER_SIZE);
bool processed = false; bool processed = false;
@@ -255,7 +255,7 @@ static void nfc_worker_listener_pass_col_res(Nfc* instance, uint8_t* rx_data, ui
static int32_t nfc_worker_listener(void* context) { static int32_t nfc_worker_listener(void* context) {
Nfc* instance = context; Nfc* instance = context;
furi_assert(instance->callback); furi_check(instance->callback);
NfcMessage message = {}; NfcMessage message = {};
@@ -295,17 +295,17 @@ static int32_t nfc_worker_listener(void* context) {
} }
void nfc_start(Nfc* instance, NfcEventCallback callback, void* context) { void nfc_start(Nfc* instance, NfcEventCallback callback, void* context) {
furi_assert(instance); furi_check(instance);
furi_assert(instance->worker_thread == NULL); furi_check(instance->worker_thread == NULL);
if(instance->mode == NfcModeListener) { if(instance->mode == NfcModeListener) {
furi_assert(listener_queue == NULL); furi_check(listener_queue == NULL);
// Check that poller didn't start // Check that poller didn't start
furi_assert(poller_queue == NULL); furi_check(poller_queue == NULL);
} else { } else {
furi_assert(poller_queue == NULL); furi_check(poller_queue == NULL);
// Check that poller is started after listener // Check that poller is started after listener
furi_assert(listener_queue); furi_check(listener_queue);
} }
instance->callback = callback; instance->callback = callback;
@@ -334,8 +334,8 @@ void nfc_start(Nfc* instance, NfcEventCallback callback, void* context) {
} }
void nfc_stop(Nfc* instance) { void nfc_stop(Nfc* instance) {
furi_assert(instance); furi_check(instance);
furi_assert(instance->worker_thread); furi_check(instance->worker_thread);
if(instance->mode == NfcModeListener) { if(instance->mode == NfcModeListener) {
NfcMessage message = {.type = NfcMessageTypeAbort}; NfcMessage message = {.type = NfcMessageTypeAbort};
@@ -361,10 +361,10 @@ void nfc_stop(Nfc* instance) {
// Called from worker thread // Called from worker thread
NfcError nfc_listener_tx(Nfc* instance, const BitBuffer* tx_buffer) { NfcError nfc_listener_tx(Nfc* instance, const BitBuffer* tx_buffer) {
furi_assert(instance); furi_check(instance);
furi_assert(poller_queue); furi_check(poller_queue);
furi_assert(listener_queue); furi_check(listener_queue);
furi_assert(tx_buffer); furi_check(tx_buffer);
NfcMessage message = {}; NfcMessage message = {};
message.type = NfcMessageTypeTx; message.type = NfcMessageTypeTx;
@@ -382,11 +382,11 @@ NfcError nfc_iso14443a_listener_tx_custom_parity(Nfc* instance, const BitBuffer*
NfcError NfcError
nfc_poller_trx(Nfc* instance, const BitBuffer* tx_buffer, BitBuffer* rx_buffer, uint32_t fwt) { nfc_poller_trx(Nfc* instance, const BitBuffer* tx_buffer, BitBuffer* rx_buffer, uint32_t fwt) {
furi_assert(instance); furi_check(instance);
furi_assert(tx_buffer); furi_check(tx_buffer);
furi_assert(rx_buffer); furi_check(rx_buffer);
furi_assert(poller_queue); furi_check(poller_queue);
furi_assert(listener_queue); furi_check(listener_queue);
UNUSED(fwt); UNUSED(fwt);
NfcError error = NfcErrorNone; NfcError error = NfcErrorNone;
@@ -396,7 +396,7 @@ NfcError
message.data.data_bits = bit_buffer_get_size(tx_buffer); message.data.data_bits = bit_buffer_get_size(tx_buffer);
bit_buffer_write_bytes(tx_buffer, message.data.data, bit_buffer_get_size_bytes(tx_buffer)); bit_buffer_write_bytes(tx_buffer, message.data.data, bit_buffer_get_size_bytes(tx_buffer));
// Tx // Tx
furi_assert(furi_message_queue_put(listener_queue, &message, FuriWaitForever) == FuriStatusOk); furi_check(furi_message_queue_put(listener_queue, &message, FuriWaitForever) == FuriStatusOk);
// Rx // Rx
FuriStatus status = furi_message_queue_get(poller_queue, &message, 50); FuriStatus status = furi_message_queue_get(poller_queue, &message, 50);

View File

@@ -18,6 +18,8 @@
#include <cli/cli.h> #include <cli/cli.h>
#include <loader/loader.h> #include <loader/loader.h>
#include <protobuf_version.h> #include <protobuf_version.h>
#include <FreeRTOS.h>
#include <semphr.h> #include <semphr.h>
LIST_DEF(MsgList, PB_Main, M_POD_OPLIST) LIST_DEF(MsgList, PB_Main, M_POD_OPLIST)
@@ -36,7 +38,7 @@ typedef struct {
FuriStreamBuffer* output_stream; FuriStreamBuffer* output_stream;
SemaphoreHandle_t close_session_semaphore; SemaphoreHandle_t close_session_semaphore;
SemaphoreHandle_t terminate_semaphore; SemaphoreHandle_t terminate_semaphore;
TickType_t timeout; uint32_t timeout;
} RpcSessionContext; } RpcSessionContext;
static RpcSessionContext rpc_session[TEST_RPC_SESSIONS]; static RpcSessionContext rpc_session[TEST_RPC_SESSIONS];
@@ -544,7 +546,7 @@ static bool test_rpc_pb_stream_read(pb_istream_t* istream, pb_byte_t* buf, size_
RpcSessionContext* session_context = istream->state; RpcSessionContext* session_context = istream->state;
size_t bytes_received = 0; size_t bytes_received = 0;
TickType_t now = xTaskGetTickCount(); uint32_t now = furi_get_tick();
int32_t time_left = session_context->timeout - now; int32_t time_left = session_context->timeout - now;
time_left = MAX(time_left, 0); time_left = MAX(time_left, 0);
bytes_received = bytes_received =
@@ -688,7 +690,7 @@ static void test_rpc_decode_and_compare(MsgList_t expected_msg_list, uint8_t ses
furi_check(!MsgList_empty_p(expected_msg_list)); furi_check(!MsgList_empty_p(expected_msg_list));
furi_check(session < TEST_RPC_SESSIONS); furi_check(session < TEST_RPC_SESSIONS);
rpc_session[session].timeout = xTaskGetTickCount() + MAX_RECEIVE_OUTPUT_TIMEOUT; rpc_session[session].timeout = furi_get_tick() + MAX_RECEIVE_OUTPUT_TIMEOUT;
pb_istream_t istream = { pb_istream_t istream = {
.callback = test_rpc_pb_stream_read, .callback = test_rpc_pb_stream_read,
.state = &rpc_session[session], .state = &rpc_session[session],
@@ -712,7 +714,7 @@ static void test_rpc_decode_and_compare(MsgList_t expected_msg_list, uint8_t ses
pb_release(&PB_Main_msg, &result); pb_release(&PB_Main_msg, &result);
} }
rpc_session[session].timeout = xTaskGetTickCount() + 50; rpc_session[session].timeout = furi_get_tick() + 50;
if(pb_decode_ex(&istream, &PB_Main_msg, &result, PB_DECODE_DELIMITED)) { if(pb_decode_ex(&istream, &PB_Main_msg, &result, PB_DECODE_DELIMITED)) {
mu_fail("decoded more than expected"); mu_fail("decoded more than expected");
} }

View File

@@ -65,8 +65,8 @@ const UnitTest unit_tests[] = {
void minunit_print_progress() { void minunit_print_progress() {
static const char progress[] = {'\\', '|', '/', '-'}; static const char progress[] = {'\\', '|', '/', '-'};
static uint8_t progress_counter = 0; static uint8_t progress_counter = 0;
static TickType_t last_tick = 0; static uint32_t last_tick = 0;
TickType_t current_tick = xTaskGetTickCount(); uint32_t current_tick = furi_get_tick();
if(current_tick - last_tick > 20) { if(current_tick - last_tick > 20) {
last_tick = current_tick; last_tick = current_tick;
printf("[%c]\033[3D", progress[++progress_counter % COUNT_OF(progress)]); printf("[%c]\033[3D", progress[++progress_counter % COUNT_OF(progress)]);

View File

@@ -5,6 +5,7 @@ App(
entry_point="example_plugins_app", entry_point="example_plugins_app",
stack_size=2 * 1024, stack_size=2 * 1024,
fap_category="Examples", fap_category="Examples",
sources=["*.c", "!plugin*.c"],
) )
App( App(
@@ -21,6 +22,7 @@ App(
apptype=FlipperAppType.PLUGIN, apptype=FlipperAppType.PLUGIN,
entry_point="example_plugin1_ep", entry_point="example_plugin1_ep",
requires=["example_plugins", "example_plugins_multi"], requires=["example_plugins", "example_plugins_multi"],
sources=["plugin1.c"],
) )
App( App(
@@ -28,4 +30,5 @@ App(
apptype=FlipperAppType.PLUGIN, apptype=FlipperAppType.PLUGIN,
entry_point="example_plugin2_ep", entry_point="example_plugin2_ep",
requires=["example_plugins_multi"], requires=["example_plugins_multi"],
sources=["plugin2.c"],
) )

View File

@@ -5,6 +5,7 @@ App(
entry_point="example_advanced_plugins_app", entry_point="example_advanced_plugins_app",
stack_size=2 * 1024, stack_size=2 * 1024,
fap_category="Examples", fap_category="Examples",
sources=["*.c*", "!plugin*.c"],
) )
App( App(

View File

@@ -6,6 +6,7 @@ App(
stack_size=2 * 1024, stack_size=2 * 1024,
icon="A_BadUsb_14", icon="A_BadUsb_14",
order=70, order=70,
resources="resources",
fap_libs=["assets"], fap_libs=["assets"],
fap_icon="icon.png", fap_icon="icon.png",
fap_category="USB", fap_category="USB",

Some files were not shown because too many files have changed in this diff Show More