From 09ee54679dbe2f5c86adf1c281d079676aac9948 Mon Sep 17 00:00:00 2001 From: Sil333033 <94360907+Sil333033@users.noreply.github.com> Date: Sun, 22 Oct 2023 22:50:32 +0200 Subject: [PATCH 01/24] Merge branch 'dev' of https://github.com/Flipper-XFW/Xtreme-Firmware into xfw-dev --- lib/subghz/protocols/acurite_592txr.c | 4 ++-- lib/subghz/protocols/acurite_606tx.c | 4 ++-- lib/subghz/protocols/acurite_609txc.c | 4 ++-- lib/subghz/protocols/ambient_weather.c | 4 ++-- lib/subghz/protocols/auriol_ahfl.c | 4 ++-- lib/subghz/protocols/auriol_hg0601a.c | 4 ++-- lib/subghz/protocols/gt_wt_02.c | 4 ++-- lib/subghz/protocols/gt_wt_03.c | 4 ++-- lib/subghz/protocols/infactory.c | 4 ++-- lib/subghz/protocols/lacrosse_tx141thbv2.c | 4 ++-- lib/subghz/protocols/nexus_th.c | 4 ++-- lib/subghz/protocols/oregon_v1.c | 4 ++-- lib/subghz/protocols/thermopro_tx4.c | 4 ++-- lib/subghz/protocols/tx_8300.c | 4 ++-- lib/subghz/protocols/wendox_w6726.c | 4 ++-- 15 files changed, 30 insertions(+), 30 deletions(-) diff --git a/lib/subghz/protocols/acurite_592txr.c b/lib/subghz/protocols/acurite_592txr.c index c99b0140a..8bca10442 100644 --- a/lib/subghz/protocols/acurite_592txr.c +++ b/lib/subghz/protocols/acurite_592txr.c @@ -86,8 +86,8 @@ const SubGhzProtocol ws_protocol_acurite_592txr = { .name = WS_PROTOCOL_ACURITE_592TXR_NAME, .type = SubGhzProtocolTypeStatic, .flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 | - SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | - SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Save | SubGhzProtocolFlag_Send, + SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Load | + SubGhzProtocolFlag_Save | SubGhzProtocolFlag_Send, .decoder = &ws_protocol_acurite_592txr_decoder, .encoder = &ws_protocol_acurite_592txr_encoder, diff --git a/lib/subghz/protocols/acurite_606tx.c b/lib/subghz/protocols/acurite_606tx.c index 1f0e7284e..7e56cebd2 100644 --- a/lib/subghz/protocols/acurite_606tx.c +++ b/lib/subghz/protocols/acurite_606tx.c @@ -69,8 +69,8 @@ const SubGhzProtocol ws_protocol_acurite_606tx = { .name = WS_PROTOCOL_ACURITE_606TX_NAME, .type = SubGhzProtocolTypeStatic, .flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 | - SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | - SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Save, + SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Load | + SubGhzProtocolFlag_Save, .decoder = &ws_protocol_acurite_606tx_decoder, .encoder = &ws_protocol_acurite_606tx_encoder, diff --git a/lib/subghz/protocols/acurite_609txc.c b/lib/subghz/protocols/acurite_609txc.c index 3f7c2bb73..097c6043c 100644 --- a/lib/subghz/protocols/acurite_609txc.c +++ b/lib/subghz/protocols/acurite_609txc.c @@ -70,8 +70,8 @@ const SubGhzProtocol ws_protocol_acurite_609txc = { .name = WS_PROTOCOL_ACURITE_609TXC_NAME, .type = SubGhzProtocolTypeStatic, .flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 | - SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | - SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Save, + SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Load | + SubGhzProtocolFlag_Save, .decoder = &ws_protocol_acurite_609txc_decoder, .encoder = &ws_protocol_acurite_609txc_encoder, diff --git a/lib/subghz/protocols/ambient_weather.c b/lib/subghz/protocols/ambient_weather.c index ea2ae819d..9d3f63df9 100644 --- a/lib/subghz/protocols/ambient_weather.c +++ b/lib/subghz/protocols/ambient_weather.c @@ -84,8 +84,8 @@ const SubGhzProtocol ws_protocol_ambient_weather = { .name = WS_PROTOCOL_AMBIENT_WEATHER_NAME, .type = SubGhzProtocolTypeStatic, .flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 | - SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | - SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Save, + SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Load | + SubGhzProtocolFlag_Save, .decoder = &ws_protocol_ambient_weather_decoder, .encoder = &ws_protocol_ambient_weather_encoder, diff --git a/lib/subghz/protocols/auriol_ahfl.c b/lib/subghz/protocols/auriol_ahfl.c index 9ae5fe672..c43a44af1 100644 --- a/lib/subghz/protocols/auriol_ahfl.c +++ b/lib/subghz/protocols/auriol_ahfl.c @@ -81,8 +81,8 @@ const SubGhzProtocol ws_protocol_auriol_ahfl = { .name = WS_PROTOCOL_AURIOL_AHFL_NAME, .type = SubGhzProtocolTypeStatic, .flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 | - SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | - SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Save, + SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Load | + SubGhzProtocolFlag_Save, .decoder = &ws_protocol_auriol_ahfl_decoder, .encoder = &ws_protocol_auriol_ahfl_encoder, diff --git a/lib/subghz/protocols/auriol_hg0601a.c b/lib/subghz/protocols/auriol_hg0601a.c index 3d564f80f..1c9d9c032 100644 --- a/lib/subghz/protocols/auriol_hg0601a.c +++ b/lib/subghz/protocols/auriol_hg0601a.c @@ -80,8 +80,8 @@ const SubGhzProtocol ws_protocol_auriol_th = { .name = WS_PROTOCOL_AURIOL_TH_NAME, .type = SubGhzProtocolTypeStatic, .flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 | - SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | - SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Save, + SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Load | + SubGhzProtocolFlag_Save, .decoder = &ws_protocol_auriol_th_decoder, .encoder = &ws_protocol_auriol_th_encoder, diff --git a/lib/subghz/protocols/gt_wt_02.c b/lib/subghz/protocols/gt_wt_02.c index dc783285c..213516679 100644 --- a/lib/subghz/protocols/gt_wt_02.c +++ b/lib/subghz/protocols/gt_wt_02.c @@ -83,8 +83,8 @@ const SubGhzProtocol ws_protocol_gt_wt_02 = { .name = WS_PROTOCOL_GT_WT_02_NAME, .type = SubGhzProtocolTypeStatic, .flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 | - SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | - SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Save, + SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Load | + SubGhzProtocolFlag_Save, .decoder = &ws_protocol_gt_wt_02_decoder, .encoder = &ws_protocol_gt_wt_02_encoder, diff --git a/lib/subghz/protocols/gt_wt_03.c b/lib/subghz/protocols/gt_wt_03.c index 482d33bd6..cb0c94af3 100644 --- a/lib/subghz/protocols/gt_wt_03.c +++ b/lib/subghz/protocols/gt_wt_03.c @@ -109,8 +109,8 @@ const SubGhzProtocol ws_protocol_gt_wt_03 = { .name = WS_PROTOCOL_GT_WT_03_NAME, .type = SubGhzProtocolTypeStatic, .flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 | - SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | - SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Save, + SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Load | + SubGhzProtocolFlag_Save, .decoder = &ws_protocol_gt_wt_03_decoder, .encoder = &ws_protocol_gt_wt_03_encoder, diff --git a/lib/subghz/protocols/infactory.c b/lib/subghz/protocols/infactory.c index f4c355ff9..f1ee3432b 100644 --- a/lib/subghz/protocols/infactory.c +++ b/lib/subghz/protocols/infactory.c @@ -94,8 +94,8 @@ const SubGhzProtocol ws_protocol_infactory = { .name = WS_PROTOCOL_INFACTORY_NAME, .type = SubGhzProtocolTypeStatic, .flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 | - SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | - SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Save, + SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Load | + SubGhzProtocolFlag_Save, .decoder = &ws_protocol_infactory_decoder, .encoder = &ws_protocol_infactory_encoder, diff --git a/lib/subghz/protocols/lacrosse_tx141thbv2.c b/lib/subghz/protocols/lacrosse_tx141thbv2.c index 4f4a112c1..8825d922a 100644 --- a/lib/subghz/protocols/lacrosse_tx141thbv2.c +++ b/lib/subghz/protocols/lacrosse_tx141thbv2.c @@ -76,8 +76,8 @@ const SubGhzProtocol ws_protocol_lacrosse_tx141thbv2 = { .name = WS_PROTOCOL_LACROSSE_TX141THBV2_NAME, .type = SubGhzProtocolTypeStatic, .flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 | - SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | - SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Save, + SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Load | + SubGhzProtocolFlag_Save, .decoder = &ws_protocol_lacrosse_tx141thbv2_decoder, .encoder = &ws_protocol_lacrosse_tx141thbv2_encoder, diff --git a/lib/subghz/protocols/nexus_th.c b/lib/subghz/protocols/nexus_th.c index 76925a009..9307194bb 100644 --- a/lib/subghz/protocols/nexus_th.c +++ b/lib/subghz/protocols/nexus_th.c @@ -356,8 +356,8 @@ const SubGhzProtocol ws_protocol_nexus_th = { .name = WS_PROTOCOL_NEXUS_TH_NAME, .type = SubGhzProtocolTypeStatic, .flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 | - SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | - SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Save | SubGhzProtocolFlag_Send, + SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Load | + SubGhzProtocolFlag_Save | SubGhzProtocolFlag_Send, .decoder = &ws_protocol_nexus_th_decoder, .encoder = &ws_protocol_nexus_th_encoder, diff --git a/lib/subghz/protocols/oregon_v1.c b/lib/subghz/protocols/oregon_v1.c index b8ca85106..5967e9625 100644 --- a/lib/subghz/protocols/oregon_v1.c +++ b/lib/subghz/protocols/oregon_v1.c @@ -95,8 +95,8 @@ const SubGhzProtocol ws_protocol_oregon_v1 = { .name = WS_PROTOCOL_OREGON_V1_NAME, .type = SubGhzProtocolTypeStatic, .flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 | - SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | - SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Save, + SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Load | + SubGhzProtocolFlag_Save, .decoder = &ws_protocol_oregon_v1_decoder, .encoder = &ws_protocol_oregon_v1_encoder, diff --git a/lib/subghz/protocols/thermopro_tx4.c b/lib/subghz/protocols/thermopro_tx4.c index 56b19372e..9adaacac1 100644 --- a/lib/subghz/protocols/thermopro_tx4.c +++ b/lib/subghz/protocols/thermopro_tx4.c @@ -79,8 +79,8 @@ const SubGhzProtocol ws_protocol_thermopro_tx4 = { .name = WS_PROTOCOL_THERMOPRO_TX4_NAME, .type = SubGhzProtocolTypeStatic, .flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 | - SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | - SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Save, + SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Load | + SubGhzProtocolFlag_Save, .decoder = &ws_protocol_thermopro_tx4_decoder, .encoder = &ws_protocol_thermopro_tx4_encoder, diff --git a/lib/subghz/protocols/tx_8300.c b/lib/subghz/protocols/tx_8300.c index 2ef1b60c8..b0686a774 100644 --- a/lib/subghz/protocols/tx_8300.c +++ b/lib/subghz/protocols/tx_8300.c @@ -90,8 +90,8 @@ const SubGhzProtocol ws_protocol_tx_8300 = { .name = WS_PROTOCOL_TX_8300_NAME, .type = SubGhzProtocolTypeStatic, .flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 | - SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | - SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Save, + SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Load | + SubGhzProtocolFlag_Save, .decoder = &ws_protocol_tx_8300_decoder, .encoder = &ws_protocol_tx_8300_encoder, diff --git a/lib/subghz/protocols/wendox_w6726.c b/lib/subghz/protocols/wendox_w6726.c index a0d20c9a0..a5ef0a026 100644 --- a/lib/subghz/protocols/wendox_w6726.c +++ b/lib/subghz/protocols/wendox_w6726.c @@ -84,8 +84,8 @@ const SubGhzProtocol ws_protocol_wendox_w6726 = { .name = WS_PROTOCOL_WENDOX_W6726_NAME, .type = SubGhzProtocolTypeStatic, .flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 | - SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | - SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Save, + SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Load | + SubGhzProtocolFlag_Save, .decoder = &ws_protocol_wendox_w6726_decoder, .encoder = &ws_protocol_wendox_w6726_encoder, From ac5abdbb1db0ded15b2610a3ffd70199c45c6859 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Tue, 24 Oct 2023 00:56:15 +0300 Subject: [PATCH 02/24] add new env var --- .drone.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.drone.yml b/.drone.yml index 39a79b2cf..341f49e4e 100644 --- a/.drone.yml +++ b/.drone.yml @@ -22,6 +22,7 @@ steps: - export DIST_SUFFIX=${DRONE_TAG}c - export WORKFLOW_BRANCH_OR_TAG=release-cfw - export FORCE_NO_DIRTY=yes + - export FBT_GIT_SUBMODULE_SHALLOW=1 - rm -rf assets/resources/apps/ - rm -rf build/ - rm -rf dist/ @@ -42,6 +43,7 @@ steps: - export DIST_SUFFIX=${DRONE_TAG} - export WORKFLOW_BRANCH_OR_TAG=release-cfw - export FORCE_NO_DIRTY=yes + - export FBT_GIT_SUBMODULE_SHALLOW=1 - wget https://github.com/xMasterX/all-the-plugins/releases/latest/download/all-the-apps-base.tgz - tar zxvf all-the-apps-base.tgz - cp -R base_pack_build/artifacts-base/* assets/resources/apps/ @@ -69,6 +71,7 @@ steps: - export DIST_SUFFIX=${DRONE_TAG}e - export WORKFLOW_BRANCH_OR_TAG=release-cfw - export FORCE_NO_DIRTY=yes + - export FBT_GIT_SUBMODULE_SHALLOW=1 - rm -f build/f7-firmware-C/toolbox/version.* - ./fbt COMPACT=1 DEBUG=0 updater_package - mkdir artifacts-extra-apps @@ -87,6 +90,7 @@ steps: - export DIST_SUFFIX=${DRONE_TAG}r - export WORKFLOW_BRANCH_OR_TAG=release-cfw-rgb - export FORCE_NO_DIRTY=yes + - export FBT_GIT_SUBMODULE_SHALLOW=1 - rm -f build/f7-firmware-C/toolbox/version.* - ./fbt COMPACT=1 DEBUG=0 updater_package - mkdir artifacts-rgb-patch @@ -109,6 +113,7 @@ steps: - export DIST_SUFFIX=${DRONE_TAG}n - export WORKFLOW_BRANCH_OR_TAG=no-custom-anims - export FORCE_NO_DIRTY=yes + - export FBT_GIT_SUBMODULE_SHALLOW=1 - rm -f build/f7-firmware-C/toolbox/version.* - ./fbt COMPACT=1 DEBUG=0 updater_package - wget https://github.com/xMasterX/all-the-plugins/releases/latest/download/all-the-apps-base.tgz @@ -391,6 +396,7 @@ steps: - export DIST_SUFFIX=${DRONE_BUILD_NUMBER}c - export WORKFLOW_BRANCH_OR_TAG=dev-cfw - export FORCE_NO_DIRTY=yes + - export FBT_GIT_SUBMODULE_SHALLOW=1 - rm -rf assets/resources/apps/ - rm -rf build/ - rm -rf dist/ @@ -412,6 +418,7 @@ steps: - export DIST_SUFFIX=${DRONE_BUILD_NUMBER} - export WORKFLOW_BRANCH_OR_TAG=dev-cfw - export FORCE_NO_DIRTY=yes + - export FBT_GIT_SUBMODULE_SHALLOW=1 - wget https://github.com/xMasterX/all-the-plugins/releases/latest/download/all-the-apps-base.tgz - tar zxvf all-the-apps-base.tgz - cp -R base_pack_build/artifacts-base/* assets/resources/apps/ @@ -439,6 +446,7 @@ steps: - export DIST_SUFFIX=${DRONE_BUILD_NUMBER}e - export WORKFLOW_BRANCH_OR_TAG=dev-cfw - export FORCE_NO_DIRTY=yes + - export FBT_GIT_SUBMODULE_SHALLOW=1 - rm -f build/f7-firmware-C/toolbox/version.* - ./fbt COMPACT=1 DEBUG=0 updater_package - mkdir artifacts-extra-apps @@ -457,6 +465,7 @@ steps: - export DIST_SUFFIX=${DRONE_BUILD_NUMBER}r - export WORKFLOW_BRANCH_OR_TAG=dev-cfw-rgb - export FORCE_NO_DIRTY=yes + - export FBT_GIT_SUBMODULE_SHALLOW=1 - rm -f build/f7-firmware-C/toolbox/version.* - ./fbt COMPACT=1 DEBUG=0 updater_package - mkdir artifacts-rgb-patch From 1f9d8f4dd459f9429e2a3f041a34ddfc354a9b23 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Tue, 24 Oct 2023 17:06:15 +0100 Subject: [PATCH 03/24] How are these models legit??? xD by @xAstroBoy --- applications/external/ble_spam/protocols/fastpair.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/applications/external/ble_spam/protocols/fastpair.c b/applications/external/ble_spam/protocols/fastpair.c index 1cf3a3551..a8e11996b 100644 --- a/applications/external/ble_spam/protocols/fastpair.c +++ b/applications/external/ble_spam/protocols/fastpair.c @@ -12,11 +12,15 @@ const struct { {0x00000C, "Set Up Device"}, // Genuine devices + {0x00000a, "Anti-Spoofing Test (lmao)"}, + {0x0001F0, "Bisto CSR8670 Dev Board"}, + {0x000047, "Arduino 101"}, {0xCD8256, "Bose NC 700"}, {0xF52494, "JBL Buds Pro"}, {0x718FA4, "JBL Live 300TWS"}, {0x821F66, "JBL Flip 6"}, {0x92BBBD, "Pixel Buds"}, + {0x000006, "Google Pixel buds"}, {0xD446A7, "Sony XM5"}, {0x2D7A23, "Sony WF-1000XM4"}, {0x0E30C3, "Razer Hammerhead TWS"}, From fd58f40fbd5c5a2ce744b5f109e0660e000e20f1 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Tue, 24 Oct 2023 17:27:42 +0100 Subject: [PATCH 04/24] Formatting --nobuild --- .../external/ble_spam/protocols/continuity.c | 16 ++++++++-------- .../external/ble_spam/protocols/easysetup.c | 16 ++++++++-------- .../external/ble_spam/protocols/fastpair.c | 18 +++++++++--------- .../external/ble_spam/protocols/swiftpair.c | 16 ++++++++-------- 4 files changed, 33 insertions(+), 33 deletions(-) diff --git a/applications/external/ble_spam/protocols/continuity.c b/applications/external/ble_spam/protocols/continuity.c index 5027414e3..88c6b5762 100644 --- a/applications/external/ble_spam/protocols/continuity.c +++ b/applications/external/ble_spam/protocols/continuity.c @@ -71,7 +71,7 @@ static const char* type_names[ContinuityTypeCOUNT] = { [ContinuityTypeNearbyInfo] = "Nearby Info", [ContinuityTypeCustomCrash] = "Continuity Custom", }; -static const char* continuity_get_name(const ProtocolCfg* _cfg) { +static const char* get_name(const ProtocolCfg* _cfg) { const ContinuityCfg* cfg = &_cfg->continuity; return type_names[cfg->type]; } @@ -87,7 +87,7 @@ static uint8_t packet_sizes[ContinuityTypeCOUNT] = { [ContinuityTypeNearbyInfo] = HEADER_LEN + 5, [ContinuityTypeCustomCrash] = HEADER_LEN + 11, }; -static void continuity_make_packet(uint8_t* _size, uint8_t** _packet, const ProtocolCfg* _cfg) { +static void make_packet(uint8_t* _size, uint8_t** _packet, const ProtocolCfg* _cfg) { const ContinuityCfg* cfg = _cfg ? &_cfg->continuity : NULL; ContinuityType type; @@ -376,7 +376,7 @@ static void na_action_changed(VariableItem* item) { variable_item_set_current_value_text(item, "Random"); } } -static void continuity_extra_config(Ctx* ctx) { +static void extra_config(Ctx* ctx) { ContinuityCfg* cfg = &ctx->attack->payload.cfg.continuity; VariableItemList* list = ctx->variable_item_list; VariableItem* item; @@ -502,17 +502,17 @@ static uint8_t config_counts[ContinuityTypeCOUNT] = { [ContinuityTypeNearbyInfo] = 0, [ContinuityTypeCustomCrash] = ConfigCcCOUNT - ConfigExtraStart - 1, }; -static uint8_t continuity_config_count(const ProtocolCfg* _cfg) { +static uint8_t config_count(const ProtocolCfg* _cfg) { const ContinuityCfg* cfg = &_cfg->continuity; return config_counts[cfg->type]; } const Protocol protocol_continuity = { .icon = &I_apple, - .get_name = continuity_get_name, - .make_packet = continuity_make_packet, - .extra_config = continuity_extra_config, - .config_count = continuity_config_count, + .get_name = get_name, + .make_packet = make_packet, + .extra_config = extra_config, + .config_count = config_count, }; static void pp_model_callback(void* _ctx, uint32_t index) { diff --git a/applications/external/ble_spam/protocols/easysetup.c b/applications/external/ble_spam/protocols/easysetup.c index 4dad1e67b..e4df74786 100644 --- a/applications/external/ble_spam/protocols/easysetup.c +++ b/applications/external/ble_spam/protocols/easysetup.c @@ -68,7 +68,7 @@ static const char* type_names[EasysetupTypeCOUNT] = { [EasysetupTypeBuds] = "EasySetup Buds", [EasysetupTypeWatch] = "EasySetup Watch", }; -static const char* easysetup_get_name(const ProtocolCfg* _cfg) { +static const char* get_name(const ProtocolCfg* _cfg) { const EasysetupCfg* cfg = &_cfg->easysetup; return type_names[cfg->type]; } @@ -77,7 +77,7 @@ static uint8_t packet_sizes[EasysetupTypeCOUNT] = { [EasysetupTypeBuds] = 31, [EasysetupTypeWatch] = 15, }; -void easysetup_make_packet(uint8_t* out_size, uint8_t** out_packet, const ProtocolCfg* _cfg) { +void make_packet(uint8_t* out_size, uint8_t** out_packet, const ProtocolCfg* _cfg) { const EasysetupCfg* cfg = _cfg ? &_cfg->easysetup : NULL; EasysetupType type; @@ -241,7 +241,7 @@ static void watch_model_changed(VariableItem* item) { variable_item_set_current_value_text(item, "Random"); } } -static void easysetup_extra_config(Ctx* ctx) { +static void extra_config(Ctx* ctx) { EasysetupCfg* cfg = &ctx->attack->payload.cfg.easysetup; VariableItemList* list = ctx->variable_item_list; VariableItem* item; @@ -313,17 +313,17 @@ static uint8_t config_counts[EasysetupTypeCOUNT] = { [EasysetupTypeBuds] = ConfigBudsCOUNT - ConfigExtraStart - 1, [EasysetupTypeWatch] = ConfigWatchCOUNT - ConfigExtraStart - 1, }; -static uint8_t easysetup_config_count(const ProtocolCfg* _cfg) { +static uint8_t config_count(const ProtocolCfg* _cfg) { const EasysetupCfg* cfg = &_cfg->easysetup; return config_counts[cfg->type]; } const Protocol protocol_easysetup = { .icon = &I_android, - .get_name = easysetup_get_name, - .make_packet = easysetup_make_packet, - .extra_config = easysetup_extra_config, - .config_count = easysetup_config_count, + .get_name = get_name, + .make_packet = make_packet, + .extra_config = extra_config, + .config_count = config_count, }; static void buds_model_callback(void* _ctx, uint32_t index) { diff --git a/applications/external/ble_spam/protocols/fastpair.c b/applications/external/ble_spam/protocols/fastpair.c index a8e11996b..42d521105 100644 --- a/applications/external/ble_spam/protocols/fastpair.c +++ b/applications/external/ble_spam/protocols/fastpair.c @@ -12,7 +12,7 @@ const struct { {0x00000C, "Set Up Device"}, // Genuine devices - {0x00000a, "Anti-Spoofing Test (lmao)"}, + {0x00000A, "Anti-Spoofing Test (lmao)"}, {0x0001F0, "Bisto CSR8670 Dev Board"}, {0x000047, "Arduino 101"}, {0xCD8256, "Bose NC 700"}, @@ -46,12 +46,12 @@ const struct { }; const uint8_t models_count = COUNT_OF(models); -static const char* fastpair_get_name(const ProtocolCfg* _cfg) { +static const char* get_name(const ProtocolCfg* _cfg) { UNUSED(_cfg); return "FastPair"; } -static void fastpair_make_packet(uint8_t* _size, uint8_t** _packet, const ProtocolCfg* _cfg) { +static void make_packet(uint8_t* _size, uint8_t** _packet, const ProtocolCfg* _cfg) { const FastpairCfg* cfg = _cfg ? &_cfg->fastpair : NULL; uint32_t model; @@ -118,7 +118,7 @@ static void model_changed(VariableItem* item) { variable_item_set_current_value_text(item, "Random"); } } -static void fastpair_extra_config(Ctx* ctx) { +static void extra_config(Ctx* ctx) { FastpairCfg* cfg = &ctx->attack->payload.cfg.fastpair; VariableItemList* list = ctx->variable_item_list; VariableItem* item; @@ -152,17 +152,17 @@ static void fastpair_extra_config(Ctx* ctx) { variable_item_list_set_enter_callback(list, config_callback, ctx); } -static uint8_t fastpair_config_count(const ProtocolCfg* _cfg) { +static uint8_t config_count(const ProtocolCfg* _cfg) { UNUSED(_cfg); return ConfigCOUNT - ConfigExtraStart - 1; } const Protocol protocol_fastpair = { .icon = &I_android, - .get_name = fastpair_get_name, - .make_packet = fastpair_make_packet, - .extra_config = fastpair_extra_config, - .config_count = fastpair_config_count, + .get_name = get_name, + .make_packet = make_packet, + .extra_config = extra_config, + .config_count = config_count, }; static void model_callback(void* _ctx, uint32_t index) { diff --git a/applications/external/ble_spam/protocols/swiftpair.c b/applications/external/ble_spam/protocols/swiftpair.c index b204f8eef..3a4788312 100644 --- a/applications/external/ble_spam/protocols/swiftpair.c +++ b/applications/external/ble_spam/protocols/swiftpair.c @@ -4,12 +4,12 @@ // Hacked together by @Willy-JL and @Spooks4576 // Documentation at https://learn.microsoft.com/en-us/windows-hardware/design/component-guidelines/bluetooth-swift-pair -static const char* swiftpair_get_name(const ProtocolCfg* _cfg) { +static const char* get_name(const ProtocolCfg* _cfg) { UNUSED(_cfg); return "SwiftPair"; } -static void swiftpair_make_packet(uint8_t* _size, uint8_t** _packet, const ProtocolCfg* _cfg) { +static void make_packet(uint8_t* _size, uint8_t** _packet, const ProtocolCfg* _cfg) { const SwiftpairCfg* cfg = _cfg ? &_cfg->swiftpair : NULL; const char* name; @@ -66,7 +66,7 @@ static void config_callback(void* _ctx, uint32_t index) { break; } } -static void swiftpair_extra_config(Ctx* ctx) { +static void extra_config(Ctx* ctx) { SwiftpairCfg* cfg = &ctx->attack->payload.cfg.swiftpair; VariableItemList* list = ctx->variable_item_list; VariableItem* item; @@ -79,17 +79,17 @@ static void swiftpair_extra_config(Ctx* ctx) { variable_item_list_set_enter_callback(list, config_callback, ctx); } -static uint8_t swiftpair_config_count(const ProtocolCfg* _cfg) { +static uint8_t config_count(const ProtocolCfg* _cfg) { UNUSED(_cfg); return ConfigCOUNT - ConfigExtraStart - 1; } const Protocol protocol_swiftpair = { .icon = &I_windows, - .get_name = swiftpair_get_name, - .make_packet = swiftpair_make_packet, - .extra_config = swiftpair_extra_config, - .config_count = swiftpair_config_count, + .get_name = get_name, + .make_packet = make_packet, + .extra_config = extra_config, + .config_count = config_count, }; static void name_callback(void* _ctx) { From f4cb2a087bcecfd0a13ef520ea9927ec668c791b Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Tue, 24 Oct 2023 21:58:43 +0100 Subject: [PATCH 05/24] BLE Spam redraw while advertising --- applications/external/ble_spam/ble_spam.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/applications/external/ble_spam/ble_spam.c b/applications/external/ble_spam/ble_spam.c index b3edf165f..89e005aaa 100644 --- a/applications/external/ble_spam/ble_spam.c +++ b/applications/external/ble_spam/ble_spam.c @@ -488,9 +488,17 @@ static void lock_timer_callback(void* _ctx) { state->lock_count = 0; } +static void tick_event_callback(void* _ctx) { + State* state = _ctx; + bool advertising; + with_view_model( + state->main_view, State * *model, { advertising = (*model)->advertising; }, advertising); + scene_manager_handle_tick_event(state->ctx.scene_manager); +} + static bool back_event_callback(void* _ctx) { - Ctx* ctx = _ctx; - return scene_manager_handle_back_event(ctx->scene_manager); + State* state = _ctx; + return scene_manager_handle_back_event(state->ctx.scene_manager); } int32_t ble_spam(void* p) { @@ -507,7 +515,8 @@ int32_t ble_spam(void* p) { Gui* gui = furi_record_open(RECORD_GUI); state->ctx.view_dispatcher = view_dispatcher_alloc(); view_dispatcher_enable_queue(state->ctx.view_dispatcher); - view_dispatcher_set_event_callback_context(state->ctx.view_dispatcher, &state->ctx); + view_dispatcher_set_event_callback_context(state->ctx.view_dispatcher, state); + view_dispatcher_set_tick_event_callback(state->ctx.view_dispatcher, tick_event_callback, 100); view_dispatcher_set_navigation_event_callback(state->ctx.view_dispatcher, back_event_callback); state->ctx.scene_manager = scene_manager_alloc(&scene_handlers, &state->ctx); From 60ec667178b09279f7c8035a9072eb15521e1094 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Tue, 24 Oct 2023 22:20:06 +0100 Subject: [PATCH 06/24] BLE Spam save new custom data only on ok not back --- .../external/ble_spam/protocols/continuity.c | 18 +++++++++--------- .../external/ble_spam/protocols/easysetup.c | 14 +++++++------- .../external/ble_spam/protocols/fastpair.c | 8 ++++---- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/applications/external/ble_spam/protocols/continuity.c b/applications/external/ble_spam/protocols/continuity.c index 88c6b5762..efbf87560 100644 --- a/applications/external/ble_spam/protocols/continuity.c +++ b/applications/external/ble_spam/protocols/continuity.c @@ -573,6 +573,8 @@ void scene_continuity_pp_model_on_exit(void* _ctx) { static void pp_model_custom_callback(void* _ctx) { Ctx* ctx = _ctx; + ContinuityCfg* cfg = &ctx->attack->payload.cfg.continuity; + cfg->data.proximity_pair.model = (ctx->byte_store[0] << 0x08) + (ctx->byte_store[1] << 0x00); scene_manager_previous_scene(ctx->scene_manager); scene_manager_previous_scene(ctx->scene_manager); } @@ -597,9 +599,7 @@ bool scene_continuity_pp_model_custom_on_event(void* _ctx, SceneManagerEvent eve return false; } void scene_continuity_pp_model_custom_on_exit(void* _ctx) { - Ctx* ctx = _ctx; - ContinuityCfg* cfg = &ctx->attack->payload.cfg.continuity; - cfg->data.proximity_pair.model = (ctx->byte_store[0] << 0x08) + (ctx->byte_store[1] << 0x00); + UNUSED(_ctx); } static void pp_prefix_callback(void* _ctx, uint32_t index) { @@ -660,6 +660,8 @@ void scene_continuity_pp_prefix_on_exit(void* _ctx) { static void pp_prefix_custom_callback(void* _ctx) { Ctx* ctx = _ctx; + ContinuityCfg* cfg = &ctx->attack->payload.cfg.continuity; + cfg->data.proximity_pair.prefix = (ctx->byte_store[0] << 0x00); scene_manager_previous_scene(ctx->scene_manager); scene_manager_previous_scene(ctx->scene_manager); } @@ -683,9 +685,7 @@ bool scene_continuity_pp_prefix_custom_on_event(void* _ctx, SceneManagerEvent ev return false; } void scene_continuity_pp_prefix_custom_on_exit(void* _ctx) { - Ctx* ctx = _ctx; - ContinuityCfg* cfg = &ctx->attack->payload.cfg.continuity; - cfg->data.proximity_pair.prefix = (ctx->byte_store[0] << 0x00); + UNUSED(_ctx); } static void na_action_callback(void* _ctx, uint32_t index) { @@ -746,6 +746,8 @@ void scene_continuity_na_action_on_exit(void* _ctx) { static void na_action_custom_callback(void* _ctx) { Ctx* ctx = _ctx; + ContinuityCfg* cfg = &ctx->attack->payload.cfg.continuity; + cfg->data.nearby_action.action = (ctx->byte_store[0] << 0x00); scene_manager_previous_scene(ctx->scene_manager); scene_manager_previous_scene(ctx->scene_manager); } @@ -769,9 +771,7 @@ bool scene_continuity_na_action_custom_on_event(void* _ctx, SceneManagerEvent ev return false; } void scene_continuity_na_action_custom_on_exit(void* _ctx) { - Ctx* ctx = _ctx; - ContinuityCfg* cfg = &ctx->attack->payload.cfg.continuity; - cfg->data.nearby_action.action = (ctx->byte_store[0] << 0x00); + UNUSED(_ctx); } static void na_flags_callback(void* _ctx) { diff --git a/applications/external/ble_spam/protocols/easysetup.c b/applications/external/ble_spam/protocols/easysetup.c index e4df74786..e1b6e0584 100644 --- a/applications/external/ble_spam/protocols/easysetup.c +++ b/applications/external/ble_spam/protocols/easysetup.c @@ -384,6 +384,9 @@ void scene_easysetup_buds_model_on_exit(void* _ctx) { static void buds_model_custom_callback(void* _ctx) { Ctx* ctx = _ctx; + EasysetupCfg* cfg = &ctx->attack->payload.cfg.easysetup; + cfg->data.buds.model = + (ctx->byte_store[0] << 0x10) + (ctx->byte_store[1] << 0x08) + (ctx->byte_store[2] << 0x00); scene_manager_previous_scene(ctx->scene_manager); scene_manager_previous_scene(ctx->scene_manager); } @@ -409,10 +412,7 @@ bool scene_easysetup_buds_model_custom_on_event(void* _ctx, SceneManagerEvent ev return false; } void scene_easysetup_buds_model_custom_on_exit(void* _ctx) { - Ctx* ctx = _ctx; - EasysetupCfg* cfg = &ctx->attack->payload.cfg.easysetup; - cfg->data.buds.model = - (ctx->byte_store[0] << 0x10) + (ctx->byte_store[1] << 0x08) + (ctx->byte_store[2] << 0x00); + UNUSED(_ctx); } static void watch_model_callback(void* _ctx, uint32_t index) { @@ -473,6 +473,8 @@ void scene_easysetup_watch_model_on_exit(void* _ctx) { static void watch_model_custom_callback(void* _ctx) { Ctx* ctx = _ctx; + EasysetupCfg* cfg = &ctx->attack->payload.cfg.easysetup; + cfg->data.watch.model = (ctx->byte_store[0] << 0x00); scene_manager_previous_scene(ctx->scene_manager); scene_manager_previous_scene(ctx->scene_manager); } @@ -496,7 +498,5 @@ bool scene_easysetup_watch_model_custom_on_event(void* _ctx, SceneManagerEvent e return false; } void scene_easysetup_watch_model_custom_on_exit(void* _ctx) { - Ctx* ctx = _ctx; - EasysetupCfg* cfg = &ctx->attack->payload.cfg.easysetup; - cfg->data.watch.model = (ctx->byte_store[0] << 0x00); + UNUSED(_ctx); } diff --git a/applications/external/ble_spam/protocols/fastpair.c b/applications/external/ble_spam/protocols/fastpair.c index 42d521105..db3d37b35 100644 --- a/applications/external/ble_spam/protocols/fastpair.c +++ b/applications/external/ble_spam/protocols/fastpair.c @@ -223,6 +223,9 @@ void scene_fastpair_model_on_exit(void* _ctx) { static void model_custom_callback(void* _ctx) { Ctx* ctx = _ctx; + FastpairCfg* cfg = &ctx->attack->payload.cfg.fastpair; + cfg->model = + (ctx->byte_store[0] << 0x10) + (ctx->byte_store[1] << 0x08) + (ctx->byte_store[2] << 0x00); scene_manager_previous_scene(ctx->scene_manager); scene_manager_previous_scene(ctx->scene_manager); } @@ -248,8 +251,5 @@ bool scene_fastpair_model_custom_on_event(void* _ctx, SceneManagerEvent event) { return false; } void scene_fastpair_model_custom_on_exit(void* _ctx) { - Ctx* ctx = _ctx; - FastpairCfg* cfg = &ctx->attack->payload.cfg.fastpair; - cfg->model = - (ctx->byte_store[0] << 0x10) + (ctx->byte_store[1] << 0x08) + (ctx->byte_store[2] << 0x00); + UNUSED(_ctx); } From 0f3fbd1cd729f5a6c498b4e04febd78d94de87a3 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Wed, 25 Oct 2023 00:02:36 +0100 Subject: [PATCH 07/24] BLE Spam refactor random/set/custom mode handling --- applications/external/ble_spam/ble_spam.c | 55 ++----- .../external/ble_spam/protocols/_base.h | 4 +- .../external/ble_spam/protocols/_protocols.h | 18 ++- .../external/ble_spam/protocols/continuity.c | 151 +++++++++++------- .../external/ble_spam/protocols/easysetup.c | 122 +++++++++----- .../external/ble_spam/protocols/fastpair.c | 60 ++++--- .../external/ble_spam/protocols/swiftpair.c | 52 +++--- 7 files changed, 277 insertions(+), 185 deletions(-) diff --git a/applications/external/ble_spam/ble_spam.c b/applications/external/ble_spam/ble_spam.c index 89e005aaa..54171cec6 100644 --- a/applications/external/ble_spam/ble_spam.c +++ b/applications/external/ble_spam/ble_spam.c @@ -30,13 +30,10 @@ static Attack attacks[] = { .payload = { .random_mac = false, - .cfg = + .cfg.specific.continuity = { - .continuity = - { - .type = ContinuityTypeCustomCrash, - .data = {}, - }, + .type = ContinuityTypeCustomCrash, + .data = {}, }, }, }, @@ -47,13 +44,10 @@ static Attack attacks[] = { .payload = { .random_mac = false, - .cfg = + .cfg.specific.continuity = { - .continuity = - { - .type = ContinuityTypeNearbyAction, - .data = {}, - }, + .type = ContinuityTypeNearbyAction, + .data = {}, }, }, }, @@ -64,13 +58,10 @@ static Attack attacks[] = { .payload = { .random_mac = false, - .cfg = + .cfg.specific.continuity = { - .continuity = - { - .type = ContinuityTypeProximityPair, - .data = {}, - }, + .type = ContinuityTypeProximityPair, + .data = {}, }, }, }, @@ -81,10 +72,7 @@ static Attack attacks[] = { .payload = { .random_mac = true, - .cfg = - { - .fastpair = {}, - }, + .cfg.specific.fastpair = {}, }, }, { @@ -94,13 +82,10 @@ static Attack attacks[] = { .payload = { .random_mac = true, - .cfg = + .cfg.specific.easysetup = { - .easysetup = - { - .type = EasysetupTypeBuds, - .data = {}, - }, + .type = EasysetupTypeBuds, + .data = {}, }, }, }, @@ -111,13 +96,10 @@ static Attack attacks[] = { .payload = { .random_mac = true, - .cfg = + .cfg.specific.easysetup = { - .easysetup = - { - .type = EasysetupTypeWatch, - .data = {}, - }, + .type = EasysetupTypeWatch, + .data = {}, }, }, }, @@ -128,10 +110,7 @@ static Attack attacks[] = { .payload = { .random_mac = true, - .cfg = - { - .swiftpair = {}, - }, + .cfg.specific.swiftpair = {}, }, }, }; diff --git a/applications/external/ble_spam/protocols/_base.h b/applications/external/ble_spam/protocols/_base.h index 6f32b9990..1456b1c4a 100644 --- a/applications/external/ble_spam/protocols/_base.h +++ b/applications/external/ble_spam/protocols/_base.h @@ -10,12 +10,12 @@ #include #include "../ble_spam.h" -typedef union ProtocolCfg ProtocolCfg; +typedef struct ProtocolCfg ProtocolCfg; typedef struct { const Icon* icon; const char* (*get_name)(const ProtocolCfg* _cfg); - void (*make_packet)(uint8_t* _size, uint8_t** _packet, const ProtocolCfg* _cfg); + void (*make_packet)(uint8_t* _size, uint8_t** _packet, ProtocolCfg* _cfg); void (*extra_config)(Ctx* ctx); uint8_t (*config_count)(const ProtocolCfg* _cfg); } Protocol; diff --git a/applications/external/ble_spam/protocols/_protocols.h b/applications/external/ble_spam/protocols/_protocols.h index 4e646eefb..c1395dab8 100644 --- a/applications/external/ble_spam/protocols/_protocols.h +++ b/applications/external/ble_spam/protocols/_protocols.h @@ -5,11 +5,19 @@ #include "easysetup.h" #include "swiftpair.h" -union ProtocolCfg { - ContinuityCfg continuity; - FastpairCfg fastpair; - EasysetupCfg easysetup; - SwiftpairCfg swiftpair; +typedef enum { + ProtocolModeRandom, + ProtocolModeValue, +} ProtocolMode; + +struct ProtocolCfg { + ProtocolMode mode; + union { + ContinuityCfg continuity; + FastpairCfg fastpair; + EasysetupCfg easysetup; + SwiftpairCfg swiftpair; + } specific; }; extern const Protocol* protocols[]; diff --git a/applications/external/ble_spam/protocols/continuity.c b/applications/external/ble_spam/protocols/continuity.c index efbf87560..6a7e130e5 100644 --- a/applications/external/ble_spam/protocols/continuity.c +++ b/applications/external/ble_spam/protocols/continuity.c @@ -72,7 +72,7 @@ static const char* type_names[ContinuityTypeCOUNT] = { [ContinuityTypeCustomCrash] = "Continuity Custom", }; static const char* get_name(const ProtocolCfg* _cfg) { - const ContinuityCfg* cfg = &_cfg->continuity; + const ContinuityCfg* cfg = &_cfg->specific.continuity; return type_names[cfg->type]; } @@ -87,8 +87,8 @@ static uint8_t packet_sizes[ContinuityTypeCOUNT] = { [ContinuityTypeNearbyInfo] = HEADER_LEN + 5, [ContinuityTypeCustomCrash] = HEADER_LEN + 11, }; -static void make_packet(uint8_t* _size, uint8_t** _packet, const ProtocolCfg* _cfg) { - const ContinuityCfg* cfg = _cfg ? &_cfg->continuity : NULL; +static void make_packet(uint8_t* _size, uint8_t** _packet, ProtocolCfg* _cfg) { + ContinuityCfg* cfg = _cfg ? &_cfg->specific.continuity : NULL; ContinuityType type; if(cfg && cfg->type != 0x00) { @@ -139,14 +139,18 @@ static void make_packet(uint8_t* _size, uint8_t** _packet, const ProtocolCfg* _c case ContinuityTypeProximityPair: { uint16_t model; - if(cfg && cfg->data.proximity_pair.model != 0x0000) { - model = cfg->data.proximity_pair.model; - } else { + switch(cfg ? _cfg->mode : ProtocolModeRandom) { + case ProtocolModeRandom: + default: model = pp_models[rand() % pp_models_count].value; + break; + case ProtocolModeValue: + model = cfg->data.proximity_pair.model; + break; } uint8_t prefix; - if(cfg && cfg->data.proximity_pair.prefix == 0x00) { + if(cfg && cfg->data.proximity_pair.prefix != 0x00) { prefix = cfg->data.proximity_pair.prefix; } else { if(model == 0x0055 || model == 0x0030) @@ -209,10 +213,14 @@ static void make_packet(uint8_t* _size, uint8_t** _packet, const ProtocolCfg* _c case ContinuityTypeNearbyAction: { uint8_t action; - if(cfg && cfg->data.nearby_action.action != 0x00) { - action = cfg->data.nearby_action.action; - } else { + switch(cfg ? _cfg->mode : ProtocolModeRandom) { + case ProtocolModeRandom: + default: action = na_actions[rand() % na_actions_count].value; + break; + case ProtocolModeValue: + action = cfg->data.nearby_action.action; + break; } uint8_t flags; @@ -293,7 +301,8 @@ enum { }; static void config_callback(void* _ctx, uint32_t index) { Ctx* ctx = _ctx; - ContinuityCfg* cfg = &ctx->attack->payload.cfg.continuity; + ProtocolCfg* _cfg = &ctx->attack->payload.cfg; + ContinuityCfg* cfg = &_cfg->specific.continuity; scene_manager_set_scene_state(ctx->scene_manager, SceneConfig, index); switch(cfg->type) { case ContinuityTypeProximityPair: { @@ -341,19 +350,22 @@ static void config_callback(void* _ctx, uint32_t index) { } } static void pp_model_changed(VariableItem* item) { - ContinuityCfg* cfg = variable_item_get_context(item); + ProtocolCfg* _cfg = variable_item_get_context(item); + ContinuityCfg* cfg = &_cfg->specific.continuity; uint8_t index = variable_item_get_current_value_index(item); if(index) { index--; + _cfg->mode = ProtocolModeValue; cfg->data.proximity_pair.model = pp_models[index].value; variable_item_set_current_value_text(item, pp_models[index].name); } else { - cfg->data.proximity_pair.model = 0x0000; + _cfg->mode = ProtocolModeRandom; variable_item_set_current_value_text(item, "Random"); } } static void pp_prefix_changed(VariableItem* item) { - ContinuityCfg* cfg = variable_item_get_context(item); + ProtocolCfg* _cfg = variable_item_get_context(item); + ContinuityCfg* cfg = &_cfg->specific.continuity; uint8_t index = variable_item_get_current_value_index(item); if(index) { index--; @@ -365,33 +377,39 @@ static void pp_prefix_changed(VariableItem* item) { } } static void na_action_changed(VariableItem* item) { - ContinuityCfg* cfg = variable_item_get_context(item); + ProtocolCfg* _cfg = variable_item_get_context(item); + ContinuityCfg* cfg = &_cfg->specific.continuity; uint8_t index = variable_item_get_current_value_index(item); if(index) { index--; + _cfg->mode = ProtocolModeValue; cfg->data.nearby_action.action = na_actions[index].value; variable_item_set_current_value_text(item, na_actions[index].name); } else { - cfg->data.nearby_action.action = 0x00; + _cfg->mode = ProtocolModeRandom; variable_item_set_current_value_text(item, "Random"); } } static void extra_config(Ctx* ctx) { - ContinuityCfg* cfg = &ctx->attack->payload.cfg.continuity; + ProtocolCfg* _cfg = &ctx->attack->payload.cfg; + ContinuityCfg* cfg = &_cfg->specific.continuity; VariableItemList* list = ctx->variable_item_list; VariableItem* item; size_t value_index; switch(cfg->type) { case ContinuityTypeProximityPair: { - item = - variable_item_list_add(list, "Model Code", pp_models_count + 1, pp_model_changed, cfg); + item = variable_item_list_add( + list, "Model Code", pp_models_count + 1, pp_model_changed, _cfg); const char* model_name = NULL; char model_name_buf[5]; - if(cfg->data.proximity_pair.model == 0x0000) { + switch(_cfg->mode) { + case ProtocolModeRandom: + default: model_name = "Random"; value_index = 0; - } else { + break; + case ProtocolModeValue: for(uint8_t i = 0; i < pp_models_count; i++) { if(cfg->data.proximity_pair.model == pp_models[i].value) { model_name = pp_models[i].name; @@ -405,12 +423,13 @@ static void extra_config(Ctx* ctx) { model_name = model_name_buf; value_index = pp_models_count + 1; } + break; } variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_text(item, model_name); item = - variable_item_list_add(list, "Prefix", pp_prefixes_count + 1, pp_prefix_changed, cfg); + variable_item_list_add(list, "Prefix", pp_prefixes_count + 1, pp_prefix_changed, _cfg); const char* prefix_name = NULL; char prefix_name_buf[3]; if(cfg->data.proximity_pair.prefix == 0x00) { @@ -440,13 +459,16 @@ static void extra_config(Ctx* ctx) { } case ContinuityTypeNearbyAction: { item = variable_item_list_add( - list, "Action Type", na_actions_count + 1, na_action_changed, cfg); + list, "Action Type", na_actions_count + 1, na_action_changed, _cfg); const char* action_name = NULL; char action_name_buf[3]; - if(cfg->data.nearby_action.action == 0x00) { + switch(_cfg->mode) { + case ProtocolModeRandom: + default: action_name = "Random"; value_index = 0; - } else { + break; + case ProtocolModeValue: for(uint8_t i = 0; i < na_actions_count; i++) { if(cfg->data.nearby_action.action == na_actions[i].value) { action_name = na_actions[i].name; @@ -463,6 +485,7 @@ static void extra_config(Ctx* ctx) { action_name = action_name_buf; value_index = na_actions_count + 1; } + break; } variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_text(item, action_name); @@ -503,7 +526,7 @@ static uint8_t config_counts[ContinuityTypeCOUNT] = { [ContinuityTypeCustomCrash] = ConfigCcCOUNT - ConfigExtraStart - 1, }; static uint8_t config_count(const ProtocolCfg* _cfg) { - const ContinuityCfg* cfg = &_cfg->continuity; + const ContinuityCfg* cfg = &_cfg->specific.continuity; return config_counts[cfg->type]; } @@ -517,16 +540,18 @@ const Protocol protocol_continuity = { static void pp_model_callback(void* _ctx, uint32_t index) { Ctx* ctx = _ctx; - ContinuityCfg* cfg = &ctx->attack->payload.cfg.continuity; + ProtocolCfg* _cfg = &ctx->attack->payload.cfg; + ContinuityCfg* cfg = &_cfg->specific.continuity; switch(index) { case 0: - cfg->data.proximity_pair.model = 0x0000; + _cfg->mode = ProtocolModeRandom; scene_manager_previous_scene(ctx->scene_manager); break; case pp_models_count + 1: scene_manager_next_scene(ctx->scene_manager, SceneContinuityPpModelCustom); break; default: + _cfg->mode = ProtocolModeValue; cfg->data.proximity_pair.model = pp_models[index - 1].value; scene_manager_previous_scene(ctx->scene_manager); break; @@ -534,27 +559,28 @@ static void pp_model_callback(void* _ctx, uint32_t index) { } void scene_continuity_pp_model_on_enter(void* _ctx) { Ctx* ctx = _ctx; - ContinuityCfg* cfg = &ctx->attack->payload.cfg.continuity; + ProtocolCfg* _cfg = &ctx->attack->payload.cfg; + ContinuityCfg* cfg = &_cfg->specific.continuity; Submenu* submenu = ctx->submenu; uint32_t selected = 0; - bool found = false; submenu_reset(submenu); submenu_add_item(submenu, "Random", 0, pp_model_callback, ctx); - if(cfg->data.proximity_pair.model == 0x0000) { - found = true; + if(_cfg->mode == ProtocolModeRandom) { selected = 0; } + + bool found = false; for(uint8_t i = 0; i < pp_models_count; i++) { submenu_add_item(submenu, pp_models[i].name, i + 1, pp_model_callback, ctx); - if(!found && cfg->data.proximity_pair.model == pp_models[i].value) { + if(!found && _cfg->mode == ProtocolModeValue && + cfg->data.proximity_pair.model == pp_models[i].value) { found = true; selected = i + 1; } } submenu_add_item(submenu, "Custom", pp_models_count + 1, pp_model_callback, ctx); - if(!found) { - found = true; + if(!found && _cfg->mode == ProtocolModeValue) { selected = pp_models_count + 1; } @@ -573,14 +599,17 @@ void scene_continuity_pp_model_on_exit(void* _ctx) { static void pp_model_custom_callback(void* _ctx) { Ctx* ctx = _ctx; - ContinuityCfg* cfg = &ctx->attack->payload.cfg.continuity; + ProtocolCfg* _cfg = &ctx->attack->payload.cfg; + ContinuityCfg* cfg = &_cfg->specific.continuity; + _cfg->mode = ProtocolModeValue; cfg->data.proximity_pair.model = (ctx->byte_store[0] << 0x08) + (ctx->byte_store[1] << 0x00); scene_manager_previous_scene(ctx->scene_manager); scene_manager_previous_scene(ctx->scene_manager); } void scene_continuity_pp_model_custom_on_enter(void* _ctx) { Ctx* ctx = _ctx; - ContinuityCfg* cfg = &ctx->attack->payload.cfg.continuity; + ProtocolCfg* _cfg = &ctx->attack->payload.cfg; + ContinuityCfg* cfg = &_cfg->specific.continuity; ByteInput* byte_input = ctx->byte_input; byte_input_set_header_text(byte_input, "Enter custom Model Code"); @@ -604,7 +633,8 @@ void scene_continuity_pp_model_custom_on_exit(void* _ctx) { static void pp_prefix_callback(void* _ctx, uint32_t index) { Ctx* ctx = _ctx; - ContinuityCfg* cfg = &ctx->attack->payload.cfg.continuity; + ProtocolCfg* _cfg = &ctx->attack->payload.cfg; + ContinuityCfg* cfg = &_cfg->specific.continuity; switch(index) { case 0: cfg->data.proximity_pair.prefix = 0x00; @@ -621,7 +651,8 @@ static void pp_prefix_callback(void* _ctx, uint32_t index) { } void scene_continuity_pp_prefix_on_enter(void* _ctx) { Ctx* ctx = _ctx; - ContinuityCfg* cfg = &ctx->attack->payload.cfg.continuity; + ProtocolCfg* _cfg = &ctx->attack->payload.cfg; + ContinuityCfg* cfg = &_cfg->specific.continuity; Submenu* submenu = ctx->submenu; uint32_t selected = 0; bool found = false; @@ -632,6 +663,7 @@ void scene_continuity_pp_prefix_on_enter(void* _ctx) { found = true; selected = 0; } + for(uint8_t i = 0; i < pp_prefixes_count; i++) { submenu_add_item(submenu, pp_prefixes[i].name, i + 1, pp_prefix_callback, ctx); if(!found && cfg->data.proximity_pair.prefix == pp_prefixes[i].value) { @@ -641,7 +673,6 @@ void scene_continuity_pp_prefix_on_enter(void* _ctx) { } submenu_add_item(submenu, "Custom", pp_prefixes_count + 1, pp_prefix_callback, ctx); if(!found) { - found = true; selected = pp_prefixes_count + 1; } @@ -660,14 +691,16 @@ void scene_continuity_pp_prefix_on_exit(void* _ctx) { static void pp_prefix_custom_callback(void* _ctx) { Ctx* ctx = _ctx; - ContinuityCfg* cfg = &ctx->attack->payload.cfg.continuity; + ProtocolCfg* _cfg = &ctx->attack->payload.cfg; + ContinuityCfg* cfg = &_cfg->specific.continuity; cfg->data.proximity_pair.prefix = (ctx->byte_store[0] << 0x00); scene_manager_previous_scene(ctx->scene_manager); scene_manager_previous_scene(ctx->scene_manager); } void scene_continuity_pp_prefix_custom_on_enter(void* _ctx) { Ctx* ctx = _ctx; - ContinuityCfg* cfg = &ctx->attack->payload.cfg.continuity; + ProtocolCfg* _cfg = &ctx->attack->payload.cfg; + ContinuityCfg* cfg = &_cfg->specific.continuity; ByteInput* byte_input = ctx->byte_input; byte_input_set_header_text(byte_input, "Enter custom Prefix"); @@ -690,16 +723,18 @@ void scene_continuity_pp_prefix_custom_on_exit(void* _ctx) { static void na_action_callback(void* _ctx, uint32_t index) { Ctx* ctx = _ctx; - ContinuityCfg* cfg = &ctx->attack->payload.cfg.continuity; + ProtocolCfg* _cfg = &ctx->attack->payload.cfg; + ContinuityCfg* cfg = &_cfg->specific.continuity; switch(index) { case 0: - cfg->data.nearby_action.action = 0x00; + _cfg->mode = ProtocolModeRandom; scene_manager_previous_scene(ctx->scene_manager); break; case na_actions_count + 1: scene_manager_next_scene(ctx->scene_manager, SceneContinuityNaActionCustom); break; default: + _cfg->mode = ProtocolModeValue; cfg->data.nearby_action.action = na_actions[index - 1].value; scene_manager_previous_scene(ctx->scene_manager); break; @@ -707,27 +742,28 @@ static void na_action_callback(void* _ctx, uint32_t index) { } void scene_continuity_na_action_on_enter(void* _ctx) { Ctx* ctx = _ctx; - ContinuityCfg* cfg = &ctx->attack->payload.cfg.continuity; + ProtocolCfg* _cfg = &ctx->attack->payload.cfg; + ContinuityCfg* cfg = &_cfg->specific.continuity; Submenu* submenu = ctx->submenu; uint32_t selected = 0; - bool found = false; submenu_reset(submenu); submenu_add_item(submenu, "Random", 0, na_action_callback, ctx); - if(cfg->data.nearby_action.action == 0x00) { - found = true; + if(_cfg->mode == ProtocolModeRandom) { selected = 0; } + + bool found = false; for(uint8_t i = 0; i < na_actions_count; i++) { submenu_add_item(submenu, na_actions[i].name, i + 1, na_action_callback, ctx); - if(!found && cfg->data.nearby_action.action == na_actions[i].value) { + if(!found && _cfg->mode == ProtocolModeValue && + cfg->data.nearby_action.action == na_actions[i].value) { found = true; selected = i + 1; } } submenu_add_item(submenu, "Custom", na_actions_count + 1, na_action_callback, ctx); - if(!found) { - found = true; + if(!found && _cfg->mode == ProtocolModeValue) { selected = na_actions_count + 1; } @@ -746,14 +782,17 @@ void scene_continuity_na_action_on_exit(void* _ctx) { static void na_action_custom_callback(void* _ctx) { Ctx* ctx = _ctx; - ContinuityCfg* cfg = &ctx->attack->payload.cfg.continuity; + ProtocolCfg* _cfg = &ctx->attack->payload.cfg; + ContinuityCfg* cfg = &_cfg->specific.continuity; + _cfg->mode = ProtocolModeValue; cfg->data.nearby_action.action = (ctx->byte_store[0] << 0x00); scene_manager_previous_scene(ctx->scene_manager); scene_manager_previous_scene(ctx->scene_manager); } void scene_continuity_na_action_custom_on_enter(void* _ctx) { Ctx* ctx = _ctx; - ContinuityCfg* cfg = &ctx->attack->payload.cfg.continuity; + ProtocolCfg* _cfg = &ctx->attack->payload.cfg; + ContinuityCfg* cfg = &_cfg->specific.continuity; ByteInput* byte_input = ctx->byte_input; byte_input_set_header_text(byte_input, "Enter custom Action Type"); @@ -780,7 +819,8 @@ static void na_flags_callback(void* _ctx) { } void scene_continuity_na_flags_on_enter(void* _ctx) { Ctx* ctx = _ctx; - ContinuityCfg* cfg = &ctx->attack->payload.cfg.continuity; + ProtocolCfg* _cfg = &ctx->attack->payload.cfg; + ContinuityCfg* cfg = &_cfg->specific.continuity; ByteInput* byte_input = ctx->byte_input; byte_input_set_header_text(byte_input, "Press back for automatic"); @@ -801,6 +841,7 @@ bool scene_continuity_na_flags_on_event(void* _ctx, SceneManagerEvent event) { } void scene_continuity_na_flags_on_exit(void* _ctx) { Ctx* ctx = _ctx; - ContinuityCfg* cfg = &ctx->attack->payload.cfg.continuity; + ProtocolCfg* _cfg = &ctx->attack->payload.cfg; + ContinuityCfg* cfg = &_cfg->specific.continuity; cfg->data.nearby_action.flags = (ctx->byte_store[0] << 0x00); } diff --git a/applications/external/ble_spam/protocols/easysetup.c b/applications/external/ble_spam/protocols/easysetup.c index e1b6e0584..d13083b7d 100644 --- a/applications/external/ble_spam/protocols/easysetup.c +++ b/applications/external/ble_spam/protocols/easysetup.c @@ -69,7 +69,7 @@ static const char* type_names[EasysetupTypeCOUNT] = { [EasysetupTypeWatch] = "EasySetup Watch", }; static const char* get_name(const ProtocolCfg* _cfg) { - const EasysetupCfg* cfg = &_cfg->easysetup; + const EasysetupCfg* cfg = &_cfg->specific.easysetup; return type_names[cfg->type]; } @@ -77,8 +77,8 @@ static uint8_t packet_sizes[EasysetupTypeCOUNT] = { [EasysetupTypeBuds] = 31, [EasysetupTypeWatch] = 15, }; -void make_packet(uint8_t* out_size, uint8_t** out_packet, const ProtocolCfg* _cfg) { - const EasysetupCfg* cfg = _cfg ? &_cfg->easysetup : NULL; +void make_packet(uint8_t* out_size, uint8_t** out_packet, ProtocolCfg* _cfg) { + EasysetupCfg* cfg = _cfg ? &_cfg->specific.easysetup : NULL; EasysetupType type; if(cfg && cfg->type != 0x00) { @@ -98,10 +98,14 @@ void make_packet(uint8_t* out_size, uint8_t** out_packet, const ProtocolCfg* _cf switch(type) { case EasysetupTypeBuds: { uint32_t model; - if(cfg && cfg->data.buds.model != 0x000000) { - model = cfg->data.buds.model; - } else { + switch(cfg ? _cfg->mode : ProtocolModeRandom) { + case ProtocolModeRandom: + default: model = buds_models[rand() % buds_models_count].value; + break; + case ProtocolModeValue: + model = cfg->data.buds.model; + break; } packet[i++] = 27; // Size @@ -141,10 +145,14 @@ void make_packet(uint8_t* out_size, uint8_t** out_packet, const ProtocolCfg* _cf } case EasysetupTypeWatch: { uint8_t model; - if(cfg && cfg->data.watch.model != 0x00) { - model = cfg->data.watch.model; - } else { + switch(cfg ? _cfg->mode : ProtocolModeRandom) { + case ProtocolModeRandom: + default: model = watch_models[rand() % watch_models_count].value; + break; + case ProtocolModeValue: + model = cfg->data.watch.model; + break; } packet[i++] = 14; // Size @@ -185,7 +193,8 @@ enum { }; static void config_callback(void* _ctx, uint32_t index) { Ctx* ctx = _ctx; - EasysetupCfg* cfg = &ctx->attack->payload.cfg.easysetup; + ProtocolCfg* _cfg = &ctx->attack->payload.cfg; + EasysetupCfg* cfg = &_cfg->specific.easysetup; scene_manager_set_scene_state(ctx->scene_manager, SceneConfig, index); switch(cfg->type) { case EasysetupTypeBuds: { @@ -218,31 +227,36 @@ static void config_callback(void* _ctx, uint32_t index) { } } static void buds_model_changed(VariableItem* item) { - EasysetupCfg* cfg = variable_item_get_context(item); + ProtocolCfg* _cfg = variable_item_get_context(item); + EasysetupCfg* cfg = &_cfg->specific.easysetup; uint8_t index = variable_item_get_current_value_index(item); if(index) { index--; + _cfg->mode = ProtocolModeValue; cfg->data.buds.model = buds_models[index].value; variable_item_set_current_value_text(item, buds_models[index].name); } else { - cfg->data.buds.model = 0x000000; + _cfg->mode = ProtocolModeRandom; variable_item_set_current_value_text(item, "Random"); } } static void watch_model_changed(VariableItem* item) { - EasysetupCfg* cfg = variable_item_get_context(item); + ProtocolCfg* _cfg = variable_item_get_context(item); + EasysetupCfg* cfg = &_cfg->specific.easysetup; uint8_t index = variable_item_get_current_value_index(item); if(index) { index--; + _cfg->mode = ProtocolModeValue; cfg->data.watch.model = watch_models[index].value; variable_item_set_current_value_text(item, watch_models[index].name); } else { - cfg->data.watch.model = 0x00; + _cfg->mode = ProtocolModeRandom; variable_item_set_current_value_text(item, "Random"); } } static void extra_config(Ctx* ctx) { - EasysetupCfg* cfg = &ctx->attack->payload.cfg.easysetup; + ProtocolCfg* _cfg = &ctx->attack->payload.cfg; + EasysetupCfg* cfg = &_cfg->specific.easysetup; VariableItemList* list = ctx->variable_item_list; VariableItem* item; size_t value_index; @@ -250,13 +264,16 @@ static void extra_config(Ctx* ctx) { switch(cfg->type) { case EasysetupTypeBuds: { item = variable_item_list_add( - list, "Model Code", buds_models_count + 1, buds_model_changed, cfg); + list, "Model Code", buds_models_count + 1, buds_model_changed, _cfg); const char* model_name = NULL; char model_name_buf[9]; - if(cfg->data.buds.model == 0x000000) { + switch(_cfg->mode) { + case ProtocolModeRandom: + default: model_name = "Random"; value_index = 0; - } else { + break; + case ProtocolModeValue: for(uint8_t i = 0; i < buds_models_count; i++) { if(cfg->data.buds.model == buds_models[i].value) { model_name = buds_models[i].name; @@ -269,6 +286,7 @@ static void extra_config(Ctx* ctx) { model_name = model_name_buf; value_index = buds_models_count + 1; } + break; } variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_text(item, model_name); @@ -278,13 +296,16 @@ static void extra_config(Ctx* ctx) { } case EasysetupTypeWatch: { item = variable_item_list_add( - list, "Model Code", watch_models_count + 1, watch_model_changed, cfg); + list, "Model Code", watch_models_count + 1, watch_model_changed, _cfg); const char* model_name = NULL; char model_name_buf[3]; - if(cfg->data.watch.model == 0x00) { + switch(_cfg->mode) { + case ProtocolModeRandom: + default: model_name = "Random"; value_index = 0; - } else { + break; + case ProtocolModeValue: for(uint8_t i = 0; i < watch_models_count; i++) { if(cfg->data.watch.model == watch_models[i].value) { model_name = watch_models[i].name; @@ -297,6 +318,7 @@ static void extra_config(Ctx* ctx) { model_name = model_name_buf; value_index = watch_models_count + 1; } + break; } variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_text(item, model_name); @@ -314,7 +336,7 @@ static uint8_t config_counts[EasysetupTypeCOUNT] = { [EasysetupTypeWatch] = ConfigWatchCOUNT - ConfigExtraStart - 1, }; static uint8_t config_count(const ProtocolCfg* _cfg) { - const EasysetupCfg* cfg = &_cfg->easysetup; + const EasysetupCfg* cfg = &_cfg->specific.easysetup; return config_counts[cfg->type]; } @@ -328,16 +350,18 @@ const Protocol protocol_easysetup = { static void buds_model_callback(void* _ctx, uint32_t index) { Ctx* ctx = _ctx; - EasysetupCfg* cfg = &ctx->attack->payload.cfg.easysetup; + ProtocolCfg* _cfg = &ctx->attack->payload.cfg; + EasysetupCfg* cfg = &_cfg->specific.easysetup; switch(index) { case 0: - cfg->data.buds.model = 0x000000; + _cfg->mode = ProtocolModeRandom; scene_manager_previous_scene(ctx->scene_manager); break; case buds_models_count + 1: scene_manager_next_scene(ctx->scene_manager, SceneEasysetupBudsModelCustom); break; default: + _cfg->mode = ProtocolModeValue; cfg->data.buds.model = buds_models[index - 1].value; scene_manager_previous_scene(ctx->scene_manager); break; @@ -345,27 +369,28 @@ static void buds_model_callback(void* _ctx, uint32_t index) { } void scene_easysetup_buds_model_on_enter(void* _ctx) { Ctx* ctx = _ctx; - EasysetupCfg* cfg = &ctx->attack->payload.cfg.easysetup; + ProtocolCfg* _cfg = &ctx->attack->payload.cfg; + EasysetupCfg* cfg = &_cfg->specific.easysetup; Submenu* submenu = ctx->submenu; uint32_t selected = 0; - bool found = false; submenu_reset(submenu); submenu_add_item(submenu, "Random", 0, buds_model_callback, ctx); - if(cfg->data.buds.model == 0x000000) { - found = true; + if(_cfg->mode == ProtocolModeRandom) { selected = 0; } + + bool found = false; for(uint8_t i = 0; i < buds_models_count; i++) { submenu_add_item(submenu, buds_models[i].name, i + 1, buds_model_callback, ctx); - if(!found && cfg->data.buds.model == buds_models[i].value) { + if(!found && _cfg->mode == ProtocolModeValue && + cfg->data.buds.model == buds_models[i].value) { found = true; selected = i + 1; } } submenu_add_item(submenu, "Custom", buds_models_count + 1, buds_model_callback, ctx); - if(!found) { - found = true; + if(!found && _cfg->mode == ProtocolModeValue) { selected = buds_models_count + 1; } @@ -384,7 +409,9 @@ void scene_easysetup_buds_model_on_exit(void* _ctx) { static void buds_model_custom_callback(void* _ctx) { Ctx* ctx = _ctx; - EasysetupCfg* cfg = &ctx->attack->payload.cfg.easysetup; + ProtocolCfg* _cfg = &ctx->attack->payload.cfg; + EasysetupCfg* cfg = &_cfg->specific.easysetup; + _cfg->mode = ProtocolModeValue; cfg->data.buds.model = (ctx->byte_store[0] << 0x10) + (ctx->byte_store[1] << 0x08) + (ctx->byte_store[2] << 0x00); scene_manager_previous_scene(ctx->scene_manager); @@ -392,7 +419,8 @@ static void buds_model_custom_callback(void* _ctx) { } void scene_easysetup_buds_model_custom_on_enter(void* _ctx) { Ctx* ctx = _ctx; - EasysetupCfg* cfg = &ctx->attack->payload.cfg.easysetup; + ProtocolCfg* _cfg = &ctx->attack->payload.cfg; + EasysetupCfg* cfg = &_cfg->specific.easysetup; ByteInput* byte_input = ctx->byte_input; byte_input_set_header_text(byte_input, "Enter custom Model Code"); @@ -417,16 +445,18 @@ void scene_easysetup_buds_model_custom_on_exit(void* _ctx) { static void watch_model_callback(void* _ctx, uint32_t index) { Ctx* ctx = _ctx; - EasysetupCfg* cfg = &ctx->attack->payload.cfg.easysetup; + ProtocolCfg* _cfg = &ctx->attack->payload.cfg; + EasysetupCfg* cfg = &_cfg->specific.easysetup; switch(index) { case 0: - cfg->data.watch.model = 0x00; + _cfg->mode = ProtocolModeRandom; scene_manager_previous_scene(ctx->scene_manager); break; case watch_models_count + 1: scene_manager_next_scene(ctx->scene_manager, SceneEasysetupWatchModelCustom); break; default: + _cfg->mode = ProtocolModeValue; cfg->data.watch.model = watch_models[index - 1].value; scene_manager_previous_scene(ctx->scene_manager); break; @@ -434,27 +464,28 @@ static void watch_model_callback(void* _ctx, uint32_t index) { } void scene_easysetup_watch_model_on_enter(void* _ctx) { Ctx* ctx = _ctx; - EasysetupCfg* cfg = &ctx->attack->payload.cfg.easysetup; + ProtocolCfg* _cfg = &ctx->attack->payload.cfg; + EasysetupCfg* cfg = &_cfg->specific.easysetup; Submenu* submenu = ctx->submenu; uint32_t selected = 0; - bool found = false; submenu_reset(submenu); submenu_add_item(submenu, "Random", 0, watch_model_callback, ctx); - if(cfg->data.watch.model == 0x00) { - found = true; + if(_cfg->mode == ProtocolModeRandom) { selected = 0; } + + bool found = false; for(uint8_t i = 0; i < watch_models_count; i++) { submenu_add_item(submenu, watch_models[i].name, i + 1, watch_model_callback, ctx); - if(!found && cfg->data.watch.model == watch_models[i].value) { + if(!found && _cfg->mode == ProtocolModeValue && + cfg->data.watch.model == watch_models[i].value) { found = true; selected = i + 1; } } submenu_add_item(submenu, "Custom", watch_models_count + 1, watch_model_callback, ctx); - if(!found) { - found = true; + if(!found && _cfg->mode == ProtocolModeValue) { selected = watch_models_count + 1; } @@ -473,14 +504,17 @@ void scene_easysetup_watch_model_on_exit(void* _ctx) { static void watch_model_custom_callback(void* _ctx) { Ctx* ctx = _ctx; - EasysetupCfg* cfg = &ctx->attack->payload.cfg.easysetup; + ProtocolCfg* _cfg = &ctx->attack->payload.cfg; + EasysetupCfg* cfg = &_cfg->specific.easysetup; + _cfg->mode = ProtocolModeValue; cfg->data.watch.model = (ctx->byte_store[0] << 0x00); scene_manager_previous_scene(ctx->scene_manager); scene_manager_previous_scene(ctx->scene_manager); } void scene_easysetup_watch_model_custom_on_enter(void* _ctx) { Ctx* ctx = _ctx; - EasysetupCfg* cfg = &ctx->attack->payload.cfg.easysetup; + ProtocolCfg* _cfg = &ctx->attack->payload.cfg; + EasysetupCfg* cfg = &_cfg->specific.easysetup; ByteInput* byte_input = ctx->byte_input; byte_input_set_header_text(byte_input, "Enter custom Model Code"); diff --git a/applications/external/ble_spam/protocols/fastpair.c b/applications/external/ble_spam/protocols/fastpair.c index db3d37b35..9ab904dc6 100644 --- a/applications/external/ble_spam/protocols/fastpair.c +++ b/applications/external/ble_spam/protocols/fastpair.c @@ -51,14 +51,18 @@ static const char* get_name(const ProtocolCfg* _cfg) { return "FastPair"; } -static void make_packet(uint8_t* _size, uint8_t** _packet, const ProtocolCfg* _cfg) { - const FastpairCfg* cfg = _cfg ? &_cfg->fastpair : NULL; +static void make_packet(uint8_t* _size, uint8_t** _packet, ProtocolCfg* _cfg) { + FastpairCfg* cfg = _cfg ? &_cfg->specific.fastpair : NULL; uint32_t model; - if(cfg && cfg->model != 0x000000) { - model = cfg->model; - } else { + switch(cfg ? _cfg->mode : ProtocolModeRandom) { + case ProtocolModeRandom: + default: model = models[rand() % models_count].value; + break; + case ProtocolModeValue: + model = cfg->model; + break; } uint8_t size = 14; @@ -107,30 +111,36 @@ static void config_callback(void* _ctx, uint32_t index) { } } static void model_changed(VariableItem* item) { - FastpairCfg* cfg = variable_item_get_context(item); + ProtocolCfg* _cfg = variable_item_get_context(item); + FastpairCfg* cfg = &_cfg->specific.fastpair; uint8_t index = variable_item_get_current_value_index(item); if(index) { index--; + _cfg->mode = ProtocolModeValue; cfg->model = models[index].value; variable_item_set_current_value_text(item, models[index].name); } else { - cfg->model = 0x000000; + _cfg->mode = ProtocolModeRandom; variable_item_set_current_value_text(item, "Random"); } } static void extra_config(Ctx* ctx) { - FastpairCfg* cfg = &ctx->attack->payload.cfg.fastpair; + ProtocolCfg* _cfg = &ctx->attack->payload.cfg; + FastpairCfg* cfg = &_cfg->specific.fastpair; VariableItemList* list = ctx->variable_item_list; VariableItem* item; size_t value_index; - item = variable_item_list_add(list, "Model Code", models_count + 1, model_changed, cfg); + item = variable_item_list_add(list, "Model Code", models_count + 1, model_changed, _cfg); const char* model_name = NULL; char model_name_buf[9]; - if(cfg->model == 0x000000) { + switch(_cfg->mode) { + case ProtocolModeRandom: + default: model_name = "Random"; value_index = 0; - } else { + break; + case ProtocolModeValue: for(uint8_t i = 0; i < models_count; i++) { if(cfg->model == models[i].value) { model_name = models[i].name; @@ -143,6 +153,7 @@ static void extra_config(Ctx* ctx) { model_name = model_name_buf; value_index = models_count + 1; } + break; } variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_text(item, model_name); @@ -167,16 +178,18 @@ const Protocol protocol_fastpair = { static void model_callback(void* _ctx, uint32_t index) { Ctx* ctx = _ctx; - FastpairCfg* cfg = &ctx->attack->payload.cfg.fastpair; + ProtocolCfg* _cfg = &ctx->attack->payload.cfg; + FastpairCfg* cfg = &_cfg->specific.fastpair; switch(index) { case 0: - cfg->model = 0x000000; + _cfg->mode = ProtocolModeRandom; scene_manager_previous_scene(ctx->scene_manager); break; case models_count + 1: scene_manager_next_scene(ctx->scene_manager, SceneFastpairModelCustom); break; default: + _cfg->mode = ProtocolModeValue; cfg->model = models[index - 1].value; scene_manager_previous_scene(ctx->scene_manager); break; @@ -184,27 +197,27 @@ static void model_callback(void* _ctx, uint32_t index) { } void scene_fastpair_model_on_enter(void* _ctx) { Ctx* ctx = _ctx; - FastpairCfg* cfg = &ctx->attack->payload.cfg.fastpair; + ProtocolCfg* _cfg = &ctx->attack->payload.cfg; + FastpairCfg* cfg = &_cfg->specific.fastpair; Submenu* submenu = ctx->submenu; uint32_t selected = 0; - bool found = false; submenu_reset(submenu); submenu_add_item(submenu, "Random", 0, model_callback, ctx); - if(cfg->model == 0x000000) { - found = true; + if(_cfg->mode == ProtocolModeRandom) { selected = 0; } + + bool found = false; for(uint8_t i = 0; i < models_count; i++) { submenu_add_item(submenu, models[i].name, i + 1, model_callback, ctx); - if(!found && cfg->model == models[i].value) { + if(!found && _cfg->mode == ProtocolModeValue && cfg->model == models[i].value) { found = true; selected = i + 1; } } submenu_add_item(submenu, "Custom", models_count + 1, model_callback, ctx); - if(!found) { - found = true; + if(!found && _cfg->mode == ProtocolModeValue) { selected = models_count + 1; } @@ -223,7 +236,9 @@ void scene_fastpair_model_on_exit(void* _ctx) { static void model_custom_callback(void* _ctx) { Ctx* ctx = _ctx; - FastpairCfg* cfg = &ctx->attack->payload.cfg.fastpair; + ProtocolCfg* _cfg = &ctx->attack->payload.cfg; + FastpairCfg* cfg = &_cfg->specific.fastpair; + _cfg->mode = ProtocolModeValue; cfg->model = (ctx->byte_store[0] << 0x10) + (ctx->byte_store[1] << 0x08) + (ctx->byte_store[2] << 0x00); scene_manager_previous_scene(ctx->scene_manager); @@ -231,7 +246,8 @@ static void model_custom_callback(void* _ctx) { } void scene_fastpair_model_custom_on_enter(void* _ctx) { Ctx* ctx = _ctx; - FastpairCfg* cfg = &ctx->attack->payload.cfg.fastpair; + ProtocolCfg* _cfg = &ctx->attack->payload.cfg; + FastpairCfg* cfg = &_cfg->specific.fastpair; ByteInput* byte_input = ctx->byte_input; byte_input_set_header_text(byte_input, "Enter custom Model Code"); diff --git a/applications/external/ble_spam/protocols/swiftpair.c b/applications/external/ble_spam/protocols/swiftpair.c index 3a4788312..7fc65cb0d 100644 --- a/applications/external/ble_spam/protocols/swiftpair.c +++ b/applications/external/ble_spam/protocols/swiftpair.c @@ -4,27 +4,33 @@ // Hacked together by @Willy-JL and @Spooks4576 // Documentation at https://learn.microsoft.com/en-us/windows-hardware/design/component-guidelines/bluetooth-swift-pair +const char* names[] = { + "Assquach💦", + "Flipper 🐬", + "iOS 17 🍎", + "Kink💦", + "👉👌", + "🔵🦷", +}; +const uint8_t names_count = COUNT_OF(names); + static const char* get_name(const ProtocolCfg* _cfg) { UNUSED(_cfg); return "SwiftPair"; } -static void make_packet(uint8_t* _size, uint8_t** _packet, const ProtocolCfg* _cfg) { - const SwiftpairCfg* cfg = _cfg ? &_cfg->swiftpair : NULL; +static void make_packet(uint8_t* _size, uint8_t** _packet, ProtocolCfg* _cfg) { + SwiftpairCfg* cfg = _cfg ? &_cfg->specific.swiftpair : NULL; const char* name; - if(cfg && cfg->name[0] != '\0') { + switch(cfg ? _cfg->mode : ProtocolModeRandom) { + case ProtocolModeRandom: + default: + name = names[rand() % names_count]; + break; + case ProtocolModeValue: name = cfg->name; - } else { - const char* names[] = { - "Assquach💦", - "Flipper 🐬", - "iOS 17 🍎", - "Kink💦", - "👉👌", - "🔵🦷", - }; - name = names[rand() % COUNT_OF(names)]; + break; } uint8_t name_len = strlen(name); @@ -67,12 +73,14 @@ static void config_callback(void* _ctx, uint32_t index) { } } static void extra_config(Ctx* ctx) { - SwiftpairCfg* cfg = &ctx->attack->payload.cfg.swiftpair; + ProtocolCfg* _cfg = &ctx->attack->payload.cfg; + SwiftpairCfg* cfg = &_cfg->specific.swiftpair; VariableItemList* list = ctx->variable_item_list; VariableItem* item; item = variable_item_list_add(list, "Display Name", 0, NULL, NULL); - variable_item_set_current_value_text(item, cfg->name[0] != '\0' ? cfg->name : "Random"); + variable_item_set_current_value_text( + item, _cfg->mode == ProtocolModeRandom ? "Random" : cfg->name); variable_item_list_add(list, "Requires enabling SwiftPair", 0, NULL, NULL); @@ -94,15 +102,18 @@ const Protocol protocol_swiftpair = { static void name_callback(void* _ctx) { Ctx* ctx = _ctx; + ProtocolCfg* _cfg = &ctx->attack->payload.cfg; + _cfg->mode = ProtocolModeValue; scene_manager_previous_scene(ctx->scene_manager); } void scene_swiftpair_name_on_enter(void* _ctx) { Ctx* ctx = _ctx; - SwiftpairCfg* cfg = &ctx->attack->payload.cfg.swiftpair; + ProtocolCfg* _cfg = &ctx->attack->payload.cfg; + SwiftpairCfg* cfg = &_cfg->specific.swiftpair; TextInput* text_input = ctx->text_input; text_input_reset(text_input); - text_input_set_header_text(text_input, "Leave empty for random"); + text_input_set_header_text(text_input, "Press back for random"); text_input_set_result_callback( text_input, name_callback, ctx, cfg->name, sizeof(cfg->name), true); @@ -112,8 +123,11 @@ void scene_swiftpair_name_on_enter(void* _ctx) { view_dispatcher_switch_to_view(ctx->view_dispatcher, ViewTextInput); } bool scene_swiftpair_name_on_event(void* _ctx, SceneManagerEvent event) { - UNUSED(_ctx); - UNUSED(event); + Ctx* ctx = _ctx; + ProtocolCfg* _cfg = &ctx->attack->payload.cfg; + if(event.type == SceneManagerEventTypeBack) { + _cfg->mode = ProtocolModeRandom; + } return false; } void scene_swiftpair_name_on_exit(void* _ctx) { From 76131dd4aaf5390c0b483674fdea362475d5454d Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Wed, 25 Oct 2023 00:51:45 +0100 Subject: [PATCH 08/24] BLE Spam Bruteforce model codes functionality --- applications/external/ble_spam/ble_spam.c | 37 ++++++++++++--- .../external/ble_spam/protocols/_protocols.h | 6 +++ .../external/ble_spam/protocols/continuity.c | 46 +++++++++++++++++++ .../external/ble_spam/protocols/easysetup.c | 46 +++++++++++++++++++ .../external/ble_spam/protocols/fastpair.c | 23 ++++++++++ 5 files changed, 151 insertions(+), 7 deletions(-) diff --git a/applications/external/ble_spam/ble_spam.c b/applications/external/ble_spam/ble_spam.c index 54171cec6..cd6c5d215 100644 --- a/applications/external/ble_spam/ble_spam.c +++ b/applications/external/ble_spam/ble_spam.c @@ -334,7 +334,16 @@ static void draw_callback(Canvas* canvas, void* _ctx) { char str[32]; canvas_set_font(canvas, FontBatteryPercent); - snprintf(str, sizeof(str), "%ims", delays[state->delay]); + if(payload->cfg.mode == ProtocolModeBruteforce) { + snprintf( + str, + sizeof(str), + "0x%0*lX", + payload->cfg.bruteforce.size * 2, + payload->cfg.bruteforce.current); + } else { + snprintf(str, sizeof(str), "%ims", delays[state->delay]); + } canvas_draw_str_aligned(canvas, 116, 12, AlignRight, AlignBottom, str); canvas_draw_icon(canvas, 119, 6, &I_SmallArrowUp_3x5); canvas_draw_icon(canvas, 119, 10, &I_SmallArrowDown_3x5); @@ -419,15 +428,29 @@ static bool input_callback(InputEvent* input, void* _ctx) { } break; case InputKeyUp: - if(is_attack && state->delay < COUNT_OF(delays) - 1) { - state->delay++; - if(advertising) start_blink(state); + if(is_attack) { + ProtocolCfg* _cfg = &attacks[state->index].payload.cfg; + if(_cfg->mode == ProtocolModeBruteforce) { + _cfg->bruteforce.current = + (_cfg->bruteforce.current + 1) % (1 << (_cfg->bruteforce.size * 8)); + _cfg->bruteforce.counter = 0; + } else if(state->delay < COUNT_OF(delays) - 1) { + state->delay++; + if(advertising) start_blink(state); + } } break; case InputKeyDown: - if(is_attack && state->delay > 0) { - state->delay--; - if(advertising) start_blink(state); + if(is_attack) { + ProtocolCfg* _cfg = &attacks[state->index].payload.cfg; + if(_cfg->mode == ProtocolModeBruteforce) { + _cfg->bruteforce.current = + (_cfg->bruteforce.current - 1) % (1 << (_cfg->bruteforce.size * 8)); + _cfg->bruteforce.counter = 0; + } else if(state->delay > 0) { + state->delay--; + if(advertising) start_blink(state); + } } break; case InputKeyLeft: diff --git a/applications/external/ble_spam/protocols/_protocols.h b/applications/external/ble_spam/protocols/_protocols.h index c1395dab8..5bdc91b3f 100644 --- a/applications/external/ble_spam/protocols/_protocols.h +++ b/applications/external/ble_spam/protocols/_protocols.h @@ -8,10 +8,16 @@ typedef enum { ProtocolModeRandom, ProtocolModeValue, + ProtocolModeBruteforce, } ProtocolMode; struct ProtocolCfg { ProtocolMode mode; + struct { + uint8_t counter; + uint32_t current; + uint8_t size; + } bruteforce; union { ContinuityCfg continuity; FastpairCfg fastpair; diff --git a/applications/external/ble_spam/protocols/continuity.c b/applications/external/ble_spam/protocols/continuity.c index 6a7e130e5..2391c81bf 100644 --- a/applications/external/ble_spam/protocols/continuity.c +++ b/applications/external/ble_spam/protocols/continuity.c @@ -147,6 +147,13 @@ static void make_packet(uint8_t* _size, uint8_t** _packet, ProtocolCfg* _cfg) { case ProtocolModeValue: model = cfg->data.proximity_pair.model; break; + case ProtocolModeBruteforce: + if(_cfg->bruteforce.counter++ >= 10) { + _cfg->bruteforce.counter = 0; + if(_cfg->bruteforce.current++ >= 0xFFFF) _cfg->bruteforce.current = 0x0000; + } + model = cfg->data.proximity_pair.model = _cfg->bruteforce.current; + break; } uint8_t prefix; @@ -221,6 +228,13 @@ static void make_packet(uint8_t* _size, uint8_t** _packet, ProtocolCfg* _cfg) { case ProtocolModeValue: action = cfg->data.nearby_action.action; break; + case ProtocolModeBruteforce: + if(_cfg->bruteforce.counter++ >= 10) { + _cfg->bruteforce.counter = 0; + if(_cfg->bruteforce.current++ >= 0xFF) _cfg->bruteforce.current = 0x00; + } + action = cfg->data.nearby_action.action = _cfg->bruteforce.current; + break; } uint8_t flags; @@ -424,6 +438,10 @@ static void extra_config(Ctx* ctx) { value_index = pp_models_count + 1; } break; + case ProtocolModeBruteforce: + model_name = "Bruteforce"; + value_index = pp_models_count + 1; + break; } variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_text(item, model_name); @@ -486,6 +504,10 @@ static void extra_config(Ctx* ctx) { value_index = na_actions_count + 1; } break; + case ProtocolModeBruteforce: + action_name = "Bruteforce"; + value_index = na_actions_count + 1; + break; } variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_text(item, action_name); @@ -550,6 +572,13 @@ static void pp_model_callback(void* _ctx, uint32_t index) { case pp_models_count + 1: scene_manager_next_scene(ctx->scene_manager, SceneContinuityPpModelCustom); break; + case pp_models_count + 2: + _cfg->mode = ProtocolModeBruteforce; + _cfg->bruteforce.counter = 0; + _cfg->bruteforce.current = cfg->data.proximity_pair.model; + _cfg->bruteforce.size = 2; + scene_manager_previous_scene(ctx->scene_manager); + break; default: _cfg->mode = ProtocolModeValue; cfg->data.proximity_pair.model = pp_models[index - 1].value; @@ -584,6 +613,11 @@ void scene_continuity_pp_model_on_enter(void* _ctx) { selected = pp_models_count + 1; } + submenu_add_item(submenu, "Bruteforce", pp_models_count + 2, pp_model_callback, ctx); + if(_cfg->mode == ProtocolModeBruteforce) { + selected = pp_models_count + 2; + } + submenu_set_selected_item(submenu, selected); view_dispatcher_switch_to_view(ctx->view_dispatcher, ViewSubmenu); @@ -733,6 +767,13 @@ static void na_action_callback(void* _ctx, uint32_t index) { case na_actions_count + 1: scene_manager_next_scene(ctx->scene_manager, SceneContinuityNaActionCustom); break; + case na_actions_count + 2: + _cfg->mode = ProtocolModeBruteforce; + _cfg->bruteforce.counter = 0; + _cfg->bruteforce.current = cfg->data.nearby_action.action; + _cfg->bruteforce.size = 1; + scene_manager_previous_scene(ctx->scene_manager); + break; default: _cfg->mode = ProtocolModeValue; cfg->data.nearby_action.action = na_actions[index - 1].value; @@ -767,6 +808,11 @@ void scene_continuity_na_action_on_enter(void* _ctx) { selected = na_actions_count + 1; } + submenu_add_item(submenu, "Bruteforce", na_actions_count + 2, na_action_callback, ctx); + if(_cfg->mode == ProtocolModeBruteforce) { + selected = na_actions_count + 2; + } + submenu_set_selected_item(submenu, selected); view_dispatcher_switch_to_view(ctx->view_dispatcher, ViewSubmenu); diff --git a/applications/external/ble_spam/protocols/easysetup.c b/applications/external/ble_spam/protocols/easysetup.c index d13083b7d..adece5472 100644 --- a/applications/external/ble_spam/protocols/easysetup.c +++ b/applications/external/ble_spam/protocols/easysetup.c @@ -106,6 +106,13 @@ void make_packet(uint8_t* out_size, uint8_t** out_packet, ProtocolCfg* _cfg) { case ProtocolModeValue: model = cfg->data.buds.model; break; + case ProtocolModeBruteforce: + if(_cfg->bruteforce.counter++ >= 10) { + _cfg->bruteforce.counter = 0; + if(_cfg->bruteforce.current++ >= 0xFFFFFF) _cfg->bruteforce.current = 0x000000; + } + model = cfg->data.buds.model = _cfg->bruteforce.current; + break; } packet[i++] = 27; // Size @@ -153,6 +160,13 @@ void make_packet(uint8_t* out_size, uint8_t** out_packet, ProtocolCfg* _cfg) { case ProtocolModeValue: model = cfg->data.watch.model; break; + case ProtocolModeBruteforce: + if(_cfg->bruteforce.counter++ >= 10) { + _cfg->bruteforce.counter = 0; + if(_cfg->bruteforce.current++ >= 0xFF) _cfg->bruteforce.current = 0x00; + } + model = cfg->data.watch.model = _cfg->bruteforce.current; + break; } packet[i++] = 14; // Size @@ -287,6 +301,10 @@ static void extra_config(Ctx* ctx) { value_index = buds_models_count + 1; } break; + case ProtocolModeBruteforce: + model_name = "Bruteforce"; + value_index = buds_models_count + 1; + break; } variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_text(item, model_name); @@ -319,6 +337,10 @@ static void extra_config(Ctx* ctx) { value_index = watch_models_count + 1; } break; + case ProtocolModeBruteforce: + model_name = "Bruteforce"; + value_index = watch_models_count + 1; + break; } variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_text(item, model_name); @@ -360,6 +382,13 @@ static void buds_model_callback(void* _ctx, uint32_t index) { case buds_models_count + 1: scene_manager_next_scene(ctx->scene_manager, SceneEasysetupBudsModelCustom); break; + case buds_models_count + 2: + _cfg->mode = ProtocolModeBruteforce; + _cfg->bruteforce.counter = 0; + _cfg->bruteforce.current = cfg->data.buds.model; + _cfg->bruteforce.size = 3; + scene_manager_previous_scene(ctx->scene_manager); + break; default: _cfg->mode = ProtocolModeValue; cfg->data.buds.model = buds_models[index - 1].value; @@ -394,6 +423,11 @@ void scene_easysetup_buds_model_on_enter(void* _ctx) { selected = buds_models_count + 1; } + submenu_add_item(submenu, "Bruteforce", buds_models_count + 2, buds_model_callback, ctx); + if(_cfg->mode == ProtocolModeBruteforce) { + selected = buds_models_count + 2; + } + submenu_set_selected_item(submenu, selected); view_dispatcher_switch_to_view(ctx->view_dispatcher, ViewSubmenu); @@ -455,6 +489,13 @@ static void watch_model_callback(void* _ctx, uint32_t index) { case watch_models_count + 1: scene_manager_next_scene(ctx->scene_manager, SceneEasysetupWatchModelCustom); break; + case watch_models_count + 2: + _cfg->mode = ProtocolModeBruteforce; + _cfg->bruteforce.counter = 0; + _cfg->bruteforce.current = cfg->data.watch.model; + _cfg->bruteforce.size = 1; + scene_manager_previous_scene(ctx->scene_manager); + break; default: _cfg->mode = ProtocolModeValue; cfg->data.watch.model = watch_models[index - 1].value; @@ -489,6 +530,11 @@ void scene_easysetup_watch_model_on_enter(void* _ctx) { selected = watch_models_count + 1; } + submenu_add_item(submenu, "Bruteforce", watch_models_count + 2, watch_model_callback, ctx); + if(_cfg->mode == ProtocolModeBruteforce) { + selected = watch_models_count + 2; + } + submenu_set_selected_item(submenu, selected); view_dispatcher_switch_to_view(ctx->view_dispatcher, ViewSubmenu); diff --git a/applications/external/ble_spam/protocols/fastpair.c b/applications/external/ble_spam/protocols/fastpair.c index 9ab904dc6..ef77580f6 100644 --- a/applications/external/ble_spam/protocols/fastpair.c +++ b/applications/external/ble_spam/protocols/fastpair.c @@ -63,6 +63,13 @@ static void make_packet(uint8_t* _size, uint8_t** _packet, ProtocolCfg* _cfg) { case ProtocolModeValue: model = cfg->model; break; + case ProtocolModeBruteforce: + if(_cfg->bruteforce.counter++ >= 10) { + _cfg->bruteforce.counter = 0; + if(_cfg->bruteforce.current++ >= 0xFFFFFF) _cfg->bruteforce.current = 0x000000; + } + model = cfg->model = _cfg->bruteforce.current; + break; } uint8_t size = 14; @@ -154,6 +161,10 @@ static void extra_config(Ctx* ctx) { value_index = models_count + 1; } break; + case ProtocolModeBruteforce: + model_name = "Bruteforce"; + value_index = models_count + 1; + break; } variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_text(item, model_name); @@ -188,6 +199,13 @@ static void model_callback(void* _ctx, uint32_t index) { case models_count + 1: scene_manager_next_scene(ctx->scene_manager, SceneFastpairModelCustom); break; + case models_count + 2: + _cfg->mode = ProtocolModeBruteforce; + _cfg->bruteforce.counter = 0; + _cfg->bruteforce.current = cfg->model; + _cfg->bruteforce.size = 3; + scene_manager_previous_scene(ctx->scene_manager); + break; default: _cfg->mode = ProtocolModeValue; cfg->model = models[index - 1].value; @@ -221,6 +239,11 @@ void scene_fastpair_model_on_enter(void* _ctx) { selected = models_count + 1; } + submenu_add_item(submenu, "Bruteforce", models_count + 2, model_callback, ctx); + if(_cfg->mode == ProtocolModeBruteforce) { + selected = models_count + 2; + } + submenu_set_selected_item(submenu, selected); view_dispatcher_switch_to_view(ctx->view_dispatcher, ViewSubmenu); From 636becc3ba57ea0e48ee677c841d6f19ac393d42 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Wed, 25 Oct 2023 01:10:45 +0100 Subject: [PATCH 09/24] Fix text, add codes by @DiamondRoPlayz @xAstroBoy --- .../external/ble_spam/protocols/easysetup.c | 10 ++++---- .../external/ble_spam/protocols/fastpair.c | 25 ++++++++++++++++--- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/applications/external/ble_spam/protocols/easysetup.c b/applications/external/ble_spam/protocols/easysetup.c index adece5472..eaf755b18 100644 --- a/applications/external/ble_spam/protocols/easysetup.c +++ b/applications/external/ble_spam/protocols/easysetup.c @@ -36,9 +36,9 @@ const struct { const char* name; } watch_models[] = { {0x1A, "Fallback Watch"}, - {0x01, "White Watch4 Classic 44"}, - {0x02, "Black Watch4 Classic 40"}, - {0x03, "White Watch4 Classic 40"}, + {0x01, "White Watch4 Classic 44m"}, + {0x02, "Black Watch4 Classic 40m"}, + {0x03, "White Watch4 Classic 40m"}, {0x04, "Black Watch4 44mm"}, {0x05, "Silver Watch4 44mm"}, {0x06, "Green Watch4 44mm"}, @@ -59,8 +59,8 @@ const struct { {0x1B, "Black Watch6 Pink 40mm"}, {0x1C, "Gold Watch6 Gold 40mm"}, {0x1D, "Silver Watch6 Cyan 44mm"}, - {0x1E, "Black Watch6 Classic 43mm"}, - {0x20, "Green Watch6 Classic 43mm"}, + {0x1E, "Black Watch6 Classic 43m"}, + {0x20, "Green Watch6 Classic 43m"}, }; const uint8_t watch_models_count = COUNT_OF(watch_models); diff --git a/applications/external/ble_spam/protocols/fastpair.c b/applications/external/ble_spam/protocols/fastpair.c index ef77580f6..fcfb75a67 100644 --- a/applications/external/ble_spam/protocols/fastpair.c +++ b/applications/external/ble_spam/protocols/fastpair.c @@ -11,21 +11,40 @@ const struct { // Genuine actions {0x00000C, "Set Up Device"}, - // Genuine devices - {0x00000A, "Anti-Spoofing Test (lmao)"}, + // Genuine non-production/forgotten (good job Google) {0x0001F0, "Bisto CSR8670 Dev Board"}, {0x000047, "Arduino 101"}, + {0x00000A, "Anti-Spoof Test"}, + {0x0A0000, "Anti-Spoof Test 2"}, + {0x00000B, "Google Gphones"}, + {0x0B0000, "Google Gphones 2"}, + {0x0C0000, "Google Gphones 3"}, + {0x00000D, "Test 00000D"}, + {0x000007, "Android Auto"}, + {0x070000, "Android Auto 2"}, + {0x000008, "Foocorp Foophones"}, + {0x080000, "Foocorp Foophones 2"}, + {0x000009, "Test Android TV"}, + {0x090000, "Test Android TV 2"}, + {0x000048, "Fast Pair Headphones"}, + {0x000049, "Fast Pair Headphones 2"}, + + // Genuine devices {0xCD8256, "Bose NC 700"}, + {0x0000F0, "Bose QuietComfort 35 II"}, + {0x821F66, "JBL Flip 6"}, {0xF52494, "JBL Buds Pro"}, {0x718FA4, "JBL Live 300TWS"}, - {0x821F66, "JBL Flip 6"}, + {0x0002F0, "JBL Everest 110GA"}, {0x92BBBD, "Pixel Buds"}, {0x000006, "Google Pixel buds"}, + {0x060000, "Google Pixel buds 2"}, {0xD446A7, "Sony XM5"}, {0x2D7A23, "Sony WF-1000XM4"}, {0x0E30C3, "Razer Hammerhead TWS"}, {0x72EF8D, "Razer Hammerhead TWS X"}, {0x72FB00, "Soundcore Spirit Pro GVA"}, + {0x0003F0, "LG HBS-835S"}, // Custom debug popups {0xD99CA1, "Flipper Zero"}, From 54e7cbce8fbfac93f713e59a62d2d5f2fabfdd73 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Wed, 25 Oct 2023 01:16:48 +0100 Subject: [PATCH 10/24] =?UTF-8?q?Bump=20BLE=20Spam=20version=20(i=20forgor?= =?UTF-8?q?=20=F0=9F=92=80)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- applications/external/ble_spam/application.fam | 2 +- applications/external/ble_spam/ble_spam.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/applications/external/ble_spam/application.fam b/applications/external/ble_spam/application.fam index 532a55cfb..1f04d7f4f 100644 --- a/applications/external/ble_spam/application.fam +++ b/applications/external/ble_spam/application.fam @@ -8,7 +8,7 @@ App( fap_category="Bluetooth", fap_author="@Willy-JL @ECTO-1A @Spooks4576", fap_weburl="https://github.com/Flipper-XFW/Xtreme-Apps/tree/dev/ble_spam", - fap_version="3.3", + fap_version="4.0", fap_description="Flood BLE advertisements to cause spammy and annoying popups/notifications", fap_icon_assets="icons", fap_icon_assets_symbol="ble_spam", diff --git a/applications/external/ble_spam/ble_spam.c b/applications/external/ble_spam/ble_spam.c index cd6c5d215..2f7ab4e8b 100644 --- a/applications/external/ble_spam/ble_spam.c +++ b/applications/external/ble_spam/ble_spam.c @@ -322,7 +322,7 @@ static void draw_callback(Canvas* canvas, void* _ctx) { "App+Spam: \e#WillyJL\e# XFW\n" "Apple+Crash: \e#ECTO-1A\e#\n" "Android+Win: \e#Spooks4576\e#\n" - " Version \e#3.3\e#", + " Version \e#4.0\e#", false); break; default: { From ed364cbffd4477eb8e8d376cfdfdd4b823c1c820 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Wed, 25 Oct 2023 01:19:12 +0100 Subject: [PATCH 11/24] Fix reset menu dialog bug --- .../scenes/xtreme_app_scene_interface_mainmenu_reset.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_mainmenu_reset.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_mainmenu_reset.c index 625cd1f88..c797ff288 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_mainmenu_reset.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_mainmenu_reset.c @@ -37,6 +37,9 @@ bool xtreme_app_scene_interface_mainmenu_reset_on_event(void* context, SceneMana app->require_reboot = true; xtreme_app_apply(app); break; + case DialogExResultLeft: + scene_manager_previous_scene(app->scene_manager); + break; default: break; } From 8eaff22935e8b1499d1fbe78f62d6bf8619d09a1 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Wed, 25 Oct 2023 01:38:22 +0100 Subject: [PATCH 12/24] Simplify bruteforce code --nobuild --- applications/external/ble_spam/ble_spam.c | 16 +++++++++++----- .../external/ble_spam/protocols/_protocols.h | 2 +- .../external/ble_spam/protocols/continuity.c | 16 ++++------------ .../external/ble_spam/protocols/easysetup.c | 16 ++++------------ .../external/ble_spam/protocols/fastpair.c | 8 ++------ 5 files changed, 22 insertions(+), 36 deletions(-) diff --git a/applications/external/ble_spam/ble_spam.c b/applications/external/ble_spam/ble_spam.c index 2f7ab4e8b..229eee0d4 100644 --- a/applications/external/ble_spam/ble_spam.c +++ b/applications/external/ble_spam/ble_spam.c @@ -162,11 +162,17 @@ static int32_t adv_thread(void* _ctx) { uint8_t mac[GAP_MAC_ADDR_SIZE]; Payload* payload = &attacks[state->index].payload; const Protocol* protocol = attacks[state->index].protocol; + ProtocolCfg* _cfg = &payload->cfg; if(!payload->random_mac) furi_hal_random_fill_buf(mac, sizeof(mac)); if(state->ctx.led_indicator) start_blink(state); while(state->advertising) { if(protocol) { + if(_cfg->mode == ProtocolModeBruteforce && _cfg->bruteforce.counter++ >= 10) { + _cfg->bruteforce.counter = 0; + _cfg->bruteforce.value = + (_cfg->bruteforce.value + 1) % (1 << (_cfg->bruteforce.size * 8)); + } protocol->make_packet(&size, &packet, &payload->cfg); } else { protocols[rand() % protocols_count]->make_packet(&size, &packet, NULL); @@ -340,7 +346,7 @@ static void draw_callback(Canvas* canvas, void* _ctx) { sizeof(str), "0x%0*lX", payload->cfg.bruteforce.size * 2, - payload->cfg.bruteforce.current); + payload->cfg.bruteforce.value); } else { snprintf(str, sizeof(str), "%ims", delays[state->delay]); } @@ -431,9 +437,9 @@ static bool input_callback(InputEvent* input, void* _ctx) { if(is_attack) { ProtocolCfg* _cfg = &attacks[state->index].payload.cfg; if(_cfg->mode == ProtocolModeBruteforce) { - _cfg->bruteforce.current = - (_cfg->bruteforce.current + 1) % (1 << (_cfg->bruteforce.size * 8)); _cfg->bruteforce.counter = 0; + _cfg->bruteforce.value = + (_cfg->bruteforce.value + 1) % (1 << (_cfg->bruteforce.size * 8)); } else if(state->delay < COUNT_OF(delays) - 1) { state->delay++; if(advertising) start_blink(state); @@ -444,9 +450,9 @@ static bool input_callback(InputEvent* input, void* _ctx) { if(is_attack) { ProtocolCfg* _cfg = &attacks[state->index].payload.cfg; if(_cfg->mode == ProtocolModeBruteforce) { - _cfg->bruteforce.current = - (_cfg->bruteforce.current - 1) % (1 << (_cfg->bruteforce.size * 8)); _cfg->bruteforce.counter = 0; + _cfg->bruteforce.value = + (_cfg->bruteforce.value - 1) % (1 << (_cfg->bruteforce.size * 8)); } else if(state->delay > 0) { state->delay--; if(advertising) start_blink(state); diff --git a/applications/external/ble_spam/protocols/_protocols.h b/applications/external/ble_spam/protocols/_protocols.h index 5bdc91b3f..a34bb1e98 100644 --- a/applications/external/ble_spam/protocols/_protocols.h +++ b/applications/external/ble_spam/protocols/_protocols.h @@ -15,7 +15,7 @@ struct ProtocolCfg { ProtocolMode mode; struct { uint8_t counter; - uint32_t current; + uint32_t value; uint8_t size; } bruteforce; union { diff --git a/applications/external/ble_spam/protocols/continuity.c b/applications/external/ble_spam/protocols/continuity.c index 2391c81bf..5babbd9cd 100644 --- a/applications/external/ble_spam/protocols/continuity.c +++ b/applications/external/ble_spam/protocols/continuity.c @@ -148,11 +148,7 @@ static void make_packet(uint8_t* _size, uint8_t** _packet, ProtocolCfg* _cfg) { model = cfg->data.proximity_pair.model; break; case ProtocolModeBruteforce: - if(_cfg->bruteforce.counter++ >= 10) { - _cfg->bruteforce.counter = 0; - if(_cfg->bruteforce.current++ >= 0xFFFF) _cfg->bruteforce.current = 0x0000; - } - model = cfg->data.proximity_pair.model = _cfg->bruteforce.current; + model = cfg->data.proximity_pair.model = _cfg->bruteforce.value; break; } @@ -229,11 +225,7 @@ static void make_packet(uint8_t* _size, uint8_t** _packet, ProtocolCfg* _cfg) { action = cfg->data.nearby_action.action; break; case ProtocolModeBruteforce: - if(_cfg->bruteforce.counter++ >= 10) { - _cfg->bruteforce.counter = 0; - if(_cfg->bruteforce.current++ >= 0xFF) _cfg->bruteforce.current = 0x00; - } - action = cfg->data.nearby_action.action = _cfg->bruteforce.current; + action = cfg->data.nearby_action.action = _cfg->bruteforce.value; break; } @@ -575,7 +567,7 @@ static void pp_model_callback(void* _ctx, uint32_t index) { case pp_models_count + 2: _cfg->mode = ProtocolModeBruteforce; _cfg->bruteforce.counter = 0; - _cfg->bruteforce.current = cfg->data.proximity_pair.model; + _cfg->bruteforce.value = cfg->data.proximity_pair.model; _cfg->bruteforce.size = 2; scene_manager_previous_scene(ctx->scene_manager); break; @@ -770,7 +762,7 @@ static void na_action_callback(void* _ctx, uint32_t index) { case na_actions_count + 2: _cfg->mode = ProtocolModeBruteforce; _cfg->bruteforce.counter = 0; - _cfg->bruteforce.current = cfg->data.nearby_action.action; + _cfg->bruteforce.value = cfg->data.nearby_action.action; _cfg->bruteforce.size = 1; scene_manager_previous_scene(ctx->scene_manager); break; diff --git a/applications/external/ble_spam/protocols/easysetup.c b/applications/external/ble_spam/protocols/easysetup.c index eaf755b18..8aff3521c 100644 --- a/applications/external/ble_spam/protocols/easysetup.c +++ b/applications/external/ble_spam/protocols/easysetup.c @@ -107,11 +107,7 @@ void make_packet(uint8_t* out_size, uint8_t** out_packet, ProtocolCfg* _cfg) { model = cfg->data.buds.model; break; case ProtocolModeBruteforce: - if(_cfg->bruteforce.counter++ >= 10) { - _cfg->bruteforce.counter = 0; - if(_cfg->bruteforce.current++ >= 0xFFFFFF) _cfg->bruteforce.current = 0x000000; - } - model = cfg->data.buds.model = _cfg->bruteforce.current; + model = cfg->data.buds.model = _cfg->bruteforce.value; break; } @@ -161,11 +157,7 @@ void make_packet(uint8_t* out_size, uint8_t** out_packet, ProtocolCfg* _cfg) { model = cfg->data.watch.model; break; case ProtocolModeBruteforce: - if(_cfg->bruteforce.counter++ >= 10) { - _cfg->bruteforce.counter = 0; - if(_cfg->bruteforce.current++ >= 0xFF) _cfg->bruteforce.current = 0x00; - } - model = cfg->data.watch.model = _cfg->bruteforce.current; + model = cfg->data.watch.model = _cfg->bruteforce.value; break; } @@ -385,7 +377,7 @@ static void buds_model_callback(void* _ctx, uint32_t index) { case buds_models_count + 2: _cfg->mode = ProtocolModeBruteforce; _cfg->bruteforce.counter = 0; - _cfg->bruteforce.current = cfg->data.buds.model; + _cfg->bruteforce.value = cfg->data.buds.model; _cfg->bruteforce.size = 3; scene_manager_previous_scene(ctx->scene_manager); break; @@ -492,7 +484,7 @@ static void watch_model_callback(void* _ctx, uint32_t index) { case watch_models_count + 2: _cfg->mode = ProtocolModeBruteforce; _cfg->bruteforce.counter = 0; - _cfg->bruteforce.current = cfg->data.watch.model; + _cfg->bruteforce.value = cfg->data.watch.model; _cfg->bruteforce.size = 1; scene_manager_previous_scene(ctx->scene_manager); break; diff --git a/applications/external/ble_spam/protocols/fastpair.c b/applications/external/ble_spam/protocols/fastpair.c index fcfb75a67..e4ab936da 100644 --- a/applications/external/ble_spam/protocols/fastpair.c +++ b/applications/external/ble_spam/protocols/fastpair.c @@ -83,11 +83,7 @@ static void make_packet(uint8_t* _size, uint8_t** _packet, ProtocolCfg* _cfg) { model = cfg->model; break; case ProtocolModeBruteforce: - if(_cfg->bruteforce.counter++ >= 10) { - _cfg->bruteforce.counter = 0; - if(_cfg->bruteforce.current++ >= 0xFFFFFF) _cfg->bruteforce.current = 0x000000; - } - model = cfg->model = _cfg->bruteforce.current; + model = cfg->model = _cfg->bruteforce.value; break; } @@ -221,7 +217,7 @@ static void model_callback(void* _ctx, uint32_t index) { case models_count + 2: _cfg->mode = ProtocolModeBruteforce; _cfg->bruteforce.counter = 0; - _cfg->bruteforce.current = cfg->model; + _cfg->bruteforce.value = cfg->model; _cfg->bruteforce.size = 3; scene_manager_previous_scene(ctx->scene_manager); break; From 1b9ad5be80cf1c14e33a75f21300ab7be322a6a5 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Wed, 25 Oct 2023 05:03:47 +0100 Subject: [PATCH 13/24] Bruteforce mode controls: manual send and delay --- applications/external/ble_spam/ble_spam.c | 97 +++++++++++++++++++---- 1 file changed, 81 insertions(+), 16 deletions(-) diff --git a/applications/external/ble_spam/ble_spam.c b/applications/external/ble_spam/ble_spam.c index 229eee0d4..e77ae4926 100644 --- a/applications/external/ble_spam/ble_spam.c +++ b/applications/external/ble_spam/ble_spam.c @@ -131,8 +131,17 @@ typedef struct { uint8_t delay; FuriThread* thread; int8_t index; + bool ignore_bruteforce; } State; +const NotificationSequence solid_message = { + &message_red_0, + &message_green_255, + &message_blue_255, + &message_do_not_reset, + &message_delay_10, + NULL, +}; NotificationMessage blink_message = { .type = NotificationMessageTypeLedBlinkStart, .data.led_blink.color = LightBlue | LightGreen, @@ -355,14 +364,30 @@ static void draw_callback(Canvas* canvas, void* _ctx) { canvas_draw_icon(canvas, 119, 10, &I_SmallArrowDown_3x5); canvas_set_font(canvas, FontBatteryPercent); - snprintf( - str, - sizeof(str), - "%02i/%02i: %s", - state->index + 1, - ATTACKS_COUNT, - protocol ? protocol->get_name(&payload->cfg) : "Everything AND"); - canvas_draw_str(canvas, 4 - (state->index < 19 ? 1 : 0), 21, str); + if(payload->cfg.mode == ProtocolModeBruteforce) { + canvas_draw_str_aligned(canvas, 62, 22, AlignCenter, AlignBottom, "Bruteforce"); + if(delays[state->delay] < 100) { + snprintf(str, sizeof(str), "%ims>", delays[state->delay]); + } else { + snprintf(str, sizeof(str), "%.1fs>", (double)delays[state->delay] / 1000); + } + uint16_t w = canvas_string_width(canvas, str); + elements_slightly_rounded_box(canvas, 3, 14, 30, 10); + elements_slightly_rounded_box(canvas, 119 - w, 14, 6 + w, 10); + canvas_invert_color(canvas); + canvas_draw_str_aligned(canvas, 5, 22, AlignLeft, AlignBottom, "index + 1, + ATTACKS_COUNT, + protocol ? protocol->get_name(&payload->cfg) : "Everything AND"); + canvas_draw_str(canvas, 4 - (state->index < 19 ? 1 : 0), 22, str); + } canvas_set_font(canvas, FontPrimary); canvas_draw_str(canvas, 4, 33, attack->title); @@ -418,6 +443,7 @@ static bool input_callback(InputEvent* input, void* _ctx) { consumed = true; bool is_attack = state->index >= 0 && state->index <= ATTACKS_COUNT - 1; + ProtocolCfg* _cfg = is_attack ? &attacks[state->index].payload.cfg : NULL; bool advertising = state->advertising; switch(input->key) { @@ -435,7 +461,6 @@ static bool input_callback(InputEvent* input, void* _ctx) { break; case InputKeyUp: if(is_attack) { - ProtocolCfg* _cfg = &attacks[state->index].payload.cfg; if(_cfg->mode == ProtocolModeBruteforce) { _cfg->bruteforce.counter = 0; _cfg->bruteforce.value = @@ -448,7 +473,6 @@ static bool input_callback(InputEvent* input, void* _ctx) { break; case InputKeyDown: if(is_attack) { - ProtocolCfg* _cfg = &attacks[state->index].payload.cfg; if(_cfg->mode == ProtocolModeBruteforce) { _cfg->bruteforce.counter = 0; _cfg->bruteforce.value = @@ -460,15 +484,56 @@ static bool input_callback(InputEvent* input, void* _ctx) { } break; case InputKeyLeft: - if(state->index > PAGE_MIN) { - if(advertising) toggle_adv(state); - state->index--; + if(input->type == InputTypeLong) { + state->ignore_bruteforce = _cfg ? (_cfg->mode != ProtocolModeBruteforce) : true; + } + if(input->type == InputTypeShort || !is_attack || state->ignore_bruteforce || + _cfg->mode != ProtocolModeBruteforce) { + if(state->index > PAGE_MIN) { + if(advertising) toggle_adv(state); + state->index--; + } + } else { + if(!advertising) { + bool resume = furi_hal_bt_is_active(); + furi_hal_bt_stop_advertising(); + Payload* payload = &attacks[state->index].payload; + const Protocol* protocol = attacks[state->index].protocol; + + uint8_t size; + uint8_t* packet; + protocol->make_packet(&size, &packet, &payload->cfg); + furi_hal_bt_custom_adv_set(packet, size); + free(packet); + + uint8_t mac[GAP_MAC_ADDR_SIZE]; + furi_hal_random_fill_buf(mac, sizeof(mac)); + uint16_t delay = delays[state->delay]; + furi_hal_bt_custom_adv_start(delay, delay, 0x00, mac, 0x1F); + if(state->ctx.led_indicator) + notification_message(state->ctx.notification, &solid_message); + furi_delay_ms(10); + furi_hal_bt_custom_adv_stop(); + + if(state->ctx.led_indicator) + notification_message_block(state->ctx.notification, &sequence_reset_rgb); + if(resume) furi_hal_bt_start_advertising(); + } } break; case InputKeyRight: - if(state->index < PAGE_MAX) { - if(advertising) toggle_adv(state); - state->index++; + if(input->type == InputTypeLong) { + state->ignore_bruteforce = _cfg ? (_cfg->mode != ProtocolModeBruteforce) : true; + } + if(input->type == InputTypeShort || !is_attack || state->ignore_bruteforce || + _cfg->mode != ProtocolModeBruteforce) { + if(state->index < PAGE_MAX) { + if(advertising) toggle_adv(state); + state->index++; + } + } else { + state->delay = (state->delay + 1) % COUNT_OF(delays); + if(advertising) start_blink(state); } break; case InputKeyBack: From b12ef9e596099aab66d782e47ab8986d8e4da8fc Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Wed, 25 Oct 2023 05:04:10 +0100 Subject: [PATCH 14/24] Help section for bruteforce --- applications/external/ble_spam/ble_spam.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/applications/external/ble_spam/ble_spam.c b/applications/external/ble_spam/ble_spam.c index e77ae4926..46d74685b 100644 --- a/applications/external/ble_spam/ble_spam.c +++ b/applications/external/ble_spam/ble_spam.c @@ -214,10 +214,11 @@ static void toggle_adv(State* state) { } } -#define PAGE_MIN (-4) +#define PAGE_MIN (-5) #define PAGE_MAX ATTACKS_COUNT enum { - PageHelpApps = PAGE_MIN, + PageHelpBruteforce = PAGE_MIN, + PageHelpApps, PageHelpDelay, PageHelpDistance, PageHelpInfoConfig, @@ -259,6 +260,23 @@ static void draw_callback(Canvas* canvas, void* _ctx) { canvas_draw_str(canvas, 14, 12, "BLE Spam"); switch(state->index) { + case PageHelpBruteforce: + canvas_set_font(canvas, FontBatteryPercent); + canvas_draw_str_aligned(canvas, 124, 12, AlignRight, AlignBottom, "Help"); + elements_text_box( + canvas, + 4, + 16, + 120, + 48, + AlignLeft, + AlignTop, + "\e#Bruteforce\e# cycles codes\n" + "to find popups, hold left and\n" + "right to send manually and\n" + "change delay", + false); + break; case PageHelpApps: canvas_set_font(canvas, FontBatteryPercent); canvas_draw_str_aligned(canvas, 124, 12, AlignRight, AlignBottom, "Help"); From b7d1e12e7faea49a21df7d031060209fc67807b6 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Wed, 25 Oct 2023 05:04:19 +0100 Subject: [PATCH 15/24] BLE Spam 4.1 --- applications/external/ble_spam/application.fam | 2 +- applications/external/ble_spam/ble_spam.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/applications/external/ble_spam/application.fam b/applications/external/ble_spam/application.fam index 1f04d7f4f..d19322fd9 100644 --- a/applications/external/ble_spam/application.fam +++ b/applications/external/ble_spam/application.fam @@ -8,7 +8,7 @@ App( fap_category="Bluetooth", fap_author="@Willy-JL @ECTO-1A @Spooks4576", fap_weburl="https://github.com/Flipper-XFW/Xtreme-Apps/tree/dev/ble_spam", - fap_version="4.0", + fap_version="4.1", fap_description="Flood BLE advertisements to cause spammy and annoying popups/notifications", fap_icon_assets="icons", fap_icon_assets_symbol="ble_spam", diff --git a/applications/external/ble_spam/ble_spam.c b/applications/external/ble_spam/ble_spam.c index 46d74685b..9d7af8467 100644 --- a/applications/external/ble_spam/ble_spam.c +++ b/applications/external/ble_spam/ble_spam.c @@ -355,7 +355,7 @@ static void draw_callback(Canvas* canvas, void* _ctx) { "App+Spam: \e#WillyJL\e# XFW\n" "Apple+Crash: \e#ECTO-1A\e#\n" "Android+Win: \e#Spooks4576\e#\n" - " Version \e#4.0\e#", + " Version \e#4.1\e#", false); break; default: { From 059324b2986120504fb31d8048ed27003812007a Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Wed, 25 Oct 2023 05:06:36 +0100 Subject: [PATCH 16/24] smh --- applications/external/ble_spam/ble_spam.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/external/ble_spam/ble_spam.c b/applications/external/ble_spam/ble_spam.c index 9d7af8467..72d7040b3 100644 --- a/applications/external/ble_spam/ble_spam.c +++ b/applications/external/ble_spam/ble_spam.c @@ -383,7 +383,7 @@ static void draw_callback(Canvas* canvas, void* _ctx) { canvas_set_font(canvas, FontBatteryPercent); if(payload->cfg.mode == ProtocolModeBruteforce) { - canvas_draw_str_aligned(canvas, 62, 22, AlignCenter, AlignBottom, "Bruteforce"); + canvas_draw_str_aligned(canvas, 64, 22, AlignCenter, AlignBottom, "Bruteforce"); if(delays[state->delay] < 100) { snprintf(str, sizeof(str), "%ims>", delays[state->delay]); } else { From e4309dcb8a726c063f714413279f13913b7c9342 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Wed, 25 Oct 2023 05:30:04 +0100 Subject: [PATCH 17/24] Dont repeat delay cycling --nobuild --- applications/external/ble_spam/ble_spam.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/external/ble_spam/ble_spam.c b/applications/external/ble_spam/ble_spam.c index 72d7040b3..6e1a8cb24 100644 --- a/applications/external/ble_spam/ble_spam.c +++ b/applications/external/ble_spam/ble_spam.c @@ -549,7 +549,7 @@ static bool input_callback(InputEvent* input, void* _ctx) { if(advertising) toggle_adv(state); state->index++; } - } else { + } else if(input->type == InputTypeLong) { state->delay = (state->delay + 1) % COUNT_OF(delays); if(advertising) start_blink(state); } From f474e8c7caf5b0c87995b654ec7b156109a7306c Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Wed, 25 Oct 2023 21:43:26 +0100 Subject: [PATCH 18/24] Refactor payload config, dont need 2 structs --- applications/external/ble_spam/ble_spam.c | 65 ++++--- .../external/ble_spam/protocols/_base.h | 8 +- .../external/ble_spam/protocols/_protocols.h | 20 +- .../external/ble_spam/protocols/continuity.c | 184 +++++++++--------- .../external/ble_spam/protocols/easysetup.c | 152 +++++++-------- .../external/ble_spam/protocols/fastpair.c | 82 ++++---- .../external/ble_spam/protocols/swiftpair.c | 36 ++-- .../external/ble_spam/scenes/config.c | 2 +- 8 files changed, 273 insertions(+), 276 deletions(-) diff --git a/applications/external/ble_spam/ble_spam.c b/applications/external/ble_spam/ble_spam.c index 6e1a8cb24..7350edbea 100644 --- a/applications/external/ble_spam/ble_spam.c +++ b/applications/external/ble_spam/ble_spam.c @@ -30,7 +30,7 @@ static Attack attacks[] = { .payload = { .random_mac = false, - .cfg.specific.continuity = + .cfg.continuity = { .type = ContinuityTypeCustomCrash, .data = {}, @@ -44,7 +44,7 @@ static Attack attacks[] = { .payload = { .random_mac = false, - .cfg.specific.continuity = + .cfg.continuity = { .type = ContinuityTypeNearbyAction, .data = {}, @@ -58,7 +58,7 @@ static Attack attacks[] = { .payload = { .random_mac = false, - .cfg.specific.continuity = + .cfg.continuity = { .type = ContinuityTypeProximityPair, .data = {}, @@ -72,7 +72,7 @@ static Attack attacks[] = { .payload = { .random_mac = true, - .cfg.specific.fastpair = {}, + .cfg.fastpair = {}, }, }, { @@ -82,7 +82,7 @@ static Attack attacks[] = { .payload = { .random_mac = true, - .cfg.specific.easysetup = + .cfg.easysetup = { .type = EasysetupTypeBuds, .data = {}, @@ -96,7 +96,7 @@ static Attack attacks[] = { .payload = { .random_mac = true, - .cfg.specific.easysetup = + .cfg.easysetup = { .type = EasysetupTypeWatch, .data = {}, @@ -110,7 +110,7 @@ static Attack attacks[] = { .payload = { .random_mac = true, - .cfg.specific.swiftpair = {}, + .cfg.swiftpair = {}, }, }, }; @@ -171,18 +171,17 @@ static int32_t adv_thread(void* _ctx) { uint8_t mac[GAP_MAC_ADDR_SIZE]; Payload* payload = &attacks[state->index].payload; const Protocol* protocol = attacks[state->index].protocol; - ProtocolCfg* _cfg = &payload->cfg; if(!payload->random_mac) furi_hal_random_fill_buf(mac, sizeof(mac)); if(state->ctx.led_indicator) start_blink(state); while(state->advertising) { if(protocol) { - if(_cfg->mode == ProtocolModeBruteforce && _cfg->bruteforce.counter++ >= 10) { - _cfg->bruteforce.counter = 0; - _cfg->bruteforce.value = - (_cfg->bruteforce.value + 1) % (1 << (_cfg->bruteforce.size * 8)); + if(payload->mode == PayloadModeBruteforce && payload->bruteforce.counter++ >= 10) { + payload->bruteforce.counter = 0; + payload->bruteforce.value = + (payload->bruteforce.value + 1) % (1 << (payload->bruteforce.size * 8)); } - protocol->make_packet(&size, &packet, &payload->cfg); + protocol->make_packet(&size, &packet, payload); } else { protocols[rand() % protocols_count]->make_packet(&size, &packet, NULL); } @@ -367,13 +366,13 @@ static void draw_callback(Canvas* canvas, void* _ctx) { char str[32]; canvas_set_font(canvas, FontBatteryPercent); - if(payload->cfg.mode == ProtocolModeBruteforce) { + if(payload->mode == PayloadModeBruteforce) { snprintf( str, sizeof(str), "0x%0*lX", - payload->cfg.bruteforce.size * 2, - payload->cfg.bruteforce.value); + payload->bruteforce.size * 2, + payload->bruteforce.value); } else { snprintf(str, sizeof(str), "%ims", delays[state->delay]); } @@ -382,7 +381,7 @@ static void draw_callback(Canvas* canvas, void* _ctx) { canvas_draw_icon(canvas, 119, 10, &I_SmallArrowDown_3x5); canvas_set_font(canvas, FontBatteryPercent); - if(payload->cfg.mode == ProtocolModeBruteforce) { + if(payload->mode == PayloadModeBruteforce) { canvas_draw_str_aligned(canvas, 64, 22, AlignCenter, AlignBottom, "Bruteforce"); if(delays[state->delay] < 100) { snprintf(str, sizeof(str), "%ims>", delays[state->delay]); @@ -403,7 +402,7 @@ static void draw_callback(Canvas* canvas, void* _ctx) { "%02i/%02i: %s", state->index + 1, ATTACKS_COUNT, - protocol ? protocol->get_name(&payload->cfg) : "Everything AND"); + protocol ? protocol->get_name(payload) : "Everything AND"); canvas_draw_str(canvas, 4 - (state->index < 19 ? 1 : 0), 22, str); } @@ -461,7 +460,7 @@ static bool input_callback(InputEvent* input, void* _ctx) { consumed = true; bool is_attack = state->index >= 0 && state->index <= ATTACKS_COUNT - 1; - ProtocolCfg* _cfg = is_attack ? &attacks[state->index].payload.cfg : NULL; + Payload* payload = is_attack ? &attacks[state->index].payload : NULL; bool advertising = state->advertising; switch(input->key) { @@ -479,10 +478,10 @@ static bool input_callback(InputEvent* input, void* _ctx) { break; case InputKeyUp: if(is_attack) { - if(_cfg->mode == ProtocolModeBruteforce) { - _cfg->bruteforce.counter = 0; - _cfg->bruteforce.value = - (_cfg->bruteforce.value + 1) % (1 << (_cfg->bruteforce.size * 8)); + if(payload->mode == PayloadModeBruteforce) { + payload->bruteforce.counter = 0; + payload->bruteforce.value = + (payload->bruteforce.value + 1) % (1 << (payload->bruteforce.size * 8)); } else if(state->delay < COUNT_OF(delays) - 1) { state->delay++; if(advertising) start_blink(state); @@ -491,10 +490,10 @@ static bool input_callback(InputEvent* input, void* _ctx) { break; case InputKeyDown: if(is_attack) { - if(_cfg->mode == ProtocolModeBruteforce) { - _cfg->bruteforce.counter = 0; - _cfg->bruteforce.value = - (_cfg->bruteforce.value - 1) % (1 << (_cfg->bruteforce.size * 8)); + if(payload->mode == PayloadModeBruteforce) { + payload->bruteforce.counter = 0; + payload->bruteforce.value = + (payload->bruteforce.value - 1) % (1 << (payload->bruteforce.size * 8)); } else if(state->delay > 0) { state->delay--; if(advertising) start_blink(state); @@ -503,10 +502,11 @@ static bool input_callback(InputEvent* input, void* _ctx) { break; case InputKeyLeft: if(input->type == InputTypeLong) { - state->ignore_bruteforce = _cfg ? (_cfg->mode != ProtocolModeBruteforce) : true; + state->ignore_bruteforce = payload ? (payload->mode != PayloadModeBruteforce) : + true; } if(input->type == InputTypeShort || !is_attack || state->ignore_bruteforce || - _cfg->mode != ProtocolModeBruteforce) { + payload->mode != PayloadModeBruteforce) { if(state->index > PAGE_MIN) { if(advertising) toggle_adv(state); state->index--; @@ -520,7 +520,7 @@ static bool input_callback(InputEvent* input, void* _ctx) { uint8_t size; uint8_t* packet; - protocol->make_packet(&size, &packet, &payload->cfg); + protocol->make_packet(&size, &packet, payload); furi_hal_bt_custom_adv_set(packet, size); free(packet); @@ -541,10 +541,11 @@ static bool input_callback(InputEvent* input, void* _ctx) { break; case InputKeyRight: if(input->type == InputTypeLong) { - state->ignore_bruteforce = _cfg ? (_cfg->mode != ProtocolModeBruteforce) : true; + state->ignore_bruteforce = payload ? (payload->mode != PayloadModeBruteforce) : + true; } if(input->type == InputTypeShort || !is_attack || state->ignore_bruteforce || - _cfg->mode != ProtocolModeBruteforce) { + payload->mode != PayloadModeBruteforce) { if(state->index < PAGE_MAX) { if(advertising) toggle_adv(state); state->index++; diff --git a/applications/external/ble_spam/protocols/_base.h b/applications/external/ble_spam/protocols/_base.h index 1456b1c4a..c2cf4b54f 100644 --- a/applications/external/ble_spam/protocols/_base.h +++ b/applications/external/ble_spam/protocols/_base.h @@ -10,12 +10,12 @@ #include #include "../ble_spam.h" -typedef struct ProtocolCfg ProtocolCfg; +typedef struct Payload Payload; typedef struct { const Icon* icon; - const char* (*get_name)(const ProtocolCfg* _cfg); - void (*make_packet)(uint8_t* _size, uint8_t** _packet, ProtocolCfg* _cfg); + const char* (*get_name)(const Payload* payload); + void (*make_packet)(uint8_t* _size, uint8_t** _packet, Payload* payload); void (*extra_config)(Ctx* ctx); - uint8_t (*config_count)(const ProtocolCfg* _cfg); + uint8_t (*config_count)(const Payload* payload); } Protocol; diff --git a/applications/external/ble_spam/protocols/_protocols.h b/applications/external/ble_spam/protocols/_protocols.h index a34bb1e98..f04ae90dc 100644 --- a/applications/external/ble_spam/protocols/_protocols.h +++ b/applications/external/ble_spam/protocols/_protocols.h @@ -6,13 +6,14 @@ #include "swiftpair.h" typedef enum { - ProtocolModeRandom, - ProtocolModeValue, - ProtocolModeBruteforce, -} ProtocolMode; + PayloadModeRandom, + PayloadModeValue, + PayloadModeBruteforce, +} PayloadMode; -struct ProtocolCfg { - ProtocolMode mode; +struct Payload { + bool random_mac; + PayloadMode mode; struct { uint8_t counter; uint32_t value; @@ -23,18 +24,13 @@ struct ProtocolCfg { FastpairCfg fastpair; EasysetupCfg easysetup; SwiftpairCfg swiftpair; - } specific; + } cfg; }; extern const Protocol* protocols[]; extern const size_t protocols_count; -typedef struct { - bool random_mac; - ProtocolCfg cfg; -} Payload; - struct Attack { const char* title; const char* text; diff --git a/applications/external/ble_spam/protocols/continuity.c b/applications/external/ble_spam/protocols/continuity.c index 5babbd9cd..5f46ec3a5 100644 --- a/applications/external/ble_spam/protocols/continuity.c +++ b/applications/external/ble_spam/protocols/continuity.c @@ -71,8 +71,8 @@ static const char* type_names[ContinuityTypeCOUNT] = { [ContinuityTypeNearbyInfo] = "Nearby Info", [ContinuityTypeCustomCrash] = "Continuity Custom", }; -static const char* get_name(const ProtocolCfg* _cfg) { - const ContinuityCfg* cfg = &_cfg->specific.continuity; +static const char* get_name(const Payload* payload) { + const ContinuityCfg* cfg = &payload->cfg.continuity; return type_names[cfg->type]; } @@ -87,8 +87,8 @@ static uint8_t packet_sizes[ContinuityTypeCOUNT] = { [ContinuityTypeNearbyInfo] = HEADER_LEN + 5, [ContinuityTypeCustomCrash] = HEADER_LEN + 11, }; -static void make_packet(uint8_t* _size, uint8_t** _packet, ProtocolCfg* _cfg) { - ContinuityCfg* cfg = _cfg ? &_cfg->specific.continuity : NULL; +static void make_packet(uint8_t* _size, uint8_t** _packet, Payload* payload) { + ContinuityCfg* cfg = payload ? &payload->cfg.continuity : NULL; ContinuityType type; if(cfg && cfg->type != 0x00) { @@ -139,16 +139,16 @@ static void make_packet(uint8_t* _size, uint8_t** _packet, ProtocolCfg* _cfg) { case ContinuityTypeProximityPair: { uint16_t model; - switch(cfg ? _cfg->mode : ProtocolModeRandom) { - case ProtocolModeRandom: + switch(payload ? payload->mode : PayloadModeRandom) { + case PayloadModeRandom: default: model = pp_models[rand() % pp_models_count].value; break; - case ProtocolModeValue: + case PayloadModeValue: model = cfg->data.proximity_pair.model; break; - case ProtocolModeBruteforce: - model = cfg->data.proximity_pair.model = _cfg->bruteforce.value; + case PayloadModeBruteforce: + model = cfg->data.proximity_pair.model = payload->bruteforce.value; break; } @@ -216,16 +216,16 @@ static void make_packet(uint8_t* _size, uint8_t** _packet, ProtocolCfg* _cfg) { case ContinuityTypeNearbyAction: { uint8_t action; - switch(cfg ? _cfg->mode : ProtocolModeRandom) { - case ProtocolModeRandom: + switch(payload ? payload->mode : PayloadModeRandom) { + case PayloadModeRandom: default: action = na_actions[rand() % na_actions_count].value; break; - case ProtocolModeValue: + case PayloadModeValue: action = cfg->data.nearby_action.action; break; - case ProtocolModeBruteforce: - action = cfg->data.nearby_action.action = _cfg->bruteforce.value; + case PayloadModeBruteforce: + action = cfg->data.nearby_action.action = payload->bruteforce.value; break; } @@ -307,8 +307,8 @@ enum { }; static void config_callback(void* _ctx, uint32_t index) { Ctx* ctx = _ctx; - ProtocolCfg* _cfg = &ctx->attack->payload.cfg; - ContinuityCfg* cfg = &_cfg->specific.continuity; + Payload* payload = &ctx->attack->payload; + ContinuityCfg* cfg = &payload->cfg.continuity; scene_manager_set_scene_state(ctx->scene_manager, SceneConfig, index); switch(cfg->type) { case ContinuityTypeProximityPair: { @@ -356,22 +356,22 @@ static void config_callback(void* _ctx, uint32_t index) { } } static void pp_model_changed(VariableItem* item) { - ProtocolCfg* _cfg = variable_item_get_context(item); - ContinuityCfg* cfg = &_cfg->specific.continuity; + Payload* payload = variable_item_get_context(item); + ContinuityCfg* cfg = &payload->cfg.continuity; uint8_t index = variable_item_get_current_value_index(item); if(index) { index--; - _cfg->mode = ProtocolModeValue; + payload->mode = PayloadModeValue; cfg->data.proximity_pair.model = pp_models[index].value; variable_item_set_current_value_text(item, pp_models[index].name); } else { - _cfg->mode = ProtocolModeRandom; + payload->mode = PayloadModeRandom; variable_item_set_current_value_text(item, "Random"); } } static void pp_prefix_changed(VariableItem* item) { - ProtocolCfg* _cfg = variable_item_get_context(item); - ContinuityCfg* cfg = &_cfg->specific.continuity; + Payload* payload = variable_item_get_context(item); + ContinuityCfg* cfg = &payload->cfg.continuity; uint8_t index = variable_item_get_current_value_index(item); if(index) { index--; @@ -383,22 +383,22 @@ static void pp_prefix_changed(VariableItem* item) { } } static void na_action_changed(VariableItem* item) { - ProtocolCfg* _cfg = variable_item_get_context(item); - ContinuityCfg* cfg = &_cfg->specific.continuity; + Payload* payload = variable_item_get_context(item); + ContinuityCfg* cfg = &payload->cfg.continuity; uint8_t index = variable_item_get_current_value_index(item); if(index) { index--; - _cfg->mode = ProtocolModeValue; + payload->mode = PayloadModeValue; cfg->data.nearby_action.action = na_actions[index].value; variable_item_set_current_value_text(item, na_actions[index].name); } else { - _cfg->mode = ProtocolModeRandom; + payload->mode = PayloadModeRandom; variable_item_set_current_value_text(item, "Random"); } } static void extra_config(Ctx* ctx) { - ProtocolCfg* _cfg = &ctx->attack->payload.cfg; - ContinuityCfg* cfg = &_cfg->specific.continuity; + Payload* payload = &ctx->attack->payload; + ContinuityCfg* cfg = &payload->cfg.continuity; VariableItemList* list = ctx->variable_item_list; VariableItem* item; size_t value_index; @@ -406,16 +406,16 @@ static void extra_config(Ctx* ctx) { switch(cfg->type) { case ContinuityTypeProximityPair: { item = variable_item_list_add( - list, "Model Code", pp_models_count + 1, pp_model_changed, _cfg); + list, "Model Code", pp_models_count + 1, pp_model_changed, payload); const char* model_name = NULL; char model_name_buf[5]; - switch(_cfg->mode) { - case ProtocolModeRandom: + switch(payload->mode) { + case PayloadModeRandom: default: model_name = "Random"; value_index = 0; break; - case ProtocolModeValue: + case PayloadModeValue: for(uint8_t i = 0; i < pp_models_count; i++) { if(cfg->data.proximity_pair.model == pp_models[i].value) { model_name = pp_models[i].name; @@ -430,7 +430,7 @@ static void extra_config(Ctx* ctx) { value_index = pp_models_count + 1; } break; - case ProtocolModeBruteforce: + case PayloadModeBruteforce: model_name = "Bruteforce"; value_index = pp_models_count + 1; break; @@ -438,8 +438,8 @@ static void extra_config(Ctx* ctx) { variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_text(item, model_name); - item = - variable_item_list_add(list, "Prefix", pp_prefixes_count + 1, pp_prefix_changed, _cfg); + item = variable_item_list_add( + list, "Prefix", pp_prefixes_count + 1, pp_prefix_changed, payload); const char* prefix_name = NULL; char prefix_name_buf[3]; if(cfg->data.proximity_pair.prefix == 0x00) { @@ -469,16 +469,16 @@ static void extra_config(Ctx* ctx) { } case ContinuityTypeNearbyAction: { item = variable_item_list_add( - list, "Action Type", na_actions_count + 1, na_action_changed, _cfg); + list, "Action Type", na_actions_count + 1, na_action_changed, payload); const char* action_name = NULL; char action_name_buf[3]; - switch(_cfg->mode) { - case ProtocolModeRandom: + switch(payload->mode) { + case PayloadModeRandom: default: action_name = "Random"; value_index = 0; break; - case ProtocolModeValue: + case PayloadModeValue: for(uint8_t i = 0; i < na_actions_count; i++) { if(cfg->data.nearby_action.action == na_actions[i].value) { action_name = na_actions[i].name; @@ -496,7 +496,7 @@ static void extra_config(Ctx* ctx) { value_index = na_actions_count + 1; } break; - case ProtocolModeBruteforce: + case PayloadModeBruteforce: action_name = "Bruteforce"; value_index = na_actions_count + 1; break; @@ -539,8 +539,8 @@ static uint8_t config_counts[ContinuityTypeCOUNT] = { [ContinuityTypeNearbyInfo] = 0, [ContinuityTypeCustomCrash] = ConfigCcCOUNT - ConfigExtraStart - 1, }; -static uint8_t config_count(const ProtocolCfg* _cfg) { - const ContinuityCfg* cfg = &_cfg->specific.continuity; +static uint8_t config_count(const Payload* payload) { + const ContinuityCfg* cfg = &payload->cfg.continuity; return config_counts[cfg->type]; } @@ -554,25 +554,25 @@ const Protocol protocol_continuity = { static void pp_model_callback(void* _ctx, uint32_t index) { Ctx* ctx = _ctx; - ProtocolCfg* _cfg = &ctx->attack->payload.cfg; - ContinuityCfg* cfg = &_cfg->specific.continuity; + Payload* payload = &ctx->attack->payload; + ContinuityCfg* cfg = &payload->cfg.continuity; switch(index) { case 0: - _cfg->mode = ProtocolModeRandom; + payload->mode = PayloadModeRandom; scene_manager_previous_scene(ctx->scene_manager); break; case pp_models_count + 1: scene_manager_next_scene(ctx->scene_manager, SceneContinuityPpModelCustom); break; case pp_models_count + 2: - _cfg->mode = ProtocolModeBruteforce; - _cfg->bruteforce.counter = 0; - _cfg->bruteforce.value = cfg->data.proximity_pair.model; - _cfg->bruteforce.size = 2; + payload->mode = PayloadModeBruteforce; + payload->bruteforce.counter = 0; + payload->bruteforce.value = cfg->data.proximity_pair.model; + payload->bruteforce.size = 2; scene_manager_previous_scene(ctx->scene_manager); break; default: - _cfg->mode = ProtocolModeValue; + payload->mode = PayloadModeValue; cfg->data.proximity_pair.model = pp_models[index - 1].value; scene_manager_previous_scene(ctx->scene_manager); break; @@ -580,33 +580,33 @@ static void pp_model_callback(void* _ctx, uint32_t index) { } void scene_continuity_pp_model_on_enter(void* _ctx) { Ctx* ctx = _ctx; - ProtocolCfg* _cfg = &ctx->attack->payload.cfg; - ContinuityCfg* cfg = &_cfg->specific.continuity; + Payload* payload = &ctx->attack->payload; + ContinuityCfg* cfg = &payload->cfg.continuity; Submenu* submenu = ctx->submenu; uint32_t selected = 0; submenu_reset(submenu); submenu_add_item(submenu, "Random", 0, pp_model_callback, ctx); - if(_cfg->mode == ProtocolModeRandom) { + if(payload->mode == PayloadModeRandom) { selected = 0; } bool found = false; for(uint8_t i = 0; i < pp_models_count; i++) { submenu_add_item(submenu, pp_models[i].name, i + 1, pp_model_callback, ctx); - if(!found && _cfg->mode == ProtocolModeValue && + if(!found && payload->mode == PayloadModeValue && cfg->data.proximity_pair.model == pp_models[i].value) { found = true; selected = i + 1; } } submenu_add_item(submenu, "Custom", pp_models_count + 1, pp_model_callback, ctx); - if(!found && _cfg->mode == ProtocolModeValue) { + if(!found && payload->mode == PayloadModeValue) { selected = pp_models_count + 1; } submenu_add_item(submenu, "Bruteforce", pp_models_count + 2, pp_model_callback, ctx); - if(_cfg->mode == ProtocolModeBruteforce) { + if(payload->mode == PayloadModeBruteforce) { selected = pp_models_count + 2; } @@ -625,17 +625,17 @@ void scene_continuity_pp_model_on_exit(void* _ctx) { static void pp_model_custom_callback(void* _ctx) { Ctx* ctx = _ctx; - ProtocolCfg* _cfg = &ctx->attack->payload.cfg; - ContinuityCfg* cfg = &_cfg->specific.continuity; - _cfg->mode = ProtocolModeValue; + Payload* payload = &ctx->attack->payload; + ContinuityCfg* cfg = &payload->cfg.continuity; + payload->mode = PayloadModeValue; cfg->data.proximity_pair.model = (ctx->byte_store[0] << 0x08) + (ctx->byte_store[1] << 0x00); scene_manager_previous_scene(ctx->scene_manager); scene_manager_previous_scene(ctx->scene_manager); } void scene_continuity_pp_model_custom_on_enter(void* _ctx) { Ctx* ctx = _ctx; - ProtocolCfg* _cfg = &ctx->attack->payload.cfg; - ContinuityCfg* cfg = &_cfg->specific.continuity; + Payload* payload = &ctx->attack->payload; + ContinuityCfg* cfg = &payload->cfg.continuity; ByteInput* byte_input = ctx->byte_input; byte_input_set_header_text(byte_input, "Enter custom Model Code"); @@ -659,8 +659,8 @@ void scene_continuity_pp_model_custom_on_exit(void* _ctx) { static void pp_prefix_callback(void* _ctx, uint32_t index) { Ctx* ctx = _ctx; - ProtocolCfg* _cfg = &ctx->attack->payload.cfg; - ContinuityCfg* cfg = &_cfg->specific.continuity; + Payload* payload = &ctx->attack->payload; + ContinuityCfg* cfg = &payload->cfg.continuity; switch(index) { case 0: cfg->data.proximity_pair.prefix = 0x00; @@ -677,8 +677,8 @@ static void pp_prefix_callback(void* _ctx, uint32_t index) { } void scene_continuity_pp_prefix_on_enter(void* _ctx) { Ctx* ctx = _ctx; - ProtocolCfg* _cfg = &ctx->attack->payload.cfg; - ContinuityCfg* cfg = &_cfg->specific.continuity; + Payload* payload = &ctx->attack->payload; + ContinuityCfg* cfg = &payload->cfg.continuity; Submenu* submenu = ctx->submenu; uint32_t selected = 0; bool found = false; @@ -717,16 +717,16 @@ void scene_continuity_pp_prefix_on_exit(void* _ctx) { static void pp_prefix_custom_callback(void* _ctx) { Ctx* ctx = _ctx; - ProtocolCfg* _cfg = &ctx->attack->payload.cfg; - ContinuityCfg* cfg = &_cfg->specific.continuity; + Payload* payload = &ctx->attack->payload; + ContinuityCfg* cfg = &payload->cfg.continuity; cfg->data.proximity_pair.prefix = (ctx->byte_store[0] << 0x00); scene_manager_previous_scene(ctx->scene_manager); scene_manager_previous_scene(ctx->scene_manager); } void scene_continuity_pp_prefix_custom_on_enter(void* _ctx) { Ctx* ctx = _ctx; - ProtocolCfg* _cfg = &ctx->attack->payload.cfg; - ContinuityCfg* cfg = &_cfg->specific.continuity; + Payload* payload = &ctx->attack->payload; + ContinuityCfg* cfg = &payload->cfg.continuity; ByteInput* byte_input = ctx->byte_input; byte_input_set_header_text(byte_input, "Enter custom Prefix"); @@ -749,25 +749,25 @@ void scene_continuity_pp_prefix_custom_on_exit(void* _ctx) { static void na_action_callback(void* _ctx, uint32_t index) { Ctx* ctx = _ctx; - ProtocolCfg* _cfg = &ctx->attack->payload.cfg; - ContinuityCfg* cfg = &_cfg->specific.continuity; + Payload* payload = &ctx->attack->payload; + ContinuityCfg* cfg = &payload->cfg.continuity; switch(index) { case 0: - _cfg->mode = ProtocolModeRandom; + payload->mode = PayloadModeRandom; scene_manager_previous_scene(ctx->scene_manager); break; case na_actions_count + 1: scene_manager_next_scene(ctx->scene_manager, SceneContinuityNaActionCustom); break; case na_actions_count + 2: - _cfg->mode = ProtocolModeBruteforce; - _cfg->bruteforce.counter = 0; - _cfg->bruteforce.value = cfg->data.nearby_action.action; - _cfg->bruteforce.size = 1; + payload->mode = PayloadModeBruteforce; + payload->bruteforce.counter = 0; + payload->bruteforce.value = cfg->data.nearby_action.action; + payload->bruteforce.size = 1; scene_manager_previous_scene(ctx->scene_manager); break; default: - _cfg->mode = ProtocolModeValue; + payload->mode = PayloadModeValue; cfg->data.nearby_action.action = na_actions[index - 1].value; scene_manager_previous_scene(ctx->scene_manager); break; @@ -775,33 +775,33 @@ static void na_action_callback(void* _ctx, uint32_t index) { } void scene_continuity_na_action_on_enter(void* _ctx) { Ctx* ctx = _ctx; - ProtocolCfg* _cfg = &ctx->attack->payload.cfg; - ContinuityCfg* cfg = &_cfg->specific.continuity; + Payload* payload = &ctx->attack->payload; + ContinuityCfg* cfg = &payload->cfg.continuity; Submenu* submenu = ctx->submenu; uint32_t selected = 0; submenu_reset(submenu); submenu_add_item(submenu, "Random", 0, na_action_callback, ctx); - if(_cfg->mode == ProtocolModeRandom) { + if(payload->mode == PayloadModeRandom) { selected = 0; } bool found = false; for(uint8_t i = 0; i < na_actions_count; i++) { submenu_add_item(submenu, na_actions[i].name, i + 1, na_action_callback, ctx); - if(!found && _cfg->mode == ProtocolModeValue && + if(!found && payload->mode == PayloadModeValue && cfg->data.nearby_action.action == na_actions[i].value) { found = true; selected = i + 1; } } submenu_add_item(submenu, "Custom", na_actions_count + 1, na_action_callback, ctx); - if(!found && _cfg->mode == ProtocolModeValue) { + if(!found && payload->mode == PayloadModeValue) { selected = na_actions_count + 1; } submenu_add_item(submenu, "Bruteforce", na_actions_count + 2, na_action_callback, ctx); - if(_cfg->mode == ProtocolModeBruteforce) { + if(payload->mode == PayloadModeBruteforce) { selected = na_actions_count + 2; } @@ -820,17 +820,17 @@ void scene_continuity_na_action_on_exit(void* _ctx) { static void na_action_custom_callback(void* _ctx) { Ctx* ctx = _ctx; - ProtocolCfg* _cfg = &ctx->attack->payload.cfg; - ContinuityCfg* cfg = &_cfg->specific.continuity; - _cfg->mode = ProtocolModeValue; + Payload* payload = &ctx->attack->payload; + ContinuityCfg* cfg = &payload->cfg.continuity; + payload->mode = PayloadModeValue; cfg->data.nearby_action.action = (ctx->byte_store[0] << 0x00); scene_manager_previous_scene(ctx->scene_manager); scene_manager_previous_scene(ctx->scene_manager); } void scene_continuity_na_action_custom_on_enter(void* _ctx) { Ctx* ctx = _ctx; - ProtocolCfg* _cfg = &ctx->attack->payload.cfg; - ContinuityCfg* cfg = &_cfg->specific.continuity; + Payload* payload = &ctx->attack->payload; + ContinuityCfg* cfg = &payload->cfg.continuity; ByteInput* byte_input = ctx->byte_input; byte_input_set_header_text(byte_input, "Enter custom Action Type"); @@ -857,8 +857,8 @@ static void na_flags_callback(void* _ctx) { } void scene_continuity_na_flags_on_enter(void* _ctx) { Ctx* ctx = _ctx; - ProtocolCfg* _cfg = &ctx->attack->payload.cfg; - ContinuityCfg* cfg = &_cfg->specific.continuity; + Payload* payload = &ctx->attack->payload; + ContinuityCfg* cfg = &payload->cfg.continuity; ByteInput* byte_input = ctx->byte_input; byte_input_set_header_text(byte_input, "Press back for automatic"); @@ -879,7 +879,7 @@ bool scene_continuity_na_flags_on_event(void* _ctx, SceneManagerEvent event) { } void scene_continuity_na_flags_on_exit(void* _ctx) { Ctx* ctx = _ctx; - ProtocolCfg* _cfg = &ctx->attack->payload.cfg; - ContinuityCfg* cfg = &_cfg->specific.continuity; + Payload* payload = &ctx->attack->payload; + ContinuityCfg* cfg = &payload->cfg.continuity; cfg->data.nearby_action.flags = (ctx->byte_store[0] << 0x00); } diff --git a/applications/external/ble_spam/protocols/easysetup.c b/applications/external/ble_spam/protocols/easysetup.c index 8aff3521c..b07b6d639 100644 --- a/applications/external/ble_spam/protocols/easysetup.c +++ b/applications/external/ble_spam/protocols/easysetup.c @@ -68,8 +68,8 @@ static const char* type_names[EasysetupTypeCOUNT] = { [EasysetupTypeBuds] = "EasySetup Buds", [EasysetupTypeWatch] = "EasySetup Watch", }; -static const char* get_name(const ProtocolCfg* _cfg) { - const EasysetupCfg* cfg = &_cfg->specific.easysetup; +static const char* get_name(const Payload* payload) { + const EasysetupCfg* cfg = &payload->cfg.easysetup; return type_names[cfg->type]; } @@ -77,8 +77,8 @@ static uint8_t packet_sizes[EasysetupTypeCOUNT] = { [EasysetupTypeBuds] = 31, [EasysetupTypeWatch] = 15, }; -void make_packet(uint8_t* out_size, uint8_t** out_packet, ProtocolCfg* _cfg) { - EasysetupCfg* cfg = _cfg ? &_cfg->specific.easysetup : NULL; +void make_packet(uint8_t* out_size, uint8_t** out_packet, Payload* payload) { + EasysetupCfg* cfg = payload ? &payload->cfg.easysetup : NULL; EasysetupType type; if(cfg && cfg->type != 0x00) { @@ -98,16 +98,16 @@ void make_packet(uint8_t* out_size, uint8_t** out_packet, ProtocolCfg* _cfg) { switch(type) { case EasysetupTypeBuds: { uint32_t model; - switch(cfg ? _cfg->mode : ProtocolModeRandom) { - case ProtocolModeRandom: + switch(cfg ? payload->mode : PayloadModeRandom) { + case PayloadModeRandom: default: model = buds_models[rand() % buds_models_count].value; break; - case ProtocolModeValue: + case PayloadModeValue: model = cfg->data.buds.model; break; - case ProtocolModeBruteforce: - model = cfg->data.buds.model = _cfg->bruteforce.value; + case PayloadModeBruteforce: + model = cfg->data.buds.model = payload->bruteforce.value; break; } @@ -148,16 +148,16 @@ void make_packet(uint8_t* out_size, uint8_t** out_packet, ProtocolCfg* _cfg) { } case EasysetupTypeWatch: { uint8_t model; - switch(cfg ? _cfg->mode : ProtocolModeRandom) { - case ProtocolModeRandom: + switch(cfg ? payload->mode : PayloadModeRandom) { + case PayloadModeRandom: default: model = watch_models[rand() % watch_models_count].value; break; - case ProtocolModeValue: + case PayloadModeValue: model = cfg->data.watch.model; break; - case ProtocolModeBruteforce: - model = cfg->data.watch.model = _cfg->bruteforce.value; + case PayloadModeBruteforce: + model = cfg->data.watch.model = payload->bruteforce.value; break; } @@ -199,8 +199,8 @@ enum { }; static void config_callback(void* _ctx, uint32_t index) { Ctx* ctx = _ctx; - ProtocolCfg* _cfg = &ctx->attack->payload.cfg; - EasysetupCfg* cfg = &_cfg->specific.easysetup; + Payload* payload = &ctx->attack->payload; + EasysetupCfg* cfg = &payload->cfg.easysetup; scene_manager_set_scene_state(ctx->scene_manager, SceneConfig, index); switch(cfg->type) { case EasysetupTypeBuds: { @@ -233,36 +233,36 @@ static void config_callback(void* _ctx, uint32_t index) { } } static void buds_model_changed(VariableItem* item) { - ProtocolCfg* _cfg = variable_item_get_context(item); - EasysetupCfg* cfg = &_cfg->specific.easysetup; + Payload* payload = variable_item_get_context(item); + EasysetupCfg* cfg = &payload->cfg.easysetup; uint8_t index = variable_item_get_current_value_index(item); if(index) { index--; - _cfg->mode = ProtocolModeValue; + payload->mode = PayloadModeValue; cfg->data.buds.model = buds_models[index].value; variable_item_set_current_value_text(item, buds_models[index].name); } else { - _cfg->mode = ProtocolModeRandom; + payload->mode = PayloadModeRandom; variable_item_set_current_value_text(item, "Random"); } } static void watch_model_changed(VariableItem* item) { - ProtocolCfg* _cfg = variable_item_get_context(item); - EasysetupCfg* cfg = &_cfg->specific.easysetup; + Payload* payload = variable_item_get_context(item); + EasysetupCfg* cfg = &payload->cfg.easysetup; uint8_t index = variable_item_get_current_value_index(item); if(index) { index--; - _cfg->mode = ProtocolModeValue; + payload->mode = PayloadModeValue; cfg->data.watch.model = watch_models[index].value; variable_item_set_current_value_text(item, watch_models[index].name); } else { - _cfg->mode = ProtocolModeRandom; + payload->mode = PayloadModeRandom; variable_item_set_current_value_text(item, "Random"); } } static void extra_config(Ctx* ctx) { - ProtocolCfg* _cfg = &ctx->attack->payload.cfg; - EasysetupCfg* cfg = &_cfg->specific.easysetup; + Payload* payload = &ctx->attack->payload; + EasysetupCfg* cfg = &payload->cfg.easysetup; VariableItemList* list = ctx->variable_item_list; VariableItem* item; size_t value_index; @@ -270,16 +270,16 @@ static void extra_config(Ctx* ctx) { switch(cfg->type) { case EasysetupTypeBuds: { item = variable_item_list_add( - list, "Model Code", buds_models_count + 1, buds_model_changed, _cfg); + list, "Model Code", buds_models_count + 1, buds_model_changed, payload); const char* model_name = NULL; char model_name_buf[9]; - switch(_cfg->mode) { - case ProtocolModeRandom: + switch(payload->mode) { + case PayloadModeRandom: default: model_name = "Random"; value_index = 0; break; - case ProtocolModeValue: + case PayloadModeValue: for(uint8_t i = 0; i < buds_models_count; i++) { if(cfg->data.buds.model == buds_models[i].value) { model_name = buds_models[i].name; @@ -293,7 +293,7 @@ static void extra_config(Ctx* ctx) { value_index = buds_models_count + 1; } break; - case ProtocolModeBruteforce: + case PayloadModeBruteforce: model_name = "Bruteforce"; value_index = buds_models_count + 1; break; @@ -306,16 +306,16 @@ static void extra_config(Ctx* ctx) { } case EasysetupTypeWatch: { item = variable_item_list_add( - list, "Model Code", watch_models_count + 1, watch_model_changed, _cfg); + list, "Model Code", watch_models_count + 1, watch_model_changed, payload); const char* model_name = NULL; char model_name_buf[3]; - switch(_cfg->mode) { - case ProtocolModeRandom: + switch(payload->mode) { + case PayloadModeRandom: default: model_name = "Random"; value_index = 0; break; - case ProtocolModeValue: + case PayloadModeValue: for(uint8_t i = 0; i < watch_models_count; i++) { if(cfg->data.watch.model == watch_models[i].value) { model_name = watch_models[i].name; @@ -329,7 +329,7 @@ static void extra_config(Ctx* ctx) { value_index = watch_models_count + 1; } break; - case ProtocolModeBruteforce: + case PayloadModeBruteforce: model_name = "Bruteforce"; value_index = watch_models_count + 1; break; @@ -349,8 +349,8 @@ static uint8_t config_counts[EasysetupTypeCOUNT] = { [EasysetupTypeBuds] = ConfigBudsCOUNT - ConfigExtraStart - 1, [EasysetupTypeWatch] = ConfigWatchCOUNT - ConfigExtraStart - 1, }; -static uint8_t config_count(const ProtocolCfg* _cfg) { - const EasysetupCfg* cfg = &_cfg->specific.easysetup; +static uint8_t config_count(const Payload* payload) { + const EasysetupCfg* cfg = &payload->cfg.easysetup; return config_counts[cfg->type]; } @@ -364,25 +364,25 @@ const Protocol protocol_easysetup = { static void buds_model_callback(void* _ctx, uint32_t index) { Ctx* ctx = _ctx; - ProtocolCfg* _cfg = &ctx->attack->payload.cfg; - EasysetupCfg* cfg = &_cfg->specific.easysetup; + Payload* payload = &ctx->attack->payload; + EasysetupCfg* cfg = &payload->cfg.easysetup; switch(index) { case 0: - _cfg->mode = ProtocolModeRandom; + payload->mode = PayloadModeRandom; scene_manager_previous_scene(ctx->scene_manager); break; case buds_models_count + 1: scene_manager_next_scene(ctx->scene_manager, SceneEasysetupBudsModelCustom); break; case buds_models_count + 2: - _cfg->mode = ProtocolModeBruteforce; - _cfg->bruteforce.counter = 0; - _cfg->bruteforce.value = cfg->data.buds.model; - _cfg->bruteforce.size = 3; + payload->mode = PayloadModeBruteforce; + payload->bruteforce.counter = 0; + payload->bruteforce.value = cfg->data.buds.model; + payload->bruteforce.size = 3; scene_manager_previous_scene(ctx->scene_manager); break; default: - _cfg->mode = ProtocolModeValue; + payload->mode = PayloadModeValue; cfg->data.buds.model = buds_models[index - 1].value; scene_manager_previous_scene(ctx->scene_manager); break; @@ -390,33 +390,33 @@ static void buds_model_callback(void* _ctx, uint32_t index) { } void scene_easysetup_buds_model_on_enter(void* _ctx) { Ctx* ctx = _ctx; - ProtocolCfg* _cfg = &ctx->attack->payload.cfg; - EasysetupCfg* cfg = &_cfg->specific.easysetup; + Payload* payload = &ctx->attack->payload; + EasysetupCfg* cfg = &payload->cfg.easysetup; Submenu* submenu = ctx->submenu; uint32_t selected = 0; submenu_reset(submenu); submenu_add_item(submenu, "Random", 0, buds_model_callback, ctx); - if(_cfg->mode == ProtocolModeRandom) { + if(payload->mode == PayloadModeRandom) { selected = 0; } bool found = false; for(uint8_t i = 0; i < buds_models_count; i++) { submenu_add_item(submenu, buds_models[i].name, i + 1, buds_model_callback, ctx); - if(!found && _cfg->mode == ProtocolModeValue && + if(!found && payload->mode == PayloadModeValue && cfg->data.buds.model == buds_models[i].value) { found = true; selected = i + 1; } } submenu_add_item(submenu, "Custom", buds_models_count + 1, buds_model_callback, ctx); - if(!found && _cfg->mode == ProtocolModeValue) { + if(!found && payload->mode == PayloadModeValue) { selected = buds_models_count + 1; } submenu_add_item(submenu, "Bruteforce", buds_models_count + 2, buds_model_callback, ctx); - if(_cfg->mode == ProtocolModeBruteforce) { + if(payload->mode == PayloadModeBruteforce) { selected = buds_models_count + 2; } @@ -435,9 +435,9 @@ void scene_easysetup_buds_model_on_exit(void* _ctx) { static void buds_model_custom_callback(void* _ctx) { Ctx* ctx = _ctx; - ProtocolCfg* _cfg = &ctx->attack->payload.cfg; - EasysetupCfg* cfg = &_cfg->specific.easysetup; - _cfg->mode = ProtocolModeValue; + Payload* payload = &ctx->attack->payload; + EasysetupCfg* cfg = &payload->cfg.easysetup; + payload->mode = PayloadModeValue; cfg->data.buds.model = (ctx->byte_store[0] << 0x10) + (ctx->byte_store[1] << 0x08) + (ctx->byte_store[2] << 0x00); scene_manager_previous_scene(ctx->scene_manager); @@ -445,8 +445,8 @@ static void buds_model_custom_callback(void* _ctx) { } void scene_easysetup_buds_model_custom_on_enter(void* _ctx) { Ctx* ctx = _ctx; - ProtocolCfg* _cfg = &ctx->attack->payload.cfg; - EasysetupCfg* cfg = &_cfg->specific.easysetup; + Payload* payload = &ctx->attack->payload; + EasysetupCfg* cfg = &payload->cfg.easysetup; ByteInput* byte_input = ctx->byte_input; byte_input_set_header_text(byte_input, "Enter custom Model Code"); @@ -471,25 +471,25 @@ void scene_easysetup_buds_model_custom_on_exit(void* _ctx) { static void watch_model_callback(void* _ctx, uint32_t index) { Ctx* ctx = _ctx; - ProtocolCfg* _cfg = &ctx->attack->payload.cfg; - EasysetupCfg* cfg = &_cfg->specific.easysetup; + Payload* payload = &ctx->attack->payload; + EasysetupCfg* cfg = &payload->cfg.easysetup; switch(index) { case 0: - _cfg->mode = ProtocolModeRandom; + payload->mode = PayloadModeRandom; scene_manager_previous_scene(ctx->scene_manager); break; case watch_models_count + 1: scene_manager_next_scene(ctx->scene_manager, SceneEasysetupWatchModelCustom); break; case watch_models_count + 2: - _cfg->mode = ProtocolModeBruteforce; - _cfg->bruteforce.counter = 0; - _cfg->bruteforce.value = cfg->data.watch.model; - _cfg->bruteforce.size = 1; + payload->mode = PayloadModeBruteforce; + payload->bruteforce.counter = 0; + payload->bruteforce.value = cfg->data.watch.model; + payload->bruteforce.size = 1; scene_manager_previous_scene(ctx->scene_manager); break; default: - _cfg->mode = ProtocolModeValue; + payload->mode = PayloadModeValue; cfg->data.watch.model = watch_models[index - 1].value; scene_manager_previous_scene(ctx->scene_manager); break; @@ -497,33 +497,33 @@ static void watch_model_callback(void* _ctx, uint32_t index) { } void scene_easysetup_watch_model_on_enter(void* _ctx) { Ctx* ctx = _ctx; - ProtocolCfg* _cfg = &ctx->attack->payload.cfg; - EasysetupCfg* cfg = &_cfg->specific.easysetup; + Payload* payload = &ctx->attack->payload; + EasysetupCfg* cfg = &payload->cfg.easysetup; Submenu* submenu = ctx->submenu; uint32_t selected = 0; submenu_reset(submenu); submenu_add_item(submenu, "Random", 0, watch_model_callback, ctx); - if(_cfg->mode == ProtocolModeRandom) { + if(payload->mode == PayloadModeRandom) { selected = 0; } bool found = false; for(uint8_t i = 0; i < watch_models_count; i++) { submenu_add_item(submenu, watch_models[i].name, i + 1, watch_model_callback, ctx); - if(!found && _cfg->mode == ProtocolModeValue && + if(!found && payload->mode == PayloadModeValue && cfg->data.watch.model == watch_models[i].value) { found = true; selected = i + 1; } } submenu_add_item(submenu, "Custom", watch_models_count + 1, watch_model_callback, ctx); - if(!found && _cfg->mode == ProtocolModeValue) { + if(!found && payload->mode == PayloadModeValue) { selected = watch_models_count + 1; } submenu_add_item(submenu, "Bruteforce", watch_models_count + 2, watch_model_callback, ctx); - if(_cfg->mode == ProtocolModeBruteforce) { + if(payload->mode == PayloadModeBruteforce) { selected = watch_models_count + 2; } @@ -542,17 +542,17 @@ void scene_easysetup_watch_model_on_exit(void* _ctx) { static void watch_model_custom_callback(void* _ctx) { Ctx* ctx = _ctx; - ProtocolCfg* _cfg = &ctx->attack->payload.cfg; - EasysetupCfg* cfg = &_cfg->specific.easysetup; - _cfg->mode = ProtocolModeValue; + Payload* payload = &ctx->attack->payload; + EasysetupCfg* cfg = &payload->cfg.easysetup; + payload->mode = PayloadModeValue; cfg->data.watch.model = (ctx->byte_store[0] << 0x00); scene_manager_previous_scene(ctx->scene_manager); scene_manager_previous_scene(ctx->scene_manager); } void scene_easysetup_watch_model_custom_on_enter(void* _ctx) { Ctx* ctx = _ctx; - ProtocolCfg* _cfg = &ctx->attack->payload.cfg; - EasysetupCfg* cfg = &_cfg->specific.easysetup; + Payload* payload = &ctx->attack->payload; + EasysetupCfg* cfg = &payload->cfg.easysetup; ByteInput* byte_input = ctx->byte_input; byte_input_set_header_text(byte_input, "Enter custom Model Code"); diff --git a/applications/external/ble_spam/protocols/fastpair.c b/applications/external/ble_spam/protocols/fastpair.c index e4ab936da..8d2e32c51 100644 --- a/applications/external/ble_spam/protocols/fastpair.c +++ b/applications/external/ble_spam/protocols/fastpair.c @@ -65,25 +65,25 @@ const struct { }; const uint8_t models_count = COUNT_OF(models); -static const char* get_name(const ProtocolCfg* _cfg) { - UNUSED(_cfg); +static const char* get_name(const Payload* payload) { + UNUSED(payload); return "FastPair"; } -static void make_packet(uint8_t* _size, uint8_t** _packet, ProtocolCfg* _cfg) { - FastpairCfg* cfg = _cfg ? &_cfg->specific.fastpair : NULL; +static void make_packet(uint8_t* _size, uint8_t** _packet, Payload* payload) { + FastpairCfg* cfg = payload ? &payload->cfg.fastpair : NULL; uint32_t model; - switch(cfg ? _cfg->mode : ProtocolModeRandom) { - case ProtocolModeRandom: + switch(cfg ? payload->mode : PayloadModeRandom) { + case PayloadModeRandom: default: model = models[rand() % models_count].value; break; - case ProtocolModeValue: + case PayloadModeValue: model = cfg->model; break; - case ProtocolModeBruteforce: - model = cfg->model = _cfg->bruteforce.value; + case PayloadModeBruteforce: + model = cfg->model = payload->bruteforce.value; break; } @@ -133,36 +133,36 @@ static void config_callback(void* _ctx, uint32_t index) { } } static void model_changed(VariableItem* item) { - ProtocolCfg* _cfg = variable_item_get_context(item); - FastpairCfg* cfg = &_cfg->specific.fastpair; + Payload* payload = variable_item_get_context(item); + FastpairCfg* cfg = &payload->cfg.fastpair; uint8_t index = variable_item_get_current_value_index(item); if(index) { index--; - _cfg->mode = ProtocolModeValue; + payload->mode = PayloadModeValue; cfg->model = models[index].value; variable_item_set_current_value_text(item, models[index].name); } else { - _cfg->mode = ProtocolModeRandom; + payload->mode = PayloadModeRandom; variable_item_set_current_value_text(item, "Random"); } } static void extra_config(Ctx* ctx) { - ProtocolCfg* _cfg = &ctx->attack->payload.cfg; - FastpairCfg* cfg = &_cfg->specific.fastpair; + Payload* payload = &ctx->attack->payload; + FastpairCfg* cfg = &payload->cfg.fastpair; VariableItemList* list = ctx->variable_item_list; VariableItem* item; size_t value_index; - item = variable_item_list_add(list, "Model Code", models_count + 1, model_changed, _cfg); + item = variable_item_list_add(list, "Model Code", models_count + 1, model_changed, payload); const char* model_name = NULL; char model_name_buf[9]; - switch(_cfg->mode) { - case ProtocolModeRandom: + switch(payload->mode) { + case PayloadModeRandom: default: model_name = "Random"; value_index = 0; break; - case ProtocolModeValue: + case PayloadModeValue: for(uint8_t i = 0; i < models_count; i++) { if(cfg->model == models[i].value) { model_name = models[i].name; @@ -176,7 +176,7 @@ static void extra_config(Ctx* ctx) { value_index = models_count + 1; } break; - case ProtocolModeBruteforce: + case PayloadModeBruteforce: model_name = "Bruteforce"; value_index = models_count + 1; break; @@ -189,8 +189,8 @@ static void extra_config(Ctx* ctx) { variable_item_list_set_enter_callback(list, config_callback, ctx); } -static uint8_t config_count(const ProtocolCfg* _cfg) { - UNUSED(_cfg); +static uint8_t config_count(const Payload* payload) { + UNUSED(payload); return ConfigCOUNT - ConfigExtraStart - 1; } @@ -204,25 +204,25 @@ const Protocol protocol_fastpair = { static void model_callback(void* _ctx, uint32_t index) { Ctx* ctx = _ctx; - ProtocolCfg* _cfg = &ctx->attack->payload.cfg; - FastpairCfg* cfg = &_cfg->specific.fastpair; + Payload* payload = &ctx->attack->payload; + FastpairCfg* cfg = &payload->cfg.fastpair; switch(index) { case 0: - _cfg->mode = ProtocolModeRandom; + payload->mode = PayloadModeRandom; scene_manager_previous_scene(ctx->scene_manager); break; case models_count + 1: scene_manager_next_scene(ctx->scene_manager, SceneFastpairModelCustom); break; case models_count + 2: - _cfg->mode = ProtocolModeBruteforce; - _cfg->bruteforce.counter = 0; - _cfg->bruteforce.value = cfg->model; - _cfg->bruteforce.size = 3; + payload->mode = PayloadModeBruteforce; + payload->bruteforce.counter = 0; + payload->bruteforce.value = cfg->model; + payload->bruteforce.size = 3; scene_manager_previous_scene(ctx->scene_manager); break; default: - _cfg->mode = ProtocolModeValue; + payload->mode = PayloadModeValue; cfg->model = models[index - 1].value; scene_manager_previous_scene(ctx->scene_manager); break; @@ -230,32 +230,32 @@ static void model_callback(void* _ctx, uint32_t index) { } void scene_fastpair_model_on_enter(void* _ctx) { Ctx* ctx = _ctx; - ProtocolCfg* _cfg = &ctx->attack->payload.cfg; - FastpairCfg* cfg = &_cfg->specific.fastpair; + Payload* payload = &ctx->attack->payload; + FastpairCfg* cfg = &payload->cfg.fastpair; Submenu* submenu = ctx->submenu; uint32_t selected = 0; submenu_reset(submenu); submenu_add_item(submenu, "Random", 0, model_callback, ctx); - if(_cfg->mode == ProtocolModeRandom) { + if(payload->mode == PayloadModeRandom) { selected = 0; } bool found = false; for(uint8_t i = 0; i < models_count; i++) { submenu_add_item(submenu, models[i].name, i + 1, model_callback, ctx); - if(!found && _cfg->mode == ProtocolModeValue && cfg->model == models[i].value) { + if(!found && payload->mode == PayloadModeValue && cfg->model == models[i].value) { found = true; selected = i + 1; } } submenu_add_item(submenu, "Custom", models_count + 1, model_callback, ctx); - if(!found && _cfg->mode == ProtocolModeValue) { + if(!found && payload->mode == PayloadModeValue) { selected = models_count + 1; } submenu_add_item(submenu, "Bruteforce", models_count + 2, model_callback, ctx); - if(_cfg->mode == ProtocolModeBruteforce) { + if(payload->mode == PayloadModeBruteforce) { selected = models_count + 2; } @@ -274,9 +274,9 @@ void scene_fastpair_model_on_exit(void* _ctx) { static void model_custom_callback(void* _ctx) { Ctx* ctx = _ctx; - ProtocolCfg* _cfg = &ctx->attack->payload.cfg; - FastpairCfg* cfg = &_cfg->specific.fastpair; - _cfg->mode = ProtocolModeValue; + Payload* payload = &ctx->attack->payload; + FastpairCfg* cfg = &payload->cfg.fastpair; + payload->mode = PayloadModeValue; cfg->model = (ctx->byte_store[0] << 0x10) + (ctx->byte_store[1] << 0x08) + (ctx->byte_store[2] << 0x00); scene_manager_previous_scene(ctx->scene_manager); @@ -284,8 +284,8 @@ static void model_custom_callback(void* _ctx) { } void scene_fastpair_model_custom_on_enter(void* _ctx) { Ctx* ctx = _ctx; - ProtocolCfg* _cfg = &ctx->attack->payload.cfg; - FastpairCfg* cfg = &_cfg->specific.fastpair; + Payload* payload = &ctx->attack->payload; + FastpairCfg* cfg = &payload->cfg.fastpair; ByteInput* byte_input = ctx->byte_input; byte_input_set_header_text(byte_input, "Enter custom Model Code"); diff --git a/applications/external/ble_spam/protocols/swiftpair.c b/applications/external/ble_spam/protocols/swiftpair.c index 7fc65cb0d..63cc5404c 100644 --- a/applications/external/ble_spam/protocols/swiftpair.c +++ b/applications/external/ble_spam/protocols/swiftpair.c @@ -14,21 +14,21 @@ const char* names[] = { }; const uint8_t names_count = COUNT_OF(names); -static const char* get_name(const ProtocolCfg* _cfg) { - UNUSED(_cfg); +static const char* get_name(const Payload* payload) { + UNUSED(payload); return "SwiftPair"; } -static void make_packet(uint8_t* _size, uint8_t** _packet, ProtocolCfg* _cfg) { - SwiftpairCfg* cfg = _cfg ? &_cfg->specific.swiftpair : NULL; +static void make_packet(uint8_t* _size, uint8_t** _packet, Payload* payload) { + SwiftpairCfg* cfg = payload ? &payload->cfg.swiftpair : NULL; const char* name; - switch(cfg ? _cfg->mode : ProtocolModeRandom) { - case ProtocolModeRandom: + switch(cfg ? payload->mode : PayloadModeRandom) { + case PayloadModeRandom: default: name = names[rand() % names_count]; break; - case ProtocolModeValue: + case PayloadModeValue: name = cfg->name; break; } @@ -73,22 +73,22 @@ static void config_callback(void* _ctx, uint32_t index) { } } static void extra_config(Ctx* ctx) { - ProtocolCfg* _cfg = &ctx->attack->payload.cfg; - SwiftpairCfg* cfg = &_cfg->specific.swiftpair; + Payload* payload = &ctx->attack->payload; + SwiftpairCfg* cfg = &payload->cfg.swiftpair; VariableItemList* list = ctx->variable_item_list; VariableItem* item; item = variable_item_list_add(list, "Display Name", 0, NULL, NULL); variable_item_set_current_value_text( - item, _cfg->mode == ProtocolModeRandom ? "Random" : cfg->name); + item, payload->mode == PayloadModeRandom ? "Random" : cfg->name); variable_item_list_add(list, "Requires enabling SwiftPair", 0, NULL, NULL); variable_item_list_set_enter_callback(list, config_callback, ctx); } -static uint8_t config_count(const ProtocolCfg* _cfg) { - UNUSED(_cfg); +static uint8_t config_count(const Payload* payload) { + UNUSED(payload); return ConfigCOUNT - ConfigExtraStart - 1; } @@ -102,14 +102,14 @@ const Protocol protocol_swiftpair = { static void name_callback(void* _ctx) { Ctx* ctx = _ctx; - ProtocolCfg* _cfg = &ctx->attack->payload.cfg; - _cfg->mode = ProtocolModeValue; + Payload* payload = &ctx->attack->payload; + payload->mode = PayloadModeValue; scene_manager_previous_scene(ctx->scene_manager); } void scene_swiftpair_name_on_enter(void* _ctx) { Ctx* ctx = _ctx; - ProtocolCfg* _cfg = &ctx->attack->payload.cfg; - SwiftpairCfg* cfg = &_cfg->specific.swiftpair; + Payload* payload = &ctx->attack->payload; + SwiftpairCfg* cfg = &payload->cfg.swiftpair; TextInput* text_input = ctx->text_input; text_input_reset(text_input); @@ -124,9 +124,9 @@ void scene_swiftpair_name_on_enter(void* _ctx) { } bool scene_swiftpair_name_on_event(void* _ctx, SceneManagerEvent event) { Ctx* ctx = _ctx; - ProtocolCfg* _cfg = &ctx->attack->payload.cfg; + Payload* payload = &ctx->attack->payload; if(event.type == SceneManagerEventTypeBack) { - _cfg->mode = ProtocolModeRandom; + payload->mode = PayloadModeRandom; } return false; } diff --git a/applications/external/ble_spam/scenes/config.c b/applications/external/ble_spam/scenes/config.c index 354de6399..bc2fc83c3 100644 --- a/applications/external/ble_spam/scenes/config.c +++ b/applications/external/ble_spam/scenes/config.c @@ -19,7 +19,7 @@ static void config_callback(void* _ctx, uint32_t index) { if(!ctx->attack->protocol) { index--; } else if(ctx->attack->protocol->config_count) { - uint8_t extra = ctx->attack->protocol->config_count(&ctx->attack->payload.cfg); + uint8_t extra = ctx->attack->protocol->config_count(&ctx->attack->payload); if(index > extra) index -= extra; } From 28bcc09d9bbd135166fb1e1c748b26dc9672db1a Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Thu, 26 Oct 2023 04:03:42 +0100 Subject: [PATCH 19/24] This can just be made global at this point lol --- .../drivers/subghz/cc1101_ext/cc1101_ext.c | 11 ++-- .../external/advanced_wifisniff/sniffer.c | 10 ++-- .../views/camera_suite_view_camera.h | 5 +- .../external/esp8266_deauth/esp8266_deauth.c | 5 +- .../external/esp_flasher/esp_flasher_uart.c | 5 +- .../external/evil_portal/evil_portal_app_i.h | 5 +- .../external/gps_nmea_uart/gps_uart.h | 5 +- .../external/nrf24batch/lib/nrf24/nrf24.c | 8 +-- .../external/nrf24batch/lib/nrf24/nrf24.h | 2 +- .../nrf24channelscanner/lib/nrf24/nrf24.c | 8 +-- .../nrf24channelscanner/lib/nrf24/nrf24.h | 2 +- .../nrf24mousejacker/lib/nrf24/nrf24.c | 10 ++-- .../nrf24mousejacker/lib/nrf24/nrf24.h | 2 +- .../external/nrf24scan/lib/nrf24/nrf24.c | 8 +-- .../external/nrf24scan/lib/nrf24/nrf24.h | 2 +- .../external/nrf24sniff/lib/nrf24/nrf24.c | 8 +-- .../external/nrf24sniff/lib/nrf24/nrf24.h | 2 +- .../uart_terminal/uart_terminal_app_i.h | 6 +- .../wifi_deauther/wifi_deauther_app_i.h | 5 +- .../wifi_marauder_app_i.h | 5 +- .../FlipperZeroWiFiModuleDefines.h | 5 +- .../main/archive/helpers/archive_browser.c | 9 ++- .../main/archive/helpers/archive_files.h | 2 +- .../main/archive/helpers/favorite_timeout.c | 2 +- applications/main/bad_kb/bad_kb_app.c | 4 +- .../main/bad_kb/helpers/ducky_script.c | 9 ++- applications/main/bad_kb/views/bad_kb_view.c | 6 +- applications/main/subghz/helpers/subghz_gps.h | 7 +-- .../subghz/scenes/subghz_scene_transmitter.c | 2 +- applications/main/subghz/subghz.c | 2 +- applications/main/u2f/views/u2f_view.c | 10 ++-- .../xtreme_app_scene_interface_filebrowser.c | 27 +++++---- .../xtreme_app_scene_interface_graphics.c | 23 ++++---- .../xtreme_app_scene_interface_lockscreen.c | 55 +++++++++---------- .../xtreme_app_scene_interface_mainmenu.c | 7 +-- .../xtreme_app_scene_interface_statusbar.c | 31 +++++------ .../xtreme_app/scenes/xtreme_app_scene_misc.c | 5 +- .../scenes/xtreme_app_scene_misc_dolphin.c | 5 +- .../scenes/xtreme_app_scene_misc_screen.c | 25 ++++----- .../scenes/xtreme_app_scene_protocols.c | 13 ++--- .../scenes/xtreme_app_scene_protocols_gpio.c | 41 +++++++------- applications/main/xtreme_app/xtreme_app.c | 4 +- .../desktop/animations/animation_manager.c | 18 +++--- .../desktop/animations/animation_storage.c | 7 +-- applications/services/desktop/desktop.c | 8 +-- .../desktop/scenes/desktop_scene_fault.c | 2 +- .../desktop/scenes/desktop_scene_pin_input.c | 2 +- .../desktop/views/desktop_view_lock_menu.c | 4 +- .../desktop/views/desktop_view_locked.c | 13 ++--- applications/services/dolphin/dolphin.c | 2 +- applications/services/gui/canvas.c | 4 +- applications/services/gui/gui.c | 20 +++---- .../services/gui/modules/file_browser.c | 2 +- applications/services/gui/modules/menu.c | 12 ++-- .../services/power/power_service/power.c | 6 +- applications/services/rpc/rpc.c | 3 +- ...ktop_settings_scene_keybinds_action_type.c | 2 +- .../settings/dolphin_passport/passport.c | 2 +- .../scenes/power_settings_scene_power_off.c | 2 +- firmware/targets/f7/api_symbols.csv | 2 +- firmware/targets/f7/furi_hal/furi_hal_light.c | 2 +- lib/xtreme/assets.c | 8 +-- lib/xtreme/settings.c | 4 -- lib/xtreme/xtreme.h | 2 +- 64 files changed, 249 insertions(+), 286 deletions(-) diff --git a/applications/drivers/subghz/cc1101_ext/cc1101_ext.c b/applications/drivers/subghz/cc1101_ext/cc1101_ext.c index a9a0ddeea..163bb03c6 100644 --- a/applications/drivers/subghz/cc1101_ext/cc1101_ext.c +++ b/applications/drivers/subghz/cc1101_ext/cc1101_ext.c @@ -214,16 +214,15 @@ bool subghz_device_cc1101_ext_alloc(SubGhzDeviceConf* conf) { subghz_device_cc1101_ext->async_rx.capture_delta_duration = 0; subghz_device_cc1101_ext->spi_bus_handle = - (XTREME_SETTINGS()->spi_cc1101_handle == SpiDefault ? + (xtreme_settings.spi_cc1101_handle == SpiDefault ? &furi_hal_spi_bus_handle_external : &furi_hal_spi_bus_handle_external_extra); // this is needed if multiple SPI devices are connected to the same bus but with different CS pins - if(XTREME_SETTINGS()->spi_cc1101_handle == SpiDefault && - !furi_hal_subghz_get_ext_power_amp()) { + if(xtreme_settings.spi_cc1101_handle == SpiDefault && !furi_hal_subghz_get_ext_power_amp()) { furi_hal_gpio_init_simple(&gpio_ext_pc3, GpioModeOutputPushPull); furi_hal_gpio_write(&gpio_ext_pc3, true); - } else if(XTREME_SETTINGS()->spi_cc1101_handle == SpiExtra) { + } else if(xtreme_settings.spi_cc1101_handle == SpiExtra) { furi_hal_gpio_init_simple(&gpio_ext_pa4, GpioModeOutputPushPull); furi_hal_gpio_write(&gpio_ext_pa4, true); } @@ -245,9 +244,9 @@ void subghz_device_cc1101_ext_free() { free(subghz_device_cc1101_ext); // resetting the CS pins to floating - if(XTREME_SETTINGS()->spi_nrf24_handle == SpiDefault || subghz_device_cc1101_ext->power_amp) { + if(xtreme_settings.spi_nrf24_handle == SpiDefault || subghz_device_cc1101_ext->power_amp) { furi_hal_gpio_init_simple(&gpio_ext_pc3, GpioModeAnalog); - } else if(XTREME_SETTINGS()->spi_nrf24_handle == SpiExtra) { + } else if(xtreme_settings.spi_nrf24_handle == SpiExtra) { furi_hal_gpio_init_simple(&gpio_ext_pa4, GpioModeAnalog); } diff --git a/applications/external/advanced_wifisniff/sniffer.c b/applications/external/advanced_wifisniff/sniffer.c index ce1a1b193..4f2896285 100644 --- a/applications/external/advanced_wifisniff/sniffer.c +++ b/applications/external/advanced_wifisniff/sniffer.c @@ -17,13 +17,11 @@ #define MAX_SSID_LENGTH 32 #define MAX_BSSID_LENGTH 18 -#define UART_CH_ESP \ - (XTREME_SETTINGS()->uart_esp_channel == UARTDefault ? FuriHalUartIdUSART1 : \ - FuriHalUartIdLPUART1) +#define UART_CH_ESP \ + (xtreme_settings.uart_esp_channel == UARTDefault ? FuriHalUartIdUSART1 : FuriHalUartIdLPUART1) -#define UART_CH_GPS \ - (XTREME_SETTINGS()->uart_nmea_channel == UARTDefault ? FuriHalUartIdUSART1 : \ - FuriHalUartIdLPUART1) +#define UART_CH_GPS \ + (xtreme_settings.uart_nmea_channel == UARTDefault ? FuriHalUartIdUSART1 : FuriHalUartIdLPUART1) #define WORKER_ALL_RX_EVENTS (WorkerEvtStop | WorkerEvtRxDone) diff --git a/applications/external/camera_suite/views/camera_suite_view_camera.h b/applications/external/camera_suite/views/camera_suite_view_camera.h index 4e2f29ddc..0267bf555 100644 --- a/applications/external/camera_suite/views/camera_suite_view_camera.h +++ b/applications/external/camera_suite/views/camera_suite_view_camera.h @@ -16,9 +16,8 @@ #include -#define UART_CH \ - (XTREME_SETTINGS()->uart_esp_channel == UARTDefault ? FuriHalUartIdUSART1 : \ - FuriHalUartIdLPUART1) +#define UART_CH \ + (xtreme_settings.uart_esp_channel == UARTDefault ? FuriHalUartIdUSART1 : FuriHalUartIdLPUART1) #pragma once diff --git a/applications/external/esp8266_deauth/esp8266_deauth.c b/applications/external/esp8266_deauth/esp8266_deauth.c index 41015c21b..29d33b7df 100644 --- a/applications/external/esp8266_deauth/esp8266_deauth.c +++ b/applications/external/esp8266_deauth/esp8266_deauth.c @@ -14,9 +14,8 @@ #include "FlipperZeroWiFiDeauthModuleDefines.h" -#define UART_CH \ - (XTREME_SETTINGS()->uart_esp_channel == UARTDefault ? FuriHalUartIdUSART1 : \ - FuriHalUartIdLPUART1) +#define UART_CH \ + (xtreme_settings.uart_esp_channel == UARTDefault ? FuriHalUartIdUSART1 : FuriHalUartIdLPUART1) #define DEAUTH_APP_DEBUG 0 diff --git a/applications/external/esp_flasher/esp_flasher_uart.c b/applications/external/esp_flasher/esp_flasher_uart.c index b4b7928b8..98051c8e9 100644 --- a/applications/external/esp_flasher/esp_flasher_uart.c +++ b/applications/external/esp_flasher/esp_flasher_uart.c @@ -2,9 +2,8 @@ #include "esp_flasher_uart.h" #include -#define UART_CH \ - (XTREME_SETTINGS()->uart_esp_channel == UARTDefault ? FuriHalUartIdUSART1 : \ - FuriHalUartIdLPUART1) +#define UART_CH \ + (xtreme_settings.uart_esp_channel == UARTDefault ? FuriHalUartIdUSART1 : FuriHalUartIdLPUART1) #define BAUDRATE (115200) struct EspFlasherUart { diff --git a/applications/external/evil_portal/evil_portal_app_i.h b/applications/external/evil_portal/evil_portal_app_i.h index 5fa6f62b8..0ba3ce1da 100644 --- a/applications/external/evil_portal/evil_portal_app_i.h +++ b/applications/external/evil_portal/evil_portal_app_i.h @@ -22,9 +22,8 @@ #define NUM_MENU_ITEMS (6) #define EVIL_PORTAL_TEXT_BOX_STORE_SIZE (4096) -#define UART_CH \ - (XTREME_SETTINGS()->uart_esp_channel == UARTDefault ? FuriHalUartIdUSART1 : \ - FuriHalUartIdLPUART1) +#define UART_CH \ + (xtreme_settings.uart_esp_channel == UARTDefault ? FuriHalUartIdUSART1 : FuriHalUartIdLPUART1) #define SET_HTML_CMD "sethtml" #define SET_AP_CMD "setap" diff --git a/applications/external/gps_nmea_uart/gps_uart.h b/applications/external/gps_nmea_uart/gps_uart.h index cddc37b17..428168a2d 100644 --- a/applications/external/gps_nmea_uart/gps_uart.h +++ b/applications/external/gps_nmea_uart/gps_uart.h @@ -4,9 +4,8 @@ #include #include -#define UART_CH \ - (XTREME_SETTINGS()->uart_nmea_channel == UARTDefault ? FuriHalUartIdUSART1 : \ - FuriHalUartIdLPUART1) +#define UART_CH \ + (xtreme_settings.uart_nmea_channel == UARTDefault ? FuriHalUartIdUSART1 : FuriHalUartIdLPUART1) #define RX_BUF_SIZE 1024 diff --git a/applications/external/nrf24batch/lib/nrf24/nrf24.c b/applications/external/nrf24batch/lib/nrf24/nrf24.c index e074860ed..dbc1c1966 100644 --- a/applications/external/nrf24batch/lib/nrf24/nrf24.c +++ b/applications/external/nrf24batch/lib/nrf24/nrf24.c @@ -9,10 +9,10 @@ void nrf24_init() { // this is needed if multiple SPI devices are connected to the same bus but with different CS pins - if(XTREME_SETTINGS()->spi_nrf24_handle == SpiDefault) { + if(xtreme_settings.spi_nrf24_handle == SpiDefault) { furi_hal_gpio_init_simple(&gpio_ext_pc3, GpioModeOutputPushPull); furi_hal_gpio_write(&gpio_ext_pc3, true); - } else if(XTREME_SETTINGS()->spi_nrf24_handle == SpiExtra) { + } else if(xtreme_settings.spi_nrf24_handle == SpiExtra) { furi_hal_gpio_init_simple(&gpio_ext_pa4, GpioModeOutputPushPull); furi_hal_gpio_write(&gpio_ext_pa4, true); } @@ -30,9 +30,9 @@ void nrf24_deinit() { furi_hal_gpio_init(nrf24_CE_PIN, GpioModeAnalog, GpioPullNo, GpioSpeedLow); // resetting the CS pins to floating - if(XTREME_SETTINGS()->spi_nrf24_handle == SpiDefault) { + if(xtreme_settings.spi_nrf24_handle == SpiDefault) { furi_hal_gpio_init_simple(&gpio_ext_pc3, GpioModeAnalog); - } else if(XTREME_SETTINGS()->spi_nrf24_handle == SpiExtra) { + } else if(xtreme_settings.spi_nrf24_handle == SpiExtra) { furi_hal_gpio_init_simple(&gpio_ext_pa4, GpioModeAnalog); } } diff --git a/applications/external/nrf24batch/lib/nrf24/nrf24.h b/applications/external/nrf24batch/lib/nrf24/nrf24.h index 605513d4b..2fb249f68 100644 --- a/applications/external/nrf24batch/lib/nrf24/nrf24.h +++ b/applications/external/nrf24batch/lib/nrf24/nrf24.h @@ -56,7 +56,7 @@ extern "C" { #define nrf24_TIMEOUT 500 #define nrf24_CE_PIN &gpio_ext_pb2 #define nrf24_HANDLE \ - (XTREME_SETTINGS()->spi_nrf24_handle == SpiDefault ? &furi_hal_spi_bus_handle_external : \ + (xtreme_settings.spi_nrf24_handle == SpiDefault ? &furi_hal_spi_bus_handle_external : \ &furi_hal_spi_bus_handle_external_extra) /* Low level API */ diff --git a/applications/external/nrf24channelscanner/lib/nrf24/nrf24.c b/applications/external/nrf24channelscanner/lib/nrf24/nrf24.c index 2307d6daf..d9f53658b 100644 --- a/applications/external/nrf24channelscanner/lib/nrf24/nrf24.c +++ b/applications/external/nrf24channelscanner/lib/nrf24/nrf24.c @@ -7,10 +7,10 @@ void nrf24_init() { // this is needed if multiple SPI devices are connected to the same bus but with different CS pins - if(XTREME_SETTINGS()->spi_nrf24_handle == SpiDefault) { + if(xtreme_settings.spi_nrf24_handle == SpiDefault) { furi_hal_gpio_init_simple(&gpio_ext_pc3, GpioModeOutputPushPull); furi_hal_gpio_write(&gpio_ext_pc3, true); - } else if(XTREME_SETTINGS()->spi_nrf24_handle == SpiExtra) { + } else if(xtreme_settings.spi_nrf24_handle == SpiExtra) { furi_hal_gpio_init_simple(&gpio_ext_pa4, GpioModeOutputPushPull); furi_hal_gpio_write(&gpio_ext_pa4, true); } @@ -28,9 +28,9 @@ void nrf24_deinit() { furi_hal_gpio_init(nrf24_CE_PIN, GpioModeAnalog, GpioPullNo, GpioSpeedLow); // resetting the CS pins to floating - if(XTREME_SETTINGS()->spi_nrf24_handle == SpiDefault) { + if(xtreme_settings.spi_nrf24_handle == SpiDefault) { furi_hal_gpio_init_simple(&gpio_ext_pc3, GpioModeAnalog); - } else if(XTREME_SETTINGS()->spi_nrf24_handle == SpiExtra) { + } else if(xtreme_settings.spi_nrf24_handle == SpiExtra) { furi_hal_gpio_init_simple(&gpio_ext_pa4, GpioModeAnalog); } } diff --git a/applications/external/nrf24channelscanner/lib/nrf24/nrf24.h b/applications/external/nrf24channelscanner/lib/nrf24/nrf24.h index fdbdb0e3f..ca80816af 100644 --- a/applications/external/nrf24channelscanner/lib/nrf24/nrf24.h +++ b/applications/external/nrf24channelscanner/lib/nrf24/nrf24.h @@ -43,7 +43,7 @@ extern "C" { #define nrf24_TIMEOUT 500 #define nrf24_CE_PIN &gpio_ext_pb2 #define nrf24_HANDLE \ - (XTREME_SETTINGS()->spi_nrf24_handle == SpiDefault ? &furi_hal_spi_bus_handle_external : \ + (xtreme_settings.spi_nrf24_handle == SpiDefault ? &furi_hal_spi_bus_handle_external : \ &furi_hal_spi_bus_handle_external_extra) /* Low level API */ diff --git a/applications/external/nrf24mousejacker/lib/nrf24/nrf24.c b/applications/external/nrf24mousejacker/lib/nrf24/nrf24.c index d85196e86..fe62d5db3 100644 --- a/applications/external/nrf24mousejacker/lib/nrf24/nrf24.c +++ b/applications/external/nrf24mousejacker/lib/nrf24/nrf24.c @@ -7,10 +7,10 @@ void nrf24_init() { // this is needed if multiple SPI devices are connected to the same bus but with different CS pins - if(XTREME_SETTINGS()->spi_nrf24_handle == SpiDefault) { + if(xtreme_settings.spi_nrf24_handle == SpiDefault) { furi_hal_gpio_init_simple(&gpio_ext_pc3, GpioModeOutputPushPull); furi_hal_gpio_write(&gpio_ext_pc3, true); - } else if(XTREME_SETTINGS()->spi_nrf24_handle == SpiExtra) { + } else if(xtreme_settings.spi_nrf24_handle == SpiExtra) { furi_hal_gpio_init_simple(&gpio_ext_pa4, GpioModeOutputPushPull); furi_hal_gpio_write(&gpio_ext_pa4, true); } @@ -28,9 +28,9 @@ void nrf24_deinit() { furi_hal_gpio_init(nrf24_CE_PIN, GpioModeAnalog, GpioPullNo, GpioSpeedLow); // resetting the CS pins to floating - if(XTREME_SETTINGS()->spi_nrf24_handle == SpiDefault) { + if(xtreme_settings.spi_nrf24_handle == SpiDefault) { furi_hal_gpio_init_simple(&gpio_ext_pc3, GpioModeAnalog); - } else if(XTREME_SETTINGS()->spi_nrf24_handle == SpiExtra) { + } else if(xtreme_settings.spi_nrf24_handle == SpiExtra) { furi_hal_gpio_init_simple(&gpio_ext_pa4, GpioModeAnalog); } } @@ -543,4 +543,4 @@ bool nrf24_check_connected(FuriHalSpiBusHandle* handle) { } else { return false; } -} \ No newline at end of file +} diff --git a/applications/external/nrf24mousejacker/lib/nrf24/nrf24.h b/applications/external/nrf24mousejacker/lib/nrf24/nrf24.h index 58dbad0c8..de9212af2 100644 --- a/applications/external/nrf24mousejacker/lib/nrf24/nrf24.h +++ b/applications/external/nrf24mousejacker/lib/nrf24/nrf24.h @@ -42,7 +42,7 @@ extern "C" { #define nrf24_TIMEOUT 500 #define nrf24_CE_PIN &gpio_ext_pb2 #define nrf24_HANDLE \ - (XTREME_SETTINGS()->spi_nrf24_handle == SpiDefault ? &furi_hal_spi_bus_handle_external : \ + (xtreme_settings.spi_nrf24_handle == SpiDefault ? &furi_hal_spi_bus_handle_external : \ &furi_hal_spi_bus_handle_external_extra) /* Low level API */ diff --git a/applications/external/nrf24scan/lib/nrf24/nrf24.c b/applications/external/nrf24scan/lib/nrf24/nrf24.c index acd0130c7..8ee8e7828 100644 --- a/applications/external/nrf24scan/lib/nrf24/nrf24.c +++ b/applications/external/nrf24scan/lib/nrf24/nrf24.c @@ -9,10 +9,10 @@ void nrf24_init() { // this is needed if multiple SPI devices are connected to the same bus but with different CS pins - if(XTREME_SETTINGS()->spi_nrf24_handle == SpiDefault) { + if(xtreme_settings.spi_nrf24_handle == SpiDefault) { furi_hal_gpio_init_simple(&gpio_ext_pc3, GpioModeOutputPushPull); furi_hal_gpio_write(&gpio_ext_pc3, true); - } else if(XTREME_SETTINGS()->spi_nrf24_handle == SpiExtra) { + } else if(xtreme_settings.spi_nrf24_handle == SpiExtra) { furi_hal_gpio_init_simple(&gpio_ext_pa4, GpioModeOutputPushPull); furi_hal_gpio_write(&gpio_ext_pa4, true); } @@ -30,9 +30,9 @@ void nrf24_deinit() { furi_hal_gpio_init(nrf24_CE_PIN, GpioModeAnalog, GpioPullNo, GpioSpeedLow); // resetting the CS pins to floating - if(XTREME_SETTINGS()->spi_nrf24_handle == SpiDefault) { + if(xtreme_settings.spi_nrf24_handle == SpiDefault) { furi_hal_gpio_init_simple(&gpio_ext_pc3, GpioModeAnalog); - } else if(XTREME_SETTINGS()->spi_nrf24_handle == SpiExtra) { + } else if(xtreme_settings.spi_nrf24_handle == SpiExtra) { furi_hal_gpio_init_simple(&gpio_ext_pa4, GpioModeAnalog); } } diff --git a/applications/external/nrf24scan/lib/nrf24/nrf24.h b/applications/external/nrf24scan/lib/nrf24/nrf24.h index d5fdced3b..5016a89ad 100644 --- a/applications/external/nrf24scan/lib/nrf24/nrf24.h +++ b/applications/external/nrf24scan/lib/nrf24/nrf24.h @@ -54,7 +54,7 @@ extern "C" { #define nrf24_TIMEOUT 500 #define nrf24_CE_PIN &gpio_ext_pb2 #define nrf24_HANDLE \ - (XTREME_SETTINGS()->spi_nrf24_handle == SpiDefault ? &furi_hal_spi_bus_handle_external : \ + (xtreme_settings.spi_nrf24_handle == SpiDefault ? &furi_hal_spi_bus_handle_external : \ &furi_hal_spi_bus_handle_external_extra) /* Low level API */ diff --git a/applications/external/nrf24sniff/lib/nrf24/nrf24.c b/applications/external/nrf24sniff/lib/nrf24/nrf24.c index 8b39cf5eb..fe62d5db3 100644 --- a/applications/external/nrf24sniff/lib/nrf24/nrf24.c +++ b/applications/external/nrf24sniff/lib/nrf24/nrf24.c @@ -7,10 +7,10 @@ void nrf24_init() { // this is needed if multiple SPI devices are connected to the same bus but with different CS pins - if(XTREME_SETTINGS()->spi_nrf24_handle == SpiDefault) { + if(xtreme_settings.spi_nrf24_handle == SpiDefault) { furi_hal_gpio_init_simple(&gpio_ext_pc3, GpioModeOutputPushPull); furi_hal_gpio_write(&gpio_ext_pc3, true); - } else if(XTREME_SETTINGS()->spi_nrf24_handle == SpiExtra) { + } else if(xtreme_settings.spi_nrf24_handle == SpiExtra) { furi_hal_gpio_init_simple(&gpio_ext_pa4, GpioModeOutputPushPull); furi_hal_gpio_write(&gpio_ext_pa4, true); } @@ -28,9 +28,9 @@ void nrf24_deinit() { furi_hal_gpio_init(nrf24_CE_PIN, GpioModeAnalog, GpioPullNo, GpioSpeedLow); // resetting the CS pins to floating - if(XTREME_SETTINGS()->spi_nrf24_handle == SpiDefault) { + if(xtreme_settings.spi_nrf24_handle == SpiDefault) { furi_hal_gpio_init_simple(&gpio_ext_pc3, GpioModeAnalog); - } else if(XTREME_SETTINGS()->spi_nrf24_handle == SpiExtra) { + } else if(xtreme_settings.spi_nrf24_handle == SpiExtra) { furi_hal_gpio_init_simple(&gpio_ext_pa4, GpioModeAnalog); } } diff --git a/applications/external/nrf24sniff/lib/nrf24/nrf24.h b/applications/external/nrf24sniff/lib/nrf24/nrf24.h index 58dbad0c8..de9212af2 100644 --- a/applications/external/nrf24sniff/lib/nrf24/nrf24.h +++ b/applications/external/nrf24sniff/lib/nrf24/nrf24.h @@ -42,7 +42,7 @@ extern "C" { #define nrf24_TIMEOUT 500 #define nrf24_CE_PIN &gpio_ext_pb2 #define nrf24_HANDLE \ - (XTREME_SETTINGS()->spi_nrf24_handle == SpiDefault ? &furi_hal_spi_bus_handle_external : \ + (xtreme_settings.spi_nrf24_handle == SpiDefault ? &furi_hal_spi_bus_handle_external : \ &furi_hal_spi_bus_handle_external_extra) /* Low level API */ diff --git a/applications/external/uart_terminal/uart_terminal_app_i.h b/applications/external/uart_terminal/uart_terminal_app_i.h index 5d2e3078c..ee831de21 100644 --- a/applications/external/uart_terminal/uart_terminal_app_i.h +++ b/applications/external/uart_terminal/uart_terminal_app_i.h @@ -18,9 +18,9 @@ #define UART_TERMINAL_TEXT_BOX_STORE_SIZE (4096) #define UART_TERMINAL_TEXT_INPUT_STORE_SIZE (512) -#define UART_CH \ - (XTREME_SETTINGS()->uart_general_channel == UARTDefault ? FuriHalUartIdUSART1 : \ - FuriHalUartIdLPUART1) +#define UART_CH \ + (xtreme_settings.uart_general_channel == UARTDefault ? FuriHalUartIdUSART1 : \ + FuriHalUartIdLPUART1) struct UART_TerminalApp { Gui* gui; diff --git a/applications/external/wifi_deauther/wifi_deauther_app_i.h b/applications/external/wifi_deauther/wifi_deauther_app_i.h index a26950d98..91d837d0c 100644 --- a/applications/external/wifi_deauther/wifi_deauther_app_i.h +++ b/applications/external/wifi_deauther/wifi_deauther_app_i.h @@ -14,9 +14,8 @@ #include -#define UART_CH \ - (XTREME_SETTINGS()->uart_esp_channel == UARTDefault ? FuriHalUartIdUSART1 : \ - FuriHalUartIdLPUART1) +#define UART_CH \ + (xtreme_settings.uart_esp_channel == UARTDefault ? FuriHalUartIdUSART1 : FuriHalUartIdLPUART1) #define NUM_MENU_ITEMS (11) diff --git a/applications/external/wifi_marauder_companion/wifi_marauder_app_i.h b/applications/external/wifi_marauder_companion/wifi_marauder_app_i.h index 13e76c0c2..6c846023f 100644 --- a/applications/external/wifi_marauder_companion/wifi_marauder_app_i.h +++ b/applications/external/wifi_marauder_companion/wifi_marauder_app_i.h @@ -28,9 +28,8 @@ #include #include -#define XTREME_UART_CH \ - (XTREME_SETTINGS()->uart_esp_channel == UARTDefault ? FuriHalUartIdUSART1 : \ - FuriHalUartIdLPUART1) +#define XTREME_UART_CH \ + (xtreme_settings.uart_esp_channel == UARTDefault ? FuriHalUartIdUSART1 : FuriHalUartIdLPUART1) #define US_ART_CH (FuriHalUartIdUSART1) #define LP_UART_CH (FuriHalUartIdLPUART1) diff --git a/applications/external/wifi_scanner/FlipperZeroWiFiModuleDefines.h b/applications/external/wifi_scanner/FlipperZeroWiFiModuleDefines.h index 8ec46ce79..f05c9bb9d 100644 --- a/applications/external/wifi_scanner/FlipperZeroWiFiModuleDefines.h +++ b/applications/external/wifi_scanner/FlipperZeroWiFiModuleDefines.h @@ -18,6 +18,5 @@ #include -#define UART_CH \ - (XTREME_SETTINGS()->uart_esp_channel == UARTDefault ? FuriHalUartIdUSART1 : \ - FuriHalUartIdLPUART1) +#define UART_CH \ + (xtreme_settings.uart_esp_channel == UARTDefault ? FuriHalUartIdUSART1 : FuriHalUartIdLPUART1) diff --git a/applications/main/archive/helpers/archive_browser.c b/applications/main/archive/helpers/archive_browser.c index d0111b363..c6efc5558 100644 --- a/applications/main/archive/helpers/archive_browser.c +++ b/applications/main/archive/helpers/archive_browser.c @@ -547,7 +547,7 @@ void archive_switch_tab(ArchiveBrowserView* browser, InputKey key) { } else { tab = (tab + 1) % ArchiveTabTotal; } - if(tab == ArchiveTabInternal && !XTREME_SETTINGS()->show_internal_tab) continue; + if(tab == ArchiveTabInternal && !xtreme_settings.show_internal_tab) continue; break; } @@ -579,10 +579,9 @@ void archive_switch_tab(ArchiveBrowserView* browser, InputKey key) { bool is_browser = !strcmp(archive_get_tab_ext(tab), "*"); bool skip_assets = !is_browser; // Hide dot files everywhere except Browser if in debug mode - bool hide_dot_files = !is_browser ? true : - tab == ArchiveTabInternal ? - false : - !XTREME_SETTINGS()->show_hidden_files; + bool hide_dot_files = !is_browser ? true : + tab == ArchiveTabInternal ? false : + !xtreme_settings.show_hidden_files; archive_file_browser_set_path( browser, browser->path, archive_get_tab_ext(tab), skip_assets, hide_dot_files); tab_empty = false; // Empty check will be performed later diff --git a/applications/main/archive/helpers/archive_files.h b/applications/main/archive/helpers/archive_files.h index 84a35ec30..702cb1c6b 100644 --- a/applications/main/archive/helpers/archive_files.h +++ b/applications/main/archive/helpers/archive_files.h @@ -84,7 +84,7 @@ static void ArchiveFile_t_clear(ArchiveFile_t* obj) { } static int ArchiveFile_t_cmp(const ArchiveFile_t* a, const ArchiveFile_t* b) { - if(XTREME_SETTINGS()->sort_dirs_first) { + if(xtreme_settings.sort_dirs_first) { if(a->type == ArchiveFileTypeFolder && b->type != ArchiveFileTypeFolder) { return -1; } diff --git a/applications/main/archive/helpers/favorite_timeout.c b/applications/main/archive/helpers/favorite_timeout.c index f38fb53c3..f0b02a1c4 100644 --- a/applications/main/archive/helpers/favorite_timeout.c +++ b/applications/main/archive/helpers/favorite_timeout.c @@ -17,7 +17,7 @@ void favorite_timeout_callback(void* _ctx) { } void favorite_timeout_run(ViewDispatcher* view_dispatcher, SceneManager* scene_manager) { - uint32_t timeout = XTREME_SETTINGS()->favorite_timeout; + uint32_t timeout = xtreme_settings.favorite_timeout; if(timeout == 0) { view_dispatcher_run(view_dispatcher); return; diff --git a/applications/main/bad_kb/bad_kb_app.c b/applications/main/bad_kb/bad_kb_app.c index e62ad4d3a..1c3156bcd 100644 --- a/applications/main/bad_kb/bad_kb_app.c +++ b/applications/main/bad_kb/bad_kb_app.c @@ -146,8 +146,8 @@ BadKbApp* bad_kb_app_alloc(char* arg) { Bt* bt = furi_record_open(RECORD_BT); app->bt = bt; app->bt->suppress_pin_screen = true; - app->is_bt = XTREME_SETTINGS()->bad_bt; - app->bt_remember = XTREME_SETTINGS()->bad_bt_remember; + app->is_bt = xtreme_settings.bad_bt; + app->bt_remember = xtreme_settings.bad_bt_remember; bad_kb_config_adjust(&app->config); // Save prev config diff --git a/applications/main/bad_kb/helpers/ducky_script.c b/applications/main/bad_kb/helpers/ducky_script.c index 0a02e162d..d55bacbc6 100644 --- a/applications/main/bad_kb/helpers/ducky_script.c +++ b/applications/main/bad_kb/helpers/ducky_script.c @@ -687,11 +687,10 @@ void bad_kb_config_refresh(BadKbApp* app) { scene_manager_previous_scene(app->scene_manager); // Update settings - XtremeSettings* xtreme_settings = XTREME_SETTINGS(); - if(xtreme_settings->bad_bt != app->is_bt || - xtreme_settings->bad_bt_remember != app->bt_remember) { - xtreme_settings->bad_bt = app->is_bt; - xtreme_settings->bad_bt_remember = app->bt_remember; + if(xtreme_settings.bad_bt != app->is_bt || + xtreme_settings.bad_bt_remember != app->bt_remember) { + xtreme_settings.bad_bt = app->is_bt; + xtreme_settings.bad_bt_remember = app->bt_remember; XTREME_SETTINGS_SAVE(); } } diff --git a/applications/main/bad_kb/views/bad_kb_view.c b/applications/main/bad_kb/views/bad_kb_view.c index 8bb4054a2..5ea6a1bf6 100644 --- a/applications/main/bad_kb/views/bad_kb_view.c +++ b/applications/main/bad_kb/views/bad_kb_view.c @@ -50,7 +50,7 @@ static void bad_kb_draw_callback(Canvas* canvas, void* _model) { if((state == BadKbStateIdle) || (state == BadKbStateDone) || (state == BadKbStateNotConnected)) { - if(XTREME_SETTINGS()->is_nsfw) { + if(xtreme_settings.is_nsfw) { elements_button_center(canvas, "Cum"); } else { elements_button_center(canvas, "Run"); @@ -73,7 +73,7 @@ static void bad_kb_draw_callback(Canvas* canvas, void* _model) { if(state == BadKbStateNotConnected) { canvas_draw_icon(canvas, 4, 26, &I_Clock_18x18); canvas_set_font(canvas, FontPrimary); - if(XTREME_SETTINGS()->is_nsfw) { + if(xtreme_settings.is_nsfw) { canvas_draw_str_aligned(canvas, 127, 31, AlignRight, AlignBottom, "Plug me"); canvas_draw_str_aligned(canvas, 127, 43, AlignRight, AlignBottom, "in, Daddy"); } else { @@ -83,7 +83,7 @@ static void bad_kb_draw_callback(Canvas* canvas, void* _model) { } else if(state == BadKbStateWillRun) { canvas_draw_icon(canvas, 4, 26, &I_Clock_18x18); canvas_set_font(canvas, FontPrimary); - if(XTREME_SETTINGS()->is_nsfw) { + if(xtreme_settings.is_nsfw) { canvas_draw_str_aligned(canvas, 127, 31, AlignRight, AlignBottom, "Will cum"); } else { canvas_draw_str_aligned(canvas, 127, 31, AlignRight, AlignBottom, "Will run"); diff --git a/applications/main/subghz/helpers/subghz_gps.h b/applications/main/subghz/helpers/subghz_gps.h index 6408a040d..bb42895a6 100644 --- a/applications/main/subghz/helpers/subghz_gps.h +++ b/applications/main/subghz/helpers/subghz_gps.h @@ -2,9 +2,8 @@ #include #include "minmea.h" -#define UART_CH \ - (XTREME_SETTINGS()->uart_nmea_channel == UARTDefault ? FuriHalUartIdUSART1 : \ - FuriHalUartIdLPUART1) +#define UART_CH \ + (xtreme_settings.uart_nmea_channel == UARTDefault ? FuriHalUartIdUSART1 : FuriHalUartIdLPUART1) #define RX_BUF_SIZE 1024 @@ -97,4 +96,4 @@ double subghz_gps_calc_distance(double lat1d, double lon1d, double lat2d, double * @param lon2 Longitude 2 * @return double Angle in degree */ -double subghz_gps_calc_angle(double lat1, double lon1, double lat2, double lon2); \ No newline at end of file +double subghz_gps_calc_angle(double lat1, double lon1, double lat2, double lon2); diff --git a/applications/main/subghz/scenes/subghz_scene_transmitter.c b/applications/main/subghz/scenes/subghz_scene_transmitter.c index 14ddb7fc2..8e8c096e0 100644 --- a/applications/main/subghz/scenes/subghz_scene_transmitter.c +++ b/applications/main/subghz/scenes/subghz_scene_transmitter.c @@ -81,7 +81,7 @@ void subghz_scene_transmitter_on_enter(void* context) { subghz->fav_timer = furi_timer_alloc(fav_timer_callback, FuriTimerTypeOnce, subghz); furi_timer_start( subghz->fav_timer, - XTREME_SETTINGS()->favorite_timeout * furi_kernel_get_tick_frequency()); + xtreme_settings.favorite_timeout * furi_kernel_get_tick_frequency()); // subghz->state_notifications = SubGhzNotificationStateTx; } } diff --git a/applications/main/subghz/subghz.c b/applications/main/subghz/subghz.c index 744ffc756..ab78c9c7c 100644 --- a/applications/main/subghz/subghz.c +++ b/applications/main/subghz/subghz.c @@ -373,7 +373,7 @@ int32_t subghz_app(char* p) { } // Check argument and run corresponding scene - bool is_favorite = process_favorite_launch(&p) && XTREME_SETTINGS()->favorite_timeout; + bool is_favorite = process_favorite_launch(&p) && xtreme_settings.favorite_timeout; if(p && strlen(p)) { uint32_t rpc_ctx = 0; diff --git a/applications/main/u2f/views/u2f_view.c b/applications/main/u2f/views/u2f_view.c index e80c0cbae..646278e06 100644 --- a/applications/main/u2f/views/u2f_view.c +++ b/applications/main/u2f/views/u2f_view.c @@ -21,7 +21,7 @@ static void u2f_view_draw_callback(Canvas* canvas, void* _model) { if(model->display_msg == U2fMsgNotConnected) { canvas_draw_icon(canvas, 22, 15, &I_Connect_me_62x31); - if(XTREME_SETTINGS()->is_nsfw) { + if(xtreme_settings.is_nsfw) { canvas_draw_str_aligned( canvas, 128 / 2, 3, AlignCenter, AlignTop, "Plug me in d-daddy"); } else { @@ -32,7 +32,7 @@ static void u2f_view_draw_callback(Canvas* canvas, void* _model) { canvas_draw_icon(canvas, 22, 15, &I_Connected_62x31); canvas_draw_str_aligned(canvas, 128 / 2, 3, AlignCenter, AlignTop, "Connected!"); } else if(model->display_msg == U2fMsgRegister) { - if(XTREME_SETTINGS()->is_nsfw) { + if(xtreme_settings.is_nsfw) { elements_button_center(canvas, "CUM"); canvas_draw_icon(canvas, 22, 15, &I_Auth_62x31); canvas_draw_str_aligned( @@ -44,7 +44,7 @@ static void u2f_view_draw_callback(Canvas* canvas, void* _model) { canvas, 128 / 2, 3, AlignCenter, AlignTop, "Press OK to register"); } } else if(model->display_msg == U2fMsgAuth) { - if(XTREME_SETTINGS()->is_nsfw) { + if(xtreme_settings.is_nsfw) { elements_button_center(canvas, "CUM"); canvas_draw_icon(canvas, 22, 15, &I_Auth_62x31); canvas_draw_str_aligned( @@ -57,7 +57,7 @@ static void u2f_view_draw_callback(Canvas* canvas, void* _model) { } } else if(model->display_msg == U2fMsgSuccess) { canvas_draw_icon(canvas, 22, 15, &I_Connected_62x31); - if(XTREME_SETTINGS()->is_nsfw) { + if(xtreme_settings.is_nsfw) { canvas_draw_str_aligned(canvas, 128 / 2, 3, AlignCenter, AlignTop, "Cum released~"); } else { canvas_draw_str_aligned( @@ -65,7 +65,7 @@ static void u2f_view_draw_callback(Canvas* canvas, void* _model) { } } else if(model->display_msg == U2fMsgError) { canvas_draw_icon(canvas, 22, 15, &I_Error_62x31); - if(XTREME_SETTINGS()->is_nsfw) { + if(xtreme_settings.is_nsfw) { canvas_draw_str_aligned(canvas, 128 / 2, 3, AlignCenter, AlignTop, "Unable to cum"); } else { canvas_draw_str_aligned( diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_filebrowser.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_filebrowser.c index 93093a54f..99e2a19a5 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_filebrowser.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_filebrowser.c @@ -16,7 +16,7 @@ static void xtreme_app_scene_interface_filebrowser_sort_dirs_first_changed(Varia XtremeApp* app = variable_item_get_context(item); bool value = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, value ? "ON" : "OFF"); - XTREME_SETTINGS()->sort_dirs_first = value; + xtreme_settings.sort_dirs_first = value; app->save_settings = true; } @@ -24,7 +24,7 @@ static void xtreme_app_scene_interface_filebrowser_show_hidden_files_changed(Var XtremeApp* app = variable_item_get_context(item); bool value = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, value ? "ON" : "OFF"); - XTREME_SETTINGS()->show_hidden_files = value; + xtreme_settings.show_hidden_files = value; app->save_settings = true; } @@ -32,7 +32,7 @@ static void xtreme_app_scene_interface_filebrowser_show_internal_tab_changed(Var XtremeApp* app = variable_item_get_context(item); bool value = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, value ? "ON" : "OFF"); - XTREME_SETTINGS()->show_internal_tab = value; + xtreme_settings.show_internal_tab = value; app->save_settings = true; } @@ -42,13 +42,12 @@ static void xtreme_app_scene_interface_filebrowser_favorite_timeout_changed(Vari char text[6]; snprintf(text, sizeof(text), "%lu S", value); variable_item_set_current_value_text(item, value ? text : "OFF"); - XTREME_SETTINGS()->favorite_timeout = value; + xtreme_settings.favorite_timeout = value; app->save_settings = true; } void xtreme_app_scene_interface_filebrowser_on_enter(void* context) { XtremeApp* app = context; - XtremeSettings* xtreme_settings = XTREME_SETTINGS(); VariableItemList* var_item_list = app->var_item_list; VariableItem* item; @@ -58,8 +57,8 @@ void xtreme_app_scene_interface_filebrowser_on_enter(void* context) { 2, xtreme_app_scene_interface_filebrowser_sort_dirs_first_changed, app); - variable_item_set_current_value_index(item, xtreme_settings->sort_dirs_first); - variable_item_set_current_value_text(item, xtreme_settings->sort_dirs_first ? "ON" : "OFF"); + variable_item_set_current_value_index(item, xtreme_settings.sort_dirs_first); + variable_item_set_current_value_text(item, xtreme_settings.sort_dirs_first ? "ON" : "OFF"); item = variable_item_list_add( var_item_list, @@ -67,8 +66,8 @@ void xtreme_app_scene_interface_filebrowser_on_enter(void* context) { 2, xtreme_app_scene_interface_filebrowser_show_hidden_files_changed, app); - variable_item_set_current_value_index(item, xtreme_settings->show_hidden_files); - variable_item_set_current_value_text(item, xtreme_settings->show_hidden_files ? "ON" : "OFF"); + variable_item_set_current_value_index(item, xtreme_settings.show_hidden_files); + variable_item_set_current_value_text(item, xtreme_settings.show_hidden_files ? "ON" : "OFF"); item = variable_item_list_add( var_item_list, @@ -76,8 +75,8 @@ void xtreme_app_scene_interface_filebrowser_on_enter(void* context) { 2, xtreme_app_scene_interface_filebrowser_show_internal_tab_changed, app); - variable_item_set_current_value_index(item, xtreme_settings->show_internal_tab); - variable_item_set_current_value_text(item, xtreme_settings->show_internal_tab ? "ON" : "OFF"); + variable_item_set_current_value_index(item, xtreme_settings.show_internal_tab); + variable_item_set_current_value_text(item, xtreme_settings.show_internal_tab ? "ON" : "OFF"); item = variable_item_list_add( var_item_list, @@ -85,10 +84,10 @@ void xtreme_app_scene_interface_filebrowser_on_enter(void* context) { 61, xtreme_app_scene_interface_filebrowser_favorite_timeout_changed, app); - variable_item_set_current_value_index(item, xtreme_settings->favorite_timeout); + variable_item_set_current_value_index(item, xtreme_settings.favorite_timeout); char text[4]; - snprintf(text, sizeof(text), "%lu S", xtreme_settings->favorite_timeout); - variable_item_set_current_value_text(item, xtreme_settings->favorite_timeout ? text : "OFF"); + snprintf(text, sizeof(text), "%lu S", xtreme_settings.favorite_timeout); + variable_item_set_current_value_text(item, xtreme_settings.favorite_timeout ? text : "OFF"); variable_item_list_set_enter_callback( var_item_list, xtreme_app_scene_interface_filebrowser_var_item_list_callback, app); diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_graphics.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_graphics.c index c03b2abb3..0420af5f5 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_graphics.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_graphics.c @@ -19,7 +19,7 @@ static void xtreme_app_scene_interface_graphics_asset_pack_changed(VariableItem* variable_item_set_current_value_text( item, index == 0 ? "Default" : *CharList_get(app->asset_pack_names, index - 1)); strlcpy( - XTREME_SETTINGS()->asset_pack, + xtreme_settings.asset_pack, index == 0 ? "" : *CharList_get(app->asset_pack_names, index - 1), XTREME_ASSETS_PACK_NAME_LEN); app->asset_pack_index = index; @@ -59,7 +59,7 @@ static void xtreme_app_scene_interface_graphics_anim_speed_changed(VariableItem* XtremeApp* app = variable_item_get_context(item); uint8_t index = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, anim_speed_names[index]); - XTREME_SETTINGS()->anim_speed = anim_speed_values[index]; + xtreme_settings.anim_speed = anim_speed_values[index]; app->save_settings = true; } @@ -97,7 +97,7 @@ static void xtreme_app_scene_interface_graphics_cycle_anims_changed(VariableItem XtremeApp* app = variable_item_get_context(item); uint8_t index = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, cycle_anims_names[index]); - XTREME_SETTINGS()->cycle_anims = cycle_anims_values[index]; + xtreme_settings.cycle_anims = cycle_anims_values[index]; app->save_settings = true; } @@ -105,7 +105,7 @@ static void xtreme_app_scene_interface_graphics_unlock_anims_changed(VariableIte XtremeApp* app = variable_item_get_context(item); bool value = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, value ? "ON" : "OFF"); - XTREME_SETTINGS()->unlock_anims = value; + xtreme_settings.unlock_anims = value; app->save_settings = true; } @@ -113,13 +113,12 @@ static void xtreme_app_scene_interface_graphics_fallback_anim_changed(VariableIt XtremeApp* app = variable_item_get_context(item); bool value = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, value ? "ON" : "OFF"); - XTREME_SETTINGS()->fallback_anim = value; + xtreme_settings.fallback_anim = value; app->save_settings = true; } void xtreme_app_scene_interface_graphics_on_enter(void* context) { XtremeApp* app = context; - XtremeSettings* xtreme_settings = XTREME_SETTINGS(); VariableItemList* var_item_list = app->var_item_list; VariableItem* item; uint8_t value_index; @@ -144,7 +143,7 @@ void xtreme_app_scene_interface_graphics_on_enter(void* context) { xtreme_app_scene_interface_graphics_anim_speed_changed, app); value_index = value_index_uint32( - xtreme_settings->anim_speed, anim_speed_values, COUNT_OF(anim_speed_values)); + xtreme_settings.anim_speed, anim_speed_values, COUNT_OF(anim_speed_values)); variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_text(item, anim_speed_names[value_index]); @@ -155,7 +154,7 @@ void xtreme_app_scene_interface_graphics_on_enter(void* context) { xtreme_app_scene_interface_graphics_cycle_anims_changed, app); value_index = value_index_int32( - xtreme_settings->cycle_anims, cycle_anims_values, COUNT_OF(cycle_anims_values)); + xtreme_settings.cycle_anims, cycle_anims_values, COUNT_OF(cycle_anims_values)); variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_text(item, cycle_anims_names[value_index]); @@ -165,8 +164,8 @@ void xtreme_app_scene_interface_graphics_on_enter(void* context) { 2, xtreme_app_scene_interface_graphics_unlock_anims_changed, app); - variable_item_set_current_value_index(item, xtreme_settings->unlock_anims); - variable_item_set_current_value_text(item, xtreme_settings->unlock_anims ? "ON" : "OFF"); + variable_item_set_current_value_index(item, xtreme_settings.unlock_anims); + variable_item_set_current_value_text(item, xtreme_settings.unlock_anims ? "ON" : "OFF"); item = variable_item_list_add( var_item_list, @@ -174,8 +173,8 @@ void xtreme_app_scene_interface_graphics_on_enter(void* context) { 2, xtreme_app_scene_interface_graphics_fallback_anim_changed, app); - variable_item_set_current_value_index(item, xtreme_settings->fallback_anim); - variable_item_set_current_value_text(item, xtreme_settings->fallback_anim ? "ON" : "OFF"); + variable_item_set_current_value_index(item, xtreme_settings.fallback_anim); + variable_item_set_current_value_text(item, xtreme_settings.fallback_anim ? "ON" : "OFF"); variable_item_list_set_enter_callback( var_item_list, xtreme_app_scene_interface_graphics_var_item_list_callback, app); diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_lockscreen.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_lockscreen.c index b949b0410..4a7b60aac 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_lockscreen.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_lockscreen.c @@ -20,7 +20,7 @@ static void xtreme_app_scene_interface_lockscreen_lock_on_boot_changed(VariableI XtremeApp* app = variable_item_get_context(item); bool value = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, value ? "ON" : "OFF"); - XTREME_SETTINGS()->lock_on_boot = value; + xtreme_settings.lock_on_boot = value; app->save_settings = true; } @@ -28,7 +28,7 @@ static void xtreme_app_scene_interface_lockscreen_bad_pins_format_changed(Variab XtremeApp* app = variable_item_get_context(item); bool value = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, value ? "ON" : "OFF"); - XTREME_SETTINGS()->bad_pins_format = value; + xtreme_settings.bad_pins_format = value; app->save_settings = true; } @@ -37,7 +37,7 @@ static void XtremeApp* app = variable_item_get_context(item); bool value = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, value ? "ON" : "OFF"); - XTREME_SETTINGS()->allow_locked_rpc_commands = value; + xtreme_settings.allow_locked_rpc_commands = value; app->save_settings = true; } @@ -45,7 +45,7 @@ static void xtreme_app_scene_interface_lockscreen_lockscreen_time_changed(Variab XtremeApp* app = variable_item_get_context(item); bool value = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, value ? "ON" : "OFF"); - XTREME_SETTINGS()->lockscreen_time = value; + xtreme_settings.lockscreen_time = value; app->save_settings = true; } @@ -53,7 +53,7 @@ static void xtreme_app_scene_interface_lockscreen_lockscreen_seconds_changed(Var XtremeApp* app = variable_item_get_context(item); bool value = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, value ? "ON" : "OFF"); - XTREME_SETTINGS()->lockscreen_seconds = value; + xtreme_settings.lockscreen_seconds = value; app->save_settings = true; } @@ -61,7 +61,7 @@ static void xtreme_app_scene_interface_lockscreen_lockscreen_date_changed(Variab XtremeApp* app = variable_item_get_context(item); bool value = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, value ? "ON" : "OFF"); - XTREME_SETTINGS()->lockscreen_date = value; + xtreme_settings.lockscreen_date = value; app->save_settings = true; } @@ -70,7 +70,7 @@ static void XtremeApp* app = variable_item_get_context(item); bool value = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, value ? "ON" : "OFF"); - XTREME_SETTINGS()->lockscreen_statusbar = value; + xtreme_settings.lockscreen_statusbar = value; app->save_settings = true; } @@ -78,7 +78,7 @@ static void xtreme_app_scene_interface_lockscreen_lockscreen_prompt_changed(Vari XtremeApp* app = variable_item_get_context(item); bool value = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, value ? "ON" : "OFF"); - XTREME_SETTINGS()->lockscreen_prompt = value; + xtreme_settings.lockscreen_prompt = value; app->save_settings = true; } @@ -87,13 +87,12 @@ static void XtremeApp* app = variable_item_get_context(item); bool value = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, value ? "ON" : "OFF"); - XTREME_SETTINGS()->lockscreen_transparent = value; + xtreme_settings.lockscreen_transparent = value; app->save_settings = true; } void xtreme_app_scene_interface_lockscreen_on_enter(void* context) { XtremeApp* app = context; - XtremeSettings* xtreme_settings = XTREME_SETTINGS(); VariableItemList* var_item_list = app->var_item_list; VariableItem* item; @@ -103,8 +102,8 @@ void xtreme_app_scene_interface_lockscreen_on_enter(void* context) { 2, xtreme_app_scene_interface_lockscreen_lock_on_boot_changed, app); - variable_item_set_current_value_index(item, xtreme_settings->lock_on_boot); - variable_item_set_current_value_text(item, xtreme_settings->lock_on_boot ? "ON" : "OFF"); + variable_item_set_current_value_index(item, xtreme_settings.lock_on_boot); + variable_item_set_current_value_text(item, xtreme_settings.lock_on_boot ? "ON" : "OFF"); item = variable_item_list_add( var_item_list, @@ -112,8 +111,8 @@ void xtreme_app_scene_interface_lockscreen_on_enter(void* context) { 2, xtreme_app_scene_interface_lockscreen_bad_pins_format_changed, app); - variable_item_set_current_value_index(item, xtreme_settings->bad_pins_format); - variable_item_set_current_value_text(item, xtreme_settings->bad_pins_format ? "ON" : "OFF"); + variable_item_set_current_value_index(item, xtreme_settings.bad_pins_format); + variable_item_set_current_value_text(item, xtreme_settings.bad_pins_format ? "ON" : "OFF"); item = variable_item_list_add( var_item_list, @@ -121,9 +120,9 @@ void xtreme_app_scene_interface_lockscreen_on_enter(void* context) { 2, xtreme_app_scene_interface_lockscreen_allow_locked_rpc_commands_changed, app); - variable_item_set_current_value_index(item, xtreme_settings->allow_locked_rpc_commands); + variable_item_set_current_value_index(item, xtreme_settings.allow_locked_rpc_commands); variable_item_set_current_value_text( - item, xtreme_settings->allow_locked_rpc_commands ? "ON" : "OFF"); + item, xtreme_settings.allow_locked_rpc_commands ? "ON" : "OFF"); item = variable_item_list_add( var_item_list, @@ -131,8 +130,8 @@ void xtreme_app_scene_interface_lockscreen_on_enter(void* context) { 2, xtreme_app_scene_interface_lockscreen_lockscreen_time_changed, app); - variable_item_set_current_value_index(item, xtreme_settings->lockscreen_time); - variable_item_set_current_value_text(item, xtreme_settings->lockscreen_time ? "ON" : "OFF"); + variable_item_set_current_value_index(item, xtreme_settings.lockscreen_time); + variable_item_set_current_value_text(item, xtreme_settings.lockscreen_time ? "ON" : "OFF"); item = variable_item_list_add( var_item_list, @@ -140,8 +139,8 @@ void xtreme_app_scene_interface_lockscreen_on_enter(void* context) { 2, xtreme_app_scene_interface_lockscreen_lockscreen_seconds_changed, app); - variable_item_set_current_value_index(item, xtreme_settings->lockscreen_seconds); - variable_item_set_current_value_text(item, xtreme_settings->lockscreen_seconds ? "ON" : "OFF"); + variable_item_set_current_value_index(item, xtreme_settings.lockscreen_seconds); + variable_item_set_current_value_text(item, xtreme_settings.lockscreen_seconds ? "ON" : "OFF"); item = variable_item_list_add( var_item_list, @@ -149,8 +148,8 @@ void xtreme_app_scene_interface_lockscreen_on_enter(void* context) { 2, xtreme_app_scene_interface_lockscreen_lockscreen_date_changed, app); - variable_item_set_current_value_index(item, xtreme_settings->lockscreen_date); - variable_item_set_current_value_text(item, xtreme_settings->lockscreen_date ? "ON" : "OFF"); + variable_item_set_current_value_index(item, xtreme_settings.lockscreen_date); + variable_item_set_current_value_text(item, xtreme_settings.lockscreen_date ? "ON" : "OFF"); item = variable_item_list_add( var_item_list, @@ -158,9 +157,9 @@ void xtreme_app_scene_interface_lockscreen_on_enter(void* context) { 2, xtreme_app_scene_interface_lockscreen_lockscreen_statusbar_changed, app); - variable_item_set_current_value_index(item, xtreme_settings->lockscreen_statusbar); + variable_item_set_current_value_index(item, xtreme_settings.lockscreen_statusbar); variable_item_set_current_value_text( - item, xtreme_settings->lockscreen_statusbar ? "ON" : "OFF"); + item, xtreme_settings.lockscreen_statusbar ? "ON" : "OFF"); item = variable_item_list_add( var_item_list, @@ -168,8 +167,8 @@ void xtreme_app_scene_interface_lockscreen_on_enter(void* context) { 2, xtreme_app_scene_interface_lockscreen_lockscreen_prompt_changed, app); - variable_item_set_current_value_index(item, xtreme_settings->lockscreen_prompt); - variable_item_set_current_value_text(item, xtreme_settings->lockscreen_prompt ? "ON" : "OFF"); + variable_item_set_current_value_index(item, xtreme_settings.lockscreen_prompt); + variable_item_set_current_value_text(item, xtreme_settings.lockscreen_prompt ? "ON" : "OFF"); item = variable_item_list_add( var_item_list, @@ -177,9 +176,9 @@ void xtreme_app_scene_interface_lockscreen_on_enter(void* context) { 2, xtreme_app_scene_interface_lockscreen_lockscreen_transparent_changed, app); - variable_item_set_current_value_index(item, xtreme_settings->lockscreen_transparent); + variable_item_set_current_value_index(item, xtreme_settings.lockscreen_transparent); variable_item_set_current_value_text( - item, xtreme_settings->lockscreen_transparent ? "ON" : "OFF"); + item, xtreme_settings.lockscreen_transparent ? "ON" : "OFF"); variable_item_list_set_enter_callback( var_item_list, xtreme_app_scene_interface_lockscreen_var_item_list_callback, app); diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_mainmenu.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_mainmenu.c index b72c8062e..d9f973790 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_mainmenu.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_mainmenu.c @@ -29,7 +29,7 @@ static void xtreme_app_scene_interface_mainmenu_menu_style_changed(VariableItem* XtremeApp* app = variable_item_get_context(item); uint8_t index = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, menu_style_names[index]); - XTREME_SETTINGS()->menu_style = index; + xtreme_settings.menu_style = index; app->save_settings = true; } @@ -68,7 +68,6 @@ static void xtreme_app_scene_interface_mainmenu_move_app_changed(VariableItem* i void xtreme_app_scene_interface_mainmenu_on_enter(void* context) { XtremeApp* app = context; - XtremeSettings* xtreme_settings = XTREME_SETTINGS(); VariableItemList* var_item_list = app->var_item_list; VariableItem* item; @@ -78,8 +77,8 @@ void xtreme_app_scene_interface_mainmenu_on_enter(void* context) { MenuStyleCount, xtreme_app_scene_interface_mainmenu_menu_style_changed, app); - variable_item_set_current_value_index(item, xtreme_settings->menu_style); - variable_item_set_current_value_text(item, menu_style_names[xtreme_settings->menu_style]); + variable_item_set_current_value_index(item, xtreme_settings.menu_style); + variable_item_set_current_value_text(item, menu_style_names[xtreme_settings.menu_style]); variable_item_list_add(var_item_list, "Reset Menu", 0, NULL, app); diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_statusbar.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_statusbar.c index 953c08c95..b29269631 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_statusbar.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_statusbar.c @@ -26,7 +26,7 @@ static void xtreme_app_scene_interface_statusbar_battery_icon_changed(VariableIt XtremeApp* app = variable_item_get_context(item); uint8_t index = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, battery_icon_names[index]); - XTREME_SETTINGS()->battery_icon = index; + xtreme_settings.battery_icon = index; app->save_settings = true; power_set_battery_icon_enabled(furi_record_open(RECORD_POWER), index != BatteryIconOff); furi_record_close(RECORD_POWER); @@ -36,7 +36,7 @@ static void xtreme_app_scene_interface_statusbar_statusbar_clock_changed(Variabl XtremeApp* app = variable_item_get_context(item); bool value = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, value ? "ON" : "OFF"); - XTREME_SETTINGS()->statusbar_clock = value; + xtreme_settings.statusbar_clock = value; app->save_settings = true; } @@ -44,7 +44,7 @@ static void xtreme_app_scene_interface_statusbar_status_icons_changed(VariableIt XtremeApp* app = variable_item_get_context(item); bool value = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, value ? "ON" : "OFF"); - XTREME_SETTINGS()->status_icons = value; + xtreme_settings.status_icons = value; app->save_settings = true; } @@ -52,7 +52,7 @@ static void xtreme_app_scene_interface_statusbar_bar_borders_changed(VariableIte XtremeApp* app = variable_item_get_context(item); bool value = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, value ? "ON" : "OFF"); - XTREME_SETTINGS()->bar_borders = value; + xtreme_settings.bar_borders = value; app->save_settings = true; } @@ -60,13 +60,12 @@ static void xtreme_app_scene_interface_statusbar_bar_background_changed(Variable XtremeApp* app = variable_item_get_context(item); bool value = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, value ? "ON" : "OFF"); - XTREME_SETTINGS()->bar_background = value; + xtreme_settings.bar_background = value; app->save_settings = true; } void xtreme_app_scene_interface_statusbar_on_enter(void* context) { XtremeApp* app = context; - XtremeSettings* xtreme_settings = XTREME_SETTINGS(); VariableItemList* var_item_list = app->var_item_list; VariableItem* item; @@ -76,8 +75,8 @@ void xtreme_app_scene_interface_statusbar_on_enter(void* context) { BatteryIconCount, xtreme_app_scene_interface_statusbar_battery_icon_changed, app); - variable_item_set_current_value_index(item, xtreme_settings->battery_icon); - variable_item_set_current_value_text(item, battery_icon_names[xtreme_settings->battery_icon]); + variable_item_set_current_value_index(item, xtreme_settings.battery_icon); + variable_item_set_current_value_text(item, battery_icon_names[xtreme_settings.battery_icon]); item = variable_item_list_add( var_item_list, @@ -85,8 +84,8 @@ void xtreme_app_scene_interface_statusbar_on_enter(void* context) { 2, xtreme_app_scene_interface_statusbar_statusbar_clock_changed, app); - variable_item_set_current_value_index(item, xtreme_settings->statusbar_clock); - variable_item_set_current_value_text(item, xtreme_settings->statusbar_clock ? "ON" : "OFF"); + variable_item_set_current_value_index(item, xtreme_settings.statusbar_clock); + variable_item_set_current_value_text(item, xtreme_settings.statusbar_clock ? "ON" : "OFF"); item = variable_item_list_add( var_item_list, @@ -94,8 +93,8 @@ void xtreme_app_scene_interface_statusbar_on_enter(void* context) { 2, xtreme_app_scene_interface_statusbar_status_icons_changed, app); - variable_item_set_current_value_index(item, xtreme_settings->status_icons); - variable_item_set_current_value_text(item, xtreme_settings->status_icons ? "ON" : "OFF"); + variable_item_set_current_value_index(item, xtreme_settings.status_icons); + variable_item_set_current_value_text(item, xtreme_settings.status_icons ? "ON" : "OFF"); item = variable_item_list_add( var_item_list, @@ -103,8 +102,8 @@ void xtreme_app_scene_interface_statusbar_on_enter(void* context) { 2, xtreme_app_scene_interface_statusbar_bar_borders_changed, app); - variable_item_set_current_value_index(item, xtreme_settings->bar_borders); - variable_item_set_current_value_text(item, xtreme_settings->bar_borders ? "ON" : "OFF"); + variable_item_set_current_value_index(item, xtreme_settings.bar_borders); + variable_item_set_current_value_text(item, xtreme_settings.bar_borders ? "ON" : "OFF"); item = variable_item_list_add( var_item_list, @@ -112,8 +111,8 @@ void xtreme_app_scene_interface_statusbar_on_enter(void* context) { 2, xtreme_app_scene_interface_statusbar_bar_background_changed, app); - variable_item_set_current_value_index(item, xtreme_settings->bar_background); - variable_item_set_current_value_text(item, xtreme_settings->bar_background ? "ON" : "OFF"); + variable_item_set_current_value_index(item, xtreme_settings.bar_background); + variable_item_set_current_value_text(item, xtreme_settings.bar_background ? "ON" : "OFF"); variable_item_list_set_enter_callback( var_item_list, xtreme_app_scene_interface_statusbar_var_item_list_callback, app); diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c index 677bebe8f..8b74d2bb8 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_misc.c @@ -20,13 +20,12 @@ static void xtreme_app_scene_misc_charge_cap_changed(VariableItem* item) { uint32_t value = (variable_item_get_current_value_index(item) + 1) * CHARGE_CAP_INTV; snprintf(cap_str, 6, "%lu%%", value); variable_item_set_current_value_text(item, cap_str); - XTREME_SETTINGS()->charge_cap = value; + xtreme_settings.charge_cap = value; app->save_settings = true; } void xtreme_app_scene_misc_on_enter(void* context) { XtremeApp* app = context; - XtremeSettings* xtreme_settings = XTREME_SETTINGS(); VariableItemList* var_item_list = app->var_item_list; VariableItem* item; uint8_t value_index; @@ -40,7 +39,7 @@ void xtreme_app_scene_misc_on_enter(void* context) { variable_item_list_add(var_item_list, "Change Device Name", 0, NULL, app); char cap_str[6]; - value_index = xtreme_settings->charge_cap / CHARGE_CAP_INTV; + value_index = xtreme_settings.charge_cap / CHARGE_CAP_INTV; snprintf(cap_str, 6, "%lu%%", (uint32_t)value_index * CHARGE_CAP_INTV); item = variable_item_list_add( var_item_list, diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_misc_dolphin.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_misc_dolphin.c index e4d344e09..06881e629 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_misc_dolphin.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_misc_dolphin.c @@ -57,14 +57,13 @@ static void xtreme_app_scene_misc_dolphin_butthurt_timer_changed(VariableItem* i XtremeApp* app = variable_item_get_context(item); uint8_t index = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, butthurt_timer_names[index]); - XTREME_SETTINGS()->butthurt_timer = butthurt_timer_values[index]; + xtreme_settings.butthurt_timer = butthurt_timer_values[index]; app->save_settings = true; app->require_reboot = true; } void xtreme_app_scene_misc_dolphin_on_enter(void* context) { XtremeApp* app = context; - XtremeSettings* xtreme_settings = XTREME_SETTINGS(); VariableItemList* var_item_list = app->var_item_list; VariableItem* item; uint8_t value_index; @@ -98,7 +97,7 @@ void xtreme_app_scene_misc_dolphin_on_enter(void* context) { xtreme_app_scene_misc_dolphin_butthurt_timer_changed, app); value_index = value_index_uint32( - xtreme_settings->butthurt_timer, butthurt_timer_values, COUNT_OF(butthurt_timer_values)); + xtreme_settings.butthurt_timer, butthurt_timer_values, COUNT_OF(butthurt_timer_values)); variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_text(item, butthurt_timer_names[value_index]); diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_misc_screen.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_misc_screen.c index 8f8a2bef5..e58236102 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_misc_screen.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_misc_screen.c @@ -22,7 +22,7 @@ static void xtreme_app_scene_misc_screen_dark_mode_changed(VariableItem* item) { XtremeApp* app = variable_item_get_context(item); bool value = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, value ? "ON" : "OFF"); - XTREME_SETTINGS()->dark_mode = value; + xtreme_settings.dark_mode = value; app->save_settings = true; } @@ -140,15 +140,14 @@ static void xtreme_app_scene_misc_screen_rainbow_saturation_changed(VariableItem void xtreme_app_scene_misc_screen_on_enter(void* context) { XtremeApp* app = context; - XtremeSettings* xtreme_settings = XTREME_SETTINGS(); VariableItemList* var_item_list = app->var_item_list; VariableItem* item; uint8_t value_index; item = variable_item_list_add( var_item_list, "Dark Mode", 2, xtreme_app_scene_misc_screen_dark_mode_changed, app); - variable_item_set_current_value_index(item, xtreme_settings->dark_mode); - variable_item_set_current_value_text(item, xtreme_settings->dark_mode ? "ON" : "OFF"); + variable_item_set_current_value_index(item, xtreme_settings.dark_mode); + variable_item_set_current_value_text(item, xtreme_settings.dark_mode ? "ON" : "OFF"); item = variable_item_list_add( var_item_list, "Left Handed", 2, xtreme_app_scene_misc_screen_hand_orient_changed, app); @@ -157,7 +156,7 @@ void xtreme_app_scene_misc_screen_on_enter(void* context) { variable_item_set_current_value_text(item, value ? "ON" : "OFF"); item = variable_item_list_add(var_item_list, "RGB Backlight", 1, NULL, app); - variable_item_set_current_value_text(item, xtreme_settings->rgb_backlight ? "ON" : "OFF"); + variable_item_set_current_value_text(item, xtreme_settings.rgb_backlight ? "ON" : "OFF"); struct { uint8_t led; @@ -190,7 +189,7 @@ void xtreme_app_scene_misc_screen_on_enter(void* context) { snprintf(str, sizeof(str), "%02X%02X%02X", color.r, color.g, color.b); variable_item_set_current_value_text(item, str); } - variable_item_set_locked(item, !xtreme_settings->rgb_backlight, "Needs RGB\nBacklight!"); + variable_item_set_locked(item, !xtreme_settings.rgb_backlight, "Needs RGB\nBacklight!"); } item = variable_item_list_add( @@ -202,7 +201,7 @@ void xtreme_app_scene_misc_screen_on_enter(void* context) { value_index = rgb_backlight_get_rainbow_mode(); variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_text(item, rainbow_lcd_names[value_index]); - variable_item_set_locked(item, !xtreme_settings->rgb_backlight, "Needs RGB\nBacklight!"); + variable_item_set_locked(item, !xtreme_settings.rgb_backlight, "Needs RGB\nBacklight!"); item = variable_item_list_add( var_item_list, @@ -215,7 +214,7 @@ void xtreme_app_scene_misc_screen_on_enter(void* context) { char speed_str[4]; snprintf(speed_str, sizeof(speed_str), "%d", value_index); variable_item_set_current_value_text(item, speed_str); - variable_item_set_locked(item, !xtreme_settings->rgb_backlight, "Needs RGB\nBacklight!"); + variable_item_set_locked(item, !xtreme_settings.rgb_backlight, "Needs RGB\nBacklight!"); item = variable_item_list_add( var_item_list, @@ -229,7 +228,7 @@ void xtreme_app_scene_misc_screen_on_enter(void* context) { COUNT_OF(rainbow_interval_values)); variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_text(item, rainbow_interval_names[value_index]); - variable_item_set_locked(item, !xtreme_settings->rgb_backlight, "Needs RGB\nBacklight!"); + variable_item_set_locked(item, !xtreme_settings.rgb_backlight, "Needs RGB\nBacklight!"); item = variable_item_list_add( var_item_list, @@ -242,7 +241,7 @@ void xtreme_app_scene_misc_screen_on_enter(void* context) { char saturation_str[4]; snprintf(saturation_str, sizeof(saturation_str), "%d", value_index); variable_item_set_current_value_text(item, saturation_str); - variable_item_set_locked(item, !xtreme_settings->rgb_backlight, "Needs RGB\nBacklight!"); + variable_item_set_locked(item, !xtreme_settings.rgb_backlight, "Needs RGB\nBacklight!"); variable_item_list_set_enter_callback( var_item_list, xtreme_app_scene_misc_screen_var_item_list_callback, app); @@ -263,7 +262,7 @@ bool xtreme_app_scene_misc_screen_on_event(void* context, SceneManagerEvent even consumed = true; switch(event.event) { case VarItemListIndexRgbBacklight: { - bool change = XTREME_SETTINGS()->rgb_backlight; + bool change = xtreme_settings.rgb_backlight; if(!change) { DialogMessage* msg = dialog_message_alloc(); dialog_message_set_header(msg, "RGB Backlight", 64, 0, AlignCenter, AlignTop); @@ -281,11 +280,11 @@ bool xtreme_app_scene_misc_screen_on_event(void* context, SceneManagerEvent even dialog_message_free(msg); } if(change) { - XTREME_SETTINGS()->rgb_backlight = !XTREME_SETTINGS()->rgb_backlight; + xtreme_settings.rgb_backlight = !xtreme_settings.rgb_backlight; app->save_settings = true; app->save_backlight = true; notification_message(app->notification, &sequence_display_backlight_on); - rgb_backlight_reconfigure(XTREME_SETTINGS()->rgb_backlight); + rgb_backlight_reconfigure(xtreme_settings.rgb_backlight); scene_manager_previous_scene(app->scene_manager); scene_manager_next_scene(app->scene_manager, XtremeAppSceneMiscScreen); } diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols.c index 5912d1e80..ccf8e2a34 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols.c @@ -17,7 +17,7 @@ static void xtreme_app_scene_protocols_bad_bt_changed(VariableItem* item) { XtremeApp* app = variable_item_get_context(item); bool value = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, value ? "BT" : "USB"); - XTREME_SETTINGS()->bad_bt = value; + xtreme_settings.bad_bt = value; app->save_settings = true; } @@ -25,7 +25,7 @@ static void xtreme_app_scene_protocols_bad_bt_remember_changed(VariableItem* ite XtremeApp* app = variable_item_get_context(item); bool value = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, value ? "ON" : "OFF"); - XTREME_SETTINGS()->bad_bt_remember = value; + xtreme_settings.bad_bt_remember = value; app->save_settings = true; } @@ -38,14 +38,13 @@ static void xtreme_app_scene_protocols_subghz_extend_changed(VariableItem* item) void xtreme_app_scene_protocols_on_enter(void* context) { XtremeApp* app = context; - XtremeSettings* xtreme_settings = XTREME_SETTINGS(); VariableItemList* var_item_list = app->var_item_list; VariableItem* item; item = variable_item_list_add( var_item_list, "BadKB Mode", 2, xtreme_app_scene_protocols_bad_bt_changed, app); - variable_item_set_current_value_index(item, xtreme_settings->bad_bt); - variable_item_set_current_value_text(item, xtreme_settings->bad_bt ? "BT" : "USB"); + variable_item_set_current_value_index(item, xtreme_settings.bad_bt); + variable_item_set_current_value_text(item, xtreme_settings.bad_bt ? "BT" : "USB"); item = variable_item_list_add( var_item_list, @@ -53,8 +52,8 @@ void xtreme_app_scene_protocols_on_enter(void* context) { 2, xtreme_app_scene_protocols_bad_bt_remember_changed, app); - variable_item_set_current_value_index(item, xtreme_settings->bad_bt_remember); - variable_item_set_current_value_text(item, xtreme_settings->bad_bt_remember ? "ON" : "OFF"); + variable_item_set_current_value_index(item, xtreme_settings.bad_bt_remember); + variable_item_set_current_value_text(item, xtreme_settings.bad_bt_remember ? "ON" : "OFF"); item = variable_item_list_add(var_item_list, "SubGHz Freqs", 0, NULL, app); variable_item_set_current_value_text(item, ">"); diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_gpio.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_gpio.c index 76bb03f75..2921fa30b 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_gpio.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols_gpio.c @@ -15,52 +15,51 @@ void xtreme_app_scene_protocols_gpio_var_item_list_callback(void* context, uint3 static void xtreme_app_scene_protocols_gpio_cc1101_handle_changed(VariableItem* item) { XtremeApp* app = variable_item_get_context(item); - XTREME_SETTINGS()->spi_cc1101_handle = + xtreme_settings.spi_cc1101_handle = variable_item_get_current_value_index(item) == 0 ? SpiDefault : SpiExtra; variable_item_set_current_value_text( - item, XTREME_SETTINGS()->spi_cc1101_handle == SpiDefault ? "Default" : "Extra"); + item, xtreme_settings.spi_cc1101_handle == SpiDefault ? "Default" : "Extra"); app->save_settings = true; } static void xtreme_app_scene_protocols_gpio_nrf24_handle_changed(VariableItem* item) { XtremeApp* app = variable_item_get_context(item); - XTREME_SETTINGS()->spi_nrf24_handle = + xtreme_settings.spi_nrf24_handle = variable_item_get_current_value_index(item) == 0 ? SpiDefault : SpiExtra; variable_item_set_current_value_text( - item, XTREME_SETTINGS()->spi_nrf24_handle == SpiDefault ? "Default" : "Extra"); + item, xtreme_settings.spi_nrf24_handle == SpiDefault ? "Default" : "Extra"); app->save_settings = true; } static void xtreme_app_scene_protocols_gpio_esp32_channel_changed(VariableItem* item) { XtremeApp* app = variable_item_get_context(item); - XTREME_SETTINGS()->uart_esp_channel = + xtreme_settings.uart_esp_channel = variable_item_get_current_value_index(item) == 0 ? UARTDefault : UARTExtra; variable_item_set_current_value_text( - item, XTREME_SETTINGS()->uart_esp_channel == UARTDefault ? "13,14" : "15,16"); + item, xtreme_settings.uart_esp_channel == UARTDefault ? "13,14" : "15,16"); app->save_settings = true; } static void xtreme_app_scene_protocols_gpio_nmea_channel_changed(VariableItem* item) { XtremeApp* app = variable_item_get_context(item); - XTREME_SETTINGS()->uart_nmea_channel = + xtreme_settings.uart_nmea_channel = variable_item_get_current_value_index(item) == 0 ? UARTDefault : UARTExtra; variable_item_set_current_value_text( - item, XTREME_SETTINGS()->uart_nmea_channel == UARTDefault ? "13,14" : "15,16"); + item, xtreme_settings.uart_nmea_channel == UARTDefault ? "13,14" : "15,16"); app->save_settings = true; } static void xtreme_app_scene_protocols_gpio_general_channel_changed(VariableItem* item) { XtremeApp* app = variable_item_get_context(item); - XTREME_SETTINGS()->uart_general_channel = + xtreme_settings.uart_general_channel = variable_item_get_current_value_index(item) == 0 ? UARTDefault : UARTExtra; variable_item_set_current_value_text( - item, XTREME_SETTINGS()->uart_general_channel == UARTDefault ? "13,14" : "15,16"); + item, xtreme_settings.uart_general_channel == UARTDefault ? "13,14" : "15,16"); app->save_settings = true; } void xtreme_app_scene_protocols_gpio_on_enter(void* context) { XtremeApp* app = context; - XtremeSettings* xtreme_settings = XTREME_SETTINGS(); VariableItemList* var_item_list = app->var_item_list; VariableItem* item; @@ -70,9 +69,9 @@ void xtreme_app_scene_protocols_gpio_on_enter(void* context) { 2, xtreme_app_scene_protocols_gpio_cc1101_handle_changed, app); - variable_item_set_current_value_index(item, xtreme_settings->spi_cc1101_handle); + variable_item_set_current_value_index(item, xtreme_settings.spi_cc1101_handle); variable_item_set_current_value_text( - item, xtreme_settings->spi_cc1101_handle == SpiDefault ? "Default" : "Extra"); + item, xtreme_settings.spi_cc1101_handle == SpiDefault ? "Default" : "Extra"); item = variable_item_list_add( var_item_list, @@ -80,9 +79,9 @@ void xtreme_app_scene_protocols_gpio_on_enter(void* context) { 2, xtreme_app_scene_protocols_gpio_nrf24_handle_changed, app); - variable_item_set_current_value_index(item, xtreme_settings->spi_nrf24_handle); + variable_item_set_current_value_index(item, xtreme_settings.spi_nrf24_handle); variable_item_set_current_value_text( - item, xtreme_settings->spi_nrf24_handle == SpiDefault ? "Default" : "Extra"); + item, xtreme_settings.spi_nrf24_handle == SpiDefault ? "Default" : "Extra"); item = variable_item_list_add( var_item_list, @@ -90,9 +89,9 @@ void xtreme_app_scene_protocols_gpio_on_enter(void* context) { 2, xtreme_app_scene_protocols_gpio_esp32_channel_changed, app); - variable_item_set_current_value_index(item, xtreme_settings->uart_esp_channel); + variable_item_set_current_value_index(item, xtreme_settings.uart_esp_channel); variable_item_set_current_value_text( - item, xtreme_settings->uart_esp_channel == UARTDefault ? "13,14" : "15,16"); + item, xtreme_settings.uart_esp_channel == UARTDefault ? "13,14" : "15,16"); item = variable_item_list_add( var_item_list, @@ -100,9 +99,9 @@ void xtreme_app_scene_protocols_gpio_on_enter(void* context) { 2, xtreme_app_scene_protocols_gpio_nmea_channel_changed, app); - variable_item_set_current_value_index(item, xtreme_settings->uart_nmea_channel); + variable_item_set_current_value_index(item, xtreme_settings.uart_nmea_channel); variable_item_set_current_value_text( - item, xtreme_settings->uart_nmea_channel == UARTDefault ? "13,14" : "15,16"); + item, xtreme_settings.uart_nmea_channel == UARTDefault ? "13,14" : "15,16"); item = variable_item_list_add( var_item_list, @@ -110,9 +109,9 @@ void xtreme_app_scene_protocols_gpio_on_enter(void* context) { 2, xtreme_app_scene_protocols_gpio_general_channel_changed, app); - variable_item_set_current_value_index(item, xtreme_settings->uart_general_channel); + variable_item_set_current_value_index(item, xtreme_settings.uart_general_channel); variable_item_set_current_value_text( - item, xtreme_settings->uart_general_channel == UARTDefault ? "13,14" : "15,16"); + item, xtreme_settings.uart_general_channel == UARTDefault ? "13,14" : "15,16"); variable_item_list_set_enter_callback( var_item_list, xtreme_app_scene_protocols_gpio_var_item_list_callback, app); diff --git a/applications/main/xtreme_app/xtreme_app.c b/applications/main/xtreme_app/xtreme_app.c index ce198a3e4..99aa7af14 100644 --- a/applications/main/xtreme_app/xtreme_app.c +++ b/applications/main/xtreme_app/xtreme_app.c @@ -206,8 +206,6 @@ XtremeApp* xtreme_app_alloc() { // Settings init - XtremeSettings* xtreme_settings = XTREME_SETTINGS(); - app->asset_pack_index = 0; CharList_init(app->asset_pack_names); Storage* storage = furi_record_open(RECORD_STORAGE); @@ -229,7 +227,7 @@ XtremeApp* xtreme_app_alloc() { if(app->asset_pack_index != 0) { if(idx < app->asset_pack_index) app->asset_pack_index++; } else { - if(strcmp(copy, xtreme_settings->asset_pack) == 0) + if(strcmp(copy, xtreme_settings.asset_pack) == 0) app->asset_pack_index = idx + 1; } } diff --git a/applications/services/desktop/animations/animation_manager.c b/applications/services/desktop/animations/animation_manager.c index 88ec09fce..dcc60bad1 100644 --- a/applications/services/desktop/animations/animation_manager.c +++ b/applications/services/desktop/animations/animation_manager.c @@ -148,7 +148,7 @@ void animation_manager_check_blocking_process(AnimationManager* animation_manage const StorageAnimationManifestInfo* manifest_info = animation_storage_get_meta(animation_manager->current_animation); bool valid = animation_manager_is_valid_idle_animation( - manifest_info, &stats, XTREME_SETTINGS()->unlock_anims); + manifest_info, &stats, xtreme_settings.unlock_anims); if(!valid) { animation_manager_start_new_idle(animation_manager); @@ -203,9 +203,8 @@ static void animation_manager_start_new_idle(AnimationManager* animation_manager const BubbleAnimation* bubble_animation = animation_storage_get_bubble_animation(animation_manager->current_animation); animation_manager->state = AnimationManagerStateIdle; - XtremeSettings* xtreme_settings = XTREME_SETTINGS(); - int32_t duration = (xtreme_settings->cycle_anims == 0) ? (bubble_animation->duration) : - (xtreme_settings->cycle_anims); + int32_t duration = (xtreme_settings.cycle_anims == 0) ? (bubble_animation->duration) : + (xtreme_settings.cycle_anims); furi_timer_start( animation_manager->idle_animation_timer, (duration > 0) ? (duration * 1000) : 0); } @@ -389,14 +388,14 @@ static StorageAnimation* furi_record_close(RECORD_DOLPHIN); uint32_t whole_weight = 0; - bool fallback = XTREME_SETTINGS()->fallback_anim; + bool fallback = xtreme_settings.fallback_anim; if(StorageAnimationList_size(animation_list) == dolphin_internal_size + 1 && !fallback) { // One ext anim and fallback disabled, dont skip current anim (current = only ext one) avoid_animation = NULL; } StorageAnimationList_it_t it; - bool unlock = XTREME_SETTINGS()->unlock_anims; + bool unlock = xtreme_settings.unlock_anims; for(StorageAnimationList_it(it, animation_list); !StorageAnimationList_end_p(it);) { StorageAnimation* storage_animation = *StorageAnimationList_ref(it); const StorageAnimationManifestInfo* manifest_info = @@ -531,7 +530,7 @@ void animation_manager_load_and_continue_animation(AnimationManager* animation_m const StorageAnimationManifestInfo* manifest_info = animation_storage_get_meta(restore_animation); bool valid = animation_manager_is_valid_idle_animation( - manifest_info, &stats, XTREME_SETTINGS()->unlock_anims); + manifest_info, &stats, xtreme_settings.unlock_anims); if(valid) { animation_manager_replace_current_animation( animation_manager, restore_animation); @@ -545,10 +544,9 @@ void animation_manager_load_and_continue_animation(AnimationManager* animation_m const BubbleAnimation* bubble_animation = animation_storage_get_bubble_animation( animation_manager->current_animation); - XtremeSettings* xtreme_settings = XTREME_SETTINGS(); - int32_t duration = (xtreme_settings->cycle_anims == 0) ? + int32_t duration = (xtreme_settings.cycle_anims == 0) ? (bubble_animation->duration) : - (xtreme_settings->cycle_anims); + (xtreme_settings.cycle_anims); furi_timer_start( animation_manager->idle_animation_timer, (duration > 0) ? (duration * 1000) : 0); diff --git a/applications/services/desktop/animations/animation_storage.c b/applications/services/desktop/animations/animation_storage.c index d8287c692..101140699 100644 --- a/applications/services/desktop/animations/animation_storage.c +++ b/applications/services/desktop/animations/animation_storage.c @@ -23,13 +23,12 @@ static void animation_storage_free_animation(BubbleAnimation** storage_animation static BubbleAnimation* animation_storage_load_animation(const char* name); void animation_handler_select_manifest() { - XtremeSettings* xtreme_settings = XTREME_SETTINGS(); FuriString* anim_dir = furi_string_alloc(); FuriString* manifest = furi_string_alloc(); - bool use_asset_pack = xtreme_settings->asset_pack[0] != '\0'; + bool use_asset_pack = xtreme_settings.asset_pack[0] != '\0'; if(use_asset_pack) { furi_string_printf( - anim_dir, "%s/%s/Anims", XTREME_ASSETS_PATH, xtreme_settings->asset_pack); + anim_dir, "%s/%s/Anims", XTREME_ASSETS_PATH, xtreme_settings.asset_pack); furi_string_printf(manifest, "%s/manifest.txt", furi_string_get_cstr(anim_dir)); Storage* storage = furi_record_open(RECORD_STORAGE); if(storage_common_stat(storage, furi_string_get_cstr(manifest), NULL) == FSE_OK) { @@ -514,7 +513,7 @@ static BubbleAnimation* animation_storage_load_animation(const char* name) { if(!flipper_format_read_uint32(ff, "Active cycles", &u32value, 1)) break; //-V779 animation->active_cycles = u32value; if(!flipper_format_read_uint32(ff, "Frame rate", &u32value, 1)) break; - uint32_t anim_speed = XTREME_SETTINGS()->anim_speed; + uint32_t anim_speed = xtreme_settings.anim_speed; u32value = (u32value * anim_speed) / 100; FURI_CONST_ASSIGN(animation->icon_animation.frame_rate, u32value < 1 ? 1 : u32value); if(!flipper_format_read_uint32(ff, "Duration", &u32value, 1)) break; diff --git a/applications/services/desktop/desktop.c b/applications/services/desktop/desktop.c index 32a346dba..f43877bf1 100644 --- a/applications/services/desktop/desktop.c +++ b/applications/services/desktop/desktop.c @@ -66,13 +66,13 @@ static void desktop_clock_reconfigure(Desktop* desktop) { desktop_clock_update(desktop); - if(XTREME_SETTINGS()->statusbar_clock) { + if(xtreme_settings.statusbar_clock) { furi_timer_start(desktop->update_clock_timer, furi_ms_to_ticks(1000)); } else { furi_timer_stop(desktop->update_clock_timer); } - view_port_enabled_set(desktop->clock_viewport, XTREME_SETTINGS()->statusbar_clock); + view_port_enabled_set(desktop->clock_viewport, xtreme_settings.statusbar_clock); } static void desktop_clock_draw_callback(Canvas* canvas, void* context) { @@ -209,7 +209,7 @@ void desktop_lock(Desktop* desktop, bool pin_lock) { Cli* cli = furi_record_open(RECORD_CLI); cli_session_close(cli); furi_record_close(RECORD_CLI); - if(!XTREME_SETTINGS()->allow_locked_rpc_commands) { + if(!xtreme_settings.allow_locked_rpc_commands) { Bt* bt = furi_record_open(RECORD_BT); bt_close_rpc_connection(bt); furi_record_close(RECORD_BT); @@ -484,7 +484,7 @@ int32_t desktop_srv(void* p) { scene_manager_next_scene(desktop->scene_manager, DesktopSceneMain); - if(XTREME_SETTINGS()->lock_on_boot || furi_hal_rtc_is_flag_set(FuriHalRtcFlagLock)) { + if(xtreme_settings.lock_on_boot || furi_hal_rtc_is_flag_set(FuriHalRtcFlagLock)) { desktop_lock(desktop, true); } else { if(!loader_is_locked(desktop->loader)) { diff --git a/applications/services/desktop/scenes/desktop_scene_fault.c b/applications/services/desktop/scenes/desktop_scene_fault.c index e6cadcaef..9a010af05 100644 --- a/applications/services/desktop/scenes/desktop_scene_fault.c +++ b/applications/services/desktop/scenes/desktop_scene_fault.c @@ -15,7 +15,7 @@ void desktop_scene_fault_on_enter(void* context) { Popup* popup = desktop->hw_mismatch_popup; popup_set_context(popup, desktop); - if(XTREME_SETTINGS()->is_nsfw) { + if(xtreme_settings.is_nsfw) { popup_set_header( popup, "Slut passed out\n but is now back", diff --git a/applications/services/desktop/scenes/desktop_scene_pin_input.c b/applications/services/desktop/scenes/desktop_scene_pin_input.c index f6af083f1..360d2cf7d 100644 --- a/applications/services/desktop/scenes/desktop_scene_pin_input.c +++ b/applications/services/desktop/scenes/desktop_scene_pin_input.c @@ -59,7 +59,7 @@ static void desktop_scene_pin_input_done_callback(const PinCode* pin_code, void* view_dispatcher_send_custom_event(desktop->view_dispatcher, DesktopPinInputEventUnlocked); } else { uint32_t pin_fails = furi_hal_rtc_get_pin_fails() + 1; - if(pin_fails >= 10 && XTREME_SETTINGS()->bad_pins_format) { + if(pin_fails >= 10 && xtreme_settings.bad_pins_format) { furi_hal_rtc_set_pin_fails(0); furi_hal_rtc_set_flag(FuriHalRtcFlagFactoryReset); storage_sd_format(furi_record_open(RECORD_STORAGE)); diff --git a/applications/services/desktop/views/desktop_view_lock_menu.c b/applications/services/desktop/views/desktop_view_lock_menu.c index 10e5860dd..6f2874d94 100644 --- a/applications/services/desktop/views/desktop_view_lock_menu.c +++ b/applications/services/desktop/views/desktop_view_lock_menu.c @@ -101,7 +101,7 @@ void desktop_lock_menu_draw_callback(Canvas* canvas, void* model) { break; case DesktopLockMenuIndexDarkMode: icon = &I_CC_DarkMode_16x16; - enabled = XTREME_SETTINGS()->dark_mode; + enabled = xtreme_settings.dark_mode; break; case DesktopLockMenuIndexLock: icon = &I_CC_Lock_16x16; @@ -287,7 +287,7 @@ bool desktop_lock_menu_input_callback(InputEvent* event, void* context) { desktop_event = DesktopLockMenuEventSettings; break; case DesktopLockMenuIndexDarkMode: - XTREME_SETTINGS()->dark_mode = !XTREME_SETTINGS()->dark_mode; + xtreme_settings.dark_mode = !xtreme_settings.dark_mode; lock_menu->save_xtreme = true; break; case DesktopLockMenuIndexBluetooth: diff --git a/applications/services/desktop/views/desktop_view_locked.c b/applications/services/desktop/views/desktop_view_locked.c index 2720cdbfc..7c677fb31 100644 --- a/applications/services/desktop/views/desktop_view_locked.c +++ b/applications/services/desktop/views/desktop_view_locked.c @@ -74,7 +74,6 @@ void desktop_view_locked_draw_lockscreen(Canvas* canvas, void* m) { furi_hal_rtc_get_datetime(&datetime); LocaleTimeFormat time_format = locale_get_time_format(); LocaleDateFormat date_format = locale_get_date_format(); - XtremeSettings* xtreme_settings = XTREME_SETTINGS(); bool pm; if(time_format == LocaleTimeFormat24h) { @@ -94,14 +93,14 @@ void desktop_view_locked_draw_lockscreen(Canvas* canvas, void* m) { snprintf(date_str, 14, "%.2d-%.2d-%.4d", datetime.day, datetime.month, datetime.year); } - if(!xtreme_settings->lockscreen_transparent) { + if(!xtreme_settings.lockscreen_transparent) { canvas_draw_icon(canvas, 0, 0 + y, &I_Lockscreen); } - if(xtreme_settings->lockscreen_time) { + if(xtreme_settings.lockscreen_time) { canvas_set_font(canvas, FontBigNumbers); canvas_draw_str(canvas, 0, 64 + y, time_str); int offset = canvas_string_width(canvas, time_str) + 2; - if(xtreme_settings->lockscreen_seconds) { + if(xtreme_settings.lockscreen_seconds) { canvas_set_font(canvas, FontSecondary); canvas_draw_str(canvas, 0 + offset, 64 + y, second_str); offset += canvas_string_width(canvas, ":00") + 2; @@ -111,12 +110,12 @@ void desktop_view_locked_draw_lockscreen(Canvas* canvas, void* m) { canvas_draw_str(canvas, 0 + offset, 64 + y, meridian_str); } } - if(xtreme_settings->lockscreen_date) { + if(xtreme_settings.lockscreen_date) { canvas_set_font(canvas, FontSecondary); - canvas_draw_str(canvas, 0, 48 + y + 16 * !xtreme_settings->lockscreen_time, date_str); + canvas_draw_str(canvas, 0, 48 + y + 16 * !xtreme_settings.lockscreen_time, date_str); } if(model->view_state == DesktopViewLockedStateLockedHintShown && - xtreme_settings->lockscreen_prompt) { + xtreme_settings.lockscreen_prompt) { canvas_set_font(canvas, FontSecondary); if(model->pin_locked) { elements_bubble_str( diff --git a/applications/services/dolphin/dolphin.c b/applications/services/dolphin/dolphin.c index 128d8b0ac..224af1df6 100644 --- a/applications/services/dolphin/dolphin.c +++ b/applications/services/dolphin/dolphin.c @@ -81,7 +81,7 @@ Dolphin* dolphin_alloc() { dolphin->state = dolphin_state_alloc(); dolphin->event_queue = furi_message_queue_alloc(8, sizeof(DolphinEvent)); dolphin->pubsub = furi_pubsub_alloc(); - uint32_t butthurt_timer = XTREME_SETTINGS()->butthurt_timer; + uint32_t butthurt_timer = xtreme_settings.butthurt_timer; dolphin->butthurt_timer = xTimerCreate( NULL, butthurt_timer ? ((int32_t)butthurt_timer * 1000) : -1, diff --git a/applications/services/gui/canvas.c b/applications/services/gui/canvas.c index fe11b6586..42814fb47 100644 --- a/applications/services/gui/canvas.c +++ b/applications/services/gui/canvas.c @@ -117,7 +117,7 @@ const CanvasFontParameters* canvas_get_font_params(const Canvas* canvas, Font fo void canvas_clear(Canvas* canvas) { furi_assert(canvas); - if(XTREME_SETTINGS()->dark_mode) { + if(xtreme_settings.dark_mode) { u8g2_FillBuffer(&canvas->fb); } else { u8g2_ClearBuffer(&canvas->fb); @@ -126,7 +126,7 @@ void canvas_clear(Canvas* canvas) { void canvas_set_color(Canvas* canvas, Color color) { furi_assert(canvas); - if(XTREME_SETTINGS()->dark_mode) { + if(xtreme_settings.dark_mode) { if(color == ColorBlack) { color = ColorWhite; } else if(color == ColorWhite) { diff --git a/applications/services/gui/gui.c b/applications/services/gui/gui.c index 23ebf33e7..471817f24 100644 --- a/applications/services/gui/gui.c +++ b/applications/services/gui/gui.c @@ -84,12 +84,10 @@ static void gui_redraw_status_bar(Gui* gui, bool need_attention) { canvas_frame_set( gui->canvas, GUI_STATUS_BAR_X, GUI_STATUS_BAR_Y, GUI_DISPLAY_WIDTH, GUI_STATUS_BAR_HEIGHT); - XtremeSettings* xtreme_settings = XTREME_SETTINGS(); - /* for support black theme - paint white area and * draw icon with transparent white color */ - if(xtreme_settings->bar_background) { + if(xtreme_settings.bar_background) { canvas_set_color(gui->canvas, ColorWhite); canvas_draw_box(gui->canvas, 1, 1, 9, 7); canvas_draw_box(gui->canvas, 7, 3, 58, 6); @@ -122,7 +120,7 @@ static void gui_redraw_status_bar(Gui* gui, bool need_attention) { width + 2, GUI_STATUS_BAR_WORKAREA_HEIGHT + 2); // Hide battery background - if(xtreme_settings->bar_borders) { + if(xtreme_settings.bar_borders) { canvas_set_color(gui->canvas, ColorWhite); canvas_draw_box( gui->canvas, -1, 0, canvas_width(gui->canvas) + 1, canvas_height(gui->canvas)); @@ -131,7 +129,7 @@ static void gui_redraw_status_bar(Gui* gui, bool need_attention) { // ViewPort draw canvas_frame_set( gui->canvas, - x - xtreme_settings->bar_borders, + x - xtreme_settings.bar_borders, GUI_STATUS_BAR_Y + 2, width, GUI_STATUS_BAR_WORKAREA_HEIGHT); @@ -148,7 +146,7 @@ static void gui_redraw_status_bar(Gui* gui, bool need_attention) { right_used + 4, GUI_STATUS_BAR_HEIGHT); // Disable battery border - if(xtreme_settings->bar_borders) { + if(xtreme_settings.bar_borders) { canvas_set_color(gui->canvas, ColorBlack); canvas_draw_rframe( gui->canvas, 0, 0, canvas_width(gui->canvas), canvas_height(gui->canvas), 1); @@ -168,7 +166,7 @@ static void gui_redraw_status_bar(Gui* gui, bool need_attention) { } // Left side - if(xtreme_settings->status_icons) { + if(xtreme_settings.status_icons) { x = 2; ViewPortArray_it(it, gui->layers[GuiLayerStatusBarLeft]); while(!ViewPortArray_end_p(it) && (right_used + left_used) < GUI_STATUS_BAR_WIDTH) { @@ -183,7 +181,7 @@ static void gui_redraw_status_bar(Gui* gui, bool need_attention) { GUI_STATUS_BAR_Y + 1, width + 2, GUI_STATUS_BAR_WORKAREA_HEIGHT + 2); - if(xtreme_settings->bar_borders) { + if(xtreme_settings.bar_borders) { canvas_set_color(gui->canvas, ColorWhite); canvas_draw_box( gui->canvas, 0, 0, canvas_width(gui->canvas), canvas_height(gui->canvas)); @@ -209,7 +207,7 @@ static void gui_redraw_status_bar(Gui* gui, bool need_attention) { GUI_STATUS_BAR_Y + 1, width + 2, GUI_STATUS_BAR_WORKAREA_HEIGHT + 2); - if(xtreme_settings->bar_borders) { + if(xtreme_settings.bar_borders) { canvas_set_color(gui->canvas, ColorWhite); canvas_draw_box( gui->canvas, 0, 0, canvas_width(gui->canvas), canvas_height(gui->canvas)); @@ -226,7 +224,7 @@ static void gui_redraw_status_bar(Gui* gui, bool need_attention) { // Draw frame around icons on the left if(left_used) { canvas_frame_set(gui->canvas, 0, 0, left_used + 3, GUI_STATUS_BAR_HEIGHT); - if(xtreme_settings->bar_borders) { + if(xtreme_settings.bar_borders) { canvas_draw_rframe( gui->canvas, 0, 0, canvas_width(gui->canvas), canvas_height(gui->canvas), 1); canvas_draw_line( @@ -283,7 +281,7 @@ static void gui_redraw(Gui* gui) { bool need_attention = (gui_view_port_find_enabled(gui->layers[GuiLayerWindow]) != 0 || gui_view_port_find_enabled(gui->layers[GuiLayerFullscreen]) != 0); - if(XTREME_SETTINGS()->lockscreen_statusbar) { + if(xtreme_settings.lockscreen_statusbar) { gui_redraw_status_bar(gui, need_attention); } } else { diff --git a/applications/services/gui/modules/file_browser.c b/applications/services/gui/modules/file_browser.c index edbd76446..edde31c20 100644 --- a/applications/services/gui/modules/file_browser.c +++ b/applications/services/gui/modules/file_browser.c @@ -85,7 +85,7 @@ static int BrowserItem_t_cmp(const BrowserItem_t* a, const BrowserItem_t* b) { if(b->type == BrowserItemTypeBack) { return 1; } - if(XTREME_SETTINGS()->sort_dirs_first) { + if(xtreme_settings.sort_dirs_first) { if(a->type == BrowserItemTypeFolder && b->type != BrowserItemTypeFolder) { return -1; } diff --git a/applications/services/gui/modules/menu.c b/applications/services/gui/modules/menu.c index 6307a4ebe..5f8983efa 100644 --- a/applications/services/gui/modules/menu.c +++ b/applications/services/gui/modules/menu.c @@ -99,7 +99,7 @@ static void menu_draw_callback(Canvas* canvas, void* _model) { MenuItem* item; size_t shift_position; FuriString* name = furi_string_alloc(); - switch(XTREME_SETTINGS()->menu_style) { + switch(xtreme_settings.menu_style) { case MenuStyleList: { for(uint8_t i = 0; i < 3; i++) { canvas_set_font(canvas, i == 1 ? FontPrimary : FontSecondary); @@ -442,7 +442,7 @@ static void menu_draw_callback(Canvas* canvas, void* _model) { static bool menu_input_callback(InputEvent* event, void* context) { Menu* menu = context; bool consumed = true; - if(XTREME_SETTINGS()->menu_style == MenuStyleVertical && + if(xtreme_settings.menu_style == MenuStyleVertical && furi_hal_rtc_is_flag_set(FuriHalRtcFlagHandOrient)) { if(event->key == InputKeyLeft) { event->key = InputKeyRight; @@ -651,7 +651,7 @@ static void menu_process_up(Menu* menu) { size_t count = MenuItemArray_size(model->items); size_t vertical_offset = model->vertical_offset; - switch(XTREME_SETTINGS()->menu_style) { + switch(xtreme_settings.menu_style) { case MenuStyleList: case MenuStyleEurocorp: case MenuStyleTerminal: @@ -703,7 +703,7 @@ static void menu_process_down(Menu* menu) { size_t count = MenuItemArray_size(model->items); size_t vertical_offset = model->vertical_offset; - switch(XTREME_SETTINGS()->menu_style) { + switch(xtreme_settings.menu_style) { case MenuStyleList: case MenuStyleEurocorp: case MenuStyleTerminal: @@ -755,7 +755,7 @@ static void menu_process_left(Menu* menu) { size_t count = MenuItemArray_size(model->items); size_t vertical_offset = model->vertical_offset; - switch(XTREME_SETTINGS()->menu_style) { + switch(xtreme_settings.menu_style) { case MenuStyleWii: if(position < 2) { if(count % 2) { @@ -818,7 +818,7 @@ static void menu_process_right(Menu* menu) { size_t count = MenuItemArray_size(model->items); size_t vertical_offset = model->vertical_offset; - switch(XTREME_SETTINGS()->menu_style) { + switch(xtreme_settings.menu_style) { case MenuStyleWii: if(count % 2) { if(position == count - 1) { diff --git a/applications/services/power/power_service/power.c b/applications/services/power/power_service/power.c index dd49c8de0..aa55efde2 100644 --- a/applications/services/power/power_service/power.c +++ b/applications/services/power/power_service/power.c @@ -16,7 +16,7 @@ void power_set_battery_icon_enabled(Power* power, bool is_enabled) { void power_draw_battery_callback(Canvas* canvas, void* context) { furi_assert(context); Power* power = context; - BatteryIcon battery_icon = XTREME_SETTINGS()->battery_icon; + BatteryIcon battery_icon = xtreme_settings.battery_icon; if(battery_icon == BatteryIconOff) return; canvas_draw_icon(canvas, 0, 0, &I_Battery_25x8); @@ -359,7 +359,7 @@ Power* power_alloc() { // Battery view port power->battery_view_port = power_battery_view_port_alloc(power); - power_set_battery_icon_enabled(power, XTREME_SETTINGS()->battery_icon != BatteryIconOff); + power_set_battery_icon_enabled(power, xtreme_settings.battery_icon != BatteryIconOff); power->show_low_bat_level_message = true; //Auto shutdown timer @@ -478,7 +478,7 @@ static void power_check_battery_level_change(Power* power) { } static void power_check_charge_cap(Power* power) { - uint32_t cap = XTREME_SETTINGS()->charge_cap; + uint32_t cap = xtreme_settings.charge_cap; if(power->info.charge >= cap && cap < 100) { if(!power->info.is_charge_capped) { // Suppress charging if charge reaches custom cap power->info.is_charge_capped = true; diff --git a/applications/services/rpc/rpc.c b/applications/services/rpc/rpc.c index 3393d948d..791b14478 100644 --- a/applications/services/rpc/rpc.c +++ b/applications/services/rpc/rpc.c @@ -376,8 +376,7 @@ static void rpc_session_thread_state_callback(FuriThreadState thread_state, void } RpcSession* rpc_session_open(Rpc* rpc, RpcOwner owner) { - if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagLock) && - !XTREME_SETTINGS()->allow_locked_rpc_commands) + if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagLock) && !xtreme_settings.allow_locked_rpc_commands) return NULL; furi_assert(rpc); diff --git a/applications/settings/desktop_settings/scenes/desktop_settings_scene_keybinds_action_type.c b/applications/settings/desktop_settings/scenes/desktop_settings_scene_keybinds_action_type.c index dc0acb5b5..b71e71727 100644 --- a/applications/settings/desktop_settings/scenes/desktop_settings_scene_keybinds_action_type.c +++ b/applications/settings/desktop_settings/scenes/desktop_settings_scene_keybinds_action_type.c @@ -47,7 +47,7 @@ static void const DialogsFileBrowserOptions browser_options = { .extension = extension, .icon = &I_unknown_10px, - .hide_dot_files = !XTREME_SETTINGS()->show_hidden_files, + .hide_dot_files = !xtreme_settings.show_hidden_files, .skip_assets = true, .hide_ext = hide_ext, .item_loader_callback = keybinds_fap_selector_item_callback, diff --git a/applications/settings/dolphin_passport/passport.c b/applications/settings/dolphin_passport/passport.c index fa7ca9e3a..fdfee9c84 100644 --- a/applications/settings/dolphin_passport/passport.c +++ b/applications/settings/dolphin_passport/passport.c @@ -38,7 +38,7 @@ static void render_callback(Canvas* canvas, void* _ctx) { const char* mood_str = NULL; const Icon* portrait = NULL; - if(XTREME_SETTINGS()->is_nsfw) { + if(xtreme_settings.is_nsfw) { if(stats->butthurt <= 4) { portrait = &I_passport_happy_46x49; mood_str = "Status: Wet"; diff --git a/applications/settings/power_settings_app/scenes/power_settings_scene_power_off.c b/applications/settings/power_settings_app/scenes/power_settings_scene_power_off.c index 65f10762f..9ad60bfd1 100644 --- a/applications/settings/power_settings_app/scenes/power_settings_scene_power_off.c +++ b/applications/settings/power_settings_app/scenes/power_settings_scene_power_off.c @@ -12,7 +12,7 @@ void power_settings_scene_power_off_on_enter(void* context) { DialogEx* dialog = app->dialog; dialog_ex_set_header(dialog, "Turn Off Device?", 64, 2, AlignCenter, AlignTop); - if(XTREME_SETTINGS()->is_nsfw) { + if(xtreme_settings.is_nsfw) { dialog_ex_set_text( dialog, " I will be\nwaiting for\n you master", 78, 16, AlignLeft, AlignTop); } else { diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index 2b8625f62..1f04be3f9 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -341,7 +341,6 @@ Function,-,SystemCoreClockUpdate,void, Function,-,SystemInit,void, Function,+,XTREME_ASSETS_FREE,void, Function,+,XTREME_ASSETS_LOAD,void, -Function,+,XTREME_SETTINGS,XtremeSettings*, Function,-,XTREME_SETTINGS_LOAD,void, Function,+,XTREME_SETTINGS_SAVE,void, Function,-,_Exit,void,int @@ -3894,3 +3893,4 @@ Variable,+,usb_cdc_single,FuriHalUsbInterface, Variable,+,usb_hid,FuriHalUsbInterface, Variable,+,usb_hid_u2f,FuriHalUsbInterface, Variable,+,usbd_devfs,const usbd_driver, +Variable,+,xtreme_settings,XtremeSettings, diff --git a/firmware/targets/f7/furi_hal/furi_hal_light.c b/firmware/targets/f7/furi_hal/furi_hal_light.c index df7c23d56..17d0e40a3 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_light.c +++ b/firmware/targets/f7/furi_hal/furi_hal_light.c @@ -44,7 +44,7 @@ void furi_hal_light_set(Light light, uint8_t value) { lp5562_set_channel_value(&furi_hal_i2c_handle_power, LP5562ChannelBlue, value); } if(light & LightBacklight) { - if(XTREME_SETTINGS()->rgb_backlight) { + if(xtreme_settings.rgb_backlight) { rgb_backlight_update(value, false); } else { uint8_t prev = diff --git a/lib/xtreme/assets.c b/lib/xtreme/assets.c index df28ebbc9..3ec556df6 100644 --- a/lib/xtreme/assets.c +++ b/lib/xtreme/assets.c @@ -10,7 +10,7 @@ #define ICONS_FMT XTREME_ASSETS_PATH "/%s/Icons/%s" void load_icon_animated(const Icon* replace, const char* name, FuriString* path, File* file) { - const char* pack = XTREME_SETTINGS()->asset_pack; + const char* pack = xtreme_settings.asset_pack; furi_string_printf(path, ICONS_FMT "/meta", pack, name); if(storage_file_open(file, furi_string_get_cstr(path), FSAM_READ, FSOM_OPEN_EXISTING)) { int32_t icon_width, icon_height, frame_rate, frame_count; @@ -61,7 +61,7 @@ void load_icon_animated(const Icon* replace, const char* name, FuriString* path, } void load_icon_static(const Icon* replace, const char* name, FuriString* path, File* file) { - furi_string_printf(path, ICONS_FMT ".bmx", XTREME_SETTINGS()->asset_pack, name); + furi_string_printf(path, ICONS_FMT ".bmx", xtreme_settings.asset_pack, name); if(storage_file_open(file, furi_string_get_cstr(path), FSAM_READ, FSOM_OPEN_EXISTING)) { uint64_t size = storage_file_size(file) - 8; uint8_t* frame = malloc(size); @@ -102,8 +102,8 @@ void free_icon(const Icon* icon) { } void XTREME_ASSETS_LOAD() { - const char* pack = XTREME_SETTINGS()->asset_pack; - XTREME_SETTINGS()->is_nsfw = !strncmp(pack, "NSFW", strlen("NSFW")); + const char* pack = xtreme_settings.asset_pack; + xtreme_settings.is_nsfw = !strncmp(pack, "NSFW", strlen("NSFW")); if(pack[0] == '\0') return; Storage* storage = furi_record_open(RECORD_STORAGE); diff --git a/lib/xtreme/settings.c b/lib/xtreme/settings.c index af432eb89..d178fae48 100644 --- a/lib/xtreme/settings.c +++ b/lib/xtreme/settings.c @@ -252,7 +252,3 @@ void XTREME_SETTINGS_SAVE() { flipper_format_free(file); furi_record_close(RECORD_STORAGE); } - -XtremeSettings* XTREME_SETTINGS() { - return &xtreme_settings; -} diff --git a/lib/xtreme/xtreme.h b/lib/xtreme/xtreme.h index 89a2fdb01..47760797d 100644 --- a/lib/xtreme/xtreme.h +++ b/lib/xtreme/xtreme.h @@ -92,7 +92,7 @@ typedef struct { void XTREME_SETTINGS_LOAD(); void XTREME_SETTINGS_SAVE(); -XtremeSettings* XTREME_SETTINGS(); +extern XtremeSettings xtreme_settings; void XTREME_ASSETS_LOAD(); void XTREME_ASSETS_FREE(); From 46fd5d2eae46cbbf511d8901b6bcfda094ec1573 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Fri, 27 Oct 2023 02:00:05 +0100 Subject: [PATCH 20/24] 195 devices! - i cba to organize these properly... credits to @xAstroBoy @Spooks4576 @DiamondRoPlayz --- .../external/ble_spam/protocols/fastpair.c | 156 +++++++++++++++++- 1 file changed, 152 insertions(+), 4 deletions(-) diff --git a/applications/external/ble_spam/protocols/fastpair.c b/applications/external/ble_spam/protocols/fastpair.c index 8d2e32c51..6f635b6cb 100644 --- a/applications/external/ble_spam/protocols/fastpair.c +++ b/applications/external/ble_spam/protocols/fastpair.c @@ -8,12 +8,10 @@ const struct { uint32_t value; const char* name; } models[] = { - // Genuine actions - {0x00000C, "Set Up Device"}, - // Genuine non-production/forgotten (good job Google) {0x0001F0, "Bisto CSR8670 Dev Board"}, {0x000047, "Arduino 101"}, + {0x470000, "Arduino 101 2"}, {0x00000A, "Anti-Spoof Test"}, {0x0A0000, "Anti-Spoof Test 2"}, {0x00000B, "Google Gphones"}, @@ -26,12 +24,30 @@ const struct { {0x080000, "Foocorp Foophones 2"}, {0x000009, "Test Android TV"}, {0x090000, "Test Android TV 2"}, + {0x000035, "Test 000035"}, + {0x350000, "Test 000035 2"}, {0x000048, "Fast Pair Headphones"}, - {0x000049, "Fast Pair Headphones 2"}, + {0x480000, "Fast Pair Headphones 2"}, + {0x000049, "Fast Pair Headphones 3"}, + {0x490000, "Fast Pair Headphones 4"}, + {0x001000, "LG HBS1110"}, + {0x00B727, "Smart Controller 1"}, + {0x01E5CE, "BLE-Phone"}, + {0x0200F0, "Goodyear"}, + {0x00F7D4, "Smart Setup"}, + {0xF00002, "Goodyear"}, + {0xF00400, "T10"}, + {0x1E89A7, "ATS2833_EVB"}, + + // Phone setup + {0x00000C, "Google Gphones Transfer"}, + {0x0577B1, "Galaxy S23 Ultra"}, + {0x05A9BC, "Galaxy S20+"}, // Genuine devices {0xCD8256, "Bose NC 700"}, {0x0000F0, "Bose QuietComfort 35 II"}, + {0xF00000, "Bose QuietComfort 35 II 2"}, {0x821F66, "JBL Flip 6"}, {0xF52494, "JBL Buds Pro"}, {0x718FA4, "JBL Live 300TWS"}, @@ -45,6 +61,138 @@ const struct { {0x72EF8D, "Razer Hammerhead TWS X"}, {0x72FB00, "Soundcore Spirit Pro GVA"}, {0x0003F0, "LG HBS-835S"}, + {0x002000, "AIAIAI TMA-2 (H60)"}, + {0x003000, "Libratone Q Adapt On-Ear"}, + {0x003001, "Libratone Q Adapt On-Ear 2"}, + {0x00A168, "boAt Airdopes 621"}, + {0x00AA48, "Jabra Elite 2"}, + {0x00AA91, "Beoplay E8 2.0"}, + {0x00C95C, "Sony WF-1000X"}, + {0x01EEB4, "WH-1000XM4"}, + {0x02AA91, "B&O Earset"}, + {0x01C95C, "Sony WF-1000X"}, + {0x02D815, "ATH-CK1TW"}, + {0x035764, "PLT V8200 Series"}, + {0x038CC7, "JBL TUNE760NC"}, + {0x02DD4F, "JBL TUNE770NC"}, + {0x02E2A9, "TCL MOVEAUDIO S200"}, + {0x035754, "Plantronics PLT_K2"}, + {0x02C95C, "Sony WH-1000XM2"}, + {0x038B91, "DENON AH-C830NCW"}, + {0x02F637, "JBL LIVE FLEX"}, + {0x02D886, "JBL REFLECT MINI NC"}, + {0xF00000, "Bose QuietComfort 35 II"}, + {0xF00001, "Bose QuietComfort 35 II"}, + {0xF00201, "JBL Everest 110GA"}, + {0xF00204, "JBL Everest 310GA"}, + {0xF00209, "JBL LIVE400BT"}, + {0xF00205, "JBL Everest 310GA"}, + {0xF00200, "JBL Everest 110GA"}, + {0xF00208, "JBL Everest 710GA"}, + {0xF00207, "JBL Everest 710GA"}, + {0xF00206, "JBL Everest 310GA"}, + {0xF0020A, "JBL LIVE400BT"}, + {0xF0020B, "JBL LIVE400BT"}, + {0xF0020C, "JBL LIVE400BT"}, + {0xF00203, "JBL Everest 310GA"}, + {0xF00202, "JBL Everest 110GA"}, + {0xF00213, "JBL LIVE650BTNC"}, + {0xF0020F, "JBL LIVE500BT"}, + {0xF0020E, "JBL LIVE500BT"}, + {0xF00214, "JBL LIVE650BTNC"}, + {0xF00212, "JBL LIVE500BT"}, + {0xF0020D, "JBL LIVE400BT"}, + {0xF00211, "JBL LIVE500BT"}, + {0xF00215, "JBL LIVE650BTNC"}, + {0xF00210, "JBL LIVE500BT"}, + {0xF00305, "LG HBS-1500"}, + {0xF00304, "LG HBS-1010"}, + {0xF00308, "LG HBS-1125"}, + {0xF00303, "LG HBS-930"}, + {0xF00306, "LG HBS-1700"}, + {0xF00300, "LG HBS-835S"}, + {0xF00309, "LG HBS-2000"}, + {0xF00302, "LG HBS-830"}, + {0xF00307, "LG HBS-1120"}, + {0xF00301, "LG HBS-835"}, + {0xF00E97, "JBL VIBE BEAM"}, + {0x04ACFC, "JBL WAVE BEAM"}, + {0x04AA91, "Beoplay H4"}, + {0x04AFB8, "JBL TUNE 720BT"}, + {0x05A963, "WONDERBOOM 3"}, + {0x05AA91, "B&O Beoplay E6"}, + {0x05C452, "JBL LIVE220BT"}, + {0x05C95C, "Sony WI-1000X"}, + {0x0602F0, "JBL Everest 310GA"}, + {0x0603F0, "LG HBS-1700"}, + {0x1E8B18, "SRS-XB43"}, + {0x1E955B, "WI-1000XM2"}, + {0x1EC95C, "Sony WF-SP700N"}, + {0x1ED9F9, "JBL WAVE FLEX"}, + {0x1EE890, "ATH-CKS30TW WH"}, + {0x1EEDF5, "Teufel REAL BLUE TWS 3"}, + {0x1F1101, "TAG Heuer Calibre E4 45mm"}, + {0x1F181A, "LinkBuds S"}, + {0x1F2E13, "Jabra Elite 2"}, + {0x1F4589, "Jabra Elite 2"}, + {0x1F4627, "SRS-XG300"}, + {0x1F5865, "boAt Airdopes 441"}, + {0x1FBB50, "WF-C700N"}, + {0x1FC95C, "Sony WF-SP700N"}, + {0x1FE765, "TONE-TF7Q"}, + {0x1FF8FA, "JBL REFLECT MINI NC"}, + {0x201C7C, "SUMMIT"}, + {0x202B3D, "Amazfit PowerBuds"}, + {0x20330C, "SRS-XB33"}, + {0x003B41, "M&D MW65"}, + {0x003D8A, "Cleer FLOW II"}, + {0x005BC3, "Panasonic RP-HD610N"}, + {0x008F7D, "soundcore Glow Mini"}, + {0x00FA72, "Pioneer SE-MS9BN"}, + {0x0100F0, "Bose QuietComfort 35 II"}, + {0x011242, "Nirvana Ion"}, + {0x013D8A, "Cleer EDGE Voice"}, + {0x01AA91, "Beoplay H9 3rd Generation"}, + {0x038F16, "Beats Studio Buds"}, + {0x039F8F, "Michael Kors Darci 5e"}, + {0x03AA91, "B&O Beoplay H8i"}, + {0x03B716, "YY2963"}, + {0x03C95C, "Sony WH-1000XM2"}, + {0x03C99C, "MOTO BUDS 135"}, + {0x03F5D4, "Writing Account Key"}, + {0x045754, "Plantronics PLT_K2"}, + {0x045764, "PLT V8200 Series"}, + {0x04C95C, "Sony WI-1000X"}, + {0x050F0C, "Major III Voice"}, + {0x052CC7, "MINOR III"}, + {0x057802, "TicWatch Pro 5"}, + {0x0582FD, "Pixel Buds"}, + {0x058D08, "WH-1000XM4"}, + {0x06AE20, "Galaxy S21 5G"}, + {0x06C197, "OPPO Enco Air3 Pro"}, + {0x06C95C, "Sony WH-1000XM2"}, + {0x06D8FC, "soundcore Liberty 4 NC"}, + {0x0744B6, "Technics EAH-AZ60M2"}, + {0x07A41C, "WF-C700N"}, + {0x07C95C, "Sony WH-1000XM2"}, + {0x07F426, "Nest Hub Max"}, + {0x0102F0, "JBL Everest 110GA - Gun Metal"}, + {0x0202F0, "JBL Everest 110GA - Silver"}, + {0x0302F0, "JBL Everest 310GA - Brown"}, + {0x0402F0, "JBL Everest 310GA - Gun Metal"}, + {0x0502F0, "JBL Everest 310GA - Silver"}, + {0x0702F0, "JBL Everest 710GA - Gun Metal"}, + {0x0802F0, "JBL Everest 710GA - Silver"}, + {0x054B2D, "JBL TUNE125TWS"}, + {0x0660D7, "JBL LIVE770NC"}, + {0x0103F0, "LG HBS-835"}, + {0x0203F0, "LG HBS-830"}, + {0x0303F0, "LG HBS-930"}, + {0x0403F0, "LG HBS-1010"}, + {0x0503F0, "LG HBS-1500"}, + {0x0703F0, "LG HBS-1120"}, + {0x0803F0, "LG HBS-1125"}, + {0x0903F0, "LG HBS-2000"}, // Custom debug popups {0xD99CA1, "Flipper Zero"}, From 078cb0381e093b25af53023b0e478b34f6c3916e Mon Sep 17 00:00:00 2001 From: Sil333033 <94360907+Sil333033@users.noreply.github.com> Date: Fri, 27 Oct 2023 19:46:31 +0200 Subject: [PATCH 21/24] Add support Multi-fucc and Xeon bootmode --nobuild --- applications/external/esp_flasher/esp_flasher_worker.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/applications/external/esp_flasher/esp_flasher_worker.c b/applications/external/esp_flasher/esp_flasher_worker.c index be5da85db..5f191af6a 100644 --- a/applications/external/esp_flasher/esp_flasher_worker.c +++ b/applications/external/esp_flasher/esp_flasher_worker.c @@ -307,6 +307,9 @@ static int32_t esp_flasher_reset(void* context) { _setRTS(false); _initRTS(); + furi_hal_gpio_init_simple(&gpio_swclk, GpioModeOutputPushPull); + furi_hal_gpio_write(&gpio_swclk, true); + if(app->reset) { loader_port_debug_print("Resetting board\n"); loader_port_reset_target(); @@ -371,6 +374,13 @@ void loader_port_reset_target(void) { void loader_port_enter_bootloader(void) { // adapted from custom usb-jtag-serial reset in esptool // (works on official wifi dev board) + // Also support for the Multi-fucc and Xeon boards + furi_hal_gpio_write(&gpio_swclk, false); + furi_hal_power_disable_otg(); + loader_port_delay_ms(100); + furi_hal_power_enable_otg(); + furi_hal_gpio_init_simple(&gpio_swclk, GpioModeAnalog); + loader_port_delay_ms(100); _setDTR(true); loader_port_delay_ms(SERIAL_FLASHER_RESET_HOLD_TIME_MS); _setRTS(true); From eedbcde4bcd331c581f5079c823aaefb00ebe48b Mon Sep 17 00:00:00 2001 From: Sil333033 <94360907+Sil333033@users.noreply.github.com> Date: Fri, 27 Oct 2023 20:39:35 +0200 Subject: [PATCH 22/24] Update some apps to close short press --nobuild long live the moble app for not handling long presses :D --- applications/external/geiger/flipper_geiger.c | 3 ++- applications/external/gps_nmea_uart/gps.c | 1 + .../external/nrf24channelscanner/nrf24channelscanner.c | 3 ++- applications/external/nrf24sniff/nrfsniff.c | 2 +- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/applications/external/geiger/flipper_geiger.c b/applications/external/geiger/flipper_geiger.c index 58ab08b0e..102002e89 100644 --- a/applications/external/geiger/flipper_geiger.c +++ b/applications/external/geiger/flipper_geiger.c @@ -239,7 +239,8 @@ int32_t flipper_geiger_app() { if(event_status == FuriStatusOk) { if(event.type == EventTypeInput) { - if(event.input.key == InputKeyBack && event.input.type == InputTypeLong) { + if(event.input.key == InputKeyBack && + (event.input.type == InputTypeShort || event.input.type == InputTypeLong)) { break; } else if(event.input.key == InputKeyOk && event.input.type == InputTypeLong) { counter = 0; diff --git a/applications/external/gps_nmea_uart/gps.c b/applications/external/gps_nmea_uart/gps.c index 56fafbe50..5448fdb95 100644 --- a/applications/external/gps_nmea_uart/gps.c +++ b/applications/external/gps_nmea_uart/gps.c @@ -126,6 +126,7 @@ int32_t gps_app(void* p) { case InputKeyRight: case InputKeyLeft: case InputKeyBack: + processing = false; break; case InputKeyOk: if(!gps_uart->backlight_on) { diff --git a/applications/external/nrf24channelscanner/nrf24channelscanner.c b/applications/external/nrf24channelscanner/nrf24channelscanner.c index d7363a024..5f7f7e42f 100644 --- a/applications/external/nrf24channelscanner/nrf24channelscanner.c +++ b/applications/external/nrf24channelscanner/nrf24channelscanner.c @@ -194,7 +194,8 @@ int32_t nrf24channelscanner_main(void* p) { if(event.type == EventTypeKey) { szuz = false; //hit any button, so hide welcome screen - if(event.input.type == InputTypeLong && event.input.key == InputKeyBack) { + if((event.input.type == InputTypeShort || event.input.type == InputTypeLong) && + event.input.key == InputKeyBack) { if(isScanning) { stopNrfScan = true; //if running, stop it. notification_message(notification, &sequence_blink_yellow_100); diff --git a/applications/external/nrf24sniff/nrfsniff.c b/applications/external/nrf24sniff/nrfsniff.c index fc0e2ac90..fca394180 100644 --- a/applications/external/nrf24sniff/nrfsniff.c +++ b/applications/external/nrf24sniff/nrfsniff.c @@ -409,7 +409,7 @@ int32_t nrfsniff_app(void* p) { break; case InputKeyBack: - if(event.input.type == InputTypeLong) processing = false; + processing = false; break; default: break; From c170d02e88e4efc691168fe6d9b52889e8cc8080 Mon Sep 17 00:00:00 2001 From: Sil333033 <94360907+Sil333033@users.noreply.github.com> Date: Fri, 27 Oct 2023 23:39:59 +0200 Subject: [PATCH 23/24] Remove unused cases that causes exit --nobuild or add break; but its unused --- applications/external/gps_nmea_uart/gps.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/applications/external/gps_nmea_uart/gps.c b/applications/external/gps_nmea_uart/gps.c index 5448fdb95..c7d882d20 100644 --- a/applications/external/gps_nmea_uart/gps.c +++ b/applications/external/gps_nmea_uart/gps.c @@ -121,10 +121,6 @@ int32_t gps_app(void* p) { if(event.type == EventTypeKey) { if(event.input.type == InputTypeShort) { switch(event.input.key) { - case InputKeyUp: - case InputKeyDown: - case InputKeyRight: - case InputKeyLeft: case InputKeyBack: processing = false; break; From f28ba098a0187ff05eae63d6fb0bf664d82bb557 Mon Sep 17 00:00:00 2001 From: Sil333033 <94360907+Sil333033@users.noreply.github.com> Date: Sat, 28 Oct 2023 19:26:40 +0200 Subject: [PATCH 24/24] Update esp flasher --nobuild check comment in code for reason. istg this shit worked yesterday --- .../esp_flasher/lib/esp-serial-flasher/src/esp_loader.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/applications/external/esp_flasher/lib/esp-serial-flasher/src/esp_loader.c b/applications/external/esp_flasher/lib/esp-serial-flasher/src/esp_loader.c index 6ef32673c..a391e71b2 100644 --- a/applications/external/esp_flasher/lib/esp-serial-flasher/src/esp_loader.c +++ b/applications/external/esp_flasher/lib/esp-serial-flasher/src/esp_loader.c @@ -85,7 +85,10 @@ static uint32_t timeout_per_mb(uint32_t size_bytes, uint32_t time_per_mb) esp_loader_error_t esp_loader_connect(esp_loader_connect_args_t *connect_args) { - loader_port_enter_bootloader(); + // if bootloader mode ever give issues, uncomment this function + // it shouldnt be needed because we enter bootloader mode before this function is called + // this function breaks bootloader mode for the Multi-fucc and Xeon + //loader_port_enter_bootloader(); RETURN_ON_ERROR(loader_initialize_conn(connect_args));