pw_bluetooth_proxy#

Lightweight proxy for augmenting Bluetooth functionality

Unstable C++17

The pw_bluetooth_proxy module provides a lightweight proxy host that can be placed between a Bluetooth host and Bluetooth controller to add additional functionality or inspection. All without modifying the host or the controller.

An example use case could be offloading some functionality from a main host located on the application processor to instead be handled on the MCU (to reduce power usage).

The proxy acts as a proxy of all host controller interface (HCI) packets between the host and the controller.

pw::bluetooth::proxy::ProxyHost acts as the main coordinator for proxy functionality.

#include "pw_bluetooth_proxy/proxy_host.h"

  // Container creates ProxyHost .
  ProxyHost proxy = ProxyHost(std::move(container_send_to_host_fn),
                              std::move(container_send_to_controller_fn),
                              /*le_acl_credits_to_reserve=*/2,
                              /*br_edr_acl_credits_to_reserve=*/0);

  // Container passes H4 packets from host through proxy. Proxy will in turn
  // call the container-provided `container_send_to_controller_fn` to pass them
  // on to the controller. Some packets may be modified, added, or removed.
  proxy.HandleH4HciFromHost(std::move(h4_packet_from_host));

  // Container passes H4 packets from controller through proxy. Proxy will in
  // turn call the container-provided `container_send_to_host_fn` to pass them
  // on to the controller. Some packets may be modified, added, or removed.
  proxy.HandleH4HciFromController(std::move(h4_packet_from_controller));
Get Started

How to set up in your build system

API Reference

Reference information about the API

Roadmap

Upcoming plans

Code size analysis

Understand code footprint and savings potential

Get started#

  1. Add Emboss to your project as described in Emboss.

Bazel isn’t supported yet.

2. Then add $dir_pw_bluetooth_proxy to the deps list in your pw_executable() build target:

pw_executable("...") {
  # ...
  deps = [
    # ...
    "$dir_pw_bluetooth_proxy",
    # ...
  ]
}

2. Then add pw_bluetooth_proxy to the DEPS list in your cmake target:

API reference#

pw::bluetooth::proxy::ProxyHost#

class ProxyHost#

ProxyHost acts as the main coordinator for proxy functionality. After creation, the container then passes packets through the proxy.

Public Functions

ProxyHost(
pw::Function<void(H4PacketWithHci &&packet)> &&send_to_host_fn,
pw::Function<void(H4PacketWithH4 &&packet)> &&send_to_controller_fn,
uint16_t le_acl_credits_to_reserve,
uint16_t br_edr_acl_credits_to_reserve,
)#

Creates an ProxyHost that will process HCI packets.

Parameters:
  • send_to_host_fn[in] Callback that will be called when proxy wants to send HCI packet towards the host.

  • send_to_controller_fn[in] - Callback that will be called when proxy wants to send HCI packet towards the controller.

  • le_acl_credits_to_reserve[in] - How many buffers to reserve for the proxy out of any LE ACL buffers received from controller.

  • br_edr_acl_credits_to_reserve[in] - How many buffers to reserve for the proxy out of any BR/EDR ACL buffers received from controller.

void HandleH4HciFromHost(H4PacketWithH4 &&h4_packet)#

Called by container to ask proxy to handle a H4 HCI packet sent from the host side towards the controller side. Proxy will in turn call the send_to_controller_fn provided during construction to pass the packet on to the controller. Some packets may be modified, added, or removed.

The proxy host currently does not require any from-host packets to support its current functionality. It will pass on all packets, so containers can choose to just pass all from-host packets through it.

Container is required to call this function synchronously (one packet at a time).

void HandleH4HciFromController(H4PacketWithHci &&h4_packet)#

Called by container to ask proxy to handle a H4 packet sent from the controller side towards the host side. Proxy will in turn call the send_to_host_fn provided during construction to pass the packet on to the host. Some packets may be modified, added, or removed.

To support all of its current functionality, the proxy host needs at least the following from-controller packets passed through it. It will pass on all other packets, so containers can choose to just pass all from-controller packets through the proxy host.

All packets of this type:

  • L2CAP over ACL packets (specifically those addressed to channels managed by the proxy host, including signaling packets)

HCI_Command_Complete events (7.7.14) containing return parameters for these commands:

  • HCI_LE_Read_Buffer_Size [v1] command (7.8.2)

  • HCI_LE_Read_Buffer_Size [v2] command (7.8.2)

These HCI event packets:

  • HCI_Number_Of_Completed_Packets event (7.7.19)

  • HCI_Disconnection_Complete event (7.7.5)

Container is required to call this function synchronously (one packet at a time).

void Reset()#

Called by container to notify proxy that the Bluetooth system is being reset, so the proxy can reset its internal state. Warning: Outstanding H4 packets are not invalidated upon reset. If they are destructed post-reset, packets generated post-reset are liable to be overwritten prematurely.

void RegisterL2capStatusDelegate(L2capStatusDelegate &delegate)#

Register for notifications of connection and disconnection for a particular L2cap service identified by its PSM.

Parameters:

delegate[in] A delegate that will be notified when a successful L2cap connection is made on its PSM. Note: This must outlive the ProxyHost.

void UnregisterL2capStatusDelegate(L2capStatusDelegate &delegate)#

Unregister a service delegate.

Parameters:

delegate[in] The delegate to unregister. Must have been previously registered.

pw::Result<L2capCoc> AcquireL2capCoc(
pw::multibuf::MultiBufAllocator &rx_multibuf_allocator,
uint16_t connection_handle,
L2capCoc::CocConfig rx_config,
L2capCoc::CocConfig tx_config,
Function<void(multibuf::MultiBuf &&payload)> &&receive_fn,
Function<void(L2capChannelEvent event)> &&event_fn,
)#

Returns an L2CAP connection-oriented channel that supports writing to and reading from a remote peer.

Parameters:
  • rx_multibuf_allocator[in] Provides the allocator the channel will use for its Rx buffers (for both queueing and returning to the client).

  • connection_handle[in] The connection handle of the remote peer.

  • rx_config[in] Parameters applying to reading packets. See l2cap_coc.h for details.

  • tx_config[in] Parameters applying to writing packets. See l2cap_coc.h for details.

  • receive_fn[in] Read callback to be invoked on Rx SDUs.

  • event_fn[in] Handle asynchronous events such as errors and flow control events encountered by the channel. See l2cap_channel_event.h.

Returns:

Code

Description

INVALID_ARGUMENT

If arguments are invalid (check logs). UNAVAILABLE: If channel could not be created because no memory was available to accommodate an additional ACL connection.

pw::Result<L2capCoc> AcquireL2capCoc(
pw::multibuf::MultiBufAllocator &rx_multibuf_allocator,
uint16_t connection_handle,
L2capCoc::CocConfig rx_config,
L2capCoc::CocConfig tx_config,
Function<void(pw::span<uint8_t> payload)> &&receive_fn,
Function<void(L2capChannelEvent event)> &&event_fn,
)#

