pw_bluetooth_proxy: Use LE read buffer event
Code previous was incorrectly using the classic read buffer event.
Bug: 326499611
Test: CQ
Change-Id: Ib454e352b3934b9e4976f7665904f7dd39299fd8
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209878
Pigweed-Auto-Submit: David Rees <drees@google.com>
Reviewed-by: Ben Lawson <benlawson@google.com>
Lint: Lint 🤖 <android-build-ayeaye@system.gserviceaccount.com>
Reviewed-by: Faraaz Sareshwala <fsareshwala@google.com>
Commit-Queue: David Rees <drees@google.com>
diff --git a/pw_bluetooth_proxy/acl_data_channel.cc b/pw_bluetooth_proxy/acl_data_channel.cc
index 679dcc7..b3604bb 100644
--- a/pw_bluetooth_proxy/acl_data_channel.cc
+++ b/pw_bluetooth_proxy/acl_data_channel.cc
@@ -22,8 +22,8 @@
// Acquire LE ACL credits for proxy host use by removing the amount needed from
// the amount that is passed to the host.
-void AclDataChannel::ProcessReadBufferSizeCommandCompleteEvent(
- emboss::ReadBufferSizeCommandCompleteEventWriter read_buffer_event) {
+void AclDataChannel::ProcessLEReadBufferSizeCommandCompleteEvent(
+ emboss::LEReadBufferSizeV1CommandCompleteEventWriter read_buffer_event) {
if (initialized_) {
PW_LOG_WARN(
"AclDataChannel is already initialized, but encountered another "
@@ -33,12 +33,13 @@
initialized_ = true;
uint16_t controller_max_le_acl_packets =
- read_buffer_event.total_num_acl_data_packets().Read();
+ read_buffer_event.total_num_le_acl_data_packets().Read();
proxy_max_le_acl_packets_ =
std::min(controller_max_le_acl_packets, le_acl_credits_to_reserve_);
uint16_t host_max_le_acl_packets =
controller_max_le_acl_packets - proxy_max_le_acl_packets_;
- read_buffer_event.total_num_acl_data_packets().Write(host_max_le_acl_packets);
+ read_buffer_event.total_num_le_acl_data_packets().Write(
+ host_max_le_acl_packets);
PW_LOG_INFO(
"Bluetooth Proxy reserved %d ACL data credits. Passed %d on to host.",
proxy_max_le_acl_packets_,
diff --git a/pw_bluetooth_proxy/proxy_host.cc b/pw_bluetooth_proxy/proxy_host.cc
index cccca71..f41528b 100644
--- a/pw_bluetooth_proxy/proxy_host.cc
+++ b/pw_bluetooth_proxy/proxy_host.cc
@@ -62,18 +62,19 @@
}
if (command_complete_event.command_opcode_enum().Read() !=
- emboss::OpCode::READ_BUFFER_SIZE) {
+ emboss::OpCode::LE_READ_BUFFER_SIZE_V1) {
return;
}
auto read_event =
- MakeEmboss<emboss::ReadBufferSizeCommandCompleteEventWriter>(hci_buffer);
+ MakeEmboss<emboss::LEReadBufferSizeV1CommandCompleteEventWriter>(
+ hci_buffer);
if (!read_event.IsComplete()) {
PW_LOG_ERROR(
- "Buffer is too small for READ_BUFFER_SIZE command complete event. So "
- "will not process");
+ "Buffer is too small for LE_READ_BUFFER_SIZE_V1 command complete "
+ "event. So will not process.");
return;
}
- acl_data_channel_.ProcessReadBufferSizeCommandCompleteEvent(read_event);
+ acl_data_channel_.ProcessLEReadBufferSizeCommandCompleteEvent(read_event);
}
void ProxyHost::HandleH4HciFromController(H4HciPacket h4_packet) {
diff --git a/pw_bluetooth_proxy/proxy_host_test.cc b/pw_bluetooth_proxy/proxy_host_test.cc
index 1079f5b..8d74605 100644
--- a/pw_bluetooth_proxy/proxy_host_test.cc
+++ b/pw_bluetooth_proxy/proxy_host_test.cc
@@ -382,26 +382,26 @@
// Proxy Host should reserve requested ACL LE credits from controller's ACL LE
// credits.
TEST(ReserveLeAclCredits, ProxyCreditsReserveCredits) {
- std::array<uint8_t,
- emboss::ReadBufferSizeCommandCompleteEventWriter::SizeInBytes() +
- 1>
+ std::array<
+ uint8_t,
+ emboss::LEReadBufferSizeV1CommandCompleteEventWriter::SizeInBytes() + 1>
send_packet;
- emboss::ReadBufferSizeCommandCompleteEventWriter view =
+ emboss::LEReadBufferSizeV1CommandCompleteEventWriter view =
CreateAndPopulateToHostEventView<
- emboss::ReadBufferSizeCommandCompleteEventWriter>(
+ emboss::LEReadBufferSizeV1CommandCompleteEventWriter>(
send_packet, emboss::EventCode::COMMAND_COMPLETE);
view.command_complete().command_opcode_enum().Write(
- emboss::OpCode::READ_BUFFER_SIZE);
- view.total_num_acl_data_packets().Write(10);
+ emboss::OpCode::LE_READ_BUFFER_SIZE_V1);
+ view.total_num_le_acl_data_packets().Write(10);
bool send_called = false;
H4HciPacketSendFn send_to_host_fn([&send_called](H4HciPacket h4_packet) {
send_called = true;
- emboss::ReadBufferSizeCommandCompleteEventWriter view =
- MakeEmboss<emboss::ReadBufferSizeCommandCompleteEventWriter>(
+ emboss::LEReadBufferSizeV1CommandCompleteEventWriter view =
+ MakeEmboss<emboss::LEReadBufferSizeV1CommandCompleteEventWriter>(
H4HciSubspan(h4_packet));
// Should reserve 2 credits from original total of 10 (so 8 left for host).
- EXPECT_EQ(view.total_num_acl_data_packets().Read(), 8);
+ EXPECT_EQ(view.total_num_le_acl_data_packets().Read(), 8);
});
H4HciPacketSendFn send_to_controller_fn(
@@ -421,26 +421,26 @@
// If controller provides less than wanted credits, we should reserve that
// smaller amount.
TEST(ReserveLeAclCredits, ProxyCreditsCappedByControllerCredits) {
- std::array<uint8_t,
- emboss::ReadBufferSizeCommandCompleteEventWriter::SizeInBytes() +
- 1>
+ std::array<
+ uint8_t,
+ emboss::LEReadBufferSizeV1CommandCompleteEventWriter::SizeInBytes() + 1>
send_packet;
- emboss::ReadBufferSizeCommandCompleteEventWriter view =
+ emboss::LEReadBufferSizeV1CommandCompleteEventWriter view =
CreateAndPopulateToHostEventView<
- emboss::ReadBufferSizeCommandCompleteEventWriter>(
+ emboss::LEReadBufferSizeV1CommandCompleteEventWriter>(
send_packet, emboss::EventCode::COMMAND_COMPLETE);
view.command_complete().command_opcode_enum().Write(
- emboss::OpCode::READ_BUFFER_SIZE);
- view.total_num_acl_data_packets().Write(5);
+ emboss::OpCode::LE_READ_BUFFER_SIZE_V1);
+ view.total_num_le_acl_data_packets().Write(5);
bool send_called = false;
H4HciPacketSendFn send_to_host_fn([&send_called](H4HciPacket h4_packet) {
send_called = true;
// We want 7, but can reserve only 5 from original 5 (so 0 left for host).
- emboss::ReadBufferSizeCommandCompleteEventWriter view =
- MakeEmboss<emboss::ReadBufferSizeCommandCompleteEventWriter>(
+ emboss::LEReadBufferSizeV1CommandCompleteEventWriter view =
+ MakeEmboss<emboss::LEReadBufferSizeV1CommandCompleteEventWriter>(
H4HciSubspan(h4_packet));
- EXPECT_EQ(view.total_num_acl_data_packets().Read(), 0);
+ EXPECT_EQ(view.total_num_le_acl_data_packets().Read(), 0);
});
H4HciPacketSendFn send_to_controller_fn(
@@ -459,26 +459,26 @@
// Proxy Host can reserve zero credits from controller's ACL LE credits.
TEST(ReserveLeAclCredits, ProxyCreditsReserveZeroCredits) {
- std::array<uint8_t,
- emboss::ReadBufferSizeCommandCompleteEventWriter::SizeInBytes() +
- 1>
+ std::array<
+ uint8_t,
+ emboss::LEReadBufferSizeV1CommandCompleteEventWriter::SizeInBytes() + 1>
send_packet;
- emboss::ReadBufferSizeCommandCompleteEventWriter view =
+ emboss::LEReadBufferSizeV1CommandCompleteEventWriter view =
CreateAndPopulateToHostEventView<
- emboss::ReadBufferSizeCommandCompleteEventWriter>(
+ emboss::LEReadBufferSizeV1CommandCompleteEventWriter>(
send_packet, emboss::EventCode::COMMAND_COMPLETE);
view.command_complete().command_opcode_enum().Write(
- emboss::OpCode::READ_BUFFER_SIZE);
- view.total_num_acl_data_packets().Write(10);
+ emboss::OpCode::LE_READ_BUFFER_SIZE_V1);
+ view.total_num_le_acl_data_packets().Write(10);
bool send_called = false;
H4HciPacketSendFn send_to_host_fn([&send_called](H4HciPacket h4_packet) {
send_called = true;
- emboss::ReadBufferSizeCommandCompleteEventWriter view =
- MakeEmboss<emboss::ReadBufferSizeCommandCompleteEventWriter>(
+ emboss::LEReadBufferSizeV1CommandCompleteEventWriter view =
+ MakeEmboss<emboss::LEReadBufferSizeV1CommandCompleteEventWriter>(
H4HciSubspan(h4_packet));
// Should reserve 0 credits from original total of 10 (so 10 left for host).
- EXPECT_EQ(view.total_num_acl_data_packets().Read(), 10);
+ EXPECT_EQ(view.total_num_le_acl_data_packets().Read(), 10);
});
H4HciPacketSendFn send_to_controller_fn(
@@ -497,26 +497,26 @@
// If controller has no credits, proxy should reserve none.
TEST(ReserveLeAclPackets, ProxyCreditsZeroWhenHostCreditsZero) {
- std::array<uint8_t,
- emboss::ReadBufferSizeCommandCompleteEventWriter::SizeInBytes() +
- 1>
+ std::array<
+ uint8_t,
+ emboss::LEReadBufferSizeV1CommandCompleteEventWriter::SizeInBytes() + 1>
send_packet;
- emboss::ReadBufferSizeCommandCompleteEventWriter view =
+ emboss::LEReadBufferSizeV1CommandCompleteEventWriter view =
CreateAndPopulateToHostEventView<
- emboss::ReadBufferSizeCommandCompleteEventWriter>(
+ emboss::LEReadBufferSizeV1CommandCompleteEventWriter>(
send_packet, emboss::EventCode::COMMAND_COMPLETE);
view.command_complete().command_opcode_enum().Write(
- emboss::OpCode::READ_BUFFER_SIZE);
- view.total_num_acl_data_packets().Write(0);
+ emboss::OpCode::LE_READ_BUFFER_SIZE_V1);
+ view.total_num_le_acl_data_packets().Write(0);
bool send_called = false;
H4HciPacketSendFn send_to_host_fn([&send_called](H4HciPacket h4_packet) {
send_called = true;
- emboss::ReadBufferSizeCommandCompleteEventWriter view =
- MakeEmboss<emboss::ReadBufferSizeCommandCompleteEventWriter>(
+ emboss::LEReadBufferSizeV1CommandCompleteEventWriter view =
+ MakeEmboss<emboss::LEReadBufferSizeV1CommandCompleteEventWriter>(
H4HciSubspan(h4_packet));
// Should reserve 0 credit from original total of 0 (so 0 left for host).
- EXPECT_EQ(view.total_num_acl_data_packets().Read(), 0);
+ EXPECT_EQ(view.total_num_le_acl_data_packets().Read(), 0);
});
H4HciPacketSendFn send_to_controller_fn(
diff --git a/pw_bluetooth_proxy/public/pw_bluetooth_proxy/acl_data_channel.h b/pw_bluetooth_proxy/public/pw_bluetooth_proxy/acl_data_channel.h
index 0591589..6cad139 100644
--- a/pw_bluetooth_proxy/public/pw_bluetooth_proxy/acl_data_channel.h
+++ b/pw_bluetooth_proxy/public/pw_bluetooth_proxy/acl_data_channel.h
@@ -36,8 +36,8 @@
AclDataChannel(AclDataChannel&&) = delete;
AclDataChannel& operator=(AclDataChannel&&) = delete;
- void ProcessReadBufferSizeCommandCompleteEvent(
- emboss::ReadBufferSizeCommandCompleteEventWriter read_buffer_event);
+ void ProcessLEReadBufferSizeCommandCompleteEvent(
+ emboss::LEReadBufferSizeV1CommandCompleteEventWriter read_buffer_event);
// 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.