oppo: dynamically request supported misc configs

This commit is contained in:
NTeditor
2026-06-20 03:21:55 +03:00
parent ced93c23a0
commit 56d05b8d1d
2 changed files with 35 additions and 9 deletions
@@ -517,13 +517,18 @@ public class OppoHeadphonesProtocol extends GBDeviceProtocol {
return encodeMessage(OppoCommand.MISC_CONFIG_SET, payload); return encodeMessage(OppoCommand.MISC_CONFIG_SET, payload);
} }
public byte[] encodeMiscConfigReq() { public byte[] encodeMiscConfigReq(List<MiscConfigType> types) {
return encodeMessage(OppoCommand.MISC_CONFIG_REQ, new byte[]{ if (types == null || types.isEmpty()) {
(byte) 0x03, return encodeMessage(OppoCommand.MISC_CONFIG_REQ, new byte[]{0x00});
(byte) MiscConfigType.LDAC.getCode(), }
(byte) MiscConfigType.MULTIPOINT.getCode(),
(byte) MiscConfigType.GAME_MODE.getCode() byte[] payload = new byte[1 + types.size()];
}); payload[0] = (byte) types.size();
for (int i = 0; i < types.size(); i++) {
payload[i + 1] = (byte) types.get(i).getCode();
}
return encodeMessage(OppoCommand.MISC_CONFIG_REQ, payload);
} }
public byte[] encodeAncConfigSet(final AncConfigValue mode) { public byte[] encodeAncConfigSet(final AncConfigValue mode) {
@@ -22,11 +22,15 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.util.UUID; import java.util.UUID;
import java.util.List;
import java.util.ArrayList;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.BatteryState; import nodomain.freeyourgadget.gadgetbridge.model.BatteryState;
import nodomain.freeyourgadget.gadgetbridge.service.btbr.TransactionBuilder; import nodomain.freeyourgadget.gadgetbridge.service.btbr.TransactionBuilder;
import nodomain.freeyourgadget.gadgetbridge.service.serial.AbstractHeadphoneSerialDeviceSupportV2; import nodomain.freeyourgadget.gadgetbridge.service.serial.AbstractHeadphoneSerialDeviceSupportV2;
import nodomain.freeyourgadget.gadgetbridge.service.devices.oppo.commands.MiscConfigType;
import nodomain.freeyourgadget.gadgetbridge.devices.oppo.OppoHeadphonesCoordinator;
public class OppoHeadphonesSupport extends AbstractHeadphoneSerialDeviceSupportV2<OppoHeadphonesProtocol> { public class OppoHeadphonesSupport extends AbstractHeadphoneSerialDeviceSupportV2<OppoHeadphonesProtocol> {
private static final Logger LOG = LoggerFactory.getLogger(OppoHeadphonesSupport.class); private static final Logger LOG = LoggerFactory.getLogger(OppoHeadphonesSupport.class);
@@ -70,9 +74,26 @@ public class OppoHeadphonesSupport extends AbstractHeadphoneSerialDeviceSupportV
@Override @Override
protected TransactionBuilder initializeDevice(final TransactionBuilder builder) { protected TransactionBuilder initializeDevice(final TransactionBuilder builder) {
builder.write(mDeviceProtocol.encodeFirmwareVersionReq()); builder.write(mDeviceProtocol.encodeFirmwareVersionReq());
builder.write(mDeviceProtocol.encodeMiscConfigReq());
final OppoHeadphonesCoordinator coordinator = (OppoHeadphonesCoordinator) getDevice().getDeviceCoordinator();
final List<MiscConfigType> supportedMiscConfigs = new ArrayList<>();
if (coordinator.supportsLdac(getDevice())) {
supportedMiscConfigs.add(MiscConfigType.LDAC);
}
if (coordinator.supportsMultipoint(getDevice())) {
supportedMiscConfigs.add(MiscConfigType.MULTIPOINT);
}
if (coordinator.supportsGameMode(getDevice())) {
supportedMiscConfigs.add(MiscConfigType.GAME_MODE);
}
if (!supportedMiscConfigs.isEmpty()) {
builder.write(mDeviceProtocol.encodeMiscConfigReq(supportedMiscConfigs));
}
builder.write(mDeviceProtocol.encodeTouchConfigReq()); builder.write(mDeviceProtocol.encodeTouchConfigReq());
if (coordinator.supportsAnc(getDevice())) {
builder.write(mDeviceProtocol.encodeAncConfigReq()); builder.write(mDeviceProtocol.encodeAncConfigReq());
}
builder.write(mDeviceProtocol.encodeBatteryReq()); builder.write(mDeviceProtocol.encodeBatteryReq());
builder.setDeviceState(GBDevice.State.INITIALIZED); builder.setDeviceState(GBDevice.State.INITIALIZED);
scheduleBatteryRequestRetry(); scheduleBatteryRequestRetry();