subghz: add analyzer frequency logs (#1914)

* subghz: add analyzer frequency logs
* SubGhz: switch to change on short press
* SubGhz: use full RSSI bar for history view

Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
Alexandre Díaz
2022-11-03 08:57:56 +01:00
committed by GitHub
parent eee90c6c40
commit 60d125e72a
3 changed files with 355 additions and 25 deletions

View File

@@ -0,0 +1,27 @@
#include "subghz_frequency_analyzer_log_item_array.h"
const char*
subghz_frequency_analyzer_log_get_order_name(SubGhzFrequencyAnalyzerLogOrderBy order_by) {
if(order_by == SubGhzFrequencyAnalyzerLogOrderBySeqAsc) {
return "Seq. A";
}
if(order_by == SubGhzFrequencyAnalyzerLogOrderByCountDesc) {
return "Count D";
}
if(order_by == SubGhzFrequencyAnalyzerLogOrderByCountAsc) {
return "Count A";
}
if(order_by == SubGhzFrequencyAnalyzerLogOrderByRSSIDesc) {
return "RSSI D";
}
if(order_by == SubGhzFrequencyAnalyzerLogOrderByRSSIAsc) {
return "RSSI A";
}
if(order_by == SubGhzFrequencyAnalyzerLogOrderByFrequencyDesc) {
return "Freq. D";
}
if(order_by == SubGhzFrequencyAnalyzerLogOrderByFrequencyAsc) {
return "Freq. A";
}
return "Seq. D";
}

View File

@@ -0,0 +1,73 @@
#pragma once
#include <m-tuple.h>
#include <m-array.h>
#include <m-algo.h>
#include <m-funcobj.h>
typedef enum {
SubGhzFrequencyAnalyzerLogOrderBySeqDesc,
SubGhzFrequencyAnalyzerLogOrderBySeqAsc,
SubGhzFrequencyAnalyzerLogOrderByCountDesc,
SubGhzFrequencyAnalyzerLogOrderByCountAsc,
SubGhzFrequencyAnalyzerLogOrderByRSSIDesc,
SubGhzFrequencyAnalyzerLogOrderByRSSIAsc,
SubGhzFrequencyAnalyzerLogOrderByFrequencyDesc,
SubGhzFrequencyAnalyzerLogOrderByFrequencyAsc,
} SubGhzFrequencyAnalyzerLogOrderBy;
const char*
subghz_frequency_analyzer_log_get_order_name(SubGhzFrequencyAnalyzerLogOrderBy order_by);
TUPLE_DEF2(
SubGhzFrequencyAnalyzerLogItem,
(seq, uint8_t),
(frequency, uint32_t),
(count, uint8_t),
(rssi_max, uint8_t))
/* Register globaly the oplist */
#define M_OPL_SubGhzFrequencyAnalyzerLogItem_t() \
TUPLE_OPLIST(SubGhzFrequencyAnalyzerLogItem, M_POD_OPLIST, M_DEFAULT_OPLIST, M_DEFAULT_OPLIST)
/* Define the array, register the oplist and define further algorithms on it */
ARRAY_DEF(SubGhzFrequencyAnalyzerLogItemArray, SubGhzFrequencyAnalyzerLogItem_t)
#define M_OPL_SubGhzFrequencyAnalyzerLogItemArray_t() \
ARRAY_OPLIST(SubGhzFrequencyAnalyzerLogItemArray, M_OPL_SubGhzFrequencyAnalyzerLogItem_t())
ALGO_DEF(SubGhzFrequencyAnalyzerLogItemArray, SubGhzFrequencyAnalyzerLogItemArray_t)
FUNC_OBJ_INS_DEF(
SubGhzFrequencyAnalyzerLogItemArray_compare_by /* name of the instance */,
SubGhzFrequencyAnalyzerLogItemArray_cmp_obj /* name of the interface */,
(a,
b) /* name of the input parameters of the function like object. The type are inherited from the interface. */
,
{
/* code of the function object */
if(self->order_by == SubGhzFrequencyAnalyzerLogOrderByFrequencyAsc) {
return a->frequency < b->frequency ? -1 : a->frequency > b->frequency;
}
if(self->order_by == SubGhzFrequencyAnalyzerLogOrderByFrequencyDesc) {
return a->frequency > b->frequency ? -1 : a->frequency < b->frequency;
}
if(self->order_by == SubGhzFrequencyAnalyzerLogOrderByRSSIAsc) {
return a->rssi_max < b->rssi_max ? -1 : a->rssi_max > b->rssi_max;
}
if(self->order_by == SubGhzFrequencyAnalyzerLogOrderByRSSIDesc) {
return a->rssi_max > b->rssi_max ? -1 : a->rssi_max < b->rssi_max;
}
if(self->order_by == SubGhzFrequencyAnalyzerLogOrderByCountAsc) {
return a->count < b->count ? -1 : a->count > b->count;
}
if(self->order_by == SubGhzFrequencyAnalyzerLogOrderByCountDesc) {
return a->count > b->count ? -1 : a->count < b->count;
}
if(self->order_by == SubGhzFrequencyAnalyzerLogOrderBySeqAsc) {
return a->seq < b->seq ? -1 : a->seq > b->seq;
}
return a->seq > b->seq ? -1 : a->seq < b->seq;
},
/* Additional fields stored in the function object */
(order_by, SubGhzFrequencyAnalyzerLogOrderBy))
#define M_OPL_SubGhzFrequencyAnalyzerLogItemArray_compare_by_t() \
FUNC_OBJ_INS_OPLIST(SubGhzFrequencyAnalyzerLogItemArray_compare_by, M_DEFAULT_OPLIST)