Modify the DDL.Tx API slightly to be easier to work with.
This commit is contained in:
parent
edb85a48b7
commit
1c1ee39fea
3 changed files with 16 additions and 16 deletions
|
@ -28,23 +28,23 @@ defmodule Wafer.DLL.Tx do
|
|||
@spec tx(t) :: {byte, t} | :done
|
||||
def tx(%Tx{state: :idle} = tx), do: {@byte_start, %{tx | state: :transmitting}}
|
||||
|
||||
def tx(%Tx{state: :transmitting, buffer: <<@byte_start::integer-size(8), _::binary>>} = rx),
|
||||
do: {@byte_esc, %{rx | state: :escaping}}
|
||||
def tx(%Tx{state: :transmitting, buffer: <<@byte_start, _::binary>>} = tx),
|
||||
do: {@byte_esc, %{tx | state: :escaping}}
|
||||
|
||||
def tx(%Tx{state: :transmitting, buffer: <<@byte_end::integer-size(8), _::binary>>} = rx),
|
||||
do: {@byte_esc, %{rx | state: :escaping}}
|
||||
def tx(%Tx{state: :transmitting, buffer: <<@byte_end, _::binary>>} = tx),
|
||||
do: {@byte_esc, %{tx | state: :escaping}}
|
||||
|
||||
def tx(%Tx{state: :transmitting, buffer: <<@byte_esc::integer-size(8), _::binary>>} = rx),
|
||||
do: {@byte_esc, %{rx | state: :escaping}}
|
||||
def tx(%Tx{state: :transmitting, buffer: <<@byte_esc, _::binary>>} = tx),
|
||||
do: {@byte_esc, %{tx | state: :escaping}}
|
||||
|
||||
def tx(%Tx{state: :transmitting, buffer: <<byte::integer-size(8), buffer::binary>>} = rx),
|
||||
do: {byte, %{rx | state: :transmitting, buffer: buffer}}
|
||||
def tx(%Tx{state: :transmitting, buffer: <<byte, buffer::binary>>} = tx),
|
||||
do: {byte, %{tx | state: :transmitting, buffer: buffer}}
|
||||
|
||||
def tx(%Tx{state: :escaping, buffer: <<byte::integer-size(8), buffer::binary>>} = rx),
|
||||
do: {byte, %{rx | state: :escaping, buffer: buffer}}
|
||||
def tx(%Tx{state: :escaping, buffer: <<byte, buffer::binary>>} = tx),
|
||||
do: {byte, %{tx | state: :escaping, buffer: buffer}}
|
||||
|
||||
def tx(%Tx{buffer: <<>>, state: :transmitting} = rx), do: {@byte_end, %{rx | state: :complete}}
|
||||
def tx(%Tx{state: :complete}), do: :done
|
||||
def tx(%Tx{buffer: <<>>, state: :transmitting} = tx), do: {@byte_end, %{tx | state: :complete}}
|
||||
def tx(%Tx{state: :complete} = tx), do: {:done, tx}
|
||||
|
||||
def complete?(%Tx{state: :complete}), do: true
|
||||
def complete?(%Tx{}), do: false
|
||||
|
|
|
@ -27,8 +27,8 @@ defmodule WaferDllTxTest do
|
|||
|
||||
defp collect(tx, bytes) do
|
||||
case Tx.tx(tx) do
|
||||
{:done, _tx} -> Enum.reverse(bytes)
|
||||
{byte, tx} -> collect(tx, [byte | bytes])
|
||||
:done -> Enum.reverse(bytes)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -17,12 +17,12 @@ defmodule WaferDLLTest do
|
|||
|
||||
def transmit(%Tx{} = tx, %Rx{} = rx) do
|
||||
case Tx.tx(tx) do
|
||||
{:done, tx} ->
|
||||
{tx, rx}
|
||||
|
||||
{byte, tx} ->
|
||||
rx = Rx.rx(rx, byte)
|
||||
transmit(tx, rx)
|
||||
|
||||
:done ->
|
||||
{tx, rx}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue