Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ClusterM/flipperzero-firmware.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorあく <alleteam@gmail.com>2021-12-15 15:23:16 +0300
committerGitHub <noreply@github.com>2021-12-15 15:23:16 +0300
commit63642617eeb74cfce8b0531921af641b59a36498 (patch)
treee7b8f0eee7639f5dd37f61ab3d97f52c0da1c0c1 /firmware
parentf6db5dd2a8a1a56295e1e13bf9cfd9c717569945 (diff)
Hide debug tools if debug is not enabled. Application: update debug tools code base. SubGhz: log duty cycle. (#903)
* Application: clean debug_tools code base. * SubGhz: add duty cycle logging. * Application: hide debug tools if not enabled. Gui: move icon_animation allocation to menu module.
Diffstat (limited to 'firmware')
-rw-r--r--firmware/targets/f7/furi-hal/furi-hal-subghz.c32
1 files changed, 29 insertions, 3 deletions
diff --git a/firmware/targets/f7/furi-hal/furi-hal-subghz.c b/firmware/targets/f7/furi-hal/furi-hal-subghz.c
index 3e810880..1b794182 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-subghz.c
+++ b/firmware/targets/f7/furi-hal/furi-hal-subghz.c
@@ -10,6 +10,9 @@
#include <cc1101.h>
#include <stdio.h>
+#define __STDC_FORMAT_MACROS
+#include <inttypes.h>
+
#define TAG "FuriHalSubGhz"
static volatile SubGhzState furi_hal_subghz_state = SubGhzStateInit;
@@ -808,6 +811,8 @@ typedef struct {
bool flip_flop;
FuriHalSubGhzAsyncTxCallback callback;
void* callback_context;
+ uint64_t duty_high;
+ uint64_t duty_low;
} FuriHalSubGhzAsyncTx;
static FuriHalSubGhzAsyncTx furi_hal_subghz_async_tx = {0};
@@ -817,21 +822,30 @@ static void furi_hal_subghz_async_tx_refill(uint32_t* buffer, size_t samples) {
bool is_odd = samples % 2;
LevelDuration ld =
furi_hal_subghz_async_tx.callback(furi_hal_subghz_async_tx.callback_context);
- if(level_duration_is_wait(ld)) return;
- if(level_duration_is_reset(ld)) {
+
+ if(level_duration_is_wait(ld)) {
+ return;
+ } else if(level_duration_is_reset(ld)) {
// One more even sample required to end at low level
if(is_odd) {
*buffer = API_HAL_SUBGHZ_ASYNC_TX_GUARD_TIME;
buffer++;
samples--;
+ furi_hal_subghz_async_tx.duty_low += API_HAL_SUBGHZ_ASYNC_TX_GUARD_TIME;
}
break;
} else {
// Inject guard time if level is incorrect
- if(is_odd == level_duration_get_level(ld)) {
+ bool level = level_duration_get_level(ld);
+ if(is_odd == level) {
*buffer = API_HAL_SUBGHZ_ASYNC_TX_GUARD_TIME;
buffer++;
samples--;
+ if (!level) {
+ furi_hal_subghz_async_tx.duty_high += API_HAL_SUBGHZ_ASYNC_TX_GUARD_TIME;
+ } else {
+ furi_hal_subghz_async_tx.duty_low += API_HAL_SUBGHZ_ASYNC_TX_GUARD_TIME;
+ }
}
uint32_t duration = level_duration_get_duration(ld);
@@ -839,6 +853,12 @@ static void furi_hal_subghz_async_tx_refill(uint32_t* buffer, size_t samples) {
*buffer = duration;
buffer++;
samples--;
+
+ if (level) {
+ furi_hal_subghz_async_tx.duty_high += duration;
+ } else {
+ furi_hal_subghz_async_tx.duty_low += duration;
+ }
}
}
@@ -888,6 +908,9 @@ bool furi_hal_subghz_start_async_tx(FuriHalSubGhzAsyncTxCallback callback, void*
furi_hal_subghz_state = SubGhzStateAsyncTx;
+ furi_hal_subghz_async_tx.duty_low = 0;
+ furi_hal_subghz_async_tx.duty_high = 0;
+
furi_hal_subghz_async_tx.buffer =
furi_alloc(API_HAL_SUBGHZ_ASYNC_TX_BUFFER_FULL * sizeof(uint32_t));
furi_hal_subghz_async_tx_refill(
@@ -994,5 +1017,8 @@ void furi_hal_subghz_stop_async_tx() {
free(furi_hal_subghz_async_tx.buffer);
+ float duty_cycle = 100.0f * (float)furi_hal_subghz_async_tx.duty_high / ((float)furi_hal_subghz_async_tx.duty_low + (float)furi_hal_subghz_async_tx.duty_high);
+ FURI_LOG_D(TAG, "Async TX Radio stats: on %0.0fus, off %0.0fus, DutyCycle: %0.0f%%", (float)furi_hal_subghz_async_tx.duty_high, (float)furi_hal_subghz_async_tx.duty_low, duty_cycle);
+
furi_hal_subghz_state = SubGhzStateIdle;
}