anchor.diff:  write_config(Conf) when is_list(Conf) ->
       write_config(lists:foldl(fun(X, A) -> A bor map_config(X) end, 0, Conf));
   write_config(Conf) when is_integer(Conf) ->
  -    assert_transaction(),
  +    Bus = assert_transaction(),
       Val = (bnot(Conf) bsl 4) bor Conf,
  -    case grisp_i2c:msgs([?DS2482_I2C_ADR,
  -                         {write, <<?CMD_WCFG, Val>>},
  -                         {read, 1, ?I2C_M_NO_RD_ACK}]) of
  -        <<Conf:8>> ->
  +    Messages = [
  +        {write, ?DS2482_I2C_ADR, 0, <<?CMD_WCFG, Val>>},
  +        {read, ?DS2482_I2C_ADR, ?I2C_M_NO_RD_ACK, 1}
  +    ],
  +    case grisp_ni2c:transfer(Bus, Messages) of
  +        [ok, <<Conf:8>>] ->
               ok;
           Any -> error({read_back_config, Any, Val})
       end.
  
positive.code: % | S | AD,0 ‖ A ‖ DRST ‖ A ‖ Sr | AD,1 ‖ A | <byte> ‖ A\ | P |
  -spec reset() -> 'ok'.
  reset() ->
      assert_transaction(),
      <<Status:8>> = grisp_i2c:msgs([?DS2482_I2C_ADR,
                                     {write, <<?CMD_DRST>>},
                                     {read, 1, ?I2C_M_NO_RD_ACK}]),
      case Status band 16#f7 of
          16#10 -> ok;
          Any -> error({invalid_status, Any})
  
negative.code: % @end
  -spec bus_reset() -> 'nothing_present' | 'presence_detected' | 'short_detected'.
  bus_reset() ->
      Bus = assert_transaction(),
      grisp_ni2c:transfer(Bus, [{write, ?DS2482_I2C_ADR, 0, <<?CMD_1WRS>>}]),
      timer:sleep(1),
      [Result] = grisp_ni2c:transfer(Bus, [
          {read, ?DS2482_I2C_ADR, ?I2C_M_NO_RD_ACK, 1}
      ]),
      check_status(Result).
  
  % @doc Write one data byte to the 1-Wire line.
  %
  