@@ -28,7 +28,6 @@ using namespace chip::app::DataModel;
28
28
using namespace chip ::app::Clusters;
29
29
using namespace chip ::app::Clusters::EnergyCalendar;
30
30
using namespace chip ::app::Clusters::EnergyCalendar::Attributes;
31
- using chip::Protocols::InteractionModel::Status;
32
31
33
32
constexpr uint32_t kOneDay = 24 * 60 * 60 ;
34
33
@@ -55,6 +54,11 @@ chip::app::Clusters::EnergyCalendar::CalendarProviderInstance::~CalendarProvider
55
54
FreeMemoryDayStructList (mSpecialDays );
56
55
FreeMemoryDayStruct (mCurrentDay );
57
56
FreeMemoryDayStruct (mNextDay );
57
+ if (!mName .IsNull ())
58
+ {
59
+ chip::Platform::MemoryFree ((void *)mName .Value ().data ());
60
+ mName .SetNull ();
61
+ }
58
62
}
59
63
60
64
void CalendarProviderInstance::Init (void )
@@ -85,82 +89,95 @@ void CalendarProviderInstance::SetDefault(void)
85
89
86
90
Structs::PeakPeriodStruct::Type peak = { .severity = PeakPeriodSeverityEnum::kHigh , .peakPeriod = 100 , .startTime = 2000 , .endTime = 2200 };
87
91
88
- DataModel::List<Structs::CalendarPeriodStruct::Type> calendarPeriods = {};
89
- DataModel::List<Structs::DayStruct::Type> specialDays = {};
92
+ // DataModel::List<Structs::CalendarPeriodStruct::Type> calendarPeriods = {};
93
+ // DataModel::List<Structs::DayStruct::Type> specialDays = {};
94
+
95
+ char *str = (char *)chip::Platform::MemoryAlloc (5 );
96
+ memcpy (str, " Test" , 5 );
97
+ CharSpan nameString (str, 5 );
98
+ mName = MakeNullable (static_cast <CharSpan>(nameString));
90
99
91
- SetCommonAttributes (1 , " Test " , 123 , 1 );
92
- SetCalendarPeriod (date, calendarPeriods );
93
- SetSpecialDays (specialDays );
100
+ SetCommonAttributes (1 , mName , 123 , 1 );
101
+ SetCalendarPeriod (date, mCalendarPeriods );
102
+ SetSpecialDays (mSpecialDays );
94
103
SetCurrentAndNextDays (DataModel::MakeNullable (day), DataModel::MakeNullable (day));
95
104
SetPeakPeriods (DataModel::MakeNullable (peak), DataModel::MakeNullable (peak));
96
105
}
97
106
98
107
CHIP_ERROR CalendarProviderInstance::LoadJson (Json::Value & root)
99
108
{
100
109
DataModel::Nullable<uint32_t > calendarID;
101
- DataModel::Nullable<std::string> name;
102
110
DataModel::Nullable<uint32_t > providerID;
103
111
DataModel::Nullable<uint32_t > eventID;
104
112
DataModel::Nullable<uint32_t > startDate;
105
113
Structs::PeakPeriodStruct::Type currentPeak;
106
114
Structs::PeakPeriodStruct::Type nextPeak;
107
115
108
- auto value = root.get (" CalendarID" , Json::Value ());
116
+ Json::Value value = root.get (" CalendarID" , Json::Value ());
109
117
if (!value.empty () && value.isInt ())
110
118
{
111
119
calendarID.SetNonNull (value.asInt ());
112
120
}
113
121
114
- auto value = root.get (" Name" , Json::Value ());
122
+ value = root.get (" Name" , Json::Value ());
123
+ if (!mName .IsNull ())
124
+ {
125
+ chip::Platform::MemoryFree ((void *)mName .Value ().data ());
126
+ mName .SetNull ();
127
+ }
115
128
if (!value.empty () && value.isString ())
116
129
{
117
- name.SetNonNull (value.asString ());
130
+ size_t len = value.asString ().size ()+1 ;
131
+ char *str = (char *)chip::Platform::MemoryAlloc (len);
132
+ memcpy (str, value.asCString (), len);
133
+ CharSpan nameString (str, len);
134
+ mName = MakeNullable (static_cast <CharSpan>(nameString));
118
135
}
119
136
120
- auto value = root.get (" ProviderID" , Json::Value ());
137
+ value = root.get (" ProviderID" , Json::Value ());
121
138
if (!value.empty () && value.isInt ())
122
139
{
123
140
providerID.SetNonNull (value.asInt ());
124
141
}
125
142
126
- auto value = root.get (" EventID" , Json::Value ());
143
+ value = root.get (" EventID" , Json::Value ());
127
144
if (!value.empty () && value.isInt ())
128
145
{
129
146
eventID.SetNonNull (value.asInt ());
130
147
}
131
148
132
- SetCommonAttributes (calendarID, name , providerID, eventID);
149
+ SetCommonAttributes (calendarID, mName , providerID, eventID);
133
150
134
- auto value = root.get (" StartDate" , Json::Value ());
151
+ value = root.get (" StartDate" , Json::Value ());
135
152
if (!value.empty () && value.isInt ())
136
153
{
137
154
startDate.SetNonNull (value.asInt ());
138
155
}
139
156
140
- auto value = root.get (" CalendarPeriods" , Json::Value ());
157
+ value = root.get (" CalendarPeriods" , Json::Value ());
141
158
FreeMemoryCalendarPeriodStructList (mCalendarPeriods );
142
159
if (!value.empty () && value.isArray ())
143
160
{
144
161
JsonToCalendarPeriodStructList (value, mCalendarPeriods );
145
162
}
146
163
SetCalendarPeriod (startDate, mCalendarPeriods );
147
164
148
- auto value = root.get (" SpecialDays" , Json::Value ());
165
+ value = root.get (" SpecialDays" , Json::Value ());
149
166
FreeMemoryDayStructList (mSpecialDays );
150
167
if (!value.empty () && value.isArray ())
151
168
{
152
169
JsonToDayStructList (value, mSpecialDays );
153
170
}
154
171
SetSpecialDays (mSpecialDays );
155
172
156
- auto value = root.get (" CurrentDay" , Json::Value ());
173
+ value = root.get (" CurrentDay" , Json::Value ());
157
174
FreeMemoryDayStruct (mCurrentDay );
158
175
if (!value.empty ())
159
176
{
160
177
JsonToDayStruct (value, mCurrentDay );
161
178
}
162
179
163
- auto value = root.get (" NextDay" , Json::Value ());
180
+ value = root.get (" NextDay" , Json::Value ());
164
181
FreeMemoryDayStruct (mNextDay );
165
182
if (!value.empty ())
166
183
{
@@ -169,13 +186,13 @@ CHIP_ERROR CalendarProviderInstance::LoadJson(Json::Value & root)
169
186
170
187
SetCurrentAndNextDays (mCurrentDay , mNextDay );
171
188
172
- auto value = root.get (" CurrentPeak" , Json::Value ());
189
+ value = root.get (" CurrentPeak" , Json::Value ());
173
190
if (!value.empty ())
174
191
{
175
192
JsonToPeakPeriodStruct (value, currentPeak);
176
193
}
177
194
178
- auto value = root.get (" NextPeak" , Json::Value ());
195
+ value = root.get (" NextPeak" , Json::Value ());
179
196
if (!value.empty ())
180
197
{
181
198
JsonToPeakPeriodStruct (value, nextPeak);
@@ -348,13 +365,13 @@ bool CalendarProviderInstance::CheckDay(const Structs::DayStruct::Type &day)
348
365
349
366
void CalendarProviderInstance::JsonToCalendarPeriodStruct (Json::Value & root, Structs::CalendarPeriodStruct::Type & value)
350
367
{
351
- auto t = root.get (" startDate" , Json::Value ());
368
+ Json::Value t = root.get (" startDate" , Json::Value ());
352
369
if (!t.empty () && t.isInt ())
353
370
{
354
371
value.startDate .SetNonNull (t.asInt ());
355
372
}
356
373
357
- auto t = root.get (" days" , Json::Value ());
374
+ t = root.get (" days" , Json::Value ());
358
375
if (!t.empty () && t.isArray ())
359
376
{
360
377
DataModel::List<Structs::DayStruct::Type> *days = (DataModel::List<Structs::DayStruct::Type>*)&value.days ;
@@ -364,26 +381,26 @@ void CalendarProviderInstance::JsonToCalendarPeriodStruct(Json::Value & root, St
364
381
365
382
void CalendarProviderInstance::JsonToDayStruct (Json::Value & root, Structs::DayStruct::Type & value)
366
383
{
367
- auto t = root.get (" date" , Json::Value ());
384
+ Json::Value t = root.get (" date" , Json::Value ());
368
385
if (!t.empty () && t.isInt ())
369
386
{
370
387
value.date .SetValue (t.asInt ());
371
388
}
372
389
373
- auto t = root.get (" daysOfWeek" , Json::Value ());
390
+ t = root.get (" daysOfWeek" , Json::Value ());
374
391
if (!t.empty () && t.isInt ())
375
392
{
376
- value.daysOfWeek .SetValue (( chip::BitMask<TransitionDayOfWeekBitmap>)( t.asInt ()));
393
+ value.daysOfWeek .SetValue (chip::BitMask<TransitionDayOfWeekBitmap>(( uint8_t ) t.asInt ()));
377
394
}
378
395
379
- auto t = root.get (" transitions" , Json::Value ());
396
+ t = root.get (" transitions" , Json::Value ());
380
397
if (!t.empty () && t.isArray ())
381
398
{
382
399
DataModel::List<Structs::TransitionStruct::Type> *transitions = (DataModel::List<Structs::TransitionStruct::Type>*)&value.transitions ;
383
400
JsonToTransitionStructList (t, *transitions);
384
401
}
385
402
386
- auto t = root.get (" calendarID" , Json::Value ());
403
+ t = root.get (" calendarID" , Json::Value ());
387
404
if (!t.empty () && t.isInt ())
388
405
{
389
406
value.calendarID .SetValue (t.asInt ());
@@ -392,25 +409,25 @@ void CalendarProviderInstance::JsonToDayStruct(Json::Value & root, Structs::DayS
392
409
393
410
void CalendarProviderInstance::JsonToPeakPeriodStruct (Json::Value & root, Structs::PeakPeriodStruct::Type & value)
394
411
{
395
- auto t = root.get (" severity" , Json::Value ());
412
+ Json::Value t = root.get (" severity" , Json::Value ());
396
413
if (!t.empty () && t.isInt ())
397
414
{
398
415
value.severity = static_cast <PeakPeriodSeverityEnum>(t.asInt ());
399
416
}
400
417
401
- auto t = root.get (" peakPeriod" , Json::Value ());
418
+ t = root.get (" peakPeriod" , Json::Value ());
402
419
if (!t.empty () && t.isInt ())
403
420
{
404
421
value.peakPeriod = static_cast <uint16_t >(t.asInt ());
405
422
}
406
423
407
- auto t = root.get (" startTime" , Json::Value ());
424
+ t = root.get (" startTime" , Json::Value ());
408
425
if (!t.empty () && t.isInt ())
409
426
{
410
427
value.startTime .SetNonNull (t.asInt ());
411
428
}
412
429
413
- auto t = root.get (" endTime" , Json::Value ());
430
+ t = root.get (" endTime" , Json::Value ());
414
431
if (!t.empty () && t.isInt ())
415
432
{
416
433
value.endTime .SetNonNull (t.asInt ());
@@ -455,28 +472,28 @@ void CalendarProviderInstance::JsonToTransitionStructList(Json::Value & root,
455
472
{
456
473
Json::Value v = root[i];
457
474
458
- auto t = v.get (" transitionTime" , Json::Value ());
475
+ Json::Value t = v.get (" transitionTime" , Json::Value ());
459
476
if (!t.empty () && t.isInt ())
460
477
{
461
- value[i].transitionTime = t.asInt ();
478
+ value[i].transitionTime = static_cast < uint16_t >( t.asInt () );
462
479
}
463
480
464
- auto t = v.get (" priceTier" , Json::Value ());
481
+ t = v.get (" priceTier" , Json::Value ());
465
482
if (!t.empty () && t.isInt ())
466
483
{
467
484
value[i].priceTier .SetValue (t.asInt ());
468
485
}
469
486
470
- auto t = v.get (" friendlyCredit" , Json::Value ());
487
+ t = v.get (" friendlyCredit" , Json::Value ());
471
488
if (!t.empty () && t.isBool ())
472
489
{
473
490
value[i].friendlyCredit .SetValue (t.asBool ());
474
491
}
475
492
476
- auto t = v.get (" auxiliaryLoad" , Json::Value ());
493
+ t = v.get (" auxiliaryLoad" , Json::Value ());
477
494
if (!t.empty () && t.isInt ())
478
495
{
479
- value[i].auxiliaryLoad .SetValue (( chip::BitMask<AuxiliaryLoadBitmap>)( t.asInt ()));
496
+ value[i].auxiliaryLoad .SetValue (chip::BitMask<AuxiliaryLoadBitmap>(( uint8_t ) t.asInt ()));
480
497
}
481
498
}
482
499
}
0 commit comments