Current section
Files
Jump to
Current section
Files
lib/bacnet/protocol/services/behaviour.ex
defmodule BACnet.Protocol.Services.Behaviour do
alias BACnet.Protocol.APDU
@doc """
Get the service name atom.
"""
@callback get_name() :: atom()
@doc """
Whether the service is of type confirmed or unconfirmed.
"""
@callback is_confirmed() :: boolean()
@doc """
Get a service request APDU for this service.
For confirmed service requests, the following keys default to specific values, if not specified:
- `segmented_response_accepted: true`
- `max_segments: :more_than_64`
- `max_apdu: 1476`
- `invoke_id: 0`
These keys can be overriden through `request_data`. `request_data` may be ignored for unconfirmed services.
When setting `max_segments`, do not use `:unspecified` because it makes it for the server unable to determine
if the response is transmittable or not. Thus `:unspecified` might be as low as maximum two segments.
For that reason, always use a specific max segments or `:more_than_64`.
"""
@callback to_apdu(struct(), Keyword.t()) ::
{:ok, APDU.ConfirmedServiceRequest.t() | APDU.UnconfirmedServiceRequest.t()}
| {:error, term()}
end