package eu.hgross.blaubot.android.bluetooth;
import java.util.concurrent.Semaphore;
import eu.hgross.blaubot.core.Blaubot;
import eu.hgross.blaubot.core.BlaubotAdapterConfig;
import eu.hgross.blaubot.core.BlaubotUUIDSet;
import eu.hgross.blaubot.core.ConnectionStateMachineConfig;
import eu.hgross.blaubot.core.IBlaubotAdapter;
import eu.hgross.blaubot.core.IBlaubotDevice;
import eu.hgross.blaubot.core.acceptor.IBlaubotConnectionAcceptor;
import eu.hgross.blaubot.core.connector.IBlaubotConnector;
/**
* BlaubotAdapter-Bluetooth implementation for android.
*
* @author Henning Gross {@literal (mail.to@henning-gross.de)}
*
*/
public class BlaubotBluetoothAdapter implements IBlaubotAdapter {
public static final int NO_PEASANTS_KING_TIMEOUT = 11000;
public static final int CROWNING_PREPARATION_TIMEOUT = 2500;
private final IBlaubotDevice ownDevice;
private BlaubotUUIDSet uuidSet;
private IBlaubotConnectionAcceptor acceptor;
private IBlaubotConnector connector;
protected Semaphore bluetoothAdapterSempaphore;
private ConnectionStateMachineConfig connectionStateMachineConfig;
private Blaubot blaubot;
private BlaubotAdapterConfig adapterConfig;
public BlaubotBluetoothAdapter(BlaubotUUIDSet uuidSet, IBlaubotDevice ownDevice) {
this.uuidSet = uuidSet;
this.ownDevice = ownDevice;
this.connector = new BlaubotBluetoothConnector(this, ownDevice);
this.acceptor = new BlaubotBluetoothConnectionAcceptor(this);
this.bluetoothAdapterSempaphore = new Semaphore(1);
this.connectionStateMachineConfig = new ConnectionStateMachineConfig();
this.connectionStateMachineConfig.setCrowningPreparationTimeout(CROWNING_PREPARATION_TIMEOUT);
this.connectionStateMachineConfig.setKingWithoutPeasantsTimeout(NO_PEASANTS_KING_TIMEOUT);
this.adapterConfig = new BlaubotAdapterConfig();
ConnectionStateMachineConfig.validateTimeouts(connectionStateMachineConfig, adapterConfig);
}
@Override
public IBlaubotConnector getConnector() {
return connector;
}
@Override
public IBlaubotConnectionAcceptor getConnectionAcceptor() {
return acceptor;
}
public BlaubotUUIDSet getUUIDSet() {
return uuidSet;
}
@Override
public void setBlaubot(Blaubot blaubotInstance) {
this.blaubot = blaubotInstance;
}
@Override
public Blaubot getBlaubot() {
return blaubot;
}
@Override
public ConnectionStateMachineConfig getConnectionStateMachineConfig() {
return connectionStateMachineConfig;
}
@Override
public BlaubotAdapterConfig getBlaubotAdapterConfig() {
return adapterConfig;
}
}