[bt] Add EventPacket::params()

Replace the repeated pattern
   event.view().payload<EventCompleteEventParams>()
with
   event.params<EventCompleteEventParams>()

Test: no behavior change (bt-host-unittests)

Change-Id: I56d077351d0278ff0f81a48a1d98f3df5e3e1c8c
diff --git a/src/connectivity/bluetooth/core/bt-host/gap/bredr_connection_manager.cc b/src/connectivity/bluetooth/core/bt-host/gap/bredr_connection_manager.cc
index 1319c01..7d442a6 100644
--- a/src/connectivity/bluetooth/core/bt-host/gap/bredr_connection_manager.cc
+++ b/src/connectivity/bluetooth/core/bt-host/gap/bredr_connection_manager.cc
@@ -310,8 +310,7 @@
 void BrEdrConnectionManager::OnConnectionRequest(
     const hci::EventPacket& event) {
   ZX_DEBUG_ASSERT(event.event_code() == hci::kConnectionRequestEventCode);
-  const auto& params =
-      event.view().payload<hci::ConnectionRequestEventParams>();
+  const auto& params = event.params<hci::ConnectionRequestEventParams>();
   std::string link_type_str =
       params.link_type == hci::LinkType::kACL ? "ACL" : "(e)SCO";
 
@@ -368,8 +367,7 @@
     const hci::EventPacket& event) {
   ZX_DEBUG_ASSERT(event.event_code() == hci::kConnectionCompleteEventCode);
 
-  const auto& params =
-      event.view().payload<hci::ConnectionCompleteEventParams>();
+  const auto& params = event.params<hci::ConnectionCompleteEventParams>();
   auto connection_handle = letoh16(params.connection_handle);
   DeviceAddress addr(DeviceAddress::Type::kBREDR, params.bd_addr);
 
@@ -492,8 +490,7 @@
 void BrEdrConnectionManager::OnDisconnectionComplete(
     const hci::EventPacket& event) {
   ZX_DEBUG_ASSERT(event.event_code() == hci::kDisconnectionCompleteEventCode);
-  const auto& params =
-      event.view().payload<hci::DisconnectionCompleteEventParams>();
+  const auto& params = event.params<hci::DisconnectionCompleteEventParams>();
 
   hci::ConnectionHandle handle = le16toh(params.connection_handle);
   if (hci_is_error(event, WARN, "gap-bredr",
@@ -534,7 +531,7 @@
 
 void BrEdrConnectionManager::OnLinkKeyRequest(const hci::EventPacket& event) {
   ZX_DEBUG_ASSERT(event.event_code() == hci::kLinkKeyRequestEventCode);
-  const auto& params = event.view().payload<hci::LinkKeyRequestParams>();
+  const auto& params = event.params<hci::LinkKeyRequestParams>();
 
   DeviceAddress addr(DeviceAddress::Type::kBREDR, params.bd_addr);
 
@@ -581,8 +578,7 @@
 void BrEdrConnectionManager::OnLinkKeyNotification(
     const hci::EventPacket& event) {
   ZX_DEBUG_ASSERT(event.event_code() == hci::kLinkKeyNotificationEventCode);
-  const auto& params =
-      event.view().payload<hci::LinkKeyNotificationEventParams>();
+  const auto& params = event.params<hci::LinkKeyNotificationEventParams>();
 
   DeviceAddress addr(DeviceAddress::Type::kBREDR, params.bd_addr);
 
@@ -633,8 +629,7 @@
 void BrEdrConnectionManager::OnIOCapabilitiesRequest(
     const hci::EventPacket& event) {
   ZX_DEBUG_ASSERT(event.event_code() == hci::kIOCapabilityRequestEventCode);
-  const auto& params =
-      event.view().payload<hci::IOCapabilityRequestEventParams>();
+  const auto& params = event.params<hci::IOCapabilityRequestEventParams>();
 
   auto reply = hci::CommandPacket::New(
       hci::kIOCapabilityRequestReply,
@@ -658,8 +653,7 @@
 void BrEdrConnectionManager::OnUserConfirmationRequest(
     const hci::EventPacket& event) {
   ZX_DEBUG_ASSERT(event.event_code() == hci::kUserConfirmationRequestEventCode);
-  const auto& params =
-      event.view().payload<hci::UserConfirmationRequestEventParams>();
+  const auto& params = event.params<hci::UserConfirmationRequestEventParams>();
 
   bt_log(INFO, "gap-bredr", "auto-confirming pairing from %s (%u)",
          bt_str(params.bd_addr), params.numeric_value);
diff --git a/src/connectivity/bluetooth/core/bt-host/gap/bredr_discovery_manager.cc b/src/connectivity/bluetooth/core/bt-host/gap/bredr_discovery_manager.cc
index f2a9f42..66f06a6 100644
--- a/src/connectivity/bluetooth/core/bt-host/gap/bredr_discovery_manager.cc
+++ b/src/connectivity/bluetooth/core/bt-host/gap/bredr_discovery_manager.cc
@@ -31,7 +31,7 @@
     return updated;
   }
 
-  const auto& result = event.view().payload<EventParamType>();
+  const auto& result = event.params<EventParamType>();
   for (int i = 0; i < result.num_responses; i++) {
     DeviceAddress addr(DeviceAddress::Type::kBREDR,
                        result.responses[i].bd_addr);
@@ -274,8 +274,7 @@
            event.view().payload_size());
     return;
   }
-  const auto& result =
-      event.view().payload<hci::ExtendedInquiryResultEventParams>();
+  const auto& result = event.params<hci::ExtendedInquiryResultEventParams>();
 
   DeviceAddress addr(DeviceAddress::Type::kBREDR, result.bd_addr);
   Peer* peer = cache_->FindByAddress(addr);
diff --git a/src/connectivity/bluetooth/core/bt-host/gap/bredr_interrogator.cc b/src/connectivity/bluetooth/core/bt-host/gap/bredr_interrogator.cc
index b940ecf..458d6e5 100644
--- a/src/connectivity/bluetooth/core/bt-host/gap/bredr_interrogator.cc
+++ b/src/connectivity/bluetooth/core/bt-host/gap/bredr_interrogator.cc
@@ -176,7 +176,7 @@
                     hci::kRemoteNameRequestCompleteEventCode);
 
     const auto& params =
-        event.view().payload<hci::RemoteNameRequestCompleteEventParams>();
+        event.params<hci::RemoteNameRequestCompleteEventParams>();
 
     size_t len = 0;
     for (; len < hci::kMaxNameLength; len++) {
@@ -212,35 +212,35 @@
   auto it = pending_.find(peer_id);
   ZX_DEBUG_ASSERT(it != pending_.end());
 
-  it->second.callbacks.emplace_back([peer_id,
-                                     self = weak_ptr_factory_.GetWeakPtr()](
-                                        auto, const hci::EventPacket& event) {
-    if (hci_is_error(event, WARN, "gap-bredr",
-                     "read remote version info failed")) {
-      self->Complete(peer_id, event.ToStatus());
-      return;
-    }
+  it->second.callbacks.emplace_back(
+      [peer_id, self = weak_ptr_factory_.GetWeakPtr()](
+          auto, const hci::EventPacket& event) {
+        if (hci_is_error(event, WARN, "gap-bredr",
+                         "read remote version info failed")) {
+          self->Complete(peer_id, event.ToStatus());
+          return;
+        }
 
-    if (event.event_code() == hci::kCommandStatusEventCode) {
-      return;
-    }
+        if (event.event_code() == hci::kCommandStatusEventCode) {
+          return;
+        }
 
-    ZX_DEBUG_ASSERT(event.event_code() ==
-                    hci::kReadRemoteVersionInfoCompleteEventCode);
+        ZX_DEBUG_ASSERT(event.event_code() ==
+                        hci::kReadRemoteVersionInfoCompleteEventCode);
 
-    const auto params =
-        event.view().payload<hci::ReadRemoteVersionInfoCompleteEventParams>();
+        const auto params =
+            event.params<hci::ReadRemoteVersionInfoCompleteEventParams>();
 
-    Peer* peer = self->cache_->FindById(peer_id);
-    if (!peer) {
-      self->Complete(peer_id, hci::Status(HostError::kFailed));
-      return;
-    }
-    peer->set_version(params.lmp_version, params.manufacturer_name,
-                      params.lmp_subversion);
+        Peer* peer = self->cache_->FindById(peer_id);
+        if (!peer) {
+          self->Complete(peer_id, hci::Status(HostError::kFailed));
+          return;
+        }
+        peer->set_version(params.lmp_version, params.manufacturer_name,
+                          params.lmp_subversion);
 
-    self->MaybeComplete(peer_id);
-  });
+        self->MaybeComplete(peer_id);
+      });
 
   bt_log(SPEW, "gap-bredr", "asking for version info");
   hci_->command_channel()->SendCommand(
diff --git a/src/connectivity/bluetooth/core/bt-host/gap/low_energy_connection_manager.cc b/src/connectivity/bluetooth/core/bt-host/gap/low_energy_connection_manager.cc
index a36ec8e..d7ae431 100644
--- a/src/connectivity/bluetooth/core/bt-host/gap/low_energy_connection_manager.cc
+++ b/src/connectivity/bluetooth/core/bt-host/gap/low_energy_connection_manager.cc
@@ -841,8 +841,7 @@
 void LowEnergyConnectionManager::OnDisconnectionComplete(
     const hci::EventPacket& event) {
   ZX_DEBUG_ASSERT(event.event_code() == hci::kDisconnectionCompleteEventCode);
-  const auto& params =
-      event.view().payload<hci::DisconnectionCompleteEventParams>();
+  const auto& params = event.params<hci::DisconnectionCompleteEventParams>();
   hci::ConnectionHandle handle = le16toh(params.connection_handle);
 
   if (params.status != hci::StatusCode::kSuccess) {
@@ -882,9 +881,8 @@
 void LowEnergyConnectionManager::OnLEConnectionUpdateComplete(
     const hci::EventPacket& event) {
   ZX_DEBUG_ASSERT(event.event_code() == hci::kLEMetaEventCode);
-  ZX_DEBUG_ASSERT(
-      event.view().payload<hci::LEMetaEventParams>().subevent_code ==
-      hci::kLEConnectionUpdateCompleteSubeventCode);
+  ZX_DEBUG_ASSERT(event.params<hci::LEMetaEventParams>().subevent_code ==
+                  hci::kLEConnectionUpdateCompleteSubeventCode);
 
   auto payload =
       event.le_event_params<hci::LEConnectionUpdateCompleteSubeventParams>();
diff --git a/src/connectivity/bluetooth/core/bt-host/hci/acl_data_channel.cc b/src/connectivity/bluetooth/core/bt-host/hci/acl_data_channel.cc
index 238aa7b..27980fe 100644
--- a/src/connectivity/bluetooth/core/bt-host/hci/acl_data_channel.cc
+++ b/src/connectivity/bluetooth/core/bt-host/hci/acl_data_channel.cc
@@ -10,11 +10,10 @@
 #include <zircon/status.h>
 
 #include "slab_allocators.h"
-#include "transport.h"
-
 #include "src/connectivity/bluetooth/core/bt-host/common/log.h"
 #include "src/connectivity/bluetooth/core/bt-host/common/run_task_sync.h"
 #include "src/lib/fxl/strings/string_printf.h"
+#include "transport.h"
 
 namespace bt {
 namespace hci {
@@ -227,8 +226,7 @@
   ZX_DEBUG_ASSERT(async_get_default_dispatcher() == io_dispatcher_);
   ZX_DEBUG_ASSERT(event.event_code() == kNumberOfCompletedPacketsEventCode);
 
-  const auto& payload =
-      event.view().payload<NumberOfCompletedPacketsEventParams>();
+  const auto& payload = event.params<NumberOfCompletedPacketsEventParams>();
   size_t total_comp_packets = 0;
   size_t le_total_comp_packets = 0;
 
diff --git a/src/connectivity/bluetooth/core/bt-host/hci/advertising_report_parser.cc b/src/connectivity/bluetooth/core/bt-host/hci/advertising_report_parser.cc
index c452f43..78fc928 100644
--- a/src/connectivity/bluetooth/core/bt-host/hci/advertising_report_parser.cc
+++ b/src/connectivity/bluetooth/core/bt-host/hci/advertising_report_parser.cc
@@ -14,7 +14,7 @@
 AdvertisingReportParser::AdvertisingReportParser(const EventPacket& event)
     : encountered_error_(false) {
   ZX_DEBUG_ASSERT(event.event_code() == kLEMetaEventCode);
-  const auto& params = event.view().payload<LEMetaEventParams>();
+  const auto& params = event.params<LEMetaEventParams>();
   ZX_DEBUG_ASSERT(params.subevent_code == kLEAdvertisingReportSubeventCode);
 
   auto subevent_params =
@@ -27,8 +27,7 @@
 }
 
 bool AdvertisingReportParser::GetNextReport(
-    const LEAdvertisingReportData** out_data,
-    int8_t* out_rssi) {
+    const LEAdvertisingReportData** out_data, int8_t* out_rssi) {
   ZX_DEBUG_ASSERT(out_data);
   ZX_DEBUG_ASSERT(out_rssi);
 
diff --git a/src/connectivity/bluetooth/core/bt-host/hci/command_channel.cc b/src/connectivity/bluetooth/core/bt-host/hci/command_channel.cc
index 37cd9cf..e53fffe 100644
--- a/src/connectivity/bluetooth/core/bt-host/hci/command_channel.cc
+++ b/src/connectivity/bluetooth/core/bt-host/hci/command_channel.cc
@@ -471,11 +471,11 @@
   bool unregister_async_handler = false;
 
   if (event->event_code() == kCommandCompleteEventCode) {
-    const auto& params = event->view().payload<CommandCompleteEventParams>();
+    const auto& params = event->params<CommandCompleteEventParams>();
     matching_opcode = le16toh(params.command_opcode);
     allowed_command_packets_ = params.num_hci_command_packets;
   } else {  // kCommandStatusEventCode
-    const auto& params = event->view().payload<CommandStatusEventParams>();
+    const auto& params = event->params<CommandStatusEventParams>();
     matching_opcode = le16toh(params.command_opcode);
     allowed_command_packets_ = params.num_hci_command_packets;
     unregister_async_handler = params.status != StatusCode::kSuccess;
@@ -533,7 +533,7 @@
     bool is_le_event = false;
     if (event->event_code() == kLEMetaEventCode) {
       is_le_event = true;
-      event_code = event->view().payload<LEMetaEventParams>().subevent_code;
+      event_code = event->params<LEMetaEventParams>().subevent_code;
       event_handlers = &subevent_code_handlers_;
     } else {
       event_code = event->event_code();
diff --git a/src/connectivity/bluetooth/core/bt-host/hci/command_channel_unittest.cc b/src/connectivity/bluetooth/core/bt-host/hci/command_channel_unittest.cc
index 3674762..b08901e 100644
--- a/src/connectivity/bluetooth/core/bt-host/hci/command_channel_unittest.cc
+++ b/src/connectivity/bluetooth/core/bt-host/hci/command_channel_unittest.cc
@@ -134,7 +134,7 @@
     EXPECT_EQ(callback_id, id);
     if (cb_count == 1) {
       EXPECT_EQ(kCommandStatusEventCode, event.event_code());
-      const auto params = event.view().payload<CommandStatusEventParams>();
+      const auto params = event.params<CommandStatusEventParams>();
       EXPECT_EQ(StatusCode::kSuccess, params.status);
       EXPECT_EQ(kInquiry, params.command_opcode);
     } else {
@@ -181,14 +181,12 @@
     EXPECT_EQ(callback_id, id);
     EXPECT_EQ(kCommandStatusEventCode, event.event_code());
     EXPECT_EQ(StatusCode::kSuccess,
-              event.view().payload<CommandStatusEventParams>().status);
+              event.params<CommandStatusEventParams>().status);
     EXPECT_EQ(1, event.view()
                      .payload<CommandStatusEventParams>()
                      .num_hci_command_packets);
-    EXPECT_EQ(
-        kReset,
-        le16toh(
-            event.view().payload<CommandStatusEventParams>().command_opcode));
+    EXPECT_EQ(kReset,
+              le16toh(event.params<CommandStatusEventParams>().command_opcode));
   };
 
   auto reset = CommandPacket::New(kReset);
@@ -253,8 +251,7 @@
     }
     EXPECT_EQ(
         expected_opcode,
-        le16toh(
-            event.view().payload<CommandCompleteEventParams>().command_opcode));
+        le16toh(event.params<CommandCompleteEventParams>().command_opcode));
     cb_event_count++;
   };
 
@@ -328,8 +325,8 @@
   auto cb = [&reset_count, &cancel_count](CommandChannel::TransactionId id,
                                           const EventPacket& event) {
     EXPECT_EQ(kCommandCompleteEventCode, event.event_code());
-    auto opcode = le16toh(
-        event.view().payload<CommandCompleteEventParams>().command_opcode);
+    auto opcode =
+        le16toh(event.params<CommandCompleteEventParams>().command_opcode);
     if (opcode == kReset) {
       reset_count++;
     } else if (opcode == kInquiryCancel) {
@@ -427,7 +424,7 @@
     }
     if ((cb_count % 2) == 0) {
       EXPECT_EQ(kCommandStatusEventCode, event.event_code());
-      auto params = event.view().payload<CommandStatusEventParams>();
+      auto params = event.params<CommandStatusEventParams>();
       EXPECT_EQ(StatusCode::kSuccess, params.status);
     } else if ((cb_count % 2) == 1) {
       EXPECT_EQ(kTestEventCode0, event.event_code());
@@ -530,7 +527,7 @@
     EXPECT_EQ(callback_id, id);
     if (cb_count == 1) {
       EXPECT_EQ(kCommandStatusEventCode, event.event_code());
-      const auto params = event.view().payload<CommandStatusEventParams>();
+      const auto params = event.params<CommandStatusEventParams>();
       EXPECT_EQ(StatusCode::kSuccess, params.status);
       EXPECT_EQ(kReset, params.command_opcode);
     } else {
@@ -754,7 +751,7 @@
     event_count0++;
     EXPECT_EQ(hci::kLEMetaEventCode, event.event_code());
     EXPECT_EQ(kTestSubeventCode0,
-              event.view().payload<LEMetaEventParams>().subevent_code);
+              event.params<LEMetaEventParams>().subevent_code);
   };
 
   int event_count1 = 0;
@@ -765,7 +762,7 @@
     event_count1++;
     EXPECT_EQ(hci::kLEMetaEventCode, event.event_code());
     EXPECT_EQ(kTestSubeventCode1,
-              event.view().payload<LEMetaEventParams>().subevent_code);
+              event.params<LEMetaEventParams>().subevent_code);
   };
 
   auto id0 = cmd_channel()->AddLEMetaEventHandler(kTestSubeventCode0, event_cb0,
@@ -860,8 +857,7 @@
   int le_event_count = 0;
   auto le_event_cb = [&](const EventPacket& event) {
     EXPECT_EQ(kLEMetaEventCode, event.event_code());
-    EXPECT_EQ(kTestEventCode,
-              event.view().payload<LEMetaEventParams>().subevent_code);
+    EXPECT_EQ(kTestEventCode, event.params<LEMetaEventParams>().subevent_code);
     le_event_count++;
   };
   cmd_channel()->AddLEMetaEventHandler(kLEConnectionCompleteSubeventCode,
@@ -952,7 +948,7 @@
     EXPECT_TRUE(callback_id == id1 || callback_id == id2);
     EXPECT_EQ(kCommandStatusEventCode, event.event_code());
 
-    const auto params = event.view().payload<CommandStatusEventParams>();
+    const auto params = event.params<CommandStatusEventParams>();
     EXPECT_EQ(StatusCode::kUnspecifiedError, params.status);
     EXPECT_EQ(kReset, params.command_opcode);
   };
@@ -1031,7 +1027,7 @@
     if ((cb_count % 2) == 0) {
       // First event from each command - CommandStatus
       EXPECT_EQ(kCommandStatusEventCode, event.event_code());
-      auto params = event.view().payload<CommandStatusEventParams>();
+      auto params = event.params<CommandStatusEventParams>();
       EXPECT_EQ(StatusCode::kSuccess, params.status);
     } else {
       // Second event from each command - completion event
@@ -1172,7 +1168,7 @@
             // Status for kExclusiveOne -> Send kExclusiveTwo (queued)
             EXPECT_EQ(id1, callback_id);
             EXPECT_EQ(kCommandStatusEventCode, event.event_code());
-            auto params = event.view().payload<CommandStatusEventParams>();
+            auto params = event.params<CommandStatusEventParams>();
             EXPECT_EQ(StatusCode::kSuccess, params.status);
             auto packet = CommandPacket::New(kExclusiveTwo);
             id2 = cmd_channel->SendExclusiveCommand(
@@ -1200,7 +1196,7 @@
           case 2: {  // Status for kExclusiveTwo
             EXPECT_EQ(id2, callback_id);
             EXPECT_EQ(kCommandStatusEventCode, event.event_code());
-            auto params = event.view().payload<CommandStatusEventParams>();
+            auto params = event.params<CommandStatusEventParams>();
             EXPECT_EQ(StatusCode::kSuccess, params.status);
             break;
           }
@@ -1212,7 +1208,7 @@
           case 4: {  // Status for Second kExclusiveOne
             EXPECT_EQ(id3, callback_id);
             EXPECT_EQ(kCommandStatusEventCode, event.event_code());
-            auto params = event.view().payload<CommandStatusEventParams>();
+            auto params = event.params<CommandStatusEventParams>();
             EXPECT_EQ(StatusCode::kSuccess, params.status);
             break;
           }
diff --git a/src/connectivity/bluetooth/core/bt-host/hci/connection.cc b/src/connectivity/bluetooth/core/bt-host/hci/connection.cc
index 408f9cf..8f39f25 100644
--- a/src/connectivity/bluetooth/core/bt-host/hci/connection.cc
+++ b/src/connectivity/bluetooth/core/bt-host/hci/connection.cc
@@ -211,7 +211,7 @@
 
   auto status_cb = [](auto id, const EventPacket& event) {
     ZX_DEBUG_ASSERT(event.event_code() == kCommandStatusEventCode);
-    const auto& params = event.view().payload<CommandStatusEventParams>();
+    const auto& params = event.params<CommandStatusEventParams>();
     if (params.status != StatusCode::kSuccess) {
       bt_log(WARN, "hci", "ignoring failed disconnection status: %#.2x",
              params.status);
@@ -369,7 +369,7 @@
     return;
   }
 
-  const auto& params = event.view().payload<EncryptionChangeEventParams>();
+  const auto& params = event.params<EncryptionChangeEventParams>();
   hci::ConnectionHandle handle = le16toh(params.connection_handle);
 
   // Silently ignore the event as it isn't meant for this connection.
@@ -409,8 +409,7 @@
     return;
   }
 
-  const auto& params =
-      event.view().payload<EncryptionKeyRefreshCompleteEventParams>();
+  const auto& params = event.params<EncryptionKeyRefreshCompleteEventParams>();
   hci::ConnectionHandle handle = le16toh(params.connection_handle);
 
   // Silently ignore this event as it isn't meant for this connection.
@@ -435,7 +434,7 @@
 void ConnectionImpl::OnLELongTermKeyRequestEvent(const EventPacket& event) {
   ZX_DEBUG_ASSERT(thread_checker_.IsCreationThreadCurrent());
   ZX_DEBUG_ASSERT(event.event_code() == kLEMetaEventCode);
-  ZX_DEBUG_ASSERT(event.view().payload<LEMetaEventParams>().subevent_code ==
+  ZX_DEBUG_ASSERT(event.params<LEMetaEventParams>().subevent_code ==
                   kLELongTermKeyRequestSubeventCode);
 
   auto* params = event.le_event_params<LELongTermKeyRequestSubeventParams>();
diff --git a/src/connectivity/bluetooth/core/bt-host/hci/control_packets.cc b/src/connectivity/bluetooth/core/bt-host/hci/control_packets.cc
index af79cbb6..d2e7b22 100644
--- a/src/connectivity/bluetooth/core/bt-host/hci/control_packets.cc
+++ b/src/connectivity/bluetooth/core/bt-host/hci/control_packets.cc
@@ -58,7 +58,7 @@
   if (event.view().payload_size() < sizeof(T))
     return false;
 
-  *out_code = event.view().payload<T>().status;
+  *out_code = event.params<T>().status;
   return true;
 }
 
diff --git a/src/connectivity/bluetooth/core/bt-host/hci/control_packets.h b/src/connectivity/bluetooth/core/bt-host/hci/control_packets.h
index b3a6910..cc50614 100644
--- a/src/connectivity/bluetooth/core/bt-host/hci/control_packets.h
+++ b/src/connectivity/bluetooth/core/bt-host/hci/control_packets.h
@@ -52,6 +52,12 @@
   // Returns the HCI event code currently in this packet.
   EventCode event_code() const { return view().header().event_code; }
 
+  // Convenience function to get a parameter payload from a packet
+  template <typename ParamsType>
+  const ParamsType& params() const {
+    return view().payload<ParamsType>();
+  }
+
   // If this is a CommandComplete event packet, this method returns a pointer to
   // the beginning of the return parameter structure. If the given template type
   // would exceed the bounds of the packet or if this packet does not represent
@@ -63,7 +69,7 @@
             view().payload_size() - sizeof(CommandCompleteEventParams))
       return nullptr;
     return reinterpret_cast<const ReturnParams*>(
-        view().payload<CommandCompleteEventParams>().return_parameters);
+        params<CommandCompleteEventParams>().return_parameters);
   }
 
   // If this is a LE Meta Event packet, this method returns a pointer to the
@@ -77,7 +83,7 @@
             view().payload_size() - sizeof(LEMetaEventParams))
       return nullptr;
     return reinterpret_cast<const SubeventParams*>(
-        view().payload<LEMetaEventParams>().subevent_parameters);
+        params<LEMetaEventParams>().subevent_parameters);
   }
 
   // If this is an event packet with a standard status (See Vol 2, Part D), this
diff --git a/src/connectivity/bluetooth/core/bt-host/hci/low_energy_connector.cc b/src/connectivity/bluetooth/core/bt-host/hci/low_energy_connector.cc
index 042207b..f228291 100644
--- a/src/connectivity/bluetooth/core/bt-host/hci/low_energy_connector.cc
+++ b/src/connectivity/bluetooth/core/bt-host/hci/low_energy_connector.cc
@@ -193,7 +193,7 @@
 
 void LowEnergyConnector::OnConnectionCompleteEvent(const EventPacket& event) {
   ZX_DEBUG_ASSERT(event.event_code() == kLEMetaEventCode);
-  ZX_DEBUG_ASSERT(event.view().payload<LEMetaEventParams>().subevent_code ==
+  ZX_DEBUG_ASSERT(event.params<LEMetaEventParams>().subevent_code ==
                   kLEConnectionCompleteSubeventCode);
 
   auto params = event.le_event_params<LEConnectionCompleteSubeventParams>();
diff --git a/src/connectivity/bluetooth/core/bt-host/hci/packet_unittest.cc b/src/connectivity/bluetooth/core/bt-host/hci/packet_unittest.cc
index ff65302..36efe97 100644
--- a/src/connectivity/bluetooth/core/bt-host/hci/packet_unittest.cc
+++ b/src/connectivity/bluetooth/core/bt-host/hci/packet_unittest.cc
@@ -68,7 +68,7 @@
 
   EXPECT_EQ(kTestEventCode, packet->event_code());
   EXPECT_EQ(kPayloadSize, packet->view().payload_size());
-  EXPECT_EQ(127, packet->view().payload<TestPayload>().foo);
+  EXPECT_EQ(127, packet->params<TestPayload>().foo);
 }
 
 TEST(HCI_PacketTest, EventPacketReturnParams) {
diff --git a/src/connectivity/bluetooth/tools/bt-hci-tool/commands.cc b/src/connectivity/bluetooth/tools/bt-hci-tool/commands.cc
index 88292cc..3ab1673 100644
--- a/src/connectivity/bluetooth/tools/bt-hci-tool/commands.cc
+++ b/src/connectivity/bluetooth/tools/bt-hci-tool/commands.cc
@@ -660,20 +660,19 @@
   params->filter_duplicates = filter_duplicates;
 
   // Event handler to log when we receive advertising reports
-  auto le_adv_report_cb = [name_filter, addr_type_filter](
-                              const ::bt::hci::EventPacket& event) {
-    FXL_DCHECK(event.event_code() == ::bt::hci::kLEMetaEventCode);
-    FXL_DCHECK(
-        event.view().payload<::bt::hci::LEMetaEventParams>().subevent_code ==
-        ::bt::hci::kLEAdvertisingReportSubeventCode);
+  auto le_adv_report_cb =
+      [name_filter, addr_type_filter](const ::bt::hci::EventPacket& event) {
+        FXL_DCHECK(event.event_code() == ::bt::hci::kLEMetaEventCode);
+        FXL_DCHECK(event.params<::bt::hci::LEMetaEventParams>().subevent_code ==
+                   ::bt::hci::kLEAdvertisingReportSubeventCode);
 
-    ::bt::hci::AdvertisingReportParser parser(event);
-    const ::bt::hci::LEAdvertisingReportData* data;
-    int8_t rssi;
-    while (parser.GetNextReport(&data, &rssi)) {
-      DisplayAdvertisingReport(*data, rssi, name_filter, addr_type_filter);
-    }
-  };
+        ::bt::hci::AdvertisingReportParser parser(event);
+        const ::bt::hci::LEAdvertisingReportData* data;
+        int8_t rssi;
+        while (parser.GetNextReport(&data, &rssi)) {
+          DisplayAdvertisingReport(*data, rssi, name_filter, addr_type_filter);
+        }
+      };
   auto event_handler_id = cmd_data->cmd_channel()->AddLEMetaEventHandler(
       ::bt::hci::kLEAdvertisingReportSubeventCode, le_adv_report_cb,
       cmd_data->dispatcher());
@@ -822,8 +821,7 @@
   auto inquiry_result_cb = [filter](const ::bt::hci::EventPacket& event) {
     FXL_DCHECK(event.event_code() == ::bt::hci::kInquiryResultEventCode);
 
-    const auto& result =
-        event.view().payload<::bt::hci::InquiryResultEventParams>();
+    const auto& result = event.params<::bt::hci::InquiryResultEventParams>();
 
     for (int i = 0; i < result.num_responses; i++) {
       if (!filter.empty() &&
@@ -842,7 +840,7 @@
   // The callback invoked for an Inquiry Complete response.
   auto inquiry_complete_cb = [cleanup_cb = cleanup_cb.share()](
                                  const ::bt::hci::EventPacket& event) mutable {
-    auto params = event.view().payload<::bt::hci::InquiryCompleteEventParams>();
+    auto params = event.params<::bt::hci::InquiryCompleteEventParams>();
     std::cout << fxl::StringPrintf("  Inquiry Complete - status: 0x%02x\n",
                                    params.status);
     cleanup_cb();
@@ -866,8 +864,7 @@
              dispatcher = cmd_data->dispatcher()](
                 ::bt::hci::CommandChannel::TransactionId id,
                 const ::bt::hci::EventPacket& event) mutable {
-    auto return_params =
-        event.view().payload<::bt::hci::CommandStatusEventParams>();
+    auto return_params = event.params<::bt::hci::CommandStatusEventParams>();
     LogCommandResult(return_params.status, id, "Command Status");
     if (return_params.status != ::bt::hci::StatusCode::kSuccess) {
       cleanup_cb();