-module(pmod_gyro). -behavior(gen_server). -include("pmod_gyro.hrl"). % API -export([start_link/2]). % Callbacks -export([init/1]). -export([handle_call/3]). -export([handle_cast/2]). -export([handle_info/2]). -export([code_change/3]). -export([terminate/2]). -define(SPI_MODE, #{cpol => high, cpha => trailing}). %--- API ----------------------------------------------------------------------- % @private start_link(Slot, _Opts) -> gen_server:start_link(?MODULE, Slot, []). %--- Callbacks ----------------------------------------------------------------- % @private init(Slot) -> verify_device(Slot), grisp_devices:register(Slot, ?MODULE), {ok, Slot}. % @private handle_call(Request, From, _State) -> error({unknown_request, Request, From}). % @private handle_cast(Request, _State) -> error({unknown_cast, Request}). % @private handle_info(Info, _State) -> error({unknown_info, Info}). % @private code_change(_OldVsn, State, _Extra) -> {ok, State}. % @private terminate(_Reason, _State) -> ok. %--- Internal ------------------------------------------------------------------ verify_device(Slot) -> case grisp_spi:send_recv(Slot, ?SPI_MODE, <>, 1, 1) of <> -> ok; Other -> error({device_mismatch, {who_am_i, Other}}) end.