portapack-mayhem/firmware/application/ui/external
RocketGod fb2e576b34
Super secret dont look (#2690)
* Add new jammer modes

Overview

This PR enhances the PortaPack Jammer app by introducing eight new signal types, ported from my Flipper Zero RF Jammer app (https://github.com/RocketGod-git/flipper-zero-rf-jammer). These modes expand the app's capability to disrupt a wide range of RF communication protocols, from analog radios to modern digital systems. The implementation preserves the original app structure, resolves namespace conflicts, and ensures compatibility with the Mayhem firmware.

New Modes

The following modes have been added to the options_type in ui_jammer.hpp, with corresponding signal generation in proc_jammer.cpp:

Noise: Generates broadband white noise to interfere with analog and digital signals (e.g., Wi-Fi, Bluetooth, key fobs). Highly effective for overwhelming receivers across a frequency range.

Sine: Produces a continuous, unmodulated sine wave to jam narrowband receivers, ideal for analog FM/AM radios or telemetry systems.

Square: Emits a harmonic-rich square wave, disrupting digital protocols (e.g., OOK, ASK) and systems sensitive to sharp transitions, such as remote keyless entry.

Sawtooth (Experimental): Generates a sawtooth wave with a unique harmonic profile, useful for testing interference against PWM-based or niche analog systems.

Triangle (Experimental): Creates a triangle wave with minimal harmonics, suitable for exploratory jamming of narrowband systems or receiver linearity testing.

Chirp: Outputs a rapid frequency-sweeping chirp signal, effective against frequency-hopping and spread-spectrum systems (e.g., some Wi-Fi, Bluetooth, or military radios).

Gauss: Generates Gaussian noise to mimic natural interference, targeting digital systems like GPS or data links by degrading signal-to-noise ratios.

Brute (Experimental): Transmits a constant maximum-amplitude signal to saturate simple receiver front-ends, useful for brute-force jamming of basic analog devices.

* Super secret

* You gotta get (Get) that (That) dirt off your shoulder
2025-06-10 13:36:26 -07:00
..
readme.md Super secret dont look (#2690) 2025-06-10 13:36:26 -07:00
ui_grapheq.cpi Super secret dont look (#2690) 2025-06-10 13:36:26 -07:00
ui_grapheq.hpp Super secret dont look (#2690) 2025-06-10 13:36:26 -07:00

Copyright (C) 2025 HTotoo

External UI elements

Read carefully

These widgets are only used in external apps! The concept is, we move these widgets out of FW space, and compile them with external apps. To all separately. This is multiple include, but since we compile the widget under different namespaces (and those namespaces will be under the external_app namespace) these all will be removed from the base firmware.

This way we can free up some spaces, and still reuse the same widgets in different apps easily.

How to create external widget

You create a hpp file indet the ui/external folder, and include everything you need for your widget as you normally wanted to do. Don't forget the ifdef guards! Never use any namespace for your class there! The namespace of the actual ext app will be used where you include this.

Then create a cpi file, where you include your hpp file, and create the implementation of your widget class. Still, don't use namespace.

You won't need to include these files in any cmake file! (see usage, why)

How to use these widgets

This is important, so follow the rules carefully. If it works, doesn't mean, you did it good! In your external app's hpp file, you need to include the widget's hpp file. But be careful, you must include it under the ext app's namespace, before your first class. For examlpe:

namespace  ui::external_app::gfxeq {
#include  "external/ui_grapheq.hpp"
class  gfxEQView : public  View {

Then you must include the cpi file in the external app's cpp file. Again, it must be under the ext app's namespace!

using  namespace  portapack;
namespace  ui::external_app::gfxeq {
#include  "external/ui_grapheq.cpi"
gfxEQView::gfxEQView(NavigationView&  nav)

This must be done under each ext app that uses the same widget. This way, the widget will be compiled multiple times under the external_app namespace, but those will be removed from the base. Each app will be able to use it, easy to handle, easy to create.