code: public ISOBUSSocket[] createBufferedISOBUSSockets(Serializable fromId)
              throws IOException, InterruptedException {
          BufferedISOBUSSocket[] socks = new BufferedISOBUSSocket[2];
          Serializable toId;
  
          toId = getStartId();
  
          // Create socket for past engine messages
          socks[0] = new BufferedISOBUSSocket(fromId, toId, mEngineBus, null,
                  null);
          // Create socket for past implement messages
          socks[1] = new BufferedISOBUSSocket(fromId, toId, mImplementBus, null,
                  null);
  
          // Create command to ask ISOBlue for past data
          sendCommand((new ISOBlueCommand(ISOBlueCommand.OpCode.PAST, (byte) -1,
                  (byte) -1, String.format("%08x%08x", fromId, toId).getBytes())));
  
          return socks;
      }
docs: Create a pair of {@link BufferedISOBUSSocket}s which will receive all
  {@link Message}s stored by ISOBlue coming after the specified one. <br>
  One socket will receive engine bus messages and the other will receive
  implement bus messages.
  
  @param fromId
  the ID corresponding to the {@link Message} after which these
  sockets will start receiving
  @return An array containing two buffered sockets. <br>
  Index 0 contains the socket which will receive engine bus
  messages. <br>
  Index 1 contains the socket which will receive implement bus
  messages.
  @throws IOException
  @throws InterruptedException