Feature/basic-schedule-object-write-properties (#1000)
* Added schedule object WriteProperty handling for effective-period, list-of-object-property-references and exception-schedule properties.
This commit is contained in:
@@ -28,30 +28,100 @@ static void testSchedule(void)
|
||||
unsigned count = 0;
|
||||
uint32_t object_instance = 0;
|
||||
const int skip_fail_property_list[] = { -1 };
|
||||
BACNET_DAILY_SCHEDULE *daily_schedule;
|
||||
size_t tv = 0, day = 0;
|
||||
BACNET_DAILY_SCHEDULE daily_schedule = { 0 }, *test_daily_schedule;
|
||||
BACNET_SPECIAL_EVENT special_event = { 0 }, *test_special_event;
|
||||
BACNET_DEVICE_OBJECT_PROPERTY_REFERENCE object_property_reference = { 0 },
|
||||
test_object_property_reference = {
|
||||
0
|
||||
};
|
||||
BACNET_DATE start_date = { 2023, 1, 1, 0 }, test_start_date = { 0 };
|
||||
BACNET_DATE end_date = { 2023, 12, 31, 0 }, test_end_date = { 0 };
|
||||
BACNET_TIME time_of_day = { 0 };
|
||||
size_t tv = 0, day = 0, i = 0;
|
||||
int diff;
|
||||
bool status = false;
|
||||
|
||||
Schedule_Init();
|
||||
count = Schedule_Count();
|
||||
zassert_true(count > 0, NULL);
|
||||
object_instance = Schedule_Index_To_Instance(0);
|
||||
status = Schedule_Valid_Instance(object_instance);
|
||||
zassert_true(status, NULL);
|
||||
|
||||
/* fill the weekly schedule with some data */
|
||||
for (day = 0; day < BACNET_WEEKLY_SCHEDULE_SIZE; day++) {
|
||||
daily_schedule = Schedule_Weekly_Schedule(object_instance, day);
|
||||
daily_schedule->TV_Count = BACNET_DAILY_SCHEDULE_TIME_VALUES_SIZE;
|
||||
for (tv = 0; tv < daily_schedule->TV_Count; tv++) {
|
||||
daily_schedule.TV_Count = BACNET_DAILY_SCHEDULE_TIME_VALUES_SIZE;
|
||||
for (tv = 0; tv < daily_schedule.TV_Count; tv++) {
|
||||
datetime_set_time(
|
||||
&daily_schedule->Time_Values[tv].Time, tv % 24, 0, 0, 0);
|
||||
daily_schedule->Time_Values[tv].Value.tag =
|
||||
&daily_schedule.Time_Values[tv].Time, tv % 24, 0, 0, 0);
|
||||
daily_schedule.Time_Values[tv].Value.tag =
|
||||
BACNET_APPLICATION_TAG_REAL;
|
||||
daily_schedule->Time_Values[tv].Value.type.Real = 1.0f + tv;
|
||||
daily_schedule.Time_Values[tv].Value.type.Real = 1.0f + tv;
|
||||
}
|
||||
Schedule_Weekly_Schedule_Set(object_instance, day, &daily_schedule);
|
||||
test_daily_schedule = Schedule_Weekly_Schedule(object_instance, day);
|
||||
status =
|
||||
bacnet_dailyschedule_same(&daily_schedule, test_daily_schedule);
|
||||
zassert_true(status, NULL);
|
||||
}
|
||||
for (i = 0; i < BACNET_EXCEPTION_SCHEDULE_SIZE; i++) {
|
||||
special_event.periodTag = BACNET_SPECIAL_EVENT_PERIOD_CALENDAR_ENTRY;
|
||||
special_event.timeValues.TV_Count =
|
||||
BACNET_DAILY_SCHEDULE_TIME_VALUES_SIZE;
|
||||
for (tv = 0; tv < special_event.timeValues.TV_Count; tv++) {
|
||||
datetime_set_time(
|
||||
&special_event.timeValues.Time_Values[tv].Time, tv % 24, 0, 0,
|
||||
0);
|
||||
special_event.timeValues.Time_Values[tv].Value.tag =
|
||||
BACNET_APPLICATION_TAG_REAL;
|
||||
special_event.timeValues.Time_Values[tv].Value.type.Real =
|
||||
1.0f + tv;
|
||||
special_event.priority = tv % (BACNET_MAX_PRIORITY + 1);
|
||||
}
|
||||
Schedule_Exception_Schedule_Set(object_instance, i, &special_event);
|
||||
test_special_event = Schedule_Exception_Schedule(object_instance, i);
|
||||
status = bacnet_special_event_same(&special_event, test_special_event);
|
||||
zassert_true(status, NULL);
|
||||
}
|
||||
/* fill the object property reference with some data */
|
||||
for (i = 0; i <
|
||||
Schedule_List_Of_Object_Property_References_Capacity(object_instance);
|
||||
i++) {
|
||||
object_property_reference.objectIdentifier.type = OBJECT_ANALOG_VALUE;
|
||||
object_property_reference.objectIdentifier.instance = i + 1;
|
||||
object_property_reference.propertyIdentifier = PROP_PRESENT_VALUE;
|
||||
object_property_reference.arrayIndex = BACNET_ARRAY_ALL;
|
||||
Schedule_List_Of_Object_Property_References_Set(
|
||||
object_instance, i, &object_property_reference);
|
||||
Schedule_List_Of_Object_Property_References(
|
||||
object_instance, i, &test_object_property_reference);
|
||||
status = bacnet_device_object_property_reference_same(
|
||||
&object_property_reference, &test_object_property_reference);
|
||||
zassert_true(status, NULL);
|
||||
}
|
||||
status =
|
||||
Schedule_Effective_Period_Set(object_instance, &start_date, &end_date);
|
||||
zassert_true(status, NULL);
|
||||
status = Schedule_Effective_Period(
|
||||
object_instance, &test_start_date, &test_end_date);
|
||||
zassert_true(status, NULL);
|
||||
diff = datetime_compare_date(&start_date, &test_start_date);
|
||||
zassert_equal(diff, 0, NULL);
|
||||
diff = datetime_compare_date(&end_date, &test_end_date);
|
||||
zassert_equal(diff, 0, NULL);
|
||||
status = Schedule_In_Effective_Period(
|
||||
Schedule_Object(object_instance), &start_date);
|
||||
zassert_true(status, NULL);
|
||||
status = Schedule_In_Effective_Period(
|
||||
Schedule_Object(object_instance), &end_date);
|
||||
zassert_true(status, NULL);
|
||||
/* general purpose test */
|
||||
bacnet_object_properties_read_write_test(
|
||||
OBJECT_SCHEDULE, object_instance, Schedule_Property_Lists,
|
||||
Schedule_Read_Property, Schedule_Write_Property,
|
||||
skip_fail_property_list);
|
||||
Schedule_Recalculate_PV(
|
||||
Schedule_Object(object_instance), BACNET_WEEKDAY_SUNDAY, &time_of_day);
|
||||
}
|
||||
/**
|
||||
* @}
|
||||
|
||||
Reference in New Issue
Block a user