mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-05-13 13:18:35 -07:00
BLE Spam base config support ok interaction
This commit is contained in:
1
applications/external/ble_spam/ble_spam.h
vendored
1
applications/external/ble_spam/ble_spam.h
vendored
@@ -26,6 +26,7 @@ typedef struct Attack Attack;
|
||||
typedef struct {
|
||||
Attack* attack;
|
||||
uint8_t byte_store[3];
|
||||
VariableItemListEnterCallback fallback_config_enter;
|
||||
|
||||
ViewDispatcher* view_dispatcher;
|
||||
SceneManager* scene_manager;
|
||||
|
||||
@@ -17,4 +17,5 @@ typedef struct {
|
||||
const char* (*get_name)(const ProtocolCfg* _cfg);
|
||||
void (*make_packet)(uint8_t* _size, uint8_t** _packet, const ProtocolCfg* _cfg);
|
||||
void (*extra_config)(Ctx* ctx);
|
||||
uint8_t (*config_count)(const ProtocolCfg* _cfg);
|
||||
} Protocol;
|
||||
|
||||
@@ -277,11 +277,19 @@ enum {
|
||||
_ConfigPpExtraStart = ConfigExtraStart,
|
||||
ConfigPpModel,
|
||||
ConfigPpPrefix,
|
||||
ConfigPpCOUNT,
|
||||
};
|
||||
enum {
|
||||
_ConfigNaExtraStart = ConfigExtraStart,
|
||||
ConfigNaAction,
|
||||
ConfigNaFlags,
|
||||
ConfigNaCOUNT,
|
||||
};
|
||||
enum {
|
||||
_ConfigCcExtraStart = ConfigExtraStart,
|
||||
ConfigCcInfoLock,
|
||||
ConfigCcInfoDevice,
|
||||
ConfigCcCOUNT,
|
||||
};
|
||||
static void config_callback(void* _ctx, uint32_t index) {
|
||||
Ctx* ctx = _ctx;
|
||||
@@ -297,6 +305,7 @@ static void config_callback(void* _ctx, uint32_t index) {
|
||||
scene_manager_next_scene(ctx->scene_manager, SceneContinuityPpPrefix);
|
||||
break;
|
||||
default:
|
||||
ctx->fallback_config_enter(ctx, index);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
@@ -310,11 +319,24 @@ static void config_callback(void* _ctx, uint32_t index) {
|
||||
scene_manager_next_scene(ctx->scene_manager, SceneContinuityNaFlags);
|
||||
break;
|
||||
default:
|
||||
ctx->fallback_config_enter(ctx, index);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case ContinuityTypeCustomCrash: {
|
||||
switch(index) {
|
||||
case ConfigCcInfoLock:
|
||||
case ConfigCcInfoDevice:
|
||||
break;
|
||||
default:
|
||||
ctx->fallback_config_enter(ctx, index);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
ctx->fallback_config_enter(ctx, index);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -470,11 +492,27 @@ static void continuity_extra_config(Ctx* ctx) {
|
||||
variable_item_list_set_enter_callback(list, config_callback, ctx);
|
||||
}
|
||||
|
||||
static uint8_t config_counts[ContinuityTypeCOUNT] = {
|
||||
[ContinuityTypeAirDrop] = 0,
|
||||
[ContinuityTypeProximityPair] = ConfigPpCOUNT - ConfigExtraStart - 1,
|
||||
[ContinuityTypeAirplayTarget] = 0,
|
||||
[ContinuityTypeHandoff] = 0,
|
||||
[ContinuityTypeTetheringSource] = 0,
|
||||
[ContinuityTypeNearbyAction] = ConfigNaCOUNT - ConfigExtraStart - 1,
|
||||
[ContinuityTypeNearbyInfo] = 0,
|
||||
[ContinuityTypeCustomCrash] = ConfigCcCOUNT - ConfigExtraStart - 1,
|
||||
};
|
||||
static uint8_t continuity_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,
|
||||
};
|
||||
|
||||
static void pp_model_callback(void* _ctx, uint32_t index) {
|
||||
|
||||
@@ -171,10 +171,13 @@ void easysetup_make_packet(uint8_t* out_size, uint8_t** out_packet, const Protoc
|
||||
enum {
|
||||
_ConfigBudsExtraStart = ConfigExtraStart,
|
||||
ConfigBudsModel,
|
||||
ConfigBudsInfoVersion,
|
||||
ConfigBudsCOUNT,
|
||||
};
|
||||
enum {
|
||||
_ConfigWatchExtraStart = ConfigExtraStart,
|
||||
ConfigWatchModel,
|
||||
ConfigWatchCOUNT,
|
||||
};
|
||||
static void config_callback(void* _ctx, uint32_t index) {
|
||||
Ctx* ctx = _ctx;
|
||||
@@ -186,7 +189,10 @@ static void config_callback(void* _ctx, uint32_t index) {
|
||||
case ConfigBudsModel:
|
||||
scene_manager_next_scene(ctx->scene_manager, SceneEasysetupBudsModel);
|
||||
break;
|
||||
case ConfigBudsInfoVersion:
|
||||
break;
|
||||
default:
|
||||
ctx->fallback_config_enter(ctx, index);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
@@ -197,11 +203,13 @@ static void config_callback(void* _ctx, uint32_t index) {
|
||||
scene_manager_next_scene(ctx->scene_manager, SceneEasysetupWatchModel);
|
||||
break;
|
||||
default:
|
||||
ctx->fallback_config_enter(ctx, index);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
ctx->fallback_config_enter(ctx, index);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -297,11 +305,21 @@ static void easysetup_extra_config(Ctx* ctx) {
|
||||
variable_item_list_set_enter_callback(list, config_callback, ctx);
|
||||
}
|
||||
|
||||
static uint8_t config_counts[EasysetupTypeCOUNT] = {
|
||||
[EasysetupTypeBuds] = ConfigBudsCOUNT - ConfigExtraStart - 1,
|
||||
[EasysetupTypeWatch] = ConfigWatchCOUNT - ConfigExtraStart - 1,
|
||||
};
|
||||
static uint8_t easysetup_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,
|
||||
};
|
||||
|
||||
static void buds_model_callback(void* _ctx, uint32_t index) {
|
||||
|
||||
@@ -82,6 +82,8 @@ static void fastpair_make_packet(uint8_t* _size, uint8_t** _packet, const Protoc
|
||||
enum {
|
||||
_ConfigExtraStart = ConfigExtraStart,
|
||||
ConfigModel,
|
||||
ConfigInfoRequire,
|
||||
ConfigCOUNT,
|
||||
};
|
||||
static void config_callback(void* _ctx, uint32_t index) {
|
||||
Ctx* ctx = _ctx;
|
||||
@@ -89,7 +91,11 @@ static void config_callback(void* _ctx, uint32_t index) {
|
||||
switch(index) {
|
||||
case ConfigModel:
|
||||
scene_manager_next_scene(ctx->scene_manager, SceneFastpairModel);
|
||||
break;
|
||||
case ConfigInfoRequire:
|
||||
break;
|
||||
default:
|
||||
ctx->fallback_config_enter(ctx, index);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -139,11 +145,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) {
|
||||
UNUSED(_cfg);
|
||||
return ConfigCOUNT;
|
||||
}
|
||||
|
||||
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,
|
||||
};
|
||||
|
||||
static void model_callback(void* _ctx, uint32_t index) {
|
||||
|
||||
@@ -49,6 +49,8 @@ static void swiftpair_make_packet(uint8_t* _size, uint8_t** _packet, const Proto
|
||||
enum {
|
||||
_ConfigExtraStart = ConfigExtraStart,
|
||||
ConfigName,
|
||||
ConfigInfoRequire,
|
||||
ConfigCOUNT,
|
||||
};
|
||||
static void config_callback(void* _ctx, uint32_t index) {
|
||||
Ctx* ctx = _ctx;
|
||||
@@ -56,7 +58,11 @@ static void config_callback(void* _ctx, uint32_t index) {
|
||||
switch(index) {
|
||||
case ConfigName:
|
||||
scene_manager_next_scene(ctx->scene_manager, SceneSwiftpairName);
|
||||
break;
|
||||
case ConfigInfoRequire:
|
||||
break;
|
||||
default:
|
||||
ctx->fallback_config_enter(ctx, index);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -73,11 +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) {
|
||||
UNUSED(_cfg);
|
||||
return ConfigCOUNT;
|
||||
}
|
||||
|
||||
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,
|
||||
};
|
||||
|
||||
static void name_callback(void* _ctx) {
|
||||
|
||||
17
applications/external/ble_spam/scenes/config.c
vendored
17
applications/external/ble_spam/scenes/config.c
vendored
@@ -8,6 +8,21 @@ static void random_mac_changed(VariableItem* item) {
|
||||
variable_item_set_current_value_text(item, ctx->attack->payload.random_mac ? "ON" : "OFF");
|
||||
}
|
||||
|
||||
static void config_callback(void* _ctx, uint32_t index) {
|
||||
Ctx* ctx = _ctx;
|
||||
scene_manager_set_scene_state(ctx->scene_manager, SceneConfig, index);
|
||||
if(ctx->attack->protocol && ctx->attack->protocol->config_count) {
|
||||
uint8_t extra = ctx->attack->protocol->config_count(&ctx->attack->payload.cfg);
|
||||
if(index > extra) index -= extra;
|
||||
}
|
||||
|
||||
switch(index) {
|
||||
case ConfigRandomMac:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
void scene_config_on_enter(void* _ctx) {
|
||||
Ctx* ctx = _ctx;
|
||||
VariableItem* item;
|
||||
@@ -20,9 +35,11 @@ void scene_config_on_enter(void* _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_enter_callback(list, config_callback, ctx);
|
||||
if(!ctx->attack->protocol) {
|
||||
variable_item_list_add(list, "None shall escape the S I N K", 0, NULL, NULL);
|
||||
} else if(ctx->attack->protocol->extra_config) {
|
||||
ctx->fallback_config_enter = config_callback;
|
||||
ctx->attack->protocol->extra_config(ctx);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user