Skip to content

Commit 4271e63

Browse files
Fix date in days strucd and function CompareDay
1 parent 870256f commit 4271e63

File tree

1 file changed

+14
-16
lines changed

1 file changed

+14
-16
lines changed

examples/all-clusters-app/all-clusters-common/src/energy-calendar-instance.cpp

+14-16
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,8 @@ using namespace chip::app::Clusters::EnergyCalendar::Attributes;
3232

3333
constexpr uint32_t kOneDay = 24 * 60 * 60;
3434

35-
static TransitionDayOfWeekBitmap GetDayOfWeek(uint32_t date)
35+
static void ParceDay(uint32_t date, uint16_t & year, uint8_t & month, uint8_t & dayOfMonth, uint8_t & weekDay)
3636
{
37-
uint16_t year;
38-
uint8_t month;
39-
uint8_t dayOfMonth;
4037
uint8_t hour;
4138
uint8_t minute;
4239
uint8_t second;
@@ -45,9 +42,7 @@ static TransitionDayOfWeekBitmap GetDayOfWeek(uint32_t date)
4542
ChipEpochToCalendarTime(date, year, month, dayOfMonth, hour, minute, second);
4643
uint8_t weekDayOffeset = FirstWeekdayOfYear(year);
4744
CalendarDateToOrdinalDate(year, month, dayOfMonth, dayOfYear);
48-
uint8_t weekDay = static_cast<uint8_t>((dayOfYear -1 + weekDayOffeset) % kDaysPerWeek);
49-
50-
return static_cast<TransitionDayOfWeekBitmap>(1 << weekDay);
45+
weekDay = static_cast<uint8_t>((dayOfYear -1 + weekDayOffeset) % kDaysPerWeek);
5146
}
5247

5348
#if 0
@@ -235,6 +230,9 @@ void chip::app::Clusters::EnergyCalendar::CalendarProviderInstance::ErrorMessage
235230
va_end(v);
236231
}
237232

233+
//
234+
#define EQUAL_BYTE(a, offset, expected) (((a)>>(offset) & 0xFF) == (uint8_t)(expected))
235+
238236
DataModel::Nullable<Structs::DayStruct::Type> CalendarProviderInstance::GetDay(uint32_t date)
239237
{
240238
DataModel::Nullable<Structs::DayStruct::Type> result = std::nullopt;
@@ -243,21 +241,22 @@ DataModel::Nullable<Structs::DayStruct::Type> CalendarProviderInstance::GetDay(u
243241
uint16_t year;
244242
uint8_t month;
245243
uint8_t dayOfMonth;
246-
uint8_t hour;
247-
uint8_t minute;
248-
uint8_t second;
249-
ChipEpochToCalendarTime(date, year, month, dayOfMonth, hour, minute, second);
244+
uint8_t weekDay;
245+
246+
ParceDay(date, year, month, dayOfMonth, weekDay);
250247

251248
for (auto & day : mSpecialDays)
252249
{
253250
if (day.date.HasValue())
254251
{
255252
dt = day.date.Value();
256-
if (((dt & 0xFF)!=0xFF) && ((dt & 0xFF) != (uint8_t)(year - 1900)))
253+
if (!EQUAL_BYTE(dt, 0, 0xFF) && !EQUAL_BYTE(dt, 0, year - 1900))
254+
continue;
255+
if (!EQUAL_BYTE(dt, 8, 0) && !EQUAL_BYTE(dt, 8, month))
257256
continue;
258-
if (((dt >>8) & 0xFF) != month)
257+
if (!EQUAL_BYTE(dt, 16, 0) && !EQUAL_BYTE(dt, 16, dayOfMonth))
259258
continue;
260-
if (((dt >>16) & 0xFF) != dayOfMonth)
259+
if (!EQUAL_BYTE(dt, 24, 0) && !EQUAL_BYTE(dt, 24, weekDay))
261260
continue;
262261
return day;
263262
}
@@ -268,7 +267,6 @@ DataModel::Nullable<Structs::DayStruct::Type> CalendarProviderInstance::GetDay(u
268267
return result;
269268
}
270269

271-
TransitionDayOfWeekBitmap week_day = GetDayOfWeek(date);
272270

273271
for (auto & period : mCalendarPeriods)
274272
{
@@ -282,7 +280,7 @@ DataModel::Nullable<Structs::DayStruct::Type> CalendarProviderInstance::GetDay(u
282280
{
283281
for (auto & day : period.days)
284282
{
285-
if (day.daysOfWeek.ValueOr(0).Has(week_day))
283+
if (day.daysOfWeek.ValueOr(0).Has(static_cast<TransitionDayOfWeekBitmap>(1 << weekDay)))
286284
{
287285
result = day;
288286
break;

0 commit comments

Comments
 (0)