Deprecated:

Use AcquireL2capCoc with allocator parameters instead.

pw::Status SendAdditionalRxCredits(uint16_t connection_handle, uint16_t local_cid, uint16_t additional_rx_credits)#

TODO: https://pwbug.dev/380076024 - Delete after downstream client uses this method on L2capCoc.

Deprecated:

Use L2capCoc::SendAdditionalRxCredits instead.

pw::Result<BasicL2capChannel> AcquireBasicL2capChannel(
uint16_t connection_handle,
uint16_t local_cid,
uint16_t remote_cid,
AclTransportType transport,
Function<bool(pw::span<uint8_t> payload)> &&payload_from_controller_fn,
Function<void(L2capChannelEvent event)> &&event_fn,
)#

Returns an L2CAP channel operating in basic mode that supports writing to and reading from a remote peer.

Parameters:
  • connection_handle[in] The connection handle of the remote peer.

  • local_cid[in] L2CAP channel ID of the local endpoint.

  • remote_cid[in] L2CAP channel ID of the remote endpoint.

  • transport[in] Logical link transport type.

  • payload_from_controller_fn[in] Read callback to be invoked on Rx SDUs. Return value of false indicates the packet should be forwarded on to host.

  • event_fn[in] Handle asynchronous events such as errors encountered by the channel. See l2cap_channel_common.h.

Returns:

Code

Description

INVALID_ARGUMENT

If arguments are invalid (check logs). UNAVAILABLE: If channel could not be created because no memory was available to accommodate an additional ACL connection.

pw::Status SendGattNotify(uint16_t connection_handle, uint16_t attribute_handle, pw::span<const uint8_t> attribute_value)#

Send a GATT Notify to the indicated connection.

Parameters:
  • connection_handle[in] The connection handle of the peer to notify. Maximum valid connection handle is 0x0EFF.

  • attribute_handle[in] The attribute handle the notify should be sent on. Cannot be 0.

  • attribute_value[in] The data to be sent. Data will be copied before function completes.

Returns:

Code

Description

OK

If notify was successfully queued for send. UNAVAILABLE: If CHRE doesn’t have resources to queue the send at this time (transient error). INVALID_ARGUMENT: If arguments are invalid (check logs).

pw::Result<RfcommChannel> AcquireRfcommChannel(
uint16_t connection_handle,
RfcommChannel::Config rx_config,
RfcommChannel::Config tx_config,
uint8_t channel_number,
Function<void(pw::span<uint8_t> payload)> &&payload_from_controller_fn,
Function<void(L2capChannelEvent event)> &&event_fn,
)#

Returns an RFCOMM channel that supports writing to and reading from a remote peer.

Parameters:
  • connection_handle[in] The connection handle of the remote peer.

  • rx_config[in] Parameters applying to reading packets. See rfcomm_channel.h for details.

  • tx_config[in] Parameters applying to writing packets. See rfcomm_channel.h for details.

  • channel_number[in] RFCOMM channel number to use.

  • payload_from_controller_fn[in] Read callback to be invoked on Rx frames.

  • event_fn[in] Handle asynchronous events such as errors encountered by the channel. See l2cap_channel_common.h.

Returns:

Code

Description

INVALID_ARGUMENT

If arguments are invalid (check logs). UNAVAILABLE: If channel could not be created.

bool HasSendLeAclCapability() const#

Indicates whether the proxy has the capability of sending LE ACL packets. Note that this indicates intention, so it can be true even if the proxy has not yet or has been unable to reserve credits from the host.

bool HasSendBrEdrAclCapability() const#

Indicates whether the proxy has the capability of sending BR/EDR ACL packets. Note that this indicates intention, so it can be true even if the proxy has not yet or has been unable to reserve credits from the host.

uint16_t GetNumFreeLeAclPackets() const#

Returns the number of available LE ACL send credits for the proxy. Can be zero if the controller has not yet been initialized by the host.

uint16_t GetNumFreeBrEdrAclPackets() const#

Returns the number of available BR/EDR ACL send credits for the proxy. Can be zero if the controller has not yet been initialized by the host.

Public Static Functions

static inline constexpr size_t GetNumSimultaneousAclSendsSupported()#

Returns the max number of LE ACL sends that can be in-flight at one time. That is, ACL packets that have been sent and not yet released.

static inline constexpr size_t GetMaxAclSendSize()#

Returns the max LE ACL packet size supported to be sent.

static inline constexpr size_t GetMaxNumAclConnections()#

Returns the max number of simultaneous LE ACL connections supported.

Code size analysis#

Delta when constructing a proxy and just sending packets through.

Label

Segment

Delta

Create and use proxy as a simple passthrough

FLASH

DEL

-596

__aeabi_dmul

DEL

-464

__aeabi_ddiv

+30

[section .code]

-4

quorem

+255

__aeabi_dsub

DEL

-160

__aeabi_d2f

DEL

-140

__gtdf2

DEL

-120

pw::bloat::BloatThisBinary()

DEL

-108

__floatundidf

DEL

-80

__aeabi_d2iz

DEL

-68

__extendsfdf2

+1

pw_assert_tokenized_HandleAssertFailure::_pw_tokenizer_string_entry_60_5

DEL

-44

__aeabi_dcmpun

DEL

-36

__aeabi_i2d

DEL

-32

__aeabi_cdrcmple

DEL

-32

__aeabi_ui2d

DEL

-20

__aeabi_dcmpeq

DEL

-20

__aeabi_dcmpge

DEL

-20

__aeabi_dcmpgt

DEL

-20

__aeabi_dcmple

DEL

-20

__aeabi_dcmplt

-4

p05.0

DEL

-12

main

DEL

-6

__aeabi_memclr

-2

pw_boot_PreMainInit

DEL

-2

pw_boot_PreStaticConstructorInit

NEW

+308

pw::allocator::internal::CrashNextPrevMismatched()::_pw_tokenizer_string_entry_40_3

NEW

+308

pw::allocator::internal::CrashPrevNextMismatched()::_pw_tokenizer_string_entry_59_7

NEW

+270

pw::multibuf::SimpleAllocator::DoAllocate()

NEW

+253

pw::allocator::internal::CrashNextMisaligned()::_pw_tokenizer_string_entry_29_1

NEW

+253

pw::allocator::internal::CrashPrevMisaligned()::_pw_tokenizer_string_entry_48_5

NEW

+239

pw::bluetooth::proxy::L2capAclUSignalingChannel::OnCFramePayload()::_pw_tokenizer_string_entry_56_7

NEW

+216

pw::bluetooth::MakeEmbossView<>()

NEW

+216

pw::bluetooth::proxy::H4Storage::ReleaseH4Buff()::_pw_tokenizer_string_entry_49_1

NEW

+215

pw::allocator::internal::GenericBlockAllocator::CrashOnAllocated()::_pw_tokenizer_string_entry_26_1

