Nerves.UART v0.1.0 Nerves.UART.Framing behaviour
A behaviour for implementing framers for data received over a UART.
Summary
Callbacks
Add framing to the passed in data
This is called when the user invokes Nerves.UART.flush/2
. Any partially
received frames should be dropped
If remove_framing/2
returned :in_frame
and a user-specified timeout for
reassembling frames has elapsed, then this function is called. Depending on
the semantics of the framing, a partial frame may be returned or the
incomplete frame may be dropped
Initialize the state of the framer based on options passed to
Nerves.UART.open/3
Remove the framing off received data. If a partial frame is left over at the
end, then :in_frame
should be returned. All of the frames received should
be returned in the second tuple
Callbacks
Specs
add_framing(data :: term, state :: term) ::
{:ok, framed_data, new_state} |
{:error, reason, new_state} when new_state: term, framed_data: binary, reason: term
Add framing to the passed in data.
The returned frame_data
will be sent out the UART.
Specs
flush(direction :: :receive | :transmit | :both, state :: term) :: new_state when new_state: term
This is called when the user invokes Nerves.UART.flush/2
. Any partially
received frames should be dropped.
Specs
frame_timeout(state :: term) :: {:ok, [term], new_state} when new_state: term
If remove_framing/2
returned :in_frame
and a user-specified timeout for
reassembling frames has elapsed, then this function is called. Depending on
the semantics of the framing, a partial frame may be returned or the
incomplete frame may be dropped.
Specs
init(args :: term) ::
{:ok, state} |
{:error, reason} when state: term, reason: term
Initialize the state of the framer based on options passed to
Nerves.UART.open/3
.
This function should return the initial state for the framer or an error.
Specs
remove_framing(new_data :: binary, state :: term) ::
{:in_frame, [term], new_state} |
{:ok, [term], new_state} when new_state: term
Remove the framing off received data. If a partial frame is left over at the
end, then :in_frame
should be returned. All of the frames received should
be returned in the second tuple.