Short duration filter setting

This commit is contained in:
VerstreuteSeele
2023-01-16 03:23:25 +01:00
parent 3da5655411
commit 8b5f24978c
3 changed files with 28 additions and 20 deletions
+2 -1
View File
@@ -1,5 +1,5 @@
entry,status,name,type,params
Version,+,12.1,,
Version,+,12.2,,
Header,+,applications/services/bt/bt_service/bt.h,,
Header,+,applications/services/cli/cli.h,,
Header,+,applications/services/cli/cli_vcp.h,,
@@ -3190,6 +3190,7 @@ Function,+,subghz_worker_free,void,SubGhzWorker*
Function,+,subghz_worker_is_running,_Bool,SubGhzWorker*
Function,+,subghz_worker_rx_callback,void,"_Bool, uint32_t, void*"
Function,+,subghz_worker_set_context,void,"SubGhzWorker*, void*"
Function,+,subghz_worker_set_filter,void,"SubGhzWorker*, uint16_t"
Function,+,subghz_worker_set_overrun_callback,void,"SubGhzWorker*, SubGhzWorkerOverrunCallback"
Function,+,subghz_worker_set_pair_callback,void,"SubGhzWorker*, SubGhzWorkerPairCallback"
Function,+,subghz_worker_start,void,SubGhzWorker*
1 entry status name type params
2 Version + 12.1 12.2
3 Header + applications/services/bt/bt_service/bt.h
4 Header + applications/services/cli/cli.h
5 Header + applications/services/cli/cli_vcp.h
3190 Function + subghz_worker_is_running _Bool SubGhzWorker*
3191 Function + subghz_worker_rx_callback void _Bool, uint32_t, void*
3192 Function + subghz_worker_set_context void SubGhzWorker*, void*
3193 Function + subghz_worker_set_filter void SubGhzWorker*, uint16_t
3194 Function + subghz_worker_set_overrun_callback void SubGhzWorker*, SubGhzWorkerOverrunCallback
3195 Function + subghz_worker_set_pair_callback void SubGhzWorker*, SubGhzWorkerPairCallback
3196 Function + subghz_worker_start void SubGhzWorker*
+17 -19
View File
@@ -12,7 +12,6 @@ struct SubGhzWorker {
volatile bool overrun;
LevelDuration filter_level_duration;
bool filter_running;
uint16_t filter_duration;
SubGhzWorkerOverrunCallback overrun_callback;
@@ -59,24 +58,19 @@ static int32_t subghz_worker_thread_callback(void* context) {
bool level = level_duration_get_level(level_duration);
uint32_t duration = level_duration_get_duration(level_duration);
if(instance->filter_running) {
if((duration < instance->filter_duration) ||
(instance->filter_level_duration.level == level)) {
instance->filter_level_duration.duration += duration;
if((duration < instance->filter_duration) ||
(instance->filter_level_duration.level == level)) {
instance->filter_level_duration.duration += duration;
} else if(instance->filter_level_duration.level != level) {
if(instance->pair_callback)
instance->pair_callback(
instance->context,
instance->filter_level_duration.level,
instance->filter_level_duration.duration);
instance->filter_level_duration.duration = duration;
instance->filter_level_duration.level = level;
}
} else {
} else if(instance->filter_level_duration.level != level) {
if(instance->pair_callback)
instance->pair_callback(instance->context, level, duration);
instance->pair_callback(
instance->context,
instance->filter_level_duration.level,
instance->filter_level_duration.duration);
instance->filter_level_duration.duration = duration;
instance->filter_level_duration.level = level;
}
}
}
@@ -94,8 +88,7 @@ SubGhzWorker* subghz_worker_alloc() {
instance->stream =
furi_stream_buffer_alloc(sizeof(LevelDuration) * 4096, sizeof(LevelDuration));
//setting filter
instance->filter_running = true;
//setting default filter in us
instance->filter_duration = 30;
return instance;
@@ -149,3 +142,8 @@ bool subghz_worker_is_running(SubGhzWorker* instance) {
furi_assert(instance);
return instance->running;
}
void subghz_worker_set_filter(SubGhzWorker* instance, uint16_t timeout) {
furi_assert(instance);
instance->filter_duration = timeout;
}
+9
View File
@@ -67,6 +67,15 @@ void subghz_worker_stop(SubGhzWorker* instance);
*/
bool subghz_worker_is_running(SubGhzWorker* instance);
/**
* Short duration filter setting.
* glues short durations into 1. The default setting is 30 us, if set to 0 the filter will be disabled
* @param instance Pointer to a SubGhzWorker instance
* @param timeout time in us
*/
void subghz_worker_set_filter(SubGhzWorker* instance, uint16_t timeout);
#ifdef __cplusplus
}
#endif