Unconfirmed Service Request APDUs carry one-way service invocations.
APDU Description (ASHRAE 135)
The BACnet-Unconfirmed-Request-PDU is used to convey the information contained in an unconfirmed service request primitive. An unconfirmed service request does not require a reply from the remote peer. (Clause 21)
No reply is expected by the protocol (fire-and-forget). Typical uses include:
- Device discovery:
Who-Is-> devices answer withI-Am - Name-based discovery:
Who-Has-> devices answer withI-Have - Change-of-Value (COV) notifications (unconfirmed variant)
- Time synchronization broadcasts
- Write-Group (efficient group writes)
- Text messages, private transfers, etc.
Because they do not carry an invoke ID, unconfirmed requests cannot be rejected or aborted at the APDU layer in the same way confirmed requests can.
This module implements the BACnet.Stack.EncoderProtocol.
Decoding is performed by BACnet.Protocol.APDU.decode/1 (and
BACnet.Protocol.APDU.decode_unconfirmed_request/1).
Examples
iex> who_is = %UnconfirmedServiceRequest{service: :who_is, parameters: []}
iex> UnconfirmedServiceRequest.encode(who_is)
{:ok, <<16, 8>>}
iex> iam = %UnconfirmedServiceRequest{service: :i_am, parameters: []}
iex> UnconfirmedServiceRequest.encode(iam)
{:ok, <<16, 0>>}Decoding an unconfirmed APDU and turning it into a service:
iex> raw = <<16, 8>>
iex> {:ok, apdu} = BACnet.Protocol.APDU.decode(raw)
{:ok, %BACnet.Protocol.APDU.UnconfirmedServiceRequest{service: :who_is, parameters: []}}
iex> UnconfirmedServiceRequest.to_service(apdu)
{:ok, %BACnet.Protocol.Services.WhoIs{device_id_low_limit: nil, device_id_high_limit: nil}}
Summary
Types
BACnet Unconfirmed Service Request service structs.
Represents the Application Data Unit (APDU) Unconfirmed Service Request.
Functions
Encodes the Unconfirmed Service Request APDU into binary data.
Converts the APDU into a service, if supported and possible.
Types
@type service() :: BACnet.Protocol.Services.IAm.t() | BACnet.Protocol.Services.IHave.t() | BACnet.Protocol.Services.WhoHas.t() | BACnet.Protocol.Services.WhoIs.t() | BACnet.Protocol.Services.TimeSynchronization.t() | BACnet.Protocol.Services.UnconfirmedCovNotification.t() | BACnet.Protocol.Services.UnconfirmedEventNotification.t() | BACnet.Protocol.Services.UnconfirmedPrivateTransfer.t() | BACnet.Protocol.Services.UnconfirmedTextMessage.t() | BACnet.Protocol.Services.UtcTimeSynchronization.t() | BACnet.Protocol.Services.WriteGroup.t()
BACnet Unconfirmed Service Request service structs.
@type t() :: %BACnet.Protocol.APDU.UnconfirmedServiceRequest{ parameters: BACnet.Protocol.ApplicationTags.encoding_list(), service: BACnet.Protocol.Constants.unconfirmed_service_choice() | non_neg_integer() }
Represents the Application Data Unit (APDU) Unconfirmed Service Request.
To allow forward compatibility, reason is allowed to be an integer.