diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/qc35/QC35Coordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/qc35/QC35Coordinator.java index 4666c9815a..8b8d9301dc 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/qc35/QC35Coordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/qc35/QC35Coordinator.java @@ -21,6 +21,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; @@ -70,6 +71,13 @@ public class QC35Coordinator extends AbstractBLClassicDeviceCoordinator { }; } + @Override + public DeviceSpecificSettings getDeviceSpecificSettings(final GBDevice device) { + final DeviceSpecificSettings deviceSpecificSettings = new DeviceSpecificSettings(); + deviceSpecificSettings.addRootScreen(R.xml.devicesettings_headphones); + return deviceSpecificSettings; + } + @Override public DeviceCoordinator.DeviceKind getDeviceKind(@NonNull GBDevice device) { return DeviceKind.HEADPHONES; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qc35/QC35BaseSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qc35/QC35BaseSupport.java index 09ab60907d..8f73803879 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qc35/QC35BaseSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qc35/QC35BaseSupport.java @@ -16,23 +16,39 @@ along with this program. If not, see . */ package nodomain.freeyourgadget.gadgetbridge.service.devices.qc35; -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 QC35BaseSupport extends AbstractSerialDeviceSupport { - @Override - public boolean useAutoConnect() { - return false; +import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst; +import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; +import nodomain.freeyourgadget.gadgetbridge.service.btbr.TransactionBuilder; +import nodomain.freeyourgadget.gadgetbridge.service.serial.AbstractHeadphoneSerialDeviceSupportV2; + +public class QC35BaseSupport extends AbstractHeadphoneSerialDeviceSupportV2 { + public QC35BaseSupport() { + addSupportedService(UUID.fromString("00001101-0000-1000-8000-00805f9b34fb")); } @Override - protected GBDeviceProtocol createDeviceProtocol() { + protected QC35Protocol createDeviceProtocol() { return new QC35Protocol(getDevice()); } @Override - protected GBDeviceIoThread createDeviceIOThread() { - return new QC35IOThread(getDevice(), getContext(), (QC35Protocol) createDeviceProtocol(), this, getBluetoothAdapter()); + protected TransactionBuilder initializeDevice(final TransactionBuilder builder) { + + byte[] connectPayload = new byte[]{0x00, 0x01, 0x01, 0x00}; + byte[] ncPayload = mDeviceProtocol.encodeSendConfiguration(DeviceSettingsPreferenceConst.PREF_QC35_NOISE_CANCELLING_LEVEL); + byte[] batteryPayload = new byte[]{0x02, 0x02, 0x01, 0x00}; + byte[] packet = new byte[connectPayload.length + ncPayload.length + batteryPayload.length]; + System.arraycopy(connectPayload, 0, packet, 0, connectPayload.length); + System.arraycopy(ncPayload, 0, packet, connectPayload.length, ncPayload.length); + System.arraycopy(batteryPayload, 0, packet, ncPayload.length + connectPayload.length, batteryPayload.length); + + getDevice().setFirmwareVersion("0"); + + builder.setDeviceState(GBDevice.State.INITIALIZED); + builder.write(packet); + + return builder; } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qc35/QC35IOThread.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qc35/QC35IOThread.java deleted file mode 100644 index 0e75f3deff..0000000000 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qc35/QC35IOThread.java +++ /dev/null @@ -1,78 +0,0 @@ -/* Copyright (C) 2021-2024 Daniel Dakhno - - This file is part of Gadgetbridge. - - Gadgetbridge is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Gadgetbridge is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . */ -package nodomain.freeyourgadget.gadgetbridge.service.devices.qc35; - -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.UUID; - -import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst; -import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; -import nodomain.freeyourgadget.gadgetbridge.service.btclassic.BtClassicIoThread; -import nodomain.freeyourgadget.gadgetbridge.service.serial.AbstractSerialDeviceSupport; - -public class QC35IOThread extends BtClassicIoThread { - QC35Protocol protocol; - byte[] buffer = new byte[1024]; - - private Logger logger = LoggerFactory.getLogger(getClass()); - - public QC35IOThread(GBDevice gbDevice, Context context, QC35Protocol deviceProtocol, AbstractSerialDeviceSupport deviceSupport, BluetoothAdapter btAdapter) { - super(gbDevice, context, deviceProtocol, deviceSupport, btAdapter); - this.protocol = deviceProtocol; - } - - @NonNull - @Override - protected UUID getUuidToConnect(@NonNull ParcelUuid[] uuids) { - return UUID.fromString("00001101-0000-1000-8000-00805f9b34fb"); - } - - @Override - protected void initialize() { - super.initialize(); - - byte[] connectPayload = new byte[]{0x00, 0x01, 0x01, 0x00}; - byte[] ncPayload = protocol.encodeSendConfiguration(DeviceSettingsPreferenceConst.PREF_QC35_NOISE_CANCELLING_LEVEL); - byte[] batteryPayload = new byte[]{0x02, 0x02, 0x01, 0x00}; - byte[] packet = new byte[connectPayload.length + ncPayload.length + batteryPayload.length]; - System.arraycopy(connectPayload, 0, packet, 0, connectPayload.length); - System.arraycopy(ncPayload, 0, packet, connectPayload.length, ncPayload.length); - System.arraycopy(batteryPayload, 0, packet, ncPayload.length + connectPayload.length, batteryPayload.length); - - getDevice().setFirmwareVersion("0"); - - write(packet); - } - @Override - protected byte[] parseIncoming(InputStream inStream) throws IOException { - int size = inStream.read(buffer); - logger.debug("read bytes: {}", size); - byte[] actual = new byte[size]; - System.arraycopy(buffer, 0, actual, 0, size); - return actual; - } -}