From 1c6ab98015e350e7c4259343837bfe0ceecbd62e Mon Sep 17 00:00:00 2001
From: Chris Manton <cmanton@google.com>
Date: Mon, 6 Mar 2023 16:16:19 +0000
Subject: [PATCH] enum-ify bta::dm::tBTA_DM_SEARCH_EVT

Bug: 259118978
Test: bt_host_test_bta

Change-Id: I1cdb2669acf80135253b3efc2c25e889be17f167
---
 system/bta/include/bta_api.h   | 45 +++++++++++++++++++++++++---------
 system/bta/test/bta_dm_test.cc | 26 ++++++++++++++++++++
 system/btif/src/btif_dm.cc     |  6 +++++
 3 files changed, 66 insertions(+), 11 deletions(-)

diff --git a/system/bta/include/bta_api.h b/system/bta/include/bta_api.h
index 462043facee..6b979a0f4eb 100644
--- a/system/bta/include/bta_api.h
+++ b/system/bta/include/bta_api.h
@@ -451,17 +451,40 @@ typedef void(tBTA_DM_SEC_CBACK)(tBTA_DM_SEC_EVT event, tBTA_DM_SEC* p_data);
 #define BTA_DM_BLE_PF_FILT_LOGIC_OR 0
 
 /* Search callback events */
-#define BTA_DM_INQ_RES_EVT 0  /* Inquiry result for a peer device. */
-#define BTA_DM_INQ_CMPL_EVT 1 /* Inquiry complete. */
-#define BTA_DM_DISC_RES_EVT 2 /* Discovery result for a peer device. */
-#define BTA_DM_GATT_OVER_LE_RES_EVT \
-  3 /* GATT services over LE transport discovered */
-#define BTA_DM_DISC_CMPL_EVT 4          /* Discovery complete. */
-#define BTA_DM_SEARCH_CANCEL_CMPL_EVT 6 /* Search cancelled */
-#define BTA_DM_DID_RES_EVT 7            /* Vendor/Product ID search result */
-#define BTA_DM_GATT_OVER_SDP_RES_EVT 8  /* GATT services over SDP discovered */
-
-typedef uint8_t tBTA_DM_SEARCH_EVT;
+typedef enum : uint8_t {
+  BTA_DM_INQ_RES_EVT = 0,  /* Inquiry result for a peer device. */
+  BTA_DM_INQ_CMPL_EVT = 1, /* Inquiry complete. */
+  BTA_DM_DISC_RES_EVT = 2, /* Discovery result for a peer device. */
+  BTA_DM_GATT_OVER_LE_RES_EVT =
+      3,                    /* GATT services over LE transport discovered */
+  BTA_DM_DISC_CMPL_EVT = 4, /* Discovery complete. */
+  BTA_DM_SEARCH_CANCEL_CMPL_EVT = 5, /* Search cancelled */
+  BTA_DM_DID_RES_EVT = 6,            /* Vendor/Product ID search result */
+  BTA_DM_GATT_OVER_SDP_RES_EVT = 7,  /* GATT services over SDP discovered */
+} tBTA_DM_SEARCH_EVT;
+
+#ifndef CASE_RETURN_TEXT
+#define CASE_RETURN_TEXT(code) \
+  case code:                   \
+    return #code
+#endif
+
+inline std::string bta_dm_search_evt_text(const tBTA_DM_SEARCH_EVT& event) {
+  switch (event) {
+    CASE_RETURN_TEXT(BTA_DM_INQ_RES_EVT);
+    CASE_RETURN_TEXT(BTA_DM_INQ_CMPL_EVT);
+    CASE_RETURN_TEXT(BTA_DM_DISC_RES_EVT);
+    CASE_RETURN_TEXT(BTA_DM_GATT_OVER_LE_RES_EVT);
+    CASE_RETURN_TEXT(BTA_DM_DISC_CMPL_EVT);
+    CASE_RETURN_TEXT(BTA_DM_SEARCH_CANCEL_CMPL_EVT);
+    CASE_RETURN_TEXT(BTA_DM_DID_RES_EVT);
+    CASE_RETURN_TEXT(BTA_DM_GATT_OVER_SDP_RES_EVT);
+    default:
+      return base::StringPrintf("UNKNOWN[%hhu]", event);
+  }
+}
+
+#undef CASE_RETURN_TEXT
 
 /* Structure associated with BTA_DM_INQ_RES_EVT */
 typedef struct {
diff --git a/system/bta/test/bta_dm_test.cc b/system/bta/test/bta_dm_test.cc
index b7f83afef5b..86dbec24376 100644
--- a/system/bta/test/bta_dm_test.cc
+++ b/system/bta/test/bta_dm_test.cc
@@ -501,3 +501,29 @@ TEST_F(BtaDmTest, bta_dm_determine_discovery_transport__BT_TRANSPORT_AUTO) {
             bluetooth::legacy::testing::bta_dm_determine_discovery_transport(
                 bd_addr));
 }
+
+TEST_F(BtaDmTest, bta_dm_search_evt_text) {
+  std::vector<std::pair<tBTA_DM_SEARCH_EVT, std::string>> events = {
+      std::make_pair(BTA_DM_INQ_RES_EVT, "BTA_DM_INQ_RES_EVT"),
+      std::make_pair(BTA_DM_INQ_CMPL_EVT, "BTA_DM_INQ_CMPL_EVT"),
+      std::make_pair(BTA_DM_DISC_RES_EVT, "BTA_DM_DISC_RES_EVT"),
+      std::make_pair(BTA_DM_GATT_OVER_LE_RES_EVT,
+                     "BTA_DM_GATT_OVER_LE_RES_EVT"),
+      std::make_pair(BTA_DM_DISC_CMPL_EVT, "BTA_DM_DISC_CMPL_EVT"),
+      std::make_pair(BTA_DM_SEARCH_CANCEL_CMPL_EVT,
+                     "BTA_DM_SEARCH_CANCEL_CMPL_EVT"),
+      std::make_pair(BTA_DM_DID_RES_EVT, "BTA_DM_DID_RES_EVT"),
+      std::make_pair(BTA_DM_GATT_OVER_SDP_RES_EVT,
+                     "BTA_DM_GATT_OVER_SDP_RES_EVT"),
+  };
+  for (const auto& event : events) {
+    ASSERT_STREQ(event.second.c_str(),
+                 bta_dm_search_evt_text(event.first).c_str());
+  }
+  ASSERT_STREQ(
+      base::StringPrintf("UNKNOWN[%hhu]", std::numeric_limits<uint8_t>::max())
+          .c_str(),
+      bta_dm_search_evt_text(
+          static_cast<tBTA_DM_SEARCH_EVT>(std::numeric_limits<uint8_t>::max()))
+          .c_str());
+}
diff --git a/system/btif/src/btif_dm.cc b/system/btif/src/btif_dm.cc
index 56e98ffb80d..4facbbe589b 100644
--- a/system/btif/src/btif_dm.cc
+++ b/system/btif/src/btif_dm.cc
@@ -1581,6 +1581,12 @@ static void btif_dm_search_devices_evt(tBTA_DM_SEARCH_EVT event,
             BT_DISCOVERY_STOPPED);
       }
     } break;
+    case BTA_DM_GATT_OVER_LE_RES_EVT:
+    case BTA_DM_DID_RES_EVT:
+    case BTA_DM_GATT_OVER_SDP_RES_EVT:
+    default:
+      LOG_WARN("Unhandled event:%s", bta_dm_search_evt_text(event).c_str());
+      break;
   }
 }
 
-- 
GitLab