New ble spam interface, add infos, fix payloads

This commit is contained in:
Willy-JL
2023-09-04 22:00:46 +02:00
parent 557afcbc89
commit c27c8bb34e

View File

@@ -8,6 +8,7 @@
typedef struct { typedef struct {
const char* title; const char* title;
const char* text;
ContinuityMsg msg; ContinuityMsg msg;
} Payload; } Payload;
@@ -18,185 +19,222 @@ typedef struct {
static const Payload payloads[] = { static const Payload payloads[] = {
{.title = "AirPods Pro", {.title = "AirPods Pro",
.text = "Modal, spammy (auto close)",
.msg = .msg =
{ {
.type = ContinuityTypeProximityPair, .type = ContinuityTypeProximityPair,
.data = {.proximity_pair = {.model = 0x0E20}}, .data = {.proximity_pair = {.model = 0x0E20}},
}}, }},
{.title = "PowerBeats", {.title = "Beats Solo 3",
.text = "Modal, spammy (stays open)",
.msg = .msg =
{ {
.type = ContinuityTypeProximityPair, .type = ContinuityTypeProximityPair,
.data = {.proximity_pair = {.model = 0x0320}}, .data = {.proximity_pair = {.model = 0x0620}},
}},
{.title = "AirPods Max",
.text = "Modal, laggy (stays open)",
.msg =
{
.type = ContinuityTypeProximityPair,
.data = {.proximity_pair = {.model = 0x0A20}},
}},
{.title = "Beats Flex",
.text = "Modal, laggy (stays open)",
.msg =
{
.type = ContinuityTypeProximityPair,
.data = {.proximity_pair = {.model = 0x1020}},
}}, }},
{.title = "Airtag", {.title = "Airtag",
.text = "",
.msg = .msg =
{ {
.type = ContinuityTypeProximityPair, .type = ContinuityTypeProximityPair,
.data = {.proximity_pair = {.model = 0x0055}}, .data = {.proximity_pair = {.model = 0x0055}},
}}, }},
{.title = "Setup New Phone", {.title = "Hermes Airtag",
.text = "",
.msg = .msg =
{ {
.type = ContinuityTypeNearbyAction, .type = ContinuityTypeProximityPair,
.data = {.nearby_action = {.type = 0x09}}, .data = {.proximity_pair = {.model = 0x0030}},
}},
{.title = "Transfer Number",
.msg =
{
.type = ContinuityTypeNearbyAction,
.data = {.nearby_action = {.type = 0x02}},
}}, }},
{.title = "AppleTV AutoFill", {.title = "AppleTV AutoFill",
.text = "Banner, unlocked, long range",
.msg = .msg =
{ {
.type = ContinuityTypeNearbyAction, .type = ContinuityTypeNearbyAction,
.data = {.nearby_action = {.type = 0x13}}, .data = {.nearby_action = {.type = 0x13}},
}}, }},
{.title = "AppleTV Pair", {.title = "AppleTV Connecting...",
.text = "Modal, unlocked, long range",
.msg =
{
.type = ContinuityTypeNearbyAction,
.data = {.nearby_action = {.type = 0x27}},
}},
{.title = "AppleTV Audio Sync",
.text = "Banner, locked, long range",
.msg =
{
.type = ContinuityTypeNearbyAction,
.data = {.nearby_action = {.type = 0x19}},
}},
{.title = "AppleTV Color Balance",
.text = "Banner, locked",
.msg =
{
.type = ContinuityTypeNearbyAction,
.data = {.nearby_action = {.type = 0x1E}},
}},
{.title = "Setup New iPhone",
.text = "Modal, locked",
.msg =
{
.type = ContinuityTypeNearbyAction,
.data = {.nearby_action = {.type = 0x09}},
}},
{.title = "Transfer Phone Number",
.text = "Modal, locked",
.msg =
{
.type = ContinuityTypeNearbyAction,
.data = {.nearby_action = {.type = 0x02}},
}},
{.title = "Pair AppleTV",
.text = "Modal, unlocked",
.msg = .msg =
{ {
.type = ContinuityTypeNearbyAction, .type = ContinuityTypeNearbyAction,
.data = {.nearby_action = {.type = 0x06}}, .data = {.nearby_action = {.type = 0x06}},
}}, }},
{.title = "HomePod Setup", {.title = "HomePod Setup",
.text = "Modal, unlocked",
.msg = .msg =
{ {
.type = ContinuityTypeNearbyAction, .type = ContinuityTypeNearbyAction,
.data = {.nearby_action = {.type = 0x0B}}, .data = {.nearby_action = {.type = 0x0B}},
}}, }},
{.title = "AirPods", {.title = "AirPods",
.text = "Modal, spammy (auto close)",
.msg = .msg =
{ {
.type = ContinuityTypeProximityPair, .type = ContinuityTypeProximityPair,
.data = {.proximity_pair = {.model = 0x0220}}, .data = {.proximity_pair = {.model = 0x0220}},
}}, }},
{.title = "AirPods Max", {.title = "AirPods 2nd Gen",
.msg = .text = "Modal, spammy (auto close)",
{
.type = ContinuityTypeProximityPair,
.data = {.proximity_pair = {.model = 0x0A20}},
}},
{.title = "AirPods Gen 2",
.msg = .msg =
{ {
.type = ContinuityTypeProximityPair, .type = ContinuityTypeProximityPair,
.data = {.proximity_pair = {.model = 0x0F20}}, .data = {.proximity_pair = {.model = 0x0F20}},
}}, }},
{.title = "AirPods Gen 3", {.title = "AirPods 3rd Gen",
.text = "Modal, spammy (auto close)",
.msg = .msg =
{ {
.type = ContinuityTypeProximityPair, .type = ContinuityTypeProximityPair,
.data = {.proximity_pair = {.model = 0x1320}}, .data = {.proximity_pair = {.model = 0x1320}},
}}, }},
{.title = "AirPods Pro Gen 2", {.title = "AirPods Pro 2nd Gen",
.text = "Modal, spammy (auto close)",
.msg = .msg =
{ {
.type = ContinuityTypeProximityPair, .type = ContinuityTypeProximityPair,
.data = {.proximity_pair = {.model = 0x1420}}, .data = {.proximity_pair = {.model = 0x1420}},
}}, }},
{.title = "PowerBeats Pro", {.title = "Powerbeats 3",
.text = "Modal, spammy (stays open)",
.msg =
{
.type = ContinuityTypeProximityPair,
.data = {.proximity_pair = {.model = 0x0320}},
}},
{.title = "Powerbeats Pro",
.text = "Modal, spammy (auto close)",
.msg = .msg =
{ {
.type = ContinuityTypeProximityPair, .type = ContinuityTypeProximityPair,
.data = {.proximity_pair = {.model = 0x0B20}}, .data = {.proximity_pair = {.model = 0x0B20}},
}}, }},
{.title = "Beats Solo Pro", {.title = "Beats Solo Pro",
.text = "",
.msg = .msg =
{ {
.type = ContinuityTypeProximityPair, .type = ContinuityTypeProximityPair,
.data = {.proximity_pair = {.model = 0x0C20}}, .data = {.proximity_pair = {.model = 0x0C20}},
}}, }},
{.title = "Beats Studio Buds", {.title = "Beats Studio Buds",
.text = "",
.msg = .msg =
{ {
.type = ContinuityTypeProximityPair, .type = ContinuityTypeProximityPair,
.data = {.proximity_pair = {.model = 0x1120}}, .data = {.proximity_pair = {.model = 0x1120}},
}}, }},
{.title = "Beats Flex",
.msg =
{
.type = ContinuityTypeProximityPair,
.data = {.proximity_pair = {.model = 0x1020}},
}},
{.title = "Beats X", {.title = "Beats X",
.text = "Modal, spammy (stays open)",
.msg = .msg =
{ {
.type = ContinuityTypeProximityPair, .type = ContinuityTypeProximityPair,
.data = {.proximity_pair = {.model = 0x0520}}, .data = {.proximity_pair = {.model = 0x0520}},
}}, }},
{.title = "Beats Solo 3",
.msg =
{
.type = ContinuityTypeProximityPair,
.data = {.proximity_pair = {.model = 0x0620}},
}},
{.title = "Beats Studio 3", {.title = "Beats Studio 3",
.text = "Modal, spammy (stays open)",
.msg = .msg =
{ {
.type = ContinuityTypeProximityPair, .type = ContinuityTypeProximityPair,
.data = {.proximity_pair = {.model = 0x0920}}, .data = {.proximity_pair = {.model = 0x0920}},
}}, }},
{.title = "Beats Studio Pro", {.title = "Beats Studio Pro",
.text = "Modal, spammy (stays open)",
.msg = .msg =
{ {
.type = ContinuityTypeProximityPair, .type = ContinuityTypeProximityPair,
.data = {.proximity_pair = {.model = 0x1720}}, .data = {.proximity_pair = {.model = 0x1720}},
}}, }},
{.title = "Beats Fit Pro", {.title = "Beats Fit Pro",
.text = "",
.msg = .msg =
{ {
.type = ContinuityTypeProximityPair, .type = ContinuityTypeProximityPair,
.data = {.proximity_pair = {.model = 0x1220}}, .data = {.proximity_pair = {.model = 0x1220}},
}}, }},
{.title = "Beats Studio Buds+", {.title = "Beats Studio Buds+",
.text = "",
.msg = .msg =
{ {
.type = ContinuityTypeProximityPair, .type = ContinuityTypeProximityPair,
.data = {.proximity_pair = {.model = 0x1620}}, .data = {.proximity_pair = {.model = 0x1620}},
}}, }},
{.title = "AppleTV Setup", {.title = "Setup New AppleTV",
.text = "Modal, unlocked",
.msg = .msg =
{ {
.type = ContinuityTypeNearbyAction, .type = ContinuityTypeNearbyAction,
.data = {.nearby_action = {.type = 0x01}}, .data = {.nearby_action = {.type = 0x01}},
}}, }},
{.title = "AppleTV Homekit Setup", {.title = "HomeKit AppleTV Setup",
.text = "Modal, unlocked",
.msg = .msg =
{ {
.type = ContinuityTypeNearbyAction, .type = ContinuityTypeNearbyAction,
.data = {.nearby_action = {.type = 0x0D}}, .data = {.nearby_action = {.type = 0x0D}},
}}, }},
{.title = "AppleTV New User", {.title = "Join This AppleTV?",
.text = "Modal, unlocked",
.msg = .msg =
{ {
.type = ContinuityTypeNearbyAction, .type = ContinuityTypeNearbyAction,
.data = {.nearby_action = {.type = 0x20}}, .data = {.nearby_action = {.type = 0x20}},
}}, }},
{.title = "AppleTV AppleID Setup", {.title = "AppleID for AppleTV?",
.text = "Modal, unlocked",
.msg = .msg =
{ {
.type = ContinuityTypeNearbyAction, .type = ContinuityTypeNearbyAction,
.data = {.nearby_action = {.type = 0x2B}}, .data = {.nearby_action = {.type = 0x2B}},
}}, }},
{.title = "AppleTV Audio Sync",
.msg =
{
.type = ContinuityTypeNearbyAction,
.data = {.nearby_action = {.type = 0x19}},
}},
{.title = "AppleTV Network",
.msg =
{
.type = ContinuityTypeNearbyAction,
.data = {.nearby_action = {.type = 0x27}},
}},
{.title = "TV Color Balance",
.msg =
{
.type = ContinuityTypeNearbyAction,
.data = {.nearby_action = {.type = 0x13}},
}},
}; };
typedef struct { typedef struct {
@@ -242,23 +280,24 @@ static void draw_callback(Canvas* canvas, void* ctx) {
State* state = ctx; State* state = ctx;
const Payload* payload = &payloads[state->index]; const Payload* payload = &payloads[state->index];
canvas_draw_icon(canvas, 4, 4, &I_apple_10px);
canvas_set_font(canvas, FontSecondary); canvas_set_font(canvas, FontSecondary);
canvas_draw_str(canvas, 16, 12, "Apple BLE Spam"); canvas_draw_icon(canvas, 3, 4, &I_apple_10px);
canvas_draw_str(canvas, 14, 12, "Apple BLE Spam");
canvas_set_font(canvas, FontPrimary); canvas_set_font(canvas, FontBatteryPercent);
canvas_draw_str(canvas, 5, 24, payload->title); char delay[14];
snprintf(delay, sizeof(delay), "%ims", state->delay);
canvas_draw_str_aligned(canvas, 116, 12, AlignRight, AlignBottom, delay);
canvas_draw_icon(canvas, 119, 6, &I_SmallArrowUp_3x5);
canvas_draw_icon(canvas, 119, 10, &I_SmallArrowDown_3x5);
canvas_set_font(canvas, FontBatteryPercent); canvas_set_font(canvas, FontBatteryPercent);
canvas_draw_str(canvas, 5, 33, continuity_get_type_name(payload->msg.type)); canvas_draw_str(canvas, 4, 21, continuity_get_type_name(payload->msg.type));
canvas_set_font(canvas, FontPrimary);
canvas_draw_str(canvas, 4, 32, payload->title);
canvas_set_font(canvas, FontSecondary); canvas_set_font(canvas, FontSecondary);
canvas_draw_icon(canvas, 6, 41, &I_SmallArrowUp_3x5); canvas_draw_str(canvas, 4, 46, payload->text);
canvas_draw_icon(canvas, 6, 45, &I_SmallArrowDown_3x5);
char delay[21];
snprintf(delay, sizeof(delay), "Delay: %ims", state->delay);
canvas_draw_str(canvas, 14, 48, delay);
if(state->index > 0) { if(state->index > 0) {
elements_button_left(canvas, "Back"); elements_button_left(canvas, "Back");