anchor.diff:  -type addr() :: integer().
   -type data() :: tuple().
   -type len() :: integer().
  +-type devname() :: string().
   
   %%%===================================================================
   %%% API
  
positive.code: 
  %% API
  -export([start_link/0, stop/0]).
  -export([i2c_init/0, i2c_write/4, i2c_read/3]).
  
  %% gen_server callbacks
  -export([init/1, handle_call/3, handle_cast/2, handle_info/2,
  
negative.code: -spec(i2c_init() -> fd() | {error, error_type}).
  i2c_init() ->
      gen_server:call(?MODULE, {call, i2c_init}).
  
  %% @doc Initialise the i2c devname device.
  %% @end
  -spec(i2c_init_name(devname()) -> fd() | {error, error_type}).
  i2c_init_name(Devname) ->
      gen_server:call(?MODULE, {call, i2c_init_name, Devname}).
  
  %% @doc write data into an i2c slave device.
  %% @end
  -spec(i2c_write(fd(), addr(), data(), len()) -> ok | {error, error_type}).
  i2c_write(Fd, Addr, Data, Len) ->
      gen_server:call(?MODULE, {call, i2c_write, Fd, Addr, Data, Len}).
  