NEW

+213

pw::bluetooth::proxy::AclDataChannel::Credits::Reserve()::_pw_tokenizer_string_entry_60_13

NEW

+213

pw::bluetooth::proxy::AclDataChannel::ProcessDisconnectionCompleteEvent()::_pw_tokenizer_string_entry_363_49

NEW

+213

pw::bluetooth::proxy::L2capCoc::Create()::_pw_tokenizer_string_entry_152_13

NEW

+210

pw::bluetooth::proxy::L2capCoc::ProcessPduFromControllerMultibuf()::_pw_tokenizer_string_entry_230_29

NEW

+208

pw::bluetooth::proxy::L2capCoc::HandlePduFromController()::_pw_tokenizer_string_entry_285_43

NEW

+207

pw::bluetooth::proxy::AclDataChannel::Credits::Reserve()::_pw_tokenizer_string_entry_44_5

NEW

+203

pw::bluetooth::proxy::AclDataChannel::ProcessDisconnectionCompleteEvent()::_pw_tokenizer_string_entry_345_45

NEW

+203

pw::bluetooth::proxy::L2capLeUSignalingChannel::OnCFramePayload()::_pw_tokenizer_string_entry_62_11

NEW

+201

pw::allocator::internal::CrashPoisonedWhileInUse()::_pw_tokenizer_string_entry_26_1

NEW

+200

pw::bluetooth::proxy::L2capStatusTracker::HandleConnectionComplete()::_pw_tokenizer_string_entry_53_3

NEW

+196

pw::allocator::internal::CrashPoisonCorrupted()::_pw_tokenizer_string_entry_31_3

NEW

+192

pw::bluetooth::proxy::L2capSignalingChannel::HandleFlowControlCreditInd()::_pw_tokenizer_string_entry_245_23

NEW

+186

pw::bluetooth::proxy::L2capCoc::ProcessPduFromControllerMultibuf()::_pw_tokenizer_string_entry_198_21

NEW

+186

pw::containers::internal::AATreeItem::Rebalance()

NEW

+184

pw::allocator::internal::CrashMisaligned()::_pw_tokenizer_string_entry_26_1

NEW

+184

pw::bluetooth::proxy::L2capCoc::HandlePduFromController()::_pw_tokenizer_string_entry_300_47

NEW

+184

pw::bluetooth::proxy::L2capCoc::ProcessPduFromControllerMultibuf()::_pw_tokenizer_string_entry_210_25

NEW

+183

pw::bluetooth::proxy::L2capAclUSignalingChannel::OnCFramePayload()::_pw_tokenizer_string_entry_43_3

NEW

+183

pw::containers::internal::CheckIntrusiveItemIsUncontained()::_pw_tokenizer_string_entry_28_3

NEW

+182

pw::bluetooth::proxy::L2capCoc::HandlePduFromController()::_pw_tokenizer_string_entry_326_55

NEW

+182

pw::containers::internal::AATree<>::InsertImpl()

NEW

+180

pw::bluetooth::proxy::ProxyHost::HandleAclFromHost()::_pw_tokenizer_string_entry_404_63

NEW

+179

pw::allocator::internal::GenericBlockAllocator::CrashOnInvalidFree()::_pw_tokenizer_string_entry_33_3

NEW

+179

pw::bluetooth::proxy::L2capChannel::OnFragmentedPduReceived()::_pw_tokenizer_string_entry_149_11

NEW

+177

pw::bluetooth::proxy::L2capChannelManager::DrainChannelQueues()::_pw_tokenizer_string_entry_118_13

NEW

+177

pw::bluetooth::proxy::L2capCoc::HandlePduFromController()::_pw_tokenizer_string_entry_337_59

NEW

+176

pw::bluetooth::proxy::L2capSignalingChannel::HandlePduFromHost()::_pw_tokenizer_string_entry_82_11

NEW

+175

pw::bluetooth::proxy::L2capLeUSignalingChannel::OnCFramePayload()::_pw_tokenizer_string_entry_39_3

NEW

+173

pw::bluetooth::proxy::L2capCoc::HandlePduFromController()::_pw_tokenizer_string_entry_313_51

NEW

+172

pw::bluetooth::proxy::ProxyHost::HandleCommandCompleteEvent()::_pw_tokenizer_string_entry_331_47

NEW

+172

pw::bluetooth::proxy::ProxyHost::HandleCommandCompleteEvent()::_pw_tokenizer_string_entry_345_51

NEW

+170

pw::bluetooth::emboss::GenericCommandCompleteEventView<>::Ok()

NEW

+170

pw::bluetooth::proxy::L2capSignalingChannel::HandlePduFromController()::_pw_tokenizer_string_entry_61_7

NEW

+170

pw::bluetooth::proxy::ProxyHost::CheckForActiveFragmenting()::_pw_tokenizer_string_entry_95_5

NEW

+169

pw::multibuf::MultiBuf::const_iterator::operator+=()::_pw_tokenizer_string_entry_331_17

NEW

+167

pw::bluetooth::proxy::ProxyHost::HandleEventFromHost()::_pw_tokenizer_string_entry_187_23

NEW

+167

pw::containers::internal::CheckIntrusiveContainerIsEmpty()::_pw_tokenizer_string_entry_22_1

NEW

+166

pw::bluetooth::proxy::AclDataChannel::HandleNumberOfCompletedPacketsEvent()::_pw_tokenizer_string_entry_167_29

NEW

+165

pw::bluetooth::proxy::L2capChannel::Stop()::_pw_tokenizer_string_entry_71_5

NEW

+163

pw::bluetooth::proxy::ProxyHost::HandleCommandCompleteEvent()::_pw_tokenizer_string_entry_318_43

NEW

+163

pw::bluetooth::proxy::RfcommChannel::Write()::_pw_tokenizer_string_entry_116_3

NEW

+161

pw::bluetooth::proxy::AclDataChannel::ProcessDisconnectionCompleteEvent()::_pw_tokenizer_string_entry_325_41

NEW

+161

pw::bluetooth::proxy::L2capAclUSignalingChannel::OnCFramePayload()::_pw_tokenizer_string_entry_47_5

NEW

+161

pw::bluetooth::proxy::ProxyHost::HandleEventFromController()::_pw_tokenizer_string_entry_141_19

NEW

+159

pw::bluetooth::proxy::AclDataChannel::HandleNumberOfCompletedPacketsEvent()

NEW

+158

pw::allocator::AllocatableBlock<>::DoResize()

NEW

+157

pw::bluetooth::proxy::L2capCoc::Create()::_pw_tokenizer_string_entry_139_9

NEW

+157

pw::bluetooth::proxy::RfcommChannel::OnFragmentedPduReceived()::_pw_tokenizer_string_entry_283_35

NEW

+154

pw::bluetooth::proxy::AclDataChannel::Credits::Reserve()::_pw_tokenizer_string_entry_52_9

NEW

+154

