Skip to content

Commit 1f16b6c

Browse files
committed
Made main use std::unique_ptr instead of using new/delete per PR comments. Also moved GetEVSEManufacturer declaration to header file.
1 parent 4d2108b commit 1f16b6c

File tree

3 files changed

+44
-49
lines changed

3 files changed

+44
-49
lines changed

examples/energy-management-app/energy-management-common/include/EVSEManufacturerImpl.h

+11
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,17 @@ class EVSEManufacturer
6666
int64_t mLastDischargingEnergyMeter = 0;
6767
};
6868

69+
/** @brief Helper function to return the singleton EVSEManufacturer instance
70+
*
71+
* This is needed by the EVSEManufacturer class to support TestEventTriggers
72+
* which are called outside of any class context. This allows the EVSEManufacturer
73+
* class to return the relevant Delegate instance in which to invoke the test
74+
* events on.
75+
*
76+
* This function is typically found in main.cpp or wherever the singleton is created.
77+
*/
78+
EVSEManufacturer * GetEvseManufacturer();
79+
6980
} // namespace EnergyEvse
7081
} // namespace Clusters
7182
} // namespace app

examples/energy-management-app/energy-management-common/src/EVSEManufacturerImpl.cpp

-3
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,6 @@ using namespace chip::app;
2525
using namespace chip::app::Clusters;
2626
using namespace chip::app::Clusters::EnergyEvse;
2727

