mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge
synced 2024-12-25 10:05:49 +01:00
Marstek B2500: support battery pass-though, cleanups
This commit is contained in:
parent
3ef6f092b3
commit
899f283a1b
@ -598,4 +598,5 @@ public class DeviceSettingsPreferenceConst {
|
|||||||
public static final String PREF_BATTERY_DISCHARGE_INTERVALS_SET = "battery_discharge_intervals_set";
|
public static final String PREF_BATTERY_DISCHARGE_INTERVALS_SET = "battery_discharge_intervals_set";
|
||||||
public static final String PREF_BATTERY_DISCHARGE_MANAUAL = "battery_discharge_manual";
|
public static final String PREF_BATTERY_DISCHARGE_MANAUAL = "battery_discharge_manual";
|
||||||
public static final String PREF_BATTERY_MINIMUM_CHARGE = "battery_minimum_charge";
|
public static final String PREF_BATTERY_MINIMUM_CHARGE = "battery_minimum_charge";
|
||||||
|
public static final String PREF_BATTERY_ALLOW_PASS_THOUGH = "battery_allow_pass_though";
|
||||||
}
|
}
|
||||||
|
@ -884,6 +884,7 @@ public class DeviceSpecificSettingsFragment extends AbstractPreferenceFragment i
|
|||||||
addPreferenceHandlerFor("lock");
|
addPreferenceHandlerFor("lock");
|
||||||
|
|
||||||
addPreferenceHandlerFor(PREF_BATTERY_MINIMUM_CHARGE);
|
addPreferenceHandlerFor(PREF_BATTERY_MINIMUM_CHARGE);
|
||||||
|
addPreferenceHandlerFor(PREF_BATTERY_ALLOW_PASS_THOUGH);
|
||||||
|
|
||||||
final Preference dischargeIntervalsSet = findPreference(PREF_BATTERY_DISCHARGE_INTERVALS_SET);
|
final Preference dischargeIntervalsSet = findPreference(PREF_BATTERY_DISCHARGE_INTERVALS_SET);
|
||||||
if (dischargeIntervalsSet != null) {
|
if (dischargeIntervalsSet != null) {
|
||||||
|
@ -61,6 +61,7 @@ public class MarstekB2500DeviceCoordinator extends AbstractDeviceCoordinator {
|
|||||||
@Override
|
@Override
|
||||||
public int[] getSupportedDeviceSpecificSettings(GBDevice device) {
|
public int[] getSupportedDeviceSpecificSettings(GBDevice device) {
|
||||||
return new int[]{
|
return new int[]{
|
||||||
|
R.xml.devicesettings_battery_allow_pass_though,
|
||||||
R.xml.devicesettings_battery_minimum_charge,
|
R.xml.devicesettings_battery_minimum_charge,
|
||||||
R.xml.devicesettings_battery_discharge_5
|
R.xml.devicesettings_battery_discharge_5
|
||||||
};
|
};
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package nodomain.freeyourgadget.gadgetbridge.service.devices.marstek;
|
package nodomain.freeyourgadget.gadgetbridge.service.devices.marstek;
|
||||||
|
|
||||||
|
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_BATTERY_ALLOW_PASS_THOUGH;
|
||||||
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_BATTERY_DISCHARGE_INTERVALS_SET;
|
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_BATTERY_DISCHARGE_INTERVALS_SET;
|
||||||
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_BATTERY_DISCHARGE_MANAUAL;
|
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_BATTERY_DISCHARGE_MANAUAL;
|
||||||
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_BATTERY_MINIMUM_CHARGE;
|
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_BATTERY_MINIMUM_CHARGE;
|
||||||
@ -45,6 +46,9 @@ public class MarstekB2500DeviceSupport extends AbstractBTLEDeviceSupport {
|
|||||||
private static final byte[] COMMAND_REBOOT = new byte[]{COMMAND_PREFIX, 0x06, COMMAND, OPCODE_REBOOT, 0x01, 0x72};
|
private static final byte[] COMMAND_REBOOT = new byte[]{COMMAND_PREFIX, 0x06, COMMAND, OPCODE_REBOOT, 0x01, 0x72};
|
||||||
private static final byte[] COMMAND_SET_AUTO_DISCHARGE = new byte[]{COMMAND_PREFIX, 0x06, COMMAND, 0x11, 0x00, 0x47};
|
private static final byte[] COMMAND_SET_AUTO_DISCHARGE = new byte[]{COMMAND_PREFIX, 0x06, COMMAND, 0x11, 0x00, 0x47};
|
||||||
private static final byte[] COMMAND_SET_POWERMETER_CHANNEL1 = new byte[]{COMMAND_PREFIX, 0x06, COMMAND, 0x2a, 0x00, 0x7c};
|
private static final byte[] COMMAND_SET_POWERMETER_CHANNEL1 = new byte[]{COMMAND_PREFIX, 0x06, COMMAND, 0x2a, 0x00, 0x7c};
|
||||||
|
private static final byte[] COMMAND_SET_BATTERY_ALLOW_PASS_THOUGH = new byte[]{COMMAND_PREFIX, 0x06, COMMAND, 0x0d, 0x00, 0x5b};
|
||||||
|
private static final byte[] COMMAND_SET_BATTERY_DISALLOW_PASS_THOUGH = new byte[]{COMMAND_PREFIX, 0x06, COMMAND, 0x0d, 0x01, 0x5a};
|
||||||
|
|
||||||
|
|
||||||
private static final Logger LOG = LoggerFactory.getLogger(MarstekB2500DeviceSupport.class);
|
private static final Logger LOG = LoggerFactory.getLogger(MarstekB2500DeviceSupport.class);
|
||||||
private int firmwareVersion;
|
private int firmwareVersion;
|
||||||
@ -97,7 +101,7 @@ public class MarstekB2500DeviceSupport extends AbstractBTLEDeviceSupport {
|
|||||||
getDevice().setFirmwareVersion2("N/A");
|
getDevice().setFirmwareVersion2("N/A");
|
||||||
builder.requestMtu(512);
|
builder.requestMtu(512);
|
||||||
builder.notify(getCharacteristic(UUID_CHARACTERISTIC_MAIN), true);
|
builder.notify(getCharacteristic(UUID_CHARACTERISTIC_MAIN), true);
|
||||||
builder.wait(3000);
|
builder.wait(3500);
|
||||||
builder.write(getCharacteristic(UUID_CHARACTERISTIC_MAIN), COMMAND_GET_INFOS1);
|
builder.write(getCharacteristic(UUID_CHARACTERISTIC_MAIN), COMMAND_GET_INFOS1);
|
||||||
builder.wait(750);
|
builder.wait(750);
|
||||||
builder.write(getCharacteristic(UUID_CHARACTERISTIC_MAIN), COMMAND_GET_INFOS2);
|
builder.write(getCharacteristic(UUID_CHARACTERISTIC_MAIN), COMMAND_GET_INFOS2);
|
||||||
@ -130,8 +134,9 @@ public class MarstekB2500DeviceSupport extends AbstractBTLEDeviceSupport {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSendConfiguration(final String config) {
|
public void onSendConfiguration(final String config) {
|
||||||
if (config.equals(PREF_BATTERY_DISCHARGE_INTERVALS_SET)) {
|
|
||||||
Prefs devicePrefs = new Prefs(GBApplication.getDeviceSpecificSharedPrefs(getDevice().getAddress()));
|
Prefs devicePrefs = new Prefs(GBApplication.getDeviceSpecificSharedPrefs(getDevice().getAddress()));
|
||||||
|
switch (config) {
|
||||||
|
case PREF_BATTERY_DISCHARGE_INTERVALS_SET:
|
||||||
if (devicePrefs.getBoolean(PREF_BATTERY_DISCHARGE_MANAUAL, true)) {
|
if (devicePrefs.getBoolean(PREF_BATTERY_DISCHARGE_MANAUAL, true)) {
|
||||||
sendCommand("set discharge intervals", encodeDischargeIntervalsFromPreferences());
|
sendCommand("set discharge intervals", encodeDischargeIntervalsFromPreferences());
|
||||||
} else {
|
} else {
|
||||||
@ -139,9 +144,16 @@ public class MarstekB2500DeviceSupport extends AbstractBTLEDeviceSupport {
|
|||||||
sendCommand("set channel auto", COMMAND_SET_POWERMETER_CHANNEL1);
|
sendCommand("set channel auto", COMMAND_SET_POWERMETER_CHANNEL1);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
} else if (config.equals(PREF_BATTERY_MINIMUM_CHARGE)) {
|
case PREF_BATTERY_MINIMUM_CHARGE:
|
||||||
sendCommand("set minimum charge", encodeMinimumChargeFromPreferences());
|
sendCommand("set minimum charge", encodeMinimumChargeFromPreferences());
|
||||||
return;
|
return;
|
||||||
|
case PREF_BATTERY_ALLOW_PASS_THOUGH:
|
||||||
|
if (devicePrefs.getBoolean(PREF_BATTERY_ALLOW_PASS_THOUGH, true)) {
|
||||||
|
sendCommand("set allow pass-though", COMMAND_SET_BATTERY_ALLOW_PASS_THOUGH);
|
||||||
|
} else {
|
||||||
|
sendCommand("set disallow pass-though", COMMAND_SET_BATTERY_DISALLOW_PASS_THOUGH);
|
||||||
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG.warn("Unknown config changed: {}", config);
|
LOG.warn("Unknown config changed: {}", config);
|
||||||
@ -154,7 +166,7 @@ public class MarstekB2500DeviceSupport extends AbstractBTLEDeviceSupport {
|
|||||||
buf.order(ByteOrder.LITTLE_ENDIAN);
|
buf.order(ByteOrder.LITTLE_ENDIAN);
|
||||||
buf.position(12); // skip header and unknown
|
buf.position(12); // skip header and unknown
|
||||||
firmwareVersion = buf.get();
|
firmwareVersion = buf.get();
|
||||||
boolean charge_before_discharge = buf.get() == 0x01;
|
boolean battery_allow_passthough = buf.get() != 0x01;
|
||||||
boolean manual_discharge_intervals = buf.get() != 0x01;
|
boolean manual_discharge_intervals = buf.get() != 0x01;
|
||||||
buf.position(buf.position() + 3); // skip unknown
|
buf.position(buf.position() + 3); // skip unknown
|
||||||
byte battery_max_use = buf.get();
|
byte battery_max_use = buf.get();
|
||||||
@ -169,7 +181,7 @@ public class MarstekB2500DeviceSupport extends AbstractBTLEDeviceSupport {
|
|||||||
|
|
||||||
devicePrefsEdit.putString(PREF_BATTERY_MINIMUM_CHARGE, String.valueOf(battery_minimum_charge));
|
devicePrefsEdit.putString(PREF_BATTERY_MINIMUM_CHARGE, String.valueOf(battery_minimum_charge));
|
||||||
devicePrefsEdit.putBoolean(PREF_BATTERY_DISCHARGE_MANAUAL, manual_discharge_intervals);
|
devicePrefsEdit.putBoolean(PREF_BATTERY_DISCHARGE_MANAUAL, manual_discharge_intervals);
|
||||||
|
devicePrefsEdit.putBoolean(PREF_BATTERY_ALLOW_PASS_THOUGH, battery_allow_passthough);
|
||||||
devicePrefsEdit.apply();
|
devicePrefsEdit.apply();
|
||||||
devicePrefsEdit.commit();
|
devicePrefsEdit.commit();
|
||||||
|
|
||||||
|
@ -3559,14 +3559,16 @@
|
|||||||
<string name="about_build_details_copied_to_clipboard">Build details copied to clipboard</string>
|
<string name="about_build_details_copied_to_clipboard">Build details copied to clipboard</string>
|
||||||
<string name="devicetype_marstek_b2500">Marstek B2500</string>
|
<string name="devicetype_marstek_b2500">Marstek B2500</string>
|
||||||
<string name="battery_discharge_intervals">Battery Discharge Intervals</string>
|
<string name="battery_discharge_intervals">Battery Discharge Intervals</string>
|
||||||
<string name="discharge_interval_1">Discharge Interval 1</string>
|
<string name="discharge_interval_1">Discharge interval 1</string>
|
||||||
<string name="discharge_interval_2">Discharge Interval 2</string>
|
<string name="discharge_interval_2">Discharge interval 2</string>
|
||||||
<string name="discharge_interval_3">Discharge Interval 3</string>
|
<string name="discharge_interval_3">Discharge interval 3</string>
|
||||||
<string name="discharge_interval_4">Discharge Interval 4</string>
|
<string name="discharge_interval_4">Discharge interval 4</string>
|
||||||
<string name="discharge_interval_5">Discharge Interval 5</string>
|
<string name="discharge_interval_5">Discharge interval 5</string>
|
||||||
<string name="power_w">Power in W</string>
|
<string name="power_w">Power in W</string>
|
||||||
<string name="manual_discharge_summary">when disabled, this assumes intelligent discharge controlled by an external power meter (not supported by Gadgetbridge)</string>
|
<string name="manual_discharge_summary">when disabled, this assumes intelligent discharge controlled by an external power meter (not supported by Gadgetbridge)</string>
|
||||||
<string name="manual_discharge">Manual Discharge Intervals</string>
|
<string name="manual_discharge">Manual discharge intervals</string>
|
||||||
<string name="summary_battery_discharge_intervals_set">Send configuration below to device</string>
|
<string name="summary_battery_discharge_intervals_set">Send configuration below to device</string>
|
||||||
<string name="battery_minimum_charge">Minimum allowed charge in %</string>
|
<string name="battery_minimum_charge">Minimum battery charge in %</string>
|
||||||
|
<string name="battery_allow_pass_though_summary">When enabled, the battery can be charged while discharging</string>
|
||||||
|
<string name="battery_allow_pass_through">Allow battery pass-though</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<SwitchPreferenceCompat
|
||||||
|
android:defaultValue="false"
|
||||||
|
android:key="battery_charge_before_discharge"
|
||||||
|
android:layout="@layout/preference_checkbox"
|
||||||
|
android:summary="@string/battery_allow_pass_though_summary"
|
||||||
|
android:title="@string/battery_allow_pass_through" />
|
||||||
|
</androidx.preference.PreferenceScreen>
|
@ -2,7 +2,7 @@
|
|||||||
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
<PreferenceScreen
|
<PreferenceScreen
|
||||||
android:icon="@drawable/ic_battery"
|
android:icon="@drawable/ic_access_time"
|
||||||
android:key="screen_battery_discharge settings"
|
android:key="screen_battery_discharge settings"
|
||||||
android:persistent="false"
|
android:persistent="false"
|
||||||
android:title="@string/battery_discharge_intervals">
|
android:title="@string/battery_discharge_intervals">
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
<EditTextPreference
|
<EditTextPreference
|
||||||
android:icon="@drawable/ic_battery"
|
|
||||||
android:defaultValue="10"
|
android:defaultValue="10"
|
||||||
android:inputType="number"
|
android:inputType="number"
|
||||||
android:key="battery_minimum_charge"
|
android:key="battery_minimum_charge"
|
||||||
|
Loading…
Reference in New Issue
Block a user