Modify the DDL.Tx API slightly to be easier to work with.

This commit is contained in:
James Harton 2020-01-17 12:19:17 +13:00
parent edb85a48b7
commit 1c1ee39fea
3 changed files with 16 additions and 16 deletions

View file

@ -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

View file

@ -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

View file

@ -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