Show RSSI in Weather Station app (#2395)

* Show RSSI in weather station app: copy changes from main SubGHz app
* WeatherStation: remove dead code
* WeatherStation: sync naming schema with current code.

Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
MX 2023-02-20 18:19:53 +03:00 committed by GitHub
parent b15c4afea1
commit 0a3ff7f85a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 36 additions and 2 deletions

View File

@ -195,6 +195,10 @@ bool weather_station_scene_receiver_on_event(void* context, SceneManagerEvent ev
ws_hopper_update(app); ws_hopper_update(app);
weather_station_scene_receiver_update_statusbar(app); weather_station_scene_receiver_update_statusbar(app);
} }
// Get current RSSI
float rssi = furi_hal_subghz_get_rssi();
ws_view_receiver_set_rssi(app->ws_receiver, rssi);
if(app->txrx->txrx_state == WSTxRxStateRx) { if(app->txrx->txrx_state == WSTxRxStateRx) {
notification_message(app->notifications, &sequence_blink_cyan_10); notification_message(app->notifications, &sequence_blink_cyan_10);
} }

View File

@ -12,6 +12,7 @@
#define MENU_ITEMS 4u #define MENU_ITEMS 4u
#define UNLOCK_CNT 3 #define UNLOCK_CNT 3
#define SUBGHZ_RAW_TRESHOLD_MIN -90.0f
typedef struct { typedef struct {
FuriString* item_str; FuriString* item_str;
uint8_t type; uint8_t type;
@ -59,8 +60,24 @@ typedef struct {
uint16_t list_offset; uint16_t list_offset;
uint16_t history_item; uint16_t history_item;
WSReceiverBarShow bar_show; WSReceiverBarShow bar_show;
uint8_t u_rssi;
} WSReceiverModel; } WSReceiverModel;
void ws_view_receiver_set_rssi(WSReceiver* instance, float rssi) {
furi_assert(instance);
with_view_model(
instance->view,
WSReceiverModel * model,
{
if(rssi < SUBGHZ_RAW_TRESHOLD_MIN) {
model->u_rssi = 0;
} else {
model->u_rssi = (uint8_t)(rssi - SUBGHZ_RAW_TRESHOLD_MIN);
}
},
true);
}
void ws_view_receiver_set_lock(WSReceiver* ws_receiver, WSLock lock) { void ws_view_receiver_set_lock(WSReceiver* ws_receiver, WSLock lock) {
furi_assert(ws_receiver); furi_assert(ws_receiver);
ws_receiver->lock_count = 0; ws_receiver->lock_count = 0;
@ -164,13 +181,22 @@ static void ws_view_receiver_draw_frame(Canvas* canvas, uint16_t idx, bool scrol
canvas_draw_dot(canvas, scrollbar ? 121 : 126, (0 + idx * FRAME_HEIGHT) + 11); canvas_draw_dot(canvas, scrollbar ? 121 : 126, (0 + idx * FRAME_HEIGHT) + 11);
} }
static void ws_view_rssi_draw(Canvas* canvas, WSReceiverModel* model) {
for(uint8_t i = 1; i < model->u_rssi; i++) {
if(i % 5) {
canvas_draw_dot(canvas, 46 + i, 50);
canvas_draw_dot(canvas, 47 + i, 51);
canvas_draw_dot(canvas, 46 + i, 52);
}
}
}
void ws_view_receiver_draw(Canvas* canvas, WSReceiverModel* model) { void ws_view_receiver_draw(Canvas* canvas, WSReceiverModel* model) {
canvas_clear(canvas); canvas_clear(canvas);
canvas_set_color(canvas, ColorBlack); canvas_set_color(canvas, ColorBlack);
canvas_set_font(canvas, FontSecondary); canvas_set_font(canvas, FontSecondary);
elements_button_left(canvas, "Config"); elements_button_left(canvas, "Config");
canvas_draw_line(canvas, 46, 51, 125, 51);
bool scrollbar = model->history_item > 4; bool scrollbar = model->history_item > 4;
FuriString* str_buff; FuriString* str_buff;
@ -203,10 +229,12 @@ void ws_view_receiver_draw(Canvas* canvas, WSReceiverModel* model) {
canvas_draw_icon(canvas, 0, 0, &I_Scanning_123x52); canvas_draw_icon(canvas, 0, 0, &I_Scanning_123x52);
canvas_set_font(canvas, FontPrimary); canvas_set_font(canvas, FontPrimary);
canvas_draw_str(canvas, 63, 46, "Scanning..."); canvas_draw_str(canvas, 63, 46, "Scanning...");
canvas_draw_line(canvas, 46, 51, 125, 51);
canvas_set_font(canvas, FontSecondary); canvas_set_font(canvas, FontSecondary);
} }
// Draw RSSI
ws_view_rssi_draw(canvas, model);
switch(model->bar_show) { switch(model->bar_show) {
case WSReceiverBarShowLock: case WSReceiverBarShowLock:
canvas_draw_icon(canvas, 64, 55, &I_Lock_7x8); canvas_draw_icon(canvas, 64, 55, &I_Lock_7x8);

View File

@ -8,6 +8,8 @@ typedef struct WSReceiver WSReceiver;
typedef void (*WSReceiverCallback)(WSCustomEvent event, void* context); typedef void (*WSReceiverCallback)(WSCustomEvent event, void* context);
void ws_view_receiver_set_rssi(WSReceiver* instance, float rssi);
void ws_view_receiver_set_lock(WSReceiver* ws_receiver, WSLock keyboard); void ws_view_receiver_set_lock(WSReceiver* ws_receiver, WSLock keyboard);
void ws_view_receiver_set_callback( void ws_view_receiver_set_callback(