code: public static List<CardTerminal> byATR(Collection<ATR> atrs) throws NoSuchAlgorithmException, CardException {
          TerminalFactory tf = TerminalFactory.getInstance("PC/SC", null, new jnasmartcardio.Smartcardio());
          CardTerminals ts = tf.terminals();
          List<CardTerminal> tl = ts.list(State.ALL);
          ArrayList<CardTerminal> result = new ArrayList<>();
          for (CardTerminal t : tl) {
              logger.trace("Checking {}", t.getName());
              if (t.isCardPresent()) {
                  // TODO: only cards available, not exclusively used
                  Card c = t.connect("DIRECT");
                  ATR cardatr = c.getATR();
                  c.disconnect(false);
  
                  for (ATR atr : atrs) {
                      if (cardatr.equals(atr)) {
                          logger.debug("{} matched for ATR {}", t.getName(), HexUtils.bin2hex(atr.getBytes()));
                          result.add(t);
                      }
                  }
              }
          }
          return result;
      }
docs: Return a list of CardTerminal-s that contain a card with one of the specified ATR-s.
  The reader might be unusable (in use in exclusive mode).
  
  @param atrs Collection of ATR-s to match
  @return list of CardTerminal-s
  @throws NoSuchAlgorithmException if PC/SC is not present/running
  @throws CardException            if PC/SC error happens