#include "activity_state_refresh_parser.h" #include #include "../../encoding/byte_order.h" namespace sunrise::middleware::bap::activity_message::state_refresh { namespace { /** The bubble field uses the signed 32-bit midpoint as its wire bias. */ constexpr std::uint32_t kBubbleIndexBias = 0x80000000U; } // namespace /** Parses the fixed state-refresh request prefix. */ bool parse_state_refresh(std::span input, StateRefresh& refresh) noexcept { refresh = {}; if (input.size() != kEncodedSize) { return false; } StateRefresh parsed{}; parsed.membershipRevision = encoding::read_u32_be(input.first()); const std::uint32_t bubbleWire = encoding::read_u32_be(input.subspan()); parsed.bubbleIndex = std::bit_cast(bubbleWire - kBubbleIndexBias); refresh = parsed; return true; } } // namespace sunrise::middleware::bap::activity_message::state_refresh