package info.izumin.android.bletia;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothGattCharacteristic;
import android.bluetooth.BluetoothGattDescriptor;
import android.content.Context;
import org.jdeferred.Promise;
import info.izumin.android.bletia.action.ConnectAction;
import info.izumin.android.bletia.action.DisconnectAction;
import info.izumin.android.bletia.action.DiscoverServicesAction;
import info.izumin.android.bletia.action.EnableNotificationAction;
import info.izumin.android.bletia.action.ReadCharacteristicAction;
import info.izumin.android.bletia.action.ReadDescriptorAction;
import info.izumin.android.bletia.action.ReadRemoteRssiAction;
import info.izumin.android.bletia.action.WriteCharacteristicAction;
import info.izumin.android.bletia.action.WriteDescriptorAction;
import info.izumin.android.bletia.core.AbstractBletia;
import info.izumin.android.bletia.core.BletiaException;
/**
* Created by izumin on 9/7/15.
*/
public class Bletia extends AbstractBletia {
private EventEmitter mEmitter;
public Bletia(Context context) {
super(context);
setSubListener(mListener);
mEmitter = new EventEmitter(this);
}
public void addListener(BletiaListener listener) {
mEmitter.addListener(listener);
}
public void removeListener(BletiaListener listener) {
mEmitter.removeListener(listener);
}
public Promise<Void, BletiaException, Void> connect(BluetoothDevice device) {
return execute(new ConnectAction(device, getStateContainer()));
}
public Promise<Void, BletiaException, Void> disconnect() {
return execute(new DisconnectAction(getStateContainer()));
}
public Promise<Void, BletiaException, Void> discoverServices() {
return execute(new DiscoverServicesAction(getStateContainer()));
}
public Promise<BluetoothGattCharacteristic, BletiaException, Void> writeCharacteristic(BluetoothGattCharacteristic characteristic) {
return execute(new WriteCharacteristicAction(characteristic));
}
public Promise<BluetoothGattCharacteristic, BletiaException, Void> readCharacteristic(BluetoothGattCharacteristic characteristic) {
return execute(new ReadCharacteristicAction(characteristic));
}
public Promise<BluetoothGattDescriptor, BletiaException, Void> writeDescriptor(BluetoothGattDescriptor descriptor) {
return execute(new WriteDescriptorAction(descriptor));
}
public Promise<BluetoothGattDescriptor, BletiaException, Void> readDescriptor(BluetoothGattDescriptor descriptor) {
return execute(new ReadDescriptorAction(descriptor));
}
public Promise<BluetoothGattCharacteristic, BletiaException, Void> enableNotification(BluetoothGattCharacteristic characteristic, boolean enabled) {
return execute(new EnableNotificationAction(characteristic, enabled));
}
public Promise<Integer, BletiaException, Void> readRemoteRssi() {
return execute(new ReadRemoteRssiAction());
}
private final AbstractBletia.BleEventListener mListener = new BleEventListener() {
@Override
public void onCharacteristicChanged(BluetoothGattCharacteristic characteristic) {
mEmitter.emitCharacteristicChanged(characteristic);
}
@Override
public void onError(BletiaException exception) {
mEmitter.emitError(exception, getState());
}
};
}