mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge
synced 2024-11-25 19:36:50 +01:00
Nothing Ear (1): add multiple batteries support
This commit is contained in:
parent
3609af3a18
commit
64b52e5edf
@ -10,6 +10,7 @@ import java.nio.ByteOrder;
|
|||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
@ -60,6 +61,12 @@ public class NothingProtocol extends GBDeviceProtocol {
|
|||||||
private static final short in_ear_detection = (short) 0xf004;
|
private static final short in_ear_detection = (short) 0xf004;
|
||||||
private static final short audio_mode = (short) 0xf00f;
|
private static final short audio_mode = (short) 0xf00f;
|
||||||
|
|
||||||
|
|
||||||
|
private HashMap<Byte, GBDeviceEventBatteryInfo> batteries;
|
||||||
|
private static final byte battery_earphone_left = 0x02;
|
||||||
|
private static final byte battery_earphone_right = 0x03;
|
||||||
|
private static final byte battery_case = 0x04;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public GBDeviceEvent[] decodeResponse(byte[] responseData) {
|
public GBDeviceEvent[] decodeResponse(byte[] responseData) {
|
||||||
List<GBDeviceEvent> devEvts = new ArrayList<>();
|
List<GBDeviceEvent> devEvts = new ArrayList<>();
|
||||||
@ -97,7 +104,7 @@ public class NothingProtocol extends GBDeviceProtocol {
|
|||||||
switch (getRequestCommand(command)) {
|
switch (getRequestCommand(command)) {
|
||||||
case battery_status:
|
case battery_status:
|
||||||
case battery_status2:
|
case battery_status2:
|
||||||
devEvts.add(handleBatteryInfo(payload));
|
devEvts.addAll(handleBatteryInfo(payload));
|
||||||
break;
|
break;
|
||||||
case audio_mode_status:
|
case audio_mode_status:
|
||||||
devEvts.add(handleAudioModeStatus(payload));
|
devEvts.add(handleAudioModeStatus(payload));
|
||||||
@ -218,7 +225,17 @@ public class NothingProtocol extends GBDeviceProtocol {
|
|||||||
return super.encodeSendConfiguration(config);
|
return super.encodeSendConfiguration(config);
|
||||||
}
|
}
|
||||||
|
|
||||||
private GBDeviceEvent handleBatteryInfo(byte[] payload) {
|
@Override
|
||||||
|
public byte[] encodeSetTime() {
|
||||||
|
// This are earphones, there is no time to set here. However this method gets called soon
|
||||||
|
// after connecting, hence we use it to perform some initializations.
|
||||||
|
// TODO: Find a way to send more requests during the first connection
|
||||||
|
return encodeAudioModeStatusReq();
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<GBDeviceEvent> handleBatteryInfo(byte[] payload) {
|
||||||
|
List<GBDeviceEvent> batEvts = new ArrayList<>();
|
||||||
|
|
||||||
//LOG.debug("Battery payload: " + hexdump(payload));
|
//LOG.debug("Battery payload: " + hexdump(payload));
|
||||||
|
|
||||||
/* payload:
|
/* payload:
|
||||||
@ -234,22 +251,31 @@ public class NothingProtocol extends GBDeviceProtocol {
|
|||||||
If one of the batteries is recharging, we consider the battery as recharging.
|
If one of the batteries is recharging, we consider the battery as recharging.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
GBDeviceEventBatteryInfo evBattery = new GBDeviceEventBatteryInfo();
|
// GBDeviceEventBatteryInfo evBattery = new GBDeviceEventBatteryInfo();
|
||||||
evBattery.level = 0;
|
// evBattery.level = 0;
|
||||||
boolean batteryCharging = false;
|
// boolean batteryCharging = false;
|
||||||
|
|
||||||
int numBatteries = payload[0];
|
int numBatteries = payload[0];
|
||||||
for (int i = 0; i < numBatteries; i++) {
|
for (int i = 0; i < numBatteries; i++) {
|
||||||
evBattery.level += (short) ((payload[2 + 2 * i] & MASK_BATTERY) / numBatteries);
|
|
||||||
if (!batteryCharging)
|
batteries.get(payload[1 + 2 * i]).level = (payload[2 + 2 * i] & MASK_BATTERY);
|
||||||
batteryCharging = ((payload[2 + 2 * i] & MASK_BATTERY_CHARGING) == MASK_BATTERY_CHARGING);
|
batteries.get(payload[1 + 2 * i]).state =
|
||||||
|
((payload[2 + 2 * i] & MASK_BATTERY_CHARGING) == MASK_BATTERY_CHARGING) ? BatteryState.BATTERY_CHARGING : BatteryState.BATTERY_NORMAL;
|
||||||
|
|
||||||
|
batEvts.add(batteries.get(payload[1 + 2 * i]));
|
||||||
|
|
||||||
|
// evBattery.level += (short) ((payload[2 + 2 * i] & MASK_BATTERY) / numBatteries);
|
||||||
|
// if (!batteryCharging) {
|
||||||
|
// batteryCharging = ((payload[2 + 2 * i] & MASK_BATTERY_CHARGING) == MASK_BATTERY_CHARGING);
|
||||||
|
// }
|
||||||
// LOG.debug("single battery level: " + hexdump(payload, 2+2*i,1) +"-"+ ((payload[2+2*i] & 0xff))+":" + evBattery.level);
|
// LOG.debug("single battery level: " + hexdump(payload, 2+2*i,1) +"-"+ ((payload[2+2*i] & 0xff))+":" + evBattery.level);
|
||||||
}
|
}
|
||||||
|
|
||||||
evBattery.state = BatteryState.UNKNOWN;
|
// evBattery.state = BatteryState.UNKNOWN;
|
||||||
evBattery.state = batteryCharging ? BatteryState.BATTERY_CHARGING : evBattery.state;
|
// evBattery.state = batteryCharging ? BatteryState.BATTERY_CHARGING : evBattery.state;
|
||||||
|
|
||||||
return evBattery;
|
// return evBattery;
|
||||||
|
return batEvts;
|
||||||
}
|
}
|
||||||
|
|
||||||
private short getRequestCommand(short command) {
|
private short getRequestCommand(short command) {
|
||||||
@ -270,6 +296,15 @@ public class NothingProtocol extends GBDeviceProtocol {
|
|||||||
|
|
||||||
protected NothingProtocol(GBDevice device) {
|
protected NothingProtocol(GBDevice device) {
|
||||||
super(device);
|
super(device);
|
||||||
|
batteries = new HashMap<>(3);
|
||||||
|
|
||||||
|
batteries.put(battery_earphone_left, new GBDeviceEventBatteryInfo());
|
||||||
|
batteries.put(battery_earphone_right, new GBDeviceEventBatteryInfo());
|
||||||
|
batteries.put(battery_case, new GBDeviceEventBatteryInfo());
|
||||||
|
|
||||||
|
batteries.get(battery_case).batteryIndex=0;
|
||||||
|
batteries.get(battery_earphone_left).batteryIndex=1;
|
||||||
|
batteries.get(battery_earphone_right).batteryIndex=2;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user