anchor.diff:                                               {read, 1, ?I2C_M_NO_RD_ACK}]),
       {D, T, S}.
   
  +%% @doc Search the bus for devices.
  +%%
  +%% This function can only be used inside of a {@link transaction/1} call.
  +%%
  +%% === Example ===
  +%% With five DS18B20 temperature sensors connected one can get the unique 64-Bit
  +%% ROM codes like:
  +%% ```
  +%%  1> grisp_onewire:transaction(fun grisp_onewire:search/0).
  +%%  [[40,255,203,173,80,23,4,182],
  +%%  [40,255,67,77,96,23,5,138],
  +%%  [40,255,190,25,96,23,3,203],
  +%%  [40,255,54,42,96,23,5,35],
  +%%  [40,255,18,91,96,23,3,62]]
  +%% '''
  +-spec search() -> 'fail' | 'nothing_present' | 'short_detected' | [[byte()]].
   search() ->
       assert_transaction(),
       search(0, []).
  
positive.code:         Any -> error({read_back_config, Any, Val})
      end.
  
  detect() ->
      assert_transaction(),
      reset(),
      write_config([apu]).
  
  bus_reset() ->
      assert_transaction(),
      grisp_i2c:msgs([?DS2482_I2C_ADR, {write, <<?CMD_1WRS>>}]),
  
negative.code: % @private
  start_link() -> gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).
  
  %% @doc Run a 1-Wire transaction.
  %%
  %% Use this function to make sure that there is only one process running on the
  %% 1-Wire.
  %%
  %% === Example ===
  %% ```
  %%  2> grisp_onewire:transaction(fun grisp_onewire:bus_reset/0).
  %%  presence_detected
  %% '''
  -spec transaction(fun()) -> any().
  transaction(Fun) when is_function(Fun) ->
      case gen_server:call(?MODULE, {transaction, Fun}, ?TRANSACTION_TIMEOUT) of
          {result, Result} ->
  