From 25286726996e2e5fc64b902cfe9fa39dbf1383fc Mon Sep 17 00:00:00 2001
From: Carol Yang <clyang@apple.com>
Date: Sat, 11 Dec 2021 14:38:58 -0800
Subject: [PATCH] Convert OTAQueryStatus to an enum class (#12918)

---
 .../ota-provider-common/OTAProviderExample.cpp      | 13 +++++++------
 src/app/clusters/ota-requestor/OTARequestor.cpp     | 11 ++++++-----
 src/app/zap-templates/templates/app/helper.js       |  1 -
 .../app-common/zap-generated/cluster-objects.h      |  6 ------
 .../app-common/app-common/zap-generated/enums.h     |  8 --------
 5 files changed, 13 insertions(+), 26 deletions(-)

diff --git a/examples/ota-provider-app/ota-provider-common/OTAProviderExample.cpp b/examples/ota-provider-app/ota-provider-common/OTAProviderExample.cpp
index 70668a011a9535..dabac2d9b237be 100644
--- a/examples/ota-provider-app/ota-provider-common/OTAProviderExample.cpp
+++ b/examples/ota-provider-app/ota-provider-common/OTAProviderExample.cpp
@@ -40,6 +40,7 @@ using chip::Optional;
 using chip::Server;
 using chip::Span;
 using chip::app::Clusters::OTAProviderDelegate;
+using namespace chip::app::Clusters::OtaSoftwareUpdateProvider;
 using namespace chip::app::Clusters::OtaSoftwareUpdateProvider::Commands;
 
 constexpr uint8_t kUpdateTokenLen    = 32;                      // must be between 8 and 32
@@ -89,7 +90,7 @@ EmberAfStatus OTAProviderExample::HandleQueryImage(chip::app::CommandHandler * c
 {
     // TODO: add confiuration for returning BUSY status
 
-    EmberAfOTAQueryStatus queryStatus = EMBER_ZCL_OTA_QUERY_STATUS_NOT_AVAILABLE;
+    OTAQueryStatus queryStatus  = OTAQueryStatus::kNotAvailable;
     uint32_t newSoftwareVersion = commandData.softwareVersion + 1; // This implementation will always indicate that an update is
                                                                    // available (if the user provides a file).
     constexpr char kExampleSoftwareString[] = "Example-Image-V0.1";
@@ -122,25 +123,25 @@ EmberAfStatus OTAProviderExample::HandleQueryImage(chip::app::CommandHandler * c
     case kRespondWithUpdateAvailable: {
         if (strlen(mOTAFilePath) != 0)
         {
-            queryStatus = EMBER_ZCL_OTA_QUERY_STATUS_UPDATE_AVAILABLE;
+            queryStatus = OTAQueryStatus::kUpdateAvailable;
         }
         else
         {
-            queryStatus = EMBER_ZCL_OTA_QUERY_STATUS_NOT_AVAILABLE;
+            queryStatus = OTAQueryStatus::kNotAvailable;
             ChipLogError(SoftwareUpdate, "No OTA file configured on the Provider");
         }
         break;
     }
     case kRespondWithBusy: {
-        queryStatus = EMBER_ZCL_OTA_QUERY_STATUS_BUSY;
+        queryStatus = OTAQueryStatus::kBusy;
         break;
     }
     case kRespondWithNotAvailable: {
-        queryStatus = EMBER_ZCL_OTA_QUERY_STATUS_NOT_AVAILABLE;
+        queryStatus = OTAQueryStatus::kNotAvailable;
         break;
     }
     default:
-        queryStatus = EMBER_ZCL_OTA_QUERY_STATUS_NOT_AVAILABLE;
+        queryStatus = OTAQueryStatus::kNotAvailable;
     }
 
     QueryImageResponse::Type response;
diff --git a/src/app/clusters/ota-requestor/OTARequestor.cpp b/src/app/clusters/ota-requestor/OTARequestor.cpp
index 4fb512a4c45698..4bdb2e481b334b 100644
--- a/src/app/clusters/ota-requestor/OTARequestor.cpp
+++ b/src/app/clusters/ota-requestor/OTARequestor.cpp
@@ -33,6 +33,7 @@
 namespace chip {
 
 using namespace app::Clusters;
+using namespace app::Clusters::OtaSoftwareUpdateProvider;
 using namespace app::Clusters::OtaSoftwareUpdateProvider::Commands;
 using namespace app::Clusters::OtaSoftwareUpdateRequestor::Commands;
 using bdx::TransferSession;
@@ -45,7 +46,7 @@ constexpr uint32_t kImmediateStartDelayMs = 1; // Start the timer with this valu
 static void LogQueryImageResponse(const QueryImageResponse::DecodableType & response)
 {
     ChipLogDetail(SoftwareUpdate, "QueryImageResponse:");
-    ChipLogDetail(SoftwareUpdate, "  status: %" PRIu8 "", response.status);
+    ChipLogDetail(SoftwareUpdate, "  status: %" PRIu8 "", to_underlying(response.status));
     if (response.delayedActionTime.HasValue())
     {
         ChipLogDetail(SoftwareUpdate, "  delayedActionTime: %" PRIu32 " seconds", response.delayedActionTime.Value());
@@ -114,7 +115,7 @@ void OTARequestor::OnQueryImageResponse(void * context, const QueryImageResponse
 
     switch (response.status)
     {
-    case EMBER_ZCL_OTA_QUERY_STATUS_UPDATE_AVAILABLE: {
+    case OTAQueryStatus::kUpdateAvailable: {
         // Parse out the provider node ID and file designator from the image URI
         NodeId nodeId = kUndefinedNodeId;
         CharSpan fileDesignator;
@@ -135,9 +136,9 @@ void OTARequestor::OnQueryImageResponse(void * context, const QueryImageResponse
         requestorCore->ConnectToProvider(kStartBDX);
         break;
     }
-    case EMBER_ZCL_OTA_QUERY_STATUS_BUSY:
+    case OTAQueryStatus::kBusy:
         break;
-    case EMBER_ZCL_OTA_QUERY_STATUS_NOT_AVAILABLE:
+    case OTAQueryStatus::kNotAvailable:
         break;
     // TODO: Add download protocol not supported
     // Issue #9524 should handle all response status appropriately
@@ -437,7 +438,7 @@ CHIP_ERROR OTARequestor::BuildQueryImageRequest(QueryImageRequest & request)
 
 bool OTARequestor::ValidateQueryImageResponse(const QueryImageResponse::DecodableType & response) const
 {
-    if (response.status == EMBER_ZCL_OTA_QUERY_STATUS_UPDATE_AVAILABLE)
+    if (response.status == OTAQueryStatus::kUpdateAvailable)
     {
         VerifyOrReturnError(response.imageURI.HasValue(), false);
         VerifyOrReturnError(response.softwareVersion.HasValue() && response.softwareVersionString.HasValue(), false);
diff --git a/src/app/zap-templates/templates/app/helper.js b/src/app/zap-templates/templates/app/helper.js
index d4f92c9e4bf6af..5b5079b7994e0e 100644
--- a/src/app/zap-templates/templates/app/helper.js
+++ b/src/app/zap-templates/templates/app/helper.js
@@ -658,7 +658,6 @@ function isWeaklyTypedEnum(label)
     "OTAAnnouncementReason",
     "OTAApplyUpdateAction",
     "OTADownloadProtocol",
-    "OTAQueryStatus",
     "OnOffDelayedAllOffEffectVariant",
     "OnOffDyingLightEffectVariant",
     "OnOffEffectIdentifier",
diff --git a/zzz_generated/app-common/app-common/zap-generated/cluster-objects.h b/zzz_generated/app-common/app-common/zap-generated/cluster-objects.h
index b306c6e01a51db..8f498bc240ea88 100644
--- a/zzz_generated/app-common/app-common/zap-generated/cluster-objects.h
+++ b/zzz_generated/app-common/app-common/zap-generated/cluster-objects.h
@@ -7696,9 +7696,6 @@ enum class OTADownloadProtocol : uint8_t
 #else // CHIP_USE_ENUM_CLASS_FOR_IM_ENUM
 using OTADownloadProtocol             = EmberAfOTADownloadProtocol;
 #endif
-// Need to convert consumers to using the new enum classes, so we
-// don't just have casts all over.
-#ifdef CHIP_USE_ENUM_CLASS_FOR_IM_ENUM
 // Enum for OTAQueryStatus
 enum class OTAQueryStatus : uint8_t
 {
@@ -7706,9 +7703,6 @@ enum class OTAQueryStatus : uint8_t
     kBusy            = 0x01,
     kNotAvailable    = 0x02,
 };
-#else // CHIP_USE_ENUM_CLASS_FOR_IM_ENUM
-using OTAQueryStatus                  = EmberAfOTAQueryStatus;
-#endif
 
 namespace Commands {
 // Forward-declarations so we can reference these later.
diff --git a/zzz_generated/app-common/app-common/zap-generated/enums.h b/zzz_generated/app-common/app-common/zap-generated/enums.h
index 12c6daeb6c74ce..7ec02298590c5d 100644
--- a/zzz_generated/app-common/app-common/zap-generated/enums.h
+++ b/zzz_generated/app-common/app-common/zap-generated/enums.h
@@ -588,14 +588,6 @@ enum EmberAfOTADownloadProtocol : uint8_t
     EMBER_ZCL_OTA_DOWNLOAD_PROTOCOL_VENDOR_SPECIFIC  = 3,
 };
 
-// Enum for OTAQueryStatus
-enum EmberAfOTAQueryStatus : uint8_t
-{
-    EMBER_ZCL_OTA_QUERY_STATUS_UPDATE_AVAILABLE = 0,
-    EMBER_ZCL_OTA_QUERY_STATUS_BUSY             = 1,
-    EMBER_ZCL_OTA_QUERY_STATUS_NOT_AVAILABLE    = 2,
-};
-
 // Enum for OnOffDelayedAllOffEffectVariant
 enum EmberAfOnOffDelayedAllOffEffectVariant : uint8_t
 {