Pixel Buds A: Switch to BTBR support class, add headphones features

This commit is contained in:
José Rebelo
2026-01-01 16:27:16 +00:00
parent 82177b9b77
commit eaba6be2e4
3 changed files with 22 additions and 69 deletions
@@ -5,6 +5,7 @@ import androidx.annotation.NonNull;
import java.util.regex.Pattern;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSpecificSettings;
import nodomain.freeyourgadget.gadgetbridge.devices.AbstractBLClassicDeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
@@ -46,6 +47,13 @@ public class PixelBudsACoordinator extends AbstractBLClassicDeviceCoordinator {
return new BatteryConfig[]{battery1, battery2, battery3};
}
@Override
public DeviceSpecificSettings getDeviceSpecificSettings(final GBDevice device) {
final DeviceSpecificSettings deviceSpecificSettings = new DeviceSpecificSettings();
deviceSpecificSettings.addRootScreen(R.xml.devicesettings_headphones);
return deviceSpecificSettings;
}
@NonNull
@Override
public Class<? extends DeviceSupport> getDeviceSupportClass(final GBDevice device) {
@@ -1,28 +1,26 @@
package nodomain.freeyourgadget.gadgetbridge.service.devices.pixel;
import nodomain.freeyourgadget.gadgetbridge.service.serial.AbstractSerialDeviceSupport;
import nodomain.freeyourgadget.gadgetbridge.service.serial.GBDeviceIoThread;
import nodomain.freeyourgadget.gadgetbridge.service.serial.GBDeviceProtocol;
import java.util.UUID;
public class PixelBudsADeviceSupport extends AbstractSerialDeviceSupport {
@Override
public boolean useAutoConnect() {
return false;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.service.btbr.TransactionBuilder;
import nodomain.freeyourgadget.gadgetbridge.service.serial.AbstractHeadphoneSerialDeviceSupportV2;
public class PixelBudsADeviceSupport extends AbstractHeadphoneSerialDeviceSupportV2<PixelBudsAProtocol> {
private static final UUID UUID_DEVICE_CTRL = UUID.fromString("df21fe2c-2515-4fdb-8886-f12c4d67927c");
public PixelBudsADeviceSupport() {
addSupportedService(UUID_DEVICE_CTRL);
}
@Override
protected GBDeviceProtocol createDeviceProtocol() {
protected PixelBudsAProtocol createDeviceProtocol() {
return new PixelBudsAProtocol(getDevice());
}
@Override
protected synchronized GBDeviceIoThread createDeviceIOThread() {
return new PixelBudsAIOThread(
getDevice(),
getContext(),
(PixelBudsAProtocol) getDeviceProtocol(),
this,
getBluetoothAdapter()
);
protected TransactionBuilder initializeDevice(final TransactionBuilder builder) {
builder.setDeviceState(GBDevice.State.INITIALIZED);
return builder;
}
}
@@ -1,53 +0,0 @@
package nodomain.freeyourgadget.gadgetbridge.service.devices.pixel;
import static nodomain.freeyourgadget.gadgetbridge.util.GB.hexdump;
import android.bluetooth.BluetoothAdapter;
import android.content.Context;
import android.os.ParcelUuid;
import androidx.annotation.NonNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.UUID;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.service.btclassic.BtClassicIoThread;
import nodomain.freeyourgadget.gadgetbridge.service.serial.AbstractSerialDeviceSupport;
public class PixelBudsAIOThread extends BtClassicIoThread {
private static final Logger LOG = LoggerFactory.getLogger(PixelBudsAIOThread.class);
private static final UUID UUID_DEVICE_CTRL = UUID.fromString("df21fe2c-2515-4fdb-8886-f12c4d67927c");
public PixelBudsAIOThread(final GBDevice gbDevice,
final Context context,
final PixelBudsAProtocol deviceProtocol,
final AbstractSerialDeviceSupport deviceSupport,
final BluetoothAdapter btAdapter) {
super(gbDevice, context, deviceProtocol, deviceSupport, btAdapter);
}
@Override
protected void initialize() {
setUpdateState(GBDevice.State.INITIALIZED);
}
@Override
@NonNull
protected UUID getUuidToConnect(@NonNull ParcelUuid[] uuids) {
return UUID_DEVICE_CTRL;
}
@Override
protected byte[] parseIncoming(InputStream inStream) throws IOException {
byte[] buffer = new byte[1048576]; //HUGE read
int bytes = inStream.read(buffer);
LOG.debug("read {} bytes. {}", bytes, hexdump(buffer, 0, bytes));
return Arrays.copyOf(buffer, bytes);
}
}