Modbus RTU ADU framing: <<slave, pdu, crc::little-16>>.
<<slave, pdu, crc::little-16>>
@spec pack_exception(0..255, 1..127, atom()) :: binary()
@spec pack_req(tuple()) :: binary()
@spec pack_res(tuple(), list() | nil) :: binary()
@spec parse_req(binary(), map()) :: {:ok, tuple()} | {:error, atom(), integer() | nil}
@spec parse_res(tuple(), binary()) :: list() | nil | {:error, term()}
@spec response_fits?(tuple()) :: boolean()
@spec response_length(tuple(), binary()) :: {:ok, pos_integer()} | :more | {:error, term()}