pw::bluetooth::proxy::AclDataChannel::HandleConnectionCompleteEvent()::_pw_tokenizer_string_entry_248_33

NEW

+154

pw::bluetooth::proxy::AclDataChannel::HandleLeConnectionCompleteEvent()::_pw_tokenizer_string_entry_264_37

NEW

+154

pw::bluetooth::proxy::L2capChannelManager::GetAclH4Packet()::_pw_tokenizer_string_entry_58_7

NEW

+154

pw::bluetooth::proxy::L2capCoc::HandlePduFromController()::_pw_tokenizer_string_entry_271_35

NEW

+154

pw::bluetooth::proxy::RfcommChannel::HandlePduFromController()::_pw_tokenizer_string_entry_177_11

NEW

+152

pw::bluetooth::proxy::L2capChannel::AreValidParameters()::_pw_tokenizer_string_entry_179_15

NEW

+149

pw::bluetooth::proxy::ProxyHost::HandleCommandCompleteEvent()::_pw_tokenizer_string_entry_303_39

NEW

+148

pw::bluetooth::proxy::RfcommChannel::Write()::_pw_tokenizer_string_entry_93_1

NEW

+147

pw::bluetooth::proxy::ProxyHost::HandleAclFromHost()::_pw_tokenizer_string_entry_385_59

NEW

+146

pw::bluetooth::proxy::L2capCoc::AddCredits()::_pw_tokenizer_string_entry_403_63

NEW

+146

pw::bluetooth::proxy::ProxyHost::AcquireBasicL2capChannel()::_pw_tokenizer_string_entry_519_75

NEW

+146

pw::bluetooth::proxy::ProxyHost::AcquireL2capCoc()::_pw_tokenizer_string_entry_445_65

NEW

+146

pw::bluetooth::proxy::ProxyHost::AcquireL2capCoc()::_pw_tokenizer_string_entry_478_69

NEW

+146

pw::bluetooth::proxy::ProxyHost::HandleLeMetaEvent()::_pw_tokenizer_string_entry_268_35

NEW

+145

pw::bluetooth::proxy::GattNotifyChannel::Write()::_pw_tokenizer_string_entry_31_7

NEW

+144

pw::bluetooth::proxy::L2capCoc::Write()::_pw_tokenizer_string_entry_58_3

NEW

+144

pw::bluetooth::proxy::L2capCoc::Write()::_pw_tokenizer_string_entry_68_7

NEW

+144

pw::bluetooth::proxy::L2capSignalingChannel::SendFlowControlCreditInd()::_pw_tokenizer_string_entry_266_27

NEW

+143

pw::allocator::internal::GenericBlockAllocator::CrashOnDoubleFree()::_pw_tokenizer_string_entry_37_5

NEW

+142

pw::allocator::AlignableBlock<>::DoAllocFirst()

NEW

+142

pw::bluetooth::proxy::AclDataChannel::Credits::MarkCompleted()::_pw_tokenizer_string_entry_78_17

NEW

+142

pw::bluetooth::proxy::GattNotifyChannel::Write()::_pw_tokenizer_string_entry_27_3

NEW

+142

pw::bluetooth::proxy::GattNotifyChannel::Write()::_pw_tokenizer_string_entry_39_11

NEW

+142

pw::bluetooth::proxy::L2capCoc::HandlePduFromController()::_pw_tokenizer_string_entry_276_39

NEW

+142

pw::bluetooth::proxy::L2capCoc::ProcessPduFromControllerMultibuf()::_pw_tokenizer_string_entry_186_17

NEW

+142

pw::bluetooth::proxy::ProxyHost::HandleAclFromController()::_pw_tokenizer_string_entry_236_31

NEW

+141

pw::bluetooth::proxy::BasicL2capChannel::HandlePduFromController()::_pw_tokenizer_string_entry_104_3

NEW

+141

pw::bluetooth::proxy::ProxyHost::HandleAclFromController()::_pw_tokenizer_string_entry_216_27

NEW

+140

pw::allocator::AllocatableBlock<>::DoAllocLast()

NEW

+140

pw::bluetooth::proxy::AclDataChannel::LookupCredits()::_pw_tokenizer_string_entry_105_21

NEW

+140

pw::bluetooth::proxy::AclDataChannel::LookupCredits()::_pw_tokenizer_string_entry_93_19

NEW

+140

pw::bluetooth::proxy::L2capSignalingChannel::HandleConnectionReq()::_pw_tokenizer_string_entry_153_15

NEW

+140

pw::containers::internal::AATreeItem::Unmap()

NEW

+139

pw::bluetooth::proxy::AclDataChannel::SendAcl()::_pw_tokenizer_string_entry_391_57

NEW

+138

pw::bluetooth::proxy::RfcommChannel::HandlePduFromController()::_pw_tokenizer_string_entry_168_7

NEW

+137

pw::bluetooth::proxy::L2capChannel::Close()::_pw_tokenizer_string_entry_78_7

NEW

+137

pw::bluetooth::proxy::ProxyHost::CheckForFragmentedStart()::_pw_tokenizer_string_entry_116_13

NEW

+135

pw::bluetooth::proxy::AclDataChannel::SendAcl()::_pw_tokenizer_string_entry_398_61

NEW

+134

pw::allocator::BlockAllocator<>::Init()

NEW

+134

pw::bluetooth::proxy::RfcommChannel::HandlePduFromController()::_pw_tokenizer_string_entry_186_15

NEW

+134

pw::bluetooth::proxy::RfcommChannel::HandlePduFromController()::_pw_tokenizer_string_entry_199_19

NEW

+133

pw::bluetooth::proxy::ProxyHost::CheckForActiveFragmenting()::_pw_tokenizer_string_entry_98_9

NEW

+130

pw::bluetooth::proxy::AclDataChannel::SendAcl()::_pw_tokenizer_string_entry_384_53

NEW

+129

pw::bluetooth::proxy::L2capSignalingChannel::HandleConnectionRsp()::_pw_tokenizer_string_entry_186_19

NEW

+128

pw::multibuf::MultiBufChunks::insert()::_pw_tokenizer_string_entry_266_13

NEW

+128

pw::multibuf::MultiBufChunks::push_back()::_pw_tokenizer_string_entry_250_11

NEW

+128

pw::multibuf::MultiBufChunks::push_front()::_pw_tokenizer_string_entry_242_9

NEW

+126

pw::bluetooth::proxy::L2capCoc::ProcessPduFromControllerMultibuf()::_pw_tokenizer_string_entry_234_31

NEW

+124

pw::bluetooth::proxy::L2capChannel::AreValidParameters()::_pw_tokenizer_string_entry_183_19

NEW

+124

pw::bluetooth::proxy::L2capCoc::SendAdditionalRxCredits()::_pw_tokenizer_string_entry_172_15

NEW

+124

pw::bluetooth::proxy::ProxyHost::AcquireL2capCoc()::_pw_tokenizer_string_entry_451_67

NEW

+124

