public void Encode(EncodeBuffer buffer) { byte periodType; if (Period is BACnetCalendarEntry) { periodType = 0; } else if (Period is BacnetObjectId) { periodType = 1; } else { throw new Exception("BacnetSpecialEvent - unsupported period type -> has to be BacnetCalendarEntry or BacnetObjectId"); } ASN1.encode_opening_tag(buffer, periodType); if (Period is BACnetCalendarEntry) { ((BACnetCalendarEntry)Period).Encode(buffer); ASN1.encode_closing_tag(buffer, 0); } else if (Period is BacnetObjectId) { if (((BacnetObjectId)Period).Type != BacnetObjectTypes.OBJECT_CALENDAR) { throw new Exception("Period Object is not an calendar"); } ASN1.encode_bacnet_object_id(buffer, ((BacnetObjectId)Period).Type, ((BacnetObjectId)Period).Instance); } ASN1.encode_opening_tag(buffer, 2); if (ListOfTimeValues != null) { foreach (var tv in ListOfTimeValues) { tv.Encode(buffer); } } ASN1.encode_closing_tag(buffer, 2); ASN1.encode_context_unsigned(buffer, 3, EventPriority); }