28-
/* Function prototype - this should be implemented somewhere in main.cpp or similar */
29-
EVSEManufacturer * GetEvseManufacturer();
30-
3128
CHIP_ERROR EVSEManufacturer::Init()
3229
{
3330
/* Manufacturers should modify this to do any custom initialisation */

examples/energy-management-app/linux/main.cpp

+33-46
Original file line numberDiff line numberDiff line change
@@ -35,71 +35,66 @@ using namespace chip;
3535
using namespace chip::app;
3636
using namespace chip::app::Clusters;
3737

38-
static EnergyEvseDelegate * gDelegate = nullptr;
39-
static EnergyEvseManager * gInstance = nullptr;
40-
static EVSEManufacturer * gEvseManufacturer = nullptr;
38+
static std::unique_ptr<EnergyEvseDelegate> gDelegate;
39+
static std::unique_ptr<EnergyEvseManager> gInstance;
40+
static std::unique_ptr<EVSEManufacturer> gEvseManufacturer;
4141

42-
EVSEManufacturer * GetEvseManufacturer()
42+
EVSEManufacturer * EnergyEvse::GetEvseManufacturer()
4343
{
44-
return gEvseManufacturer;
44+
return gEvseManufacturer.get();
4545
}
4646

4747
void ApplicationInit()
4848
{
4949
CHIP_ERROR err;
5050

51-
if ((gDelegate != nullptr) || (gInstance != nullptr) || (gEvseManufacturer != nullptr))
51+
if (gDelegate || gInstance || gEvseManufacturer)
5252
{
5353
ChipLogError(AppServer, "EVSE Instance or Delegate, EvseManufacturer already exist.");
5454
return;
5555
}
5656

57-
gDelegate = new EnergyEvseDelegate();
58-
if (gDelegate == nullptr)
57+
gDelegate = std::make_unique<EnergyEvseDelegate>();
58+
if (!gDelegate)
5959
{
6060
ChipLogError(AppServer, "Failed to allocate memory for EnergyEvseDelegate");
6161
return;
6262
}
6363

6464
/* Manufacturer may optionally not support all features, commands & attributes */
65-
gInstance =
66-
new EnergyEvseManager(EndpointId(ENERGY_EVSE_ENDPOINT), *gDelegate,
67-
BitMask<EnergyEvse::Feature, uint32_t>(
68-
EnergyEvse::Feature::kChargingPreferences, EnergyEvse::Feature::kPlugAndCharge,
69-
EnergyEvse::Feature::kRfid, EnergyEvse::Feature::kSoCReporting, EnergyEvse::Feature::kV2x),
70-
BitMask<OptionalAttributes, uint32_t>(OptionalAttributes::kSupportsUserMaximumChargingCurrent,
71-
OptionalAttributes::kSupportsRandomizationWindow,
72-
OptionalAttributes::kSupportsApproximateEvEfficiency),
73-
BitMask<OptionalCommands, uint32_t>(OptionalCommands::kSupportsStartDiagnostics));
74-
75-
if (gInstance == nullptr)
65+
gInstance = std::make_unique<EnergyEvseManager>(
66+
EndpointId(ENERGY_EVSE_ENDPOINT), *gDelegate,
67+
BitMask<EnergyEvse::Feature, uint32_t>(EnergyEvse::Feature::kChargingPreferences, EnergyEvse::Feature::kPlugAndCharge,
68+
EnergyEvse::Feature::kRfid, EnergyEvse::Feature::kSoCReporting,
69+
EnergyEvse::Feature::kV2x),
70+
BitMask<OptionalAttributes, uint32_t>(OptionalAttributes::kSupportsUserMaximumChargingCurrent,
71+
OptionalAttributes::kSupportsRandomizationWindow,
72+
OptionalAttributes::kSupportsApproximateEvEfficiency),
73+
BitMask<OptionalCommands, uint32_t>(OptionalCommands::kSupportsStartDiagnostics));
74+
75+
if (!gInstance)
7676
{
7777
ChipLogError(AppServer, "Failed to allocate memory for EnergyEvseManager");
78-
delete gDelegate;
79-
gDelegate = nullptr;
78+
gDelegate.reset();
8079
return;
8180
}
8281

8382
err = gInstance->Init(); /* Register Attribute & Command handlers */
8483
if (err != CHIP_NO_ERROR)
8584
{
8685
ChipLogError(AppServer, "Init failed on gInstance");
87-
delete gInstance;
88-
delete gDelegate;
89-
gInstance = nullptr;
90-
gDelegate = nullptr;
86+
gInstance.reset();
87+
gDelegate.reset();
9188
return;
9289
}
9390

9491
/* Now create EVSEManufacturer*/
95-
gEvseManufacturer = new EVSEManufacturer(gInstance);
96-
if (gEvseManufacturer == nullptr)
92+
gEvseManufacturer = std::make_unique<EVSEManufacturer>(gInstance.get());
93+
if (!gEvseManufacturer)
9794
{
9895
ChipLogError(AppServer, "Failed to allocate memory for EvseManufacturer");
99-
delete gInstance;
100-
delete gDelegate;
101-
gInstance = nullptr;
102-
gDelegate = nullptr;
96+
gInstance.reset();
97+
gDelegate.reset();
10398
return;
10499
}
105100

@@ -108,12 +103,9 @@ void ApplicationInit()
108103
if (err != CHIP_NO_ERROR)
109104
{
110105
ChipLogError(AppServer, "Init failed on gEvseManufacturer");
111-
delete gEvseManufacturer;
112-
delete gInstance;
113-
delete gDelegate;
114-
gEvseManufacturer = nullptr;
115-
gInstance = nullptr;
116-
gDelegate = nullptr;
106+
gEvseManufacturer.reset();
107+
gInstance.reset();
108+
gDelegate.reset();
117109
return;
118110
}
119111
}
@@ -123,17 +115,12 @@ void ApplicationShutdown()
123115
ChipLogDetail(AppServer, "Energy Management App: ApplicationShutdown()");
124116

125117
/* Shutdown the EVSEManufacturer*/
126-
gEvseManufacturer->Shutdown();
118+
if (gEvseManufacturer)
119+
gEvseManufacturer->Shutdown();
127120

128121
/* Shutdown the Instance - deregister attribute & command handler */
129-
gInstance->Shutdown();
130-
131-
delete gEvseManufacturer;
132-
delete gInstance;
133-
delete gDelegate;
134-
gEvseManufacturer = nullptr;
135-
gInstance = nullptr;
136-
gDelegate = nullptr;
122+
if (gInstance)
123+
gInstance->Shutdown();
137124
}
138125

139126
int main(int argc, char * argv[])

0 commit comments

Comments
 (0)