pw::bluetooth::proxy::ProxyHost::AcquireL2capCoc()::_pw_tokenizer_string_entry_484_71

NEW

+124

pw::bluetooth::proxy::RfcommChannel::HandlePduFromController()::_pw_tokenizer_string_entry_209_23

NEW

+124

pw::multibuf::Chunk::Merge()::_pw_tokenizer_string_entry_61_1

NEW

+124

pw::multibuf::MultiBuf::DiscardPrefix()::_pw_tokenizer_string_entry_79_1

NEW

+124

std::__find_if<>()

NEW

+122

pw::multibuf::SimpleAllocator::InternalAllocateContiguous()

NEW

+121

pw::bluetooth::proxy::ProxyHost::HandleCommandFromHost()::_pw_tokenizer_string_entry_371_55

NEW

+121

pw::multibuf::MultiBuf::TakePrefix()::_pw_tokenizer_string_entry_193_7

NEW

+120

pw::Allocator::DoReallocate()

NEW

+119

pw::bluetooth::proxy::GattNotifyChannel::Create()::_pw_tokenizer_string_entry_87_15

NEW

+118

pw::bluetooth::proxy::ProxyHost::CheckForFragmentedStart()::_pw_tokenizer_string_entry_126_15

NEW

+118

pw::bluetooth::proxy::RfcommChannel::HandlePduFromController()::_pw_tokenizer_string_entry_231_27

NEW

+118

pw::multibuf::Chunk::TakePrefix()::_pw_tokenizer_string_entry_215_9

NEW

+118

pw::multibuf::Chunk::TakeSuffix()::_pw_tokenizer_string_entry_233_11

NEW

+116

pw::bluetooth::proxy::L2capChannelManager::GetAclH4Packet()::_pw_tokenizer_string_entry_64_11

NEW

+116

pw::multibuf::internal::LinkedRegionTracker::~LinkedRegionTracker()::_pw_tokenizer_string_entry_31_1

NEW

+114

pw::bluetooth::MakeEmbossWriter<>()

NEW

+114

pw::bluetooth::proxy::ProxyHost::SendAdditionalRxCredits()::_pw_tokenizer_string_entry_502_73

NEW

+114

pw::bluetooth::proxy::RfcommChannel::HandlePduFromController()::_pw_tokenizer_string_entry_243_31

NEW

+110

pw::multibuf::Chunk::Slice()::_pw_tokenizer_string_entry_199_3

NEW

+110

pw::multibuf::MultiBuf::Slice()::_pw_tokenizer_string_entry_91_3

NEW

+110

pw::multibuf::MultiBuf::TruncateAfter()::_pw_tokenizer_string_entry_105_5

NEW

+108

pw::bluetooth::emboss::GenericCommandHeaderView<>::Ok()

NEW

+108

pw::multibuf::Chunk::Slice()::_pw_tokenizer_string_entry_200_5

NEW

+107

pw::multibuf::Chunk::Slice()::_pw_tokenizer_string_entry_201_7

NEW

+106

pw::multibuf::MultiBufChunks::take_front()::_pw_tokenizer_string_entry_280_15

NEW

+100

pw::allocator::AlignableBlock<>::DoAllocAligned()

NEW

+100

pw::multibuf::SimpleAllocator::DoAllocate()::$_0::operator()()

NEW

+100

pw::multibuf::SimpleAllocator::InsertRegion()

NEW

+96

pw::containers::internal::AATree<>::insert()

NEW

+94

OUTLINED_FUNCTION_0

NEW

+92

pw::allocator::AllocatableBlock<>::DoAllocFirst()

NEW

+92

pw::allocator::FastSortedBucket<>::DoRemove()

NEW

+92

pw::allocator::FastSortedBucket<>::RemoveImpl<>()

NEW

+92

pw::multibuf::SimpleAllocator::GetAvailableMemorySize()

NEW

+90

pw::multibuf::MultiBufAllocator::MoreMemoryAvailable()

NEW

+85

pw::bluetooth::proxy::L2capLeUSignalingChannel::OnCFramePayload()::_pw_tokenizer_string_entry_52_7

NEW

+84

pw::containers::internal::AATree<>::GetLowerBoundImpl()

NEW

+84

pw::containers::internal::AATree<>::GetUpperBoundImpl()

NEW

+84

pw::multibuf::SimpleAllocator::InternalAllocateContiguous()::$_0::operator()()

NEW

+82

pw::allocator::ContiguousBlock<>::DoSplitFirst()

NEW

+82

pw::containers::internal::AATreeItem::Split()

NEW

+80

fit::internal::target<>::ops

NEW

+80

pw::allocator::AlignableBlock<>::DoCanAlloc()

NEW

+76

emboss::prelude::UIntView<>::Ok()

NEW

+74

pw::bluetooth::emboss::GenericGenericHciCommandView<>::EmbossReservedDollarVirtualIntrinsicSizeInBytesView::MaybeRead()

NEW

+74

pw::bluetooth::proxy::AclDataChannel::ProcessReadBufferSizeCommandCompleteEvent()

NEW

+72

pw::IntrusiveMultiMap<>::IntrusiveMultiMap<>()

NEW

+72

pw::allocator::internal::BucketBase<>::Add()

NEW

+72

pw::bluetooth::emboss::GenericGenericHciCommandView<>::Ok()

NEW

+72

pw::multibuf::Chunk::Free()

NEW

+70

pw::GetAlignedSubspan()

NEW

+70

pw::allocator::internal::BucketBase<>::FindPrevIf<>()

NEW

+70

pw::bluetooth::emboss::GenericGenericHciCommandView<>::payload()

NEW

+66

pw::allocator::ContiguousBlock<>::Init()

NEW

+66

pw::bluetooth::emboss::GenericOpCodeBitsView<>::Ok()

NEW

+64

OUTLINED_FUNCTION_1

NEW

+64

pw::allocator::AllocatableBlock<>::AllocFirst()

NEW

+64

pw::allocator::BestFitAllocator<>

NEW

+64

pw::allocator::BlockAllocator<>

NEW

+64

pw::allocator::internal::BucketBase<>::Remove()

NEW

+64

pw::bluetooth::proxy::AclDataChannel::LookupCredits()

NEW

+64

pw::multibuf::internal::LinkedRegionTracker::Destroy()

NEW

+62

pw::bluetooth::emboss::GenericCommandCompleteEventView<>::EmbossReservedVirtualReturnParametersSizeView::MaybeRead()

NEW

+62

pw::containers::internal::AATreeItem::Skew()

NEW

+62

pw::multibuf::ChunkRegionTracker::CreateFirstChunk()

NEW

+56

pw::bluetooth::emboss::GenericGenericHciCommandView<>::IsComplete()

NEW

+56

pw::containers::internal::AATree<>::AATree()

NEW

+56

pw::containers::internal::GenericAATree::erase_one()

NEW

+56

pw_assert_HandleFailure::_pw_tokenizer_string_entry_35_1

