Add versioned persistent configuration protocol

This commit is contained in:
Joey Yakimowich-Payne 2026-09-02 15:24:35 -06:00
commit 7afc9981fe
36 changed files with 2784 additions and 756 deletions

43
adapter_configuration.cpp Normal file
View file

@ -0,0 +1,43 @@
#include "adapter_configuration.h"
AdapterConfiguration adapter_configuration_default() {
return {};
}
bool adapter_configuration_encode(const AdapterConfiguration& configuration,
uint8_t* output, size_t output_size) {
if (output == nullptr || output_size < ADAPTER_CONFIGURATION_ENCODED_SIZE ||
configuration.pairing_window_seconds <
ADAPTER_PAIRING_WINDOW_SECONDS_MIN ||
configuration.pairing_window_seconds >
ADAPTER_PAIRING_WINDOW_SECONDS_MAX) {
return false;
}
output[0] = static_cast<uint8_t>(configuration.pairing_window_seconds);
output[1] =
static_cast<uint8_t>(configuration.pairing_window_seconds >> 8);
output[2] = 0;
output[3] = 0;
return true;
}
bool adapter_configuration_decode(const uint8_t* payload, size_t payload_size,
AdapterConfiguration* output) {
if (payload == nullptr || output == nullptr ||
payload_size != ADAPTER_CONFIGURATION_ENCODED_SIZE ||
payload[2] != 0 || payload[3] != 0) {
return false;
}
const uint16_t pairing_window_seconds =
static_cast<uint16_t>(payload[0]) |
static_cast<uint16_t>(payload[1] << 8);
if (pairing_window_seconds < ADAPTER_PAIRING_WINDOW_SECONDS_MIN ||
pairing_window_seconds > ADAPTER_PAIRING_WINDOW_SECONDS_MAX) {
return false;
}
output->pairing_window_seconds = pairing_window_seconds;
return true;
}