1
mirror of https://github.com/flipperdevices/flipperzero-firmware.git synced 2025-12-12 20:59:50 +04:00
Files
flipperzero-firmware/applications/main/subghz/helpers/subghz_threshold_rssi.c
hedger ffa3996a5e [FL-3867] Code formatting update (#3765)
* clang-format: AllowShortEnumsOnASingleLine: false
* clang-format: InsertNewlineAtEOF: true
* clang-format: Standard:        c++20
* clang-format: AlignConsecutiveBitFields
* clang-format: AlignConsecutiveMacros
* clang-format: RemoveParentheses: ReturnStatement
* clang-format: RemoveSemicolon: true
* Restored RemoveParentheses: Leave, retained general changes for it
* formatting: fixed logging TAGs
* Formatting update for dev

Co-authored-by: あく <alleteam@gmail.com>
2024-07-15 13:38:49 +09:00

61 lines
1.8 KiB
C

#include "subghz_threshold_rssi.h"
#include "../views/subghz_read_raw.h"
#include <float_tools.h>
#define TAG "SubGhzThresholdRssi"
#define THRESHOLD_RSSI_LOW_COUNT 10
struct SubGhzThresholdRssi {
float threshold_rssi;
uint8_t threshold_rssi_low_count;
};
SubGhzThresholdRssi* subghz_threshold_rssi_alloc(void) {
SubGhzThresholdRssi* instance = malloc(sizeof(SubGhzThresholdRssi));
instance->threshold_rssi = SUBGHZ_RAW_THRESHOLD_MIN;
instance->threshold_rssi_low_count = THRESHOLD_RSSI_LOW_COUNT;
return instance;
}
void subghz_threshold_rssi_free(SubGhzThresholdRssi* instance) {
furi_assert(instance);
free(instance);
}
void subghz_threshold_rssi_set(SubGhzThresholdRssi* instance, float rssi) {
furi_assert(instance);
instance->threshold_rssi = rssi;
}
float subghz_threshold_rssi_get(SubGhzThresholdRssi* instance) {
furi_assert(instance);
return instance->threshold_rssi;
}
SubGhzThresholdRssiData subghz_threshold_get_rssi_data(SubGhzThresholdRssi* instance, float rssi) {
furi_assert(instance);
SubGhzThresholdRssiData ret = {.rssi = rssi, .is_above = false};
if(float_is_equal(instance->threshold_rssi, SUBGHZ_RAW_THRESHOLD_MIN)) {
ret.is_above = true;
} else {
if(rssi < instance->threshold_rssi) {
instance->threshold_rssi_low_count++;
if(instance->threshold_rssi_low_count > THRESHOLD_RSSI_LOW_COUNT) {
instance->threshold_rssi_low_count = THRESHOLD_RSSI_LOW_COUNT;
}
ret.is_above = false;
} else {
instance->threshold_rssi_low_count = 0;
}
if(instance->threshold_rssi_low_count == THRESHOLD_RSSI_LOW_COUNT) {
ret.is_above = false;
} else {
ret.is_above = true;
}
}
return ret;
}