NEW

+54

pw::containers::internal::AATreeItem::Clear()

NEW

+52

_ZN2pw9Allocator3NewINS_8multibuf8internal19LinkedRegionTrackerETpTnRiJEJRNS2_15SimpleAllocatorERKNS_4spanISt4byteLj4294967295EEEEEEPT_DpOT1_

NEW

+52

pw::allocator::SynchronizedAllocator<>

NEW

+50

_ZNO2pw6ResultINS_8multibuf10OwnedChunkEE9transformIRFNS1_8MultiBufEOS2_ES5_TnNSt9enable_ifIXsr3stdE23is_move_constructible_vIT0_EEiE4typeELi0EEENS0_ISA_EEOT_

NEW

+50

pw::allocator::AllocatableBlock<>::DoCanAlloc()

NEW

+48

pw::multibuf::internal::LinkedRegionTracker::~LinkedRegionTracker()

NEW

+46

pw::allocator::AllocatableBlock<>::Resize()

NEW

+46

pw::allocator::BlockWithLayout<>::RequestedLayout()

NEW

+44

pw::allocator::BlockWithLayout<>::DoAllocFirst()

NEW

+44

pw::bluetooth::proxy::L2capAclUSignalingChannel

NEW

+44

pw::bluetooth::proxy::L2capLeUSignalingChannel

NEW

+44

pw::bluetooth::proxy::L2capSignalingChannel

NEW

+44

pw::containers::internal::AATreeItem::SetLevel()

NEW

+42

pw::allocator::internal::SortedBucketBase<>::DoAdd()

NEW

+40

pw::bluetooth::proxy::BasicL2capChannel

NEW

+40

pw::bluetooth::proxy::L2capChannel

NEW

+40

pw::containers::internal::AATreeItem::GetPredecessor()

NEW

+40

pw::containers::internal::AATreeItem::GetSuccessor()

NEW

+40

pw::containers::internal::GenericAATree::end()

NEW

+38

pw::allocator::FastSortedBucket<>::DoRemoveCompatible()

NEW

+38

pw::allocator::internal::SortedBucketBase<>::DoRemoveCompatible()

NEW

+38

pw::containers::internal::AATreeItem::IsMapped()

NEW

+38

pw::internal_result::StatusOrData<>::~StatusOrData()

NEW

+37

pw::bluetooth::proxy::AclDataChannel::Credits::MarkCompleted()::_pw_tokenizer_string_entry_78_15

NEW

+37

pw::bluetooth::proxy::AclDataChannel::Credits::Reserve()::_pw_tokenizer_string_entry_52_7

NEW

+37

pw::bluetooth::proxy::AclDataChannel::Credits::Reserve()::_pw_tokenizer_string_entry_60_11

NEW

+37

pw::bluetooth::proxy::AclDataChannel::HandleConnectionCompleteEvent()::_pw_tokenizer_string_entry_248_31

NEW

+37

pw::bluetooth::proxy::AclDataChannel::HandleLeConnectionCompleteEvent()::_pw_tokenizer_string_entry_264_35

NEW

+37

pw::bluetooth::proxy::AclDataChannel::HandleNumberOfCompletedPacketsEvent()::_pw_tokenizer_string_entry_167_27

NEW

+37

pw::bluetooth::proxy::AclDataChannel::ProcessDisconnectionCompleteEvent()::_pw_tokenizer_string_entry_325_39

NEW

+37

pw::bluetooth::proxy::AclDataChannel::ProcessDisconnectionCompleteEvent()::_pw_tokenizer_string_entry_345_43

NEW

+37

pw::bluetooth::proxy::AclDataChannel::ProcessDisconnectionCompleteEvent()::_pw_tokenizer_string_entry_363_47

NEW

+37

pw::bluetooth::proxy::AclDataChannel::SendAcl()::_pw_tokenizer_string_entry_384_51

NEW

+37

pw::bluetooth::proxy::AclDataChannel::SendAcl()::_pw_tokenizer_string_entry_391_55

NEW

+37

pw::bluetooth::proxy::AclDataChannel::SendAcl()::_pw_tokenizer_string_entry_398_59

NEW

+37

pw::bluetooth::proxy::BasicL2capChannel::HandlePduFromController()::_pw_tokenizer_string_entry_104_1

NEW

+37

pw::bluetooth::proxy::GattNotifyChannel::Create()::_pw_tokenizer_string_entry_87_13

NEW

+37

pw::bluetooth::proxy::GattNotifyChannel::Write()::_pw_tokenizer_string_entry_27_1

NEW

+37

pw::bluetooth::proxy::GattNotifyChannel::Write()::_pw_tokenizer_string_entry_31_5

NEW

+37

pw::bluetooth::proxy::GattNotifyChannel::Write()::_pw_tokenizer_string_entry_39_9

NEW

+37

pw::bluetooth::proxy::L2capAclUSignalingChannel::OnCFramePayload()::_pw_tokenizer_string_entry_43_1

NEW

+37

pw::bluetooth::proxy::L2capChannel::AreValidParameters()::_pw_tokenizer_string_entry_179_13

NEW

+37

pw::bluetooth::proxy::L2capChannel::AreValidParameters()::_pw_tokenizer_string_entry_183_17

NEW

+37

pw::bluetooth::proxy::L2capChannel::OnFragmentedPduReceived()::_pw_tokenizer_string_entry_149_9

NEW

+37

pw::bluetooth::proxy::L2capChannelManager::GetAclH4Packet()::_pw_tokenizer_string_entry_58_5

NEW

+37

pw::bluetooth::proxy::L2capChannelManager::GetAclH4Packet()::_pw_tokenizer_string_entry_64_9

NEW

+37

pw::bluetooth::proxy::L2capCoc::AddCredits()::_pw_tokenizer_string_entry_403_61

NEW

+37

pw::bluetooth::proxy::L2capCoc::Create()::_pw_tokenizer_string_entry_152_11

NEW

+37

pw::bluetooth::proxy::L2capCoc::HandlePduFromController()::_pw_tokenizer_string_entry_271_33

NEW

+37

pw::bluetooth::proxy::L2capCoc::HandlePduFromController()::_pw_tokenizer_string_entry_276_37

NEW

+37

pw::bluetooth::proxy::L2capCoc::HandlePduFromController()::_pw_tokenizer_string_entry_285_41

NEW

+37

pw::bluetooth::proxy::L2capCoc::HandlePduFromController()::_pw_tokenizer_string_entry_300_45

NEW

+37

pw::bluetooth::proxy::L2capCoc::HandlePduFromController()::_pw_tokenizer_string_entry_313_49

NEW

+37

pw::bluetooth::proxy::L2capCoc::HandlePduFromController()::_pw_tokenizer_string_entry_326_53

NEW

+37

pw::bluetooth::proxy::L2capCoc::HandlePduFromController()::_pw_tokenizer_string_entry_337_57

NEW

+37

