/****************************************************************************
* Copyright (C) 2012 HS Coburg.
* All rights reserved.
* Contact: ecsec GmbH (info@ecsec.de)
*
* This file is part of the Open eCard App.
*
* GNU General Public License Usage
* This file may be used under the terms of the GNU General Public
* License version 3.0 as published by the Free Software Foundation
* and appearing in the file LICENSE.GPL included in the packaging of
* this file. Please review the following information to ensure the
* GNU General Public License version 3.0 requirements will be met:
* http://www.gnu.org/copyleft/gpl.html.
*
* Other Usage
* Alternatively, this file may be used in accordance with the terms
* and conditions contained in a signed written agreement between
* you and ecsec GmbH.
*
***************************************************************************/
package org.openecard.scio;
import android.content.Context;
import java.util.ArrayList;
import java.util.List;
import javax.smartcardio.CardException;
import javax.smartcardio.CardTerminal;
import javax.smartcardio.CardTerminals;
import org.simalliance.openmobileapi.Reader;
import org.simalliance.openmobileapi.SEService;
/**
* Seek implementation of smartcardio's CardTerminals interface.
*
* @author Dirk Petrautzki <petrautzki@hs-coburg.de>
*/
public class SeekTerminals extends CardTerminals implements SEService.CallBack {
private SEService seService;
private static SeekTerminals instance;
public static SeekTerminals getInstance() {
return instance;
}
public SeekTerminals(Context c) throws CardException {
try {
seService = new SEService(c, this);
instance = this;
} catch (SecurityException e) {
throw new CardException("Binding not allowed, uses-permission org.simalliance.openmobileapi.SMARTCARD?");
} catch (Exception e) {
throw new CardException(e);
}
}
@Override
public List<CardTerminal> list(State arg0) throws CardException {
while (!seService.isConnected()) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
List<CardTerminal> list = new ArrayList<CardTerminal>();
for (Reader r : seService.getReaders()) {
list.add(new SeekTerminal(r));
}
return list;
}
@Override
public boolean waitForChange(long arg0) throws CardException {
// TODO
return false;
}
public void shutdown() {
if (seService != null && seService.isConnected()) {
seService.shutdown();
}
}
@Override
public void serviceConnected(SEService service) {
// do nothing
}
}