BACnet.Protocol.APDU.UnconfirmedServiceRequest (bacstack v0.1.0-dev.1)

Copy Markdown View Source

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 with I-Am
  • Name-based discovery: Who-Has -> devices answer with I-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.

t()

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

Functions

encode(apdu)

@spec encode(t()) :: {:ok, iodata()} | {:error, term()}

Encodes the Unconfirmed Service Request APDU into binary data.

to_service(apdu)

@spec to_service(t()) :: {:ok, service()} | {:error, term()} | :not_supported

Converts the APDU into a service, if supported and possible.