pw::bluetooth::proxy::L2capCoc::ProcessPduFromControllerMultibuf()::_pw_tokenizer_string_entry_198_19

NEW

+37

pw::bluetooth::proxy::L2capCoc::ProcessPduFromControllerMultibuf()::_pw_tokenizer_string_entry_210_23

NEW

+37

pw::bluetooth::proxy::L2capCoc::ProcessPduFromControllerMultibuf()::_pw_tokenizer_string_entry_230_27

NEW

+37

pw::bluetooth::proxy::L2capCoc::Write()::_pw_tokenizer_string_entry_58_1

NEW

+37

pw::bluetooth::proxy::L2capCoc::Write()::_pw_tokenizer_string_entry_68_5

NEW

+37

pw::bluetooth::proxy::L2capLeUSignalingChannel::OnCFramePayload()::_pw_tokenizer_string_entry_39_1

NEW

+37

pw::bluetooth::proxy::L2capLeUSignalingChannel::OnCFramePayload()::_pw_tokenizer_string_entry_62_9

NEW

+37

pw::bluetooth::proxy::L2capSignalingChannel::HandleConnectionReq()::_pw_tokenizer_string_entry_153_13

NEW

+37

pw::bluetooth::proxy::L2capSignalingChannel::HandleConnectionRsp()::_pw_tokenizer_string_entry_186_17

NEW

+37

pw::bluetooth::proxy::L2capSignalingChannel::HandleFlowControlCreditInd()::_pw_tokenizer_string_entry_245_21

NEW

+37

pw::bluetooth::proxy::L2capSignalingChannel::HandlePduFromController()::_pw_tokenizer_string_entry_61_5

NEW

+37

pw::bluetooth::proxy::L2capSignalingChannel::HandlePduFromHost()::_pw_tokenizer_string_entry_82_9

NEW

+37

pw::bluetooth::proxy::L2capSignalingChannel::SendFlowControlCreditInd()::_pw_tokenizer_string_entry_266_25

NEW

+37

pw::bluetooth::proxy::L2capStatusTracker::HandleConnectionComplete()::_pw_tokenizer_string_entry_53_1

NEW

+37

pw::bluetooth::proxy::ProxyHost::CheckForActiveFragmenting()::_pw_tokenizer_string_entry_98_7

NEW

+37

pw::bluetooth::proxy::ProxyHost::CheckForFragmentedStart()::_pw_tokenizer_string_entry_116_11

NEW

+37

pw::bluetooth::proxy::ProxyHost::HandleAclFromController()::_pw_tokenizer_string_entry_216_25

NEW

+37

pw::bluetooth::proxy::ProxyHost::HandleAclFromController()::_pw_tokenizer_string_entry_236_29

NEW

+37

pw::bluetooth::proxy::ProxyHost::HandleAclFromHost()::_pw_tokenizer_string_entry_385_57

NEW

+37

pw::bluetooth::proxy::ProxyHost::HandleAclFromHost()::_pw_tokenizer_string_entry_404_61

NEW

+37

pw::bluetooth::proxy::ProxyHost::HandleCommandCompleteEvent()::_pw_tokenizer_string_entry_303_37

NEW

+37

pw::bluetooth::proxy::ProxyHost::HandleCommandCompleteEvent()::_pw_tokenizer_string_entry_318_41

NEW

+37

pw::bluetooth::proxy::ProxyHost::HandleCommandCompleteEvent()::_pw_tokenizer_string_entry_331_45

NEW

+37

pw::bluetooth::proxy::ProxyHost::HandleCommandCompleteEvent()::_pw_tokenizer_string_entry_345_49

NEW

+37

pw::bluetooth::proxy::ProxyHost::HandleCommandFromHost()::_pw_tokenizer_string_entry_371_53

NEW

+37

pw::bluetooth::proxy::ProxyHost::HandleEventFromController()::_pw_tokenizer_string_entry_141_17

NEW

+37

pw::bluetooth::proxy::ProxyHost::HandleEventFromHost()::_pw_tokenizer_string_entry_187_21

NEW

+37

pw::bluetooth::proxy::RfcommChannel::HandlePduFromController()::_pw_tokenizer_string_entry_168_5

NEW

+37

pw::bluetooth::proxy::RfcommChannel::HandlePduFromController()::_pw_tokenizer_string_entry_177_9

NEW

+37

pw::bluetooth::proxy::RfcommChannel::HandlePduFromController()::_pw_tokenizer_string_entry_186_13

NEW

+37

pw::bluetooth::proxy::RfcommChannel::HandlePduFromController()::_pw_tokenizer_string_entry_199_17

NEW

+37

pw::bluetooth::proxy::RfcommChannel::HandlePduFromController()::_pw_tokenizer_string_entry_209_21

NEW

+37

pw::bluetooth::proxy::RfcommChannel::HandlePduFromController()::_pw_tokenizer_string_entry_243_29

NEW

+37

pw::bluetooth::proxy::RfcommChannel::OnFragmentedPduReceived()::_pw_tokenizer_string_entry_283_33

NEW

+36

__gnu_cxx::__ops::_Iter_pred<>::operator()<>()

NEW

+36

pw::Deallocator::Delete<>()

NEW

+36

pw::containers::internal::AATree<>::equal_range()

NEW

+36

pw::containers::internal::AATreeIterator<>::operator++()

NEW

+35

pw::bluetooth::proxy::ProxyHost::HandleLeMetaEvent()::_pw_tokenizer_string_entry_268_33

NEW

+34

pw::allocator::DetailedBlockImpl<>::SetRequestedAlignment()

NEW

+34

pw::bluetooth::proxy::RfcommChannel::HandlePduFromController()::_pw_tokenizer_string_entry_231_25

NEW

+34

pw::containers::internal::AATreeItem::Replace()

NEW

+34

pw::span<>::subspan()

NEW

+32

pw::allocator::PoisonableBlock<>::DoSplitLast()

NEW

+32

pw::containers::internal::AATree<>::lower_bound()

NEW

+32

pw::containers::internal::AATree<>::upper_bound()

NEW

+32

pw::internal_result::StatusOrData<>::operator=()

NEW

+32

pw::multibuf::MultiBufChunks::push_front()

NEW

+32

pw::multibuf::internal::LinkedRegionTracker

NEW

+30

pw::allocator::FastSortedBucket<>::DoAdd()

NEW

+30

