From 881b6d26340378af253aabc0644617904c90efc2 Mon Sep 17 00:00:00 2001 From: Eng1n33r Date: Wed, 22 Jun 2022 04:11:52 +0300 Subject: [PATCH] spectrum analyzer new mode --- CHANGELOG.md | 1 + ReadMe.md | 2 +- applications/snake_game/snake_game.c | 9 ++++---- .../spectrum_analyzer/spectrum_analyzer.c | 22 ++++++++++++++++--- .../spectrum_analyzer/spectrum_analyzer.h | 9 +++++++- .../spectrum_analyzer_worker.c | 8 ++++++- applications/tetris_game/tetris_game.c | 8 ++++--- 7 files changed, 46 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d05c2bab6..e0eea9d45 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,5 @@ ### New Update +* Spectrum Analyzer - ULTRA NARROW mode * Merged latest ofw dev changes: Infrared app C port, nfc: NTAG21x complete emulation, nfc: DESFire fixes SubGhz: frequency analyzer combined frequency detection method, etc... diff --git a/ReadMe.md b/ReadMe.md index 596fb3273..487215247 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -176,7 +176,7 @@ Use **`flipper-z-{target}-full-{suffix}.dfu`** to flash your device. - [UniversalRF Remix (By ESurge)(Original UniversalRF By jimilinuxguy)](https://github.com/ESurge/flipperzero-firmware-unirfremix) - [WAV Player (By DrZlo13)](https://github.com/flipperdevices/flipperzero-firmware/tree/zlo/wav-player) With Fix From [Atmanos](https://github.com/at-manos) - [Tetris (By jeffplang)](https://github.com/jeffplang/flipperzero-firmware/tree/tetris_game/applications/tetris_game) -- [Spectrum Analyzer (By jolcese)](https://github.com/jolcese/flipperzero-firmware/tree/spectrum/applications/spectrum_analyzer) +- [Spectrum Analyzer (By jolcese)](https://github.com/jolcese/flipperzero-firmware/tree/spectrum/applications/spectrum_analyzer) - [ULTRA NARROW mode](https://github.com/theY4Kman/flipperzero-firmware) - [Arkanoid (By gotnull)](https://github.com/gotnull/flipperzero-firmware-wPlugins) - [Tic Tac Toe (By gotnull)](https://github.com/gotnull/flipperzero-firmware-wPlugins) diff --git a/applications/snake_game/snake_game.c b/applications/snake_game/snake_game.c index 1f33d414b..8e7945448 100644 --- a/applications/snake_game/snake_game.c +++ b/applications/snake_game/snake_game.c @@ -85,10 +85,11 @@ static void snake_game_render_callback(Canvas* const canvas, void* ctx) { } // Show score on the game field - char buffer2[6]; - snprintf(buffer2, sizeof(buffer2), "%u", snake_state->len - 7); - canvas_draw_str_aligned(canvas, 126, 8, AlignRight, AlignBottom, buffer2); - + if(snake_state->state != GameStateGameOver) { + char buffer2[6]; + snprintf(buffer2, sizeof(buffer2), "%u", snake_state->len - 7); + canvas_draw_str_aligned(canvas, 126, 8, AlignRight, AlignBottom, buffer2); + } // Game Over banner if(snake_state->state == GameStateGameOver) { // Screen is 128x64 px diff --git a/applications/spectrum_analyzer/spectrum_analyzer.c b/applications/spectrum_analyzer/spectrum_analyzer.c index 508e3ea62..feac2ef8b 100644 --- a/applications/spectrum_analyzer/spectrum_analyzer.c +++ b/applications/spectrum_analyzer/spectrum_analyzer.c @@ -6,8 +6,6 @@ #include #include "spectrum_analyzer.h" -#include - #include #include "spectrum_analyzer_worker.h" @@ -64,6 +62,10 @@ void spectrum_analyzer_draw_scale(Canvas* canvas, const SpectrumAnalyzerModel* m tag_left = model->center_freq - 2; tag_right = model->center_freq + 2; break; + case ULTRANARROW: + tag_left = model->center_freq - 1; + tag_right = model->center_freq + 1; + break; case ULTRAWIDE: tag_left = model->center_freq - 40; tag_right = model->center_freq + 40; @@ -194,6 +196,11 @@ void spectrum_analyzer_calculate_frequencies(SpectrumAnalyzerModel* model) { step = NARROW_STEP; model->spacing = NARROW_SPACING; break; + case ULTRANARROW: + margin = ULTRANARROW_MARGIN; + step = ULTRANARROW_STEP; + model->spacing = ULTRANARROW_SPACING; + break; case ULTRAWIDE: margin = ULTRAWIDE_MARGIN; step = ULTRAWIDE_STEP; @@ -392,6 +399,9 @@ int32_t spectrum_analyzer_app(void* p) { case NARROW: hstep = NARROW_STEP; break; + case ULTRANARROW: + hstep = ULTRANARROW_STEP; + break; case ULTRAWIDE: hstep = ULTRAWIDE_STEP; break; @@ -429,13 +439,19 @@ int32_t spectrum_analyzer_app(void* p) { model->width = NARROW; break; case NARROW: + model->width = ULTRANARROW; + break; + case ULTRANARROW: model->width = ULTRAWIDE; break; case ULTRAWIDE: + model->width = WIDE; + break; default: model->width = WIDE; + break; } - } + } spectrum_analyzer_calculate_frequencies(model); spectrum_analyzer_worker_set_frequencies( spectrum_analyzer->worker, model->channel0_frequency, model->spacing, model->width); diff --git a/applications/spectrum_analyzer/spectrum_analyzer.h b/applications/spectrum_analyzer/spectrum_analyzer.h index 74e135fcf..b5cd6d8fe 100644 --- a/applications/spectrum_analyzer/spectrum_analyzer.h +++ b/applications/spectrum_analyzer/spectrum_analyzer.h @@ -1,4 +1,6 @@ #define NUM_CHANNELS 132 +#define NUM_CHUNKS 6 +#define CHUNK_SIZE (NUM_CHANNELS / NUM_CHUNKS) // Screen coordinates #define FREQ_BOTTOM_Y 50 @@ -12,15 +14,18 @@ * ultrawide mode: 80 MHz on screen, 784 kHz per channel * wide mode (default): 20 MHz on screen, 196 kHz per channel * narrow mode: 4 MHz on screen, 39 kHz per channel + * ultranarrow mode: 2 MHz on screen, 19 kHz per channel */ #define WIDE 0 #define NARROW 1 #define ULTRAWIDE 2 +#define ULTRANARROW 3 /* channel spacing in Hz */ #define WIDE_SPACING 196078 #define NARROW_SPACING 39215 #define ULTRAWIDE_SPACING 784313 +#define ULTRANARROW_SPACING 19607 /* vertical scrolling */ #define VERTICAL_SHORT_STEP 16 @@ -33,9 +38,11 @@ #define WIDE_STEP 5 #define NARROW_STEP 1 #define ULTRAWIDE_STEP 20 +#define ULTRANARROW_STEP 1 #define WIDE_MARGIN 13 #define NARROW_MARGIN 3 #define ULTRAWIDE_MARGIN 42 +#define ULTRANARROW_MARGIN 1 /* frequency bands supported by device */ #define BAND_300 0 @@ -63,4 +70,4 @@ #define MID_900 848000000 #define UPPER(a, b, c) ((((a) - (b) + ((c) / 2)) / (c)) * (c)) -#define LOWER(a, b, c) ((((a) + (b)) / (c)) * (c)) +#define LOWER(a, b, c) ((((a) + (b)) / (c)) * (c)) \ No newline at end of file diff --git a/applications/spectrum_analyzer/spectrum_analyzer_worker.c b/applications/spectrum_analyzer/spectrum_analyzer_worker.c index 9bf3c1085..553170131 100644 --- a/applications/spectrum_analyzer/spectrum_analyzer_worker.c +++ b/applications/spectrum_analyzer/spectrum_analyzer_worker.c @@ -86,7 +86,13 @@ static int32_t spectrum_analyzer_worker_thread(void* context) { instance->max_rssi_dec = 0; - for(uint8_t ch = 0; ch < NUM_CHANNELS - 1; ch++) { + // Visit each channel non-consecutively + for( + uint8_t ch_offset = 0, chunk = 0; + ch_offset < CHUNK_SIZE; + ++chunk >= NUM_CHUNKS && ++ch_offset && (chunk = 0) + ) { + uint8_t ch = chunk * CHUNK_SIZE + ch_offset; furi_hal_subghz_set_frequency(instance->channel0_frequency + (ch * instance->spacing)); furi_hal_subghz_rx(); diff --git a/applications/tetris_game/tetris_game.c b/applications/tetris_game/tetris_game.c index 04b621226..66ae0d55f 100644 --- a/applications/tetris_game/tetris_game.c +++ b/applications/tetris_game/tetris_game.c @@ -151,9 +151,11 @@ static void tetris_game_render_callback(Canvas* const canvas, void* ctx) { tetris_game_draw_playfield(canvas, tetris_state); // Show score on the game field - char buffer2[6]; - snprintf(buffer2, sizeof(buffer2), "%u", tetris_state->numLines); - canvas_draw_str_aligned(canvas, 61, 8, AlignRight, AlignBottom, buffer2); + if(tetris_state->gameState == GameStatePlaying) { + char buffer2[6]; + snprintf(buffer2, sizeof(buffer2), "%u", tetris_state->numLines); + canvas_draw_str_aligned(canvas, 61, 8, AlignRight, AlignBottom, buffer2); + } if(tetris_state->gameState == GameStateGameOver) { // 128 x 64