diff --git a/applications/external/ble_spam/ble_spam.c b/applications/external/ble_spam/ble_spam.c index 1104b4595..522201dfb 100644 --- a/applications/external/ble_spam/ble_spam.c +++ b/applications/external/ble_spam/ble_spam.c @@ -320,6 +320,7 @@ static bool input_callback(InputEvent* input, void* ctx) { if(input->type == InputTypeLong) { if(advertising) toggle_adv(state); state->ctx.attack = &attacks[state->index]; + scene_manager_set_scene_state(state->ctx.scene_manager, SceneConfig, 0); scene_manager_next_scene(state->ctx.scene_manager, SceneConfig); } else if(input->type == InputTypeShort) { toggle_adv(state); diff --git a/applications/external/ble_spam/protocols/_base.h b/applications/external/ble_spam/protocols/_base.h index cba727645..d519f5bf8 100644 --- a/applications/external/ble_spam/protocols/_base.h +++ b/applications/external/ble_spam/protocols/_base.h @@ -8,6 +8,7 @@ #include "ble_spam_icons.h" #include #include +#include "../ble_spam.h" typedef union ProtocolCfg ProtocolCfg; @@ -15,4 +16,5 @@ typedef struct { const Icon* icon; const char* (*get_name)(const ProtocolCfg* _cfg); void (*make_packet)(uint8_t* _size, uint8_t** _packet, const ProtocolCfg* _cfg); + uint8_t (*config_list)(Ctx* ctx); } Protocol; diff --git a/applications/external/ble_spam/scenes/config.c b/applications/external/ble_spam/scenes/config.c index 51958b15d..a387fbd25 100644 --- a/applications/external/ble_spam/scenes/config.c +++ b/applications/external/ble_spam/scenes/config.c @@ -15,11 +15,19 @@ void scene_config_on_enter(void* _ctx) { variable_item_list_reset(list); variable_item_list_set_header(list, ctx->attack->title); + uint8_t item_count = 0; + if(ctx->attack->protocol && ctx->attack->protocol->config_list) { + item_count = ctx->attack->protocol->config_list(ctx); + } + UNUSED(item_count); item = variable_item_list_add(list, "Random MAC", 2, random_mac_changed, ctx); variable_item_set_current_value_index(item, ctx->attack->payload.random_mac); variable_item_set_current_value_text(item, ctx->attack->payload.random_mac ? "ON" : "OFF"); + variable_item_list_set_selected_item( + list, scene_manager_get_scene_state(ctx->scene_manager, SceneConfig)); + view_dispatcher_switch_to_view(ctx->view_dispatcher, ViewVariableItemList); }