Skip to main content

AccessDoorObject

Struct AccessDoorObject 

Source
pub struct AccessDoorObject { /* private fields */ }
Expand description

BACnet Access Door object (type 30).

Represents a physical door or barrier in an access control system. Present value carries the door command (BACnetDoorValue); Door_Status reports the physical DoorStatus.

A PULSE_UNLOCK or EXTENDED_PULSE_UNLOCK command holds its priority slot for Door_Pulse_Time or Door_Extended_Pulse_Time and is then relinquished, so the door relocks (Clauses 12.26.4, 12.26.16 and 12.26.17; #1073). The deadline is taken from the database’s monotonic clock when the command is written, and the server’s monotonic operation task relinquishes the slot at that deadline, the mechanism Binary Lighting Output egress uses. A pulse written below a priority already commanded is relinquished at once, and a pulse time of zero relinquishes at once too. Changing a pulse time leaves an armed deadline as it was.

While Out_Of_Service is TRUE a client can simulate Door_Status, Lock_Status and Door_Alarm_State by writing them, and the door’s own values come back on the return to service (Clause 12.26.9, Table 12-30 footnote 1; #1131). The module door_out_of_service has the details.

Secured_Status isn’t stored: each read works it out from what the door serves (Clause 12.26.14; #1148), so it moves with every command, relock, device report and simulated value. See secured_status for how the inputs combine and when the answer is UNKNOWN.

The door reports intrinsically on Door_Alarm_State with the CHANGE_OF_STATE algorithm (Clause 12.26; #1149): Event_State goes OFFNORMAL once Door_Alarm_State has stayed in Alarm_Values for Time_Delay seconds and back to NORMAL once it has stayed out of them for Time_Delay_Normal. Fault_Values feeds the FAULT_STATE algorithm, so a Door_Alarm_State among them makes Reliability MULTI_STATE_FAULT and Event_State FAULT. Masked_Alarm_Values keeps Door_Alarm_State out of the states it lists. The module door_alarm has the rules the three lists set; the event rows are served and written through ChangeOfStateReporting, and the server sends the notifications to the Notification Class recipients.

The application decides when the door is in alarm and reports it with Self::set_door_alarm_state; Clause 12.26.20 leaves that to the device. That includes DOOR_OPEN_TOO_LONG: the door serves Door_Open_Too_Long_Time for the application’s logic to read but runs no timer of its own.

While the server holds the door, the application reports its Door_Status, Lock_Status and Door_Alarm_State through BACnetServer::report_door_state_local (#1132), which stores them as the setters do, out of service included.

Implementations§

Source§

impl AccessDoorObject

Source

pub fn new(instance: u32, name: impl Into<String>) -> Result<Self, Error>

Create a new Access Door object.

Source

pub fn set_relinquish_default(&mut self, value: DoorValue) -> Result<(), Error>

Set the Relinquish_Default (#270).

Table 12-30 types it as BACnetDoorValue, but Clause 12.26.11 admits only LOCK and UNLOCK: a pulse can’t be the resting command. Any other value, including a DoorValue::from_raw outside the production, is refused with VALUE_OUT_OF_RANGE and the stored default kept. After the store, Present_Value is resolved anew from the priority array so an empty array falls back to the new default immediately.

Source

pub fn set_door_members( &mut self, members: impl IntoIterator<Item = impl Into<BACnetDeviceObjectReference>>, ) -> Result<(), Error>

Set Door_Members, the objects that make up the physical door: its lock, contact, reader and anything else the application chooses (Clause 12.26.15 leaves the choice to the device). A reference with no Device identifier names an object in this device. The array is read-only over the network.

A reference whose device identifier isn’t a Device object is refused with VALUE_OUT_OF_RANGE and the members set before are kept (#1285).

Source

pub fn set_door_pulse_time(&mut self, tenths: u32)

Set Door_Pulse_Time, in tenths of a second.

Source

pub fn set_door_extended_pulse_time(&mut self, tenths: u32)

Set Door_Extended_Pulse_Time, in tenths of a second.

Source

pub fn set_door_open_too_long_time(&mut self, tenths: u32)

Set Door_Open_Too_Long_Time, in tenths of a second.

Source

pub fn set_door_status(&mut self, status: DoorStatus)

Set Door_Status, the open or closed state the door’s contact reports.

While Out_Of_Service is TRUE a client’s simulated value keeps being served, and this one takes over on the return to service.

Source

pub fn set_lock_status(&mut self, status: LockStatus)

Set Lock_Status, the state the door lock’s monitor reports.

While Out_Of_Service is TRUE a client’s simulated value keeps being served, and this one takes over on the return to service.

Source

pub fn set_door_alarm_state( &mut self, state: DoorAlarmState, ) -> Result<(), Error>

Set Door_Alarm_State, the alarm condition the application’s door logic has worked out (Clause 12.26.20 leaves that to the device), DOOR_OPEN_TOO_LONG included.

The state has to be NORMAL or a member of Alarm_Values or Fault_Values, and no member of Masked_Alarm_Values; any other is refused with VALUE_OUT_OF_RANGE and the state held is kept. A change of the value served triggers a SubscribeCOV notification (Table 13-1) and feeds the event algorithm, which a running server evaluates at its next one-second tick. While Out_Of_Service is TRUE a client’s simulated value keeps being served, and this one takes over on the return to service.

Source

pub fn set_alarm_values( &mut self, states: impl IntoIterator<Item = DoorAlarmState>, ) -> Result<(), Error>

Set Alarm_Values, the Door_Alarm_State values the door reports as offnormal (Clause 12.26.25). NORMAL, or a value outside the BACnetDoorAlarmState production, named or proprietary (256 to 65535), is refused with VALUE_OUT_OF_RANGE and the values set before are kept. A Door_Alarm_State the lists no longer admit drops to NORMAL. Clients can write the list too, as they can the door’s other event configuration.

Source

pub fn set_fault_values( &mut self, states: impl IntoIterator<Item = DoorAlarmState>, ) -> Result<(), Error>

Set Fault_Values, the Door_Alarm_State values that make Reliability MULTI_STATE_FAULT (Clause 12.26.26), checked as Self::set_alarm_values checks its list.

Source

pub fn set_masked_alarm_values( &mut self, states: impl IntoIterator<Item = DoorAlarmState>, ) -> Result<(), Error>

Set Masked_Alarm_Values, the states Door_Alarm_State is kept out of (Clause 12.26.21), checked as Self::set_alarm_values checks its list. A door in a state the list now masks returns to NORMAL at once.

Trait Implementations§

Source§

impl BACnetObject for AccessDoorObject

Source§

fn report_access_input_internal( &mut self, input: AccessControlInput, ) -> Result<(), Error>

Take what the door’s hardware reports (#1132): Door_Status, Lock_Status and Door_Alarm_State, each one given, together. A value outside its production, or an alarm state the door’s lists don’t admit, is VALUE_OUT_OF_RANGE and changes nothing. Stored as the setters store the device’s values: while Out_Of_Service is TRUE the report replaces the values put aside, and a client’s simulated ones stay served until the return to service. Any other record is OPTIONAL_FUNCTIONALITY_NOT_SUPPORTED.

Source§

fn object_identifier(&self) -> ObjectIdentifier

The object’s identifier (type + instance).
Source§

fn object_name(&self) -> &str

The object’s name.
Source§

fn read_property( &self, property: PropertyIdentifier, array_index: Option<u32>, ) -> Result<PropertyValue, Error>

Read a property value.
Source§

fn write_property( &mut self, property: PropertyIdentifier, array_index: Option<u32>, value: PropertyValue, priority: Option<u8>, ) -> Result<(), Error>

Write a property value. Read more
Source§

fn property_metadata(&self) -> Cow<'_, [PropertyMetadata]>

Return canonical metadata for this object’s effective property rows. Read more
Source§

fn property_list(&self) -> Cow<'static, [PropertyIdentifier]>

List all properties this object supports in the legacy projection. Read more
Source§

fn supports_cov(&self) -> bool

Whether this object type supports COV notifications. Read more
Source§

fn evaluate_intrinsic_reporting(&mut self) -> Option<TransitionOutcome>

Evaluate intrinsic reporting after a present_value change. Read more
Source§

fn tick_intrinsic_reporting(&mut self) -> Option<TransitionOutcome>

Advance the Time_Delay countdown for a pending transition. Read more
Source§

fn write_property_from( &mut self, property: PropertyIdentifier, array_index: Option<u32>, value: PropertyValue, priority: Option<u8>, _origin: &CommandOrigin, ) -> Result<(), Error>

Write with explicit actual command provenance. Standalone callers assert the origin; server boundaries additionally validate ingress or membership. Decorators must forward this hook without discarding the origin. The default preserves custom/unaffected object behavior. First-party source-tracked commands require this hook and deny context-free writing.
Source§

fn is_writable_property(&self, property: PropertyIdentifier) -> bool

Whether a property write route can accept property for this object. Read more
Source§

fn is_array_property(&self, property: PropertyIdentifier) -> bool

Whether property accepts an array index on this object. Read more
Source§

fn is_list_property(&self, property: PropertyIdentifier) -> bool

Whether property is a BACnetLIST on this object. Read more
Source§

fn is_createable(&self) -> bool

Whether this object type can be created at runtime via CreateObject. Read more
Source§

fn creation_only_properties(&self) -> &'static [PropertyIdentifier]

The properties whose whole value a CreateObject initial value may set on this object although WriteProperty can’t change it afterwards. Read more
Source§

fn initialize_property( &mut self, _property: PropertyIdentifier, _value: PropertyValue, ) -> Result<(), Error>

Apply a CreateObject initial value to one of Self::creation_only_properties, written whole. Read more
Source§

fn is_deleteable(&self) -> bool

Whether this object type can be deleted at runtime via DeleteObject. Read more
Source§

fn required_properties(&self) -> Cow<'static, [PropertyIdentifier]>

List the REQUIRED properties for this object type. Read more
Source§

fn supports_subscribe_cov_property(&self) -> bool

Whether SubscribeCOVProperty and SubscribeCOVPropertyMultiple may monitor this object’s properties. Read more
Source§

fn supports_cov_property(&self, property: PropertyIdentifier) -> bool

Whether a readable property supports property-specific COV. Read more
Source§

fn cov_increment(&self) -> Option<f64>

COV increment for this object (objects with a COV_Increment property). Read more
Source§

fn cov_reported_properties(&self) -> &'static [CovReportedProperty]

Properties a whole-object (SubscribeCOV) notification reports after its leading value and Status_Flags, in report order. Read more
Source§

fn set_overridden(&mut self, _overridden: bool)

Set the OVERRIDDEN bit in StatusFlags. Read more
Source§

fn tick_schedule( &mut self, _today: SpecificDate, _time: Time, _calendar_active: &dyn Fn(ObjectIdentifier) -> bool, ) -> Option<ScheduleWrite>

Evaluate this object’s schedule at time on today (Clause 12.24.4). Read more
Source§

fn take_owed_schedule_writes(&mut self) -> Vec<ScheduleWrite>

Take the writes this schedule owes its targets apart from its calculation, each once, in order: a NULL to every priority slot a change of List_Of_Object_Property_References or Priority_For_Writing left behind (#1088), then the Present_Value owed out of service, for a client’s write (Clause 12.24.14) or a change of those two properties. Read more
Source§

fn complete_schedule_write( &mut self, _write: &ScheduleWrite, _outcomes: &[ScheduleTargetOutcome], ) -> bool

Report how each target took write, one of this schedule’s writes: outcomes holds one entry per member of write.references, in order. Read more
Source§

fn retry_refusals_naming( &self, _target: ObjectIdentifier, ) -> Option<ScheduleWrite>

The retry of the current value to the references whose last write was refused and that name target, an object just added to the database (#1440), so the refusal can clear without waiting for the next pass. None when no such refusal stands, or when the pass itself would retry nothing: out of service, outside Effective_Period, or with a NULL Present_Value. Only meaningful for Schedule objects; default returns None.
Source§

fn acknowledge_alarm( &mut self, _transition_bit: EventTransitionBits, ) -> Result<(), Error>

Acknowledge an alarm transition. Sets the transition_bit flags in acked_transitions. Returns Ok(()) if the object supports event detection, Err otherwise.
Source§

fn apply_life_safety_operation( &mut self, _operation: LifeSafetyOperation, ) -> Result<LifeSafetyOperationOutcome, Error>

Apply a LifeSafetyOperation atomically to this object. Read more
Source§

fn set_life_safety_operation_expected_internal( &mut self, _operation: LifeSafetyOperation, ) -> Result<(), Error>

Set the next LifeSafetyOperation expected by trusted local logic. Read more
Source§

fn set_event_state_internal(&mut self, _state: EventState) -> Result<(), Error>

Apply an internally-detected Event_State transition. Read more
Source§

fn enrollment_eval_state_internal(&self) -> Option<EventEnrollmentEvalState>

Snapshot this object’s Event Enrollment evaluation state, if it models one. Read more
Source§

fn set_enrollment_eval_state_internal( &mut self, _state: EventEnrollmentEvalState, ) -> Result<(), Error>

Store this object’s Event Enrollment evaluation state. Read more
Source§

fn enrollment_eval_source_internal( &self, ) -> Option<Option<EventEnrollmentMonitoredSource>>

Snapshot the monitored source that owns Event Enrollment private state. Read more
Source§

fn set_enrollment_eval_source_internal( &mut self, _source: Option<EventEnrollmentMonitoredSource>, ) -> Result<(), Error>

Store or clear the monitored source that owns Event Enrollment state.
Source§

fn set_acked_transitions_internal( &mut self, _transition_bit: EventTransitionBits, _acknowledged: bool, ) -> Result<(), Error>

Set or clear one Acked_Transitions bit on a received event-state transition. Read more
Source§

fn evaluate_reliability_internal( &mut self, ) -> Result<ReliabilityEvaluation, Error>

Evaluate and, when necessary, mutate this object’s Reliability. Read more
Source§

fn set_reliability_internal( &mut self, _reliability: Reliability, ) -> Result<(), Error>

Apply an internally-derived Reliability value. Read more
Source§

fn set_present_value_internal( &mut self, _value: PropertyValue, ) -> Result<(), Error>

Apply the logical Present_Value supplied by the local application. Read more
Source§

fn set_present_value_from_internal( &mut self, value: PropertyValue, _origin: &CommandOrigin, ) -> Result<(), Error>

set_present_value_internal on behalf of origin, the local Device the application runs in. Read more
Source§

fn set_tracking_value_internal( &mut self, _value: PropertyValue, ) -> Result<(), Error>

Apply the Tracking_Value the local application derived. Read more
Source§

fn set_controlled_variable_value_internal( &mut self, _value: PropertyValue, ) -> Result<(), Error>

Apply the Controlled_Variable_Value measured by the local application. Read more
Source§

fn add_averaging_sample_internal( &mut self, _sample: Option<PropertyValue>, ) -> Result<(), Error>

Record one sample for an Averaging object. Read more
Source§

fn audit_log_storage_internal(&self) -> Option<&dyn AuditLogStorage>

Borrow this object’s Audit Log query storage, if it has any. Read more
Source§

fn audit_log_notification_sink_internal( &mut self, ) -> Option<&mut dyn AuditLogNotificationSink>

Mutably borrow this object’s Audit notification receiver capability. Read more
Source§

fn file_storage_internal(&self) -> Option<&dyn FileStorage>

Borrow this object’s File storage, if it has any. Read more
Source§

fn file_storage_internal_mut(&mut self) -> Option<&mut dyn FileStorage>

Mutably borrow this object’s File storage, if it has any. Read more
Source§

fn log_record_identities_internal(&self) -> Option<Vec<LogRecordIdentity>>

Return stable identities aligned with this object’s resident log records. Read more
Source§

fn log_buffer_internal(&self) -> Option<&dyn LogBufferRecords>

Borrow this object’s Log_Buffer records as ReadRange pages them. Read more
Source§

fn add_trend_record(&mut self, _record: BACnetLogRecord) -> Result<(), Error>

Submit a trend record to an object’s log lifecycle. Read more
Source§

fn add_trend_multiple_record( &mut self, _record: BACnetLogMultipleRecord, ) -> Result<(), Error>

Submit a Trend Log Multiple record, one value per monitored member, to an object’s log lifecycle. Read more
Source§

fn add_event_log_record( &mut self, _record: BACnetEventLogRecord, ) -> Result<(), Error>

Submit an Event Log record to an object’s log lifecycle. Read more
Source§

impl Clone for AccessDoorObject

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more