From 985ec2b1bf9bc2a8b0dc8df14efa2f1459aee025 Mon Sep 17 00:00:00 2001 From: Daniel Spofford Date: Tue, 16 Apr 2019 14:49:46 -0500 Subject: [PATCH] Throwaway branch to test with BBBW --- lib/harald.ex | 8 +++ lib/harald/hci.ex | 2 +- lib/harald/transport/uart.ex | 2 +- lib/harald/transport/uart/framing.ex | 73 +++++++++++++++++++++++++++- 4 files changed, 82 insertions(+), 3 deletions(-) diff --git a/lib/harald.ex b/lib/harald.ex index a977b24..9a89570 100644 --- a/lib/harald.ex +++ b/lib/harald.ex @@ -2,4 +2,12 @@ defmodule Harald do @moduledoc """ Elixir library for working directly with Bluetooth via the HCI. """ + + def get_system_status(namespace) do + Harald.Transport.send_command(namespace, <<1, 0xFE1F::little-size(16), 0>>) + end + + def read_bd_addr(namespace) do + Harald.Transport.send_command(namespace, <<1, 9, 16, 0>>) + end end diff --git a/lib/harald/hci.ex b/lib/harald/hci.ex index 6a1b73f..48c51b4 100644 --- a/lib/harald/hci.ex +++ b/lib/harald/hci.ex @@ -59,7 +59,7 @@ defmodule Harald.HCI do def command(opcode, opts) do s = byte_size(opts) - opcode <> <> <> opts + <<1>> <> opcode <> <> <> opts end @doc """ diff --git a/lib/harald/transport/uart.ex b/lib/harald/transport/uart.ex index 1f11b06..5de8ce9 100644 --- a/lib/harald/transport/uart.ex +++ b/lib/harald/transport/uart.ex @@ -39,7 +39,7 @@ defmodule Harald.Transport.UART do @impl GenServer def handle_call({:send_command, message}, _from, %{uart_pid: uart_pid} = state) do - {:reply, UART.write(uart_pid, <<1>> <> message), state} + {:reply, UART.write(uart_pid, message), state} end @impl GenServer diff --git a/lib/harald/transport/uart/framing.ex b/lib/harald/transport/uart/framing.ex index 375d3d7..322128c 100644 --- a/lib/harald/transport/uart/framing.ex +++ b/lib/harald/transport/uart/framing.ex @@ -32,7 +32,78 @@ defmodule Harald.Transport.UART.Framing do def frame_timeout(state), do: {:ok, [state], <<>>} @impl Framing - def remove_framing(new_data, state), do: process_data(new_data, state) + def remove_framing(new_data, state) do + require Logger + + case new_data do + # read bd addr + <<4, 14, 10, 1, 9, 16, status, bd_addr::binary>> -> + Logger.warn("ret read bd addr: #{inspect(%{status: status, bd_addr: bd_addr})}") + + # vendor specific - get system status + << + 4, + 14, + 29, + 1, + 31, + 254, + status, + software_version_x, + software_version_z, + chip_revision, + chip_mode, + fref::little-size(16), + slow_clock_used, + process_type_detected, + odp_process, + deep_sleep_mode, + whitening_mode, + cdc_mode, + self_test, + hopping_mode, + baud_rate::little-size(32), + temperature_index, + temperature_detected, + i2c_status, + fref_tcxo_clock::little-size(16), + reserved1, + reserved2 + >> -> + Logger.warn( + "ret get system status: #{ + inspect(%{ + status: status, + software_version_x: software_version_x, + software_version_z: software_version_z, + chip_revision: chip_revision, + chip_mode: chip_mode, + fref: fref, + slow_clock_used: slow_clock_used, + process_type_detected: process_type_detected, + odp_process: odp_process, + deep_sleep_mode: deep_sleep_mode, + whitening_mode: whitening_mode, + cdc_mode: cdc_mode, + self_test: self_test, + hopping_mode: hopping_mode, + baud_rate: baud_rate, + temperature_index: temperature_index, + temperature_detected: temperature_detected, + i2c_status: i2c_status, + fref_tcxo_clock: fref_tcxo_clock, + reserved1: reserved1, + reserved2: reserved2 + }) + }" + ) + + _ -> + Logger.warn("ret: #{inspect(new_data)}") + end + + process_data(new_data, state) + end @doc """ Returns a tuple like `{remaining_desired_length, part_of_bin, rest_of_bin}`.