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

add_framing(data, state)

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.

flush(direction, state)

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.

frame_timeout(state)

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.

init(args)

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.

remove_framing(new_data, state)

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.