pw::allocator::internal::BucketBase<>::MakeCanAllocPredicate()::{lambda()#1}::operator()()

NEW

+30

pw::containers::internal::AATreeItem::SetRight()

NEW

+29

pw::bluetooth::proxy::AclDataChannel::Credits::MarkCompleted()

NEW

+28

pw::allocator::DetailedBlockImpl<>::SetRequestedSize()

NEW

+28

pw::allocator::PoisonableBlock<>::DoSplitFirst()

NEW

+28

pw::bluetooth::proxy::H4PacketWithH4

NEW

+28

pw::bluetooth::proxy::H4PacketWithHci

NEW

+28

pw::containers::internal::AATreeItem::SetLeft()

NEW

+26

pw::allocator::ContiguousBlock<>::DoSplitLast()

NEW

+24

OUTLINED_FUNCTION_5

NEW

+24

OUTLINED_FUNCTION_7

NEW

+24

pw::PackedPtr<>::set()

NEW

+24

pw::PackedPtr<>::set_packed_value()

NEW

+24

pw::allocator::ForwardSortedBucket<>::MakeAddPredicate()::{lambda()#1}::operator()()

NEW

+24

pw::bluetooth::emboss::GenericReadBufferSizeCommandCompleteEventView<>::total_num_acl_data_packets()

NEW

+24

pw::containers::internal::AATreeItem::GetLevel()

NEW

+24

pw::internal_result::StatusOrData<>::Assign<>()

NEW

+24

pw_assert_tokenized_HandleCheckFailure

NEW

+23

pw::allocator::BlockWithLayout<>::DoResize()

NEW

+22

pw::IntrusiveMultiMap<>::erase()

NEW

+22

pw::IntrusiveMultiMap<>::lower_bound()

NEW

+22

pw::allocator::internal::SortedBucketBase<>::DoRemove()

NEW

+22

pw::containers::internal::IntrusiveListItemBase<>::unlist()

NEW

+22

pw::internal_result::StatusOrData<>::AssignStatus<>()

NEW

+20

__cxa_pure_virtual

NEW

+20

fit::internal::null_target<>::ops

NEW

+20

pw::IntrusiveMultiMap<>::end()

NEW

+20

pw::IntrusiveMultiMap<>::equal_range()

NEW

+20

pw::IntrusiveMultiMap<>::insert()

NEW

+20

pw::containers::internal::CheckIntrusiveContainerIsEmpty()

NEW

+20

pw::containers::internal::CheckIntrusiveItemIsUncontained()

NEW

+20

pw::containers::internal::LegacyIntrusiveList<>::Item::~Item()

NEW

+20

pw::multibuf::Chunk::RemoveFromRegionList()

NEW

+20

pw::multibuf::MultiBufAllocator

NEW

+20

pw::multibuf::MultiBufChunks::Release()

NEW

+20

pw::multibuf::SimpleAllocator

NEW

+20

write

NEW

+18

OUTLINED_FUNCTION_3

NEW

+18

OUTLINED_FUNCTION_4

NEW

+18

fit::internal::target<>::invoke()

NEW

+18

pw::allocator::FastSortedBucket<>::FastSortedBucket()

NEW

+18

pw::containers::internal::GenericAATree::clear()

NEW

+18

pw::multibuf::OwnedChunk::Release()

NEW

+16

free

NEW

+16

pw::bluetooth::emboss::GenericCommandCompleteEventView<>::EmbossReservedVirtualReturnParametersSizeView::Ok()

NEW

+16

pw::bluetooth::emboss::GenericGenericHciCommandView<>::EmbossReservedDollarVirtualIntrinsicSizeInBytesView::Ok()

NEW

+16

pw::multibuf::SimpleAllocator::~SimpleAllocator()

NEW

+16

std::get_terminate()

NEW

+16

strlen

NEW

+14

OUTLINED_FUNCTION_2

NEW

+14

OUTLINED_FUNCTION_9

NEW

+14

emboss::prelude::UIntView<>::Write<>()

NEW

+14

pw::bluetooth::emboss::GenericGenericHciCommandView<>::EmbossReservedDollarVirtualIntrinsicSizeInBytesView::UncheckedRead()

NEW

+14

pw::containers::internal::AATreeItem::GetLeftmost()

NEW

+14

pw::containers::internal::AATreeItem::GetRightmost()

NEW

+14

pw::containers::internal::AATreeItem::GetRoot()

NEW

+14

pw::containers::internal::GenericAATree::SetRoot()

NEW

+14

pw::containers::internal::IntrusiveForwardListItem::DoGetPrevious()

NEW

+14

pw::multibuf::internal::LinkedRegionTracker::AllocateChunkClass()

NEW

+14

pw::multibuf::internal::LinkedRegionTracker::DeallocateChunkClass()

NEW

+12

pw::IntrusiveMultiMap<>::IntrusiveMultiMap()

NEW

+12

pw::allocator::internal::CrashMisaligned()

NEW

+12

pw::allocator::internal::CrashNextMisaligned()

NEW

+12

pw::allocator::internal::CrashNextPrevMismatched()

NEW

+12

pw::allocator::internal::CrashPoisonCorrupted()

NEW

+12

pw::allocator::internal::CrashPoisonedWhileInUse()

NEW

+12

pw::allocator::internal::CrashPrevMisaligned()

NEW

+12

pw::allocator::internal::CrashPrevNextMismatched()

NEW

+12

pw::allocator::internal::GenericBlockAllocator::CrashOnAllocated()

NEW

+12

pw::allocator::internal::GenericBlockAllocator::CrashOnDoubleFree()

NEW

+12

pw::allocator::internal::GenericBlockAllocator::CrashOnInvalidFree()

NEW

+12

pw::bluetooth::emboss::GenericOpCodeBitsView<>::ocf()

NEW

+12

pw::bluetooth::emboss::GenericOpCodeBitsView<>::ogf()

NEW

+12

pw::internal_result::StatusOrData<>::Clear()

NEW

+12

std::_Optional_payload_base<>::_M_reset()

NEW

+10

OUTLINED_FUNCTION_13

NEW

+10

pw::containers::internal::AATreeItem::Reset()

NEW

+10

pw::multibuf::MultiBuf::FromChunk()

NEW

+10

pw::multibuf::internal::LinkedRegionTracker::Region()

NEW

+10

std::terminate()

NEW

+9

pw::bluetooth::proxy::AclDataChannel::ProcessSpecificLEReadBufferSizeCommandCompleteEvent<>()::_pw_tokenizer_string_entry_141_25

NEW

+8

OUTLINED_FUNCTION_12

NEW

+8

OUTLINED_FUNCTION_6

NEW

+8

__cxxabiv1::__terminate()

NEW

+8

operator delete()

NEW

+8

std::_Optional_payload_base<>::_M_destroy()

NEW

+6

OUTLINED_FUNCTION_10

NEW

+6

OUTLINED_FUNCTION_11

NEW

+6

OUTLINED_FUNCTION_14

NEW

+6

OUTLINED_FUNCTION_8

NEW

+6

__aeabi_memclr4

NEW

+6

pw::allocator::FastSortedItem<>::key()

NEW

+4

pw::bluetooth::proxy::L2capLeUSignalingChannel::OnCFramePayload()::_pw_tokenizer_string_entry_52_5

+28,400

Roadmap#

  • ACL flow control

  • Sending GATT notifications

  • CMake support

  • Receiving GATT notifications

  • Taking ownership of a L2CAP channel

  • Bazel support

  • And more…